summaryrefslogtreecommitdiff
path: root/include/save_block_2.h
diff options
context:
space:
mode:
authorRevo <projectrevotpp@hotmail.com>2020-08-20 01:39:17 -0400
committerGitHub <noreply@github.com>2020-08-20 01:39:17 -0400
commit4ed13afd18de6f0b94d35e83023094efcfec73f5 (patch)
tree1347c2688a313c4a70f3a205ab1cc79c496ed2fa /include/save_block_2.h
parent512d22cff9098f9c3636ca018355a851d011effc (diff)
parent3d2b7e5e5e3c43a8c5dc8c8ce255b0c53413048d (diff)
Merge pull request #265 from PikalaxALT/pikalax_work
save.c, pokemon_storage_system.c
Diffstat (limited to 'include/save_block_2.h')
-rw-r--r--include/save_block_2.h128
1 files changed, 117 insertions, 11 deletions
diff --git a/include/save_block_2.h b/include/save_block_2.h
index 304469c7..f54e556e 100644
--- a/include/save_block_2.h
+++ b/include/save_block_2.h
@@ -5,7 +5,7 @@
struct SavArrayHeader
{
- u32 id;
+ int id;
u32 size;
u32 offset;
u16 field_C;
@@ -15,38 +15,144 @@ struct SavArrayHeader
struct SavArrayFooter
{
u32 magic;
- u32 next;
+ u32 unk_4;
+ u32 unk_8;
+ u16 unk_C;
+ u16 crc;
+};
+
+struct SaveChunkFooter
+{
+ u32 unk_0;
+ u32 offset;
u32 size;
- u16 id;
+ u32 magic;
+ u8 unk_10;
+ u8 padding_11;
u16 crc;
};
struct SaveBlock2_Sub_20464 {
- u32 unk_0;
+ u8 unk_0;
+ u8 unk_1;
+ u8 unk_2;
+ u8 padding_3;
+ u32 offset;
+ u32 size;
+};
+
+struct UnkSavSub_2047C
+{
+ int unk_0;
+ int unk_4;
+ int unk_8;
+ int unk_C;
+ int unk_10;
+ u32 unk_14;
+ u32 unk_18;
+ u32 unk_1C[2];
+};
+
+struct UnkStruct_0202288C
+{
+ BOOL unk_0;
u32 offset;
u32 size;
};
struct SaveBlock2
{
- /* 0x00000 */ int flashType;
+ /* 0x00000 */ BOOL flashOkay;
/* 0x00004 */ int unk_00004;
/* 0x00008 */ int unk_00008;
- /* 0x0000C */ int unk_0000C;
+ /* 0x0000C */ int largeSectorChanged;
/* 0x00010 */ int unk_00010;
/* 0x00014 */ struct MATHCRC16Table crcTable;
/* 0x00214 */ u8 dynamic_region[0x20000];
- /* 0x20214 */ int unk_20214;
- /* 0x20218 */ u8 unk_20218[8];
+ /* 0x20214 */ u32 unk_20214;
+ /* 0x20218 */ u32 unk_20218[2];
/* 0x20220 */ u8 unk_20220[2];
/* 0x20222 */ u8 filler_20222[2];
/* 0x20224 */ struct SavArrayHeader arrayHeaders[36];
/* 0x20464 */ struct SaveBlock2_Sub_20464 saveSlotSpecs[2];
- /* 0x2047C */ u8 filler_2047C[0x28];
- /* 0x204A4 */ int unk_204A4;
+ /* 0x2047C */ struct UnkSavSub_2047C unk_2047C;
+ /* 0x204A0 */ u32 unk_204A0;
+ /* 0x204A4 */ u32 unk_204A4;
// TODO: finish this struct
}; // size: 0x204A8
-void * SavArray_get(struct SaveBlock2 *, int);
+typedef u32 (*SAVSIZEFN)(void);
+typedef void (*SAVINITFN)(void *);
+
+struct SaveChunkHeader
+{
+ int id;
+ int linkedId;
+ SAVSIZEFN sizeFunc;
+ SAVINITFN initFunc;
+};
+
+extern const struct SaveChunkHeader UNK_020EE6E0[];
+extern const struct SaveChunkHeader UNK_020EE700[];
+extern const int UNK_020EE6DC;
+extern const int UNK_020EE6D8;
+
+struct SaveBlock2 * SaveBlock2_new(void);
+struct SaveBlock2 * FUN_020225F8(void);
+void * SavArray_get(struct SaveBlock2 * sav2, int idx);
+void * FUN_02022634(struct SaveBlock2 * sav2, int idx);
+BOOL FUN_0202263C(struct SaveBlock2 * sav2);
+BOOL FUN_020226FC(struct SaveBlock2 * sav2);
+int FUN_02022720(struct SaveBlock2 * sav2);
+void FUN_020227A0(struct SaveBlock2 * sav2, int a1);
+void Sav2_InitDynamicRegion(struct SaveBlock2 * sav2);
+int FUN_020227FC(struct SaveBlock2 * sav2);
+int FUN_02022800(struct SaveBlock2 * sav2);
+int FUN_02022804(struct SaveBlock2 * sav2);
+int FUN_02022808(struct SaveBlock2 * sav2);
+BOOL FUN_0202280C(struct SaveBlock2 * sav2);
+int SaveGetDirtyBit(struct SaveBlock2 * sav2);
+void SaveSetDirtyBit(void);
+void FUN_02022840(struct SaveBlock2 * sav2, int a1);
+int FUN_02022854(struct SaveBlock2 * sav2);
+void FUN_0202287C(struct SaveBlock2 * sav2);
+void FUN_0202288C(struct UnkStruct_0202288C * header);
+u16 FUN_02022898(struct SaveBlock2 * sav2, void * data, u32 size);
+u32 GetChunkOffsetFromCurrentSaveSlot(u32 slot, struct SaveBlock2_Sub_20464 * header);
+struct SaveChunkFooter * FUN_020228B8(struct SaveBlock2 * sav2, u8 * offset, int idx);
+BOOL FUN_020228E0(struct SaveBlock2 * sav2, void * data, int idx);
+void FUN_0202293C(struct UnkStruct_0202288C * r5, struct SaveBlock2 * sav2, void * data, int idx);
+void FUN_02022968(struct SaveBlock2 * sav2, void * data, int idx);
+int FUN_020229B8(u32 x, u32 y);
+int FUN_020229F0(struct UnkStruct_0202288C * r7, struct UnkStruct_0202288C * r6, u32 * r5, u32 * r4);
+void FUN_02022AA0(struct SaveBlock2 * sav2, struct UnkStruct_0202288C * a1, struct UnkStruct_0202288C * a2, u32 a3, u32 a4);
+int FUN_02022AD8(struct SaveBlock2 * sav2);
+BOOL FlashLoadChunkIntoDynamicRegionFromHeader(u32 slot, struct SaveBlock2_Sub_20464 * header, u8 * dest);
+BOOL Sav2_LoadDynamicRegion(struct SaveBlock2 * sav2);
+int FUN_02022D54(struct SaveBlock2 * sav2, int chunk, u8 slot);
+int FUN_02022D94(struct SaveBlock2 * sav2, int chunk, u8 slot);
+int FUN_02022DC8(struct SaveBlock2 * sav2, int chunk, u8 slot);
+void FUN_02022DFC(struct SaveBlock2 * sav2, struct UnkSavSub_2047C * a1, int a2);
+int FUN_02022E78(struct SaveBlock2 * sav2, struct UnkSavSub_2047C * a1);
+void FUN_02022F80(struct SaveBlock2 * sav2, struct UnkSavSub_2047C * a1, int a2);
+void FUN_02022FF0(struct SaveBlock2 * sav2, struct UnkSavSub_2047C * a1);
+int FUN_02023044(struct SaveBlock2 * sav2);
+int FlashClobberChunkFooter(struct SaveBlock2 * sav2, int x, u32 y);
+u32 SavArray_sizeof(int idx);
+void SaveBlock2_InitSubstructs(struct SavArrayHeader * headers);
+void FUN_02023160(struct SaveBlock2_Sub_20464 * spec, struct SavArrayHeader * headers);
+void Sav2_InitDynamicRegion_Internal(u8 * dynamic_region, struct SavArrayHeader * headers);
+void CreateChunkFooter(struct SaveBlock2 * sav2, u8 * data, int id, u32 size);
+BOOL ValidateChunk(struct SaveBlock2 * sav2, u8 * data, int id, u32 size);
+u32 FUN_020232B4(u8 * data, u32 size);
+int WriteSaveFileToFlash(struct SaveBlock2 * sav2, int idx, u8 * data);
+u8 * ReadSaveFileFromFlash(struct SaveBlock2 * sav2, u32 heap_id, int idx, int * ret_p);
+BOOL SaveDetectFlash(void);
+int FlashWriteChunk(u32 offset, u8 * data, u32 size);
+BOOL FlashLoadChunk(u32 src, void * dest, u32 size);
+void FlashWriteCommandCallback(void * arg);
+int FlashWriteChunkInternal(u32 dest, void * src, u32 size);
+BOOL WaitFlashWrite(int lock, BOOL * res);
+void SaveErrorHandling(int lock, int errno);
#endif //POKEDIAMOND_SAVE_BLOCK_2_H