summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2021-02-21 11:13:55 -0800
committerGitHub <noreply@github.com>2021-02-21 13:13:55 -0600
commit7fa4f1a92bdc4cefb094f9e3f1144ad3e3a588d9 (patch)
tree4d5149a98d71e691fb89dca3dfa082eb11ae6a49 /src
parentc754c2a0466d8394c7ffcb3a515199d5703e47be (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.c17
-rw-r--r--src/code_800558C.c2
-rw-r--r--src/code_80118A4.c4
-rw-r--r--src/code_8012A18.c (renamed from src/save1.c)15
-rw-r--r--src/code_8040094.c4
-rw-r--r--src/code_808EAB0.c47
-rw-r--r--src/code_8094F88.c28
-rw-r--r--src/code_8098BDC.c4
-rw-r--r--src/music_pre.c52
-rw-r--r--src/save.c788
-rw-r--r--src/save_mid.c310
-rw-r--r--src/wonder_mail.c8
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)
{
diff --git a/src/save.c b/src/save.c
index b6385a5..977278a 100644
--- a/src/save.c
+++ b/src/save.c
@@ -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();