Use Erebus animations for the nex fox models, which are a lot prettier. Also fix...
[voretournament/voretournament.git] / data / qcsrc / server / defs.qh
1 #define INDEPENDENT_ATTACK_FINISHED\r
2 \r
3 float require_spawnfunc_prefix; // if this float exists, only functions with spawnfunc_ name prefix qualify as spawn functions\r
4 \r
5 #define BUTTON_ATCK        button0\r
6 #define BUTTON_JUMP        button2\r
7 #define BUTTON_ATCK2       button3\r
8 #define BUTTON_ZOOM        button4\r
9 #define BUTTON_CROUCH      button5\r
10 #define BUTTON_JETPACK     button6\r
11 #define BUTTON_INFO        button7\r
12 #define BUTTON_CHAT        buttonchat\r
13 #define BUTTON_USE         buttonuse\r
14 #define BUTTON_DRAG        button8\r
15 #define BUTTON_REGURGITATE button9\r
16 #define BUTTON_DIGEST      button10\r
17 \r
18 // Globals\r
19 \r
20 float ctf_score_value(string parameter);\r
21 \r
22 float g_dm, g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_ca, g_lms, g_race, g_cts, g_rpg;\r
23 float g_cloaked, g_footsteps, g_jump_grunt, g_midair, g_norecoil, g_vampire, g_bloodloss;\r
24 float g_warmup_limit;\r
25 float g_warmup_allguns;\r
26 float g_warmup_allow_timeout;\r
27 float g_ctf_win_mode;\r
28 float g_ctf_ignore_frags;\r
29 float g_ctf_reverse;\r
30 float g_race_qualifying;\r
31 float inWarmupStage;\r
32 float g_pickup_respawntime_weapon;\r
33 float g_pickup_respawntime_ammo;\r
34 float g_pickup_respawntime_short;\r
35 float g_pickup_respawntime_medium;\r
36 float g_pickup_respawntime_long;\r
37 float g_pickup_respawntime_powerup;\r
38 float g_pickup_respawntimejitter_weapon;\r
39 float g_pickup_respawntimejitter_ammo;\r
40 float g_pickup_respawntimejitter_short;\r
41 float g_pickup_respawntimejitter_medium;\r
42 float g_pickup_respawntimejitter_long;\r
43 float g_pickup_respawntimejitter_powerup;\r
44 float g_jetpack;\r
45 \r
46 float sv_clones;\r
47 float sv_gentle;\r
48 float sv_foginterval;\r
49 \r
50 entity  activator;\r
51 \r
52 float player_count;\r
53 float currentbots;\r
54 float bots_would_leave;\r
55 float lms_lowest_lives;\r
56 float lms_next_place;\r
57 float LMS_NewPlayerLives();\r
58 \r
59 void UpdateFrags(entity player, float f);\r
60 .float totalfrags;\r
61 \r
62 float team1_score, team2_score, team3_score, team4_score;\r
63 \r
64 float maxclients;\r
65 \r
66 // Vore functions\r
67 \r
68 .entity predator;\r
69 .entity fakepredator;\r
70 .float swallow_progress_prey, swallow_progress_pred;\r
71 .float digesting;\r
72 .float stomach_load, stomach_maxload;\r
73 .float weapon_delay;\r
74 .float fakeprey;\r
75 .float stat_eaten, stat_stomachload, stat_stomachmaxload, stat_digesting, stat_canleave, stat_canswallow;\r
76 .float dropweapon_check;\r
77 \r
78 // Fields\r
79 \r
80 .void(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) event_damage;\r
81 \r
82 //.string       wad;\r
83 //.string       map;\r
84 \r
85 //.float        worldtype;\r
86 .float  delay;\r
87 .float  wait;\r
88 .float  lip;\r
89 //.float        light_lev;\r
90 .float  speed;\r
91 //.float        style;\r
92 //.float        skill;\r
93 .float  sounds;\r
94 \r
95 .string killtarget;\r
96 \r
97 .vector pos1, pos2;\r
98 .vector mangle;\r
99 \r
100 .float cvar_cl_hitsound;\r
101 \r
102 .float  pain_finished;                  //Added by Supajoe\r
103 .float  pain_frame;                     //"\r
104 .float  statdraintime;                  // record the one-second intervals between draining health and armour when they're over 100\r
105 .float  crouch; // Crouching or not?\r
106 \r
107 .float  strength_finished;\r
108 //.float        speed_finished;\r
109 .float  invincible_finished;\r
110 //.float        slowmo_finished;\r
111 \r
112 .vector         finaldest, finalangle;          //plat.qc stuff\r
113 .void()         think1;\r
114 .float state;\r
115 .float          t_length, t_width;\r
116 \r
117 .vector destvec;                // for rain\r
118 .float cnt;             // for rain\r
119 .float count;\r
120 //.float cnt2;\r
121 \r
122 .float play_time;\r
123 .float death_time;\r
124 .float dead_frame;\r
125 .float fade_time;\r
126 .float fade_rate;\r
127 \r
128 // player animation state\r
129 .float animstate_startframe;\r
130 .float animstate_numframes;\r
131 .float animstate_framerate;\r
132 .float animstate_starttime;\r
133 .float animstate_endtime;\r
134 .float animstate_override;\r
135 .float animstate_looping;\r
136 \r
137 // player animation data for this model\r
138 // each vector is as follows:\r
139 // _x = startframe\r
140 // _y = numframes\r
141 // _z = framerate\r
142 .vector anim_die1; // player dies\r
143 .vector anim_die2; // player dies differently\r
144 .vector anim_draw; // player pulls out a weapon\r
145 .vector anim_duck; // player crouches (from idle to duckidle)\r
146 .vector anim_duckwalk; // player walking while crouching\r
147 .vector anim_duckjump; // player jumping from a crouch\r
148 .vector anim_duckidle; // player idling while crouching\r
149 .vector anim_idle; // player standing\r
150 .vector anim_jump; // player jump\r
151 .vector anim_pain1; // player flinches from pain\r
152 .vector anim_pain2; // player flinches from pain, differently\r
153 .vector anim_shoot; // player shoots\r
154 .vector anim_taunt; // player taunts others (FIXME: no code references this)\r
155 .vector anim_run; // player running forward\r
156 .vector anim_runbackwards; // player running backward\r
157 .vector anim_strafeleft; // player shuffling left quickly\r
158 .vector anim_straferight; // player shuffling right quickly\r
159 .vector anim_dead1; // player dead (must be identical to last frame of die1)\r
160 .vector anim_dead2; // player dead (must be identical to last frame of die2)\r
161 .vector anim_forwardright; // player running forward and right\r
162 .vector anim_forwardleft; // player running forward and left\r
163 .vector anim_backright; // player running backward and right\r
164 .vector anim_backleft; // player running back and left\r
165 .vector anim_melee; // player doing the melee action\r
166 .vector anim_duck; // player doing the melee action\r
167 .vector anim_duckwalkbackwards;\r
168 .vector anim_duckwalkstrafeleft;\r
169 .vector anim_duckwalkstraferight;\r
170 .vector anim_duckwalkforwardright;\r
171 .vector anim_duckwalkforwardleft;\r
172 .vector anim_duckwalkbackright;\r
173 .vector anim_duckwalkbackleft;\r
174 \r
175 // weapon animation vectors:\r
176 .vector anim_fire1;\r
177 .vector anim_fire2;\r
178 .vector anim_idle;\r
179 .vector anim_reload;\r
180 \r
181 void() player_setupanimsformodel;\r
182 void setanim(entity e, vector anim, float looping, float override, float restart);\r
183 \r
184 .string mdl;\r
185 \r
186 .string playermodel;\r
187 .string playerskin;\r
188 \r
189 .float species;\r
190 \r
191 .float  respawntime;\r
192 .float  respawntimejitter;\r
193 //.float        chasecam;\r
194 \r
195 .float  damageforcescale;\r
196 \r
197 //.float          gravity;\r
198 \r
199 .float          dmg;\r
200 \r
201 // for railgun damage (hitting multiple enemies)\r
202 .float railgunhit;\r
203 .float railgunhitsolidbackup;\r
204 .vector railgunhitloc;\r
205 \r
206 .float          air_finished;\r
207 .float          dmgtime;\r
208 \r
209 .float          killcount;\r
210 .float hitsound, typehitsound;\r
211 \r
212 .float watersound_finished, digestsound_finished, gurglesound_finished;\r
213 .float iscreature;\r
214 .vector oldvelocity;\r
215 \r
216 .float pauseregenhealth_finished;\r
217 .float pauserothealth_finished;\r
218 .float pauseregenarmor_finished;\r
219 .float pauserotarmor_finished;\r
220 .float pauserotfuel_finished;\r
221 .string item_pickupsound;\r
222 \r
223 // definitions for weaponsystem\r
224 \r
225 .entity weaponentity;\r
226 .entity exteriorweaponentity;\r
227 .vector weaponentity_glowmod;\r
228 .float switchweapon;\r
229 .float autoswitch;\r
230 float weapon_action(float wpn, float wrequest);\r
231 float client_hasweapon(entity cl, float wpn, float andammo, float complain);\r
232 void w_clear();\r
233 void w_ready();\r
234 // VorteX: standalone think for weapons, so normal think on weaponentity can be reserved by weaponflashes (which needs update even player dies)\r
235 .float weapon_nextthink;\r
236 .void() weapon_think;\r
237 \r
238 //float PLAYER_WEAPONSELECTION_DELAY = );\r
239 float   PLAYER_WEAPONSELECTION_SPEED = 18;\r
240 vector  PLAYER_WEAPONSELECTION_RANGE = '0 20 -40';\r
241 \r
242 // weapon states (self.weaponentity.state)\r
243 float WS_CLEAR                  = 0; // no weapon selected\r
244 float WS_RAISE                  = 1; // raise frame\r
245 float WS_DROP                   = 2; // deselecting frame\r
246 float WS_INUSE                  = 3; // fire state\r
247 float WS_READY                  = 4; // idle frame\r
248 \r
249 // weapon requests\r
250 float WR_SETUP              = 1; // setup weapon data\r
251 float WR_THINK              = 2; // logic to run every frame\r
252 float WR_CHECKAMMO1         = 3; // checks ammo for weapon\r
253 float WR_CHECKAMMO2         = 4; // checks ammo for weapon\r
254 float WR_AIM                = 5; // runs bot aiming code for this weapon\r
255 float WR_PRECACHE           = 6; // precaches models/sounds used by this weapon\r
256 float WR_SUICIDEMESSAGE = 7; // sets w_deathtypestring or leaves it alone (and may inspect w_deathtype for details)\r
257 float WR_KILLMESSAGE    = 8; // sets w_deathtypestring or leaves it alone\r
258 float WR_RESETPLAYER    = 9; // does not need to do anything\r
259 float WR_RELOAD         = 10; // used for reloading\r
260 \r
261 void weapon_defaultspawnfunc(float wpn);\r
262 \r
263 string w_deathtypestring;\r
264 float w_deathtype;\r
265 \r
266 void(entity client, string s) centerprint_builtin = #73;\r
267 .vector dest1, dest2;\r
268 \r
269 float gameover;\r
270 float intermission_running;\r
271 float intermission_exittime;\r
272 float alreadychangedlevel;\r
273 \r
274 .float welcomemessage_time;\r
275 .float version;\r
276 \r
277 //swamp\r
278 .float in_swamp;              // bool\r
279 .entity swampslug;            // Uses this to release from swamp ("untouch" fix)\r
280 \r
281 // footstep interval\r
282 .float nextstep;\r
283 \r
284 .float ready;\r
285 #define RESTART_COUNTDOWN 10\r
286 float restart_mapalreadyrestarted; //bool, indicates whether reset_map() was already executed\r
287 entity restartTimer;\r
288 void restartTimer_Think();\r
289 float blockSpectators; //if set, new or existing spectators or observers will be removed unless they become a player within g_maxplayers_spectator_blocktime seconds\r
290 .float spectatortime; //point in time since the client is spectating or observing\r
291 void checkSpectatorBlock();\r
292 \r
293 .float winning;\r
294 .float jointime;\r
295 \r
296 float isJoinAllowed();\r
297 #define PREVENT_JOIN_TEXT "^1You may not join the game at this time.\n\nThe player limit reached maximum capacity."\r
298 \r
299 //sv_timeout: pauses the game by setting the gamespeed to a really low value (see TIMEOUT_SLOWMO_VALUE)\r
300 #define TIMEOUT_SLOWMO_VALUE 0.0001\r
301 float sys_frametime; // gets initialised in worlspawn, saves the value from cvar("sys_ticrate")\r
302 float remainingTimeoutTime; // contains the time in seconds that the active timeout has left\r
303 float remainingLeadTime; // contains the number of seconds left of the leadtime (before the timeout starts)\r
304 float timeoutStatus; // (values: 0, 1, 2) contains whether a timeout is not active (0), was called but still at leadtime (1) or is active (2)\r
305 .float allowedTimeouts; // contains the number of allowed timeouts for each player\r
306 entity timeoutInitiator; // contains the entity of the player who started the last timeout\r
307 float orig_slowmo; // contains the value of cvar("slowmo") so that, after timeout finished, it isn't set to slowmo 1 necessarily\r
308 .vector lastV_angle; //used when pausing the game in order to force the player to keep his old view angle fixed\r
309 entity timeoutHandler; //responsible for centerprinting the timeout countdowns and playing sounds\r
310 void timeoutHandler_Think();\r
311 void evaluateTimeout();\r
312 void evaluateTimein();\r
313 string getTimeoutText(float addOneSecond);\r
314 \r
315 .float spawnshieldtime;\r
316 \r
317 .float lms_nextcheck;\r
318 .float lms_traveled_distance;\r
319 \r
320 .entity flagcarried;\r
321 \r
322 .float playerid;\r
323 float playerid_last;\r
324 .float noalign;         // if set to 1, the item or spawnpoint won't be dropped to the floor\r
325 \r
326 .vector spawnorigin;\r
327 \r
328 .vector death_origin;\r
329 .vector killer_origin;\r
330 \r
331 float default_player_alpha;\r
332 float default_weapon_alpha;\r
333 \r
334 .float() customizeentityforclient;\r
335 .float cvar_cl_handicap;\r
336 .float cvar_cl_clippedspectating;\r
337 .float cvar_scr_centertime;\r
338 .float cvar_cl_shownames;\r
339 .string cvar_g_voretournamentversion;\r
340 .string cvar_cl_weaponpriority;\r
341 .string cvar_cl_weaponpriorities[10];\r
342 #ifdef ALLOW_FORCEMODELS\r
343 .float cvar_cl_forceplayermodels;\r
344 .float cvar_cl_forceplayermodelsfromvoretournament;\r
345 float sv_clforceplayermodels;\r
346 #endif\r
347 .float cvar_cl_gunalign;\r
348 .float cvar_cl_noantilag;\r
349 .float cvar_cl_vore_stomachmodel;\r
350 .float cvar_cl_vore_gulletmodel;\r
351 .float cvar_cl_vore_autodigest;\r
352 .float cvar_chase_active;\r
353 \r
354 void Announce(string snd);\r
355 void AnnounceTo(entity e, string snd);\r
356 \r
357 .float version_nagtime;\r
358 \r
359 .float skinindex;\r
360 \r
361 #define NUM_JUMPPADSUSED 3\r
362 .float jumppadcount;\r
363 .entity jumppadsused[NUM_JUMPPADSUSED];\r
364 \r
365 string gamemode_name;\r
366 float teams_matter;\r
367 \r
368 float startitem_failed;\r
369 \r
370 void DropFlag(entity flag, entity penalty_receiver, entity attacker);\r
371 \r
372 \r
373 typedef .float floatfield;\r
374 floatfield Item_CounterField(float it);\r
375 \r
376 float W_AmmoItemCode(float wpn);\r
377 float W_WeaponBit(float wpn);\r
378 string W_Name(float weaponid);\r
379 \r
380 void UpdateSelectedPlayer();\r
381 void ClearSelectedPlayer();\r
382 .entity selected_player;\r
383 .entity last_selected_player;\r
384 .float selected_player_time; // when this player has been selected\r
385 .float selected_player_count; // how long this player has been directly pointed to\r
386 .float selected_player_display_needs_update; // are regular updates necessary? (health)\r
387 .float selected_player_display_timeout; // when the selection will time out\r
388 \r
389 void FixIntermissionClient(entity e);\r
390 void FixClientCvars(entity e);\r
391 \r
392 float weaponsInMap;\r
393 \r
394 void centerprint_atprio(entity e, float prio, string s);\r
395 void centerprint_expire(entity e, float prio);\r
396 void centerprint(entity e, string s);\r
397 \r
398 .float respawn_countdown; // next number to count\r
399 \r
400 float bot_waypoints_for_items;\r
401 \r
402 .float attack_finished_for[WEP_MAXCOUNT];\r
403 .float attack_finished_single;\r
404 #ifdef INDEPENDENT_ATTACK_FINISHED\r
405 #define ATTACK_FINISHED_FOR(ent,w) ((ent).(attack_finished_for[(w) - WEP_FIRST]))\r
406 #else\r
407 #define ATTACK_FINISHED_FOR(ent,w) ((ent).attack_finished_single)\r
408 #endif\r
409 #define ATTACK_FINISHED(ent) ATTACK_FINISHED_FOR(ent,(ent).weapon)\r
410 \r
411 // assault game mode: Which team is attacking in this round?\r
412 float assault_attacker_team;\r
413 \r
414 // speedrun: when 1, player auto teleports back when capture timeout happens\r
415 .float speedrunning;\r
416 \r
417 // Q3 support\r
418 .float notteam;\r
419 .float notsingle;\r
420 .float notfree;\r
421 .float notq3a;\r
422 float q3acompat_machineshotgunswap;\r
423 \r
424 // database\r
425 float ServerProgsDB;\r
426 float TemporaryDB;\r
427 \r
428 .float team_saved;\r
429 \r
430 float some_spawn_has_been_used;\r
431 float have_team_spawns; // 0 = no team spawns requested, -1 = team spawns requested but none found, 1 = team spawns requested and found\r
432 \r
433 // set when showing a kill countdown\r
434 .entity killindicator;\r
435 .float killindicator_teamchange;\r
436 \r
437 void Damage (entity targ, entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);\r
438 \r
439 float lockteams;\r
440 \r
441 .float parm_idlesince;\r
442 float sv_maxidle;\r
443 float sv_maxidle_spectatorsareidle;\r
444 \r
445 float sv_pogostick;\r
446 float sv_doublejump;\r
447 float tracebox_hits_trigger_hurt(vector start, vector mi, vector ma, vector end);\r
448 \r
449 float next_pingtime;\r
450 \r
451 .float Version;\r
452 .float SendFlags;\r
453 .float(entity to, float sendflags) SendEntity;\r
454 \r
455 // player sounds, voice messages\r
456 // TODO implemented fall and falling\r
457 #define ALLPLAYERSOUNDS \\r
458                 _VOICEMSG(death) \\r
459                 _VOICEMSG(fall) \\r
460                 _VOICEMSG(drown) \\r
461                 _VOICEMSG(gasp) \\r
462                 _VOICEMSG(grab) \\r
463                 _VOICEMSG(swallow) \\r
464                 _VOICEMSG(digest) \\r
465                 _VOICEMSG(regurgitate) \\r
466                 _VOICEMSG(regurgitate_prepare) \\r
467                 _VOICEMSG(gurgle) \\r
468                 _VOICEMSG(jump) \\r
469                 _VOICEMSG(pain25) \\r
470                 _VOICEMSG(pain50) \\r
471                 _VOICEMSG(pain75) \\r
472                 _VOICEMSG(pain100)\r
473 #define ALLVOICEMSGS \\r
474                 _VOICEMSG(attack) \\r
475                 _VOICEMSG(attackinfive) \\r
476                 _VOICEMSG(meet) \\r
477                 _VOICEMSG(seenflag) \\r
478                 _VOICEMSG(taunt) \\r
479                 _VOICEMSG(pred) \\r
480                 _VOICEMSG(prey) \\r
481                 _VOICEMSG(teamshoot)\r
482 \r
483 #define _VOICEMSG(m) .string playersound_##m;\r
484 ALLPLAYERSOUNDS\r
485 ALLVOICEMSGS\r
486 #undef _VOICEMSG\r
487 \r
488 // reserved sound names for the future (models lack sounds for them):\r
489 //              _VOICEMSG(affirmative) \\r
490 //              _VOICEMSG(attacking) \\r
491 //              _VOICEMSG(defending) \\r
492 //              _VOICEMSG(roaming) \\r
493 //              _VOICEMSG(onmyway) \\r
494 //              _VOICEMSG(droppedflag) \\r
495 //              _VOICEMSG(flagcarriertakingdamage) \\r
496 //              _VOICEMSG(negative) \\r
497 //              _VOICEMSG(seenenemy) \\r
498 //              _VOICEMSG(fall) \\r
499 //              _VOICEMSG(getflag) \\r
500 //              _VOICEMSG(incoming) \\r
501 //              _VOICEMSG(coverme) \\r
502 //              _VOICEMSG(needhelp) \\r
503 //              _VOICEMSG(defend) \\r
504 //              _VOICEMSG(freelance) \\r
505 //              _VOICEMSG(falling) \\r
506 \r
507 string globalsound_fall;\r
508 string globalsound_metalfall;\r
509 string globalsound_step;\r
510 string globalsound_metalstep;\r
511 \r
512 #define VOICETYPE_PLAYERSOUND 10\r
513 #define VOICETYPE_TEAMRADIO 11\r
514 #define VOICETYPE_LASTATTACKER 12\r
515 #define VOICETYPE_LASTATTACKER_ONLY 13\r
516 #define VOICETYPE_AUTOTAUNT 14\r
517 #define VOICETYPE_TAUNT 15\r
518 #define VOICETYPE_GURGLE 16\r
519 \r
520 #define TAUNTTYPE_DEATH 1\r
521 #define TAUNTTYPE_VOREPRED 2\r
522 #define TAUNTTYPE_VOREPREY 3\r
523 \r
524 void PrecachePlayerSounds(string f);\r
525 void PrecacheGlobalSound(string samplestring);\r
526 void UpdatePlayerSounds();\r
527 void ClearPlayerSounds();\r
528 void PlayerSound(entity player, .string samplefield, float channel, float voicetype);\r
529 void GlobalSound(string samplestring, float channel, float voicetype, float vol);\r
530 void VoiceMessage(string type, string message);\r
531 \r
532 // autotaunt system\r
533 .float cvar_cl_autotaunt;\r
534 .float cvar_cl_voice_directional;\r
535 .float cvar_cl_voice_directional_taunt_attenuation;\r
536 \r
537 .float version_mismatch;\r
538 \r
539 float independent_players;\r
540 #define IS_INDEPENDENT_PLAYER(e) ((e).solid == SOLID_TRIGGER)\r
541 #define MAKE_INDEPENDENT_PLAYER(e) (((e).solid = SOLID_TRIGGER) + ((e).frags = FRAGS_PLAYER_NONSOLID))\r
542 // we're using + here instead of , because fteqcc sucks\r
543 \r
544 string clientstuff;\r
545 .float phase;\r
546 .float weapons;\r
547 .float pressedkeys;\r
548 \r
549 .float porto_forbidden;\r
550 \r
551 .string fog;\r
552 \r
553 string cvar_changes;\r
554 \r
555 float game_starttime; //point in time when the countdown is over\r
556 .float stat_game_starttime;\r
557 \r
558 .float projectiledeathtype;\r
559 \r
560 .string message2;\r
561 \r
562 vector railgun_start, railgun_end; // filled by FireRailgunBullet, used by damage code for head shot\r
563 .float stat_allow_oldnexbeam;\r
564 \r
565 void target_voicescript_next(entity pl);\r
566 void target_voicescript_clear(entity pl);\r
567 \r
568 .string target2;\r
569 .string target3;\r
570 .string target4;\r
571 .float trigger_reverse;\r
572 \r
573 void SUB_DontUseTargets();\r
574 void SUB_UseTargets();\r
575 \r
576 .void() reset; // if set, an entity is reset using this\r
577 .void() reset2; // if set, an entity is reset using this (after calling ALL the reset functions for other entities)\r
578 \r
579 void ClientData_Touch(entity e);\r
580 \r
581 vector debug_shotorg; // if non-zero, overrides the shot origin of all weapons\r
582 \r
583 // the QC VM sucks\r
584 #define BITXOR(v,b)        ((v) + (b) - 2 * ((v) & (b)))\r
585 #define BITXOR_ASSIGN(v,b) ((v) += ((b) - 2 * ((v) & (b))))\r
586 \r
587 .float wasplayer;\r
588 \r
589 float servertime, serverprevtime, serverframetime;\r
590 \r
591 .entity soundentity;\r
592 \r
593 .float ammo_fuel;\r
594 \r
595 .vector prevorigin;\r
596 \r
597 //flood fields\r
598 .float nickspamtime; // time of last nick change\r
599 .float nickspamcount;\r
600 .float floodcontrol_chat;\r
601 .float floodcontrol_chatteam;\r
602 .float floodcontrol_chattell;\r
603 .float floodcontrol_voice;\r
604 .float floodcontrol_voiceteam;\r
605 \r
606 .float stat_shotorg; // networked stat for trueaim HUD\r
607 \r
608 string matchid;\r
609 .float hitplotfh;\r
610 .string noise4;\r
611 \r
612 .float last_pickup;\r
613 \r
614 .float stat_hit;\r
615 .float stat_fired;\r
616 .float stat_count;\r
617 \r
618 .float stats_hit[WEP_MAXCOUNT];  // for hitscan bullets hit\r
619 .float stats_fired[WEP_MAXCOUNT];  // for hitscan bullets fired\r
620 \r
621 .float stat_sbring1_type, stat_sbring1_clip, stat_sbring2_type, stat_sbring2_clip;\r
622 .float stat_crosshair_style;\r
623 \r
624 .float stat_leadlimit;\r
625 \r
626 .float stat_respawn_time; // shows respawn time, and is negative when awaiting respawn\r
627 \r
628 #ifdef PROFILING\r
629 float client_cefc_accumulator;\r
630 float client_cefc_accumulatortime;\r
631 #endif\r
632 \r
633 ..float current_ammo;\r
634 \r
635 .float weapon_load[WEP_MAXCOUNT];\r
636 .float clip_load;\r
637 .float old_clip_load;\r
638 .float clip_size;\r
639 \r
640 .float grabber_stunned;\r
641 \r
642 #define PROJECTILE_MAKETRIGGER(e) (e).solid = SOLID_CORPSE; (e).dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE\r
643 // #define PROJECTILE_MAKETRIGGER(e) (e).solid = SOLID_BBOX\r
644 \r
645 .float spectatee_status;\r
646 .float zoomstate;\r
647 .float bloodloss_timer;\r
648 .float restriction;\r
649 \r
650 .entity clientdata;\r
651 .entity personal;\r
652 \r
653 string deathmessage;\r
654 \r
655 .float just_joined;\r
656 \r
657 .float cvar_cl_accuracy_data_share;\r
658 .float cvar_cl_accuracy_data_receive;\r
659 \r
660 // dodging\r
661 .float cvar_cl_dodging_timeout;\r
662 \r
663 // these are used to store the last key press time for each of the keys..\r
664 .float last_FORWARD_KEY_time;\r
665 .float last_BACKWARD_KEY_time;\r
666 .float last_LEFT_KEY_time;\r
667 .float last_RIGHT_KEY_time;\r
668 \r
669 // these store the movement direction at the time of the dodge action happening.\r
670 .float dodging_direction_x;\r
671 .float dodging_direction_y;\r
672 \r
673 // this indicates the last time a dodge was executed. used to check if another one is allowed\r
674 // and to ramp up the dodge acceleration in the physics hook.\r
675 .float last_dodging_time;\r
676 \r
677 // set to 1 to indicate dodging has started.. reset by physics hook after dodge has been done..\r
678 .float dodging_action;\r
679 \r
680 // This is the velocity gain to be added over the ramp time.\r
681 // It will decrease from frame to frame during dodging_action = 1\r
682 // until it's 0.\r
683 .float dodging_velocity_gain;\r
684 \r
685 // the jump part of the dodge cannot be ramped\r
686 .float dodging_single_action;\r