]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - prvm_edict.c
ODE physics engine support, needs more work, disabled by default
[xonotic/darkplaces.git] / prvm_edict.c
index 1eba81412a9c3721aef1fae5fc3d4ed99fbb6d7b..c2a3abddf05da99108d5a0cf8e20ec58f5762345 100644 (file)
@@ -39,7 +39,8 @@ cvar_t prvm_backtraceforwarnings = {0, "prvm_backtraceforwarnings", "0", "print
 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;
 
@@ -248,7 +249,9 @@ qboolean PRVM_ED_CanAlloc(prvm_edict_t *e)
 {
        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;
@@ -1593,6 +1596,7 @@ void PRVM_FindOffsets(void)
        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");
@@ -1631,6 +1635,21 @@ void PRVM_FindOffsets(void)
        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.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.angles                         = PRVM_ED_FindFieldOffset("angles");
+       prog->fieldoffsets.velocity                       = PRVM_ED_FindFieldOffset("velocity");
+       prog->fieldoffsets.spinvelocity                   = PRVM_ED_FindFieldOffset("spinvelocity");
+
        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");
@@ -1671,6 +1690,7 @@ void PRVM_FindOffsets(void)
        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");
@@ -2312,7 +2332,8 @@ void PRVM_Init (void)
        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");