Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
vaporizer.qc
Go to the documentation of this file.
1#include "vaporizer.qh"
2
3#ifdef GAMEQC
4REGISTER_NET_TEMP(TE_CSQC_VAPORBEAMPARTICLE)
5#endif
6
7#ifdef SVQC
9{
11 WriteHeader(MSG_BROADCAST, TE_CSQC_VAPORBEAMPARTICLE);
12 WriteVector(MSG_BROADCAST, w_shotorg);
13 WriteVector(MSG_BROADCAST, v);
16}
17
18#endif // SVQC
19#ifdef CSQC
20
25
30
38
39.vector vorg1, vorg2;
41{
42 //draw either the old v2.3 beam or the new beam
44
45 string tex = (this.cnt)
46 ? "particles/gauntletbeam"
47 : "particles/lgbeam";
48 vector rgb = WEP_VAPORIZER.m_color;
50 rgb = colormapPaletteColor(entcs_GetClientColors(this.sv_entnum - 1) & 0x0F, true);
51
53
54 float fail = this.nextthink - time;
55
62
63 /*if (!MUTATOR_CALLHOOK(Particles_VaporizerBeam, this.vorg1, this.vorg2))
64 if (autocvar_cl_particles_oldvortexbeam)
65 WarpZone_TrailParticles_WithMultiplier(NULL, particleeffectnum(EFFECT_VORTEX_BEAM_OLD), this.vorg1, this.vorg2, 1, PARTICLES_USEALPHA | PARTICLES_USEFADE);
66 else
67 WarpZone_TrailParticles_WithMultiplier(NULL, particleeffectnum(EFFECT_VORTEX_BEAM), this.vorg1, this.vorg2, 1, PARTICLES_USEALPHA | PARTICLES_USEFADE);*/
68}
69
70NET_HANDLE(TE_CSQC_VAPORBEAMPARTICLE, bool isNew)
71{
72 Net_Accept(vortex_beam);
73 setthink(this, SUB_Remove);
75 this.draw = VaporizerBeam_Draw;
76 if (isNew)
77 IL_PUSH(g_drawables, this);
78 this.drawmask = MASK_NORMAL;
79
80 this.vorg1 = ReadVector();
81 this.vorg2 = ReadVector();
82 this.cnt = ReadByte();
83 int myowner = ReadByte();
84 this.owner = playerslots[myowner - 1];
85 this.sv_entnum = myowner;
86
87 //pointparticles(EFFECT_VORTEX_MUZZLEFLASH, this.vorg1, normalize(this.vorg2 - this.vorg1) * 1000, 1);
88
90 {
93 : WEP_VAPORIZER.m_color;
94
96 WarpZone_TrailParticles_WithMultiplier(NULL, particleeffectnum(((this.cnt) ? EFFECT_VAPORIZER_BEAM_HIT : EFFECT_VAPORIZER_BEAM)), this.vorg1, this.vorg2, 1, PARTICLES_USECOLOR);
97 this.draw = func_null;
98 this.drawmask = MASK_NORMAL;
99 delete(this);
100 }
101
102 return true;
103}
104
105#endif // CSQC
106#ifdef SVQC
107
108void W_RocketMinsta_Explosion(entity actor, .entity weaponentity, vector loc)
109{
110 if (accuracy_canbegooddamage(actor))
111 accuracy_add(actor, WEP_DEVASTATOR, autocvar_g_rm_damage, 0, 0); // add to fired
112
113 entity dmgent = spawn();
114 dmgent.owner = dmgent.realowner = actor;
115 setorigin(dmgent, loc);
116 RadiusDamage(dmgent, actor,
120 NULL,
121 NULL,
123 WEP_DEVASTATOR.m_id | HITTYPE_SPLASH,
124 weaponentity,
125 NULL
126 );
127
128 delete(dmgent);
129}
130
131void W_Vaporizer_Attack(Weapon thiswep, entity actor, .entity weaponentity)
132{
133 bool flying = IsFlying(actor); // do this BEFORE to make the trace values from FireRailgunBullet last
134 float vaporizer_damage = (WEP_CVAR_PRI(WEP_VAPORIZER, damage) > 0) ? WEP_CVAR_PRI(WEP_VAPORIZER, damage) : 10000;
135
136 W_SetupShot(actor, weaponentity, true, 0, SND_Null, CH_WEAPON_A, vaporizer_damage, thiswep.m_id);
137 // handle sound separately so we can change the volume
138 // added bonus: no longer plays the strength sound (strength gives no bonus to instakill anyway)
139 sound(actor, CH_WEAPON_A, SND_VAPORIZER_FIRE, VOL_BASE * 0.8, ATTEN_NORM);
140
141 yoda = 0;
142 impressive_hits = 0;
144 vaporizer_damage,
145 true,
146 WEP_CVAR_PRI(WEP_VAPORIZER, force),
147 WEP_CVAR_PRI(WEP_VAPORIZER, damagefalloff_mindist),
148 WEP_CVAR_PRI(WEP_VAPORIZER, damagefalloff_maxdist),
149 WEP_CVAR_PRI(WEP_VAPORIZER, damagefalloff_halflife),
150 WEP_CVAR_PRI(WEP_VAPORIZER, damagefalloff_forcehalflife),
151 thiswep.m_id
152 );
153
154 // do this now, as goodhits is disabled below
156 W_MuzzleFlash(thiswep, actor, weaponentity, w_shotorg, normalize(v - w_shotorg));
158
159 if (yoda && flying)
160 Send_Notification(NOTIF_ONE, actor, MSG_ANNCE, ANNCE_ACHIEVEMENT_YODA);
161 if (impressive_hits && actor.vaporizer_lasthit)
162 {
163 Send_Notification(NOTIF_ONE, actor, MSG_ANNCE, ANNCE_ACHIEVEMENT_IMPRESSIVE);
164 impressive_hits = 0; // only every second time
165 }
166
167 actor.vaporizer_lasthit = impressive_hits;
168
169 if (autocvar_g_rm
171 W_RocketMinsta_Explosion(actor, weaponentity, trace_endpos);
172
173 W_DecreaseAmmo(thiswep, actor, ((autocvar_g_instagib) ? 1 : WEP_CVAR_PRI(WEP_VAPORIZER, ammo)), weaponentity);
174}
175
176void W_RocketMinsta_Laser_Damage(entity this, entity directhitentity)
177{
178 int laser_count = max(1, this.rm_laser_count);
179 float laser_force = autocvar_g_rm_laser_force / laser_count;
180 float laser_damage = autocvar_g_rm_laser_damage / laser_count;
181 RadiusDamage(this, this.realowner,
182 laser_damage,
183 laser_damage,
185 NULL,
186 NULL,
187 laser_force,
189 this.weaponentity_fld,
190 directhitentity
191 );
192}
193
194void W_RocketMinsta_Laser_Explode(entity this, entity directhitentity)
195{
196 if (directhitentity.takedamage == DAMAGE_AIM
197 && IS_PLAYER(directhitentity) && DIFF_TEAM(this.realowner, directhitentity) && !IS_DEAD(directhitentity)
198 && IsFlying(directhitentity))
199 Send_Notification(NOTIF_ONE, this.realowner, MSG_ANNCE, ANNCE_ACHIEVEMENT_ELECTROBITCH);
200
201 this.event_damage = func_null;
202 this.takedamage = DAMAGE_NO;
203 W_RocketMinsta_Laser_Damage(this, directhitentity);
204 delete(this);
205}
206
208{
209 W_RocketMinsta_Laser_Explode(this, trigger); // we probably don't want trigger used here, but this matches closest to old behaviour
210}
211
213{
215 //W_RocketMinsta_Laser_Explode ();
217 delete(this);
218}
219
220// mode 0 fires many projectiles
221// mode 1 fires 1 projectile
222void W_RocketMinsta_Attack(entity actor, .entity weaponentity, int mode)
223{
224 makevectors(actor.v_angle);
225
226 entity proj;
227 int laser_count = max(1, autocvar_g_rm_laser_count);
228 int total = (mode == 0) ? laser_count : 1;
229 Sound snd = (mode == 0) ? SND_CRYLINK_FIRE : SND_ELECTRO_FIRE2; // WEAPONTODO multiple references to other weapons here!
230 W_SetupShot_ProjectileSize(actor, weaponentity, '0 0 -3', '0 0 -3', false, 2, snd, CH_WEAPON_A, autocvar_g_rm_laser_damage, WEP_ELECTRO.m_id);
231
232 // uses electro effects
233 W_MuzzleFlash(WEP_ELECTRO, actor, weaponentity, w_shotorg, w_shotdir);
234
235 for (int counter = 0; counter < total; ++counter)
236 {
237 proj = new(plasma_prim);
238 proj.owner = proj.realowner = actor;
239 proj.bot_dodge = true;
240 proj.bot_dodgerating = autocvar_g_rm_laser_damage;
243 proj.nextthink = time + autocvar_g_rm_laser_lifetime;
245 proj.projectiledeathtype = WEP_ELECTRO.m_id;
246 proj.weaponentity_fld = weaponentity;
247 setorigin(proj, w_shotorg);
248
249 proj.rm_laser_count = total;
250
251 //W_SetupProjectileVelocity(proj, autocvar_g_rm_laser_speed, spread * (rndspread ? random() : 1) * autocvar_g_rm_laser_speed);
252
254 if (mode == 0)
255 {
257 //W_SETUPPROJECTILEVELOCITY(proj, g_balance_minstanex_laser);
258 proj.velocity = (w_shotdir + (((counter + 0.5) / total) * 2 - 1) * v_right * spread) * cvar("g_rm_laser_speed");
259 proj.velocity.z += cvar("g_rm_laser_zspread") * (random() - 0.5);
260 }
261 else
262 proj.velocity = w_shotdir * autocvar_g_rm_laser_speed;
263 proj.velocity = W_CalculateProjectileVelocity(actor, actor.velocity, proj.velocity, true);
264 proj.angles = vectoangles(proj.velocity);
266 setsize(proj, '0 0 -3', '0 0 -3');
267 proj.flags = FL_PROJECTILE;
268 IL_PUSH(g_projectiles, proj);
269 IL_PUSH(g_bot_dodge, proj);
270 proj.missile_flags = MIF_SPLASH;
271
273
274 MUTATOR_CALLHOOK(EditProjectile, actor, proj);
275 }
276}
277
278METHOD(Vaporizer, wr_aim, void(entity thiswep, entity actor, .entity weaponentity))
279{
280 if ((actor.items & IT_UNLIMITED_AMMO) || GetResource(actor, thiswep.ammo_type) > 0)
281 PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(actor, weaponentity, 1000000, 0, 1, false, true);
282 else
283 PHYS_INPUT_BUTTON_ATCK2(actor) = bot_aim(actor, weaponentity, WEP_CVAR_PRI(WEP_BLASTER, speed), 0, WEP_CVAR_PRI(WEP_BLASTER, lifetime), false, true);
284}
285
286METHOD(Vaporizer, wr_think, void(entity thiswep, entity actor, .entity weaponentity, int fire))
287{
288 float vaporizer_ammo = (autocvar_g_instagib ? 1 : WEP_CVAR_PRI(WEP_VAPORIZER, ammo));
289 // if the laser uses load, we also consider its ammo for reloading
290 if (WEP_CVAR(WEP_VAPORIZER, reload_ammo) && WEP_CVAR_PRI(WEP_BLASTER, ammo)
291 && actor.(weaponentity).clip_load < min(vaporizer_ammo, WEP_CVAR_PRI(WEP_BLASTER, ammo)))
292 { // forced reload
293 thiswep.wr_reload(thiswep, actor, weaponentity);
294 actor.(weaponentity).hagar_load = false; // rocket minsta exclusive var
295 return;
296 }
297 if (WEP_CVAR(WEP_VAPORIZER, reload_ammo)
298 && actor.(weaponentity).clip_load < vaporizer_ammo)
299 { // forced reload
300 thiswep.wr_reload(thiswep, actor, weaponentity);
301 actor.(weaponentity).hagar_load = false; // rocket minsta exclusive var
302 return;
303 }
304
305 if ((fire & 1) && (GetResource(actor, RES_CELLS) || !autocvar_g_rm) && !weaponLocked(actor))
306 {
307 if (weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_PRI(WEP_VAPORIZER, refire)))
308 {
309 W_Vaporizer_Attack(thiswep, actor, weaponentity);
310 weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(WEP_VAPORIZER, animtime), w_ready);
311 }
312 }
313
314 if ((fire & 2) || ((fire & 1) && !GetResource(actor, RES_CELLS) && autocvar_g_rm))
315 {
317 {
318 bool rapid = autocvar_g_rm_laser_rapid;
319 //hagar_load was previously named held_down
320 if (actor.(weaponentity).jump_interval <= time && !actor.(weaponentity).hagar_load)
321 {
322 if (rapid)
323 actor.(weaponentity).hagar_load = true;
324 actor.(weaponentity).jump_interval = time + autocvar_g_rm_laser_refire;
325 actor.(weaponentity).jump_interval2 = time + autocvar_g_rm_laser_rapid_delay;
326 impressive_hits = 0;
327 W_RocketMinsta_Attack(actor, weaponentity, 0);
328 }
329 else if (rapid && actor.(weaponentity).jump_interval2 <= time && actor.(weaponentity).hagar_load)
330 {
332 impressive_hits = 0;
333 W_RocketMinsta_Attack(actor, weaponentity, 1);
334 //weapon_thinkf(actor, WFRAME_FIRE2, autocvar_g_rm_laser_rapid_animtime, w_ready);
335 }
336 }
337 else if (actor.(weaponentity).jump_interval <= time)
338 {
339 // handle refire manually, so that primary and secondary can be fired without conflictions (important for instagib)
340 actor.(weaponentity).jump_interval = time + WEP_CVAR_PRI(WEP_BLASTER, refire) * W_WeaponRateFactor(actor);
341
342 // decrease ammo for the laser?
343 if (WEP_CVAR_PRI(WEP_BLASTER, ammo))
344 W_DecreaseAmmo(thiswep, actor, WEP_CVAR_PRI(WEP_BLASTER, ammo), weaponentity);
345
346 makevectors(actor.v_angle);
347 W_Blaster_Attack(actor, weaponentity);
348
349 // now do normal refire
350 weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_PRI(WEP_BLASTER, animtime), w_ready);
351 }
352 }
353 else
354 actor.(weaponentity).hagar_load = false;
355}
356
357METHOD(Vaporizer, wr_setup, void(entity thiswep, entity actor, .entity weaponentity))
358{
359 actor.vaporizer_lasthit = 0;
360}
361
362METHOD(Vaporizer, wr_checkammo1, bool(entity thiswep, entity actor, .entity weaponentity))
363{
364 float vaporizer_ammo = (autocvar_g_instagib ? 1 : WEP_CVAR_PRI(WEP_VAPORIZER, ammo));
365 float ammo_amount = GetResource(actor, thiswep.ammo_type) >= vaporizer_ammo;
366 ammo_amount += actor.(weaponentity).(weapon_load[thiswep.m_id]) >= vaporizer_ammo;
367 return ammo_amount;
368}
369
370METHOD(Vaporizer, wr_checkammo2, bool(entity thiswep, entity actor, .entity weaponentity))
371{
372 if (!WEP_CVAR_PRI(WEP_BLASTER, ammo))
373 return true;
374 float ammo_amount = GetResource(actor, thiswep.ammo_type) >= WEP_CVAR_PRI(WEP_BLASTER, ammo);
375 ammo_amount += actor.(weaponentity).(weapon_load[thiswep.m_id]) >= WEP_CVAR_PRI(WEP_BLASTER, ammo);
376 return ammo_amount;
377}
378
379METHOD(Vaporizer, wr_resetplayer, void(entity thiswep, entity actor))
380{
381 actor.vaporizer_lasthit = 0;
382}
383
384METHOD(Vaporizer, wr_reload, void(entity thiswep, entity actor, .entity weaponentity))
385{
386 float vaporizer_ammo = (autocvar_g_instagib ? 1 : WEP_CVAR_PRI(WEP_VAPORIZER, ammo));
387 float used_ammo = (WEP_CVAR_PRI(WEP_BLASTER, ammo))
388 ? min(vaporizer_ammo, WEP_CVAR_PRI(WEP_BLASTER, ammo))
389 : vaporizer_ammo;
390
391 W_Reload(actor, weaponentity, used_ammo, SND_RELOAD);
392}
393
394METHOD(Vaporizer, wr_suicidemessage, Notification(entity thiswep))
395{
396 return WEAPON_THINKING_WITH_PORTALS;
397}
398
399METHOD(Vaporizer, wr_killmessage, Notification(entity thiswep))
400{
401 return WEAPON_VAPORIZER_MURDER;
402}
403
404#endif // SVQC
405#ifdef CSQC
406
407METHOD(Vaporizer, wr_impacteffect, void(entity thiswep, entity actor))
408{
409 vector org2 = w_org + w_backoff * 2;
410 pointparticles(EFFECT_VORTEX_IMPACT, org2, '0 0 0', 1);
411 if (!w_issilent)
412 sound(actor, CH_SHOTS, SND_VAPORIZER_IMPACT, VOL_BASE, ATTN_NORM);
413}
414
415METHOD(Vaporizer, wr_init, void(entity thiswep))
416{
418 precache_pic(thiswep.w_reticle);
419}
420
421METHOD(Vaporizer, wr_zoom, bool(entity thiswep, entity actor))
422{
424 return true;
425 else // no weapon specific image for this weapon
426 return false;
427}
428
429#endif // CSQC
430#ifdef MENUQC
434#include "blaster.qh"
435
436METHOD(Vaporizer, describe, string(Vaporizer this))
437{
438 TC(Vaporizer, this);
440 PAR(_("The %s is a unique weapon, firing a deadly beam of energy dealing a huge amount of damage. "
441 "In %s, the beam has the ability to instantly kill enemies with a single shot, unless they have an %s."), COLORED_NAME(this), COLORED_NAME(MUTATOR_mutator_instagib), COLORED_NAME(ITEM_ExtraLife));
442 PAR(_("The secondary fire shoots a laser identical to that fired by the %s, with strong knockback."), COLORED_NAME(WEP_BLASTER));
443 PAR(_("It is a superweapon, so isn't often found in game, except in %s where all players spawn with it."), COLORED_NAME(MUTATOR_mutator_instagib));
444 PAR(_("It consumes some %s ammo with each shot."), COLORED_NAME(ITEM_Cells));
445 PAR(W_Guide_Keybinds(this));
446 PAR(W_Guide_DPS_onlyOne(this.netname, "primary"));
447 return PAGE_TEXT;
448}
449
450#endif // MENUQC
void accuracy_add(entity this, Weapon w, float fired, float hit, float real)
update accuracy stats
Definition accuracy.qc:102
bool accuracy_canbegooddamage(entity attacker)
if damage were to occur, would accuracy_isgooddamage be able to return true?
Definition accuracy.qc:154
bool bot_aim(entity this,.entity weaponentity, float shotspeed, float shotspeedupward, float maxshottime, float applygravity, bool shot_accurate)
IntrusiveList g_bot_dodge
Definition api.qh:150
#define MUTATOR_CALLHOOK(id,...)
Definition base.qh:143
void W_Blaster_Attack(entity actor,.entity weaponentity)
Definition blaster.qc:52
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
float GetResource(entity e, Resource res_type)
Returns the current amount of resource the given entity has.
fields which are explicitly/manually set are marked with "M", fields set automatically are marked wit...
Definition weapon.qh:42
int m_id
Definition weapon.qh:43
string netname
Definition powerups.qc:20
float lifetime
Definition powerups.qc:23
float cnt
Definition powerups.qc:24
entity playerslots[255]
Definition main.qh:84
IntrusiveList g_drawables
Definition main.qh:91
vector view_origin
Definition main.qh:109
entity owner
Definition main.qh:87
bool button_zoom
Definition main.qh:113
int sv_entnum
Definition main.qh:186
#define colormapPaletteColor(c, isPants)
Definition color.qh:5
#define COLORED_NAME(this)
Definition color.qh:195
const int IT_UNLIMITED_AMMO
Definition item.qh:23
bool IsFlying(entity this)
Definition player.qc:843
#define IS_DEAD(s)
Definition player.qh:244
#define IS_PLAYER(s)
Definition player.qh:242
#define PHYS_INPUT_BUTTON_ATCK(s)
Definition player.qh:152
#define PHYS_INPUT_BUTTON_ATCK2(s)
Definition player.qh:154
float W_WeaponRateFactor(entity this)
void Draw_CylindricLine(vector from, vector to, float thickness, string texture, float aspect, float shift, vector rgb, float theAlpha, float drawflag, vector vieworg)
Definition draw.qh:11
const int FL_PROJECTILE
Definition constants.qh:85
bool autocvar_cl_reticle_weapon
Definition crosshair.qh:5
bool autocvar_cl_reticle
Definition crosshair.qh:3
float Q3SURFACEFLAG_SKY
const float DRAWFLAG_NORMAL
float drawmask
vector particles_colormin
const float MASK_NORMAL
float time
vector v_right
vector trace_endpos
float particles_alphamax
float nextthink
float trace_dphitq3surfaceflags
vector particles_colormax
float particles_alphamin
const float ATTN_NORM
float Q3SURFACEFLAG_NOIMPACT
float PARTICLES_USECOLOR
float particles_fade
#define spawn
void CSQCProjectile(entity e, float clientanimate, int type, float docull)
float RadiusDamage(entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity cantbe, entity mustbe, float forceintensity, int deathtype,.entity weaponentity, entity directhitentity)
Definition damage.qc:943
float yoda
Definition damage.qh:48
int impressive_hits
Definition damage.qh:49
vector w_org
vector w_backoff
float w_issilent
const int HITTYPE_SPLASH
Definition all.qh:30
void SUB_Remove(entity this)
Remove entity.
Definition defer.qh:13
float speed
Definition dynlight.qc:9
#define pointparticles(effect, org, vel, howmany)
Definition effect.qh:7
#define particleeffectnum(e)
Definition effect.qh:3
int entcs_GetClientColors(int i)
Definition ent_cs.qh:115
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
#define TC(T, sym)
Definition _all.inc:82
#define NET_HANDLE(id, param)
Definition net.qh:15
#define ReadVector()
Definition net.qh:350
#define WriteHeader(to, id)
Definition net.qh:265
int ReadByte()
#define REGISTER_NET_TEMP(id)
Definition net.qh:31
void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end, float nomonsters, entity forent, entity zone, WarpZone_trace_callback_t cb)
Definition common.qc:212
void WarpZone_TrailParticles_WithMultiplier(entity own, float eff, vector org, vector end, float f, int boxflags)
Definition common.qc:489
vector WarpZone_UnTransformOrigin(entity wz, vector v)
Definition common.qc:544
vector WarpZone_TransformOrigin(entity wz, vector v)
Definition common.qc:509
entity WarpZone_trace_transform
Definition common.qh:37
#define MOVE_NOTHING
Definition common.qh:33
float bound(float min, float value, float max)
float cvar(string name)
float random(void)
string precache_pic(string name,...)
float vlen(vector v)
vector vectoangles(vector v)
float min(float f,...)
vector normalize(vector v)
void WriteByte(float data, float dest, float desto)
float MSG_BROADCAST
Definition menudefs.qc:55
float max(float f,...)
#define etof(e)
Definition misc.qh:25
void set_movetype(entity this, int mt)
Definition movetypes.qc:4
const int MOVETYPE_BOUNCEMISSILE
Definition movetypes.qh:140
var void func_null()
string string_null
Definition nil.qh:9
void Send_Notification(NOTIF broadcast, entity client, MSG net_type, Notification net_name,...count)
Definition all.qc:1573
entity Notification
always last
Definition all.qh:81
#define METHOD(cname, name, prototype)
Definition oo.qh:269
#define NULL
Definition post.qh:14
#define makevectors
Definition post.qh:21
const int PROJECTILE_ROCKETMINSTA_LASER
#define setthink(e, f)
vector
Definition self.qh:92
entity entity toucher
Definition self.qh:72
#define settouch(e, f)
Definition self.qh:73
void adaptor_think2use_hittype_splash(entity this)
Definition common.qc:106
const int MIF_SPLASH
Definition common.qh:46
int projectiledeathtype
Definition common.qh:21
#define PROJECTILE_TOUCH(e, t)
Definition common.qh:28
IntrusiveList g_projectiles
Definition common.qh:58
#define PROJECTILE_MAKETRIGGER(e)
Definition common.qh:34
const float VOL_BASE
Definition sound.qh:36
const int CH_SHOTS
Definition sound.qh:14
const int CH_WEAPON_A
Definition sound.qh:7
const float ATTEN_NORM
Definition sound.qh:30
#define sound(e, c, s, v, a)
Definition sound.qh:52
#define PAGE_TEXT
Definition string.qh:642
#define PAR(...)
Adds an individually translatable paragraph to PAGE_TEXT without having to deal with strcat and sprin...
Definition string.qh:648
#define PAGE_TEXT_INIT()
Definition string.qh:641
const int DAMAGE_NO
Definition subs.qh:79
const int DAMAGE_AIM
Definition subs.qh:81
float takedamage
Definition subs.qh:78
float autocvar_g_rm_laser_spread_random
float autocvar_g_rm_laser_refire
float autocvar_g_rm
Definition sv_instagib.qh:8
float autocvar_g_rm_laser_spread
float autocvar_g_rm_laser_rapid_delay
float autocvar_g_rm_laser_rapid
float autocvar_g_rm_laser_lifetime
bool autocvar_g_instagib
float autocvar_g_rm_laser_count
float autocvar_g_rm_radius
float autocvar_g_rm_laser_damage
float autocvar_g_rm_damage
Definition sv_instagib.qh:9
float autocvar_g_rm_laser_speed
float autocvar_g_rm_laser_rapid_refire
float autocvar_g_rm_force
float autocvar_g_rm_laser_radius
float autocvar_g_rm_laser_force
float autocvar_g_rm_edgedamage
float autocvar_g_rm_laser
float ammo
Definition sv_turrets.qh:43
#define DIFF_TEAM(a, b)
Definition teams.qh:242
entity realowner
vector W_CalculateProjectileVelocity(entity actor, vector pvelocity, vector mvelocity, float forceAbsolute)
Definition tracing.qc:174
void FireRailgunBullet(entity this,.entity weaponentity, vector start, vector end, float bdamage, bool headshot_notify, float bforce, float mindist, float maxdist, float halflifedist, float forcehalflifedist, int deathtype)
Definition tracing.qc:231
vector w_shotdir
Definition tracing.qh:20
#define W_SetupShot_ProjectileSize(ent, wepent, mi, ma, antilag, recoil, snd, chan, maxdamage, deathtype)
Definition tracing.qh:30
vector w_shotorg
Definition tracing.qh:19
#define W_SetupShot(ent, wepent, antilag, recoil, snd, chan, maxdamage, deathtype)
Definition tracing.qh:34
void W_RocketMinsta_Attack(entity actor,.entity weaponentity, int mode)
Definition vaporizer.qc:222
vector Draw_VaporizerBeam_trace_callback_rgb
Definition vaporizer.qc:28
float autocvar_cl_vaporizerbeam_lifetime
Definition vaporizer.qc:23
void Draw_VaporizerBeam_trace_callback(vector start, vector hit, vector end)
Definition vaporizer.qc:31
void SendCSQCVaporizerBeamParticle(entity player, int hit)
Definition vaporizer.qc:8
void W_Vaporizer_Attack(Weapon thiswep, entity actor,.entity weaponentity)
Definition vaporizer.qc:131
void W_RocketMinsta_Laser_Explode_use(entity this, entity actor, entity trigger)
Definition vaporizer.qc:207
void W_RocketMinsta_Laser_Explode(entity this, entity directhitentity)
Definition vaporizer.qc:194
string Draw_VaporizerBeam_trace_callback_tex
Definition vaporizer.qc:26
bool autocvar_cl_vaporizerbeam_teamcolor
Definition vaporizer.qc:21
void VaporizerBeam_Draw(entity this)
Definition vaporizer.qc:40
float Draw_VaporizerBeam_trace_callback_rnd
Definition vaporizer.qc:27
bool autocvar_cl_vaporizerbeam_particle
Definition vaporizer.qc:22
vector vorg1
Definition vaporizer.qc:39
float autocvar_cl_vaporizerbeam_colorboost
Definition vaporizer.qc:24
void W_RocketMinsta_Laser_Touch(entity this, entity toucher)
Definition vaporizer.qc:212
void W_RocketMinsta_Explosion(entity actor,.entity weaponentity, vector loc)
Definition vaporizer.qc:108
float Draw_VaporizerBeam_trace_callback_a
Definition vaporizer.qc:29
vector vorg2
Definition vaporizer.qc:39
void W_RocketMinsta_Laser_Damage(entity this, entity directhitentity)
Definition vaporizer.qc:176
int rm_laser_count
Definition vaporizer.qh:72
float jump_interval
Definition vaporizer.qh:70
float jump_interval2
Definition vaporizer.qh:71
float zoomscript_caught
Definition view.qh:121
string W_Guide_Keybinds(Weapon wep)
Definition all.qc:824
void W_MuzzleFlash(Weapon thiswep, entity actor,.entity weaponentity, vector shotorg, vector shotdir)
Definition all.qc:715
string W_Guide_DPS_onlyOne(string name, string fire)
Definition all.qc:914
#define WEP_CVAR_PRI(wep, name)
Definition all.qh:338
#define WEP_CVAR(wep, name)
Definition all.qh:337
int max_shot_distance
Definition weapon.qh:245
void W_DecreaseAmmo(Weapon wep, entity actor, float ammo_use,.entity weaponentity)
void W_Reload(entity actor,.entity weaponentity, float sent_ammo_min, Sound sent_sound)
void weapon_thinkf(entity actor,.entity weaponentity, WFRAME fr, float t, void(Weapon thiswep, entity actor,.entity weaponentity, int fire) func)
bool weapon_prepareattack(Weapon thiswep, entity actor,.entity weaponentity, bool secondary, float attacktime)
void w_ready(Weapon thiswep, entity actor,.entity weaponentity, int fire)
bool weaponLocked(entity player)
entity weaponentity_fld
float weapon_load[REGISTRY_MAX(Weapons)]
int hagar_load
Definition wepent.qh:13