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 committed by SinnamonLat
parent e4c04169d7
commit 6cc30005b3
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)
{