summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/adventure_log.c425
-rw-r--r--src/adventure_log_menu.c40
-rw-r--r--src/data/formatted_type_names.h18
-rw-r--r--src/debug_menu_mid.c439
-rw-r--r--src/load_screen.c (renamed from src/main_menu_1.c)0
-rw-r--r--src/main_menu.c4
-rw-r--r--src/main_menu_mid.c4
-rw-r--r--src/other_menus.c413
-rw-r--r--src/personality_test.c112
-rw-r--r--src/text_util.c44
-rw-r--r--src/unk_menu_203B360.c104
-rw-r--r--src/unk_menu_203B360_1.c36
-rw-r--r--src/unk_menu_203B364.c85
13 files changed, 1617 insertions, 107 deletions
diff --git a/src/adventure_log.c b/src/adventure_log.c
new file mode 100644
index 0000000..2a02840
--- /dev/null
+++ b/src/adventure_log.c
@@ -0,0 +1,425 @@
+#include "global.h"
+#include "input.h"
+#include "gba/io_reg.h"
+
+struct unkData
+{
+ u8 unk0[14];
+ u16 unkD;
+ u16 unk10;
+ u16 unk12;
+ u8 *unk14;
+};
+
+struct AdventureLog
+{
+ // size: 0xA0
+ u8 fill0[0x1A];
+ /* 0x1A */ s16 unk1A;
+ /* 0x1C */ s16 unk1C;
+ /* 0x1E */ s16 currPage;
+ u16 unk20;
+ u8 fill22[0x34 - 0x22];
+ u32 unk34;
+ struct unkData *unk38;
+ struct unkData unk3C[3];
+ u8 fill84[0x9C - 0x84];
+ u8 unk9C;
+ /* 0x9D */ u8 currPage_u8;
+ u8 unk9E;
+ u8 unk9F;
+};
+
+extern struct AdventureLog *gAdventureLog;
+extern struct unkData gUnknown_80E2008;
+extern struct unkData gUnknown_80E1FF0;
+
+// Adventure Log Text
+const u8 gAdventureLogHeaderText[] = "Adventure Log";
+const u8 gUnknown_80E2030[] = "~95~95~95~95~95~95~95~95~95~95~95~95~95~95~95 "; // string of ???????
+const u8 fill_adven[] = "pksdir0";
+
+extern void *MemoryAlloc(u32, u32);
+extern void MemoryFree(void *);
+extern void sub_8006518(struct unkData *);
+extern void sub_800641C(void *, u32, u32);
+extern void sub_8032084();
+extern void DisplayAdventureLog();
+extern void sub_8013818(void *, u32, u32, u32);
+extern u8 sub_8013938(void *);
+extern void sub_8013660(void *);
+extern void PlayMenuSoundEffect(u32);
+extern u32 GetKeyPress(void *);
+extern u8 sub_8097710(u8);
+
+extern s16 sub_80978B8();
+extern s16 sub_8097880();
+extern s16 sub_8097838();
+extern s16 sub_8097870();
+extern s32 sub_80977B8();
+extern s32 sub_80977F8();
+extern void xxx_call_draw_string(s32, u32, u32 *, u32, u32);
+extern u32 gUnknown_202DE30;
+
+u32 CreateAdventureLogScreen(u32 param_1)
+{
+ gAdventureLog = MemoryAlloc(0xa0,8);
+ gAdventureLog->unk34 = param_1;
+ gAdventureLog->unk38 = &gAdventureLog->unk3C[param_1];
+ sub_8006518(gAdventureLog->unk3C);
+ gAdventureLog->unk3C[gAdventureLog->unk34] = gUnknown_80E2008;
+ gAdventureLog->unk38->unk14 = &gAdventureLog->unk9C;
+
+ ResetUnusedInputStruct();
+ sub_800641C(gAdventureLog->unk3C,1,1);
+ sub_8013818(gAdventureLog,0x20,8,param_1);
+ sub_8032084();
+ DisplayAdventureLog();
+ return 1;
+}
+
+u32 HandleAdventureLogInput(u8 param_1)
+{
+ if (param_1 == 0) {
+ sub_8013660(gAdventureLog);
+ return 0;
+ }
+ else {
+ switch(GetKeyPress(gAdventureLog))
+ {
+ case B_BUTTON:
+ PlayMenuSoundEffect(1);
+ return 2;
+ case A_BUTTON:
+ PlayMenuSoundEffect(0);
+ return 3;
+ default:
+ if (sub_8013938(gAdventureLog) != '\0') {
+ sub_8032084();
+ DisplayAdventureLog();
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ }
+}
+
+void CleanAdventureLogScreen(void)
+{
+ if (gAdventureLog != NULL) {
+ gAdventureLog->unk3C[gAdventureLog->unk34] = gUnknown_80E1FF0;
+ ResetUnusedInputStruct();
+ sub_800641C(gAdventureLog->unk3C,1,1);
+ MemoryFree(gAdventureLog);
+ gAdventureLog = 0;
+ }
+}
+
+
+#ifdef NONMATCHING
+void sub_8032084(void)
+{
+ u32 sVar2;
+
+ gAdventureLog->unk9C = gAdventureLog->unk20;
+ gAdventureLog->currPage_u8 = gAdventureLog->currPage;
+ gAdventureLog->unk9E = 0xb;
+ gAdventureLog->unk9F = 0;
+ // So a sign extend..
+ sVar2 = sub_80095E4(gAdventureLog->unk1A,0xc) + 2 << 0x10;
+ // TODO needs asr r3, r0, r16
+ // and lsr r0, r0, r16
+ gAdventureLog->unk3C[gAdventureLog->unk34].unkD = sVar2;
+ // Good past here except regs for this store
+ gAdventureLog->unk3C[gAdventureLog->unk34].unk10 = sVar2 + 2;
+ ResetUnusedInputStruct();
+ sub_800641C(gAdventureLog->unk3C,1,1);
+}
+#else
+NAKED
+void sub_8032084(void)
+{
+ asm_unified("\tpush {r4,lr}\n"
+ "\tldr r4, _080320F4\n"
+ "\tldr r0, [r4]\n"
+ "\tldrh r1, [r0, 0x20]\n"
+ "\tadds r0, 0x9C\n"
+ "\tmovs r2, 0\n"
+ "\tstrb r1, [r0]\n"
+ "\tldr r0, [r4]\n"
+ "\tldrh r1, [r0, 0x1E]\n"
+ "\tadds r0, 0x9D\n"
+ "\tstrb r1, [r0]\n"
+ "\tldr r0, [r4]\n"
+ "\tadds r0, 0x9E\n"
+ "\tmovs r1, 0xB\n"
+ "\tstrb r1, [r0]\n"
+ "\tldr r0, [r4]\n"
+ "\tadds r0, 0x9F\n"
+ "\tstrb r2, [r0]\n"
+ "\tldr r0, [r4]\n"
+ "\tmovs r1, 0x1A\n"
+ "\tldrsh r0, [r0, r1]\n"
+ "\tmovs r1, 0xC\n"
+ "\tbl sub_80095E4\n"
+ "\tadds r0, 0x2\n"
+ "\tlsls r0, 16\n"
+ "\tldr r2, [r4]\n"
+ "\tldr r3, [r2, 0x34]\n"
+ "\tlsls r1, r3, 1\n"
+ "\tadds r1, r3\n"
+ "\tlsls r1, 3\n"
+ "\tadds r1, r2, r1\n"
+ "\tadds r1, 0x4A\n"
+ "\tasrs r3, r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tstrh r0, [r1]\n"
+ "\tldr r1, [r2, 0x34]\n"
+ "\tlsls r0, r1, 1\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 3\n"
+ "\tadds r2, r0\n"
+ "\tadds r3, 0x2\n"
+ "\tadds r2, 0x4C\n"
+ "\tstrh r3, [r2]\n"
+ "\tbl ResetUnusedInputStruct\n"
+ "\tldr r0, [r4]\n"
+ "\tadds r0, 0x3C\n"
+ "\tmovs r1, 0x1\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_800641C\n"
+ "\tpop {r4}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"_080320F4: .4byte gAdventureLog");
+}
+#endif
+
+// Uses 1 too many regs
+#ifdef NONMATCHING
+void DisplayAdventureLog(void)
+{
+ s32 counter;
+ s32 iVar5;
+ u32 uVar6;
+ u8 temp;
+
+ sub_8008C54(gAdventureLog->unk34);
+ sub_80073B8(gAdventureLog->unk34);
+ iVar5 = gAdventureLog->currPage * 8;
+ iVar5 += 10;
+ // Draw Header
+ xxx_call_draw_string(iVar5, 0, &gAdventureLogHeaderText, gAdventureLog->unk34, 0);
+ iVar5 += 4;
+ iVar5 += gAdventureLog->unk9E * 8;
+ // Draw Page #
+ sub_8012BC4(iVar5, 0, gAdventureLog->currPage + 1, 1, 7, gAdventureLog->unk34);
+ counter = 0;
+ do {
+ uVar6 = gAdventureLog->currPage * gAdventureLog->unk1C + counter;
+ temp = uVar6; // Having another var in middle gets close (does a u8 cast)
+ if(sub_8097710(temp) != 0){
+ switch(temp) {
+ case 0xc:
+ gUnknown_202DE30 = sub_80978B8();
+ break;
+ case 7:
+ gUnknown_202DE30 = sub_8097880();
+ break;
+ case 0xb:
+ gUnknown_202DE30 = sub_8097838();
+ break;
+ case 8:
+ gUnknown_202DE30 = sub_80977B8();
+ break;
+ case 9:
+ gUnknown_202DE30 = sub_80977F8();
+ break;
+ case 10:
+ gUnknown_202DE30 = sub_8097870();
+ break;
+ default:
+ break;
+ }
+ sub_8014FF0(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(uVar6), gAdventureLog->unk34, 0);
+ }
+ else
+ {
+ // Draw the ?????????? across the row
+ xxx_call_draw_string(8, sub_8013800(gAdventureLog, counter), &gUnknown_80E2030, gAdventureLog->unk34, 0);
+ }
+ counter++;
+ } while(counter < gAdventureLog->unk1A);
+ sub_80073E0(gAdventureLog->unk34);
+}
+#else
+NAKED
+void DisplayAdventureLog(void)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tsub sp, 0x8\n"
+ "\tldr r5, _08032158\n"
+ "\tldr r0, [r5]\n"
+ "\tldr r0, [r0, 0x34]\n"
+ "\tbl sub_8008C54\n"
+ "\tldr r0, [r5]\n"
+ "\tldr r0, [r0, 0x34]\n"
+ "\tbl sub_80073B8\n"
+ "\tldr r0, [r5]\n"
+ "\tmovs r1, 0x1E\n"
+ "\tldrsh r4, [r0, r1]\n"
+ "\tlsls r4, 3\n"
+ "\tadds r6, r4, 0\n"
+ "\tadds r6, 0xA\n"
+ "\tldr r2, _0803215C\n"
+ "\tldr r3, [r0, 0x34]\n"
+ "\tmovs r0, 0\n"
+ "\tstr r0, [sp]\n"
+ "\tadds r0, r6, 0\n"
+ "\tmovs r1, 0\n"
+ "\tbl xxx_call_draw_string\n"
+ "\tadds r4, 0x4\n"
+ "\tldr r1, [r5]\n"
+ "\tadds r0, r1, 0\n"
+ "\tadds r0, 0x9E\n"
+ "\tldrb r0, [r0]\n"
+ "\tlsls r0, 3\n"
+ "\tadds r6, r4, r0\n"
+ "\tmovs r0, 0x1E\n"
+ "\tldrsh r2, [r1, r0]\n"
+ "\tadds r2, 0x1\n"
+ "\tmovs r0, 0x7\n"
+ "\tstr r0, [sp]\n"
+ "\tldr r0, [r1, 0x34]\n"
+ "\tstr r0, [sp, 0x4]\n"
+ "\tadds r0, r6, 0\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r3, 0x1\n"
+ "\tbl sub_8012BC4\n"
+ "\tmovs r7, 0\n"
+ "\tldr r0, [r5]\n"
+ "\tb _0803223A\n"
+ "\t.align 2, 0\n"
+"_08032158: .4byte gAdventureLog\n"
+"_0803215C: .4byte gAdventureLogHeaderText\n"
+"_08032160:\n"
+ "\tldr r5, _08032194\n"
+ "\tldr r0, [r5]\n"
+ "\tmovs r2, 0x1E\n"
+ "\tldrsh r1, [r0, r2]\n"
+ "\tmovs r2, 0x1C\n"
+ "\tldrsh r0, [r0, r2]\n"
+ "\tmuls r0, r1\n"
+ "\tadds r0, r7\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl sub_8097710\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tcmp r4, 0\n"
+ "\tbeq _0803221C\n"
+ "\tsubs r0, r6, 0x7\n"
+ "\tcmp r0, 0x5\n"
+ "\tbhi _080321EC\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, _08032198\n"
+ "\tadds r0, r1\n"
+ "\tldr r0, [r0]\n"
+ "\tmov pc, r0\n"
+ "\t.align 2, 0\n"
+"_08032194: .4byte gAdventureLog\n"
+"_08032198: .4byte _0803219C\n"
+ "\t.align 2, 0\n"
+"_0803219C:\n"
+ "\t.4byte _080321BA\n"
+ "\t.4byte _080321C6\n"
+ "\t.4byte _080321D4\n"
+ "\t.4byte _080321E0\n"
+ "\t.4byte _080321C0\n"
+ "\t.4byte _080321B4\n"
+"_080321B4:\n"
+ "\tbl sub_80978B8\n"
+ "\tb _080321E4\n"
+"_080321BA:\n"
+ "\tbl sub_8097880\n"
+ "\tb _080321E4\n"
+"_080321C0:\n"
+ "\tbl sub_8097838\n"
+ "\tb _080321E4\n"
+"_080321C6:\n"
+ "\tbl sub_80977B8\n"
+ "\tldr r1, _080321D0\n"
+ "\tb _080321EA\n"
+ "\t.align 2, 0\n"
+"_080321D0: .4byte gUnknown_202DE30\n"
+"_080321D4:\n"
+ "\tbl sub_80977F8\n"
+ "\tldr r1, _080321DC\n"
+ "\tb _080321EA\n"
+ "\t.align 2, 0\n"
+"_080321DC: .4byte gUnknown_202DE30\n"
+"_080321E0:\n"
+ "\tbl sub_8097870\n"
+"_080321E4:\n"
+ "\tldr r1, _08032214\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+"_080321EA:\n"
+ "\tstr r0, [r1]\n"
+"_080321EC:\n"
+ "\tldr r4, _08032218\n"
+ "\tldr r0, [r4]\n"
+ "\tadds r1, r7, 0\n"
+ "\tbl sub_8013800\n"
+ "\tadds r5, r0, 0\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl GetAdventureLogLine\n"
+ "\tadds r2, r0, 0\n"
+ "\tldr r0, [r4]\n"
+ "\tldr r3, [r0, 0x34]\n"
+ "\tmovs r0, 0\n"
+ "\tstr r0, [sp]\n"
+ "\tmovs r0, 0x8\n"
+ "\tadds r1, r5, 0\n"
+ "\tbl sub_8014FF0\n"
+ "\tb _08032234\n"
+ "\t.align 2, 0\n"
+"_08032214: .4byte gUnknown_202DE30\n"
+"_08032218: .4byte gAdventureLog\n"
+"_0803221C:\n"
+ "\tldr r0, [r5]\n"
+ "\tadds r1, r7, 0\n"
+ "\tbl sub_8013800\n"
+ "\tadds r1, r0, 0\n"
+ "\tldr r2, _08032254\n"
+ "\tldr r0, [r5]\n"
+ "\tldr r3, [r0, 0x34]\n"
+ "\tstr r4, [sp]\n"
+ "\tmovs r0, 0x8\n"
+ "\tbl xxx_call_draw_string\n"
+"_08032234:\n"
+ "\tadds r7, 0x1\n"
+ "\tldr r0, _08032258\n"
+ "\tldr r0, [r0]\n"
+"_0803223A:\n"
+ "\tmovs r1, 0x1A\n"
+ "\tldrsh r0, [r0, r1]\n"
+ "\tcmp r7, r0\n"
+ "\tblt _08032160\n"
+ "\tldr r0, _08032258\n"
+ "\tldr r0, [r0]\n"
+ "\tldr r0, [r0, 0x34]\n"
+ "\tbl sub_80073E0\n"
+ "\tadd sp, 0x8\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"_08032254: .4byte gUnknown_80E2030\n"
+"_08032258: .4byte gAdventureLog");
+}
+#endif
diff --git a/src/adventure_log_menu.c b/src/adventure_log_menu.c
new file mode 100644
index 0000000..b935716
--- /dev/null
+++ b/src/adventure_log_menu.c
@@ -0,0 +1,40 @@
+#include "global.h"
+#include "input.h"
+#include "main_menu.h"
+#include "adventure_log.h"
+
+extern void sub_800641C(u8 *, u32, u32);
+extern void CreateAdventureLogScreen(u32);
+extern u32 HandleAdventureLogInput(u32);
+extern void CleanAdventureLogScreen();
+
+void CreateAdventureLogMenu(void)
+{
+ CreateAdventureLogScreen(0);
+}
+
+void CleanAdventureLogMenu(void)
+{
+ ResetUnusedInputStruct();
+ sub_800641C(0, 1, 1);
+}
+
+u32 UpdateAdventureLogMenu(void)
+{
+ u32 nextMenu;
+ nextMenu = MENU_NO_SCREEN_CHANGE;
+
+ switch(HandleAdventureLogInput(1))
+ {
+ case 0:
+ case 1:
+ break;
+ case 2:
+ case 3:
+ CleanAdventureLogScreen();
+ nextMenu = MENU_MAIN_SCREEN;
+ default:
+ break;
+ }
+ return nextMenu;
+}
diff --git a/src/data/formatted_type_names.h b/src/data/formatted_type_names.h
new file mode 100644
index 0000000..e973056
--- /dev/null
+++ b/src/data/formatted_type_names.h
@@ -0,0 +1,18 @@
+ALIGNED(4) const char gFormattedSteelText[] = "#c6Steel#r";
+ALIGNED(4) const char gFormattedDarkText[] = "#c6Dark#r";
+ALIGNED(4) const char gFormattedDragonText[] = "#c6Dragon#r";
+ALIGNED(4) const char gFormattedGhostText[] = "#c6Ghost#r";
+ALIGNED(4) const char gFormattedRockText[] = "#c6Rock#r";
+ALIGNED(4) const char gFormattedBugText[] = "#c6Bug#r";
+ALIGNED(4) const char gFormattedPsychicText[] = "#c6Psychic#r";
+ALIGNED(4) const char gFormattedFlyingText[] = "#c6Flying#r";
+ALIGNED(4) const char gFormattedGroundText[] = "#c6Ground#r";
+ALIGNED(4) const char gFormattedPoisonText[] = "#c6Poison#r";
+ALIGNED(4) const char gFormattedFightingText[] = "#c6Fighting#r";
+ALIGNED(4) const char gFormattedIceText[] = "#c6Ice#r ";
+ALIGNED(4) const char gFormattedElectricText[] = "#c6Electric#r";
+ALIGNED(4) const char gFormattedGrassText[] = "#c6Grass#r";
+ALIGNED(4) const char gFormattedWaterText[] = "#c6Water#r";
+ALIGNED(4) const char gFormattedFireText[] = "#c6Fire#r ";
+ALIGNED(4) const char gFormattedNormalText[] = "#c6Normal#r";
+ALIGNED(4) const char gFormattedNoneText[] = "#c6None#r";
diff --git a/src/debug_menu_mid.c b/src/debug_menu_mid.c
new file mode 100644
index 0000000..7bd3d74
--- /dev/null
+++ b/src/debug_menu_mid.c
@@ -0,0 +1,439 @@
+#include "global.h"
+#include "input.h"
+
+struct unkData
+{
+ u8 unk0[14];
+ u16 unkD;
+ u16 unk10;
+ u16 unk12;
+ u8 *unk14;
+};
+
+struct unkStruct_203B3F0
+{
+ // size: 0x138
+ u32 unk0;
+ u8 unk4;
+ u8 fill5[0x8 - 5];
+ u32 unk8;
+ u32 *unkC;
+ u32 unk10;
+ u32 unk14;
+ u32 unk18;
+ u32 unk1C;
+ u32 unk20;
+ u8 fill24[0x4C - 0x24];
+ u32 unk4C;
+ u8 fill50[0x9C - 0x50];
+ u32 unk9C;
+ u32 unkA0;
+ u32 unkA4;
+ u32 unkA8;
+ u32 unkAC;
+ u32 unkB0;
+ struct unkData *unkB4;
+ u32 unkB8;
+ u32 unkBC;
+ u8 fill4[0xD8 - 0xC0];
+ struct unkData unkD8[4];
+};
+
+extern struct unkStruct_203B3F0 *gUnknown_203B3F0;
+
+struct unkStruct_203B3F4
+{
+ // size: 0xFC
+ u32 unk0;
+ u8 unk4;
+ u8 fill5[0x8 - 5];
+ u32 unk8;
+ u32 *unkC;
+ u32 unk10;
+ u32 unk14;
+ u32 unk18;
+ u32 unk1C;
+ u32 unk20;
+ u8 fill24[0x4C - 0x24];
+ u32 unk4C;
+ u8 fill50[0x9C - 0x50];
+ struct unkData unk9C[4];
+};
+
+extern struct unkStruct_203B3F4 *gUnknown_203B3F4;
+
+
+struct unkStruct_203B460
+{
+ u8 unk0[0x50];
+ u16 unk50[10];
+};
+extern struct unkStruct_203B460 *gUnknown_203B460; // TODO unify this
+extern void sub_801B3C0(u8 *);
+extern void sub_8090A8C(u8 *, u8, u32);
+extern void sub_8013AA0(u32 *);
+
+extern struct unkData gUnknown_80E7E4C;
+extern struct unkData gUnknown_80E7E34;
+extern struct unkData gUnknown_80E7E64;
+extern struct unkData gUnknown_80E7EA4;
+extern struct unkData gUnknown_80E7E8C;
+
+extern u32 gDebug_NumberText;
+extern u32 gDebug_NumberText;
+extern u32 gUnknown_80D4970;
+
+
+extern void *MemoryAlloc(u32, u32);
+extern void MemoryFree(void *);
+extern void sub_800641C(void *, u32, u32);
+extern void sub_8006518(void *);
+extern void sub_801C8C4(u32, u32, u32, u32);
+extern void sub_801CB5C(u32);
+extern void sub_801CCD8();
+extern void sub_8012D60(u32 *, u32 **, u32, u32, u32, u32);
+extern void sub_8008C54(u32);
+extern void sub_80073B8(u32);
+extern void sub_8012EA4(u32 *, u32);
+extern void sub_80073E0(u32);
+extern void sub_8013C68(u32 *);
+extern void xxx_call_draw_string(s32, u32, u32 *, u32, u32);
+extern u8 sub_8091524(u8);
+extern u32 sub_801CA08(u32);
+extern u8 sub_801CB24();
+extern void sub_801CBB8();
+extern u8 sub_8012FD8(u32 *);
+extern void sub_8013114(u32 *, s32 *);
+extern u32 sub_8013BBC(u32 *);
+extern u32 sub_801B410();
+extern void sub_801B450();
+extern void sub_80211AC(u32, u32);
+extern void sub_8021354(u32);
+extern void sub_8021494();
+extern void sub_803AA34();
+extern void sub_8021774(u8,u32, u32);
+
+
+extern void sub_803AAC4();
+extern void sub_803AB34();
+extern void sub_803ABAC();
+
+void sub_803A924(u32);
+void sub_803A93C();
+void sub_803A9AC();
+
+void sub_803A504(u32);
+void sub_803A51C();
+void sub_803A5A0();
+void sub_803A690();
+void sub_803A6F0();
+void sub_803A740();
+void sub_803A7B0();
+void sub_803A810();
+void sub_803A86C();
+
+
+u32 sub_803A45C(void)
+{
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ gUnknown_203B3F0 = MemoryAlloc(sizeof(struct unkStruct_203B3F0), 8);
+ sub_803A504(0);
+ return 1;
+}
+
+u32 sub_803A48C(void)
+{
+ switch(gUnknown_203B3F0->unk0) {
+ case 0:
+ case 1:
+ sub_803A740();
+ break;
+ case 2:
+ sub_803A7B0();
+ break;
+ case 3:
+ sub_803A810();
+ break;
+ case 4:
+ sub_803A86C();
+ break;
+ case 5:
+ return 3;
+ }
+ return 0;
+}
+
+void sub_803A4E8(void)
+{
+ if(gUnknown_203B3F0 != NULL)
+ {
+ MemoryFree(gUnknown_203B3F0);
+ gUnknown_203B3F0 = NULL;
+ }
+}
+
+void sub_803A504(u32 newState)
+{
+ gUnknown_203B3F0->unk0 = newState;
+ sub_803A51C();
+ sub_803A5A0();
+}
+
+void sub_803A51C(void)
+{
+ s32 iVar4;
+
+ sub_8006518(gUnknown_203B3F0->unkD8);
+ switch(gUnknown_203B3F0->unk0)
+ {
+ case 3:
+ gUnknown_203B3F0->unkD8[1] = gUnknown_80E7E64;
+ break;
+ case 2:
+ gUnknown_203B3F0->unkD8[2] = gUnknown_80E7E4C;
+ break;
+ default:
+ for(iVar4 = 0; iVar4 < 4; iVar4++)
+ {
+ gUnknown_203B3F0->unkD8[iVar4] = gUnknown_80E7E34;
+ }
+ break;
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B3F0->unkD8, 1, 1);
+}
+
+void sub_803A5A0(void)
+{
+ u8 auStack8 [4];
+
+ switch(gUnknown_203B3F0->unk0) {
+ case 0:
+ sub_801C8C4(2,3,0,10);
+ break;
+ case 1:
+ sub_801CB5C(1);
+ break;
+ case 2:
+ sub_801CCD8();
+ sub_803A6F0();
+ sub_8012D60(&gUnknown_203B3F0->unk4C, &gUnknown_203B3F0->unkC, 0, 0, gUnknown_203B3F0->unk8, 2);
+ break;
+ case 3:
+ gUnknown_203B3F0->unkAC = 3;
+ gUnknown_203B3F0->unkA4 = 0;
+ gUnknown_203B3F0->unkA8 = 0x3e7;
+ gUnknown_203B3F0->unkA0 = gUnknown_203B460->unk50[gUnknown_203B3F0->unk4];
+ gUnknown_203B3F0->unkB0 = 1;
+ gUnknown_203B3F0->unkB4 = &gUnknown_203B3F0->unkD8[1];
+ gUnknown_203B3F0->unkB8 = 0x2C;
+ gUnknown_203B3F0->unkBC = 0x12;
+ sub_8013AA0(&gUnknown_203B3F0->unk9C);
+ sub_803A690();
+ break;
+ case 4:
+ sub_8090A8C(auStack8,gUnknown_203B3F0->unk4,0);
+ sub_801B3C0(auStack8);
+ break;
+ case 5:
+ break;
+ }
+}
+
+void sub_803A690(void)
+{
+ sub_8008C54(gUnknown_203B3F0->unkB0);
+ sub_80073B8(gUnknown_203B3F0->unkB0);
+ xxx_call_draw_string(4, 0, &gDebug_NumberText, gUnknown_203B3F0->unkB0, 0);
+ sub_8013C68(&gUnknown_203B3F0->unk9C);
+ sub_80073E0(gUnknown_203B3F0->unkB0);
+ sub_801CCD8();
+ sub_8012EA4(&gUnknown_203B3F0->unk4C,0);
+}
+
+void sub_803A6F0(void)
+{
+ s32 temp1;
+ struct unkStruct_203B3F0 *preload;
+
+ gUnknown_203B3F0->unkC = &gDebug_NumberText;
+ gUnknown_203B3F0->unk10 = 2;
+ gUnknown_203B3F0->unk8 = 2;
+ if (sub_8091524(gUnknown_203B3F0->unk4) == 0) {
+ gUnknown_203B3F0->unk10 = -1;
+ gUnknown_203B3F0->unk8 = 3;
+ }
+ preload = gUnknown_203B3F0;
+ // this var gets loaded in between the sets... very dumb
+ temp1 = 1;
+ preload->unk14 = gUnknown_80D4970;
+ preload->unk18 = 3;
+ preload->unk1C = 0;
+ preload->unk20 = temp1;
+}
+
+void sub_803A740(void)
+{
+ switch(sub_801CA08(1)) {
+ case 0:
+ case 1:
+ break;
+ case 3:
+ gUnknown_203B3F0->unk4 = sub_801CB24();
+ sub_803A504(2);
+ break;
+ case 4:
+ gUnknown_203B3F0->unk4 = sub_801CB24();
+ sub_803A504(4);
+ break;
+ case 2:
+ sub_801CBB8();
+ sub_803A504(5);
+ break;
+ }
+}
+
+void sub_803A7B0(void)
+{
+ s32 local_c;
+
+ local_c = 0;
+ sub_801CA08(0);
+ if (sub_8012FD8(&gUnknown_203B3F0->unk4C) == '\0') {
+ sub_8013114(&gUnknown_203B3F0->unk4C,&local_c);
+ }
+ switch(local_c)
+ {
+ case 2:
+ sub_803A504(3);
+ break;
+ case 3:
+ sub_803A504(4);
+ break;
+ case 1:
+ sub_803A504(1);
+ break;
+
+ }
+}
+
+void sub_803A810(void)
+{
+ sub_801CA08(0);
+ sub_8012FD8(&gUnknown_203B3F0->unk4C);
+ switch(sub_8013BBC(&gUnknown_203B3F0->unk9C))
+ {
+ case 3:
+ gUnknown_203B460->unk50[gUnknown_203B3F0->unk4] = gUnknown_203B3F0->unk9C;
+ // Fallthrough needed to match
+ case 2:
+ sub_803A504(1);
+ break;
+ case 1:
+ sub_803A690();
+ break;
+ }
+}
+
+void sub_803A86C(void)
+{
+ switch(sub_801B410())
+ {
+ case 1:
+ case 0:
+ break;
+ case 2:
+ case 3:
+ sub_801B450();
+ sub_803A504(1);
+ break;
+ }
+}
+
+//////////////////////////////////////////
+
+u32 sub_803A888(void)
+{
+ ResetUnusedInputStruct();
+ sub_800641C(0, 1, 1);
+ gUnknown_203B3F4 = MemoryAlloc(0xFC, 8);
+ sub_803A924(0);
+ return 1;
+}
+
+u32 sub_803A8B8(void)
+{
+ switch(gUnknown_203B3F4->unk0) {
+ case 0:
+ case 1:
+ sub_803AAC4();
+ break;
+ case 2:
+ sub_803AB34();
+ break;
+ case 3:
+ sub_803ABAC();
+ break;
+ case 4:
+ return 3;
+ }
+ return 0;
+}
+
+void sub_803A908(void)
+{
+ if(gUnknown_203B3F4 != NULL)
+ {
+ MemoryFree(gUnknown_203B3F4);
+ gUnknown_203B3F4 = NULL;
+ }
+}
+
+void sub_803A924(u32 newState)
+{
+ gUnknown_203B3F4->unk0 = newState;
+ sub_803A93C();
+ sub_803A9AC();
+}
+
+void sub_803A93C(void)
+{
+ s32 iVar4;
+ sub_8006518(gUnknown_203B3F4->unk9C);
+ if(gUnknown_203B3F4->unk0 == 2)
+ {
+ gUnknown_203B3F4->unk9C[2] = gUnknown_80E7EA4;
+ }
+ else
+ {
+ for(iVar4 = 0; iVar4 < 4; iVar4++)
+ {
+ gUnknown_203B3F4->unk9C[iVar4] = gUnknown_80E7E8C;
+ }
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B3F4->unk9C, 1, 1);
+}
+
+void sub_803A9AC(void)
+{
+ switch(gUnknown_203B3F4->unk0) {
+ case 0:
+ sub_80211AC(0,3);
+ break;
+ case 1:
+ sub_8021354(1);
+ break;
+ case 2:
+ sub_8021494();
+ sub_803AA34();
+ sub_8012D60(&gUnknown_203B3F4->unk4C,&gUnknown_203B3F4->unkC,0,0,gUnknown_203B3F4->unk8,2);
+ break;
+ case 3:
+ sub_8021774(gUnknown_203B3F4->unk4,1,0);
+ break;
+ case 4:
+ break;
+ }
+}
diff --git a/src/main_menu_1.c b/src/load_screen.c
index d79a420..d79a420 100644
--- a/src/main_menu_1.c
+++ b/src/load_screen.c
diff --git a/src/main_menu.c b/src/main_menu.c
index 3c0840a..3b405ae 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "debug_menu.h"
#include "main_menu.h"
+#include "adventure_log.h"
// NOTE: 0x13 and 0x14
// Communication Screen?
@@ -31,7 +32,6 @@ extern void sub_803A1E4(void);
extern void CreateFriendRescueMenu(void);
extern void sub_803A1D8(void);
extern void CreateWonderMailMenu(void);
-extern void CreateAdventureLogMenu(void);
extern void CreateLoadScreen(u32);
extern s32 sub_8035DB4(u32);
extern void CreateRescuePasswordMenu(u32);
@@ -44,7 +44,6 @@ extern s32 UpdateWonderMailMenu(void);
extern s32 sub_803A1DC(void);
extern s32 sub_803A1E8(void);
extern s32 UpdateRescuePasswordMenu(void);
-extern s32 UpdateAdventureLogMenu(void);
extern s32 sub_80383D4(void);
extern s32 sub_8038630(void);
@@ -57,7 +56,6 @@ extern void CleanWonderMailMenu(void);
extern void nullsub_55(void);
extern void sub_803A1EC(void);
extern void CleanRescuePasswordMenu(void);
-extern void CleanAdventureLogMenu(void);
extern void sub_80383A8(void);
extern void sub_8038604(void);
diff --git a/src/main_menu_mid.c b/src/main_menu_mid.c
index d606e4d..4d36edf 100644
--- a/src/main_menu_mid.c
+++ b/src/main_menu_mid.c
@@ -59,9 +59,9 @@ s16 sub_8035D3C(void)
return gMainMenu->unk38;
}
-s32 *sub_8035D4C(void)
+struct MainMenu *GetMainMenu(void)
{
- return &gMainMenu->currMenu;
+ return gMainMenu;
}
void sub_8035D58(void)
diff --git a/src/other_menus.c b/src/other_menus.c
new file mode 100644
index 0000000..8b5eca3
--- /dev/null
+++ b/src/other_menus.c
@@ -0,0 +1,413 @@
+#include "global.h"
+#include "input.h"
+#include "main_menu.h"
+
+struct unkData
+{
+ u8 unk0[14];
+ u16 unkD;
+ u16 unk10;
+ u16 unk12;
+ u8 *unk14;
+};
+
+
+struct unkStruct_203B35C
+{
+ // size: 0x504
+ u32 unk0;
+ u32 unk4; // link status?
+ u32 unk8; // state var?
+ u8 fillC[0x1C - 0xC];
+ u32 unk1C;
+ u8 fill20[0x15C - 0x20];
+ struct unkData unk15C[4];
+ u8 unk1BC[4];
+ u32 unk1C0[9];
+};
+extern struct unkStruct_203B35C *gUnknown_203B35C;
+
+extern struct unkData gUnknown_80E653C;
+
+extern u32 gUnknown_80E66BC;
+extern u32 gUnknown_80E66D4;
+extern u32 gUnknown_80E6748;
+extern u32 gUnknown_80E6760;
+extern u32 gUnknown_80E67D4;
+extern u32 gUnknown_80E67EC;
+extern u32 gUnknown_80E689C;
+extern u32 gUnknown_80E68B4;
+extern u32 gUnknown_80E6938;
+extern u32 gUnknown_80E6950;
+extern u32 gUnknown_80E69B0;
+extern u32 gUnknown_80E69C8;
+extern u32 gUnknown_80E6A10;
+extern u32 gUnknown_80E6A28;
+extern u32 gUnknown_80E6A74;
+extern u32 gUnknown_80E6A8C;
+extern u32 gUnknown_80E6B78;
+extern u32 gUnknown_80E6B90;
+extern u32 gUnknown_80E6BF4;
+extern u32 gUnknown_80E6C0C;
+extern u32 gUnknown_80E6C50;
+extern u32 gUnknown_80E6C68;
+extern u32 gUnknown_80E6CD0;
+extern u32 gUnknown_80E6CE8;
+extern u32 gUnknown_80E6DDC;
+extern u32 gUnknown_80E6DF4;
+extern u32 gUnknown_80E6D54;
+extern u32 gUnknown_80E6D6C;
+
+struct unkStruct_8035D94
+{
+ u8 unk0;
+ u8 fill[0x3];
+ u32 unk4;
+};
+
+extern struct unkStruct_8035D94 *sub_8035D94();
+
+struct unkStruct_203B460
+{
+ u8 unk0[0x50];
+ u16 unk50[10];
+};
+extern struct unkStruct_203B460 *gUnknown_203B460; // TODO unify this
+
+extern void sub_8037400(void);
+extern void sub_800641C(void *, u32, u32);
+extern void ResetSprites(u32);
+extern void *MemoryAlloc(u32, u32);
+extern void MemoryFill8(u8 *, u8, s32);
+extern void MemoryFree(void *);
+extern void sub_8035CF4(u32 *,u32, u32);
+extern void sub_80376CC();
+extern void sub_8035CC0(void *, u32);
+
+extern u8 sub_80130A8(u32 *);
+extern void sub_8013114(u32 *, u32 *);
+extern u32 sub_8037C10(u32);
+extern void sub_8037748(void);
+extern void sub_80371B8(void);
+extern void sub_8037900(void);
+extern void PlayMenuSoundEffect(u32);
+extern u32 sub_8037798(void);
+extern void SetMenuItems(void *, void *, u32, u32 *, u32 *, u32, u32, u32);
+extern void sub_8005838(u32, u32);
+extern void sub_80060EC();
+extern void sub_800CB20();
+extern void TransferBGPaletteBuffer();
+extern void xxx_call_update_bg_vram();
+extern void sub_8009908();
+extern void xxx_call_update_bg_sound_input();
+
+
+#ifdef NONMATCHING
+void sub_8036FDC(s32 param_1)
+{
+ int iVar3;
+ int iVar4;
+
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ ResetSprites(0);
+ if (gUnknown_203B35C == NULL) {
+ gUnknown_203B35C = MemoryAlloc(0x504,8);
+ MemoryFill8((u8 *)gUnknown_203B35C,0,0x504);
+ }
+
+ gUnknown_203B35C->unk0 = param_1;
+ gUnknown_203B35C->unk4 = 0;
+ gUnknown_203B35C->unk8 = 0;
+ iVar3 = 0;
+ do {
+ gUnknown_203B35C->unk1C0[iVar3 * 2] = 0;
+ // Add statements of index flip but ends in same result
+ gUnknown_203B35C->unk1BC[iVar3 * 8] = 0;
+ iVar3 = iVar3 + 1;
+ } while (iVar3 < 2);
+ for(iVar4 = 0; iVar4 < 4; iVar4++){
+ gUnknown_203B35C->unk15C[iVar4] = gUnknown_80E653C;
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B35C->unk15C,1,1);
+ SetMenuItems(&gUnknown_203B35C->unk1C,gUnknown_203B35C->unk15C,0,&gUnknown_80E6CD0,&gUnknown_80E6CE8,0,
+ 6,0);
+ sub_8035CF4(&gUnknown_203B35C->unk1C,0,1);
+ sub_80376CC();
+}
+#else
+NAKED
+void sub_8036FDC(s32 param_1)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r8\n"
+ "\tpush {r7}\n"
+ "\tsub sp, 0x10\n"
+ "\tadds r6, r0, 0\n"
+ "\tbl ResetUnusedInputStruct\n"
+ "\tmovs r0, 0\n"
+ "\tmovs r1, 0x1\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_800641C\n"
+ "\tmovs r0, 0\n"
+ "\tbl ResetSprites\n"
+ "\tldr r5, _080370C0\n"
+ "\tldr r0, [r5]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _08037016\n"
+ "\tldr r4, _080370C4\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x8\n"
+ "\tbl MemoryAlloc\n"
+ "\tstr r0, [r5]\n"
+ "\tmovs r1, 0\n"
+ "\tadds r2, r4, 0\n"
+ "\tbl MemoryFill8\n"
+"_08037016:\n"
+ "\tldr r0, [r5]\n"
+ "\tstr r6, [r0]\n"
+ "\tmovs r1, 0\n"
+ "\tstr r1, [r0, 0x4]\n"
+ "\tstr r1, [r0, 0x8]\n"
+ "\tmovs r3, 0\n"
+ "\tadds r7, r5, 0\n"
+ "\tmovs r6, 0xE0\n"
+ "\tlsls r6, 1\n"
+ "\tmovs r4, 0\n"
+ "\tmovs r5, 0xDE\n"
+ "\tlsls r5, 1\n"
+"_0803702E:\n"
+ "\tldr r0, [r7]\n"
+ "\tlsls r2, r3, 3\n"
+ "\tadds r1, r0, r6\n"
+ "\tadds r1, r2\n"
+ "\tstr r4, [r1]\n"
+ "\tadds r0, r2\n"
+ "\tadds r0, r5\n"
+ "\tstrb r4, [r0]\n"
+ "\tadds r3, 0x1\n"
+ "\tcmp r3, 0x1\n"
+ "\tble _0803702E\n"
+ "\tldr r0, _080370C0\n"
+ "\tmov r12, r0\n"
+ "\tmovs r5, 0xAE\n"
+ "\tlsls r5, 1\n"
+ "\tmov r8, r5\n"
+ "\tldr r4, _080370C8\n"
+ "\tmovs r3, 0\n"
+ "\tmovs r2, 0x3\n"
+"_08037054:\n"
+ "\tmov r6, r12\n"
+ "\tldr r1, [r6]\n"
+ "\tadds r1, r3\n"
+ "\tadd r1, r8\n"
+ "\tadds r0, r4, 0\n"
+ "\tldm r0!, {r5-r7}\n"
+ "\tstm r1!, {r5-r7}\n"
+ "\tldm r0!, {r5-r7}\n"
+ "\tstm r1!, {r5-r7}\n"
+ "\tadds r3, 0x18\n"
+ "\tsubs r2, 0x1\n"
+ "\tcmp r2, 0\n"
+ "\tbge _08037054\n"
+ "\tmovs r6, 0\n"
+ "\tbl ResetUnusedInputStruct\n"
+ "\tldr r5, _080370C0\n"
+ "\tldr r0, [r5]\n"
+ "\tmovs r4, 0xAE\n"
+ "\tlsls r4, 1\n"
+ "\tadds r0, r4\n"
+ "\tmovs r1, 0x1\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_800641C\n"
+ "\tldr r1, [r5]\n"
+ "\tadds r0, r1, 0\n"
+ "\tadds r0, 0x1C\n"
+ "\tadds r1, r4\n"
+ "\tldr r3, _080370CC\n"
+ "\tldr r2, _080370D0\n"
+ "\tstr r2, [sp]\n"
+ "\tstr r6, [sp, 0x4]\n"
+ "\tmovs r2, 0x6\n"
+ "\tstr r2, [sp, 0x8]\n"
+ "\tstr r6, [sp, 0xC]\n"
+ "\tmovs r2, 0\n"
+ "\tbl SetMenuItems\n"
+ "\tldr r0, [r5]\n"
+ "\tadds r0, 0x1C\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_8035CF4\n"
+ "\tbl sub_80376CC\n"
+ "\tadd sp, 0x10\n"
+ "\tpop {r3}\n"
+ "\tmov r8, r3\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"_080370C0: .4byte gUnknown_203B35C\n"
+"_080370C4: .4byte 0x00000504\n"
+"_080370C8: .4byte gUnknown_80E653C\n"
+"_080370CC: .4byte gUnknown_80E6CD0\n"
+"_080370D0: .4byte gUnknown_80E6CE8");
+}
+#endif
+
+void sub_80370D4(void)
+{
+ if(gUnknown_203B35C != NULL)
+ {
+ MemoryFree(gUnknown_203B35C);
+ gUnknown_203B35C = NULL;
+ }
+}
+
+// Unused
+u32 sub_80370F0(void)
+{
+ u32 nextMenu;
+ int local_10;
+
+ local_10 = 4;
+ nextMenu = MENU_NO_SCREEN_CHANGE;
+ switch(gUnknown_203B35C->unk8){
+ case 0:
+ if (sub_80130A8(&gUnknown_203B35C->unk1C) == '\0') {
+ sub_8013114(&gUnknown_203B35C->unk1C,&local_10);
+ }
+ if (local_10 == 4) {
+ sub_8037748();
+ }
+ else {
+ gUnknown_203B35C->unk8 = 1;
+ sub_8037900();
+ }
+ break;
+ case 1:
+ sub_80376CC();
+ gUnknown_203B35C->unk8 = 2;
+ sub_80371B8();
+ break;
+ case 2:
+ if (((gUnknown_203B35C->unk0 < 2) && (gUnknown_203B35C->unk4 == 0)) && (sub_8037C10(0) == 0) ) {
+ return 0x29; // TODO: what screen is this?
+ }
+ else {
+ if (sub_80130A8(&gUnknown_203B35C->unk1C) == '\0') {
+ sub_8013114(&gUnknown_203B35C->unk1C,&local_10);
+ }
+ if (local_10 != 4) {
+ PlayMenuSoundEffect(3);
+ nextMenu = sub_8037798();
+ gUnknown_203B35C->unk8 = 4;
+ }
+ sub_8037748();
+ }
+ break;
+ }
+ return nextMenu;
+}
+
+void sub_80371B8(void)
+{
+ struct unkStruct_8035D94 *pbVar2;
+ u32 *ppuVar4;
+ u32 *puVar5;
+
+ puVar5 = NULL;
+ ppuVar4 = NULL;
+ sub_8037400();
+ if ((gUnknown_203B35C->unk0 < 2) &&(gUnknown_203B35C->unk4 == 0)) {
+ if (sub_8037C10(0) != 0) {
+ sub_80376CC();
+ sub_8035CC0(&gUnknown_203B35C->unk15C,0);
+ SetMenuItems(&gUnknown_203B35C->unk1C, gUnknown_203B35C->unk15C, 0, &gUnknown_80E6C50,
+ &gUnknown_80E6C68, 0, 6, 0);
+ sub_8035CF4(&gUnknown_203B35C->unk1C, 0, 1);
+ }
+ }
+ else {
+ sub_80376CC();
+ sub_8035CC0(&gUnknown_203B35C->unk15C, 0);
+ switch(gUnknown_203B35C->unk4) {
+ case 0:
+ puVar5 = &gUnknown_80E66BC;
+ ppuVar4 = &gUnknown_80E66D4;
+ break;
+ case 3:
+ puVar5 = &gUnknown_80E6D54;
+ ppuVar4 = &gUnknown_80E6D6C;
+ break;
+ case 2:
+ puVar5 = &gUnknown_80E6DDC;
+ ppuVar4 = &gUnknown_80E6DF4;
+ break;
+ case 4:
+ puVar5 = &gUnknown_80E67D4;
+ ppuVar4 = &gUnknown_80E67EC;
+ break;
+ case 1:
+ case 5:
+ puVar5 = &gUnknown_80E6748;
+ ppuVar4 = &gUnknown_80E6760;
+ break;
+ case 6:
+ puVar5 = &gUnknown_80E689C;
+ ppuVar4 = &gUnknown_80E68B4;
+ break;
+ case 7:
+ puVar5 = &gUnknown_80E6938;
+ ppuVar4 = &gUnknown_80E6950;
+ break;
+ case 9:
+ puVar5 = &gUnknown_80E69B0;
+ ppuVar4 = &gUnknown_80E69C8;
+ break;
+ case 0xb:
+ puVar5 = &gUnknown_80E6A10;
+ ppuVar4 = &gUnknown_80E6A28;
+ break;
+ case 0xd:
+ puVar5 = &gUnknown_80E6A74;
+ ppuVar4 = &gUnknown_80E6A8C;
+ break;
+ case 0xe:
+ puVar5 = &gUnknown_80E6B78;
+ ppuVar4 = &gUnknown_80E6B90;
+ break;
+ case 0xf:
+ puVar5 = &gUnknown_80E6BF4;
+ ppuVar4 = &gUnknown_80E6C0C;
+ break;
+ }
+ SetMenuItems(&gUnknown_203B35C->unk1C, gUnknown_203B35C->unk15C, 0, puVar5, ppuVar4, 0, 6, 0);
+ sub_8035CF4(&gUnknown_203B35C->unk1C, 0, 1);
+ // TODO clean this if statement up...
+ if ((((gUnknown_203B35C->unk4 != 0) &&(gUnknown_203B35C->unk0 == 0)) &&
+ (pbVar2 = sub_8035D94(), pbVar2->unk0 != 0)) && (pbVar2->unk4 != 0)) {
+ // We received something..
+ gUnknown_203B460->unk50[pbVar2->unk0] += pbVar2->unk4;
+ }
+ }
+}
+
+void sub_80373C4(void)
+{
+ sub_8005838(0,0);
+ sub_80060EC();
+ sub_800CB20();
+ LoadBufferedInputs();
+ TransferBGPaletteBuffer();
+ xxx_call_update_bg_vram();
+ sub_8009908();
+ xxx_call_update_bg_sound_input();
+ ResetSprites(0);
+}
+
+// Unused
+struct unkStruct_203B35C *sub_80373F4(void)
+{
+ return gUnknown_203B35C;
+}
diff --git a/src/personality_test.c b/src/personality_test.c
index 3f5bfa6..67f0f9f 100644
--- a/src/personality_test.c
+++ b/src/personality_test.c
@@ -40,7 +40,7 @@ extern void sub_800836C(u32, u8 *r0, u32);
extern void SetBGPaletteBufferColorArray(s32 index, u8 *colorArray);
extern void RedrawPartnerSelectionMenu(void);
-extern void sub_8013818(u32 *r0, s32, u32, u32);
+extern void sub_8013818(struct UnkInputStruct **r0, s32, u32, u32);
extern u32 GetKeyPress(struct UnkInputStruct **r0);
extern u8 sub_80138B8(struct UnkInputStruct **r0, u32);
@@ -142,7 +142,7 @@ struct unkData gUnknown_80F4244 =
0xC, 6,
5, 5,
5,0,
- 0, 0
+ NULL
};
const char filler[] = "pksdir0"; // CHUNSOFT inserted for aligning data
@@ -168,7 +168,7 @@ const struct unkData gUnknown_80F4278 =
0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
- 0x00, 0x00
+ NULL
};
const struct unkData gUnknown_80F4290 =
@@ -178,7 +178,7 @@ const struct unkData gUnknown_80F4290 =
0x02, 0x02,
0x09, 0x0B,
0x0D, 0x00,
- 0x00, 0x00
+ NULL
};
const struct unkData gUnknown_80F42A8 =
@@ -188,7 +188,7 @@ const struct unkData gUnknown_80F42A8 =
0x0E, 0x04,
0x05, 0x05,
0x05, 0x00,
- 0x00, 0x00
+ NULL
};
@@ -586,7 +586,6 @@ void sub_803CB5C(void)
void sub_803CB7C(void)
{
-
CopyStringtoBuffer(gUnknown_203B400->PartnerNick, GetMonSpecies(gUnknown_203B400->PartnerID));
sub_801602C(3, gUnknown_203B400->PartnerNick);
gUnknown_203B400->TestState = 13;
@@ -652,7 +651,6 @@ void PersonalityTest_DisplayStarterSprite(void)
sub_80073E0(1);
}
-#ifdef NONMATCHING
void CreatePartnerSelectionMenu(s16 starterID)
{
s32 starterID_s32;
@@ -661,114 +659,26 @@ void CreatePartnerSelectionMenu(s16 starterID)
sub_803CEAC(); // creates 203B404
gUnknown_203B404->StarterID = starterID_s32;
gUnknown_203B404->unk4C = 0;
- gUnknown_203B404->unk50 = &gUnknown_203B404->unk54;
+ gUnknown_203B404->unk50 = gUnknown_203B404->unk54;
gUnknown_203B404->unk54[0] = gUnknown_80F4290;
gUnknown_203B404->unk54[1] = gUnknown_80F42A8;
gUnknown_203B404->unk54[2] = gUnknown_80F4278;
gUnknown_203B404->unk54[3] = gUnknown_80F4278;
- // TODO this is the problem area
- //gUnknown_203B404->unk50[5] = (u32 *) &gUnknown_203B404->sub; // so weird but think they store the substruct
+ gUnknown_203B404->unk50->unk14 = gUnknown_203B404->unkb4;
- gUnknown_203B404->sub.unkb4 = 1;
- gUnknown_203B404->sub.unkb5 = 0;
- gUnknown_203B404->sub.unkb6 = 6;
- gUnknown_203B404->sub.unkb7 = 0;
+ gUnknown_203B404->unkb4[0] = 1;
+ gUnknown_203B404->unkb4[1] = 0;
+ gUnknown_203B404->unkb4[2] = 6;
+ gUnknown_203B404->unkb4[3] = 0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B404->unk54, 1, 1);
sub_8013818(&gUnknown_203B404->unk18, GetValidPartners(), 0xA, gUnknown_203B404->unk4C);
RedrawPartnerSelectionMenu();
PersonalityTest_DisplayPartnerSprite();
}
-#else
-NAKED
-void CreatePartnerSelectionMenu(s16 starterID)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tadds r4, r0, 0\n"
- "\tlsls r4, 16\n"
- "\tasrs r4, 16\n"
- "\tbl sub_803CEAC\n"
- "\tldr r5, _0803CDB0\n"
- "\tldr r0, [r5]\n"
- "\tmovs r3, 0\n"
- "\tmovs r1, 0\n"
- "\tstrh r4, [r0]\n"
- "\tstr r1, [r0, 0x4C]\n"
- "\tadds r1, r0, 0\n"
- "\tadds r1, 0x54\n"
- "\tstr r1, [r0, 0x50]\n"
- "\tldr r0, _0803CDB4\n"
- "\tldm r0!, {r2,r4,r6}\n"
- "\tstm r1!, {r2,r4,r6}\n"
- "\tldm r0!, {r2,r4,r7}\n"
- "\tstm r1!, {r2,r4,r7}\n"
- "\tldr r1, [r5]\n"
- "\tadds r1, 0x6C\n"
- "\tldr r0, _0803CDB8\n"
- "\tldm r0!, {r2,r6,r7}\n"
- "\tstm r1!, {r2,r6,r7}\n"
- "\tldm r0!, {r4,r6,r7}\n"
- "\tstm r1!, {r4,r6,r7}\n"
- "\tldr r1, [r5]\n"
- "\tldr r2, _0803CDBC\n"
- "\tadds r1, 0x84\n"
- "\tadds r0, r2, 0\n"
- "\tldm r0!, {r4,r6,r7}\n"
- "\tstm r1!, {r4,r6,r7}\n"
- "\tldm r0!, {r4,r6,r7}\n"
- "\tstm r1!, {r4,r6,r7}\n"
- "\tldr r0, [r5]\n"
- "\tadds r0, 0x9C\n"
- "\tldm r2!, {r1,r4,r6}\n"
- "\tstm r0!, {r1,r4,r6}\n"
- "\tldm r2!, {r1,r4,r7}\n"
- "\tstm r0!, {r1,r4,r7}\n"
- "\tldr r0, [r5]\n"
- "\tldr r1, [r0, 0x50]\n"
- "\tadds r0, 0xB4\n"
- "\tstr r0, [r1, 0x14]\n"
- "\tmovs r1, 0x1\n"
- "\tstrb r1, [r0]\n"
- "\tldr r0, [r5]\n"
- "\tadds r0, 0xB5\n"
- "\tstrb r3, [r0]\n"
- "\tldr r0, [r5]\n"
- "\tadds r0, 0xB6\n"
- "\tmovs r1, 0x6\n"
- "\tstrb r1, [r0]\n"
- "\tldr r0, [r5]\n"
- "\tadds r0, 0xB7\n"
- "\tstrb r3, [r0]\n"
- "\tbl ResetUnusedInputStruct\n"
- "\tldr r0, [r5]\n"
- "\tadds r0, 0x54\n"
- "\tmovs r1, 0x1\n"
- "\tmovs r2, 0x1\n"
- "\tbl sub_800641C\n"
- "\tldr r4, [r5]\n"
- "\tadds r4, 0x18\n"
- "\tbl GetValidPartners\n"
- "\tadds r1, r0, 0\n"
- "\tldr r0, [r5]\n"
- "\tldr r3, [r0, 0x4C]\n"
- "\tadds r0, r4, 0\n"
- "\tmovs r2, 0xA\n"
- "\tbl sub_8013818\n"
- "\tbl RedrawPartnerSelectionMenu\n"
- "\tbl PersonalityTest_DisplayPartnerSprite\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
-"_0803CDB0: .4byte gUnknown_203B404\n"
-"_0803CDB4: .4byte gUnknown_80F4290\n"
-"_0803CDB8: .4byte gUnknown_80F42A8\n"
-"_0803CDBC: .4byte gUnknown_80F4278");
-}
-#endif
u16 HandlePartnerSelectionInput(void)
{
diff --git a/src/text_util.c b/src/text_util.c
index 02c4239..1de233c 100644
--- a/src/text_util.c
+++ b/src/text_util.c
@@ -21,6 +21,26 @@ extern const char gDragonText[];
extern const char gDarkText[];
extern const char gSteelText[];
+extern const char gFormattedNoneText[];
+extern const char gFormattedNormalText[];
+extern const char gFormattedFireText[];
+extern const char gFormattedWaterText[];
+extern const char gFormattedGrassText[];
+extern const char gFormattedElectricText[];
+extern const char gFormattedIceText[];
+extern const char gFormattedFightingText[];
+extern const char gFormattedPoisonText[];
+extern const char gFormattedGroundText[];
+extern const char gFormattedFlyingText[];
+extern const char gFormattedPsychicText[];
+extern const char gFormattedBugText[];
+extern const char gFormattedRockText[];
+extern const char gFormattedGhostText[];
+extern const char gFormattedDragonText[];
+extern const char gFormattedDarkText[];
+extern const char gFormattedSteelText[];
+
+
const char * const gUnformattedTypeStrings[NUM_POKEMON_TYPES] =
{
gNoneText,
@@ -45,7 +65,29 @@ const char * const gUnformattedTypeStrings[NUM_POKEMON_TYPES] =
#include "data/unformatted_type_names.h"
-extern const char * gFormattedTypeStrings[NUM_POKEMON_TYPES]; // formatted type names
+const char * const gFormattedTypeStrings[NUM_POKEMON_TYPES] =
+{
+ gFormattedNoneText,
+ gFormattedNormalText,
+ gFormattedFireText,
+ gFormattedWaterText,
+ gFormattedGrassText,
+ gFormattedElectricText,
+ gFormattedIceText,
+ gFormattedFightingText,
+ gFormattedPoisonText,
+ gFormattedGroundText,
+ gFormattedFlyingText,
+ gFormattedPsychicText,
+ gFormattedBugText,
+ gFormattedRockText,
+ gFormattedGhostText,
+ gFormattedDragonText,
+ gFormattedDarkText,
+ gFormattedSteelText,
+};
+
+#include "data/formatted_type_names.h"
extern u8 *gAbilityNames[];
diff --git a/src/unk_menu_203B360.c b/src/unk_menu_203B360.c
new file mode 100644
index 0000000..6d778c2
--- /dev/null
+++ b/src/unk_menu_203B360.c
@@ -0,0 +1,104 @@
+#include "global.h"
+#include "input.h"
+#include "main_menu.h"
+
+struct unkData
+{
+ u8 unk0[14];
+ u16 unkD;
+ u16 unk10;
+ u16 unk12;
+ u8 *unk14;
+};
+
+struct unkStruct_203B360
+{
+ // size: 0x1b4
+ u32 currMenu;
+ u32 unk4; // state
+ u32 unk8;
+ u8 fill8[0x148 - 0xC];
+ struct unkData unk148[4];
+ u32 unk1A8;
+ u32 unk1AC;
+ u32 unk1B0; // sprite count?
+};
+
+extern struct unkStruct_203B360 *gUnknown_203B360;
+extern struct unkData gUnknown_80E6E7C;
+extern u32 gUnknown_80E6E94;
+extern u32 gUnknown_80E6EAC;
+
+extern void *MemoryAlloc(u32, u32);
+extern void MemoryFill8(u8 *, u8, u32);
+extern void MemoryFree(void *);
+extern void sub_8038440();
+extern void sub_8035CF4(u32 *, u32, u32);
+extern void sub_800641C(void *, u32, u32);
+extern void SetMenuItems(void *, void *, u32, u32 *, u32 *, u32, u32, u32);
+extern u8 sub_80130A8(u32 *);
+extern void sub_8013114(u32 *, u32 *);
+extern void sub_80384D0();
+
+void sub_80382E4(s32 param_1)
+{
+ s32 iVar4;
+
+ if (gUnknown_203B360 == NULL) {
+ gUnknown_203B360 = MemoryAlloc(sizeof(struct unkStruct_203B360), 8);
+ MemoryFill8((u8 *)gUnknown_203B360, 0, sizeof(struct unkStruct_203B360));
+ }
+ for(iVar4 = 0; iVar4 < 4; iVar4++){
+ gUnknown_203B360->unk148[iVar4] = gUnknown_80E6E7C;
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B360->unk148,1,1);
+ if (param_1 == 0x25) {
+ SetMenuItems(&gUnknown_203B360->unk8,gUnknown_203B360->unk148,0,&gUnknown_80E6E94,&gUnknown_80E6EAC,
+ 0,4,0);
+ }
+ sub_8035CF4(&gUnknown_203B360->unk8,0,1);
+ gUnknown_203B360->currMenu = param_1;
+ gUnknown_203B360->unk4 = 0;
+ sub_8038440();
+}
+
+void sub_80383A8(void)
+{
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ if (gUnknown_203B360 != 0) {
+ MemoryFree(gUnknown_203B360);
+ gUnknown_203B360 = 0;
+ }
+}
+
+u32 sub_80383D4(void)
+{
+ u32 nextMenu;
+ u32 menuAction;
+
+ menuAction = 2;
+ nextMenu = MENU_NO_SCREEN_CHANGE;
+
+ if (gUnknown_203B360->unk4 == 0){
+ if (sub_80130A8(&gUnknown_203B360->unk8) == '\0') {
+ sub_8013114(&gUnknown_203B360->unk8, &menuAction);
+ }
+ switch(menuAction)
+ {
+ case 3:
+ case 1:
+ gUnknown_203B360->unk4 = 0;
+ nextMenu = MENU_MAIN_SCREEN;
+ break;
+ case 2:
+ gUnknown_203B360->unk4 = 0;
+ default:
+ break;
+ }
+ sub_80384D0();
+ }
+
+ return nextMenu;
+}
diff --git a/src/unk_menu_203B360_1.c b/src/unk_menu_203B360_1.c
new file mode 100644
index 0000000..1b84f52
--- /dev/null
+++ b/src/unk_menu_203B360_1.c
@@ -0,0 +1,36 @@
+#include "global.h"
+
+struct unkData
+{
+ u8 unk0[14];
+ u16 unkD;
+ u16 unk10;
+ u16 unk12;
+ u8 *unk14;
+};
+
+struct unkStruct_203B360
+{
+ // size: 0x1b4
+ u32 currMenu;
+ u32 unk4;
+ u32 unk8;
+ u8 fill8[0x148 - 0xC];
+ struct unkData unk148[4];
+ u16 unk1A8;
+ u16 unk1AA;
+ u16 unk1AC;
+ u16 unk1AE;
+ u32 unk1B0; // Sprite count?
+};
+
+extern struct unkStruct_203B360 *gUnknown_203B360;
+extern void AddSprite(u16 *, u32, u32, u32);
+
+void sub_80384D0(void)
+{
+ if ((gUnknown_203B360->unk1B0 & 8) != 0) {
+ AddSprite(&gUnknown_203B360->unk1A8, 0x100, 0, 0);
+ }
+ gUnknown_203B360->unk1B0++;
+}
diff --git a/src/unk_menu_203B364.c b/src/unk_menu_203B364.c
new file mode 100644
index 0000000..f6f6766
--- /dev/null
+++ b/src/unk_menu_203B364.c
@@ -0,0 +1,85 @@
+#include "global.h"
+#include "input.h"
+
+struct unkData
+{
+ u8 unk0[14];
+ u16 unkD;
+ u16 unk10;
+ u16 unk12;
+ u8 *unk14;
+};
+
+struct unkStruct_203B360
+{
+ // size: 0x1b4
+ u32 currMenu;
+ u32 unk4;
+ u32 unk8;
+ u8 fill8[0x148 - 0xC];
+ struct unkData unk148[4];
+ u16 unk1A8;
+ u16 unk1AA;
+ u16 unk1AC;
+ u16 unk1AE;
+ u32 unk1B0; // Sprite count?
+};
+
+extern struct unkStruct_203B360 *gUnknown_203B364;
+extern struct unkData gUnknown_80E6F20;
+extern u32 gUnknown_80E6F38;
+extern u32 gUnknown_80E7090;
+extern u32 gUnknown_80E6F50;
+
+extern void *MemoryAlloc(u32, u32);
+extern void MemoryFill8(u8 *, u8, u32);
+extern void MemoryFree(void *);
+extern void sub_8038440();
+extern void sub_8035CF4(u32 *, u32, u32);
+extern void sub_800641C(void *, u32, u32);
+extern void SetMenuItems(void *, void *, u32, u32 *, u32 *, u32, u32, u32);
+extern u8 sub_80130A8(u32 *);
+extern void sub_8013114(u32 *, u32 *);
+extern void sub_80384D0();
+extern void sub_8038830();
+
+void sub_803850C(s32 param_1)
+{
+ s32 iVar4;
+
+ if (gUnknown_203B364 == NULL) {
+ gUnknown_203B364 = MemoryAlloc(sizeof(struct unkStruct_203B360),8);
+ MemoryFill8((u8 *)gUnknown_203B364,0,sizeof(struct unkStruct_203B360));
+ }
+ for(iVar4 = 0; iVar4 < 4; iVar4++){
+ gUnknown_203B364->unk148[iVar4] = gUnknown_80E6F20;
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B364->unk148,1,1);
+
+ if (param_1 == 0x2e) {
+ // Beware, Deleting your Adventure
+ SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38,&gUnknown_80E7090,
+ 0,6,0);
+ }
+ else {
+ // Saving your Adventure
+ SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38,&gUnknown_80E6F50,
+ 0,6,0);
+ }
+ sub_8035CF4(&gUnknown_203B364->unk8,0,1);
+ gUnknown_203B364->unk4 = 0;
+ gUnknown_203B364->currMenu = param_1;
+ sub_8038830();
+}
+
+void sub_8038604(void)
+{
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ if (gUnknown_203B364 != 0) {
+ MemoryFree(gUnknown_203B364);
+ gUnknown_203B364 = 0;
+ }
+}
+