mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-28 12:30:46 +00:00
- Exhumed: Serialize global state as JSON.
This was the last item to be converted.
This commit is contained in:
parent
487d62e264
commit
67dff2a863
3 changed files with 31 additions and 81 deletions
|
@ -645,83 +645,43 @@ bool GameInterface::CanSave()
|
||||||
return new GameInterface;
|
return new GameInterface;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// This is only the static global data.
|
|
||||||
static SavegameHelper sghexhumed("exhumed",
|
|
||||||
SV(besttarget),
|
|
||||||
SV(nCreaturesTotal),
|
|
||||||
SV(nCreaturesKilled),
|
|
||||||
SV(nFreeze),
|
|
||||||
SV(nSnakeCam),
|
|
||||||
SV(nLocalSpr),
|
|
||||||
SV(nClockVal), // kTile3603
|
|
||||||
SV(nRedTicks),
|
|
||||||
SV(nAlarmTicks),
|
|
||||||
SV(nButtonColor),
|
|
||||||
SV(nEnergyChan),
|
|
||||||
SV(lCountDown),
|
|
||||||
SV(nEnergyTowers),
|
|
||||||
SV(totalmoves),
|
|
||||||
SV(nCurBodyNum),
|
|
||||||
SV(nBodyTotal),
|
|
||||||
SV(bSnakeCam),
|
|
||||||
SV(bSlipMode),
|
|
||||||
SV(leveltime),
|
|
||||||
nullptr);
|
|
||||||
|
|
||||||
extern short cPupData[300];
|
extern short cPupData[300];
|
||||||
extern uint8_t* Worktile;
|
extern uint8_t* Worktile;
|
||||||
extern int lHeadStartClock;
|
extern int lHeadStartClock;
|
||||||
extern short* pPupData;
|
extern short* pPupData;
|
||||||
|
|
||||||
|
void SerializeState(FSerializer& arc)
|
||||||
void SaveTextureState()
|
|
||||||
{
|
{
|
||||||
auto fw = WriteSavegameChunk("texture");
|
int loaded = 0;
|
||||||
int pupOffset = pPupData? int(pPupData - cPupData) : -1;
|
if (arc.BeginObject("state"))
|
||||||
|
|
||||||
// There is really no good way to restore these tiles, so it's probably best to save them as well, so that they can be reloaded with the exact state they were left in
|
|
||||||
fw->Write(&pupOffset, 4);
|
|
||||||
uint8_t loaded = !!Worktile;
|
|
||||||
fw->Write(&loaded, 1);
|
|
||||||
if (Worktile) fw->Write(Worktile, WorktileSize);
|
|
||||||
auto pixels = TileFiles.tileMakeWritable(kTile3603);
|
|
||||||
fw->Write(pixels, tileWidth(kTile3603) * tileHeight(kTile3603));
|
|
||||||
pixels = TileFiles.tileMakeWritable(kEnergy1);
|
|
||||||
fw->Write(pixels, tileWidth(kEnergy1) * tileHeight(kEnergy1));
|
|
||||||
pixels = TileFiles.tileMakeWritable(kEnergy2);
|
|
||||||
fw->Write(pixels, tileWidth(kEnergy2) * tileHeight(kEnergy2));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void LoadTextureState()
|
|
||||||
{
|
|
||||||
auto fr = ReadSavegameChunk("texture");
|
|
||||||
int pofs;
|
|
||||||
fr.Read(&pofs, 4);
|
|
||||||
pPupData = pofs == -1 ? nullptr : cPupData + pofs;
|
|
||||||
uint8_t loaded;
|
|
||||||
fr.Read(&loaded, 1);
|
|
||||||
if (loaded)
|
|
||||||
{
|
{
|
||||||
Worktile = TileFiles.tileCreate(kTileRamsesWorkTile, kSpiritX * 2, kSpiritY * 2);
|
if (arc.isReading() && currentLevel->levelNumber == 20)
|
||||||
fr.Read(Worktile, WorktileSize);
|
{
|
||||||
|
InitEnergyTile();
|
||||||
|
}
|
||||||
|
|
||||||
|
arc ("besttarget", besttarget)
|
||||||
|
("creaturestotal", nCreaturesTotal)
|
||||||
|
("creatureskilled", nCreaturesKilled)
|
||||||
|
("freeze", nFreeze)
|
||||||
|
("snakecam", nSnakeCam)
|
||||||
|
("localspr", nLocalSpr)
|
||||||
|
("clockval", nClockVal) // kTile3603
|
||||||
|
("redticks", nRedTicks)
|
||||||
|
("alarmticks", nAlarmTicks)
|
||||||
|
("buttoncolor", nButtonColor)
|
||||||
|
("energychan", nEnergyChan)
|
||||||
|
("countdown", lCountDown)
|
||||||
|
("energytowers", nEnergyTowers)
|
||||||
|
("totalmoves", totalmoves)
|
||||||
|
("curbodynum", nCurBodyNum)
|
||||||
|
("bodytotal", nBodyTotal)
|
||||||
|
("snakecam", bSnakeCam)
|
||||||
|
("slipmode", bSlipMode)
|
||||||
|
("leveltime", leveltime)
|
||||||
|
("cinemaseen", nCinemaSeen)
|
||||||
|
.EndObject();
|
||||||
}
|
}
|
||||||
auto pixels = TileFiles.tileMakeWritable(kTile3603);
|
|
||||||
fr.Read(pixels, tileWidth(kTile3603) * tileHeight(kTile3603));
|
|
||||||
pixels = TileFiles.tileMakeWritable(kEnergy1);
|
|
||||||
fr.Read(pixels, tileWidth(kEnergy1) * tileHeight(kEnergy1));
|
|
||||||
pixels = TileFiles.tileMakeWritable(kEnergy2);
|
|
||||||
fr.Read(pixels, tileWidth(kEnergy2) * tileHeight(kEnergy2));
|
|
||||||
TileFiles.InvalidateTile(kTileRamsesWorkTile);
|
|
||||||
TileFiles.InvalidateTile(kTile3603);
|
|
||||||
TileFiles.InvalidateTile(kEnergy1);
|
|
||||||
TileFiles.InvalidateTile(kEnergy2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CCMD(endit)
|
|
||||||
{
|
|
||||||
LevelFinished();
|
|
||||||
}
|
|
||||||
END_PS_NS
|
END_PS_NS
|
||||||
|
|
|
@ -238,11 +238,4 @@ void DoEnergyTile()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static SavegameHelper sghmenu("menu",
|
|
||||||
SA(nCinemaSeen),
|
|
||||||
SA(energytile),
|
|
||||||
SV(nButtonColor),
|
|
||||||
SV(word_9AB5B),
|
|
||||||
nullptr);
|
|
||||||
|
|
||||||
END_PS_NS
|
END_PS_NS
|
||||||
|
|
|
@ -29,6 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
BEGIN_PS_NS
|
BEGIN_PS_NS
|
||||||
|
|
||||||
|
void SerializeState(FSerializer& arc);
|
||||||
void SerializeAnim(FSerializer& arc);
|
void SerializeAnim(FSerializer& arc);
|
||||||
void SerializeBubbles(FSerializer& arc);
|
void SerializeBubbles(FSerializer& arc);
|
||||||
void SerializeBullet(FSerializer& arc);
|
void SerializeBullet(FSerializer& arc);
|
||||||
|
@ -62,15 +63,11 @@ void SerializeSet(FSerializer& arc);
|
||||||
void SerializeSpider(FSerializer& arc);
|
void SerializeSpider(FSerializer& arc);
|
||||||
void SerializeWasp(FSerializer& arc);
|
void SerializeWasp(FSerializer& arc);
|
||||||
|
|
||||||
void SaveTextureState();
|
|
||||||
void LoadTextureState();
|
|
||||||
|
|
||||||
static TArray<SavegameHelper*> sghelpers(TArray<SavegameHelper*>::NoInit);
|
static TArray<SavegameHelper*> sghelpers(TArray<SavegameHelper*>::NoInit);
|
||||||
|
|
||||||
bool GameInterface::SaveGame()
|
bool GameInterface::SaveGame()
|
||||||
{
|
{
|
||||||
for (auto sgh : sghelpers) sgh->Save();
|
for (auto sgh : sghelpers) sgh->Save();
|
||||||
SaveTextureState();
|
|
||||||
return 1; // CHECKME
|
return 1; // CHECKME
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,6 +75,7 @@ void GameInterface::SerializeGameState(FSerializer& arc)
|
||||||
{
|
{
|
||||||
if (arc.BeginObject("exhumed"))
|
if (arc.BeginObject("exhumed"))
|
||||||
{
|
{
|
||||||
|
SerializeState(arc);
|
||||||
SerializeAnim(arc);
|
SerializeAnim(arc);
|
||||||
SerializeBubbles(arc);
|
SerializeBubbles(arc);
|
||||||
SerializeBullet(arc);
|
SerializeBullet(arc);
|
||||||
|
@ -117,7 +115,6 @@ bool GameInterface::LoadGame()
|
||||||
{
|
{
|
||||||
|
|
||||||
for (auto sgh : sghelpers) sgh->Load();
|
for (auto sgh : sghelpers) sgh->Load();
|
||||||
LoadTextureState();
|
|
||||||
FinishSavegameRead();
|
FinishSavegameRead();
|
||||||
|
|
||||||
// reset the sky in case it hasn't been done yet.
|
// reset the sky in case it hasn't been done yet.
|
||||||
|
|
Loading…
Reference in a new issue