Sync mobj->terrain

This should be enough I think to sync terrain up. The data structures can't change after the files have been loaded, so it should be good. Needs proper online testing though
This commit is contained in:
Sally Coolatta 2021-12-09 13:20:35 -05:00
parent bf4b47a2cf
commit b1ffaa99f8
3 changed files with 38 additions and 0 deletions

View file

@ -41,6 +41,27 @@ UINT16 numTerrainFloorDefs = 0;
UINT16 defaultTerrain = UINT16_MAX;
/*--------------------------------------------------
size_t K_GetTerrainHeapIndex(terrain_t *terrain)
See header file for description.
--------------------------------------------------*/
size_t K_GetTerrainHeapIndex(terrain_t *terrain)
{
size_t i = SIZE_MAX;
if (terrain == NULL)
{
CONS_Debug(DBG_GAMELOGIC, "NULL terrain in K_GetTerrainHeapIndex.\n");
}
else
{
i = (terrain - terrainDefs);
}
return i;
}
terrain_t *K_GetTerrainByIndex(UINT16 checkIndex)
{
if (checkIndex >= numTerrainDefs)

View file

@ -97,6 +97,7 @@ extern UINT16 numTerrainFloorDefs;
// Default terrain definition ID.
extern UINT16 defaultTerrain;
size_t K_GetTerrainHeapIndex(terrain_t *terrain);
terrain_t *K_GetTerrainByIndex(UINT16 checkIndex);
terrain_t *K_GetTerrainByName(const char *checkName);
terrain_t *K_GetDefaultTerrain(void);

View file

@ -38,6 +38,7 @@
// SRB2Kart
#include "k_battle.h"
#include "k_pwrlv.h"
#include "k_terrain.h"
savedata_t savedata;
UINT8 *save_p;
@ -1540,6 +1541,7 @@ typedef enum
MD2_KITEMCAP = 1<<26,
MD2_ITNEXT = 1<<27,
MD2_LASTMOMZ = 1<<28,
MD2_TERRAIN = 1<<29,
} mobj_diff2_t;
typedef enum
@ -1782,6 +1784,8 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
diff2 |= MD2_ITNEXT;
if (mobj->lastmomz)
diff2 |= MD2_LASTMOMZ;
if (mobj->terrain != NULL)
diff2 |= MD2_TERRAIN;
if (diff2 != 0)
diff |= MD_MORE;
@ -1979,6 +1983,10 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
{
WRITEINT32(save_p, mobj->lastmomz);
}
if (diff2 & MD2_TERRAIN)
{
WRITEUINT32(save_p, K_GetTerrainHeapIndex(mobj->terrain));
}
WRITEUINT32(save_p, mobj->mobjnum);
}
@ -3077,6 +3085,14 @@ static thinker_t* LoadMobjThinker(actionf_p1 thinker)
{
mobj->lastmomz = READINT32(save_p);
}
if (diff2 & MD2_TERRAIN)
{
mobj->terrain = (terrain_t *)(size_t)READUINT32(save_p);
}
else
{
mobj->terrain = NULL;
}
if (diff & MD_REDFLAG)
{