ddef_t *PRVM_ED_FieldAtOfs(int ofs);
qboolean PRVM_ED_ParseEpair(prvm_edict_t *ent, ddef_t *key, const char *s, qboolean parsebackslash);
-cvar_t prvm_language = {0, "prvm_language", "", "when set, loads progs.dat.LANGUAGENAME.po for string translations; when set to dump, progs.dat.dump.po is written from the strings in the progs"};
+cvar_t prvm_language = {CVAR_SAVE, "prvm_language", "", "when set, loads progs.dat.LANGUAGENAME.po for string translations; when set to dump, progs.dat.pot is written from the strings in the progs"};
// LordHavoc: prints every opcode as it executes - warning: this is significant spew
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
{
d = &prog->fielddefs[i];
name = PRVM_GetString(d->s_name);
- if (name[strlen(name)-2] == '_')
+ if(strlen(name) > 1 && name[strlen(name)-2] == '_' && (name[strlen(name)-1] == 'x' || name[strlen(name)-1] == 'y' || name[strlen(name)-1] == 'z'))
continue; // skip _x, _y, _z vars
// Check Field Name Wildcard
if(developer_entityparsing.integer)
Con_Printf("PRVM_ED_Write: at entity %d field %s\n", PRVM_NUM_FOR_EDICT(ed), name);
- if (name[strlen(name)-2] == '_')
- continue; // skip _x, _y, _z vars
+ //if(strlen(name) > 1 && name[strlen(name)-2] == '_' && (name[strlen(name)-1] == 'x' || name[strlen(name)-1] == 'y' || name[strlen(name)-1] == 'z'))
+ if(strlen(name) > 1 && name[strlen(name)-2] == '_')
+ continue; // skip _x, _y, _z vars, and ALSO other _? vars as some mods expect them to be never saved (TODO: a gameplayfix for using the "more precise" condition above?)
v = (int *)(ed->fields.vp + d->ofs);
prog->fieldoffsets.userwavefunc_param2 = PRVM_ED_FindFieldOffset("userwavefunc_param2");
prog->fieldoffsets.userwavefunc_param3 = PRVM_ED_FindFieldOffset("userwavefunc_param3");
+ prog->fieldoffsets.crypto_keyfp = PRVM_ED_FindFieldOffset("crypto_keyfp");
+ prog->fieldoffsets.crypto_mykeyfp = PRVM_ED_FindFieldOffset("crypto_mykeyfp");
+ prog->fieldoffsets.crypto_idfp = PRVM_ED_FindFieldOffset("crypto_idfp");
+ prog->fieldoffsets.crypto_encryptmethod = PRVM_ED_FindFieldOffset("crypto_encryptmethod");
+ prog->fieldoffsets.crypto_signmethod = PRVM_ED_FindFieldOffset("crypto_signmethod");
+
prog->funcoffsets.CSQC_ConsoleCommand = PRVM_ED_FindFunctionOffset("CSQC_ConsoleCommand");
prog->funcoffsets.CSQC_Ent_Remove = PRVM_ED_FindFunctionOffset("CSQC_Ent_Remove");
prog->funcoffsets.CSQC_Ent_Spawn = PRVM_ED_FindFunctionOffset("CSQC_Ent_Spawn");
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");
prog->funcoffsets.m_keyup = PRVM_ED_FindFunctionOffset("m_keyup");
prog->funcoffsets.m_shutdown = PRVM_ED_FindFunctionOffset("m_shutdown");
prog->funcoffsets.m_toggle = PRVM_ED_FindFunctionOffset("m_toggle");
+ prog->funcoffsets.m_newmap = PRVM_ED_FindFunctionOffset("m_newmap");
}
// not used
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;
}
if(!strcmp(prvm_language.string, "dump"))
{
- qfile_t *f = FS_OpenRealFile(va("%s.%s.po", filename, prvm_language.string), "w", false);
- Con_Printf("Dumping to %s.%s.po\n", filename, prvm_language.string);
+ qfile_t *f = FS_OpenRealFile(va("%s.pot", filename), "w", false);
+ Con_Printf("Dumping to %s.pot\n", filename);
if(f)
{
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(deftrans ? (!name || strncmp(name, "notranslate_", 12)) : (name && !strncmp(name, "dotranslate_", 12)))
+ if((prog->globaldefs[i].type & ~DEF_SAVEGLOBAL) == ev_string)
{
prvm_eval_t *val = (prvm_eval_t *)(prog->globals.generic + prog->globaldefs[i].ofs);
const char *value = PRVM_GetString(val->string);
{
const char *value;
char buf[64];
- Con_Printf("PRVM_LoadProgs: no cvar for autocvar global %s in %s, creating...\n", name, PRVM_NAME);
+ Con_DPrintf("PRVM_LoadProgs: no cvar for autocvar global %s in %s, creating...\n", name, PRVM_NAME);
switch(prog->globaldefs[i].type & ~DEF_SAVEGLOBAL)
{
case ev_float:
}
// 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;
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;