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