shithub: rott

Download patch

ref: 0e2afe456efbeb756b19f8ae6b41491081a49507
parent: 64d4c00a5259dd7b7ad97a13e08bc24471057d81
author: levesqu8 <[email protected]>
date: Sun Nov 19 18:02:27 EST 2017

merge with newZomROTTAlg

--- a/rott/rt_actor.c
+++ b/rott/rt_actor.c
@@ -58,6 +58,7 @@
 #include "fx_man.h"
 //MED
 #include "memcheck.h"
+#include "queue.h"
 
 
 
@@ -3632,44 +3633,18 @@
     
 }
 
-extern resItem* enemiesToRes;
-extern unsigned int freeSlot;
-void AddEnemyToResurrectList(resItem * res)
-{
-    int timeOfResurrect = DetermineTimeUntilEnemyIsResurrected(res->actor->obclass);
-    objtype * actor = res->actor;
-    SetReverseDeathState(actor);
-    if (ZomROTTResFreeSlots[freeSlot])
-    {
-        //FIND AN EMPTY SLOT
-        for(freeSlot; ZomROTTResFreeSlots[freeSlot] == false; freeSlot++)
-        {
-            if (freeSlot >= sizeof(*enemiesToRes))
-            {
-                Error("ZomROTT couldn't find a free slot to insert entry in!");
-            }
-        }
-    }
-    resItem newEntry;
-    
-    newEntry.actor = actor;
-    newEntry.isInitialized = 1;
-    newEntry.timeOfResurrect = timeOfResurrect;
-    
-    enemiesToRes[freeSlot] = newEntry;
-    ZomROTTResFreeSlots[freeSlot] = false;
-}
+extern Queue enemiesToRes;
 
-void CleanUpResurrectList()
+void AddEnemyToResurrectList(objtype * ob)
 {
-    memset(enemiesToRes, 0, sizeof(*enemiesToRes));
-    freeSlot = 0;
+    ob->resurrectAtTime = DetermineTimeUntilEnemyIsResurrected(ob->obclass);
+    SetReverseDeathState(ob);
+    enqueue(&enemiesToRes, ob);
 }
 
 void FreeUpResurrectList()
 {
-    free(enemiesToRes);
-    free(ZomROTTResFreeSlots);
+    clearQueue(&enemiesToRes);
 }
 
 void SetAfterResurrectState(objtype * actor, statetype * doWhat)
@@ -3731,22 +3706,22 @@
 
 void ResurrectEnemies()
 {   
-    resItem * thing;
+    objtype * actor;
     
+    int currTime = gamestate.TimeCount/VBLCOUNTER;
+    
+    int killTotal = gamestate.killtotal;
+    
     int index = 0;
-    for (thing = &enemiesToRes[0]; thing < &enemiesToRes[sizeof(*enemiesToRes)]; thing++, index++)
+    
+    actor = enemiesToRes.head->data;
+    
+    if (currTime >= actor->resurrectAtTime)
     {
-        if (thing->timeOfResurrect == 0)
-        {
-            continue;
-        }
-        else if (gamestate.TimeCount/(VBLCOUNTER) >= thing->timeOfResurrect && ZomROTTResFreeSlots[index] == false)
-        {
-            SD_PlaySoundRTP(SD_PLAYERSPAWNSND, thing->actor->x, thing->actor->y);
-            SpawnDuringGameWithState (thing->actor->obclass,thing->actor->tilex,thing->actor->tiley,thing->actor->dir, 1, thing->actor->state);
-            thing->timeOfResurrect = 0;
-            ZomROTTResFreeSlots[index] = true;
-        }
+        SD_PlaySoundRTP(SD_PLAYERSPAWNSND, actor->x, actor->y);
+        SpawnDuringGameWithState (actor->obclass,actor->tilex,actor->tiley,actor->dir, 1, actor->state);
+        dequeue(&enemiesToRes, actor);
+        gamestate.killcount--;
     }
 }
 
@@ -3843,19 +3818,6 @@
     ConnectAreas();
 }
 
-void SaveResurrectList(byte ** buffer, int *size)
-{
-    byte * tptr;
-    
-    *size = sizeof(enemiesToRes);
-    *buffer = (byte*)SafeMalloc(*size);
-    tptr = *buffer;
-    
-    memcpy(tptr, enemiesToRes, sizeof(*enemiesToRes));
-    tptr += sizeof(enemiesToRes);
-
-}
-
 /*
 ========================
 =
@@ -3894,11 +3856,7 @@
         
         memcpy(copyOfObject, ob, sizeof(objtype));
         
-        resItem * thingToAdd = malloc(sizeof(resItem));
-        
-        thingToAdd->actor = copyOfObject;
-        
-        AddEnemyToResurrectList(thingToAdd);
+        AddEnemyToResurrectList(copyOfObject);
     }
 
     if ((ob->obclass == patrolgunobj) && (ob->temp1 == -1))
--- a/rott/rt_actor.h
+++ b/rott/rt_actor.h
@@ -27,6 +27,7 @@
 //***************************************************************************
 
 #include "states.h"
+#include "queue.h"
 
 
 #define FL_SYNCED          0x400
@@ -256,19 +257,10 @@
     struct objstruct         *next, *prev;
     struct objstruct         *nextactive, *prevactive;
     struct objstruct         *nextinarea, *previnarea;
-
+    int resurrectAtTime;
 } objtype;
 
-typedef struct resStruct
-{
-    short isInitialized;
-    unsigned int timeOfResurrect;
-    objtype * actor;
-} resItem;
 
-
-
-
 typedef struct b_struct
 {   int   NMErotate;
     int   NMEdirstried;
@@ -304,10 +296,8 @@
     boolean elevatormusicon;
 } misc_stuff;
 
-boolean * ZomROTTResFreeSlots;
 
 
-
 extern  boolean          ludicrousgibs;
 extern  objtype*         PLAYER0MISSILE;
 extern  byte             deathshapeoffset[8];
@@ -445,4 +435,4 @@
 
 void ResurrectEnemies();
 
-#endif
+#endif
\ No newline at end of file
--- a/rott/rt_game.c
+++ b/rott/rt_game.c
@@ -65,6 +65,7 @@
 #include "develop.h"
 //MED
 #include "memcheck.h"
+#include "queue.h"
 
 #if (SHAREWARE == 1)
 #define NUMAMMOGRAPHICS 10
@@ -4901,6 +4902,8 @@
 extern boolean allowBlitzMoreMissileWeps;
 extern boolean enableAmmoPickups;
 
+extern Queue enemiesToRes;
+
 boolean SaveTheGame (int num, gamestorage_t * game)
 {
     char   loadname[MAX_PATH]="rottgam0.rot";
@@ -5174,9 +5177,17 @@
     //ZomROTT Stuff
     if(enableZomROTT)
     {
-        SaveResurrectList(&altbuffer, &size);
-        StoreBuffer(savehandle,altbuffer,size);
-        SafeFree(altbuffer);
+        size = sizeof(int);
+        SafeWrite(savehandle, &enemiesToRes.sizeOfQueue, size);
+        
+        int x = 0;
+        node * thingToSave = enemiesToRes.head;
+        size = sizeof(objtype);
+        for (x = 0; x < enemiesToRes.sizeOfQueue; x++)
+        {
+            SafeWrite(savehandle, (objtype *) thingToSave->data, size);
+            thingToSave = thingToSave->next;
+        }
     }
 
     close (savehandle);
@@ -5239,7 +5250,6 @@
 //******************************************************************************
 
 
-extern resItem* enemiesToRes;
 extern unsigned int freeSlot;
 
 boolean LoadTheGame (int num, gamestorage_t * game)
@@ -5569,17 +5579,30 @@
     //ZomROTT Stuff
     if(enableZomROTT)
     {
-        enemiesToRes = calloc(sizeof(resItem), gamestate.killtotal);
-        memset(enemiesToRes, 0, sizeof(*enemiesToRes));
-        size = sizeof(enemiesToRes);
-        memcpy(enemiesToRes, bufptr, size);
-        bufptr += size;
+        queueInit(&enemiesToRes, sizeof(objtype));
         
-        objtype * findFreeSlotPtr;
-        //find index of free
-        for (findFreeSlotPtr = &enemiesToRes[0]; findFreeSlotPtr != 0; findFreeSlotPtr++)
+        int origQueueSize = 0;
+        
+        size = sizeof(int);
+        
+        memcpy(&origQueueSize, bufptr, size);
+        bufptr+=size;
+        
+        size = sizeof(objtype);
+        
+        int x = 0;
+        
+        while(x < origQueueSize)
         {
-            freeSlot++;
+            objtype * item = (objtype *) malloc(sizeof(objtype));
+            
+            memcpy(item, bufptr, size);
+            
+            enqueue(&enemiesToRes, item);
+            
+            bufptr+=size;
+            
+            x++;
         }
     }
 
--- a/rott/rt_main.c
+++ b/rott/rt_main.c
@@ -1857,7 +1857,6 @@
 
 
 extern boolean enableZomROTT;
-extern int numOfNonGibbedEnemies;
 void UpdateGameObjects ( void )
 {
     int j;
@@ -1894,7 +1893,7 @@
         UpdateLightning ();
         TriggerStuff();
         CheckCriticalStatics();
-        if (enableZomROTT)
+        if (enableZomROTT && gamestate.killcount > 0)
         {
             ResurrectEnemies();
         }
@@ -3548,4 +3547,4 @@
         break;
 #endif
     }
-}
+}
\ No newline at end of file
--- a/rott/rt_ted.c
+++ b/rott/rt_ted.c
@@ -66,6 +66,7 @@
 #include "rt_net.h"
 //MED
 #include "memcheck.h"
+#include "queue.h"
 
 
 
@@ -5666,23 +5667,15 @@
     DoLowMemoryConversionIconPlane ();
 }
 
-objtype * enemiesToRes = NULL;
 int freeSlot = 0;
-
-
+Queue enemiesToRes;
 void SetupZomROTTStuff()
 {
-    resItem * uninitializedRes = malloc(sizeof(resItem));
-    uninitializedRes->isInitialized=false;
-    if (enemiesToRes)
+    if (enemiesToRes.head != NULL && enemiesToRes.tail != NULL)
     {
-        FreeUpResurrectList();
+        clearQueue(&enemiesToRes);
     }
-    enemiesToRes = calloc(sizeof(resItem), gamestate.killtotal);
-    memset(enemiesToRes, uninitializedRes, sizeof(*enemiesToRes));
-    ZomROTTResFreeSlots = calloc(sizeof(int), gamestate.killtotal);
-    memset(ZomROTTResFreeSlots, true, sizeof(*ZomROTTResFreeSlots));
-    //freeSlot = 0;
+    queueInit(&enemiesToRes, sizeof(objtype));
 }
 
 /*
@@ -7091,4 +7084,3 @@
         }
     }
 }
-