pokeplatinum/include/savedata.h

114 lines
3.5 KiB
C

#ifndef POKEPLATINUM_SAVEDATA_H
#define POKEPLATINUM_SAVEDATA_H
#include "constants/heap.h"
#include "constants/savedata/save_table.h"
#include "constants/savedata/savedata.h"
typedef struct SaveBlockFooter {
u32 saveCounter;
u32 blockCounter;
u32 size;
u32 signature;
u8 saveBlockID;
u16 checksum;
} SaveBlockFooter;
typedef struct SaveBlockInfo {
u8 saveBlockID;
u8 sectorStartPos;
u8 sectorsInUse;
u32 offset;
u32 size;
} SaveBlockInfo;
typedef struct SavePageInfo {
int pageID;
u32 size;
u32 location;
u16 checksum;
u16 blockID;
} SavePageInfo;
typedef struct SaveDataBody {
u8 data[SAVE_SECTOR_SIZE * SAVE_PAGE_MAX];
} SaveDataBody;
typedef struct SaveDataState {
BOOL fullSaveMode;
int startBlock;
int currentBlock;
int endBlock;
s32 lockID;
int mainSequence;
u32 globalCounterBackup;
u32 blockCounterBackup[SAVE_BLOCK_ID_MAX];
volatile BOOL locked;
} SaveDataState;
typedef struct SaveData {
BOOL backupExists;
BOOL dataExists;
BOOL isNewGameData;
BOOL fullSaveRequired;
u32 loadCheckStatus;
SaveDataBody body;
u32 globalCounter;
u32 blockCounters[SAVE_BLOCK_ID_MAX];
u8 blockOffsets[SAVE_BLOCK_ID_MAX];
SavePageInfo pageInfo[SAVE_TABLE_ENTRY_MAX];
SaveBlockInfo blockInfo[SAVE_BLOCK_ID_MAX];
SaveDataState state;
int sectorSwitch;
u32 sectorCounter;
} SaveData;
typedef struct SaveCheckInfo {
BOOL valid;
u32 globalCounter;
u32 blockCounter;
} SaveCheckInfo;
typedef struct SaveCheckFooter {
u32 signature;
u32 saveCounter;
u32 size;
u16 id;
u16 checksum;
} SaveCheckFooter;
SaveData *SaveData_Init(void);
SaveData *SaveData_Ptr(void);
void *SaveData_SaveTable(SaveData *saveData, int saveTableID);
const void *SaveData_SaveTableConst(const SaveData *saveData, int saveTableID);
BOOL SaveData_Erase(SaveData *saveData);
BOOL SaveData_Load(SaveData *saveData);
int SaveData_Save(SaveData *saveData);
int SaveData_SaveBlock(SaveData *saveData, int saveBlockID);
void SaveData_Clear(SaveData *saveData);
BOOL SaveData_BackupExists(const SaveData *saveData);
u32 SaveData_LoadCheckStatus(const SaveData *saveData);
BOOL SaveData_DataExists(const SaveData *saveData);
BOOL SaveData_IsNewGameData(const SaveData *saveData);
BOOL SaveData_MiscSaveBlock_InitFlag(SaveData *saveData);
BOOL SaveData_OverwriteCheck(const SaveData *saveData);
BOOL SaveData_FullSaveRequired(const SaveData *saveData);
void SaveData_SetFullSaveRequired(void);
void SaveData_SaveStateInit(SaveData *saveData, int blockID);
int SaveData_SaveStateMain(SaveData *saveData);
void SaveData_SaveStateCancel(SaveData *saveData);
u16 SaveData_CalculateChecksum(const SaveData *saveData, const void *startAddress, u32 size);
int SaveTableEntry_BodySize(int saveTableID);
void SaveDataExtra_Init(SaveData *saveData);
int SaveDataExtra_Save(const SaveData *saveData, int extraSaveID, void *data);
int SaveDataExtra_SaveMirror(SaveData *saveData, int extraSaveID, void *data);
void *SaveDataExtra_Get(SaveData *saveData, enum HeapID heapID, int extraSaveID, int *loadResult);
void *SaveDataExtra_Mirror(SaveData *saveData, enum HeapID heapID, int extraSaveID, int *loadResult, BOOL *isOld);
BOOL SaveData_CardBackupType(void);
BOOL SaveData_CardSave(u32 address, void *data, u32 size);
BOOL SaveData_CardLoad(u32 address, void *data, u32 size);
BOOL SaveData_Checksum(int saveTableID);
void SaveData_SetChecksum(int saveTableID);
#endif // POKEPLATINUM_SAVEDATA_H