TombEngine/TR5Main/Game/savegame.h
TokyoSU c3555a1fd1 [Update] Project & UPV Prototype
- changed __int32/__int16/__int8 to int/short/char respectivly.
- added UPV (prototype), lara is killed when enter.
2019-11-27 15:12:35 +01:00

131 lines
No EOL
4.3 KiB
C++

#pragma once
#include "..\Global\global.h"
#include "..\Specific\IO\ChunkId.h"
#include "..\Specific\IO\ChunkReader.h"
#include "..\Specific\IO\ChunkWriter.h"
#include "..\Specific\IO\LEB128.h"
#include "..\Specific\IO\Streams.h"
#include "..\Scripting\GameFlowScript.h"
#include "..\Scripting\GameLogicScript.h"
#define RestoreGame ((int (__cdecl*)()) 0x00472060)
#define ReadSavegame ((int (__cdecl*)(int)) 0x004A8E10)
#define CreateSavegame ((void (__cdecl*)()) 0x00470FA0)
#define WriteSavegame ((int (__cdecl*)(int)) 0x004A8BC0)
#define SAVEGAME_BUFFER_SIZE 1048576
extern GameFlow* g_GameFlow;
extern GameScript* g_GameScript;
typedef struct SaveGameHeader
{
string LevelName;
int Days;
int Hours;
int Minutes;
int Seconds;
int Level;
int Timer;
int Count;
bool Present;
};
class SaveGame {
private:
static FileStream* m_stream;
static ChunkReader* m_reader;
static ChunkWriter* m_writer;
static vector<LuaVariable> m_luaVariables;
static ChunkId* m_chunkGameStatus;
static ChunkId* m_chunkItems;
static ChunkId* m_chunkItem;
static ChunkId* m_chunkLara;
static ChunkId* m_chunkLuaVariable;
static ChunkId* m_chunkStaticFlags;
static ChunkId* m_chunkVehicle;
static ChunkId* m_chunkSequenceSwitch;
static ChunkId* m_chunkFlybyFlags;
static ChunkId* m_chunkCdFlags;
static ChunkId* m_chunkCamera;
static ChunkId* m_chunkFlipStats;
static ChunkId* m_chunkFlipMap;
static ChunkId* m_chunkItemDummy;
static ChunkId* m_chunkStatistics;
static ChunkId* m_chunkItemAnims;
static ChunkId* m_chunkItemMeshes;
static ChunkId* m_chunkItemFlags;
static ChunkId* m_chunkItemHitPoints;
static ChunkId* m_chunkItemPosition;
static ChunkId* m_chunkItemIntelligentData;
static ChunkId* m_chunkSpecialItemBurningTorch;
static ChunkId* m_chunkSpecialItemChaff;
static ChunkId* m_chunkSpecialItemTorpedo;
static ChunkId* m_chunkSpecialItemCrossbowBolt;
static ChunkId* m_chunkSpecialItemFlare;
static ChunkId* m_chunkItemQuadInfo;
static ChunkId* m_chunkRats;
static ChunkId* m_chunkSpiders;
static ChunkId* m_chunkBats;
static void saveGameStatus(int arg1, int arg2);
static void saveLara(int arg1, int arg2);
static void saveItem(int arg1, int arg2);
static void saveBurningTorch(int arg1, int arg2);
static void saveChaff(int arg1, int arg2);
static void saveTorpedo(int arg1, int arg2);
static void saveCrossbowBolt(int arg1, int arg2);
static void saveFlare(int arg1, int arg2);
static void saveItems();
static void saveVariables();
static void saveVariable(int arg1, int arg2);
static void saveStaticFlag(int arg1, int arg2);
static void saveCamera(int arg1, int arg2);
static void saveSequenceSwitch(int arg1, int arg2);
static void saveFlybyFlags(int arg1, int arg2);
static void saveFlipMap(int arg1, int arg2);
static void saveFlipStats(int arg1, int arg2);
static void saveCdFlags(int arg1, int arg2);
static void saveStatistics(int arg1, int arg2);
static void saveItemFlags(int arg1, int arg2);
static void saveItemHitPoints(int arg1, int arg2);
static void saveItemPosition(int arg1, int arg2);
static void saveItemMesh(int arg1, int arg2);
static void saveItemAnims(int arg1, int arg2);
static void saveItemIntelligentData(int arg1, int arg2);
static void saveItemQuadInfo(int arg1, int arg2);
static void saveRats(int arg1, int arg2);
static void saveBats(int arg1, int arg2);
static void saveSpiders(int arg1, int arg2);
static bool readGameStatus();
static bool readLara();
static bool readItem();
static bool readBurningTorch();
static bool readChaff();
static bool readCrossbowBolt();
static bool readFlare();
static bool readTorpedo();
static bool readBats();
static bool readRats();
static bool readSpiders();
static bool readStatistics();
static bool readVariable();
static bool readSavegameChunks(ChunkId* chunkId, int maxSize, int arg);
static bool readLaraChunks(ChunkId* chunkId, int maxSize, int arg);
static bool readGameStatusChunks(ChunkId* chunkId, int maxSize, int arg);
static bool readItemChunks(ChunkId* chunkId, int maxSize, int itemNumber);
public:
static int LastSaveGame;
static void Start();
static void End();
static bool Load(char* fileName);
static bool LoadHeader(char* fileName, SaveGameHeader* header);
static bool Save(char* fileName);
};