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) // forced reload
291 && actor.(weaponentity).clip_load < vaporizer_ammo
292 && actor.(weaponentity).clip_load < WEP_CVAR_PRI(WEP_BLASTER, ammo))
293 {
294 thiswep.wr_reload(thiswep, actor, weaponentity);
295 actor.(weaponentity).hagar_load = false; // rocket minsta exclusive var
296 return;
297 }
298 if (WEP_CVAR(WEP_VAPORIZER, reload_ammo)
299 && actor.(weaponentity).clip_load < vaporizer_ammo)
300 { // forced reload
301 thiswep.wr_reload(thiswep, actor, weaponentity);
302 actor.(weaponentity).hagar_load = false; // rocket minsta exclusive var
303 return;
304 }
305
306 if ((fire & 1) && (GetResource(actor, RES_CELLS) || !autocvar_g_rm) && !weaponLocked(actor))
307 {
308 if (weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_PRI(WEP_VAPORIZER, refire)))
309 {
310 W_Vaporizer_Attack(thiswep, actor, weaponentity);
311 weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(WEP_VAPORIZER, animtime), w_ready);
312 }
313 }
314
315 if ((fire & 2) || ((fire & 1) && !GetResource(actor, RES_CELLS) && autocvar_g_rm))
316 {
318 {
319 bool rapid = autocvar_g_rm_laser_rapid;
320 //hagar_load was previously named held_down
321 if (actor.(weaponentity).jump_interval <= time && !actor.(weaponentity).hagar_load)
322 {
323 if (rapid)
324 actor.(weaponentity).hagar_load = true;
325 actor.(weaponentity).jump_interval = time + autocvar_g_rm_laser_refire;
326 actor.(weaponentity).jump_interval2 = time + autocvar_g_rm_laser_rapid_delay;
327 impressive_hits = 0;
328 W_RocketMinsta_Attack(actor, weaponentity, 0);
329 }
330 else if (rapid && actor.(weaponentity).jump_interval2 <= time && actor.(weaponentity).hagar_load)
331 {
333 impressive_hits = 0;
334 W_RocketMinsta_Attack(actor, weaponentity, 1);
335 //weapon_thinkf(actor, WFRAME_FIRE2, autocvar_g_rm_laser_rapid_animtime, w_ready);
336 }
337 }
338 else if (actor.(weaponentity).jump_interval <= time)
339 {
340 // handle refire manually, so that primary and secondary can be fired without conflictions (important for instagib)
341 actor.(weaponentity).jump_interval = time + WEP_CVAR_PRI(WEP_BLASTER, refire) * W_WeaponRateFactor(actor);
342
343 // decrease ammo for the laser?
344 if (WEP_CVAR_PRI(WEP_BLASTER, ammo))
345 W_DecreaseAmmo(thiswep, actor, WEP_CVAR_PRI(WEP_BLASTER, ammo), weaponentity);
346
347 makevectors(actor.v_angle);
348 W_Blaster_Attack(actor, weaponentity);
349
350 // now do normal refire
351 weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR_PRI(WEP_BLASTER, animtime), w_ready);
352 }
353 }
354 else
355 actor.(weaponentity).hagar_load = false;
356}
357
358METHOD(Vaporizer, wr_setup, void(entity thiswep, entity actor, .entity weaponentity))
359{
360 actor.vaporizer_lasthit = 0;
361}
362
363METHOD(Vaporizer, wr_checkammo1, bool(entity thiswep, entity actor, .entity weaponentity))
364{
365 float vaporizer_ammo = (autocvar_g_instagib ? 1 : WEP_CVAR_PRI(WEP_VAPORIZER, ammo));
366 float ammo_amount = GetResource(actor, thiswep.ammo_type) >= vaporizer_ammo;
367 ammo_amount += actor.(weaponentity).(weapon_load[thiswep.m_id]) >= vaporizer_ammo;
368 return ammo_amount;
369}
370
371METHOD(Vaporizer, wr_checkammo2, bool(entity thiswep, entity actor, .entity weaponentity))
372{
373 if (!WEP_CVAR_PRI(WEP_BLASTER, ammo))
374 return true;
375 float ammo_amount = GetResource(actor, thiswep.ammo_type) >= WEP_CVAR_PRI(WEP_BLASTER, ammo);
376 ammo_amount += actor.(weaponentity).(weapon_load[thiswep.m_id]) >= WEP_CVAR_PRI(WEP_BLASTER, ammo);
377 return ammo_amount;
378}
379
380METHOD(Vaporizer, wr_resetplayer, void(entity thiswep, entity actor))
381{
382 actor.vaporizer_lasthit = 0;
383}
384
385METHOD(Vaporizer, wr_reload, void(entity thiswep, entity actor, .entity weaponentity))
386{
387 float vaporizer_ammo = (autocvar_g_instagib ? 1 : WEP_CVAR_PRI(WEP_VAPORIZER, ammo));
388 float used_ammo = (WEP_CVAR_PRI(WEP_BLASTER, ammo))
389 ? min(vaporizer_ammo, WEP_CVAR_PRI(WEP_BLASTER, ammo))
390 : vaporizer_ammo;
391
392 W_Reload(actor, weaponentity, used_ammo, SND_RELOAD);
393}
394
395METHOD(Vaporizer, wr_suicidemessage, Notification(entity thiswep))
396{
397 return WEAPON_THINKING_WITH_PORTALS;
398}
399
400METHOD(Vaporizer, wr_killmessage, Notification(entity thiswep))
401{
402 return WEAPON_VAPORIZER_MURDER;
403}
404
405#endif // SVQC
406#ifdef CSQC
407
408METHOD(Vaporizer, wr_impacteffect, void(entity thiswep, entity actor))
409{
410 vector org2 = w_org + w_backoff * 2;
411 pointparticles(EFFECT_VORTEX_IMPACT, org2, '0 0 0', 1);
412 if (!w_issilent)
413 sound(actor, CH_SHOTS, SND_VAPORIZER_IMPACT, VOL_BASE, ATTN_NORM);
414}
415
416METHOD(Vaporizer, wr_init, void(entity thiswep))
417{
419 precache_pic(thiswep.w_reticle);
420}
421
422METHOD(Vaporizer, wr_zoom, bool(entity thiswep, entity actor))
423{
425 return true;
426 else // no weapon specific image for this weapon
427 return false;
428}
429
430#endif // CSQC
431#ifdef MENUQC
435#include "blaster.qh"
436
437METHOD(Vaporizer, describe, string(Vaporizer this))
438{
439 TC(Vaporizer, this);
441 PAR(_("The %s is a unique weapon, firing a deadly beam of energy dealing a huge amount of damage. "
442 "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));
443 PAR(_("The secondary fire shoots a laser identical to that fired by the %s, with strong knockback."), COLORED_NAME(WEP_BLASTER));
444 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));
445 PAR(_("It consumes some %s ammo with each shot."), COLORED_NAME(ITEM_Cells));
446 PAR(W_Guide_Keybinds(this));
447 PAR(W_Guide_DPS_onlyOne(this.netname, "primary"));
448 return PAGE_TEXT;
449}
450
451#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(name,...)
Definition base.qh:186
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:37
int m_id
Definition weapon.qh:38
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:189
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:10
const int FL_PROJECTILE
Definition constants.qh:77
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:937
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
automatically set by RadiusDamage
Definition all.qh:32
void SUB_Remove(entity this)
Remove entity.
Definition defer.qh:12
float speed
Definition dynlight.qc:9
#define pointparticles(effect, org, vel, howmany)
Definition effect.qh:6
#define particleeffectnum(e)
Definition effect.qh:3
WriteByte(chan, ent.angles.y/DEC_FACTOR)
int entcs_GetClientColors(int i)
Definition ent_cs.qh:111
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:349
#define WriteHeader(to, id)
Definition net.qh:265
int ReadByte()
#define REGISTER_NET_TEMP(id)
Definition net.qh:31
vector WarpZone_UnTransformOrigin(entity wz, vector org)
Transforms origin org backwards through warpzone wz, as the inverse of WarpZone_TransformOrigin.
Definition common.qc:530
vector WarpZone_TransformOrigin(entity wz, vector org)
Transforms origin org across warpzone wz.
Definition common.qc:493
void WarpZone_TrailParticles_WithMultiplier(entity own, float eff, vector org, vector end, float f, int boxflags)
Definition common.qc:472
#define WarpZone_TraceLine_ThroughZone(org, end, nomonsters, forent, zone, cb)
Definition common.qh:47
entity WarpZone_trace_transform
Transform accumulator during a trace.
Definition common.qh:40
#define MOVE_NOTHING
Definition common.qh:35
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)
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:144
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:1500
entity Notification
always last
Definition all.qh:86
#define METHOD(cname, name, prototype)
Definition oo.qh:274
#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:96
entity entity toucher
Definition self.qh:76
#define settouch(e, f)
Definition self.qh:77
void adaptor_think2use_hittype_splash(entity this)
Definition common.qc:106
const int MIF_SPLASH
Definition common.qh:58
int projectiledeathtype
Definition common.qh:33
#define PROJECTILE_TOUCH(e, t)
Definition common.qh:40
IntrusiveList g_projectiles
Definition common.qh:70
#define PROJECTILE_MAKETRIGGER(e)
Definition common.qh:46
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:652
#define PAR(...)
Adds an individually translatable paragraph to PAGE_TEXT without having to deal with strcat and sprin...
Definition string.qh:658
#define PAGE_TEXT_INIT()
Definition string.qh:651
const int DAMAGE_NO
Definition subs.qh:79
const int DAMAGE_AIM
Definition subs.qh:81
float takedamage
Definition subs.qh:78
int autocvar_g_rm_laser_count
bool autocvar_g_rm
Definition sv_instagib.qh:8
float autocvar_g_rm_laser_refire
bool autocvar_g_rm_laser_spread_random
bool autocvar_g_rm_laser_rapid
float autocvar_g_rm_laser_spread
float autocvar_g_rm_laser_rapid_delay
bool autocvar_g_rm_laser
float autocvar_g_rm_laser_lifetime
bool autocvar_g_instagib
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 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:177
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:261
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:803
void W_MuzzleFlash(Weapon thiswep, entity actor,.entity weaponentity, vector shotorg, vector shotdir)
Definition all.qc:694
string W_Guide_DPS_onlyOne(string name, string fire)
Definition all.qc:893
#define WEP_CVAR_PRI(wep, name)
Definition all.qh:340
#define WEP_CVAR(wep, name)
Definition all.qh:339
int max_shot_distance
Definition weapon.qh:240
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