/* ============================================================================== SOURCE FOR GLOBALVARS_T C STRUCTURE ============================================================================== */ // // system globals // @extern entity other; @extern entity world; @extern float time; @extern float frametime; @extern entity newmis; // if this is set, the entity that just // run created a new missile that should // be simulated immediately @extern float force_retouch; // force all entities to touch triggers // next frame. this is needed because // non-moving things don't normally scan // for triggers, and when a trigger is // created (like a teleport trigger), it // needs to catch everything. // decremented each frame, so set to 2 // to guarantee everything is touched @extern string mapname; @extern float serverflags; // propagated from level to level, used to // keep track of completed episodes @extern float total_secrets; @extern float total_monsters; @extern float found_secrets; // number of secrets found @extern float killed_monsters; // number of monsters killed // spawnparms are used to encode information about clients across server // level changes @extern float parm1, parm2, parm3, parm4, parm5, parm6, parm7, parm8, parm9, parm10, parm11, parm12, parm13, parm14, parm15, parm16; // // global variables set by built in functions // @extern vector v_forward, v_up, v_right; // set by makevectors() // set by traceline / tracebox @extern float trace_allsolid; @extern float trace_startsolid; @extern float trace_fraction; @extern vector trace_endpos; @extern vector trace_plane_normal; @extern float trace_plane_dist; @extern entity trace_ent; @extern float trace_inopen; @extern float trace_inwater; @extern entity msg_entity; // destination of single entity writes // // required prog functions // @extern void() main; // only for testing @extern void() StartFrame; @extern void() PlayerPreThink; @extern void() PlayerPostThink; @extern void() ClientKill; @extern void() ClientConnect; @extern void() PutClientInServer; // call after setting the parm1... parms @extern void() ClientDisconnect; @extern void() SetNewParms; // called when a client first connects to // a server. sets parms so they can be // saved off for restarts @extern void() SetChangeParms; // call to set parms for self so they can // be saved for a level transition //================================================ @extern void end_sys_globals; // flag for structure dumping //================================================ /* ============================================================================== SOURCE FOR ENTVARS_T C STRUCTURE ============================================================================== */ // // system fields (*** = do not set in prog code, maintained by C code) // @extern .float modelindex; // *** model index in the precached list @extern .vector absmin, absmax; // *** origin + mins / maxs @extern .float ltime; // local time for entity @extern .float lastruntime; // *** to allow entities to run out of sequence @extern .float movetype; @extern .float solid; @extern .vector origin; // *** @extern .vector oldorigin; // *** @extern .vector velocity; @extern .vector angles; @extern .vector avelocity; @extern .string classname; // spawn function @extern .string model; @extern .float frame; @extern .float skin; @extern .float effects; @extern .vector mins, maxs; // bounding box extents reletive to origin @extern .vector size; // maxs - mins @extern .void() touch; @extern .void() use; @extern .void() think; @extern .void() blocked; // for doors or plats, called when can't push other @extern .float nextthink; @extern .entity groundentity; // stats @extern .float health; @extern .float frags; @extern .float weapon; // one of the IT_SHOTGUN, etc flags @extern .string weaponmodel; @extern .float weaponframe; @extern .float currentammo; @extern .float ammo_shells, ammo_nails, ammo_rockets, ammo_cells; @extern .float items; // bit flags @extern .float takedamage; @extern .entity chain; @extern .float deadflag; @extern .vector view_ofs; // add to origin to get eye point @extern .float button0; // fire @extern .float button1; // use @extern .float button2; // jump @extern .float impulse; // weapon changes @extern .float fixangle; @extern .vector v_angle; // view / targeting angle for players @extern .string netname; @extern .entity enemy; @extern .float flags; @extern .float colormap; @extern .float team; @extern .float max_health; // players maximum health is stored here @extern .float teleport_time; // don't back up @extern .float armortype; // save this fraction of incoming damage @extern .float armorvalue; @extern .float waterlevel; // 0 = not in, 1 = feet, 2 = wast, 3 = eyes @extern .float watertype; // a contents value @extern .float ideal_yaw; @extern .float yaw_speed; @extern .entity aiment; @extern .entity goalentity; // a movetarget or an enemy @extern .float spawnflags; @extern .string target; @extern .string targetname; // damage is accumulated through a frame. and sent as one single // message, so the super shotgun doesn't generate huge messages @extern .float dmg_take; @extern .float dmg_save; @extern .entity dmg_inflictor; @extern .entity owner; // who launched a missile @extern .vector movedir; // mostly for doors, but also used for waterjump @extern .string message; // trigger messages @extern .float sounds; // either a cd track number or sound number @extern .string noise, noise1, noise2, noise3; // contains names of wavs to play //================================================ @extern void end_sys_fields; // flag for structure dumping //================================================ /* ============================================================================== VARS NOT REFERENCED BY C CODE ============================================================================== */ // // constants // // edict.flags @extern float FL_FLY; @extern float FL_SWIM; @extern float FL_CLIENT; // set for all client edicts @extern float FL_INWATER; // for enter / leave water splash @extern float FL_MONSTER; @extern float FL_GODMODE; // player cheat @extern float FL_NOTARGET; // player cheat @extern float FL_ITEM; // extra wide size for bonus items @extern float FL_ONGROUND; // standing on something @extern float FL_PARTIALGROUND; // not all corners are valid @extern float FL_WATERJUMP; // player jumping out of water @extern float FL_JUMPRELEASED; // for jump debouncing // edict.movetype values #define MOVETYPE_NONE 0 // never moves //#define MOVETYPE_ANGLENOCLIP 1 //#define MOVETYPE_ANGLECLIP 2 #define MOVETYPE_WALK 3 // players only #define MOVETYPE_STEP 4 // discrete, not real time unless fall #define MOVETYPE_FLY 5 #define MOVETYPE_TOSS 6 // gravity #define MOVETYPE_PUSH 7 // no clip to world, push and crush #define MOVETYPE_NOCLIP 8 #define MOVETYPE_FLYMISSILE 9 // fly with extra size against monsters #define MOVETYPE_BOUNCE 10 #define MOVETYPE_BOUNCEMISSILE 11 // bounce with extra size // edict.solid values @extern float SOLID_NOT; // no interaction with other objects @extern float SOLID_TRIGGER; // touch on edge, but not blocking @extern float SOLID_BBOX; // touch on edge, block @extern float SOLID_SLIDEBOX; // touch on edge, but not an onground @extern float SOLID_BSP; // bsp clip, touch on edge, block // range values @extern float RANGE_MELEE; @extern float RANGE_NEAR; @extern float RANGE_MID; @extern float RANGE_FAR; // deadflag values @extern float DEAD_NO; @extern float DEAD_DYING; @extern float DEAD_DEAD; @extern float DEAD_RESPAWNABLE; // takedamage values @extern float DAMAGE_NO; @extern float DAMAGE_YES; @extern float DAMAGE_AIM; // items #define IT_AXE 0x001000 #define IT_SHOTGUN 0x000001 #define IT_SUPER_SHOTGUN 0x000002 #define IT_NAILGUN 0x000004 #define IT_SUPER_NAILGUN 0x000008 #define IT_GRENADE_LAUNCHER 0x000010 #define IT_ROCKET_LAUNCHER 0x000020 #define IT_LIGHTNING 0x000040 #define IT_EXTRA_WEAPON 0x000080 #define IT_SHELLS 0x000100 #define IT_NAILS 0x000200 #define IT_ROCKETS 0x000400 #define IT_CELLS 0x000800 #define IT_ARMOR1 0x002000 #define IT_ARMOR2 0x004000 #define IT_ARMOR3 0x008000 #define IT_SUPERHEALTH 0x010000 #define IT_KEY1 0x020000 #define IT_KEY2 0x040000 #define IT_INVISIBILITY 0x080000 #define IT_INVULNERABILITY 0x100000 #define IT_SUIT 0x200000 #define IT_QUAD 0x400000 // point content values @extern float CONTENT_EMPTY; @extern float CONTENT_SOLID; @extern float CONTENT_WATER; @extern float CONTENT_SLIME; @extern float CONTENT_LAVA; @extern float CONTENT_SKY; @extern float STATE_TOP; @extern float STATE_BOTTOM; @extern float STATE_UP; @extern float STATE_DOWN; @extern vector VEC_ORIGIN; @extern vector VEC_HULL_MIN; @extern vector VEC_HULL_MAX; @extern vector VEC_HULL2_MIN; @extern vector VEC_HULL2_MAX; // protocol bytes @extern float SVC_TEMPENTITY; @extern float SVC_KILLEDMONSTER; @extern float SVC_FOUNDSECRET; @extern float SVC_INTERMISSION; @extern float SVC_FINALE; @extern float SVC_CDTRACK; @extern float SVC_SELLSCREEN; @extern float SVC_SMALLKICK; @extern float SVC_BIGKICK; @extern float SVC_MUZZLEFLASH; @extern float TE_SPIKE; @extern float TE_SUPERSPIKE; @extern float TE_GUNSHOT; @extern float TE_EXPLOSION; @extern float TE_TAREXPLOSION; @extern float TE_LIGHTNING1; @extern float TE_LIGHTNING2; @extern float TE_WIZSPIKE; @extern float TE_KNIGHTSPIKE; @extern float TE_LIGHTNING3; @extern float TE_LAVASPLASH; @extern float TE_TELEPORT; @extern float TE_BLOOD; @extern float TE_LIGHTNINGBLOOD; // sound channels // channel 0 never willingly overrides // other channels (1-7) allways override a playing sound on that channel @extern float CHAN_AUTO; @extern float CHAN_WEAPON; @extern float CHAN_VOICE; @extern float CHAN_ITEM; @extern float CHAN_BODY; @extern float CHAN_NO_PHS_ADD; // ie: CHAN_BODY+CHAN_NO_PHS_ADD @extern float ATTN_NONE; @extern float ATTN_NORM; @extern float ATTN_IDLE; @extern float ATTN_STATIC; // update types @extern float UPDATE_GENERAL; @extern float UPDATE_STATIC; @extern float UPDATE_BINARY; @extern float UPDATE_TEMP; // entity effects //float EF_BRIGHTFIELD; //float EF_MUZZLEFLASH; @extern float EF_BRIGHTLIGHT; @extern float EF_DIMLIGHT; @extern float EF_FLAG1; @extern float EF_FLAG2; // GLQuakeWorld Stuff @extern float EF_BLUE; // Blue Globe effect for Quad @extern float EF_RED; // Red Globe effect for Pentagram // messages @extern float MSG_BROADCAST; // unreliable to all @extern float MSG_ONE; // reliable to one (msg_entity) @extern float MSG_ALL; // reliable to all @extern float MSG_INIT; // write to the init string @extern float MSG_MULTICAST; // for multicast() call // message levels @extern float PRINT_LOW; // pickup messages @extern float PRINT_MEDIUM; // death messages @extern float PRINT_HIGH; // critical messages @extern float PRINT_CHAT; // also goes to chat console // multicast sets @extern float MULTICAST_ALL; // every client @extern float MULTICAST_PHS; // within hearing @extern float MULTICAST_PVS; // within sight @extern float MULTICAST_ALL_R; // every client, reliable @extern float MULTICAST_PHS_R; // within hearing, reliable @extern float MULTICAST_PVS_R; // within sight, reliable //================================================ // // globals // @extern float movedist; @extern string string_null; // null string, nothing should be held here @extern float empty_float; @extern entity activator; // the entity that activated a trigger or brush @extern entity damage_attacker; // set by T_Damage @extern entity damage_inflictor; @extern float framecount; // // cvars checked each frame // @extern float teamplay; @extern float timelimit; @extern float fraglimit; @extern float deathmatch; @extern float rj; //================================================ // // world fields (FIXME: make globals) // @extern .string wad; @extern .string map; @extern .float worldtype; // 0=medieval 1=metal 2=base //================================================ @extern .string killtarget; // // quakeed fields // @extern .float light_lev; // not used by game, but parsed by light util @extern .float style; // // monster ai // @extern .void() th_stand; @extern .void() th_walk; @extern .void() th_run; @extern .void() th_missile; @extern .void() th_melee; @extern .void(entity attacker, float damage) th_pain; @extern .void() th_die; @extern .entity oldenemy; // mad at this player before taking damage @extern .float speed; @extern .float lefty; @extern .float search_time; @extern .float attack_state; @extern float AS_STRAIGHT; @extern float AS_SLIDING; @extern float AS_MELEE; @extern float AS_MISSILE; // // player only fields // @extern .float voided; @extern .float walkframe; // Zoid Additions @extern .float maxspeed; // Used to set Maxspeed on a player @extern .float gravity; // Gravity Multiplier (0 to 1.0) @extern .float attack_finished; @extern .float pain_finished; @extern .float invincible_finished; @extern .float invisible_finished; @extern .float super_damage_finished; @extern .float radsuit_finished; @extern .float invincible_time, invincible_sound; @extern .float invisible_time, invisible_sound; @extern .float super_time, super_sound; @extern .float rad_time; @extern .float fly_sound; @extern .float axhitme; @extern .float show_hostile; // set to time+0.2 whenever a client fires a // weapon or takes damage. Used to alert // monsters that otherwise would let the player go @extern .float jump_flag; // player jump flag @extern .float swim_flag; // player swimming sound flag @extern .float air_finished; // when time > air_finished, start drowning @extern .float bubble_count; // keeps track of the number of bubbles @extern .string deathtype; // keeps track of how the player died // // object stuff // @extern .string mdl; @extern .vector mangle; // angle at start @extern .vector oldorigin; // only used by secret door @extern .float t_length, t_width; // // doors, etc // @extern .vector dest, dest1, dest2; @extern .float wait; // time from firing to restarting @extern .float delay; // time from activation to firing @extern .entity trigger_field; // door's trigger entity @extern .string noise4; // // monsters // @extern .float pausetime; @extern .entity movetarget; // // doors // @extern .float aflag; @extern .float dmg; // damage done by door when hit // // misc // @extern .float cnt; // misc flag // // subs // @extern .void() think1; @extern .vector finaldest, finalangle; // // triggers // @extern .float count; // for counting triggers // // plats / doors / buttons // @extern .float lip; @extern .float state; @extern .vector pos1, pos2; // top and bottom positions @extern .float height; // // sounds // @extern .float waitmin, waitmax; @extern .float distance; @extern .float volume; //=========================================================================== // // builtin functions // @extern void(vector ang) makevectors; // sets v_forward, etc globals @extern void(entity e, vector o) setorigin; @extern void(entity e, string m) setmodel; // set movetype and solid first @extern void(entity e, vector min, vector max) setsize; // #5 was removed //void() break; @extern float() random; // returns 0 - 1 @extern void(entity e, float chan, string samp, float vol, float atten) sound; @extern vector(vector v) normalize; @extern void(string e) error; @extern void(string e) objerror; @extern float(vector v) vlen; @extern float(vector v) vectoyaw; @extern entity() spawn; @extern void(entity e) remove; // sets trace_* globals // nomonsters can be: // An entity will also be ignored for testing if forent == test, // forent->owner == test, or test->owner == forent // a forent of world is ignored @extern void(vector v1, vector v2, float nomonsters, entity forent) traceline; @extern entity() checkclient; // returns a client to look for @extern entity(entity start, ...) find; @extern string(string s) precache_sound; @extern string(string s) precache_model; @extern void(entity client, string s)stuffcmd; @extern entity(vector org, float rad) findradius; @extern void(float level, string s) bprint; @extern void(entity client, float level, string s) sprint; @extern void(string s) dprint; @extern string(float f) ftos; @extern string(vector v) vtos; @extern void() coredump; // prints all edicts @extern void() traceon; // turns statment trace on @extern void() traceoff; @extern void(entity e) eprint; // prints an entire edict @extern float(float yaw, float dist) walkmove; // returns TRUE or FALSE // #33 was removed @extern float() droptofloor; // TRUE if landed on floor @extern void(float style, string value) lightstyle; @extern float(float v) rint; // round to nearest int @extern float(float v) floor; // largest integer <= v @extern float(float v) ceil; // smallest integer >= v // #39 was removed @extern float(entity e) checkbottom; // true if self is on ground @extern float(vector v) pointcontents; // returns a CONTENT_* // #42 was removed @extern float(float f) fabs; @extern vector(entity e, float speed) aim; // returns the shooting vector @extern float(string s) cvar; // return cvar.value @extern void(string s) localcmd; // put string into local que @extern entity(entity e) nextent; // for looping through all ents // #48 was removed @extern void() ChangeYaw; // turn towards self.ideal_yaw // at self.yaw_speed // #50 was removed @extern vector(vector v) vectoangles; // // direct client message generation // @extern void(float to, float f) WriteByte; @extern void(float to, float f) WriteChar; @extern void(float to, float f) WriteShort; @extern void(float to, float f) WriteLong; @extern void(float to, float f) WriteCoord; @extern void(float to, float f) WriteAngle; @extern void(float to, string s) WriteString; @extern void(float to, entity s) WriteEntity; // several removed @extern void(float step) movetogoal; @extern string(string s) precache_file; // no effect except for -copy @extern void(entity e) makestatic; @extern void(string s) changelevel; //#71 was removed @extern void(string var, string val) cvar_set; // sets cvar.value @extern void(entity client, string s) centerprint; // sprint, but in middle @extern void(vector pos, string samp, float vol, float atten) ambientsound; @extern string(string s) precache_model2; // registered version only @extern string(string s) precache_sound2; // registered version only @extern string(string s) precache_file2; // registered version only @extern void(entity e) setspawnparms; // set parm1... to the // values at level start // for coop respawn @extern void(entity killer, entity killee) logfrag; // add to stats @extern string(entity e, string key) infokey; // get a key value (world = serverinfo) @extern float(string s) stof; // convert string to float @extern void(vector where, float set) multicast; // sends the temp message to a set // of clients, possibly in PVS or PHS //============================================================================ // // subs.qc // @extern void(vector tdest, float tspeed, void() func) SUB_CalcMove; @extern void(entity ent, vector tdest, float tspeed, void() func) SUB_CalcMoveEnt; @extern void(vector destangle, float tspeed, void() func) SUB_CalcAngleMove; @extern void() SUB_CalcMoveDone; @extern void() SUB_CalcAngleMoveDone; @extern void() SUB_Null; @extern void() SUB_UseTargets; @extern void() SUB_Remove; // // combat.qc // @extern void(entity targ, entity inflictor, entity attacker, float damage) T_Damage; @extern float (entity e, float healamount, float ignore) T_Heal; // health function @extern float(entity targ, entity inflictor) CanDamage;