Home | History | Annotate | Download | only in progs
      1 
      2 /*
      3 ==============================================================================
      4 
      5 			SOURCE FOR GLOBALVARS_T C STRUCTURE
      6 
      7 ==============================================================================
      8 */
      9 
     10 //
     11 // system globals
     12 //
     13 entity          self;
     14 entity          other;
     15 entity          world;
     16 float           time;
     17 float           frametime;
     18 
     19 entity          newmis;                         // if this is set, the entity that just
     20 								// run created a new missile that should
     21 								// be simulated immediately
     22 
     23 
     24 float           force_retouch;          // force all entities to touch triggers
     25 								// next frame.  this is needed because
     26 								// non-moving things don't normally scan
     27 								// for triggers, and when a trigger is
     28 								// created (like a teleport trigger), it
     29 								// needs to catch everything.
     30 								// decremented each frame, so set to 2
     31 								// to guarantee everything is touched
     32 string          mapname;
     33 
     34 float           serverflags;            // propagated from level to level, used to
     35 								// keep track of completed episodes
     36 
     37 float           total_secrets;
     38 float           total_monsters;
     39 
     40 float           found_secrets;          // number of secrets found
     41 float           killed_monsters;        // number of monsters killed
     42 
     43 
     44 // spawnparms are used to encode information about clients across server
     45 // level changes
     46 float           parm1, parm2, parm3, parm4, parm5, parm6, parm7, parm8, parm9, parm10, parm11, parm12, parm13, parm14, parm15, parm16;
     47 
     48 //
     49 // global variables set by built in functions
     50 //      
     51 vector          v_forward, v_up, v_right;       // set by makevectors()
     52 	
     53 // set by traceline / tracebox
     54 float           trace_allsolid;
     55 float           trace_startsolid;
     56 float           trace_fraction;
     57 vector          trace_endpos;
     58 vector          trace_plane_normal;
     59 float           trace_plane_dist;
     60 entity          trace_ent;
     61 float           trace_inopen;
     62 float           trace_inwater;
     63 
     64 entity          msg_entity;                             // destination of single entity writes
     65 
     66 //
     67 // required prog functions
     68 //
     69 void()          main;                                           // only for testing
     70 
     71 void()          StartFrame;
     72 
     73 void()          PlayerPreThink;
     74 void()          PlayerPostThink;
     75 
     76 void()          ClientKill;
     77 void()          ClientConnect;
     78 void()          PutClientInServer;              // call after setting the parm1... parms
     79 void()          ClientDisconnect;
     80 
     81 void()          SetNewParms;                    // called when a client first connects to
     82 									// a server. sets parms so they can be
     83 									// saved off for restarts
     84 
     85 void()          SetChangeParms;                 // call to set parms for self so they can
     86 									// be saved for a level transition
     87 
     88 
     89 //================================================
     90 void            end_sys_globals;                // flag for structure dumping
     91 //================================================
     92 
     93 /*
     94 ==============================================================================
     95 
     96 			SOURCE FOR ENTVARS_T C STRUCTURE
     97 
     98 ==============================================================================
     99 */
    100 
    101 //
    102 // system fields (*** = do not set in prog code, maintained by C code)
    103 //
    104 .float          modelindex;             // *** model index in the precached list
    105 .vector         absmin, absmax; // *** origin + mins / maxs
    106 
    107 .float          ltime;                  // local time for entity
    108 .float          lastruntime;    // *** to allow entities to run out of sequence
    109 
    110 .float          movetype;
    111 .float          solid;
    112 
    113 .vector         origin;                 // ***
    114 .vector         oldorigin;              // ***
    115 .vector         velocity;
    116 .vector         angles;
    117 .vector         avelocity;
    118 
    119 .string         classname;              // spawn function
    120 .string         model;
    121 .float          frame;
    122 .float          skin;
    123 .float          effects;
    124 
    125 .vector         mins, maxs;             // bounding box extents reletive to origin
    126 .vector         size;                   // maxs - mins
    127 
    128 .void()         touch;
    129 .void()         use;
    130 .void()         think;
    131 .void()         blocked;                // for doors or plats, called when can't push other
    132 
    133 .float          nextthink;
    134 .entity         groundentity;
    135 
    136 
    137 
    138 // stats
    139 .float          health;
    140 .float          frags;
    141 .float          weapon;                 // one of the IT_SHOTGUN, etc flags
    142 .string         weaponmodel;
    143 .float          weaponframe;
    144 .float          currentammo;
    145 .float          ammo_shells, ammo_nails, ammo_rockets, ammo_cells;
    146 
    147 .float          items;                  // bit flags
    148 
    149 .float          takedamage;
    150 .entity         chain;
    151 .float          deadflag;
    152 
    153 .vector         view_ofs;                       // add to origin to get eye point
    154 
    155 
    156 .float          button0;                // fire
    157 .float          button1;                // use
    158 .float          button2;                // jump
    159 
    160 .float          impulse;                // weapon changes
    161 
    162 .float          fixangle;
    163 .vector         v_angle;                // view / targeting angle for players
    164 
    165 .string         netname;
    166 
    167 .entity         enemy;
    168 
    169 .float          flags;
    170 
    171 .float          colormap;
    172 .float          team;
    173 
    174 .float          max_health;             // players maximum health is stored here
    175 
    176 .float          teleport_time;  // don't back up
    177 
    178 .float          armortype;              // save this fraction of incoming damage
    179 .float          armorvalue;
    180 
    181 .float          waterlevel;             // 0 = not in, 1 = feet, 2 = wast, 3 = eyes
    182 .float          watertype;              // a contents value
    183 
    184 .float          ideal_yaw;
    185 .float          yaw_speed;
    186 
    187 .entity         aiment;
    188 
    189 .entity         goalentity;             // a movetarget or an enemy
    190 
    191 .float          spawnflags;
    192 
    193 .string         target;
    194 .string         targetname;
    195 
    196 // damage is accumulated through a frame. and sent as one single
    197 // message, so the super shotgun doesn't generate huge messages
    198 .float          dmg_take;
    199 .float          dmg_save;
    200 .entity         dmg_inflictor;
    201 
    202 .entity         owner;          // who launched a missile
    203 .vector         movedir;        // mostly for doors, but also used for waterjump
    204 
    205 .string         message;                // trigger messages
    206 
    207 .float          sounds;         // either a cd track number or sound number
    208 
    209 .string         noise, noise1, noise2, noise3;  // contains names of wavs to play
    210 
    211 //================================================
    212 void            end_sys_fields;                 // flag for structure dumping
    213 //================================================
    214 
    215 /*
    216 ==============================================================================
    217 
    218 				VARS NOT REFERENCED BY C CODE
    219 
    220 ==============================================================================
    221 */
    222 
    223 
    224 //
    225 // constants
    226 //
    227 
    228 float   FALSE                                   = 0;
    229 float   TRUE                                    = 1;
    230 
    231 // edict.flags
    232 float   FL_FLY                                  = 1;
    233 float   FL_SWIM                                 = 2;
    234 float   FL_CLIENT                               = 8;    // set for all client edicts
    235 float   FL_INWATER                              = 16;   // for enter / leave water splash
    236 float   FL_MONSTER                              = 32;
    237 float   FL_GODMODE                              = 64;   // player cheat
    238 float   FL_NOTARGET                             = 128;  // player cheat
    239 float   FL_ITEM                                 = 256;  // extra wide size for bonus items
    240 float   FL_ONGROUND                             = 512;  // standing on something
    241 float   FL_PARTIALGROUND                = 1024; // not all corners are valid
    242 float   FL_WATERJUMP                    = 2048; // player jumping out of water
    243 float   FL_JUMPRELEASED                 = 4096; // for jump debouncing
    244 
    245 // edict.movetype values
    246 float   MOVETYPE_NONE                   = 0;    // never moves
    247 //float MOVETYPE_ANGLENOCLIP    = 1;
    248 //float MOVETYPE_ANGLECLIP              = 2;
    249 float   MOVETYPE_WALK                   = 3;    // players only
    250 float   MOVETYPE_STEP                   = 4;    // discrete, not real time unless fall
    251 float   MOVETYPE_FLY                    = 5;
    252 float   MOVETYPE_TOSS                   = 6;    // gravity
    253 float   MOVETYPE_PUSH                   = 7;    // no clip to world, push and crush
    254 float   MOVETYPE_NOCLIP                 = 8;
    255 float   MOVETYPE_FLYMISSILE             = 9;    // fly with extra size against monsters
    256 float   MOVETYPE_BOUNCE                 = 10;
    257 float   MOVETYPE_BOUNCEMISSILE  = 11;   // bounce with extra size
    258 
    259 // edict.solid values
    260 float   SOLID_NOT                               = 0;    // no interaction with other objects
    261 float   SOLID_TRIGGER                   = 1;    // touch on edge, but not blocking
    262 float   SOLID_BBOX                              = 2;    // touch on edge, block
    263 float   SOLID_SLIDEBOX                  = 3;    // touch on edge, but not an onground
    264 float   SOLID_BSP                               = 4;    // bsp clip, touch on edge, block
    265 
    266 // range values
    267 float   RANGE_MELEE                             = 0;
    268 float   RANGE_NEAR                              = 1;
    269 float   RANGE_MID                               = 2;
    270 float   RANGE_FAR                               = 3;
    271 
    272 // deadflag values
    273 
    274 float   DEAD_NO                                 = 0;
    275 float   DEAD_DYING                              = 1;
    276 float   DEAD_DEAD                               = 2;
    277 float   DEAD_RESPAWNABLE                = 3;
    278 
    279 // takedamage values
    280 
    281 float   DAMAGE_NO                               = 0;
    282 float   DAMAGE_YES                              = 1;
    283 float   DAMAGE_AIM                              = 2;
    284 
    285 // items
    286 float   IT_AXE                                  = 4096;
    287 float   IT_SHOTGUN                              = 1;
    288 float   IT_SUPER_SHOTGUN                = 2;
    289 float   IT_NAILGUN                              = 4;
    290 float   IT_SUPER_NAILGUN                = 8;
    291 float   IT_GRENADE_LAUNCHER             = 16;
    292 float   IT_ROCKET_LAUNCHER              = 32;
    293 float   IT_LIGHTNING                    = 64;
    294 float   IT_EXTRA_WEAPON                 = 128;
    295 
    296 float   IT_SHELLS                               = 256;
    297 float   IT_NAILS                                = 512;
    298 float   IT_ROCKETS                              = 1024;
    299 float   IT_CELLS                                = 2048;
    300 
    301 float   IT_ARMOR1                               = 8192;
    302 float   IT_ARMOR2                               = 16384;
    303 float   IT_ARMOR3                               = 32768;
    304 float   IT_SUPERHEALTH                  = 65536;
    305 
    306 float   IT_KEY1                                 = 131072;
    307 float   IT_KEY2                                 = 262144;
    308 
    309 float   IT_INVISIBILITY                 = 524288;
    310 float   IT_INVULNERABILITY              = 1048576;
    311 float   IT_SUIT                                 = 2097152;
    312 float   IT_QUAD                                 = 4194304;
    313 
    314 // point content values
    315 
    316 float   CONTENT_EMPTY                   = -1;
    317 float   CONTENT_SOLID                   = -2;
    318 float   CONTENT_WATER                   = -3;
    319 float   CONTENT_SLIME                   = -4;
    320 float   CONTENT_LAVA                    = -5;
    321 float   CONTENT_SKY                             = -6;
    322 
    323 float   STATE_TOP               = 0;
    324 float   STATE_BOTTOM    = 1;
    325 float   STATE_UP                = 2;
    326 float   STATE_DOWN              = 3;
    327 
    328 vector  VEC_ORIGIN = '0 0 0';
    329 vector  VEC_HULL_MIN = '-16 -16 -24';
    330 vector  VEC_HULL_MAX = '16 16 32';
    331 
    332 vector  VEC_HULL2_MIN = '-32 -32 -24';
    333 vector  VEC_HULL2_MAX = '32 32 64';
    334 
    335 // protocol bytes
    336 float   SVC_TEMPENTITY          = 23;
    337 float   SVC_KILLEDMONSTER       = 27;
    338 float   SVC_FOUNDSECRET         = 28;
    339 float   SVC_INTERMISSION        = 30;
    340 float   SVC_FINALE                      = 31;
    341 float   SVC_CDTRACK                     = 32;
    342 float   SVC_SELLSCREEN          = 33;
    343 float   SVC_SMALLKICK           = 34;
    344 float   SVC_BIGKICK                     = 35;
    345 float   SVC_MUZZLEFLASH         = 39;
    346 
    347 
    348 float   TE_SPIKE                = 0;
    349 float   TE_SUPERSPIKE   = 1;
    350 float   TE_GUNSHOT              = 2;
    351 float   TE_EXPLOSION    = 3;
    352 float   TE_TAREXPLOSION = 4;
    353 float   TE_LIGHTNING1   = 5;
    354 float   TE_LIGHTNING2   = 6;
    355 float   TE_WIZSPIKE             = 7;
    356 float   TE_KNIGHTSPIKE  = 8;
    357 float   TE_LIGHTNING3   = 9;
    358 float   TE_LAVASPLASH   = 10;
    359 float   TE_TELEPORT             = 11;
    360 float   TE_BLOOD                = 12;
    361 float   TE_LIGHTNINGBLOOD = 13;
    362 
    363 // sound channels
    364 // channel 0 never willingly overrides
    365 // other channels (1-7) allways override a playing sound on that channel
    366 float   CHAN_AUTO               = 0;
    367 float   CHAN_WEAPON             = 1;
    368 float   CHAN_VOICE              = 2;
    369 float   CHAN_ITEM               = 3;
    370 float   CHAN_BODY               = 4;
    371 float   CHAN_NO_PHS_ADD = 8;    // ie: CHAN_BODY+CHAN_NO_PHS_ADD
    372 
    373 float   ATTN_NONE               = 0;
    374 float   ATTN_NORM               = 1;
    375 float   ATTN_IDLE               = 2;
    376 float   ATTN_STATIC             = 3;
    377 
    378 // update types
    379 
    380 float   UPDATE_GENERAL  = 0;
    381 float   UPDATE_STATIC   = 1;
    382 float   UPDATE_BINARY   = 2;
    383 float   UPDATE_TEMP             = 3;
    384 
    385 // entity effects
    386 
    387 //float EF_BRIGHTFIELD  = 1;
    388 //float EF_MUZZLEFLASH  = 2;
    389 float   EF_BRIGHTLIGHT  = 4;
    390 float   EF_DIMLIGHT     = 8;
    391 float   EF_FLAG1                = 16;
    392 float   EF_FLAG2                = 32;
    393 // GLQuakeWorld Stuff
    394 float 	EF_BLUE		=	64;	// Blue Globe effect for Quad
    395 float	EF_RED		=	128;	// Red Globe effect for Pentagram
    396 // messages
    397 float   MSG_BROADCAST   = 0;            // unreliable to all
    398 float   MSG_ONE                 = 1;            // reliable to one (msg_entity)
    399 float   MSG_ALL                 = 2;            // reliable to all
    400 float   MSG_INIT                = 3;            // write to the init string
    401 float   MSG_MULTICAST   = 4;            // for multicast() call
    402 
    403 // message levels
    404 float   PRINT_LOW               = 0;            // pickup messages
    405 float   PRINT_MEDIUM    	= 1;            // death messages
    406 float   PRINT_HIGH              = 2;            // critical messages
    407 float   PRINT_CHAT              = 3;            // also goes to chat console
    408 
    409 // multicast sets
    410 float   MULTICAST_ALL   = 0;            // every client
    411 float   MULTICAST_PHS   = 1;            // within hearing
    412 float   MULTICAST_PVS   = 2;            // within sight
    413 float   MULTICAST_ALL_R = 3;            // every client, reliable
    414 float   MULTICAST_PHS_R = 4;            // within hearing, reliable
    415 float   MULTICAST_PVS_R = 5;            // within sight, reliable
    416 
    417 
    418 
    419 
    420 //================================================
    421 
    422 //
    423 // globals
    424 //
    425 float   movedist;
    426 
    427 string  string_null;    // null string, nothing should be held here
    428 float   empty_float;
    429 
    430 entity  activator;              // the entity that activated a trigger or brush
    431 
    432 entity  damage_attacker;        // set by T_Damage
    433 entity  damage_inflictor;
    434 float   framecount;
    435 
    436 //
    437 // cvars checked each frame
    438 //
    439 float           teamplay;
    440 float           timelimit;
    441 float           fraglimit;
    442 float           deathmatch;
    443 float           rj                      =       1;
    444 
    445 //================================================
    446 
    447 //
    448 // world fields (FIXME: make globals)
    449 //
    450 .string         wad;
    451 .string         map;
    452 .float          worldtype;      // 0=medieval 1=metal 2=base
    453 
    454 //================================================
    455 
    456 .string         killtarget;
    457 
    458 //
    459 // quakeed fields
    460 //
    461 .float          light_lev;              // not used by game, but parsed by light util
    462 .float          style;
    463 
    464 
    465 //
    466 // monster ai
    467 //
    468 .void()         th_stand;
    469 .void()         th_walk;
    470 .void()         th_run;
    471 .void()         th_missile;
    472 .void()         th_melee;
    473 .void(entity attacker, float damage)            th_pain;
    474 .void()         th_die;
    475 
    476 .entity         oldenemy;               // mad at this player before taking damage
    477 
    478 .float          speed;
    479 
    480 .float  lefty;
    481 
    482 .float  search_time;
    483 .float  attack_state;
    484 
    485 float   AS_STRAIGHT             = 1;
    486 float   AS_SLIDING              = 2;
    487 float   AS_MELEE                = 3;
    488 float   AS_MISSILE              = 4;
    489 
    490 //
    491 // player only fields
    492 //
    493 .float          voided;
    494 .float          walkframe;
    495 
    496 // Zoid Additions
    497 .float		maxspeed;		// Used to set Maxspeed on a player
    498 .float		gravity;		// Gravity Multiplier (0 to 1.0)
    499 
    500 
    501 
    502 .float          attack_finished;
    503 .float          pain_finished;
    504 
    505 .float          invincible_finished;
    506 .float          invisible_finished;
    507 .float          super_damage_finished;
    508 .float          radsuit_finished;
    509 
    510 .float          invincible_time, invincible_sound;
    511 .float          invisible_time, invisible_sound;
    512 .float          super_time, super_sound;
    513 .float          rad_time;
    514 .float          fly_sound;
    515 
    516 .float          axhitme;
    517 
    518 .float          show_hostile;   // set to time+0.2 whenever a client fires a
    519 							// weapon or takes damage.  Used to alert
    520 							// monsters that otherwise would let the player go
    521 .float          jump_flag;              // player jump flag
    522 .float          swim_flag;              // player swimming sound flag
    523 .float          air_finished;   // when time > air_finished, start drowning
    524 .float          bubble_count;   // keeps track of the number of bubbles
    525 .string         deathtype;              // keeps track of how the player died
    526 
    527 //
    528 // object stuff
    529 //
    530 .string         mdl;
    531 .vector         mangle;                 // angle at start
    532 
    533 .vector         oldorigin;              // only used by secret door
    534 
    535 .float          t_length, t_width;
    536 
    537 
    538 //
    539 // doors, etc
    540 //
    541 .vector         dest, dest1, dest2;
    542 .float          wait;                   // time from firing to restarting
    543 .float          delay;                  // time from activation to firing
    544 .entity         trigger_field;  // door's trigger entity
    545 .string         noise4;
    546 
    547 //
    548 // monsters
    549 //
    550 .float          pausetime;
    551 .entity         movetarget;
    552 
    553 
    554 //
    555 // doors
    556 //
    557 .float          aflag;
    558 .float          dmg;                    // damage done by door when hit
    559 	
    560 //
    561 // misc
    562 //
    563 .float          cnt;                    // misc flag
    564 	
    565 //
    566 // subs
    567 //
    568 .void()         think1;
    569 .vector         finaldest, finalangle;
    570 
    571 //
    572 // triggers
    573 //
    574 .float          count;                  // for counting triggers
    575 
    576 
    577 //
    578 // plats / doors / buttons
    579 //
    580 .float          lip;
    581 .float          state;
    582 .vector         pos1, pos2;             // top and bottom positions
    583 .float          height;
    584 
    585 //
    586 // sounds
    587 //
    588 .float          waitmin, waitmax;
    589 .float          distance;
    590 .float          volume;
    591 
    592 
    593 
    594 
    595 //===========================================================================
    596 	
    597 
    598 //
    599 // builtin functions
    600 //
    601 
    602 void(vector ang)        makevectors             = #1;           // sets v_forward, etc globals
    603 void(entity e, vector o) setorigin      = #2;
    604 void(entity e, string m) setmodel       = #3;           // set movetype and solid first
    605 void(entity e, vector min, vector max) setsize = #4;
    606 // #5 was removed
    607 void() break                                            = #6;
    608 float() random                                          = #7;           // returns 0 - 1
    609 void(entity e, float chan, string samp, float vol, float atten) sound = #8;
    610 vector(vector v) normalize                      = #9;
    611 void(string e) error                            = #10;
    612 void(string e) objerror                         = #11;
    613 float(vector v) vlen                            = #12;
    614 float(vector v) vectoyaw                        = #13;
    615 entity() spawn                                          = #14;
    616 void(entity e) remove                           = #15;
    617 
    618 // sets trace_* globals
    619 // nomonsters can be:
    620 // An entity will also be ignored for testing if forent == test,
    621 // forent->owner == test, or test->owner == forent
    622 // a forent of world is ignored
    623 void(vector v1, vector v2, float nomonsters, entity forent) traceline = #16;    
    624 
    625 entity() checkclient                            = #17;  // returns a client to look for
    626 entity(entity start, .string fld, string match) find = #18;
    627 string(string s) precache_sound         = #19;
    628 string(string s) precache_model         = #20;
    629 void(entity client, string s)stuffcmd = #21;
    630 entity(vector org, float rad) findradius = #22;
    631 void(float level, string s) bprint                              = #23;
    632 void(entity client, float level, string s) sprint = #24;
    633 void(string s) dprint                           = #25;
    634 string(float f) ftos                            = #26;
    635 string(vector v) vtos                           = #27;
    636 void() coredump                                         = #28;          // prints all edicts
    637 void() traceon                                          = #29;          // turns statment trace on
    638 void() traceoff                                         = #30;
    639 void(entity e) eprint                           = #31;          // prints an entire edict
    640 float(float yaw, float dist) walkmove   = #32;  // returns TRUE or FALSE
    641 // #33 was removed
    642 float(float yaw, float dist) droptofloor= #34;  // TRUE if landed on floor
    643 void(float style, string value) lightstyle = #35;
    644 float(float v) rint                                     = #36;          // round to nearest int
    645 float(float v) floor                            = #37;          // largest integer <= v
    646 float(float v) ceil                                     = #38;          // smallest integer >= v
    647 // #39 was removed
    648 float(entity e) checkbottom                     = #40;          // true if self is on ground
    649 float(vector v) pointcontents           = #41;          // returns a CONTENT_*
    650 // #42 was removed
    651 float(float f) fabs = #43;
    652 vector(entity e, float speed) aim = #44;                // returns the shooting vector
    653 float(string s) cvar = #45;                                             // return cvar.value
    654 void(string s) localcmd = #46;                                  // put string into local que
    655 entity(entity e) nextent = #47;                                 // for looping through all ents
    656 // #48 was removed
    657 void() ChangeYaw = #49;                                         // turn towards self.ideal_yaw
    658 											// at self.yaw_speed
    659 // #50 was removed
    660 vector(vector v) vectoangles                    = #51;
    661 
    662 //
    663 // direct client message generation
    664 //
    665 void(float to, float f) WriteByte               = #52;
    666 void(float to, float f) WriteChar               = #53;
    667 void(float to, float f) WriteShort              = #54;
    668 void(float to, float f) WriteLong               = #55;
    669 void(float to, float f) WriteCoord              = #56;
    670 void(float to, float f) WriteAngle              = #57;
    671 void(float to, string s) WriteString    = #58;
    672 void(float to, entity s) WriteEntity    = #59;
    673 
    674 // several removed
    675 
    676 void(float step) movetogoal                             = #67;
    677 
    678 string(string s) precache_file          = #68;  // no effect except for -copy
    679 void(entity e) makestatic               = #69;
    680 void(string s) changelevel = #70;
    681 
    682 //#71 was removed
    683 
    684 void(string var, string val) cvar_set = #72;    // sets cvar.value
    685 
    686 void(entity client, string s) centerprint = #73;        // sprint, but in middle
    687 
    688 void(vector pos, string samp, float vol, float atten) ambientsound = #74;
    689 
    690 string(string s) precache_model2        = #75;          // registered version only
    691 string(string s) precache_sound2        = #76;          // registered version only
    692 string(string s) precache_file2         = #77;          // registered version only
    693 
    694 void(entity e) setspawnparms            = #78;          // set parm1... to the
    695 												// values at level start
    696 												// for coop respawn
    697 void(entity killer, entity killee) logfrag = #79;       // add to stats
    698 
    699 string(entity e, string key) infokey    = #80;  // get a key value (world = serverinfo)
    700 float(string s) stof                            = #81;          // convert string to float
    701 void(vector where, float set) multicast = #82;  // sends the temp message to a set
    702 												// of clients, possibly in PVS or PHS
    703 
    704 //============================================================================
    705 
    706 //
    707 // subs.qc
    708 //
    709 void(vector tdest, float tspeed, void() func) SUB_CalcMove;
    710 void(entity ent, vector tdest, float tspeed, void() func) SUB_CalcMoveEnt;
    711 void(vector destangle, float tspeed, void() func) SUB_CalcAngleMove;
    712 void()  SUB_CalcMoveDone;
    713 void() SUB_CalcAngleMoveDone;
    714 void() SUB_Null;
    715 void() SUB_UseTargets;
    716 void() SUB_Remove;
    717 
    718 //
    719 //      combat.qc
    720 //
    721 void(entity targ, entity inflictor, entity attacker, float damage) T_Damage;
    722 
    723 
    724 float (entity e, float healamount, float ignore) T_Heal; // health function
    725 
    726 float(entity targ, entity inflictor) CanDamage;
    727 
    728 
    729