+// 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 SendFlags; // ssqc
+ int Version; // ssqc (legacy)
+ 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 clientcamera; // ssqc
+ int clientcolors; // ssqc
+ int clientstatus; // 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 frame3; // csqc
+ int frame3time; // csqc
+ int frame4; // csqc
+ int frame4time; // 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 glowmod; // ssqc / csqc
+ int gravity; // ssqc
+ int groundentity; // ssqc / csqc
+ int hull; // ssqc / csqc
+ int ideal_yaw; // ssqc / csqc
+ int idealpitch; // ssqc / csqc
+ int items2; // ssqc
+ int lerpfrac3; // csqc
+ int lerpfrac4; // csqc
+ 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 packetloss; // ssqc
+ int movementloss; // 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 shadertime; // csqc
+ int skeletonindex; // csqc / ssqc FTE_CSQC_SKELETONOBJECTS / DP_SKELETONOBJECTS
+ 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 bouncefactor; // ssqc
+ int bouncestop; // ssqc
+
+ int solid; // ssqc / csqc (physics)
+ int movetype; // ssqc / csqc (physics)
+ int modelindex; // ssqc / csqc (physics)
+ int mins; // ssqc / csqc (physics)
+ int maxs; // ssqc / csqc (physics)
+ int mass; // ssqc / csqc (physics)
+ int origin; // ssqc / csqc (physics)
+ int velocity; // ssqc / csqc (physics)
+ //int axis_forward; // ssqc / csqc (physics)
+ //int axis_left; // ssqc / csqc (physics)
+ //int axis_up; // ssqc / csqc (physics)
+ //int spinvelocity; // ssqc / csqc (physics)
+ //int angles; // ssqc / csqc (physics)
+ int avelocity; // ssqc / csqc (physics)
+ int jointtype; // ssqc / csqc (physics)
+ int enemy; // ssqc / csqc (physics)
+ int aiment; // ssqc / csqc (physics)
+ int movedir; // ssqc / csqc (physics)
+}
+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_networkentity; // 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 drawfontscale; // csqc / menu
+ int require_spawnfunc_prefix; // ssqc
+ int worldstatus; // ssqc
+ int servertime; // csqc
+ int serverprevtime; // csqc
+ int serverdeltatime; // csqc
+ int gettaginfo_name; // ssqc / csqc
+ int gettaginfo_parent; // ssqc / csqc
+ int gettaginfo_offset; // ssqc / csqc
+ int gettaginfo_forward; // ssqc / csqc
+ int gettaginfo_right; // ssqc / csqc
+ int gettaginfo_up; // ssqc / csqc
+ int transparent_offset; // csqc
+}
+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_OnEntityPreSpawnFunction; // ssqc
+ func_t SV_OnEntityNoSpawnFunction; // ssqc
+ func_t SV_OnEntityPostSpawnFunction; // ssqc
+ func_t GameCommand; // any
+ func_t SV_Shutdown; // ssqc
+ func_t URI_Get_Callback; // any
+ func_t SV_PausedTic; //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'