mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-03-21 17:55:13 -05:00
114 lines
3.5 KiB
C
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
|