game-source/fbxa/defs.h

725 lines
22 KiB
C

/*
==============================================================================
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, .string fld, string match) 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;