diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2020-12-17 13:17:58 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-17 13:17:58 -0600 |
commit | 096de8d9b2ffd90c52e790296bfd7c5436d45ca3 (patch) | |
tree | 9c5af2e04dea05221c71946a5dfc06471f77801d /src/save_mid.c | |
parent | bc504264f1e54b3c1e482710c592e5549828bfe1 (diff) | |
parent | f90f3affeb9b0a66aa7df68f5fdecd692033faf9 (diff) |
Merge pull request #12 from SethBarberee/master
Merge work from SethBarberee/pmd-red into pret.
Diffstat (limited to 'src/save_mid.c')
-rw-r--r-- | src/save_mid.c | 311 |
1 files changed, 311 insertions, 0 deletions
diff --git a/src/save_mid.c b/src/save_mid.c new file mode 100644 index 0000000..ddf6d4d --- /dev/null +++ b/src/save_mid.c @@ -0,0 +1,311 @@ +#include "global.h" +#include "save.h" + +extern struct UnkStruct_203B184 *gUnknown_203B184; +extern struct unkTimeStruct *gUnknown_203B47C; + +struct unk_203B188 +{ + u32 unk0; + u32 unk4; +}; + +struct unk_struct +{ + u32 unk0; + u32 unk4; + u32 unk8; + u32 unkC; + u32 unk10; + u32 unk14; + u32 unk18; + u32 unk1C; + u32 padding[504]; +}; + +extern struct unk_203B188 *gUnknown_203B188; + +extern u32 *gUnknown_203B45C; +extern u32 *gUnknown_203B460; +extern u32 gUnknown_203B464; +extern u8 *gUnknown_203B468; +extern u32 gUnknown_203B46C; +extern u8 *gUnknown_203B480; +extern u8 *gUnknown_203B484; +extern u32 *gUnknown_203B488; +extern u32 *gUnknown_203B48C; +extern u32 gUnknown_203B490; +extern u32 gUnknown_203B494; +extern u8 *gUnknown_203B498; +extern u32 gUnknown_80D4354; + +extern void sub_800135C(void); +extern u32 *sub_808CE00(void); +extern void sub_808CE08(void); +extern u32 *sub_80909D0(void); +extern void sub_80909D8(void); +extern u32 sub_809208C(void); +extern void sub_8092094(void); +extern u8 *sub_80923B0(void); +extern void sub_80923B8(void); +extern u32 sub_8094990(void); +extern void sub_8094998(u8 r0); +extern u8 *sub_80950F8(void); +extern u8 *sub_8095100(void); +extern u32 *sub_8095108(void); +extern u32 *sub_8095110(void); +extern void sub_8095118(void); +extern u32 sub_80958F8(void); +extern void sub_8095900(void); +extern u32 sub_8097680(void); +extern void sub_80972F4(void); +extern void sub_80974E8(void); +extern u8 *sub_8097F6C(void); +extern void sub_8097F74(void); + +extern void sub_8011C28(u32 r0); +extern void sub_8011C40(s32 r0); +extern void sub_8097748(void); + + +extern void ResetPlayTime(struct unkTimeStruct *Time); // defined in src/code_8094F88.c +extern struct unkTimeStruct *sub_8094FA0(void); + +extern void* MemoryAlloc(u32 a, u32 b); +extern void MemoryFree(void* a); +extern void MemoryFill8(u8 *dest, u8 value, s32 size); +extern void sub_8011830(void); +extern s32 WriteFlashData(s32 sector, u8 *src, s32 size); +extern void sub_8011854(void); +extern u32 *sub_809769C(void); +u32 *sub_8011C4C(void); +extern void sub_80958E4(u8 *a, u32 b); +extern s32 WriteSaveSector(s32 *a, u8 *src, s32 size); +extern u32 sub_8011DAC(u32 *a); +extern u32 sub_80144A4(u32 *a); +extern bool8 sub_8011FF8(void); +extern void sub_80141B4(u32 *r0, u32 r1, u32 r2, u16 r3); + +void sub_8012298(); +void sub_80122D0(); +void sub_80122F4(); +void sub_8012300(); +void sub_80976A8(); +void sub_80122A8(); + + +s32 sub_80121D4(s32 *a, u8 *src, s32 size) +{ + return WriteSaveSector(a, src, size); +} + +u32 sub_80121E0(u32 r0) +{ + u32 temp; + u32 *temp2; + u32 temp3; + struct unk_struct *r4 = MemoryAlloc(sizeof(struct unk_struct), 5); + temp = 0x1F; + + r4->unk18 = r0; + r4->unk1C = *sub_809769C(); + r4->unk14 = 0x5071412; + + temp2 = sub_8011C4C(); + strncpy((u8 *)r4 + 4, (u8*)temp2, 16); + sub_80958E4((u8 *)r4 + 32, 0); + temp3 = WriteSaveSector(&temp, (u8 *)r4, sizeof(struct unk_struct)); + MemoryFree(r4); + return temp3; +} + +u32 sub_8012240(void) +{ + s32 temp; + struct unk_struct *r5 = MemoryAlloc(sizeof(struct unk_struct), 5); + MemoryFill8((u8 *)r5, 0xFF, 0x4); + sub_8011830(); + temp = WriteFlashData(0x1F, (u8 *)r5, sizeof(struct unk_struct)); + sub_8011854(); + MemoryFree(r5); + if(temp != 0) + { + return 2; + } + else + { + return 0; + } +} + +void sub_8012284(void) +{ + sub_80122D0(); + sub_80122F4(); + sub_8012300(); +} + +void sub_8012298(void) +{ + sub_80976A8(); + sub_80122A8(); +} + +void sub_80122A8(void) +{ + sub_80122D0(); + sub_80122F4(); + sub_8012300(); + sub_8012240(); + +} + +void nullsub_33(void) +{ +} + +void sub_80122C4(void) +{ + sub_80122A8(); +} + +void sub_80122D0(void) +{ + sub_8011C28(0); + sub_8011C40(-1); + sub_8097748(); + ResetPlayTime(gUnknown_203B47C); +} + +void sub_80122F4(void) +{ + sub_800135C(); +} + +void sub_8012300(void) +{ + sub_80923B8(); + sub_808CE08(); + sub_80909D8(); + sub_8092094(); + sub_80972F4(); + sub_8095118(); + sub_8095900(); + sub_80974E8(); + sub_8094998(1); + sub_8097F74(); +} + + +// Unused +void nullsub_200(u32 r0) +{ +} + +// Unused +void sub_8012334(struct UnkStruct_203B184 *r0) +{ + gUnknown_203B184 = r0; + if(r0 != NULL) + { + gUnknown_203B460 = r0->unk0; + gUnknown_203B45C = r0->unk4; + gUnknown_203B480 = r0->unk8; + gUnknown_203B484 = r0->unkC; + gUnknown_203B488 = r0->unk10; + gUnknown_203B48C = r0->unk14; + gUnknown_203B490 = r0->unk18; + gUnknown_203B464 = r0->unk1C; + gUnknown_203B494 = r0->unk20; + gUnknown_203B498 = r0->unk24; + gUnknown_203B468 = r0->unk28; + gUnknown_203B46C = r0->unk2C; + gUnknown_203B47C = r0->unk30; + return; + } + gUnknown_203B460 = sub_80909D0(); + gUnknown_203B45C = sub_808CE00(); + gUnknown_203B480 = sub_80950F8(); + gUnknown_203B484 = sub_8095100(); + gUnknown_203B488 = sub_8095108(); + gUnknown_203B48C = sub_8095110(); + gUnknown_203B490 = sub_80958F8(); + gUnknown_203B464 = sub_809208C(); + gUnknown_203B494 = sub_8097680(); + gUnknown_203B498 = sub_8097F6C(); + gUnknown_203B468 = sub_80923B0(); + gUnknown_203B46C = sub_8094990(); + gUnknown_203B47C = sub_8094FA0(); + +} + +void sub_8012468(void) +{ + gUnknown_203B188 = MemoryAlloc(sizeof(struct unk_203B188), 5); + gUnknown_203B188->unk0 = 1; + +} + +u8 sub_8012484(void) +{ + u32 temp; + u32 temp2; + switch(gUnknown_203B188->unk0) + { + case 0: + gUnknown_203B188->unk0 = 1; + break; + case 1: + temp = 0; + gUnknown_203B188->unk4 = sub_8011DAC(&temp); + gUnknown_203B188->unk0 = 2; + break; + case 2: + if(gUnknown_203B188->unk4 != 0) + { + if(sub_8011FF8()) + { + sub_80141B4(&gUnknown_80D4354, 0, 0, 0x301); + gUnknown_203B188->unk0 = 3; + break; + } + else + { + gUnknown_203B188->unk0 = 4; + break; + } + } + else + { + gUnknown_203B188->unk0 = 6; + break; + } + case 3: + if(sub_80144A4(&temp2) == 0) + { + gUnknown_203B188->unk0 = 4; + break; + } + else + { + break; + } + case 4: + sub_8012298(); + gUnknown_203B188->unk0 = 6; + case 5: + break; + case 6: + return 0; + } + return 1; +} + +void sub_8012558(void) +{ + if(gUnknown_203B188 != NULL) + { + MemoryFree(gUnknown_203B188); + gUnknown_203B188 = NULL; + } +} |