]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - prvm_edict.c
308
[xonotic/darkplaces.git] / prvm_edict.c
index 1f219f43ae05ce42cf503103d12a2584cffc911e..6fe41fa02edde45843f2a97c8ec55597bbf2153f 100644 (file)
@@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 // AK new vm 
 
 #include "quakedef.h"
+#include "progsvm.h"
 
 prvm_prog_t *prog;
 
@@ -70,7 +71,7 @@ void PRVM_MEM_Alloc()
        // set edict pointers
        for(i = 0; i < prog->max_edicts; i++)
        {
-               prog->edicts[i].e = (prvm_edict_private_t *)((qbyte  *)prog->edictprivate + i * prog->edictprivate_size);
+               prog->edicts[i].p.e = (prvm_edict_private_t *)((qbyte  *)prog->edictprivate + i * prog->edictprivate_size);
                prog->edicts[i].v = (void*)((qbyte *)prog->edictsfields + i * prog->edict_size);
        }
 }
@@ -104,7 +105,7 @@ void PRVM_MEM_IncreaseEdicts()
        //set e and v pointers
        for(i = 0; i < prog->max_edicts; i++)
        {
-               prog->edicts[i].e = (prvm_edict_private_t *)((qbyte  *)prog->edictprivate + i * prog->edictprivate_size);
+               prog->edicts[i].p.e = (prvm_edict_private_t *)((qbyte  *)prog->edictprivate + i * prog->edictprivate_size);
                prog->edicts[i].v = (void*)((qbyte *)prog->edictsfields + i * prog->edict_size);
        }
 
@@ -191,7 +192,7 @@ void PRVM_ED_ClearEdict (prvm_edict_t *e)
 {
        int num;
        memset (e->v, 0, prog->progs->entityfields * 4);
-       e->e->free = false;
+       e->p.e->free = false;
        // LordHavoc: for consistency set these here
        num = PRVM_NUM_FOR_EDICT(e) - 1;
 
@@ -225,7 +226,7 @@ prvm_edict_t *PRVM_ED_Alloc (void)
                e = PRVM_EDICT_NUM(i);
                // the first couple seconds of server time can involve a lot of
                // freeing and allocating, so relax the replacement policy
-               if (e->e->free && ( e->e->freetime < 2 || (*prog->time - e->e->freetime) > 0.5 ) )
+               if (e->p.e->free && ( e->p.e->freetime < 2 || (*prog->time - e->p.e->freetime) > 0.5 ) )
                {
                        PRVM_ED_ClearEdict (e);
                        return e;
@@ -261,8 +262,8 @@ void PRVM_ED_Free (prvm_edict_t *ed)
 
        PRVM_GCALL(free_edict)(ed);
 
-       ed->e->free = true;
-       ed->e->freetime = *prog->time;
+       ed->p.e->free = true;
+       ed->p.e->freetime = *prog->time;
 }
 
 //===========================================================================
@@ -567,7 +568,7 @@ void PRVM_ED_Print(prvm_edict_t *ed)
        int             type;
        char    tempstring[8192], tempstring2[260]; // temporary string buffers
 
-       if (ed->e->free)
+       if (ed->p.e->free)
        {
                Con_Printf("%s: FREE\n",PRVM_NAME);
                return;
@@ -642,7 +643,7 @@ void PRVM_ED_Write (qfile_t *f, prvm_edict_t *ed)
 
        FS_Print(f, "{\n");
 
-       if (ed->e->free)
+       if (ed->p.e->free)
        {
                FS_Print(f, "}\n");
                return;
@@ -771,7 +772,7 @@ void PRVM_ED_Count_f (void)
                for (i=0 ; i<prog->num_edicts ; i++)
                {
                        ent = PRVM_EDICT_NUM(i);
-                       if (ent->e->free)
+                       if (ent->p.e->free)
                                continue;
                        active++;
                }
@@ -1041,10 +1042,6 @@ const char *PRVM_ED_ParseEdict (const char *data, prvm_edict_t *ent)
 
        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)
        {
@@ -1111,7 +1108,7 @@ const char *PRVM_ED_ParseEdict (const char *data, prvm_edict_t *ent)
        }
 
        if (!init)
-               ent->e->free = true;
+               ent->p.e->free = true;
 
        return data;
 }
@@ -1159,6 +1156,10 @@ void PRVM_ED_LoadFromFile (const char *data)
                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++;
 
@@ -1204,7 +1205,7 @@ void PRVM_ED_LoadFromFile (const char *data)
                }
        
                spawned++;
-               if (ent->e->free)
+               if (ent->p.e->free)
                        died++;
        }
 
@@ -1535,7 +1536,7 @@ void PRVM_Fields_f (void)
        for (ednum = 0;ednum < prog->max_edicts;ednum++)
        {
                ed = PRVM_EDICT_NUM(ednum);
-               if (ed->e->free)
+               if (ed->p.e->free)
                        continue;
                for (i = 1;i < prog->progs->numfielddefs;i++)
                {