]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - prvm_edict.c
user (csqc) controllable wavefuncs
[xonotic/darkplaces.git] / prvm_edict.c
index e227d6122a8c342d49678aa8d7ac60ae70b1083c..5a51babb23b0ea47a863fea652306cadb44a14c5 100644 (file)
@@ -1486,7 +1486,7 @@ void PRVM_ED_LoadFromFile (const char *data)
                                }
                                else
                                {
-                                       if (developer.integer) // don't confuse non-developers with errors
+                                       if (developer.integer > 0) // don't confuse non-developers with errors
                                        {
                                                Con_Print("No spawn function for:\n");
                                                PRVM_ED_Print(ent, NULL);
@@ -1575,6 +1575,7 @@ void PRVM_FindOffsets(void)
        prog->fieldoffsets.dimension_hit                  = PRVM_ED_FindFieldOffset("dimension_hit");
        prog->fieldoffsets.dimension_solid                = PRVM_ED_FindFieldOffset("dimension_solid");
        prog->fieldoffsets.disableclientprediction        = PRVM_ED_FindFieldOffset("disableclientprediction");
+       prog->fieldoffsets.discardabledemo                = PRVM_ED_FindFieldOffset("discardabledemo");
        prog->fieldoffsets.dphitcontentsmask              = PRVM_ED_FindFieldOffset("dphitcontentsmask");
        prog->fieldoffsets.drawonlytoclient               = PRVM_ED_FindFieldOffset("drawonlytoclient");
        prog->fieldoffsets.exteriormodeltoclient          = PRVM_ED_FindFieldOffset("exteriormodeltoclient");
@@ -1655,6 +1656,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,10 @@ void PRVM_FindOffsets(void)
        prog->globaloffsets.v_up                          = PRVM_ED_FindGlobalOffset("v_up");
        prog->globaloffsets.view_angles                   = PRVM_ED_FindGlobalOffset("view_angles");
        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");
+       prog->globaloffsets.particles_colormin            = PRVM_ED_FindGlobalOffset("particles_colormin");
+       prog->globaloffsets.particles_colormax            = PRVM_ED_FindGlobalOffset("particles_colormax");
 
        // menu qc only uses some functions, nothing else
        prog->funcoffsets.m_draw                          = PRVM_ED_FindFunctionOffset("m_draw");
@@ -2313,6 +2322,20 @@ void PRVM_LoadProgs (const char * filename, int numrequiredfunc, char **required
        // later idea: include a list of authorized .po file checksums with the csprogs
        {
                qboolean deftrans = !!strcmp(PRVM_NAME, "client");
+               if(deftrans) // once we have dotranslate_ strings, ALWAYS use the opt-in method!
+               {
+                       for (i=0 ; i<prog->progs->numglobaldefs ; i++)
+                       {
+                               const char *name;
+                               name = PRVM_GetString(prog->globaldefs[i].s_name);
+                               if((prog->globaldefs[i].type & ~DEF_SAVEGLOBAL) == ev_string)
+                               if(name && !strncmp(name, "dotranslate_", 12))
+                               {
+                                       deftrans = false;
+                                       break;
+                               }
+                       }
+               }
                if(!strcmp(prvm_language.string, "dump"))
                {
                        qfile_t *f = FS_OpenRealFile(va("%s.%s.po", filename, prvm_language.string), "w", false);
@@ -2323,8 +2346,8 @@ void PRVM_LoadProgs (const char * filename, int numrequiredfunc, char **required
                                {
                                        const char *name;
                                        name = PRVM_GetString(prog->globaldefs[i].s_name);
-                                       if(deftrans ? (!name || strncmp(name, "notranslate_", 12)) : (name && !strncmp(name, "dotranslate_", 12)))
                                        if((prog->globaldefs[i].type & ~DEF_SAVEGLOBAL) == ev_string)
+                                       if(deftrans ? (!name || strncmp(name, "notranslate_", 12)) : (name && !strncmp(name, "dotranslate_", 12)))
                                        {
                                                prvm_eval_t *val = (prvm_eval_t *)(prog->globals.generic + prog->globaldefs[i].ofs);
                                                const char *value = PRVM_GetString(val->string);
@@ -2974,11 +2997,11 @@ int PRVM_AllocString(size_t bufferlength, char **pointer)
                                        memcpy((char **)prog->knownstrings_origin, oldstrings_origin, prog->numknownstrings * sizeof(char *));
                        }
                        if (oldstrings)
-                               Mem_Free(oldstrings);
+                               Mem_Free((char **)oldstrings);
                        if (oldstrings_freeable)
                                Mem_Free((unsigned char *)oldstrings_freeable);
                        if (oldstrings_origin)
-                               Mem_Free(oldstrings_origin);
+                               Mem_Free((char **)oldstrings_origin);
                }
                prog->numknownstrings++;
        }