]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - prvm_edict.c
adding my own IPv6 master server: dpmaster.div0.qc.to - default master server 4 ...
[xonotic/darkplaces.git] / prvm_edict.c
index ceb0e3cb2d3bc34a1309defc485e137b3dece84e..7a81d008c498be1caa1ba29c08dafce5311f9294 100644 (file)
@@ -36,6 +36,7 @@ cvar_t prvm_language = {0, "prvm_language", "", "when set, loads progs.dat.LANGU
 cvar_t prvm_traceqc = {0, "prvm_traceqc", "0", "prints every QuakeC statement as it is executed (only for really thorough debugging!)"};
 // LordHavoc: counts usage of each QuakeC statement
 cvar_t prvm_statementprofiling = {0, "prvm_statementprofiling", "0", "counts how many times each QuakeC statement has been executed, these counts are displayed in prvm_printfunction output (if enabled)"};
+cvar_t prvm_timeprofiling = {0, "prvm_timeprofiling", "0", "counts how long each function has been executed, these counts are displayed in prvm_profile output (if enabled)"};
 cvar_t prvm_backtraceforwarnings = {0, "prvm_backtraceforwarnings", "0", "print a backtrace for warnings too"};
 cvar_t prvm_leaktest = {0, "prvm_leaktest", "0", "try to detect memory leaks in strings or entities"};
 cvar_t prvm_leaktest_ignore_classnames = {0, "prvm_leaktest_ignore_classnames", "", "classnames of entities to NOT leak check because they are found by find(world, classname, ...) but are actually spawned by QC code (NOT map entities)"};
@@ -1181,7 +1182,7 @@ void PRVM_ED_EdictGet_f(void)
        }
 
        v = (prvm_eval_t *)(ed->fields.vp + key->ofs);
-       s = PRVM_UglyValueString(key->type, v);
+       s = PRVM_UglyValueString((etype_t)key->type, v);
        if(Cmd_Argc() == 5)
        {
                cvar_t *cvar = Cvar_FindVar(Cmd_Argv(4));
@@ -1226,7 +1227,7 @@ void PRVM_ED_GlobalGet_f(void)
        }
 
        v = (prvm_eval_t *) &prog->globals.generic[key->ofs];
-       s = PRVM_UglyValueString(key->type, v);
+       s = PRVM_UglyValueString((etype_t)key->type, v);
        if(Cmd_Argc() == 4)
        {
                cvar_t *cvar = Cvar_FindVar(Cmd_Argv(3));
@@ -1656,6 +1657,10 @@ void PRVM_FindOffsets(void)
        prog->fieldoffsets.movedir                        = PRVM_ED_FindFieldOffset("movedir");
 
        prog->fieldoffsets.camera_transform               = PRVM_ED_FindFieldOffset("camera_transform");
+       prog->fieldoffsets.userwavefunc_param0            = PRVM_ED_FindFieldOffset("userwavefunc_param0");
+       prog->fieldoffsets.userwavefunc_param1            = PRVM_ED_FindFieldOffset("userwavefunc_param1");
+       prog->fieldoffsets.userwavefunc_param2            = PRVM_ED_FindFieldOffset("userwavefunc_param2");
+       prog->fieldoffsets.userwavefunc_param3            = PRVM_ED_FindFieldOffset("userwavefunc_param3");
 
        prog->funcoffsets.CSQC_ConsoleCommand             = PRVM_ED_FindFunctionOffset("CSQC_ConsoleCommand");
        prog->funcoffsets.CSQC_Ent_Remove                 = PRVM_ED_FindFunctionOffset("CSQC_Ent_Remove");
@@ -1725,6 +1730,8 @@ void PRVM_FindOffsets(void)
        prog->globaloffsets.v_right                       = PRVM_ED_FindGlobalOffset("v_right");
        prog->globaloffsets.v_up                          = PRVM_ED_FindGlobalOffset("v_up");
        prog->globaloffsets.view_angles                   = PRVM_ED_FindGlobalOffset("view_angles");
+       prog->globaloffsets.view_punchangle               = PRVM_ED_FindGlobalOffset("view_punchangle");
+       prog->globaloffsets.view_punchvector              = PRVM_ED_FindGlobalOffset("view_punchvector");
        prog->globaloffsets.worldstatus                   = PRVM_ED_FindGlobalOffset("worldstatus");
        prog->globaloffsets.particles_alphamin            = PRVM_ED_FindGlobalOffset("particles_alphamin");
        prog->globaloffsets.particles_alphamax            = PRVM_ED_FindGlobalOffset("particles_alphamax");
@@ -1889,7 +1896,9 @@ po_t *PRVM_PO_Load(const char *filename, mempool_t *pool)
        if(!buf)
                return NULL;
 
-       po = Mem_Alloc(pool, sizeof(*po));
+       memset(&thisstr, 0, sizeof(thisstr)); // hush compiler warning
+
+       po = (po_t *)Mem_Alloc(pool, sizeof(*po));
        memset(po, 0, sizeof(*po));
 
        p = buf;
@@ -1953,16 +1962,16 @@ po_t *PRVM_PO_Load(const char *filename, mempool_t *pool)
                {
                        if(thisstr.key)
                                Mem_Free(thisstr.key);
-                       thisstr.key = Mem_Alloc(pool, decodedpos + 1);
+                       thisstr.key = (char *)Mem_Alloc(pool, decodedpos + 1);
                        memcpy(thisstr.key, decodedbuf, decodedpos + 1);
                }
                else if(decodedpos > 0 && thisstr.key) // skip empty translation results
                {
-                       thisstr.value = Mem_Alloc(pool, decodedpos + 1);
+                       thisstr.value = (char *)Mem_Alloc(pool, decodedpos + 1);
                        memcpy(thisstr.value, decodedbuf, decodedpos + 1);
                        hashindex = CRC_Block((const unsigned char *) thisstr.key, strlen(thisstr.key)) % PO_HASHSIZE;
                        thisstr.nextonhashchain = po->hashtable[hashindex];
-                       po->hashtable[hashindex] = Mem_Alloc(pool, sizeof(thisstr));
+                       po->hashtable[hashindex] = (po_string_t *)Mem_Alloc(pool, sizeof(thisstr));
                        memcpy(po->hashtable[hashindex], &thisstr, sizeof(thisstr));
                        memset(&thisstr, 0, sizeof(thisstr));
                }
@@ -2065,7 +2074,7 @@ void PRVM_LoadLNO( const char *progname ) {
 PRVM_LoadProgs
 ===============
 */
-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)
 {
        int i;
        dstatement_t *st;
@@ -2736,6 +2745,7 @@ void PRVM_Init (void)
        Cvar_RegisterVariable (&prvm_language);
        Cvar_RegisterVariable (&prvm_traceqc);
        Cvar_RegisterVariable (&prvm_statementprofiling);
+       Cvar_RegisterVariable (&prvm_timeprofiling);
        Cvar_RegisterVariable (&prvm_backtraceforwarnings);
        Cvar_RegisterVariable (&prvm_leaktest);
        Cvar_RegisterVariable (&prvm_leaktest_ignore_classnames);
@@ -2798,7 +2808,7 @@ void _PRVM_FreeAll(const char *filename, int fileline)
 }
 
 // LordHavoc: turned PRVM_EDICT_NUM into a #define for speed reasons
-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)
 {
        PRVM_ERROR ("PRVM_EDICT_NUM: %s: bad number %i (called at %s:%i)", PRVM_NAME, n, filename, fileline);
        return 0;
@@ -3225,7 +3235,7 @@ void PRVM_LeakTest(void)
                if(prog->knownstrings[i])
                if(prog->knownstrings_freeable[i])
                if(prog->knownstrings_origin[i])
-               if(!PRVM_IsStringReferenced(-1 - i))
+               if(!PRVM_IsStringReferenced(PRVM_KNOWNSTRINGBASE + i))
                {
                        Con_Printf("Unreferenced string found!\n  Value: %s\n  Origin: %s\n", prog->knownstrings[i], prog->knownstrings_origin[i]);
                        leaked = true;