Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
hook.qc File Reference
Include dependency graph for hook.qc:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

 classfield (Hook) .vector origin
void Draw_CylindricLine (vector from, vector to, float thickness, string texture, float aspect, float shift, vector rgb, float theAlpha, float drawflag, vector vieworg)
void Draw_GrapplingHook (entity this)
void Draw_GrapplingHook_trace_callback (vector start, vector hit, vector end)
 entityclass (Hook)
 NET_HANDLE (ENT_CLIENT_HOOK, bool isNew)
void Remove_GrapplingHook (entity this)
void W_Hook_Attack2 (Weapon thiswep, entity actor,.entity weaponentity)
void W_Hook_Damage (entity this, entity inflictor, entity attacker, float damage, int deathtype,.entity weaponentity, vector hitloc, vector force)
void W_Hook_Explode2 (entity this)
void W_Hook_Explode2_use (entity this, entity actor, entity trigger)
void W_Hook_ExplodeThink (entity this)
void W_Hook_Touch2 (entity this, entity toucher)

Variables

float autocvar_cl_grapplehook_alpha = 1
float Draw_GrapplingHook_trace_callback_a
vector Draw_GrapplingHook_trace_callback_rgb
float Draw_GrapplingHook_trace_callback_rnd
string Draw_GrapplingHook_trace_callback_tex
const float HOOK_SECONDARY_DELAY = 0.0625

Function Documentation

◆ classfield()

classfield ( Hook )

References origin, and velocity.

◆ Draw_CylindricLine()

void Draw_CylindricLine ( vector from,
vector to,
float thickness,
string texture,
float aspect,
float shift,
vector rgb,
float theAlpha,
float drawflag,
vector vieworg )

Definition at line 10 of file draw.qh.

11 {
12 // I want to draw a quad...
13 // from and to are MIDPOINTS.
14
15 float len = vlen(to - from);
16 if (!len)
17 return;
18
19 float length_tex = aspect * len / thickness;
20 vector axis = (to - from) / len; // same as axis = normalize(to - from) but cheaper
21
22 // direction is perpendicular to the view normal, and perpendicular to the axis
23 vector thickdir = normalize(cross(axis, vieworg - from));
24
25 vector ofs = thickdir * (thickness * 0.5);
26
27 R_BeginPolygon(texture, drawflag, false);
28 R_PolygonVertex(from - ofs, '0 0 0' + shift * '1 0 0', rgb, theAlpha);
29 R_PolygonVertex(from + ofs, '0 1 0' + shift * '1 0 0', rgb, theAlpha);
30 R_PolygonVertex(to + ofs, '0 1 0' + (shift + length_tex) * '1 0 0', rgb, theAlpha);
31 R_PolygonVertex(to - ofs, '0 0 0' + (shift + length_tex) * '1 0 0', rgb, theAlpha);
32 R_EndPolygon();
33 }
float vlen(vector v)
vector normalize(vector v)
vector
Definition self.qh:96
#define cross(a, b)
Definition vector.qh:25

References cross, normalize(), vector, and vlen().

Referenced by bumble_raygun_draw(), Draw_ArcBeam_callback(), Draw_GrapplingHook_trace_callback(), Draw_VaporizerBeam_trace_callback(), and Porto_Draw().

◆ Draw_GrapplingHook()

void Draw_GrapplingHook ( entity this)

Definition at line 281 of file hook.qc.

282{
283 vector a, b;
284 string tex;
285
286 if (this.teleport_time && time > this.teleport_time)
287 {
288 sound(this, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM); // safeguard
289 this.teleport_time = 0;
290 }
291
293
294 int s = W_GunAlign(viewmodels[this.cnt], STAT(GUNALIGN)) - 1;
295 vector vs = hook_shotorigin[s];
296
297 if (this.owner.sv_entnum == player_localentnum - 1)
298 {
300 a = csqcplayer.origin + csqcplayer.view_ofs;
301 else
302 a = view_origin + view_forward * vs.x + view_right * -vs.y + view_up * vs.z;
303 b = this.origin;
304 }
305 else
306 {
307 a = this.velocity;
308 b = this.origin;
309 }
310
311 int t = entcs_GetTeamColor(this.owner.sv_entnum);
312
313 float intensity = autocvar_cl_grapplehook_alpha;
314 float offset = 0;
315 vector rgb = colormapPaletteColor(entcs_GetClientColors(this.sv_entnum - 1) & 0x0F, true);
316 switch (t)
317 {
318 case NUM_TEAM_1: tex = "particles/hook_red"; break;
319 case NUM_TEAM_2: tex = "particles/hook_blue"; break;
320 case NUM_TEAM_3: tex = "particles/hook_yellow"; break;
321 case NUM_TEAM_4: tex = "particles/hook_pink"; break;
322 default: tex = "particles/hook_white"; break;
323 }
324
325 MUTATOR_CALLHOOK(DrawGrapplingHook, this, tex, rgb, t);
326 tex = M_ARGV(1, string);
327 rgb = M_ARGV(2, vector);
328
335
337
338 if (vdist(trace_endpos - atrans, >, 0.5))
339 {
340 setorigin(this, trace_endpos); // hook endpoint!
341 this.angles = vectoangles(trace_endpos - atrans);
342 this.drawmask = MASK_NORMAL;
343 }
344 else
345 this.drawmask = 0;
346}
#define MUTATOR_CALLHOOK(id,...)
Definition base.qh:143
int W_GunAlign(entity this, int preferred_align)
entity csqcplayer
Definition cl_player.qh:26
float cnt
Definition powerups.qc:24
vector view_origin
Definition main.qh:109
entity owner
Definition main.qh:87
int sv_entnum
Definition main.qh:186
vector view_up
Definition main.qh:109
vector hook_shotorigin[4]
Definition main.qh:205
vector view_right
Definition main.qh:109
vector view_forward
Definition main.qh:109
#define colormapPaletteColor(c, isPants)
Definition color.qh:5
#define M_ARGV(x, type)
Definition events.qh:17
float teleport_time
Definition player.qh:218
string Draw_GrapplingHook_trace_callback_tex
Definition hook.qc:268
float Draw_GrapplingHook_trace_callback_a
Definition hook.qc:271
void Draw_GrapplingHook_trace_callback(vector start, vector hit, vector end)
Definition hook.qc:272
vector Draw_GrapplingHook_trace_callback_rgb
Definition hook.qc:270
float autocvar_cl_grapplehook_alpha
Definition hook.qc:258
float Draw_GrapplingHook_trace_callback_rnd
Definition hook.qc:269
float drawmask
const float MASK_NORMAL
vector velocity
float time
vector trace_endpos
float player_localentnum
vector origin
ent angles
Definition ent_cs.qc:146
int entcs_GetTeamColor(int i)
Definition ent_cs.qh:121
int entcs_GetClientColors(int i)
Definition ent_cs.qh:111
void InterpolateOrigin_Do(entity this)
set origin based on iorigin1 (old pos), iorigin2 (desired pos), and time
#define STAT(...)
Definition stats.qh:94
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:192
vector WarpZone_TransformOrigin(entity wz, vector v)
Definition common.qc:486
entity WarpZone_trace_transform
Definition common.qh:39
#define MOVE_NOTHING
Definition common.qh:35
vector vectoangles(vector v)
string string_null
Definition nil.qh:9
#define NULL
Definition post.qh:14
const float VOL_BASE
Definition sound.qh:36
const int CH_SHOTS_SINGLE
Definition sound.qh:15
const float ATTEN_NORM
Definition sound.qh:30
#define sound(e, c, s, v, a)
Definition sound.qh:52
const int NUM_TEAM_2
Definition teams.qh:14
const int NUM_TEAM_4
Definition teams.qh:16
const int NUM_TEAM_3
Definition teams.qh:15
const int NUM_TEAM_1
Definition teams.qh:13
#define vdist(v, cmp, f)
Vector distance comparison, avoids sqrt().
Definition vector.qh:8
int autocvar_chase_active
Definition view.qh:17
entity viewmodels[MAX_WEAPONSLOTS]
Definition view.qh:108

References angles, ATTEN_NORM, autocvar_chase_active, autocvar_cl_grapplehook_alpha, CH_SHOTS_SINGLE, cnt, colormapPaletteColor, csqcplayer, Draw_GrapplingHook_trace_callback(), Draw_GrapplingHook_trace_callback_a, Draw_GrapplingHook_trace_callback_rgb, Draw_GrapplingHook_trace_callback_rnd, Draw_GrapplingHook_trace_callback_tex, drawmask, entcs_GetClientColors(), entcs_GetTeamColor(), entity(), hook_shotorigin, InterpolateOrigin_Do(), M_ARGV, MASK_NORMAL, MOVE_NOTHING, MUTATOR_CALLHOOK, NULL, NUM_TEAM_1, NUM_TEAM_2, NUM_TEAM_3, NUM_TEAM_4, origin, owner, player_localentnum, sound, STAT, string_null, sv_entnum, teleport_time, time, trace_endpos, vdist, vectoangles(), vector, velocity, view_forward, view_origin, view_right, view_up, viewmodels, VOL_BASE, W_GunAlign(), WarpZone_trace_transform, WarpZone_TraceBox_ThroughZone(), and WarpZone_TransformOrigin().

Referenced by NET_HANDLE().

◆ Draw_GrapplingHook_trace_callback()

void Draw_GrapplingHook_trace_callback ( vector start,
vector hit,
vector end )

Definition at line 272 of file hook.qc.

273{
275 for (int i = 0; i < Draw_GrapplingHook_trace_callback_a; ++i)
277 Draw_GrapplingHook_trace_callback_rnd += (0.25 / 8) * vlen(hit - start);
278}
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 float DRAWFLAG_NORMAL
float min(float f,...)

References Draw_CylindricLine(), Draw_GrapplingHook_trace_callback_a, Draw_GrapplingHook_trace_callback_rgb, Draw_GrapplingHook_trace_callback_rnd, Draw_GrapplingHook_trace_callback_tex, DRAWFLAG_NORMAL, min(), vector, view_origin, vlen(), WarpZone_trace_transform, and WarpZone_TransformOrigin().

Referenced by Draw_GrapplingHook().

◆ entityclass()

entityclass ( Hook )

◆ NET_HANDLE()

NET_HANDLE ( ENT_CLIENT_HOOK ,
bool isNew )

Definition at line 360 of file hook.qc.

361{
362 int sf = ReadByte();
363
364 this.HookSilent = sf & 0x80;
366
368
369 if (sf & 1)
370 {
371 this.sv_entnum = ReadByte();
372 int slot = ReadByte();
373 this.owner = playerslots[this.sv_entnum - 1];
374 if (this.sv_entnum == player_localentnum)
375 viewmodels[slot].hook = this;
376 this.cnt = slot;
377 this.HookRange = 0;
378 }
379 if (sf & 2)
380 {
381 this.origin = ReadVector();
382 setorigin(this, this.origin);
383 }
384 if (sf & 4)
385 this.velocity = ReadVector();
386
388
389 if (isNew || !this.teleport_time)
390 {
391 this.draw = Draw_GrapplingHook;
392 if (!IL_CONTAINS(g_drawables, this))
393 IL_PUSH(g_drawables, this);
394 this.entremove = Remove_GrapplingHook;
395
396 setmodel(this, MDL_HOOK);
397 this.drawmask = MASK_NORMAL;
398 }
399
400 this.teleport_time = time + 10;
401 return true;
402}
entity playerslots[255]
Definition main.qh:84
IntrusiveList g_drawables
Definition main.qh:91
#define setmodel(this, m)
Definition model.qh:26
void Draw_GrapplingHook(entity this)
Definition hook.qc:281
void Remove_GrapplingHook(entity this)
Definition hook.qc:348
void InterpolateOrigin_Undo(entity this)
snap origin to iorigin2 (actual origin)
void InterpolateOrigin_Note(entity this)
const int IFLAG_VELOCITY
const int IFLAG_ORIGIN
int iflags
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
ERASEABLE bool IL_CONTAINS(IntrusiveList this, entity it)
#define ReadVector()
Definition net.qh:349
int ReadByte()

References cnt, Draw_GrapplingHook(), drawmask, g_drawables, IFLAG_ORIGIN, IFLAG_VELOCITY, iflags, IL_CONTAINS(), IL_PUSH(), InterpolateOrigin_Note(), InterpolateOrigin_Undo(), MASK_NORMAL, origin, owner, player_localentnum, playerslots, ReadByte(), ReadVector, Remove_GrapplingHook(), setmodel, sv_entnum, teleport_time, time, velocity, and viewmodels.

◆ Remove_GrapplingHook()

void Remove_GrapplingHook ( entity this)

Definition at line 348 of file hook.qc.

349{
350 sound(this, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM);
351
352 for (int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
353 {
354 entity wep = viewmodels[slot];
355 if (wep.hook == this)
356 wep.hook = NULL;
357 }
358}
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
const int MAX_WEAPONSLOTS
Definition weapon.qh:16

References ATTEN_NORM, CH_SHOTS_SINGLE, entity(), MAX_WEAPONSLOTS, NULL, sound, viewmodels, and VOL_BASE.

Referenced by NET_HANDLE().

◆ W_Hook_Attack2()

void W_Hook_Attack2 ( Weapon thiswep,
entity actor,
.entity weaponentity )

Definition at line 72 of file hook.qc.

73{
74 //W_DecreaseAmmo(thiswep, actor, WEP_CVAR_SEC(WEP_HOOK, ammo)); // WEAPONTODO: Figure out how to handle ammo with hook secondary (gravitybomb)
75 W_SetupShot(actor, weaponentity, false, 4, SND_HOOKBOMB_FIRE, CH_WEAPON_A, WEP_CVAR_SEC(WEP_HOOK, damage), WEP_HOOK.m_id | HITTYPE_SECONDARY);
76
77 entity gren = new(hookbomb);
78 gren.owner = gren.realowner = actor;
79 gren.bot_dodge = true;
80 gren.bot_dodgerating = WEP_CVAR_SEC(WEP_HOOK, damage);
83 gren.projectiledeathtype = WEP_HOOK.m_id | HITTYPE_SECONDARY;
84 gren.weaponentity_fld = weaponentity;
85 setorigin(gren, w_shotorg);
86 setsize(gren, '0 0 0', '0 0 0');
87
88 gren.nextthink = time + WEP_CVAR_SEC(WEP_HOOK, lifetime);
90 gren.use = W_Hook_Explode2_use;
92
93 gren.takedamage = DAMAGE_YES;
94 SetResourceExplicit(gren, RES_HEALTH, WEP_CVAR_SEC(WEP_HOOK, health));
95 gren.damageforcescale = WEP_CVAR_SEC(WEP_HOOK, damageforcescale);
96 gren.event_damage = W_Hook_Damage;
97 gren.damagedbycontents = true;
99 gren.missile_flags = MIF_SPLASH | MIF_ARC;
100
101 gren.velocity = '0 0 1' * WEP_CVAR_SEC(WEP_HOOK, speed);
103 gren.velocity += actor.velocity;
104
105 gren.gravity = WEP_CVAR_SEC(WEP_HOOK, gravity);
106 //W_SetupProjVelocity_Basic(gren); // just falling down!
107
108 gren.angles = '0 0 0';
109 gren.flags = FL_PROJECTILE;
110 IL_PUSH(g_projectiles, gren);
111 IL_PUSH(g_bot_dodge, gren);
112
113 CSQCProjectile(gren, true, PROJECTILE_HOOKBOMB, true);
114
115 MUTATOR_CALLHOOK(EditProjectile, actor, gren);
116}
IntrusiveList g_bot_dodge
Definition api.qh:150
float lifetime
Definition powerups.qc:23
float gravity
Definition items.qh:17
void W_Hook_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype,.entity weaponentity, vector hitloc, vector force)
Definition hook.qc:53
void W_Hook_Explode2_use(entity this, entity actor, entity trigger)
Definition hook.qc:48
void W_Hook_Touch2(entity this, entity toucher)
Definition hook.qc:66
const int FL_PROJECTILE
Definition constants.qh:76
void CSQCProjectile(entity e, float clientanimate, int type, float docull)
IntrusiveList g_damagedbycontents
Definition damage.qh:143
float damageforcescale
const int HITTYPE_SECONDARY
Definition all.qh:31
float speed
Definition dynlight.qc:9
SetResourceExplicit(ent, RES_ARMOR, ReadByte() *DEC_FACTOR)) ENTCS_PROP(NAME
void set_movetype(entity this, int mt)
Definition movetypes.qc:4
const int MOVETYPE_TOSS
Definition movetypes.qh:139
const int PROJECTILE_HOOKBOMB
float health
Legacy fields for the resources. To be removed.
Definition resources.qh:9
#define setthink(e, f)
#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:46
IntrusiveList g_projectiles
Definition common.qh:58
const int MIF_ARC
Definition common.qh:47
#define PROJECTILE_MAKETRIGGER(e)
Definition common.qh:34
const int CH_WEAPON_A
Definition sound.qh:7
const int DAMAGE_YES
Definition subs.qh:80
int autocvar_g_projectiles_newton_style
Definition tracing.qh:11
vector w_shotorg
Definition tracing.qh:19
#define W_SetupShot(ent, wepent, antilag, recoil, snd, chan, maxdamage, deathtype)
Definition tracing.qh:34
#define WEP_CVAR_SEC(wep, name)
Definition all.qh:339

References adaptor_think2use_hittype_splash(), autocvar_g_projectiles_newton_style, CH_WEAPON_A, CSQCProjectile(), DAMAGE_YES, damageforcescale, entity(), FL_PROJECTILE, g_bot_dodge, g_damagedbycontents, g_projectiles, gravity, health, HITTYPE_SECONDARY, IL_PUSH(), lifetime, MIF_ARC, MIF_SPLASH, MOVETYPE_TOSS, MUTATOR_CALLHOOK, PROJECTILE_HOOKBOMB, PROJECTILE_MAKETRIGGER, set_movetype(), SetResourceExplicit(), setthink, settouch, speed, time, W_Hook_Damage(), W_Hook_Explode2_use(), W_Hook_Touch2(), W_SetupShot, w_shotorg, and WEP_CVAR_SEC.

◆ W_Hook_Damage()

void W_Hook_Damage ( entity this,
entity inflictor,
entity attacker,
float damage,
int deathtype,
.entity weaponentity,
vector hitloc,
vector force )

Definition at line 53 of file hook.qc.

54{
55 if (GetResource(this, RES_HEALTH) <= 0)
56 return;
57 if (!W_CheckProjectileDamage(inflictor.realowner, this.realowner, deathtype, -1)) // no exceptions
58 return; // g_projectiles_damage says to halt
59
60 SetResourceExplicit(this, RES_HEALTH, GetResource(this, RES_HEALTH));
61
62 if (GetResource(this, RES_HEALTH) <= 0)
64}
float GetResource(entity e, Resource res_type)
Returns the current amount of resource the given entity has.
void W_Hook_Explode2(entity this)
Definition hook.qc:35
float W_CheckProjectileDamage(entity inflictor, entity projowner, int deathtype, float exception)
Definition common.qc:45
void W_PrepareExplosionByDamage(entity this, entity attacker, void(entity this) explode)
Definition common.qc:87
entity realowner

References entity(), GetResource(), realowner, SetResourceExplicit(), vector, W_CheckProjectileDamage(), W_Hook_Explode2(), and W_PrepareExplosionByDamage().

Referenced by W_Hook_Attack2().

◆ W_Hook_Explode2()

void W_Hook_Explode2 ( entity this)

Definition at line 35 of file hook.qc.

36{
37 this.event_damage = func_null;
38 settouch(this, func_null);
39 this.effects |= EF_NODRAW;
40
43 this.teleport_time = time;
44 this.dmg_last = 1;
46}
const float HOOK_SECONDARY_DELAY
Definition hook.qc:5
void W_Hook_ExplodeThink(entity this)
Definition hook.qc:6
float effects
float nextthink
const float EF_NODRAW
float dmg_last
Definition electro.qh:101
const int MOVETYPE_NONE
Definition movetypes.qh:133
var void func_null()

References dmg_last, EF_NODRAW, effects, entity(), func_null(), HOOK_SECONDARY_DELAY, MOVETYPE_NONE, nextthink, set_movetype(), setthink, settouch, teleport_time, time, and W_Hook_ExplodeThink().

Referenced by W_Hook_Damage(), and W_Hook_Explode2_use().

◆ W_Hook_Explode2_use()

void W_Hook_Explode2_use ( entity this,
entity actor,
entity trigger )

Definition at line 48 of file hook.qc.

49{
50 W_Hook_Explode2(this);
51}

References entity(), and W_Hook_Explode2().

Referenced by W_Hook_Attack2().

◆ W_Hook_ExplodeThink()

void W_Hook_ExplodeThink ( entity this)

Definition at line 6 of file hook.qc.

7{
8 // NOTE: W_Electro_ExplodeComboThink uses similar code, please keep them in sync
9 float dt = time - this.teleport_time;
10
11 float dmg_remaining_next = bound(0, 1 - dt / WEP_CVAR_SEC(WEP_HOOK, duration), 1) ** WEP_CVAR_SEC(WEP_HOOK, power);
12
13 float f = this.dmg_last - dmg_remaining_next;
14 this.dmg_last = dmg_remaining_next;
15
16 RadiusDamage(this, this.realowner,
17 f * WEP_CVAR_SEC(WEP_HOOK, damage),
18 f * WEP_CVAR_SEC(WEP_HOOK, edgedamage),
19 WEP_CVAR_SEC(WEP_HOOK, radius),
20 this.realowner,
21 NULL,
22 f * WEP_CVAR_SEC(WEP_HOOK, force),
25 NULL
26 );
28
29 if (dt < WEP_CVAR_SEC(WEP_HOOK, duration))
31 else
32 delete(this);
33}
float radius
Definition impulse.qh:11
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:934
const int HITTYPE_SPAM
set manually after first RadiusDamage, stops effect spam
Definition all.qh:36
float bound(float min, float value, float max)
int projectiledeathtype
Definition common.qh:21
entity weaponentity_fld

References bound(), dmg_last, entity(), HITTYPE_SPAM, HOOK_SECONDARY_DELAY, nextthink, NULL, projectiledeathtype, radius, RadiusDamage(), realowner, teleport_time, time, weaponentity_fld, and WEP_CVAR_SEC.

Referenced by W_Hook_Explode2().

◆ W_Hook_Touch2()

void W_Hook_Touch2 ( entity this,
entity toucher )

Definition at line 66 of file hook.qc.

67{
69 this.use(this, NULL, NULL);
70}
#define use
entity entity toucher
Definition self.qh:76
#define PROJECTILE_TOUCH(e, t)
Definition common.qh:28

References entity(), NULL, PROJECTILE_TOUCH, toucher, and use.

Referenced by W_Hook_Attack2().

Variable Documentation

◆ autocvar_cl_grapplehook_alpha

float autocvar_cl_grapplehook_alpha = 1

Definition at line 258 of file hook.qc.

Referenced by Draw_GrapplingHook().

◆ Draw_GrapplingHook_trace_callback_a

float Draw_GrapplingHook_trace_callback_a

Definition at line 271 of file hook.qc.

Referenced by Draw_GrapplingHook(), and Draw_GrapplingHook_trace_callback().

◆ Draw_GrapplingHook_trace_callback_rgb

vector Draw_GrapplingHook_trace_callback_rgb

Definition at line 270 of file hook.qc.

Referenced by Draw_GrapplingHook(), and Draw_GrapplingHook_trace_callback().

◆ Draw_GrapplingHook_trace_callback_rnd

float Draw_GrapplingHook_trace_callback_rnd

Definition at line 269 of file hook.qc.

Referenced by Draw_GrapplingHook(), and Draw_GrapplingHook_trace_callback().

◆ Draw_GrapplingHook_trace_callback_tex

string Draw_GrapplingHook_trace_callback_tex

Definition at line 268 of file hook.qc.

Referenced by Draw_GrapplingHook(), and Draw_GrapplingHook_trace_callback().

◆ HOOK_SECONDARY_DELAY

const float HOOK_SECONDARY_DELAY = 0.0625

Definition at line 5 of file hook.qc.

Referenced by W_Hook_Explode2(), and W_Hook_ExplodeThink().