raze/source/core/savegamehelp.h

67 lines
1.6 KiB
C
Raw Normal View History

#pragma once
2020-04-11 21:54:33 +00:00
#include "resourcefile.h"
#include "build.h"
#include "gamefuncs.h"
#include "coreactor.h"
extern FixedBitArray<MAXSPRITES> activeSprites;
// Savegame utilities
class FileReader;
extern int SaveVersion;
FString G_BuildSaveName (const char *prefix);
int G_ValidateSavegame(FileReader &fr, FString *savetitle, bool formenu);
void G_LoadGame(const char* filename, bool hidecon = false);
void G_SaveGame(const char* fn, const char* desc);
void G_DoSaveGame(bool okForQuicksave, bool forceQuicksave, const char* filename, const char* description);
void G_DoLoadGame();
void M_Autosave();
#define SAVEGAME_EXT ".dsave"
2019-11-30 18:23:54 +00:00
2021-04-02 09:55:23 +00:00
template<> inline FSerializer& Serialize(FSerializer& arc, const char* keyname, spritetype*& w, spritetype** def)
2021-04-02 09:55:23 +00:00
{
int ndx = w ? int(w - sprite) : -1;
arc(keyname, ndx);
w = ndx == -1 ? nullptr : sprite + ndx;
return arc;
}
template<> inline FSerializer& Serialize(FSerializer& arc, const char* keyname, sectortype*& w, sectortype** def)
2021-04-02 09:55:23 +00:00
{
int ndx = w ? sectnum(w) : -1;
2021-04-02 09:55:23 +00:00
arc(keyname, ndx);
w = ndx == -1 ? nullptr : &sector[ndx];
2021-04-02 09:55:23 +00:00
return arc;
}
template<> inline FSerializer& Serialize(FSerializer& arc, const char* keyname, walltype*& w, walltype** def)
2021-04-02 09:55:23 +00:00
{
int ndx = w ? wallnum(w) : -1;
2021-04-02 09:55:23 +00:00
arc(keyname, ndx);
w = ndx == -1 ? nullptr : &wall[ndx];
2021-04-02 09:55:23 +00:00
return arc;
}
template<class T>
inline FSerializer& Serialize(FSerializer& arc, const char* keyname, THitInfo<T>& w, THitInfo<T>* def)
{
if (arc.BeginObject(keyname))
{
arc("sect", w.hitSector)
("sprite", w.hitActor)
("wall", w.hitWall)
("x", w.hitpos.x)
("y", w.hitpos.y)
("z", w.hitpos.z)
.EndObject();
}
return arc;
}