tmc/include/save.h

144 lines
4.5 KiB
C

#ifndef SAVE_H
#define SAVE_H
#include "global.h"
#include "player.h"
#include "structures.h"
#include "room.h"
#define FILENAME_LENGTH 6
typedef enum {
SAVE_BUSY = 0,
SAVE_OK = 1,
SAVE_ERROR = -1,
} SaveResult;
typedef enum {
SAVE_INIT,
SAVE_IN_PROGRESS,
SAVE_DONE,
} SaveState;
/**
* Attempt to save the game.
*
* @param idx The save slot.
* @return #SaveResult result.
*/
extern SaveResult HandleSave(u32 idx);
/**
* Contains all information about a save file.
* The contents of this structure are read from and written to EEPROM.
*/
typedef struct {
/*0x000*/ u8 invalid; /**< File is invalid. */
/*0x001*/ u8 initialized; /**< File is initialized. */
/*0x002*/ u8 msg_speed; /**< Message speed. */
/*0x003*/ u8 brightness; /**< Brightness. */
/*0x004*/ u8 filler4[0x2]; /**< unused filler */
/*0x006*/ u8 saw_staffroll; /**< beat the game and watched the credits */
/*0x007*/ u8 dws_barrel_state; /**< state of the big barrel in DWS, 0 or 2 */
/*0x008*/ u8 global_progress; /**< @see UpdateGlobalProgress */
/*0x009*/ u8 available_figurines; /**< figurines available to get */
/*0x00A*/ u8 fillerA[0x16]; /**< unused filler */
/*0x020*/ u16 map_hints; /**< bitmask, used by subtask MapHint */
/*0x022*/ u8 filler22[0x1e]; /**< unused filler */
/*0x040*/ u32 windcrests; /**< upper 8 bit Windcrest flags @see WindcrestID
* lower bits used for other things */
/*0x044*/ u8 filler44[0xC]; /**< unused filler */
/*0x050*/ u32 enemies_killed; /**< number of enemies killed */
/*0x054*/ u8 filler54[0x8]; /**< unused filler */
/*0x05C*/ u32 items_bought; /**< number of items bought in stockwells shop */
/*0x060*/ u32 areaVisitFlags[8]; /**< Area visit flags. */
/*0x080*/ char name[FILENAME_LENGTH]; /**< Save file name. */
/*0x086*/ u8 filler86[0x2]; /**< unused filler */
/*0x088*/ PlayerRoomStatus saved_status; /**< Player room status. */
/*0x0A8*/ Stats stats; /**< Player stats. */
/*0x0D0*/ u8 fillerD0[34];
/*0x0F2*/ u8 inventory[36];
/*0x116*/ u8 didAllFusions;
/*0x117*/ u8 fusedKinstoneCount;
/*0x118*/ u8 kinstoneTypes[0x13]; // 0x65-0x75 for each kinstone type present in kinstone bag
/*0x12B*/ u8 kinstoneAmounts[0x13]; // amount of each kinstone type above
/*0x13E*/ u8 filler13E[3];
/*0x141*/ u8 fuserProgress[128]; // indexed by fuser id, incremented after fusion
/*0x1C1*/ u8 fuserOffers[128]; // available kinstone fusion for each fuser
/*0x241*/ u8 fusedKinstones[13]; /**< Bitfield for fused kinstones. @see CheckKinstoneFused */
/*0x24E*/ u8 fusionUnmarked[13]; /**< Bitfield for disabled fusion map markers. @see CheckFusionMapMarkerDisabled */
/*0x25B*/ u8 filler25B;
/*0x25C*/ u8 flags[0x200]; /**< Flags. */
/*0x45C*/ u8 dungeonKeys[0x10]; // TODO Indexed by dungeon id, keys per dungeon
/*0x46C*/ u8 dungeonItems[0x10]; // TODO items in the dungeon. 4: compass, 2: big key, 1: small key
/*0x47C*/ u8 dungeonWarps[0x10]; // TODO indexed by dungeon id, EnableDungeonWarp, IsDungeonWarpActive
/*0x48C*/ u32 timers[7];
/*0x4A8*/ u32 demo_timer; /**< Demo timer. */
/*0x4AC*/ u8 filler4ac[0x8];
} SaveFile;
/**
* The current save file.
*/
extern SaveFile gSave;
/**
* Initialize the save system.
*
* @return Success
*/
u32 InitSaveData(void);
/**
* Read save header.
*
* @return Success.
*/
u32 ReadSaveHeader(SaveHeader*);
/**
* Write save header.
*
* @return Success.
*/
u32 WriteSaveHeader(SaveHeader*);
/**
* Read save file.
*
* @return Success.
*/
s32 ReadSaveFile(u32, SaveFile*);
/**
* Mark a save file as deleted.
*
* @param index The save file index.
*/
void SetFileStatusDeleted(u32 index);
extern const char gUnk_0811E470[];
/**
* Update the global progress (0 - 10).
* There are 10 different indicators of game completion:
9 : Flag SEIIKI_STAINED_GLASS
8 : Flag LV5_CLEAR
7 : Flag OUBO_KAKERA
6 : Flag LV4_CLEAR
5 : Flag LV3_CLEAR
4 : Flag SOUGEN_08_TORITSUKI
2 : Flag LV1_CLEAR
1 : Default
}
*/
void UpdateGlobalProgress(void);
void sub_0807CD9C(void);
#ifdef DEMO_USA
extern const u8* const demoPointers[];
extern const u8 demoUnknown1[];
#endif
#endif // SAVE_H