// AK new vm
#include "quakedef.h"
+#include "progsvm.h"
prvm_prog_t *prog;
if (ent)
val = (prvm_eval_t *)((int *)ent->v + key->ofs);
else
- val = (prvm_eval_t *)((int *)pr_globals + key->ofs);
+ val = (prvm_eval_t *)((int *)prog->globals + key->ofs);
switch (key->type & ~DEF_SAVEGLOBAL)
{
case ev_string:
Con_DPrintf("PRVM_ED_ParseEpair: Can't find field %s in %s\n", s, PRVM_NAME);
return false;
}
- val->_int = PRVM_G_INT(def->ofs);
+ val->_int = def->ofs;
break;
case ev_function:
ed = PRVM_EDICT_NUM(atoi(Cmd_Argv(2)));
if((key = PRVM_ED_FindField(Cmd_Argv(3))) == 0)
- {
Con_Printf("Key %s not found !\n", Cmd_Argv(3));
- return;
- }
-
- PRVM_ED_ParseEpair(ed, key, Cmd_Argv(4));
+ else
+ PRVM_ED_ParseEpair(ed, key, Cmd_Argv(4));
PRVM_End;
}
init = false;
-// clear it
- if (ent != prog->edicts) // hack
- memset (ent->v, 0, prog->progs->entityfields * 4);
-
// go through all the dictionary pairs
while (1)
{
else
ent = PRVM_ED_Alloc();
+ // clear it
+ if (ent != prog->edicts) // hack
+ memset (ent->v, 0, prog->progs->entityfields * 4);
+
data = PRVM_ED_ParseEdict (data, ent);
parsed++;
prog->self = PRVM_ED_FindGlobal("self");
- if(PRVM_ED_FindGlobal("time"))
+ if( PRVM_ED_FindGlobal("time") && PRVM_ED_FindGlobal("time")->type & ev_float )
prog->time = &PRVM_G_FLOAT(PRVM_ED_FindGlobal("time")->ofs);
if(PRVM_ED_FindField ("chain"))
PRVM_End;
}
+/*
+===============
+PRVM_GlobalSet
+===============
+*/
+void PRVM_GlobalSet_f(void)
+{
+ ddef_t *global;
+ if( Cmd_Argc() != 4 ) {
+ Con_Printf( "prvm_globalset <program name> <global name> <value>\n" );
+ return;
+ }
+
+ PRVM_Begin;
+ if( !PRVM_SetProgFromString( Cmd_Argv(1) ) )
+ return;
+
+ global = PRVM_ED_FindGlobal( Cmd_Argv(2) );
+ if( !global )
+ Con_Printf( "No global '%s' in %s!\n", Cmd_Argv(2), Cmd_Argv(1) );
+ else
+ PRVM_ED_ParseEpair( NULL, global, Cmd_Argv(3) );
+ PRVM_End;
+}
+
/*
===============
PRVM_Init
Cmd_AddCommand ("prvm_fields", PRVM_Fields_f);
Cmd_AddCommand ("prvm_globals", PRVM_Globals_f);
Cmd_AddCommand ("prvm_global", PRVM_Global_f);
+ Cmd_AddCommand ("prvm_globalset", PRVM_GlobalSet_f);
Cmd_AddCommand ("prvm_edictset", PRVM_ED_EdictSet_f);
// LordHavoc: optional runtime bounds checking (speed drain, but worth it for security, on by default - breaks most QCCX features (used by CRMod and others))
Cvar_RegisterVariable (&prvm_boundscheck);