X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=prvm_edict.c;h=e874eaae6602a9377fac137ddcfe98fc7aaa6e4d;hb=81d989f23189cdeb12a5d543eb23121cf36d06f4;hp=a0dc14a22a619c0dea92f8147e94711c75ec6029;hpb=4aa041287d27a50f7cbfd4628d80c118e1bfcade;p=xonotic%2Fdarkplaces.git diff --git a/prvm_edict.c b/prvm_edict.c index a0dc14a2..e874eaae 100644 --- a/prvm_edict.c +++ b/prvm_edict.c @@ -21,6 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "quakedef.h" #include "progsvm.h" +#include "csprogs.h" prvm_prog_t *prog; @@ -31,7 +32,7 @@ int prvm_type_size[8] = {1,sizeof(string_t)/4,1,3,1,1,sizeof(func_t)/4,sizeof(v 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 @@ -648,7 +649,7 @@ void PRVM_ED_Print(prvm_edict_t *ed, const char *wildcard_fieldname) { 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 @@ -732,8 +733,9 @@ void PRVM_ED_Write (qfile_t *f, prvm_edict_t *ed) 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); @@ -2334,6 +2336,7 @@ void PRVM_LoadProgs (const char * filename, int numrequiredfunc, const char **re // later idea: include a list of authorized .po file checksums with the csprogs { qboolean deftrans = !!strcmp(PRVM_NAME, "client"); + const char *realfilename = (strcmp(PRVM_NAME, "client") ? filename : csqc_progname.string); if(deftrans) // once we have dotranslate_ strings, ALWAYS use the opt-in method! { for (i=0 ; iprogs->numglobaldefs ; i++) @@ -2350,16 +2353,16 @@ void PRVM_LoadProgs (const char * filename, int numrequiredfunc, const char **re } 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", realfilename), "w", false); + Con_Printf("Dumping to %s.pot\n", realfilename); if(f) { for (i=0 ; iprogs->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); @@ -2376,7 +2379,7 @@ void PRVM_LoadProgs (const char * filename, int numrequiredfunc, const char **re } else { - po_t *po = PRVM_PO_Load(va("%s.%s.po", filename, prvm_language.string), prog->progs_mempool); + po_t *po = PRVM_PO_Load(va("%s.%s.po", realfilename, prvm_language.string), prog->progs_mempool); if(po) { for (i=0 ; iprogs->numglobaldefs ; i++) @@ -2417,7 +2420,7 @@ void PRVM_LoadProgs (const char * filename, int numrequiredfunc, const char **re { 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: