diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2021-02-21 11:13:55 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-21 13:13:55 -0600 |
commit | 7fa4f1a92bdc4cefb094f9e3f1144ad3e3a588d9 (patch) | |
tree | 4d5149a98d71e691fb89dca3dfa082eb11ae6a49 /src | |
parent | c754c2a0466d8394c7ffcb3a515199d5703e47be (diff) |
Fully decomp save.s (#28)
* some work on decomping more save stuff
* code cleanup and decomp another save func
* fully decomp save and combine split save c files
* fix two nonmatchings
Diffstat (limited to 'src')
-rw-r--r-- | src/code_2.c | 17 | ||||
-rw-r--r-- | src/code_800558C.c | 2 | ||||
-rw-r--r-- | src/code_80118A4.c | 4 | ||||
-rw-r--r-- | src/code_8012A18.c (renamed from src/save1.c) | 15 | ||||
-rw-r--r-- | src/code_8040094.c | 4 | ||||
-rw-r--r-- | src/code_808EAB0.c | 47 | ||||
-rw-r--r-- | src/code_8094F88.c | 28 | ||||
-rw-r--r-- | src/code_8098BDC.c | 4 | ||||
-rw-r--r-- | src/music_pre.c | 52 | ||||
-rw-r--r-- | src/save.c | 788 | ||||
-rw-r--r-- | src/save_mid.c | 310 | ||||
-rw-r--r-- | src/wonder_mail.c | 8 |
12 files changed, 790 insertions, 489 deletions
diff --git a/src/code_2.c b/src/code_2.c index a9b8925..6b0b46b 100644 --- a/src/code_2.c +++ b/src/code_2.c @@ -1,19 +1,20 @@ #include "global.h" +#include "bg.h" +#include "constants/bg_music.h" #include "file_system.h" #include "friend_area.h" #include "input.h" -#include "bg.h" +#include "memory.h" #include "music.h" -#include "constants/bg_music.h" +#include "time.h" +#include "save.h" -extern void InitHeap(void); extern void NDS_DebugInit(void); extern void sub_801180C(void); extern void NDS_LoadOverlay_GroundMain(void); extern void sub_8014144(void); extern void LoadMonsterParameters(void); extern void sub_8097670(void); -extern void sub_8094F88(void); extern void sub_8094980(void); extern void sub_8094C14(void); extern void sub_8097F5C(void); @@ -23,12 +24,10 @@ extern void LoadWazaParameters(void); extern void sub_80950BC(void); extern void sub_80958E8(void); extern void sub_800CD64(u32, u32); -extern void sub_8012284(void); extern void sub_8094998(u32); extern void SetWindowTitle(char *); extern void sub_800DAAC(void); extern void SetSavingIconCoords(u32); -extern u32 sub_8011DAC(u32 *); extern void sub_800135C(void); extern void xxx_script_related_8001334(u32); extern void sub_80015C0(u32, u32); @@ -43,9 +42,6 @@ extern void LoadTitleScreen(void); extern void SetBGPaletteBufferColorRGB(s32, u8 *, s32, u8 *); extern void sub_80095CC(u32, u32); extern void InitMainMenu(void); -extern void sub_8012468(void); -extern u32 sub_8012484(void); -extern void sub_8012558(void); extern u8 sub_80363E0(void); extern void SetUpMenu(void); extern u32 UpdateMenu(void); @@ -53,7 +49,6 @@ extern void CleanUpMenu(void); extern void DeleteMainMenu(void); extern s32 sub_80953D4(u32); extern void sub_8095240(u8); -extern void sub_80122A8(void); extern void nullsub_33(void); extern u32 sub_80009D0(u32); @@ -96,7 +91,7 @@ void GameLoop(void) sub_8014144(); LoadMonsterParameters(); sub_8097670(); - sub_8094F88(); + InitializePlayTime(); sub_8094980(); sub_8094C14(); sub_8097F5C(); diff --git a/src/code_800558C.c b/src/code_800558C.c index 8de7dd3..a920070 100644 --- a/src/code_800558C.c +++ b/src/code_800558C.c @@ -1,8 +1,6 @@ #include "global.h" #include "code_800558C.h" -extern u32 gUnknown_203B47C; - extern u8 gUnknown_2026E38; extern u32 gUnknown_2026E3C; extern u16 gUnknown_2026E4E; diff --git a/src/code_80118A4.c b/src/code_80118A4.c index 03859b0..ef11fd4 100644 --- a/src/code_80118A4.c +++ b/src/code_80118A4.c @@ -21,7 +21,7 @@ extern void sub_800C074(u16 r0, u16 r1); extern void sub_800C298(u16 r0); extern u8 sub_800C5D0(u16 r0); -extern struct PlayTimeStruct *gUnknown_203B47C; +extern struct PlayTimeStruct *gPlayTimeRef; struct UnkSaveStruct1 { @@ -81,7 +81,7 @@ void sub_801169C(void) nullsub_8(gUnknown_203B46C->unkA); sub_8005180(); sub_80060EC(); - IncrementPlayTime(gUnknown_203B47C); + IncrementPlayTime(gPlayTimeRef); sub_800CB20(); LoadBufferedInputs(); CopySpritesToOam(); diff --git a/src/save1.c b/src/code_8012A18.c index e8f844c..0e0099b 100644 --- a/src/save1.c +++ b/src/code_8012A18.c @@ -2,8 +2,7 @@ #include "code_800558C.h" #include "input.h" - -struct UnkSaveStruct1 +struct UnkStruct_203B46C { /* 0x0 */ u32 unk0; /* 0x4 */ u32 unk4; @@ -12,7 +11,6 @@ struct UnkSaveStruct1 }; -extern void MemoryFree(void *); extern void sub_8011860(); extern void xxx_draw_string_80144C4(); extern void nullsub_8(u8); @@ -26,17 +24,8 @@ extern void sub_8009908(); extern void xxx_call_update_bg_sound_input(); extern void ResetSprites(u8 r0); -extern struct UnkSaveStruct1 *gUnknown_203B46C; - -extern u8 *gUnknown_203B194; +extern struct UnkStruct_203B46C *gUnknown_203B46C; -void sub_80129FC() -{ - if (gUnknown_203B194) { - MemoryFree(gUnknown_203B194); - gUnknown_203B194 = NULL; - } -} void sub_8012A18() { diff --git a/src/code_8040094.c b/src/code_8040094.c index bb4e208..a62671f 100644 --- a/src/code_8040094.c +++ b/src/code_8040094.c @@ -15,7 +15,7 @@ struct unkStruct_203B418 u8 unk18217; }; -extern struct PlayTimeStruct *gUnknown_203B47C; +extern struct PlayTimeStruct *gPlayTimeRef; extern struct unkStruct_203B418 *gUnknown_203B418; extern s32 gUnknown_80F6568[]; extern u8 gUnknown_202EE01; @@ -36,7 +36,7 @@ void sub_8040094(u8 r0) gUnknown_203B418->unk18217 = r0; sub_803F7BC(); sub_80060EC(); - IncrementPlayTime(gUnknown_203B47C); + IncrementPlayTime(gPlayTimeRef); sub_800CB20(); LoadBufferedInputs(); xxx_call_update_bg_sound_input(); diff --git a/src/code_808EAB0.c b/src/code_808EAB0.c index 44be84e..9fea853 100644 --- a/src/code_808EAB0.c +++ b/src/code_808EAB0.c @@ -61,60 +61,21 @@ void sub_808EB0C(u8 *r0, s32 r1) } } -#ifndef NONMATCHING -NAKED -#endif void sub_808EB48(u8 *r0, s32 r1) { -#ifdef NONMATCHING - // TODO array access and counter are mixed up in the regs.. so close s32 counter; - u32 index; - index = 0; - counter = 0xB; - while(counter >= 0) + for(counter = 0; counter <= 0xB; counter++) { - if(gUnknown_810A378[index] <= r1) + if(gUnknown_810A378[counter] <= r1) { - r0[index] = TRUE; + r0[counter] = TRUE; } else { - r0[index] = FALSE; + r0[counter] = FALSE; } - index++; - counter--; } -#else - asm_unified("\tpush {r4-r7,lr}\n" - "\tadds r4, r1, 0\n" - "\tmovs r6, 0x1\n" - "\tmovs r5, 0\n" - "\tadds r2, r0, 0\n" - "\tldr r1, _0808EB64\n" - "\tmovs r3, 0xB\n" -"_0808EB56:\n" - "\tmovs r7, 0\n" - "\tldrsh r0, [r1, r7]\n" - "\tcmp r0, r4\n" - "\tbgt _0808EB68\n" - "\tstrb r6, [r2]\n" - "\tb _0808EB6A\n" - "\t.align 2, 0\n" -"_0808EB64: .4byte gUnknown_810A378\n" -"_0808EB68:\n" - "\tstrb r5, [r2]\n" -"_0808EB6A:\n" - "\tadds r2, 0x1\n" - "\tadds r1, 0x2\n" - "\tsubs r3, 0x1\n" - "\tcmp r3, 0\n" - "\tbge _0808EB56\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0"); -#endif } bool8 sub_808EB7C(s32 r0, u8 r1) diff --git a/src/code_8094F88.c b/src/code_8094F88.c index 54da9b2..b9d2828 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -1,7 +1,7 @@ #include "global.h" #include "time.h" -extern struct PlayTimeStruct *gUnknown_203B47C; +extern struct PlayTimeStruct *gPlayTimeRef; extern struct PlayTimeStruct gPlayTime; extern u8 gUnknown_2038C88; @@ -18,17 +18,13 @@ extern void sub_809488C(u32 *r0, u32 *r1, u32); extern void sub_8094924(u32 *r0, u32 *r1, u32); -// Forward Declaration -void ResetPlayTime(struct PlayTimeStruct *Time); - - -void sub_8094F88(void) +void InitializePlayTime(void) { - gUnknown_203B47C = &gPlayTime; + gPlayTimeRef = &gPlayTime; ResetPlayTime(&gPlayTime); } -struct PlayTimeStruct *sub_8094FA0(void) +struct PlayTimeStruct *GetPlayTime(void) { return &gPlayTime; } @@ -93,18 +89,18 @@ void DeconstructPlayTime(struct PlayTimeStruct *r0, u32 *outHours, u32 *outMinut void sub_8095044(u32 *r0) { - sub_809488C(r0, (u32 *)(&(gUnknown_203B47C->frames)), 6); - sub_809488C(r0, (u32 *)(&(gUnknown_203B47C->seconds)), 6); - sub_809488C(r0, (u32 *)(&(gUnknown_203B47C->minutes)), 6); - sub_809488C(r0, (u32 *)(&(gUnknown_203B47C->hours)), 14); + sub_809488C(r0, (u32 *)(&(gPlayTimeRef->frames)), 6); + sub_809488C(r0, (u32 *)(&(gPlayTimeRef->seconds)), 6); + sub_809488C(r0, (u32 *)(&(gPlayTimeRef->minutes)), 6); + sub_809488C(r0, (u32 *)(&(gPlayTimeRef->hours)), 14); } void sub_8095080(u32 *r0) { - sub_8094924(r0, (u32 *)(&(gUnknown_203B47C->frames)), 6); - sub_8094924(r0, (u32 *)(&(gUnknown_203B47C->seconds)), 6); - sub_8094924(r0, (u32 *)(&(gUnknown_203B47C->minutes)), 6); - sub_8094924(r0, (u32 *)(&(gUnknown_203B47C->hours)), 14); + sub_8094924(r0, (u32 *)(&(gPlayTimeRef->frames)), 6); + sub_8094924(r0, (u32 *)(&(gPlayTimeRef->seconds)), 6); + sub_8094924(r0, (u32 *)(&(gPlayTimeRef->minutes)), 6); + sub_8094924(r0, (u32 *)(&(gPlayTimeRef->hours)), 14); } void sub_80950BC(void) diff --git a/src/code_8098BDC.c b/src/code_8098BDC.c index a7c8534..6469b57 100644 --- a/src/code_8098BDC.c +++ b/src/code_8098BDC.c @@ -2,7 +2,7 @@ #include "time.h" #include "input.h" -extern struct PlayTimeStruct *gUnknown_203B47C; +extern struct PlayTimeStruct *gPlayTimeRef; extern u32 gUnknown_20398A8; extern u32 gUnknown_20398AC; extern u32 gUnknown_20398B0; @@ -81,7 +81,7 @@ void sub_8098BDC(void) sub_8099BE4(); sub_8099744(); sub_8011860(); - IncrementPlayTime(gUnknown_203B47C); + IncrementPlayTime(gPlayTimeRef); sub_800CB20(); LoadBufferedInputs(); nullsub_120(); diff --git a/src/music_pre.c b/src/music_pre.c index bd87aac..edb00cd 100644 --- a/src/music_pre.c +++ b/src/music_pre.c @@ -73,10 +73,9 @@ void sub_800BA5C(void) nullsub_18(); } -#ifdef NONMATCHING void xxx_update_bg_sound_input(void) { - u8 store; + u32 store; store = gUnknown_203B09B; if(gUnknown_203B09B != 0){ gUnknown_203B09C++; @@ -93,55 +92,6 @@ void xxx_update_bg_sound_input(void) gUnknown_203B0A4 = gUnknown_203B0A0; } } -#else -NAKED -void xxx_update_bg_sound_input(void) -{ - asm_unified("\tpush {r4,r5,lr}\n" - "\tldr r1, _0800BACC\n" - "\tldrb r4, [r1]\n" - "\tcmp r4, 0\n" - "\tbeq _0800BAD4\n" - "\tldr r1, _0800BAD0\n" - "\tldr r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tstr r0, [r1]\n" - "\tb _0800BAFE\n" - "\t.align 2, 0\n" -"_0800BACC: .4byte gUnknown_203B09B\n" -"_0800BAD0: .4byte gUnknown_203B09C\n" -"_0800BAD4:\n" - "\tmovs r0, 0x1\n" - "\tstrb r0, [r1]\n" - "\tldr r0, _0800BB04\n" - "\tstrb r4, [r0]\n" - "\tldr r0, _0800BB08\n" - "\tstr r4, [r0]\n" - "\tbl UpdateBGControlRegisters\n" - "\tldr r5, _0800BB0C\n" - "\tldrb r0, [r5]\n" - "\tcmp r0, 0\n" - "\tbeq _0800BAF0\n" - "\tbl UpdateSound\n" -"_0800BAF0:\n" - "\tbl UpdateInput\n" - "\tstrb r4, [r5]\n" - "\tldr r0, _0800BB10\n" - "\tldr r1, _0800BB14\n" - "\tldr r1, [r1]\n" - "\tstr r1, [r0]\n" -"_0800BAFE:\n" - "\tpop {r4,r5}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_0800BB04: .4byte gUnknown_203B09A\n" -"_0800BB08: .4byte gUnknown_203B09C\n" -"_0800BB0C: .4byte gUnknown_203B099\n" -"_0800BB10: .4byte gUnknown_203B0A4\n" -"_0800BB14: .4byte gUnknown_203B0A0"); -} -#endif void Timer3Intr(void) { @@ -1,29 +1,11 @@ #include "global.h" +#include "event_flag.h" #include "flash.h" +#include "friend_area.h" #include "memory.h" +#include "pokemon.h" +#include "random.h" #include "save.h" -#include "event_flag.h" - -struct UnkStruct_sub_8011DAC { - u8 fill000[0x4]; - u8 unk004[0x400]; - u8 fill404[0x10]; - u32 unk414; - u32 unk418; - u32 unk41C; - u32 unk420; - u32 unk424; - u32 unk428; - u8 fill42C[0x4]; - u32 unk430; - u32 unk434; - u32 unk438; - u32 unk43C; - u32 unk440; - u32 unk444; - u8 fill448[0x538C]; -}; - struct unk_struct { @@ -34,28 +16,150 @@ struct unk_struct u32 unk10; u32 unk14; u32 unk18; - u32 padding[505]; + u32 unk1C; + u32 padding[504]; +}; + +struct unk_203B188 +{ + u32 unk0; + u32 unk4; +}; + + +extern struct unk_203B188 *gUnknown_203B188; + +struct unkStruct_203B18C +{ + u32 unk0; + s32 unk4; + u32 unk8; + struct OpenedFile *faceFile; + u8 *faceData; + u16 unk14; + u16 unk16; + u8 unk18; + u8 unk19; + u8 unk1A; + u8 unk1B; + u16 pokeID; +}; + +extern struct unkStruct_203B18C *gUnknown_203B18C; + +struct unkStruct_203B190 +{ + s32 unk0; + u8 *unk4; + u32 unk8; + u8 unkC; +}; +extern struct unkStruct_203B190 *gUnknown_203B190; + +struct unkStruct_203B194 +{ + s32 unk0; + u8 *unk4; + u32 unk8; + u8 unkC; + u8 padding[0x10 - 0xD]; + u32 unk10; }; +extern struct unkStruct_203B194 *gUnknown_203B194; + extern s32 gUnknown_202DE28; extern u32 gUnknown_203B17C; extern u32 gUnknown_203B180; +extern u32 *gUnknown_203B45C; +extern u32 *gUnknown_203B460; +extern u32 gUnknown_203B464; +extern u8 *gFriendAreas; +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 const char gSaveCorrupted; +extern const char gSavingAdventure; +extern const char gWriteGamePak; +extern const char gSaveCompleted; +extern const char gSaveNotWritten; +extern const char gSaveFailed; +extern const char gUnknown_80D44C8; +extern const char gUnknown_80D45AC; + +extern const char gUnknown_80D45F4; +extern const char gUnknown_80D4668; +extern const char gUnknown_80D473C; +extern const char gSaveFailed2; + extern volatile struct UnkStruct_203B184 *gUnknown_203B184; -extern void* MemoryAlloc(u32 a, u32 b); -extern void MemoryFree(void* a); -extern void SetRngState(s32 state); extern bool8 sub_800DAB0(u16, u8*, s32); extern bool8 sub_800DAB4(u16, u8*, s32); extern bool8 sub_800DAB8(void); +extern void sub_8011830(void); +extern void sub_80140DC(); +extern void sub_8014114(); +extern void sub_80141B4(const char *r0, u32 r1, u8 *r2, u16 r3); +extern u32 sub_80144A4(u32 *a); +extern u32 sub_808ED78(u8 *, u32); extern u32 sub_808EE9C(void* a, s32 b); +extern u32 sub_808F154(u8 *, u32); extern u32 sub_808F2B0(void* a, s32 b); +extern u32 sub_8091C68(u8 *, u32); extern u32 sub_8091D14(void* a, s32 b); +extern u32 sub_80921C4(u8 *, u32); extern u32 sub_809222C(void* a, s32 b); +extern u32 sub_80927A8(u8 *, u32); extern u32 sub_80927F4(void* a, s32 b); +extern u8 *sub_8095100(void); +extern u32 *sub_8095108(void); +extern u32 *sub_8095110(void); +extern void sub_8095118(void); extern u32 sub_80954CC(void* a, s32 b); +extern u32 sub_8095624(u8 *, u32); extern u32 sub_8096FA0(void* a, s32 b); +extern u32 sub_80970D8(u8 *, u32); +extern void sub_80976A8(); +extern u32 sub_8097D60(u8 *, u32); extern u32 sub_8097D98(void* a, s32 b); +extern void sub_80993E4(); +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 u32 sub_8094990(void); +extern void sub_8094998(u8 r0); +extern u8 *sub_80950F8(void); +extern void sub_80958E4(u8 *a, u32 b); +extern u32 sub_80958F8(void); +extern void sub_8095900(void); +extern void sub_80972F4(void); +extern u32 sub_8097680(void); +extern u32 *sub_809769C(void); +extern void sub_80974E8(void); +extern void sub_8097748(void); +extern u8 *sub_8097F6C(void); +extern void sub_8097F74(void); +extern void sub_80993D8(void); + +extern struct PlayTimeStruct *gPlayTimeRef; + + +extern void* MemoryAlloc(u32 a, u32 b); +extern void MemoryFree(void* a); +extern void MemoryFill8(u8 *dest, u8 value, s32 size); +extern void xxx_call_start_bg_music(void); + u32 sub_8011C1C(void) { @@ -181,6 +285,7 @@ u32 ReadSaveSector(s32 *a, u8 *dest, s32 size) return 0; } +// Unused bool8 sub_8011DA8(void) { return TRUE; @@ -189,7 +294,7 @@ bool8 sub_8011DA8(void) u32 sub_8011DAC(u32 *a) { struct UnkStruct_sub_8011DAC *r5 = MemoryAlloc(sizeof(struct UnkStruct_sub_8011DAC), 5); - u8 *r4 = (u8*)r5->fill448; + u8 *r4 = (u8*)r5->unk448; u32 r7 = ReadSaveSector(a, (u8*)r5, sizeof(struct UnkStruct_sub_8011DAC)); u32 r1; if (r7) @@ -226,7 +331,7 @@ u32 sub_8011DAC(u32 *a) r7 = 4; } } - else { + else { MemoryCopy8(gUnknown_203B184->unk04C, r5->unk004, ARRAY_COUNT(r5->unk004)); } } @@ -276,9 +381,9 @@ u32 sub_8011DAC(u32 *a) return r7; } -u32 sub_8011F9C(s32 *r0, u8 *r1, s32 r2) +u32 sub_8011F9C(s32 *r0, u8 *dest, s32 size) { - return ReadSaveSector(r0, r1, r2); + return ReadSaveSector(r0, dest, size); } u32 sub_8011FA8(void) @@ -324,3 +429,626 @@ bool8 sub_8011FF8(void) MemoryFree(r5); return r6; } + +u32 sub_801203C(s32 *param_1,u32 param_2) +{ + struct UnkStruct_sub_8011DAC *iVar1; + char *__src; + int r5; + int r4; + u8 *array_ptr; + + iVar1 = MemoryAlloc(sizeof(struct UnkStruct_sub_8011DAC),5); + array_ptr = iVar1->unk448; + if (gUnknown_203B184 == NULL) { + iVar1->unk41C = param_2; + iVar1->unk418 = sub_8011C34(); + iVar1->unk420 = GetRngState(); + } + else { + iVar1->unk41C = gUnknown_203B184->unk054; + iVar1->unk418 = gUnknown_203B184->unk050; + iVar1->unk420 = gUnknown_203B184->unk058; + } + iVar1->unk414 = 0x5071412; + __src = (char *)sub_8011C4C(); + strncpy(iVar1->unk404,__src,16); + if (gUnknown_203B184 == NULL) { + sub_8002700(&iVar1->unk004); + } + else { + MemoryCopy8(iVar1->unk004,gUnknown_203B184->unk04C,0x400); + } + + iVar1->unk424 = sub_808ED78(array_ptr,0x4650); + array_ptr += 0x4650; + iVar1->unk428 = sub_808F154(array_ptr,0x258); + array_ptr += 0x258; + iVar1->unk430 = sub_8091C68(array_ptr,0x1D8); + array_ptr += 0x1D8; + iVar1->unk434 = sub_80921C4(array_ptr,0x10); + array_ptr += 0x10; + iVar1->unk438 = sub_80927A8(array_ptr,8); + array_ptr += 8; + iVar1->unk43C = sub_8097D60(array_ptr,0x100); + array_ptr += 0x100; + iVar1->unk440 = sub_8095624(array_ptr,0x594); + array_ptr += 0x594; + iVar1->unk444 = sub_80970D8(array_ptr,0x221); + + r5 = WriteSaveSector(param_1,(u8 *)iVar1,sizeof(struct UnkStruct_sub_8011DAC)); + r4 = WriteSaveSector(param_1,(u8 *)iVar1,sizeof(struct UnkStruct_sub_8011DAC)); + MemoryFree(iVar1); + + if (r5 != 0) + return r5; + if (r4 != 0) + return r4; + return r5; +} + + +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 = (u32 *)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)); + xxx_call_start_bg_music(); + 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(gPlayTimeRef); +} + +void sub_80122F4(void) +{ + sub_800135C(); +} + +void sub_8012300(void) +{ + InitializeFriendAreas(); + 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; + gFriendAreas = r0->BoughtFriendAreas; + gUnknown_203B46C = r0->unk2C; + gPlayTimeRef = r0->playTime; + 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(); + gFriendAreas = GetBoughtFriendAreas(); + gUnknown_203B46C = sub_8094990(); + gPlayTimeRef = GetPlayTime(); + +} + +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(&gSaveCorrupted, 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; + } +} + +#ifdef NONMATCHING +void sub_8012574(s16 PokemonID) +{ + struct OpenedFile *file; + s32 id_s32; + + id_s32 = PokemonID; // had to cast for asr shift + + sub_80993D8(); + gUnknown_203B18C = MemoryAlloc(sizeof(struct unkStruct_203B18C),5); + gUnknown_203B18C->pokeID = id_s32; + gUnknown_203B18C->faceFile = NULL; + gUnknown_203B18C->faceData = NULL; + if (PokemonID != 0) { + file = GetDialogueSpriteDataPtr(id_s32); + gUnknown_203B18C->faceFile = file; + gUnknown_203B18C->faceData = file->data; + gUnknown_203B18C->unk18 = 0; + gUnknown_203B18C->unk19 = 0; + gUnknown_203B18C->unk1A = 0; + gUnknown_203B18C->unk14 = 2; + gUnknown_203B18C->unk16 = 8; + } + if (gUnknown_203B18C->faceFile != 0) { + // LDR r0 and R2 statements get flipped... basically matches + sub_80141B4(&gSavingAdventure,0,(u8 *)&gUnknown_203B18C->faceFile,0x20); + } + else { + sub_80141B4(&gSavingAdventure,0,0,0x20); + } + gUnknown_203B18C->unk0 = 3; +} +#else +NAKED +void sub_8012574(s16 PokemonID) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tlsls r0, 16\n" + "\tasrs r4, r0, 16\n" + "\tbl sub_80993D8\n" + "\tldr r5, _080125D4\n" + "\tmovs r0, 0x20\n" + "\tmovs r1, 0x5\n" + "\tbl MemoryAlloc\n" + "\tstr r0, [r5]\n" + "\tmovs r6, 0\n" + "\tmovs r1, 0\n" + "\tstrh r4, [r0, 0x1C]\n" + "\tstr r1, [r0, 0xC]\n" + "\tstr r1, [r0, 0x10]\n" + "\tcmp r4, 0\n" + "\tbeq _080125BA\n" + "\tadds r0, r4, 0\n" + "\tbl GetDialogueSpriteDataPtr\n" + "\tldr r1, [r5]\n" + "\tstr r0, [r1, 0xC]\n" + "\tldr r0, [r0, 0x4]\n" + "\tstr r0, [r1, 0x10]\n" + "\tstrb r6, [r1, 0x18]\n" + "\tldr r0, [r5]\n" + "\tstrb r6, [r0, 0x19]\n" + "\tldr r0, [r5]\n" + "\tstrb r6, [r0, 0x1A]\n" + "\tldr r1, [r5]\n" + "\tmovs r0, 0x2\n" + "\tstrh r0, [r1, 0x14]\n" + "\tmovs r0, 0x8\n" + "\tstrh r0, [r1, 0x16]\n" +"_080125BA:\n" + "\tldr r1, [r5]\n" + "\tldr r0, [r1, 0xC]\n" + "\tcmp r0, 0\n" + "\tbeq _080125DC\n" + "\tadds r2, r1, 0\n" + "\tadds r2, 0xC\n" + "\tldr r0, _080125D8\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0x20\n" + "\tbl sub_80141B4\n" + "\tb _080125E8\n" + "\t.align 2, 0\n" +"_080125D4: .4byte gUnknown_203B18C\n" +"_080125D8: .4byte gSavingAdventure\n" +"_080125DC:\n" + "\tldr r0, _080125F8\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x20\n" + "\tbl sub_80141B4\n" +"_080125E8:\n" + "\tldr r0, _080125FC\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x3\n" + "\tstr r0, [r1]\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_080125F8: .4byte gSavingAdventure\n" +"_080125FC: .4byte gUnknown_203B18C"); + +} +#endif + +u8 sub_8012600(void) +{ + struct OpenedFile **faceFile; + u32 local_14; + u32 other_stack; + + faceFile = NULL; + if (gUnknown_203B18C->faceFile != 0) { + faceFile = &gUnknown_203B18C->faceFile; + } + switch(gUnknown_203B18C->unk0) + { + case 0: + gUnknown_203B18C->unk0 = 7; + break; + case 1: + gUnknown_203B18C->unk4++; + if (8 < gUnknown_203B18C->unk4) { + sub_80141B4(&gWriteGamePak, 0, 0, 0x20); + gUnknown_203B18C->unk0 = 3; + } + break; + case 2: + break; + case 3: + gUnknown_203B18C->unk0 = 4; + break; + case 4: + local_14 = 0; + sub_80140DC(); + gUnknown_203B18C->unk8 = sub_801203C(&local_14, sub_8011C1C()); + switch(gUnknown_203B18C->unk8) + { + case 0: + if(gUnknown_203B18C->faceFile != NULL) + { + sub_80141B4(&gSaveCompleted, 0, (u8 *)faceFile, 0x101); + } + else + { + sub_80141B4(&gSaveCompleted, 0, (u8 *)faceFile, 0x101); + } + gUnknown_203B18C->unk0 = 5; + break; + case 1: + sub_80141B4(&gSaveNotWritten, 0, 0, 0); + gUnknown_203B18C->unk0 = 6; + break; + default: + if(gUnknown_203B18C->faceFile != NULL) + { + sub_80141B4(&gSaveFailed, 0, (u8 *)faceFile, 0x101); + } + else + { + sub_80141B4(&gSaveFailed, 0, (u8 *)faceFile, 0x101); + } + gUnknown_203B18C->unk0 = 5; + break; + } + sub_8014114(); + break; + case 5: + if (sub_80144A4(&other_stack) == 0) + gUnknown_203B18C->unk0 = 7; + break; + case 6: + break; + case 7: + return 0; + } + return 1; +} + +u32 sub_8012744(void) +{ + return gUnknown_203B18C->unk8; +} + +void sub_8012750(void) +{ + if(gUnknown_203B18C != NULL) + { + if(gUnknown_203B18C->faceFile != NULL) + { + CloseFile(gUnknown_203B18C->faceFile); + } + MemoryFree(gUnknown_203B18C); + gUnknown_203B18C = NULL; + } + sub_80993E4(); +} + +void sub_801277C(u8 *r0, u32 r1) +{ + gUnknown_203B190 = MemoryAlloc(sizeof(struct unkStruct_203B190), 5); + gUnknown_203B190->unk4 = r0; + gUnknown_203B190->unk8 = r1; + gUnknown_203B190->unkC = 0; + gUnknown_203B190->unk0 = 1; +} + +u32 sub_80127A8(void) +{ + u32 stack_1; + u32 stack_2; + + switch(gUnknown_203B190->unk0) + { + case 0: + gUnknown_203B190->unk0 = 1; + break; + case 1: + stack_1 = 16; + if(sub_8011F9C(&stack_1, gUnknown_203B190->unk4, gUnknown_203B190->unk8) == 0) + { + gUnknown_203B190->unkC = 1; + gUnknown_203B190->unk0 = 3; + } + else + { + sub_80141B4(&gUnknown_80D44C8, 0, 0, 0x301); + gUnknown_203B190->unk0 = 2; + } + break; + case 2: + if(sub_80144A4(&stack_2) == 0) + gUnknown_203B190->unk0 = 3; + break; + case 3: + return 0; + default: + break; + } + return 1; +} + +u8 sub_8012828(void) +{ + return gUnknown_203B190->unkC; +} + +void sub_8012834(void) +{ + if(gUnknown_203B190 != NULL){ + MemoryFree(gUnknown_203B190); + gUnknown_203B190 = 0; + } +} + +void sub_8012850(u8 *r0, u32 r1, u8 r2) +{ + gUnknown_203B194 = MemoryAlloc(sizeof(struct unkStruct_203B194), 5); + gUnknown_203B194->unk4 = r0; + gUnknown_203B194->unk8 = r1; + gUnknown_203B194->unkC = r2; + gUnknown_203B194->unk0 = 0; + if(gUnknown_203B194->unkC != 0) + { + sub_80141B4(&gUnknown_80D45AC, 0, 0, 0x20); + } + else + { + sub_80141B4(&gUnknown_80D45AC, 0, 0, 0x20); + } +} + +u32 sub_80128B0(void) +{ + u32 stack_1; + u32 stack_2; + switch(gUnknown_203B194->unk0) + { + case 0: + gUnknown_203B194->unk0 = 1; + break; + case 1: + sub_80140DC(); + stack_1 = 16; + gUnknown_203B194->unk10 = sub_80121D4(&stack_1, gUnknown_203B194->unk4, gUnknown_203B194->unk8); + gUnknown_203B194->unk0 = 2; + return 1; + case 2: + stack_1 = 0; + if(gUnknown_203B194->unk10 == 0) + { + gUnknown_203B194->unk10 = sub_801203C(&stack_1, 2); + } + switch(gUnknown_203B194->unk10) + { + case 0: + sub_80121E0(0xf1207); + if(gUnknown_203B194->unkC != 0) + { + sub_80141B4(&gUnknown_80D45F4, 0, 0, 0x301); + } + else + { + sub_80141B4(&gUnknown_80D4668, 0, 0, 0x301); + } + gUnknown_203B194->unk0 = 3; + break; + case 1: + sub_80141B4(&gUnknown_80D473C, 0, 0, 0); + gUnknown_203B194->unk0 = 4; + break; + default: + sub_80121E0(0xf1209); + sub_80141B4(&gSaveFailed2, 0, 0, 0x301); + gUnknown_203B194->unk0 = 3; + break; + } + sub_8014114(); + break; + case 3: + if(sub_80144A4(&stack_2) == 0) + gUnknown_203B194->unk0 = 5; + break; + case 4: + break; + case 5: + if(gUnknown_203B194->unk10 == 0) + { + return 2; + } + else + { + return 3; + } + break; + default: + break; + } + return 0; +} + +void sub_80129FC() +{ + if (gUnknown_203B194) { + MemoryFree(gUnknown_203B194); + gUnknown_203B194 = NULL; + } +} + diff --git a/src/save_mid.c b/src/save_mid.c deleted file mode 100644 index 0c4531c..0000000 --- a/src/save_mid.c +++ /dev/null @@ -1,310 +0,0 @@ -#include "global.h" -#include "save.h" -#include "friend_area.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 *gFriendAreas; -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 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 xxx_call_start_bg_music(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)); - xxx_call_start_bg_music(); - 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) -{ - InitializeFriendAreas(); - 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; - gFriendAreas = r0->BoughtFriendAreas; - 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(); - gFriendAreas = GetBoughtFriendAreas(); - 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; - } -} diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 07c4ff9..274625c 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -1,4 +1,5 @@ #include "global.h" +#include "save.h" // Wonder Mail Related struct WonderMailStruct_203B2C0 @@ -57,9 +58,6 @@ extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0; extern u32 sub_80144A4(s32 *r0); extern void sub_8011C28(u32); -extern void sub_8012574(u32); -extern u8 sub_8012600(); -extern void sub_8012750(); extern void sub_8095240(u8); extern void sub_809927C(u8); @@ -104,10 +102,6 @@ extern u32 sub_8030DA0(void); extern void sub_8030DE4(void); extern void sub_803092C(void); extern void sub_8011C28(u32); -extern void sub_8012574(u32); -extern u8 sub_8012600(); -extern u32 sub_8012744(); -extern void sub_8012750(); extern u32 sub_80154F0(); |