+// NOTE: field offsets use -1 for NULL
+typedef struct prvm_prog_fieldoffsets_s
+{
+ // server and client use a lot of similar fields, so this is combined
+ int SendEntity; // ssqc
+ int Version; // ssqc
+ int alpha; // ssqc / csqc
+ int ammo_cells1; // ssqc - Dissolution of Eternity mission pack
+ int ammo_lava_nails; // ssqc - Dissolution of Eternity mission pack
+ int ammo_multi_rockets; // ssqc - Dissolution of Eternity mission pack
+ int ammo_nails1; // ssqc - Dissolution of Eternity mission pack
+ int ammo_plasma; // ssqc - Dissolution of Eternity mission pack
+ int ammo_rockets1; // ssqc - Dissolution of Eternity mission pack
+ int ammo_shells1; // ssqc - Dissolution of Eternity mission pack
+ int angles; // common - used by changeyaw/changepitch
+ int button3; // ssqc
+ int button4; // ssqc
+ int button5; // ssqc
+ int button6; // ssqc
+ int button7; // ssqc
+ int button8; // ssqc
+ int button9; // ssqc
+ int button10; // ssqc
+ int button11; // ssqc
+ int button12; // ssqc
+ int button13; // ssqc
+ int button14; // ssqc
+ int button15; // ssqc
+ int button16; // ssqc
+ int buttonchat; // ssqc
+ int buttonuse; // ssqc
+ int chain; // common - used by find builtins
+ int classname; // common
+ int clientcolors; // ssqc
+ int color; // ssqc
+ int colormod; // ssqc / csqc
+ int contentstransition; // ssqc
+ int cursor_active; // ssqc
+ int cursor_screen; // ssqc
+ int cursor_trace_endpos; // ssqc
+ int cursor_trace_ent; // ssqc
+ int cursor_trace_start; // ssqc
+ int customizeentityforclient; // ssqc
+ int dimension_hit; // ssqc / csqc
+ int dimension_solid; // ssqc / csqc
+ int disableclientprediction; // ssqc
+ int dphitcontentsmask; // ssqc / csqc
+ int drawonlytoclient; // ssqc
+ int effects; // ssqc / csqc
+ int exteriormodeltoclient; // ssqc
+ int fatness; // ssqc / csqc
+ int forceshader; // csqc
+ int frame1time; // csqc
+ int frame2; // csqc
+ int frame2time; // csqc
+ int frame; // common - used by OP_STATE
+ int fullbright; // ssqc - Nehahra support
+ int glow_color; // ssqc
+ int glow_size; // ssqc
+ int glow_trail; // ssqc
+ int gravity; // ssqc
+ int groundentity; // ssqc / csqc
+ int hull; // ssqc / csqc
+ int ideal_yaw; // ssqc / csqc
+ int idealpitch; // ssqc / csqc
+ int items2; // ssqc
+ int lerpfrac; // csqc
+ int light_lev; // ssqc
+ int message; // csqc
+ int modelflags; // ssqc
+ int movement; // ssqc
+ int movetypesteplandevent; // ssqc
+ int netaddress; // ssqc
+ int nextthink; // common - used by OP_STATE
+ int nodrawtoclient; // ssqc
+ int pflags; // ssqc
+ int ping; // ssqc
+ int pitch_speed; // ssqc / csqc
+ int playermodel; // ssqc
+ int playerskin; // ssqc
+ int pmodel; // ssqc
+ int punchvector; // ssqc
+ int renderamt; // ssqc - HalfLife support
+ int renderflags; // csqc
+ int rendermode; // ssqc - HalfLife support
+ int scale; // ssqc / csqc
+ int style; // ssqc
+ int tag_entity; // ssqc / csqc
+ int tag_index; // ssqc / csqc
+ int think; // common - used by OP_STATE
+ int viewmodelforclient; // ssqc
+ int viewzoom; // ssqc
+ int yaw_speed; // ssqc / csqc
+ int clientcamera; // ssqc
+}
+prvm_prog_fieldoffsets_t;
+
+// NOTE: global offsets use -1 for NULL
+typedef struct prvm_prog_globaloffsets_s
+{
+ // server and client use a lot of similar globals, so this is combined
+ int SV_InitCmd; // ssqc
+ int self; // common
+ int time; // ssqc / csqc
+ int v_forward; // ssqc / csqc
+ int v_right; // ssqc / csqc
+ int v_up; // ssqc / csqc
+ int view_angles; // csqc
+ int trace_allsolid; // ssqc / csqc
+ int trace_startsolid; // ssqc / csqc
+ int trace_fraction; // ssqc / csqc
+ int trace_inwater; // ssqc / csqc
+ int trace_inopen; // ssqc / csqc
+ int trace_endpos; // ssqc / csqc
+ int trace_plane_normal; // ssqc / csqc
+ int trace_plane_dist; // ssqc / csqc
+ int trace_ent; // ssqc / csqc
+ int trace_dphitcontents; // ssqc / csqc
+ int trace_dphitq3surfaceflags; // ssqc / csqc
+ int trace_dphittexturename; // ssqc / csqc
+ int trace_dpstartcontents; // ssqc / csqc
+ int intermission; // csqc
+ int coop; // csqc
+ int deathmatch; // csqc
+ int dmg_take; // csqc
+ int dmg_save; // csqc
+ int dmg_origin; // csqc
+ int sb_showscores; // csqc
+ int drawfont; // csqc / menu
+ int require_spawnfunc_prefix; // ssqc
+}
+prvm_prog_globaloffsets_t;
+
+// these are initialized using PRVM_ED_FindFunction
+// NOTE: function offsets use 0 for NULL
+typedef struct prvm_prog_funcoffsets_s
+{
+ func_t CSQC_ConsoleCommand; // csqc
+ func_t CSQC_Ent_Remove; // csqc
+ func_t CSQC_Ent_Spawn; // csqc DP_CSQC_ENT_SPAWN extension (BlackHC - TODO: needs to be added to dpextensions.qc)
+ func_t CSQC_Ent_Update; // csqc
+ func_t CSQC_Event; // csqc [515]: engine call this for its own needs so csqc can do some things according to what engine it's running on. example: to say about edicts increase, whatever...
+ func_t CSQC_Event_Sound; // csqc : called by engine when an incoming sound packet arrives so CSQC can act on it
+ func_t CSQC_Init; // csqc
+ func_t CSQC_InputEvent; // csqc
+ func_t CSQC_Parse_CenterPrint; // csqc
+ func_t CSQC_Parse_Print; // csqc
+ func_t CSQC_Parse_StuffCmd; // csqc
+ func_t CSQC_Parse_TempEntity; // csqc [515]: very helpfull when you want to create your own particles/decals/etc for effects that already exist
+ func_t CSQC_Shutdown; // csqc
+ func_t CSQC_UpdateView; // csqc
+ func_t Gecko_Query; // csqc, mqc
+ func_t EndFrame; // ssqc
+ func_t RestoreGame; // ssqc
+ func_t SV_ChangeTeam; // ssqc
+ func_t SV_ParseClientCommand; // ssqc
+ func_t SV_PlayerPhysics; // ssqc
+ func_t SV_OnEntityNoSpawnFunction; // ssqc
+ func_t GameCommand; // any
+ func_t SV_Shutdown; // ssqc
+
+ // menu qc only uses some functions, nothing else
+ func_t m_draw; // mqc
+ func_t m_init; // mqc
+ func_t m_keydown; // mqc
+ func_t m_keyup; // mqc
+ func_t m_shutdown; // mqc
+ func_t m_toggle; // mqc
+}
+prvm_prog_funcoffsets_t;
+
+typedef struct prvm_stringbuffer_s
+{
+ int max_strings;
+ int num_strings;
+ char **strings;
+ const char *origin;
+}
+prvm_stringbuffer_t;
+
+// [INIT] variables flagged with this token can be initialized by 'you'