X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=progsvm.h;h=6d11e3501c432014ed4a4c4bc23b1f9208e9d434;hp=eb8306fb47f4d1e424292071f873d780cbe35b34;hb=1b94bbb1a2eb689286a262ffa1baee2ae635250a;hpb=4e402f83fc7aa1989f298c38847661bdf6d7883d diff --git a/progsvm.h b/progsvm.h index eb8306fb..6d11e350 100644 --- a/progsvm.h +++ b/progsvm.h @@ -33,6 +33,10 @@ The code uses void pointers instead. #include "progdefs.h" // generated by program cdefs #include "clprogdefs.h" // generated by program cdefs +#ifndef DP_SMALLMEMORY +#define PROFILING +#endif + // forward declaration of clgecko_t struct clgecko_s; @@ -40,6 +44,7 @@ typedef struct prvm_stack_s { int s; mfunction_t *f; + double tprofile_acc; double profile_acc; double builtinsprofile_acc; } prvm_stack_t; @@ -80,7 +85,7 @@ typedef struct prvm_edict_s union { prvm_edict_private_t *required; - void *vp; + vec_t *vp; // FIXME: this server pointer really means world, not server // (it is used by both server qc and client qc, but not menu qc) edict_engineprivate_t *server; @@ -104,7 +109,7 @@ typedef struct prvm_edict_s // QuakeC fields (stored in dynamically resized array) union { - void *vp; + vec_t *vp; entvars_t *server; cl_entvars_t *client; } fields; @@ -116,12 +121,21 @@ typedef struct prvm_edict_s //============================================================================ #define PRVM_OP_STATE 1 +#ifdef DP_SMALLMEMORY +#define PRVM_MAX_STACK_DEPTH 128 +#define PRVM_LOCALSTACK_SIZE 2048 + +#define PRVM_MAX_OPENFILES 16 +#define PRVM_MAX_OPENSEARCHES 8 +#define PRVM_MAX_GECKOINSTANCES 1 +#else #define PRVM_MAX_STACK_DEPTH 1024 #define PRVM_LOCALSTACK_SIZE 16384 #define PRVM_MAX_OPENFILES 256 #define PRVM_MAX_OPENSEARCHES 128 #define PRVM_MAX_GECKOINSTANCES 32 +#endif typedef void (*prvm_builtin_t) (void); @@ -174,9 +188,9 @@ typedef struct prvm_prog_fieldoffsets_s int dimension_hit; // ssqc / csqc int dimension_solid; // ssqc / csqc int disableclientprediction; // ssqc + int discardabledemo; // ssqc int dphitcontentsmask; // ssqc / csqc int drawonlytoclient; // ssqc - int effects; // ssqc / csqc int exteriormodeltoclient; // ssqc int fatness; // ssqc / csqc int forceshader; // csqc @@ -212,6 +226,8 @@ typedef struct prvm_prog_fieldoffsets_s 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 @@ -251,6 +267,19 @@ typedef struct prvm_prog_fieldoffsets_s int enemy; // ssqc / csqc (physics) int aiment; // ssqc / csqc (physics) int movedir; // ssqc / csqc (physics) + + int camera_transform; // csqc (warpzones) + + int userwavefunc_param0; // csqc (userwavefunc) + int userwavefunc_param1; // csqc (userwavefunc) + int userwavefunc_param2; // csqc (userwavefunc) + int userwavefunc_param3; // csqc (userwavefunc) + + int crypto_keyfp; // svqc (crypto) + int crypto_mykeyfp; // svqc (crypto) + int crypto_idfp; // svqc (crypto) + int crypto_encryptmethod; // svqc (crypto) + int crypto_signmethod; // svqc (crypto) } prvm_prog_fieldoffsets_t; @@ -265,6 +294,8 @@ typedef struct prvm_prog_globaloffsets_s int v_right; // ssqc / csqc int v_up; // ssqc / csqc int view_angles; // csqc + int view_punchangle; // csqc + int view_punchvector; // csqc int trace_allsolid; // ssqc / csqc int trace_startsolid; // ssqc / csqc int trace_fraction; // ssqc / csqc @@ -287,6 +318,7 @@ typedef struct prvm_prog_globaloffsets_s 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 @@ -299,6 +331,11 @@ typedef struct prvm_prog_globaloffsets_s int gettaginfo_right; // ssqc / csqc int gettaginfo_up; // ssqc / csqc int transparent_offset; // csqc + + int particles_alphamin; // csqc + int particles_alphamax; // csqc + int particles_colormin; // csqc + int particles_colormax; // csqc } prvm_prog_globaloffsets_t; @@ -341,15 +378,20 @@ typedef struct prvm_prog_funcoffsets_s func_t m_keyup; // mqc func_t m_shutdown; // mqc func_t m_toggle; // mqc + func_t m_newmap; // mqc } prvm_prog_funcoffsets_t; +// stringbuffer flags +#define STRINGBUFFER_SAVED 1 // saved in savegames + typedef struct prvm_stringbuffer_s { int max_strings; int num_strings; char **strings; const char *origin; + unsigned char flags; } prvm_stringbuffer_t; @@ -358,6 +400,7 @@ prvm_stringbuffer_t; typedef struct prvm_prog_s { double starttime; + unsigned int id; // increasing unique id of progs instance dprograms_t *progs; mfunction_t *functions; char *strings; @@ -365,15 +408,15 @@ typedef struct prvm_prog_s ddef_t *fielddefs; ddef_t *globaldefs; dstatement_t *statements; - int edict_size; // in bytes - int edictareasize; // LordHavoc: in bytes (for bound checking) + int entityfields; // number of vec_t fields in progs (some variables are 3) + int entityfieldsarea; // LordHavoc: equal to max_edicts * entityfields (for bounds checking) int *statement_linenums; // NULL if not available double *statement_profile; // only incremented if prvm_statementprofiling is on union { - float *generic; + vec_t *generic; globalvars_t *server; cl_globalvars_t *client; } globals; @@ -436,7 +479,7 @@ typedef struct prvm_prog_s int reserved_edicts; // [INIT] prvm_edict_t *edicts; - void *edictsfields; + vec_t *edictsfields; void *edictprivate; // size of the engine private struct @@ -451,12 +494,12 @@ typedef struct prvm_prog_s qboolean allowworldwrites; // name of the prog, e.g. "Server", "Client" or "Menu" (used for text output) - char *name; // [INIT] + const char *name; // [INIT] // flag - used to store general flags like PRVM_GE_SELF, etc. int flag; - char *extensionstring; // [INIT] + const char *extensionstring; // [INIT] qboolean loadintoworld; // [INIT] @@ -464,6 +507,9 @@ typedef struct prvm_prog_s qboolean loaded; qboolean leaktest_active; + // translation buffer (only needs to be freed on unloading progs, type is private to prvm_edict.c) + void *po; + // printed together with backtraces const char *statestring; @@ -518,8 +564,8 @@ extern const int vm_sv_numbuiltins; extern const int vm_cl_numbuiltins; extern const int vm_m_numbuiltins; -extern char * vm_sv_extensions; // client also uses this -extern char * vm_m_extensions; +extern const char * vm_sv_extensions; // client also uses this +extern const char * vm_m_extensions; void VM_SV_Cmd_Init(void); void VM_SV_Cmd_Reset(void); @@ -536,9 +582,15 @@ void VM_Cmd_Reset(void); void PRVM_Init (void); +#ifdef PROFILING void MVM_ExecuteProgram (func_t fnum, const char *errormessage); void CLVM_ExecuteProgram (func_t fnum, const char *errormessage); void SVVM_ExecuteProgram (func_t fnum, const char *errormessage); +#else +#define MVM_ExecuteProgram SVVM_ExecuteProgram +#define CLVM_ExecuteProgram SVVM_ExecuteProgram +void SVVM_ExecuteProgram (func_t fnum, const char *errormessage); +#endif #define PRVM_ExecuteProgram prog->ExecuteProgram #define PRVM_Alloc(buffersize) _PRVM_Alloc(buffersize, __FILE__, __LINE__) @@ -548,7 +600,7 @@ void *_PRVM_Alloc (size_t buffersize, const char *filename, int fileline); void _PRVM_Free (void *buffer, const char *filename, int fileline); void _PRVM_FreeAll (const char *filename, int fileline); -void PRVM_Profile (int maxfunctions, int mininstructions, int sortby); +void PRVM_Profile (int maxfunctions, double mintime, int sortby); void PRVM_Profile_f (void); void PRVM_ChildProfile_f (void); void PRVM_CallProfile_f (void); @@ -587,7 +639,7 @@ void PRVM_ED_ParseGlobals (const char *data); void PRVM_ED_LoadFromFile (const char *data); -unsigned int PRVM_EDICT_NUM_ERROR(unsigned int n, char *filename, int fileline); +unsigned int PRVM_EDICT_NUM_ERROR(unsigned int n, const char *filename, int fileline); #define PRVM_EDICT(n) (((unsigned)(n) < (unsigned int)prog->max_edicts) ? (unsigned int)(n) : PRVM_EDICT_NUM_ERROR((unsigned int)(n), __FILE__, __LINE__)) #define PRVM_EDICT_NUM(n) (prog->edicts + PRVM_EDICT(n)) @@ -628,6 +680,7 @@ void PRVM_ED_PrintNum (int ent, const char *wildcard_fieldname); const char *PRVM_GetString(int num); int PRVM_SetEngineString(const char *s); +const char *PRVM_ChangeEngineString(int i, const char *s); int PRVM_SetTempString(const char *s); int PRVM_AllocString(size_t bufferlength, char **pointer); void PRVM_FreeString(int num); @@ -669,7 +722,7 @@ Load a program with LoadProgs */ void PRVM_InitProg(int prognr); // LoadProgs expects to be called right after InitProg -void PRVM_LoadProgs (const char *filename, int numrequiredfunc, char **required_func, int numrequiredfields, prvm_required_field_t *required_field, int numrequiredglobals, char **required_global); +void PRVM_LoadProgs (const char *filename, int numrequiredfunc, const char **required_func, int numrequiredfields, prvm_required_field_t *required_field, int numrequiredglobals, char **required_global); void PRVM_ResetProg(void); qboolean PRVM_ProgLoaded(int prognr);