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)"};
cvar_t prvm_errordump = {0, "prvm_errordump", "0", "write a savegame on crash to crash-server.dmp"};
-cvar_t prvm_startupreuseedicttime = {0, "prvm_startupreuseedicttime", "2", "allows immediate re-use of freed entity slots during start of new level (value in seconds)"};
+cvar_t prvm_reuseedicts_startuptime = {0, "prvm_reuseedicts_startuptime", "2", "allows immediate re-use of freed entity slots during start of new level (value in seconds)"};
+cvar_t prvm_reuseedicts_neverinsameframe = {0, "prvm_reuseedicts_neverinsameframe", "1", "never allows re-use of freed entity slots during same frame"};
qboolean prvm_runawaycheck = true;
{
if(!e->priv.required->free)
return false;
- if(e->priv.required->freetime < prog->starttime + prvm_startupreuseedicttime.value)
+ if(realtime <= e->priv.required->freetime && prvm_reuseedicts_neverinsameframe.integer)
+ return false; // never allow reuse in same frame (causes networking trouble)
+ if(e->priv.required->freetime < prog->starttime + prvm_reuseedicts_startuptime.value)
return true;
if(realtime > e->priv.required->freetime + 1)
return true;
prog->fieldoffsets.glow_color = PRVM_ED_FindFieldOffset("glow_color");
prog->fieldoffsets.glow_size = PRVM_ED_FindFieldOffset("glow_size");
prog->fieldoffsets.glow_trail = PRVM_ED_FindFieldOffset("glow_trail");
+ prog->fieldoffsets.glowmod = PRVM_ED_FindFieldOffset("glowmod");
prog->fieldoffsets.gravity = PRVM_ED_FindFieldOffset("gravity");
prog->fieldoffsets.groundentity = PRVM_ED_FindFieldOffset("groundentity");
prog->fieldoffsets.hull = PRVM_ED_FindFieldOffset("hull");
prog->fieldoffsets.yaw_speed = PRVM_ED_FindFieldOffset("yaw_speed");
prog->fieldoffsets.bouncefactor = PRVM_ED_FindFieldOffset("bouncefactor");
prog->fieldoffsets.bouncestop = PRVM_ED_FindFieldOffset("bouncestop");
+
+ prog->fieldoffsets.solid = PRVM_ED_FindFieldOffset("solid");
+ prog->fieldoffsets.movetype = PRVM_ED_FindFieldOffset("movetype");
+ prog->fieldoffsets.modelindex = PRVM_ED_FindFieldOffset("modelindex");
+ prog->fieldoffsets.mins = PRVM_ED_FindFieldOffset("mins");
+ prog->fieldoffsets.maxs = PRVM_ED_FindFieldOffset("maxs");
+ prog->fieldoffsets.mass = PRVM_ED_FindFieldOffset("mass");
+ prog->fieldoffsets.origin = PRVM_ED_FindFieldOffset("origin");
+ prog->fieldoffsets.velocity = PRVM_ED_FindFieldOffset("velocity");
+ //prog->fieldoffsets.axis_forward = PRVM_ED_FindFieldOffset("axis_forward");
+ //prog->fieldoffsets.axis_left = PRVM_ED_FindFieldOffset("axis_left");
+ //prog->fieldoffsets.axis_up = PRVM_ED_FindFieldOffset("axis_up");
+ //prog->fieldoffsets.spinvelocity = PRVM_ED_FindFieldOffset("spinvelocity");
+ prog->fieldoffsets.angles = PRVM_ED_FindFieldOffset("angles");
+ prog->fieldoffsets.avelocity = PRVM_ED_FindFieldOffset("avelocity");
+ prog->fieldoffsets.aiment = PRVM_ED_FindFieldOffset("aiment");
+ prog->fieldoffsets.enemy = PRVM_ED_FindFieldOffset("enemy");
+ prog->fieldoffsets.jointtype = PRVM_ED_FindFieldOffset("jointtype");
+ prog->fieldoffsets.movedir = PRVM_ED_FindFieldOffset("movedir");
+
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.gettaginfo_parent = PRVM_ED_FindGlobalOffset("gettaginfo_parent");
prog->globaloffsets.gettaginfo_right = PRVM_ED_FindGlobalOffset("gettaginfo_right");
prog->globaloffsets.gettaginfo_up = PRVM_ED_FindGlobalOffset("gettaginfo_up");
+ prog->globaloffsets.transparent_offset = PRVM_ED_FindGlobalOffset("transparent_offset");
prog->globaloffsets.intermission = PRVM_ED_FindGlobalOffset("intermission");
prog->globaloffsets.require_spawnfunc_prefix = PRVM_ED_FindGlobalOffset("require_spawnfunc_prefix");
prog->globaloffsets.sb_showscores = PRVM_ED_FindGlobalOffset("sb_showscores");
Cvar_RegisterVariable (&prvm_leaktest);
Cvar_RegisterVariable (&prvm_leaktest_ignore_classnames);
Cvar_RegisterVariable (&prvm_errordump);
- Cvar_RegisterVariable (&prvm_startupreuseedicttime);
+ Cvar_RegisterVariable (&prvm_reuseedicts_startuptime);
+ Cvar_RegisterVariable (&prvm_reuseedicts_neverinsameframe);
// COMMANDLINEOPTION: PRVM: -norunaway disables the runaway loop check (it might be impossible to exit DarkPlaces if used!)
prvm_runawaycheck = !COM_CheckParm("-norunaway");