summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2021-04-19 21:55:40 -0700
committerGitHub <noreply@github.com>2021-04-19 23:55:40 -0500
commitf65dee5a143bd543c74c010d7252eb76893ee243 (patch)
treed343e826c63f8b501d37873c3c7bc1f010819deb /src
parentd316d1e359c7672277a9cf644acd4e40170f5968 (diff)
Wonder mail and some boss dialogues (#36)
* more wonder mail and main menu work * Lots of things.. doc'ing, decomping, and other things * continue decomping boss scenes * up to Suicune * up to Mewtwo dialogue * up to Raquaza * fix spelling error on Rayquaza and decomp a few more * up to groudon * divide > shift
Diffstat (limited to 'src')
-rw-r--r--src/adventure_log.c6
-rw-r--r--src/code_800558C.c2
-rw-r--r--src/code_800C9CC.c14
-rw-r--r--src/code_8040094.c15
-rw-r--r--src/code_8041AD0.c6
-rw-r--r--src/code_8048480.c74
-rw-r--r--src/code_80521D0_1.c1197
-rw-r--r--src/code_8057824.c118
-rw-r--r--src/code_8057824_1.c2661
-rw-r--r--src/cpu.c16
-rw-r--r--src/ds_menus.c44
-rw-r--r--src/m4a.c75
-rw-r--r--src/main.c22
-rw-r--r--src/main_menu.c42
-rw-r--r--src/main_menu_1.c225
-rw-r--r--src/main_menu_mid.c128
-rw-r--r--src/music_pre.c30
-rw-r--r--src/other_menus.c5
-rw-r--r--src/pokemon.c17
-rw-r--r--src/unk_menu_203B360.c3
-rw-r--r--src/wonder_mail.c22
-rw-r--r--src/wonder_mail_2.c290
-rw-r--r--src/wonder_mail_3.c106
-rw-r--r--src/wonder_mail_main_menu.c438
-rw-r--r--src/wonder_mail_main_menu_pre.c442
25 files changed, 5271 insertions, 727 deletions
diff --git a/src/adventure_log.c b/src/adventure_log.c
index 420d71d..d3baf40 100644
--- a/src/adventure_log.c
+++ b/src/adventure_log.c
@@ -73,7 +73,7 @@ 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 void xxx_call_draw_string(s32, u32, u8 *, u32, u32);
extern u32 gUnknown_202DE30;
u32 CreateAdventureLogScreen(u32 param_1)
@@ -227,7 +227,7 @@ void DisplayAdventureLog(void)
iVar5 = gAdventureLog->currPage * 8;
iVar5 += 10;
// Draw Header
- xxx_call_draw_string(iVar5, 0, &gAdventureLogHeaderText, gAdventureLog->unk34, 0);
+ xxx_call_draw_string(iVar5, 0, gAdventureLogHeaderText, gAdventureLog->unk34, 0);
iVar5 += 4;
iVar5 += gAdventureLog->unk9E * 8;
// Draw Page #
@@ -264,7 +264,7 @@ void DisplayAdventureLog(void)
else
{
// Draw the ?????????? across the row
- xxx_call_draw_string(8, sub_8013800(gAdventureLog, counter), &gUnknown_80E2030, gAdventureLog->unk34, 0);
+ xxx_call_draw_string(8, sub_8013800(gAdventureLog, counter), gUnknown_80E2030, gAdventureLog->unk34, 0);
}
counter++;
} while(counter < gAdventureLog->unk1A);
diff --git a/src/code_800558C.c b/src/code_800558C.c
index a920070..e138454 100644
--- a/src/code_800558C.c
+++ b/src/code_800558C.c
@@ -25,6 +25,6 @@ void sub_80060EC(void)
gUnknown_2026E3C = gUnknown_2026E58;
gUnknown_2026E54 = !gUnknown_2026E54;
gUnknown_2026E50 = !gUnknown_2026E50;
- sub_800CC44((gUnknown_2026E4E & (0xF8 << 5)) >> 8, gUnknown_2026E4E & 0x1F);
+ sub_800CC44((gUnknown_2026E4E & 0x1F00) >> 8, gUnknown_2026E4E & 0x1F);
gUnknown_2026E38 = TRUE;
}
diff --git a/src/code_800C9CC.c b/src/code_800C9CC.c
index 99aa827..2b0c8dd 100644
--- a/src/code_800C9CC.c
+++ b/src/code_800C9CC.c
@@ -5,7 +5,7 @@
extern u16 gRawKeyInput;
extern u8 gUnknown_202D6B8;
extern u8 gUnknown_202D6B9;
-extern u16 gUnknown_202D7FA;
+extern u16 gBldAlpha;
extern u8 gUnknown_202D7FE;
extern struct BGControlStruct gBG0Control;
@@ -53,10 +53,6 @@ void ReadKeyInput(struct Inputs *r0)
void sub_800CC44(s32 r0, s32 r1)
{
- u32 preload1;
- u8 preload2;
- u8 preload3;
-
if(r0 < 0)
{
r0 = 0;
@@ -82,13 +78,7 @@ void sub_800CC44(s32 r0, s32 r1)
gUnknown_202D6B8 = r0;
gUnknown_202D6B9 = r1;
- // Forcing the correct loads
- preload1 = gUnknown_202D7FA;
- preload2 = gUnknown_202D6B8;
- preload3 = gUnknown_202D6B9;
-
- gUnknown_202D7FA = (gUnknown_202D6B9 << 8) | gUnknown_202D6B8;
-
+ gBldAlpha = BLDALPHA_BLEND1(gUnknown_202D6B8, gUnknown_202D6B9);
}
void SetBG0RegOffsets(s32 xoffset, s32 yoffset)
diff --git a/src/code_8040094.c b/src/code_8040094.c
index bd3c104..fc5abb1 100644
--- a/src/code_8040094.c
+++ b/src/code_8040094.c
@@ -1,20 +1,7 @@
#include "global.h"
#include "play_time.h"
#include "file_system.h"
-
-struct unkStruct_203B418
-{
- u8 fill0[0x181FC];
- u32 unk181FC;
- u32 unk18200;
- u32 unk18204;
- u8 unk18208[3];
- u8 unk1820B;
- u32 unk1820C;
- u32 unk18210;
- u8 padding2[3];
- u8 unk18217;
-};
+#include "gUnknown_203B418.h"
extern struct PlayTimeStruct *gPlayTimeRef;
extern struct unkStruct_203B418 *gUnknown_203B418;
diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c
index f90ca13..6c9c55c 100644
--- a/src/code_8041AD0.c
+++ b/src/code_8041AD0.c
@@ -1,12 +1,6 @@
#include "global.h"
#include "code_8041D5C.h"
-struct unk_struct_8041F08
-{
- u32 unk0;
- u32 unk4;
-};
-
struct unkStruct_80420E8
{
u32 unk0;
diff --git a/src/code_8048480.c b/src/code_8048480.c
index 64bf949..efac5df 100644
--- a/src/code_8048480.c
+++ b/src/code_8048480.c
@@ -10,77 +10,77 @@ extern s16 gUnknown_80F4FBA;
extern s16 gUnknown_80F4FBC;
extern s16 gUnknown_80F4FBE;
-extern void sub_807D148(u32 r0, struct unkDungeon_8041D5C *r1, u32 r2, u32 r3);
-extern void sub_8075FCC(u32 r0, struct unkDungeon_8041D5C *r1);
-extern void sub_8077AE4(u32 r0, struct unkDungeon_8041D5C *r1, u32 r2);
-extern void sub_8072008(u32 r0, struct unkDungeon_8041D5C *r1, u32 r2, u8 r3, u32);
-extern void sub_8076D10(u32 r0, struct unkDungeon_8041D5C *r1);
-extern void sub_807232C(u32 r0, struct unkDungeon_8041D5C *r1, u32 r2);
+extern void sub_807D148(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2, u32 r3);
+extern void sub_8075FCC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
+extern void sub_8077AE4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2);
+extern void sub_8072008(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2, u8 r3, u32);
+extern void sub_8076D10(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
+extern void sub_807232C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2);
extern void sub_8045B94(u8 *r0, struct unkDungeon_8041D5C *r1, u32);
-extern void sub_807A290(u32, struct unkDungeon_8041D5C *r1);
-extern void sub_80522F4(u32 r0, struct unkDungeon_8041D5C *r1, u32);
-extern void sub_8079270(u32 r0, struct unkDungeon_8041D5C *r1);
-extern void sub_8077910(u32, struct unkDungeon_8041D5C *r1, u32, u32);
-extern void sub_80791D8(u32, struct unkDungeon_8041D5C *r1);
-extern void sub_8079140(u32, struct unkDungeon_8041D5C *r1);
-extern void sub_8077C44(u32, struct unkDungeon_8041D5C *r1, s16, s16, u32);
-extern void sub_80792F8(u32, struct unkDungeon_8041D5C *r1, u32);
-extern void sub_8079F20(u32, struct unkDungeon_8041D5C *r1, u32, u8);
-extern void sub_806F370(u32, struct unkDungeon_8041D5C *r1, u32, u32, u32, u32, u32, u32, u32, u32);
-
-void sub_8048340(u32 r0, struct unkDungeon_8041D5C *r1, u32 r2)
+extern void sub_807A290(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
+extern void sub_80522F4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32);
+extern void sub_8079270(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
+extern void sub_8077910(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32);
+extern void sub_80791D8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
+extern void sub_8079140(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
+extern void sub_8077C44(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, s16, s16, u32);
+extern void sub_80792F8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32);
+extern void sub_8079F20(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u8);
+extern void sub_806F370(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32, u32, u32, u32, u32, u32, u32);
+
+void sub_8048340(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2)
{
sub_806F370(r0, r1, r2, 1, 0, 0, 528, 0, 0, 0);
}
-void sub_8048364(u32 r0, struct unkDungeon_8041D5C *r1, u8 r2)
+void sub_8048364(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u8 r2)
{
sub_8079F20(r0, r1, 1, r2);
}
-void sub_8048374(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_8048374(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8077C44(r0, r1, gUnknown_80F4FB6, gUnknown_80F4FB8, 1);
}
-void sub_804839C(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_804839C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8077C44(r0, r1, gUnknown_80F4FBA, gUnknown_80F4FBC, 1);
}
-void sub_80483C4(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_80483C4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_80792F8(r0, r1, 999);
}
-void sub_80483D4(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_80483D4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8077C44(r0, r1, 0, gUnknown_80F4FBE, 1);
}
-void sub_80483F4(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_80483F4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8079140(r0, r1);
}
-void sub_8048400(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_8048400(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_80791D8(r0, r1);
}
-void sub_804840C(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_804840C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8077910(r0, r1, 0, 1);
}
-void sub_804841C(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_804841C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8079270(r0, r1);
}
-void sub_8048428(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_8048428(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
if(r1->unk70->unkAC == 4)
sub_807A290(r0, r1);
@@ -89,7 +89,7 @@ void sub_8048428(u32 r0, struct unkDungeon_8041D5C *r1)
sub_80522F4(r0, r1, gUnknown_80F89F4);
}
-void sub_8048450(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_8048450(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
if((u8)(r1->unk70->unkAC - 2) <= 1)
sub_807A290(r0, r1);
@@ -98,43 +98,43 @@ void sub_8048450(u32 r0, struct unkDungeon_8041D5C *r1)
sub_80522F4(r0, r1, gUnknown_80F89F4);
}
-void sub_8048480(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_8048480(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_807D148(r0, r1, 0, 0);
}
-void sub_8048490(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_8048490(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8075FCC(r0, r1);
}
-void sub_804849C(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_804849C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8077AE4(r0, r1, 1);
}
-void sub_80484A8(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_80484A8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8072008(r0, r1, 1, 1, 1);
}
-void sub_80484BC(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_80484BC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8076D10(r0, r1);
}
-void sub_80484C8(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_80484C8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
// Pointer to "But nothing happened!"
sub_80522F4(r0, r1, gUnknown_80F89F4);
}
-void sub_80484DC(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_80484DC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_807232C(r0, r1, 1);
}
-void sub_80484E8(u32 r0, struct unkDungeon_8041D5C *r1)
+void sub_80484E8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
if(r1->unk70->unkAC == 1)
sub_807A290(r0, r1);
diff --git a/src/code_80521D0_1.c b/src/code_80521D0_1.c
index 8be3be6..d363682 100644
--- a/src/code_80521D0_1.c
+++ b/src/code_80521D0_1.c
@@ -1,11 +1,26 @@
#include "global.h"
#include "constants/species.h"
+#include "gUnknown_203B418.h"
+#include "code_8041D5C.h"
+#include "friend_area.h"
+#include "constants/friend_area.h"
-extern s16 *sub_8085480(void);
-extern u32 sub_8085680(u32);
+extern struct unkDungeon_8041D5C *sub_8085480(void);
+extern struct unkDungeon_8041D5C *sub_8085680(u32);
extern char gUnknown_202E038[0x50];
-extern u8* gUnknown_203B418;
+extern struct unkStruct_203B418 *gUnknown_203B418;
+extern u32 gUnknown_202EDC8;
+extern u32 gUnknown_81062A8;
+extern u32 gUnknown_8106074;
+extern u32 gUnknown_81060BC;
+extern u32 gUnknown_8106104;
+extern u32 gUnknown_8106140;
+extern u32 gUnknown_8106214;
+extern u32 gUnknown_8106244;
+extern u32 gUnknown_810627C;
+extern u32 gUnknown_810697C;
+extern u64 gUnknown_8107544[];
extern u32 gUnknown_8106778;
extern u32 gUnknown_81067BC;
extern u32 gUnknown_81067E0;
@@ -14,59 +29,1134 @@ extern u32 gUnknown_810688C;
extern u32 gUnknown_81068D0;
extern u32 gUnknown_8106918;
extern u32 gUnknown_8106934;
+extern u32 gUnknown_8106720;
-extern void sub_8086A3C(void);
+extern u32 gUnknown_810663C;
+extern u32 gUnknown_81063D0;
+extern u32 gUnknown_8106400;
+extern u32 gUnknown_810643C;
+extern u32 gUnknown_8106468;
+extern u32 gUnknown_810648C;
+extern u32 gUnknown_81064BC;
+extern u32 gUnknown_8106500;
+extern u32 gUnknown_8106534;
+extern u32 gUnknown_8106560;
+extern u32 *gPtrPurityForestAllowCelebiToJoinText;
+extern u32 gPurityForestAllowCelebiToJoinPrompt;
+extern u32 *gPtrPurityForestRefuseCelebiConfirmText;
+extern u32 gPurityForestRefuseCelebiConfirmPrompt;
+extern u32 gUnknown_81062B4;
+extern u32 gUnknown_81062E8;
+extern u32 gUnknown_8106368;
+extern u32 gUnknown_8106390;
+extern u32 gUnknown_81063C4;
+extern u32 gUnknown_8106068;
+extern u32 gUnknown_8105E88;
+extern u32 gUnknown_8105EF8;
+extern u32 gUnknown_8105F38;
+extern u32 gUnknown_8105F74;
+extern u32 gUnknown_8105FA0;
+extern u32 gUnknown_8105FD8;
+extern u32 gUnknown_8106024;
+
+extern u32 gUnknown_81058C4;
+extern u32 gUnknown_81058A8;
+extern u8 sub_800E9A8(u32);
+extern void sub_800DC14(u32);
+extern void sub_808BAA4();
+
+extern void sub_8086A3C(struct unkDungeon_8041D5C *r0);
extern void CopySpeciesNametoBuffer(char *r0, u32 r1);
extern void sub_8083E88(u32);
extern void sub_80854D4(void);
extern void sub_80855E4(void *);
extern void sub_8085930(u32);
-extern void sub_8068FE0(u32, u32, u32);
+extern void sub_8068FE0(struct unkDungeon_8041D5C *, u32, u32);
extern void sub_8085860(s16 r0, u32 r1);
+extern void sub_80866C4(u32 *);
+extern void sub_8083EA8(u32, u32);
+extern void sub_8086448();
+extern void sub_80866C4(u32 *r0);
extern void sub_803E708(u32, u32);
-extern void sub_8052910(u32 *r0);
extern void sub_8086448(void);
extern void sub_8086598(void);
extern void sub_808696C();
-extern void sub_80862BC(u32);
+extern void sub_80862BC(struct unkDungeon_8041D5C *);
extern void sub_8083E38(u32);
-extern void sub_806CDD4(u32, u32, u32);
-extern void sub_80869E4(u32, u32, u32, u32);
-extern void sub_806CE68(u32, u32);
-extern void sub_804539C(u32, u32, u32);
+extern void sub_806CDD4(struct unkDungeon_8041D5C *, u32, u32);
+extern void sub_80869E4(struct unkDungeon_8041D5C *, u32, u32, u32);
+extern void sub_806CE68(struct unkDungeon_8041D5C *, u32);
+extern void sub_804539C(struct unkDungeon_8041D5C *, u32, u32);
extern void sub_803E46C(u32);
-extern void sub_8042B0C(u32);
-extern void sub_8085918(u32, u32);
+extern void sub_8042B0C(struct unkDungeon_8041D5C *);
+extern void sub_8085918(struct unkDungeon_8041D5C *, u32);
+extern void sub_806CE68(struct unkDungeon_8041D5C *r0, u32);
+extern void sub_8052910(u32 *);
+extern void sub_803E708(u32, u32);
+extern u8 sub_80450E0(struct unkDungeon_8041D5C *);
+extern u8 HasRecruitedMon(u32);
+extern u8 sub_806FD18(struct unkDungeon_8041D5C *);
+extern u8 sub_8083E74(u32);
+extern s32 sub_8052C68(u32 *, u32 *, u32 *, u32);
+extern void sub_8083F14();
+extern void sub_80861D4(struct unkDungeon_8041D5C *, u32, u32);
+extern void sub_806FDF4(struct unkDungeon_8041D5C *, struct unkDungeon_8041D5C *, struct unkDungeon_8041D5C **);
+extern u32 sub_80861F8(u32, struct unkDungeon_8041D5C *, u32);
+extern void sub_8083ED8(u32);
+extern u32 sub_803F994();
+extern s32 sub_803F9B0();
+extern void sub_803F878(u32, s32);
+extern void sub_8086A70(struct unkDungeon_8041D5C *, u32, u32);
+extern void sub_8085C54(u32, u32, u32, u32, u32);
+extern void sub_803E9D0(void);
+extern void sub_808C4C4(void);
+extern void sub_8085EB0();
+extern void sub_808563C(void *);
+extern void sub_80858AC(u32 *, u32);
+
+void sub_808C5AC(struct unkDungeon_8041D5C *r0);
+void sub_808C550(void);
+void sub_808C590(struct unkDungeon_8041D5C *r0);
+void sub_808C5A0(struct unkDungeon_8041D5C *r0);
+void sub_808C9B0();
+void sub_808C8E0(struct unkDungeon_8041D5C *param_1);
+void sub_808C360(void);
+void sub_808C2D4();
+
+void sub_808C0CC();
+void sub_808BFA0();
+void sub_808C02C();
+extern void sub_80861B8(struct unkDungeon_8041D5C *, u32, u32);
+
+void nullsub_99();
+extern u32 sub_8084100(s32);
+extern u8 *gFriendAreas;
+
+extern void sub_8049884();
+extern void sub_8049B8C();
+extern void sub_8049ED4();
+extern void sub_8040A84();
+extern void sub_8086A54(struct unkDungeon_8041D5C *);
+
+struct unk8049590
+{
+ u16 unk0;
+ u16 fill2;
+ u16 unk4;
+ u16 unk6;
+ u8 unk8;
+};
+
+extern struct unk8049590 *sub_8049590(u32, u32);
+extern void sub_806BFC0(struct subStruct_8048524 *, u32);
+
+void sub_808BBA8(struct unkDungeon_8041D5C *param_1)
+{
+ sub_806BFC0(param_1->unk70,0);
+}
+
+void sub_808BBB8(struct unkDungeon_8041D5C *param_1)
+{
+ s32 iVar1;
+ s32 iVar2;
+
+ sub_80861F8(0x1b,param_1,0);
+ sub_8086A54(param_1);
+ sub_80861B8(param_1,0xe,0);
+ iVar1 = 0xa000;
+ iVar2 = 0x200;
+ sub_8083E38(0x1f8);
+ while( 1 ) {
+ iVar1 = iVar1 - iVar2;
+ if (iVar1 < 0x1800) {
+ iVar2 = 0x100;
+ }
+ if (iVar1 < 0) break;
+ param_1->unk70->unk174 = iVar1;
+ sub_803E46C(0x46);
+ }
+ param_1->unk70->unk174 = 0;
+}
+
+void sub_808BC20(struct unkDungeon_8041D5C * param_1)
+{
+ s32 uVar1;
+
+ sub_8083E38(0x298);
+ for(uVar1 = 0; uVar1 < 0x19; uVar1++){
+ sub_8085918(param_1,uVar1 & 7);
+ sub_803E708(3,0x46);
+ }
+ param_1->unk70->unk15E = 1;
+ sub_8083E38(0x27f);
+ sub_80861F8(99,param_1,1);
+}
+
+void JirachiWishGrantDialogue(struct unkDungeon_8041D5C *param_1)
+{
+ u32 uVar2;
+
+ param_1->unk70->unk15D = 1;
+ // Nnnnnnnnnn!
+ sub_8052910(&gUnknown_81058A8);
+ sub_8083E38(0x375);
+ sub_80861F8(0x67,param_1,1);
+ sub_8083E38(0x2a8);
+ uVar2 = sub_80861F8(0x68,param_1,0);
+ // Taaaaaaaah!
+ sub_8052910(&gUnknown_81058C4);
+ if (sub_800E9A8(uVar2) != 0) {
+ sub_800DC14(uVar2);
+ }
+ sub_803E708(10,0x46);
+ sub_808BAA4();
+}
+
+void sub_808BCE4(void)
+{
+ struct unk8049590 *puVar1;
+
+ puVar1 = sub_8049590(gUnknown_203B418->unkE23C, gUnknown_203B418->unkE23E);
+ puVar1->unk0 &= 0xfffc;
+ puVar1->unk0 |= 16;
+ puVar1->unk0 &= 0xfdff;
+ sub_8049884();
+ sub_8049B8C();
+ sub_8049ED4();
+ sub_8040A84();
+}
+
+void sub_808BD38(void)
+{
+ struct unk8049590 *puVar1;
+
+ puVar1 = sub_8049590(gUnknown_203B418->unkE23C, gUnknown_203B418->unkE23E);
+ puVar1->unk0 &= 0xfffc;
+ puVar1->unk0 |= 1;
+ puVar1->unk0 &= 0xffef;
+ puVar1->unk0 |= (0x200);
+ puVar1->unk8 = 1;
+ sub_8049884();
+ sub_8049B8C();
+ sub_8049ED4();
+ sub_8040A84();
+}
+
+u8 JirachiFriendAreaSearch(void)
+{
+ u8 unlockCondition;
+ s32 friendAreaCounter;
+ s32 numUnlockableAreas;
+ u8 friendAreas[NUM_FRIEND_AREAS];
+ u32 friendAreaIndex;
+
+ // Build a copy of friend area list and keep track of
+ // how many are only Story Unlockable
+ numUnlockableAreas = 0;
+ for(friendAreaCounter = 1; friendAreaCounter < NUM_FRIEND_AREAS; friendAreaCounter++){
+ unlockCondition = GetFriendAreaUnlockCondition(friendAreaCounter);
+ if (!(unlockCondition == UNLOCK_LEGENDARY_REQUEST)){
+ if (!(unlockCondition == UNLOCK_WONDER_MAIL)){
+ if(gFriendAreas[friendAreaCounter] == FALSE) {
+ friendAreas[numUnlockableAreas] = friendAreaCounter;
+ numUnlockableAreas++;
+ }
+ }
+ }
+ }
+
+ if (numUnlockableAreas == 0) {
+ return NUM_FRIEND_AREAS;
+ }
+ else {
+ // Randomly pick 1
+ friendAreaIndex = sub_8084100(numUnlockableAreas);
+ return friendAreas[friendAreaIndex];
+ }
+}
+
+void sub_808BDEC(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x1b);
+ sub_8083F14();
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ if (HasRecruitedMon(SPECIES_LUGIA)) {
+ sub_8083E88(0x23);
+ sub_8068FE0(uVar3,0x21c,0);
+ }
+ else {
+ gUnknown_203B418->unk7 = 1;
+ sub_8085918(uVar3,0);
+ }
+ sub_8085860(iVar2->unk4,iVar2->unk6 - 3);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_LUGIA);
+}
+
+void sub_808BE70(u8 param_1,u8 param_2)
+{
+ if ((param_2 == 0x33) && (param_1 == 0x1B)) {
+ gUnknown_203B418->unk2 = 1;
+ }
+}
+
+
+void LugiaPreFightDialogue(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x1b);
+ if (HasRecruitedMon(SPECIES_LUGIA)) {
+ sub_8086448();
+ sub_80866C4(&gUnknown_8106068);
+ }
+ else {
+ sub_8083F14();
+ sub_8086448();
+ sub_8052910(&gUnknown_8105E88);
+ sub_8083EA8(0x23,0x3c);
+ sub_808C0CC();
+ sub_8052910(&gUnknown_8105EF8);
+ sub_808BFA0();
+ sub_8052910(&gUnknown_8105F38);
+ sub_803E708(10,0x46);
+ sub_8052910(&gUnknown_8105F74);
+ sub_8083E38(0x1f8);
+ sub_80861D4(uVar3,0xd,0);
+ sub_803E708(0x2b,0x46);
+ sub_80861B8(uVar3,0,0);
+ sub_8052910(&gUnknown_8105FA0);
+ sub_808BFA0();
+ sub_8052910(&gUnknown_8105FD8);
+ sub_808C02C();
+ sub_8085C54(0xffffff06,0xffffff06,0xffffff06,1,0);
+ sub_8083F14();
+ sub_80861D4(uVar3,7,0);
+ sub_8052910(&gUnknown_8106024);
+ sub_808BFA0();
+ sub_8086A70(uVar3,800,0x20);
+ sub_8083E88(0x23);
+ sub_80858AC(&iVar2->unkC,0x10);
+ }
+}
+
+void sub_808BFA0(void)
+{
+ s32 iVar1;
+
+ sub_8083E38(0x1f6);
+ for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){
+ sub_8085C54(0,0,iVar1,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+ for(iVar1 = 250; iVar1 > 199; iVar1 -= 10){
+ sub_8085C54(0,iVar1,iVar1,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+ for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10){
+ sub_8085C54(0,0,iVar1,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+ sub_8085EB0();
+}
+
+void sub_808C02C(void)
+{
+ s32 iVar1;
+
+ sub_8083E38(0x1f6);
+
+ for(iVar1 = 0; iVar1 < 200; iVar1 += 100){
+ sub_8085C54(iVar1,iVar1,iVar1,1,0);
+ sub_803E46C(0x46);
+ }
+
+ for(iVar1 = 200; iVar1 >= 0; iVar1 -= 100){
+ sub_8085C54(iVar1,iVar1,iVar1,1,0);
+ sub_803E46C(0x46);
+ }
+
+ sub_803E708(4,0x46);
+
+ for(iVar1 = 0; iVar1 < 200; iVar1 += 100){
+ sub_8085C54(iVar1,iVar1,iVar1,1,0);
+ sub_803E46C(0x46);
+ }
+
+ for(iVar1 = 200; iVar1 >= 0; iVar1 -= 100){
+ sub_8085C54(iVar1,iVar1,iVar1,1,0);
+ sub_803E46C(0x46);
+ }
+
+ sub_803E708(10,0x46);
+ sub_8085EB0();
+}
+
+void sub_808C0CC(void)
+{
+ gUnknown_202EDC8 = 0x1f;
+ sub_8085C54(0,0,0,1,1);
+ sub_803E9D0();
+ sub_803E46C(0x46);
+ gUnknown_203B418->unk7 = 0;
+ sub_808BFA0();
+}
+
+void sub_808C10C(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ u32 uVar3;
+ s32 iVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x1c);
+ sub_8083F14();
+ sub_80854D4();
+ sub_8085930(4);
+ if (HasRecruitedMon(SPECIES_KYOGRE)) {
+ sub_8068FE0(uVar2,0x21c,0);
+ }
+ else {
+ gUnknown_203B418->unk7 = 1;
+ sub_8085918(uVar2,0);
+ }
+ sub_8085860(iVar1->unk4,iVar1->unk6);
+ uVar3 = sub_803F994();
+ iVar2 = sub_803F9B0();
+ sub_803F878(uVar3,iVar2 + -0x1000);
+ CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_KYOGRE);
+ // TODO: gUnknown_202E088 doesn't match but gUnknown_202E038 + 0x50 does
+ CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_GROUDON);
+}
+
+void sub_808C1A4(u8 param_1,u8 param_2)
+{
+ if ((param_2 == 0x34) && (param_1 == 0x1C)) {
+ gUnknown_203B418->unk2 = 1;
+ sub_8083E88(0x23);
+ }
+}
+
+void KyogrePreFightDialogue(void)
+{
+ struct unkDungeon_8041D5C *iVar2;
+ struct unkDungeon_8041D5C *uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x1c);
+ sub_8083F14();
+ if (HasRecruitedMon(SPECIES_KYOGRE)) {
+ sub_8083EA8(0x23,0x3c);
+ sub_808696C(iVar2);
+ sub_803E708(10,0x46);
+ sub_8052910(&gUnknown_81062A8);
+ sub_803E708(10,0x46);
+ gUnknown_203B418->unk2 = 1;
+ }
+ else {
+ sub_8052910(&gUnknown_8106074);
+ sub_803E708(10,0x46);
+ sub_8052910(&gUnknown_81060BC);
+ sub_803E708(10,0x46);
+ nullsub_99();
+ sub_803E708(10,0x46);
+ // Gwwwwwooooooooh
+ sub_8052910(&gUnknown_8106104);
+ sub_803E708(10,0x46);
+ sub_8083EA8(0x23,0x3c);
+ sub_808C360();
+ // My duels agaisnt $m3 (Groudon) left us both exhausted
+ sub_8052910(&gUnknown_8106140);
+ sub_808C2D4();
+ // I am $m2 (Kyogre)!
+ // The lord of the sea!
+ sub_8052910(&gUnknown_8106214);
+ sub_808C2D4();
+ // Witness the destructive force of my waves!
+ sub_8052910(&gUnknown_8106244);
+ sub_808C2D4();
+ // Marvel at my awesome
+ // power!
+ sub_8052910(&gUnknown_810627C);
+ sub_803E708(10,0x46);
+ sub_8086A70(uVar3,600,0xb);
+ sub_8083E88(0x23);
+ sub_80858AC(&iVar2->unkC,0x10);
+ }
+}
+
+void nullsub_99(void)
+{
+}
+
+void sub_808C2D4(void)
+{
+ s32 iVar1;
+
+ sub_8083E38(0x1f8);
+ for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){
+ sub_8085C54(0,0,iVar1,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+ for(iVar1 = 250; iVar1 > 199; iVar1 -= 10){
+ sub_8085C54(0,iVar1,iVar1,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+ for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10){
+ sub_8085C54(0,0,iVar1,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+ sub_8085EB0();
+}
+
+void sub_808C360(void)
+{
+ gUnknown_202EDC8 = 0x1f;
+ sub_8085C54(0,0,0,1,1);
+ sub_803E9D0();
+ sub_803E46C(0x46);
+ gUnknown_203B418->unk7 = 0;
+ sub_808C2D4();
+}
+
+void sub_808C3A0(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+
+ iVar2 = sub_8085480();
+ sub_8083F14();
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ if (HasRecruitedMon(SPECIES_DEOXYS_NORMAL)) {
+ sub_808563C(sub_808C590);
+ }
+ else {
+ gUnknown_203B418->unk7 = 1;
+ sub_808563C(sub_808C5A0);
+ }
+ sub_8085860(iVar2->unk4,iVar2->unk6 - 3);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_DEOXYS_NORMAL);
+}
+
+void sub_808C414(u8 param_1,u8 param_2)
+{
+ if ((param_2 == 0x35) && (param_1 == 0x1D)) {
+ gUnknown_203B418->unk2 = 1;
+ sub_8083E88(0x1a);
+ }
+}
+
+void DeoxysPreFightDialogue(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+
+ iVar2 = sub_8085480();
+ sub_8086448();
+ if (HasRecruitedMon(SPECIES_DEOXYS_NORMAL)) {
+ // There appears to be no one here.
+ // It's impossible to go any further
+ sub_80866C4(&gUnknown_81063C4);
+ }
+ else {
+ sub_8052910(&gUnknown_81062B4);
+ sub_8083EA8(0x1a,0x3c);
+ sub_808C550();
+ sub_8052910(&gUnknown_81062E8);
+ sub_808C4C4();
+ sub_8052910(&gUnknown_8106368);
+ sub_808C4C4();
+ sub_8052910(&gUnknown_8106390);
+ sub_803E708(10,0x46);
+ sub_808563C(sub_808C5AC);
+ sub_80858AC(&iVar2->unkC,0x10);
+ }
+}
+
+void sub_808C4C4(void)
+{
+ s32 iVar1;
+
+ sub_8083E38(0x2c1);
+ for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){
+ sub_8085C54(iVar1,0,0,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+ for(iVar1 = 250; iVar1 > 199; iVar1 -= 10){
+ sub_8085C54(iVar1,iVar1,0,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+ for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10){
+ sub_8085C54(iVar1,0,0,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+ sub_8085EB0();
+}
+
+void sub_808C550(void)
+{
+ gUnknown_202EDC8 = 0x1f;
+ sub_8085C54(0,0,0,1,1);
+ sub_803E9D0();
+ sub_803E46C(0x46);
+ gUnknown_203B418->unk7 = 0;
+ sub_808C4C4();
+}
+
+void sub_808C590(struct unkDungeon_8041D5C *r0)
+{
+ sub_8068FE0(r0, 0x87 << 2, 0);
+}
+
+void sub_808C5A0(struct unkDungeon_8041D5C *r0)
+{
+ sub_8085918(r0, 0);
+}
+
+void sub_808C5AC(struct unkDungeon_8041D5C *r0)
+{
+ sub_8086A70(r0, 0x3b6, 0x20);
+}
+
+void sub_808C5C0(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ u32 uVar3;
+ s32 iVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x1e);
+ sub_8083E88(0x7f);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_8085918(uVar2,0);
+ sub_8085860(iVar1->unk4,iVar1->unk6);
+ uVar3 = sub_803F994();
+ iVar2 = sub_803F9B0();
+ sub_803F878(uVar3,iVar2 + 0xfffff000);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_CELEBI);
+}
+
+void nullsub_100(void)
+{
+}
+
+#ifdef NONMATCHING
+void CelebiJoinDialogue(void)
+{
+ struct unkDungeon_8041D5C *uVar2;
+ s32 state;
+ s32 menuChoice;
+ struct unkDungeon_8041D5C *local_1c;
+
+ uVar2 = sub_8085480();
+ local_1c = sub_8085680(0x1e);
+ if ((HasRecruitedMon(SPECIES_CELEBI)) || (sub_806FD18(local_1c) == '\0'))
+ {
+ sub_8068FE0(local_1c,0x21c,0);
+ sub_808696C(uVar2);
+ sub_803E708(10,0x46);
+ // .........
+ sub_8052910(&gUnknown_810663C);
+ }
+ else
+ {
+ sub_808696C(uVar2);
+ sub_803E708(10,0x46);
+ sub_80862BC(uVar2);
+ sub_803E708(10,0x46);
+ // Oh? There's someone there.
+ sub_8052910(&gUnknown_81063D0);
+ sub_803E708(10,0x46);
+ sub_8086598();
+ sub_8086598();
+ sub_8086598();
+ sub_8086598();
+ // The Time-Traveling Pokemon $m2 (Celebi)!
+ sub_8052910(&gUnknown_8106400);
+ sub_8083E38(0x1c7);
+ sub_806CDD4(local_1c,10,0);
+ sub_803E708(0x14,0x46);
+ sub_806CE68(local_1c,0);
+ sub_803E708(4,0x46);
+ sub_8083E38(0x1c7);
+ sub_806CDD4(local_1c,10,0);
+ sub_8052910(&gUnknown_810643C);
+ sub_803E708(10,0x46);
+ state = 0;
+ do {
+ switch(state)
+ {
+ case 0:
+ do {
+ // NOTE: 0 and Load of ptr switch order in compiler but else matches
+ menuChoice = sub_8052C68(0,gPtrPurityForestAllowCelebiToJoinText,
+ &gPurityForestAllowCelebiToJoinPrompt,0x701);
+ } while (menuChoice < 1);
+ sub_803E708(10,0x46);
+ if (menuChoice == 1)
+ {
+ sub_8083F14();
+ sub_8083E38(0xcc);
+ while (sub_8083E74(0xcc) != 0) {
+ sub_803E46C(0x46);
+ }
+ sub_8083E88(0x7f);
+ sub_8083E38(0x1c7);
+ sub_80861D4(local_1c,0xd,0);
+ sub_803E708(0x37,0x46);
+ sub_8083E38(0x1d5);
+ sub_803E708(0x1a,0x46);
+ sub_8083E38(0x1d5);
+ sub_803E708(0x1c,0x46);
+ sub_8052910(&gUnknown_8106468);
+ sub_803E708(10,0x46);
+ sub_806FDF4(uVar2,local_1c,&local_1c);
+ sub_8083E88(0x7f);
+ sub_8052910(&gUnknown_810648C);
+ sub_803E708(10,0x46);
+ sub_8083E38(0x1c7);
+ sub_80861D4(local_1c,0xd,0);
+ sub_803E708(0x37,0x46);
+ sub_8083E38(0x1d5);
+ sub_803E708(0x1a,0x46);
+ sub_8083E38(0x1d5);
+ sub_803E708(0x1b,0x46);
+ sub_8052910(&gUnknown_81064BC);
+ sub_803E708(10,0x46);
+ state = 2;
+ }
+ else
+ {
+ state = 1;
+ }
+ break;
+ case 1:
+ do {
+ // NOTE: 0 and Load of ptr switch order in compiler but else matches
+ menuChoice = sub_8052C68(0,gPtrPurityForestRefuseCelebiConfirmText,
+ &gPurityForestRefuseCelebiConfirmPrompt,0x701);
+ } while (menuChoice < 1);
+ if (menuChoice == 1)
+ state = 0;
+ else
+ {
+ sub_803E708(10,0x46);
+ sub_8052910(&gUnknown_8106500);
+ sub_80861F8(0x3e,local_1c,1);
+ sub_803E708(0x18,0x46);
+ sub_80861F8(0x3e,local_1c,1);
+ sub_803E708(0xe,0x46);
+ sub_8052910(&gUnknown_8106534);
+ sub_803E708(10,0x46);
+ sub_808C8E0(local_1c);
+ sub_8052910(&gUnknown_8106560);
+ sub_803E708(10,0x46);
+ state = 2;
+ }
+ break;
+ }
+ } while (state != 2);
+ }
+ sub_8083ED8(0x1e);
+ sub_803E708(0x1e,0x46);
+ gUnknown_203B418->unk2 = 1;
+}
+#else
+NAKED
+void CelebiJoinDialogue(void)
+{
+ asm_unified(
+ "\tpush {r4-r7,lr}\n"
+ "\tmov r7, r8\n"
+ "\tpush {r7}\n"
+ "\tsub sp, 0x4\n"
+ "\tbl sub_8085480\n"
+ "\tadds r7, r0, 0\n"
+ "\tmovs r0, 0x1E\n"
+ "\tbl sub_8085680\n"
+ "\tstr r0, [sp]\n"
+ "\tmovs r0, 0x8A\n"
+ "\tlsls r0, 1\n"
+ "\tbl HasRecruitedMon\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0808C658\n"
+ "\tldr r0, [sp]\n"
+ "\tbl sub_806FD18\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0808C680\n"
+"_0808C658:\n"
+ "\tmovs r1, 0x87\n"
+ "\tlsls r1, 2\n"
+ "\tldr r0, [sp]\n"
+ "\tmovs r2, 0\n"
+ "\tbl sub_8068FE0\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl sub_808696C\n"
+ "\tmovs r0, 0xA\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tldr r0, _0808C67C\n"
+ "\tbl sub_8052910\n"
+ "\tb _0808C8AC\n"
+ "\t.align 2, 0\n"
+"_0808C67C: .4byte gUnknown_810663C\n"
+"_0808C680:\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl sub_808696C\n"
+ "\tmovs r0, 0xA\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl sub_80862BC\n"
+ "\tmovs r0, 0xA\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tldr r0, _0808C71C\n"
+ "\tbl sub_8052910\n"
+ "\tmovs r0, 0xA\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tbl sub_8086598\n"
+ "\tbl sub_8086598\n"
+ "\tbl sub_8086598\n"
+ "\tbl sub_8086598\n"
+ "\tldr r0, _0808C720\n"
+ "\tbl sub_8052910\n"
+ "\tldr r4, _0808C724\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl sub_8083E38\n"
+ "\tldr r0, [sp]\n"
+ "\tmovs r1, 0xA\n"
+ "\tmovs r2, 0\n"
+ "\tbl sub_806CDD4\n"
+ "\tmovs r0, 0x14\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tldr r0, [sp]\n"
+ "\tmovs r1, 0\n"
+ "\tbl sub_806CE68\n"
+ "\tmovs r0, 0x4\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl sub_8083E38\n"
+ "\tldr r0, [sp]\n"
+ "\tmovs r1, 0xA\n"
+ "\tmovs r2, 0\n"
+ "\tbl sub_806CDD4\n"
+ "\tldr r0, _0808C728\n"
+ "\tbl sub_8052910\n"
+ "\tmovs r0, 0xA\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tmovs r0, 0\n"
+ "\tmov r8, r4\n"
+ "\tldr r6, _0808C72C\n"
+"_0808C70E:\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0808C730\n"
+ "\tcmp r0, 0x1\n"
+ "\tbne _0808C718\n"
+ "\tb _0808C828\n"
+"_0808C718:\n"
+ "\tb _0808C8A6\n"
+ "\t.align 2, 0\n"
+"_0808C71C: .4byte gUnknown_81063D0\n"
+"_0808C720: .4byte gUnknown_8106400\n"
+"_0808C724: .4byte 0x000001c7\n"
+"_0808C728: .4byte gUnknown_810643C\n"
+"_0808C72C: .4byte 0x000001d5\n"
+"_0808C730:\n"
+ "\tldr r5, _0808C75C\n"
+"_0808C732:\n"
+ "\tmovs r0, 0\n"
+ "\tldr r1, [r5]\n"
+ "\tldr r2, _0808C760\n"
+ "\tldr r3, _0808C764\n"
+ "\tbl sub_8052C68\n"
+ "\tadds r4, r0, 0\n"
+ "\tcmp r4, 0\n"
+ "\tble _0808C732\n"
+ "\tmovs r0, 0xA\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tcmp r4, 0x1\n"
+ "\tbne _0808C824\n"
+ "\tbl sub_8083F14\n"
+ "\tmovs r0, 0xCC\n"
+ "\tbl sub_8083E38\n"
+ "\tb _0808C76E\n"
+ "\t.align 2, 0\n"
+"_0808C75C: .4byte gPtrPurityForestAllowCelebiToJoinText\n"
+"_0808C760: .4byte gPurityForestAllowCelebiToJoinPrompt\n"
+"_0808C764: .4byte 0x00000701\n"
+"_0808C768:\n"
+ "\tmovs r0, 0x46\n"
+ "\tbl sub_803E46C\n"
+"_0808C76E:\n"
+ "\tmovs r0, 0xCC\n"
+ "\tbl sub_8083E74\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0808C768\n"
+ "\tmovs r0, 0x7F\n"
+ "\tbl sub_8083E88\n"
+ "\tmov r0, r8\n"
+ "\tbl sub_8083E38\n"
+ "\tldr r0, [sp]\n"
+ "\tmovs r1, 0xD\n"
+ "\tmovs r2, 0\n"
+ "\tbl sub_80861D4\n"
+ "\tmovs r0, 0x37\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl sub_8083E38\n"
+ "\tmovs r0, 0x1A\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl sub_8083E38\n"
+ "\tmovs r0, 0x1C\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tldr r0, _0808C818\n"
+ "\tbl sub_8052910\n"
+ "\tmovs r0, 0xA\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tldr r1, [sp]\n"
+ "\tadds r0, r7, 0\n"
+ "\tmov r2, sp\n"
+ "\tbl sub_806FDF4\n"
+ "\tmovs r0, 0x7F\n"
+ "\tbl sub_8083E88\n"
+ "\tldr r0, _0808C81C\n"
+ "\tbl sub_8052910\n"
+ "\tmovs r0, 0xA\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tmov r0, r8\n"
+ "\tbl sub_8083E38\n"
+ "\tldr r0, [sp]\n"
+ "\tmovs r1, 0xD\n"
+ "\tmovs r2, 0\n"
+ "\tbl sub_80861D4\n"
+ "\tmovs r0, 0x37\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl sub_8083E38\n"
+ "\tmovs r0, 0x1A\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl sub_8083E38\n"
+ "\tmovs r0, 0x1B\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tldr r0, _0808C820\n"
+ "\tb _0808C898\n"
+ "\t.align 2, 0\n"
+"_0808C818: .4byte gUnknown_8106468\n"
+"_0808C81C: .4byte gUnknown_810648C\n"
+"_0808C820: .4byte gUnknown_81064BC\n"
+"_0808C824:\n"
+ "movs r0, 0x1\n"
+ "b _0808C8A6\n"
+"_0808C828:\n"
+ "\tldr r5, _0808C844\n"
+"_0808C82A:\n"
+ "\tmovs r0, 0\n"
+ "\tldr r1, [r5]\n"
+ "\tldr r2, _0808C848\n"
+ "\tldr r3, _0808C84C\n"
+ "\tbl sub_8052C68\n"
+ "\tadds r4, r0, 0\n"
+ "\tcmp r4, 0\n"
+ "\tble _0808C82A\n"
+ "\tcmp r4, 0x1\n"
+ "\tbne _0808C850\n"
+ "\tmovs r0, 0\n"
+ "\tb _0808C8A6\n"
+ "\t.align 2, 0\n"
+"_0808C844: .4byte gPtrPurityForestRefuseCelebiConfirmText\n"
+"_0808C848: .4byte gPurityForestRefuseCelebiConfirmPrompt\n"
+"_0808C84C: .4byte 0x00000701\n"
+"_0808C850:\n"
+ "\tmovs r0, 0xA\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tldr r0, _0808C8D0\n"
+ "\tbl sub_8052910\n"
+ "\tldr r1, [sp]\n"
+ "\tmovs r0, 0x3E\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_80861F8\n"
+ "\tmovs r0, 0x18\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tldr r1, [sp]\n"
+ "\tmovs r0, 0x3E\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_80861F8\n"
+ "\tmovs r0, 0xE\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tldr r0, _0808C8D4\n"
+ "\tbl sub_8052910\n"
+ "\tmovs r0, 0xA\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tldr r0, [sp]\n"
+ "\tbl sub_808C8E0\n"
+ "\tldr r0, _0808C8D8\n"
+"_0808C898:\n"
+ "\tbl sub_8052910\n"
+ "\tmovs r0, 0xA\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tmovs r0, 0x2\n"
+"_0808C8A6:\n"
+ "\tcmp r0, 0x2\n"
+ "\tbeq _0808C8AC\n"
+ "\tb _0808C70E\n"
+"_0808C8AC:\n"
+ "\tmovs r0, 0x1E\n"
+ "\tbl sub_8083ED8\n"
+ "\tmovs r0, 0x1E\n"
+ "\tmovs r1, 0x46\n"
+ "\tbl sub_803E708\n"
+ "\tldr r0, _0808C8DC\n"
+ "\tldr r1, [r0]\n"
+ "\tmovs r0, 0x1\n"
+ "\tstrb r0, [r1, 0x2]\n"
+ "\tadd sp, 0x4\n"
+ "\tpop {r3}\n"
+ "\tmov r8, r3\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"_0808C8D0: .4byte gUnknown_8106500\n"
+"_0808C8D4: .4byte gUnknown_8106534\n"
+"_0808C8D8: .4byte gUnknown_8106560\n"
+"_0808C8DC: .4byte gUnknown_203B418");
+}
+#endif
+
+void sub_808C8E0(struct unkDungeon_8041D5C *param_1)
+{
+ s32 iVar1;
+
+ sub_8083E38(0x1a5);
+ sub_806CDD4(param_1, 0, 0);
+ for(iVar1 = 0; iVar1 < 16; iVar1++){
+ param_1->unk70->unk174 = iVar1 << 8;
+ sub_803E46C(0x46);
+ }
+ for(iVar1 = 16; iVar1 < 200; iVar1 += 4){
+ param_1->unk70->unk174 = iVar1 << 8;
+ sub_803E46C(0x46);
+ }
+ sub_8086A3C(param_1);
+}
+
+void sub_808C938(void)
+{
+ sub_80855E4(sub_808C9B0);
+}
+
+void sub_808C948(struct unkDungeon_8041D5C *param_1, u8 param_2)
+{
+ bool8 flag;
+ s32 iVar3;
+ struct unkDungeon_8041D5C *iVar2;
+
+ if (param_2 == 0x37) {
+ flag = FALSE;
+ for(iVar3 = 0; iVar3 < 0x10; iVar3++){
+ iVar2 = gUnknown_203B418->unk1358C[iVar3];
+ if ((iVar2 != param_1) && (sub_80450E0(iVar2) != 0)) {
+ flag = TRUE;
+ break;
+ }
+ }
+ if (!flag) {
+ gUnknown_203B418->unk2 = 1;
+ }
+ }
+}
+
+void sub_808C998(void)
+{
+ // Defeat the opposing team to win
+ // Be careful, your opponents are tough
+ sub_8052910(&gUnknown_8106720);
+ sub_803E708(0xA, 0x46);
+}
+
+void sub_808C9B0(struct unkDungeon_8041D5C *param_1)
+{
+ param_1->unk70->unk46 = 4;
+ sub_806CE68(param_1, 4);
+}
void sub_808C9C4(void)
{
- s16 *array;
- u32 temp_2;
+ struct unkDungeon_8041D5C *temp;
+ struct unkDungeon_8041D5C *temp_2;
- array = sub_8085480();
+ temp = sub_8085480();
temp_2 = sub_8085680(7);
sub_8083E88(0x72);
sub_80854D4();
- sub_8085930(0x4);
+ sub_8085930(4);
sub_80855E4(sub_8086A3C);
sub_8085918(temp_2, 0);
- sub_8085860(array[2], array[3] - 3);
+ sub_8085860(temp->unk4, temp->unk6 - 3);
CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_MEDICHAM);
}
-void sub_808CA1C(void)
+// Medicham Rescue Dialogue?
+void MedichamResuceDialogue(void)
{
- u32 temp;
+ struct unkDungeon_8041D5C *temp;
s32 counter;
temp = sub_8085680(7);
sub_808696C();
sub_803E708(0xA, 0x46);
+ // Oh my I can't seem to find a way out...
sub_8052910(&gUnknown_8106778);
sub_803E708(0xA, 0x46);
sub_80869E4(temp, 4, 2, 4);
sub_803E708(0xA, 0x46);
+ // What am I to do...?
sub_8052910(&gUnknown_81067BC);
sub_803E708(0xA, 0x46);
sub_8086448();
@@ -85,6 +1175,10 @@ void sub_808CA1C(void)
sub_8083E38(0x1c7);
sub_806CDD4(temp, 0xA, 0);
sub_803E708(0x14, 0x46);
+ // Yes Yes
+ // I am so lucky
+ //
+ // There appears to be no one here
sub_8052910(&gUnknown_8106834);
sub_803E708(0xA, 0x46);
sub_806CDD4(temp, 0, 0);
@@ -97,57 +1191,63 @@ void sub_808CA1C(void)
sub_803E708(0x20, 0x46);
sub_8042B0C(temp);
sub_8068FE0(temp, 0x87 << 2, 0);
- gUnknown_203B418[4] = 1;
- gUnknown_203B418[0x11] = 4;
+ gUnknown_203B418->unk4 = 1;
+ gUnknown_203B418->unk11 = 4;
}
void sub_808CB5C(void)
{
- s16 *array;
- u32 temp_2;
+ struct unkDungeon_8041D5C *temp;
+ struct unkDungeon_8041D5C *temp_2;
- array = sub_8085480();
+ temp = sub_8085480();
temp_2 = sub_8085680(7);
sub_8083E88(0x72);
sub_80854D4();
- sub_8085930(0x4);
+ sub_8085930(4);
sub_8068FE0(temp_2, 0x87 << 2, 0);
- sub_8085860(array[2], array[3]);
+ sub_8085860(temp->unk4, temp->unk6);
CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_MEDICHAM);
}
-void nullsub_101(void)
+void DummyFightDialogue(void)
{
}
void sub_808CBB0(void)
{
- s16 *array;
- u32 temp_2;
+ struct unkDungeon_8041D5C *temp;
+ struct unkDungeon_8041D5C *temp_2;
- array = sub_8085480();
+ temp = sub_8085480();
temp_2 = sub_8085680(0x1F);
sub_8083E88(0x72);
sub_80854D4();
sub_8085930(4);
sub_80855E4(sub_8086A3C);
sub_8085918(temp_2, 0);
- sub_8085860(array[2], array[3] - 3);
+ sub_8085860(temp->unk4, temp->unk6 - 3);
CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SMEARGLE);
}
-void sub_808CC04(void)
+// Smeargle Rescue dialogue scene
+void SmeargleRescueDialogue(void)
{
- u32 temp;
+ struct unkDungeon_8041D5C *temp;
s32 counter;
temp = sub_8085680(0x1F);
sub_808696C();
sub_803E708(0xA, 0x46);
+ // Ohhh...
+ // I've lost my bearings
sub_8052910(&gUnknown_810688C);
sub_803E708(0xA, 0x46);
sub_80869E4(temp, 4, 2, 4);
sub_803E708(0xA, 0x46);
+ // I can't get out...
+ // I'm hungry...
+ // I'm in trouble
sub_8052910(&gUnknown_81068D0);
sub_803E708(0xA, 0x46);
sub_8086448();
@@ -156,6 +1256,7 @@ void sub_808CC04(void)
sub_80862BC(temp);
sub_803E708(0x20, 0x46);
sub_80869E4(temp, 4, 2, 0);
+ // Oh! You are?
sub_8052910(&gUnknown_8106918);
sub_803E708(0xA, 0x46);
sub_8083E38(0x1c7);
@@ -166,6 +1267,8 @@ void sub_808CC04(void)
sub_8083E38(0x1c7);
sub_806CDD4(temp, 0xA, 0);
sub_803E708(0x14, 0x46);
+ // Did you maybe come to rescue me?
+ // Am I glad to see you
sub_8052910(&gUnknown_8106934);
sub_803E708(0xA, 0x46);
sub_806CDD4(temp, 0, 0);
@@ -178,24 +1281,36 @@ void sub_808CC04(void)
sub_803E708(0x20, 0x46);
sub_8042B0C(temp);
sub_8068FE0(temp, 0x87 << 2, 0);
- gUnknown_203B418[4] = 1;
- gUnknown_203B418[0x11] = 4;
+ gUnknown_203B418->unk4 = 1;
+ gUnknown_203B418->unk11 = 4;
}
void sub_808CD44(void)
{
- s16 *array;
- u32 temp_2;
+ struct unkDungeon_8041D5C *temp;
+ struct unkDungeon_8041D5C *temp_2;
- array = sub_8085480();
+ temp = sub_8085480();
temp_2 = sub_8085680(0x1F);
sub_8083E88(0x72);
sub_80854D4();
- sub_8085930(0x4);
+ sub_8085930(4);
sub_80855E4(sub_8086A3C);
sub_8068FE0(temp_2, 0x87 << 2, 0);
- sub_8085860(array[2], array[3] - 3);
+ sub_8085860(temp->unk4, temp->unk6 - 3);
CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SMEARGLE);
}
+void sub_808CD9C(u8 r0)
+{
+ sub_8086448();
+ // There appears to be no one here.
+ // It's impossible to go any further
+ sub_80866C4(&gUnknown_810697C);
+}
+
+u64 *sub_808CDB0(u8 r0)
+{
+ return &gUnknown_8107544[r0];
+}
diff --git a/src/code_8057824.c b/src/code_8057824.c
new file mode 100644
index 0000000..edc338d
--- /dev/null
+++ b/src/code_8057824.c
@@ -0,0 +1,118 @@
+#include "global.h"
+#include "gUnknown_203B418.h"
+#include "code_8041D5C.h"
+
+extern struct unkStruct_203B418 *gUnknown_203B418;
+
+extern u32 gUnknown_80FCF74;
+extern u32 gUnknown_80FCF80;
+extern u16 gUnknown_80F4F42;
+
+extern u32 gUnknown_8106A50;
+extern u32 gUnknown_8106A4C;
+extern s16 gUnknown_80F4DB6;
+extern u32 gUnknown_80FAC88;
+
+extern void sub_80775DC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32);
+extern void sub_80772C0(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32, u32);
+extern u8 sub_807EAA0(u32, u32);
+extern void sub_80522F4(struct unkDungeon_8041D5C *r1, struct unkDungeon_8041D5C *r2, u32);
+extern void sub_8079F20(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32);
+
+extern u8 sub_805727C(u32, u32, s16);
+extern u32 sub_8055640(u32, u32, u32, u32, u32);
+extern void sub_80779F0(u32, u32, u32, u32);
+extern void sub_8078968();
+extern void sub_8079618(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32, u32);
+
+extern void sub_806F370(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32, u8 *, u8, s32, u32, u32, u32);
+
+
+
+extern u32 gUnknown_80FD018;
+extern s16 sub_8057600(u32, u32);
+extern u32 sub_8092B00(u32);
+
+u32 sub_8057824(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
+{
+ sub_80775DC(param_1,param_2,gUnknown_8106A50,1);
+ return 1;
+}
+
+u32 sub_805783C(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
+{
+ sub_80772C0(param_1,param_2,gUnknown_8106A4C,0x80,1);
+ return 1;
+}
+
+u32 sub_805785C(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
+{
+ gUnknown_203B418->unkE26B = gUnknown_80F4F42;
+ if (sub_807EAA0(1,0) == '\0') {
+ // The weather remains unchanged
+ sub_80522F4(param_1,param_2,gUnknown_80FCF74);
+ }
+ return 1;
+}
+
+u32 sub_80578A4(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
+{
+ gUnknown_203B418->unkE26C = gUnknown_80F4F42;
+ if (sub_807EAA0(1,0) == '\0') {
+ // The weather remains unchanged
+ sub_80522F4(param_1,param_2,gUnknown_80FCF80);
+ }
+ return 1;
+}
+
+u32 sub_80578EC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
+{
+ sub_8079F20(r0, r1, 1, 0);
+ return 1;
+}
+
+u32 sub_80578FC(u32 param_1, u32 param_2, u32 param_3, u32 param_4)
+{
+ u32 uVar3;
+
+ uVar3 = 0;
+ if (sub_8055640(param_1, param_2, param_3, 0x80 << 1, param_4) != 0) {
+ uVar3 = 1;
+ if (sub_805727C(param_1,param_2, gUnknown_80F4DB6) != '\0') {
+ sub_80779F0(param_1, param_2, 1, 0);
+ }
+ }
+ return uVar3;
+}
+
+u32 sub_8057948(void)
+{
+ sub_8078968();
+ return 1;
+}
+
+u32 sub_8057954(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2, u32 param_3)
+{
+ // $m0 is enraged
+ sub_8079618(param_1,param_2,0xc,param_3,gUnknown_80FAC88);
+ return 1;
+}
+
+u8 sub_8057974(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2, u32 param_3, u32 param_4)
+{
+ s32 newHP;
+ u8 local_24;
+
+ newHP = param_2->unk70->unkE / 2;
+ local_24 = 0;
+ if (newHP != 0) {
+ sub_806F370(param_1,param_2,newHP,1,&local_24,sub_8092B00(param_3),sub_8057600(param_3,param_4),0,1,0);
+ local_24 = local_24 == 0;
+ }
+ else
+ {
+ // The target's HP can't be halved anymore
+ sub_80522F4(param_1,param_2,gUnknown_80FD018);
+ }
+ return local_24;
+}
diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c
new file mode 100644
index 0000000..c11a8c9
--- /dev/null
+++ b/src/code_8057824_1.c
@@ -0,0 +1,2661 @@
+#include "global.h"
+#include "gUnknown_203B418.h"
+#include "code_8041D5C.h"
+#include "constants/species.h"
+
+extern struct unkStruct_203B418 *gUnknown_203B418;
+
+extern u32 gUnknown_202EDC8;
+extern u8 gUnknown_202E038[0x50];
+extern u8 gAvailablePokemonNames[0x58];
+
+extern u32 gUnknown_8105244;
+extern u32 gUnknown_810517C;
+extern u32 gUnknown_81050B4;
+extern u32 gUnknown_81051D0;
+extern u32 gUnknown_810510C;
+extern u32 gUnknown_8105040;
+extern u32 gUnknown_810554C;
+extern u32 gUnknown_8105558;
+extern u32 gUnknown_81055F4;
+extern u32 gUnknown_8105028;
+extern u32 gUnknown_8104FD4;
+extern u32 gUnknown_8104930;
+extern u32 gUnknown_8104980;
+extern u32 gUnknown_8104998;
+extern u32 gUnknown_8105034;
+extern u32 gUnknown_8105438;
+extern u32 gUnknown_81054A0;
+extern u32 gUnknown_81054E4;
+extern u32 gUnknown_810550C;
+extern u32 gUnknown_8104F64;
+extern u32 gUnknown_8104EFC;
+extern u32 gUnknown_8104F30;
+extern u32 gUnknown_8104E60;
+extern u32 gUnknown_8104CEC;
+extern u32 gUnknown_8104D60;
+extern u32 gUnknown_8104DDC;
+extern u32 gUnknown_8104E0C;
+extern u32 gUnknown_8104E54;
+extern u32 gUnknown_8104AD4;
+extern u32 gUnknown_8104BEC;
+extern u32 gUnknown_8104C10;
+extern u32 gUnknown_8104C54;
+extern u32 gUnknown_8104CB4;
+extern u32 gUnknown_8104CE0;
+extern u32 gUnknown_8104AC8;
+extern u32 gUnknown_81049D4;
+extern u32 gUnknown_8104A80;
+extern u32 gUnknown_8104A9C;
+extern u32 gUnknown_8104784;
+extern u32 gUnknown_8104790;
+extern u32 gUnknown_81047B0;
+extern u32 gUnknown_810484C;
+extern u32 gUnknown_8104888;
+extern u32 gUnknown_81048C8;
+extern u32 gUnknown_8104914;
+extern u32 gUnknown_810476C;
+extern u32 gUnknown_8104778;
+extern u32 gUnknown_81046CC;
+extern u32 gUnknown_8104744;
+extern u32 gUnknown_81045F8;
+extern u32 gUnknown_8104674;
+extern u32 gUnknown_81046A0;
+extern u32 gUnknown_8104450;
+extern u32 gUnknown_81044B4;
+extern u32 gUnknown_8104510;
+extern u32 gUnknown_810453C;
+extern u32 gUnknown_8104570;
+extern u32 gUnknown_81045B0;
+extern u32 gUnknown_81043DC;
+extern u32 gUnknown_8104310;
+extern u32 gUnknown_810439C;
+extern u32 gUnknown_81043C0;
+extern u32 gUnknown_8104240;
+extern u32 gUnknown_81042AC;
+extern u32 gUnknown_81042B8;
+extern u32 gUnknown_8104FC8;
+extern u32 gUnknown_8104150;
+extern u32 gUnknown_81041AC;
+extern u32 gUnknown_81041F8;
+extern u32 gUnknown_8104144;
+extern u32 gUnknown_8104114;
+extern u32 gUnknown_81040CC;
+extern u32 gUnknown_8104050;
+extern u32 gUnknown_8104044;
+extern u32 gUnknown_8104008;
+extern u32 gUnknown_8103EA4;
+extern u32 gUnknown_8103F0C;
+extern u32 gUnknown_8103F4C;
+extern u32 gUnknown_8103FCC;
+extern u32 gUnknown_8103E34;
+
+extern struct unkDungeon_8041D5C *sub_8085480(void);
+extern struct unkDungeon_8041D5C *sub_8085680(u32);
+extern void sub_808BBA8(struct unkDungeon_8041D5C * );
+extern void CopySpeciesNametoBuffer(char *r0, u32 r1);
+extern void sub_80855E4(void *);
+extern void sub_8041888(u32);
+extern void sub_80861B8(struct unkDungeon_8041D5C *, u32, u32);
+extern void sub_8083ED8(u32);
+extern void sub_803E708(u32, u32);
+extern void sub_8052910(u32 *r0);
+extern void sub_8083E88(u32);
+extern void sub_808BC20(struct unkDungeon_8041D5C *);
+
+extern void sub_80862BC(struct unkDungeon_8041D5C *);
+extern void sub_8086448();
+extern void sub_808696C();
+extern u32 sub_80861F8(u32, struct unkDungeon_8041D5C *, u32);
+extern void sub_8086A70(struct unkDungeon_8041D5C *, u32, u32);
+extern void sub_80858AC(u32 *, u32);
+
+extern void sub_8097FA8(u32);
+extern void JirachiWish();
+extern u8 sub_80860A8(u32);
+extern void sub_8040A84();
+extern void sub_8086A3C(struct unkDungeon_8041D5C *);
+extern u8 HasRecruitedMon(u32);
+extern void sub_80854D4();
+extern void sub_8085930(u32);
+extern void sub_8068FE0(struct unkDungeon_8041D5C *, u32, u32);
+extern void sub_8085918(struct unkDungeon_8041D5C *, u32);
+extern void sub_8049ED4();
+extern void sub_8085860(s16 r0, u32 r1);
+extern void sub_806CE68(struct unkDungeon_8041D5C *, u32);
+
+extern void sub_8052D44(u8 *, struct unkDungeon_8041D5C *, struct unkDungeon_8041D5C *);
+extern void sub_8097FD0(u32);
+extern void sub_8045B94(u8 *, struct unkDungeon_8041D5C *, u32);
+extern struct unkDungeon_8041D5C *sub_8083600();
+extern void sub_80421C0(struct unkDungeon_8041D5C *, u32);
+extern void sub_8046D20();
+extern void sub_808B1CC(u8);
+extern void sub_8090A8C(u8 *, u32, u32);
+extern void sub_80464C8(struct unkDungeon_8041D5C *, u32, u8 *);
+extern void sub_8098044(u32);
+extern void sub_8083E38(u32);
+extern void sub_8085C54(u32, u32, u32, u32, u32);
+extern void sub_803E46C(u32);
+extern void sub_8085EB0();
+extern void sub_80866C4(u32 *);
+extern void sub_808692C();
+
+extern void sub_8083E58(u32);
+extern void sub_80868F4();
+extern void sub_8086910();
+extern u32 sub_8085EC8(u32, u32, u32, u32 *, u32);
+extern void sub_808680C();
+extern void sub_808682C();
+extern void sub_8086854();
+extern void sub_80867F4();
+extern void sub_8086838(u32, u32, u32);
+extern void sub_80426C8(u32, u32);
+extern void sub_807EAA0(u32, u32);
+
+extern void sub_808563C(void *);
+extern void sub_808BCE4(void);
+extern void sub_808BBB8(struct unkDungeon_8041D5C *param_1);
+extern u8 sub_8098100(u32);
+extern void sub_8086794();
+
+void EnteiScreenFlash(void);
+void RaikouScreenFlash(void);
+void sub_808A528(struct unkDungeon_8041D5C * param_1);
+void SuicuneScreenFlash();
+void sub_808A904(struct unkDungeon_8041D5C * param_1);
+void HoOhScreenFlash(void);
+void LatiosScreenFlash(void);
+void sub_808B2B0(struct unkDungeon_8041D5C *r0);
+void sub_808B2C4(struct unkDungeon_8041D5C *r0);
+void sub_808B2D4(struct unkDungeon_8041D5C *r0);
+void sub_808B2E4(struct unkDungeon_8041D5C *r0);
+void sub_808B50C(void);
+void sub_8089B64(struct unkDungeon_8041D5C *param_1);
+void MewtwoScreenFlash(void);
+void sub_80898F8(struct unkDungeon_8041D5C *r0);
+void sub_8089908(struct unkDungeon_8041D5C *r0);
+void sub_8089620(struct unkDungeon_8041D5C *param_1);
+void RayquazaScreenFlash(void);
+void sub_80891F0(void);
+void sub_8089294(void);
+void sub_80891B0();
+void sub_8089224();
+void sub_80891D0();
+void sub_808919C();
+void sub_8088D30(void);
+
+extern void sub_8083F14();
+extern u8 sub_80450E0(struct unkDungeon_8041D5C *);
+extern u8 sub_8086AE4(u32);
+
+extern u32 gUnknown_8103D8C;
+extern u32 gUnknown_8103D98;
+extern u32 gUnknown_8103DD8;
+extern u32 gUnknown_8103E28;
+extern u32 gUnknown_8103BD8;
+extern u32 gUnknown_8103C00;
+extern u32 gUnknown_8103C3C;
+extern u32 gUnknown_8103C74;
+extern u32 gUnknown_8103CC4;
+extern u32 gUnknown_8103D0C;
+extern u32 gUnknown_8103D50;
+extern u32 gUnknown_8103B58;
+extern u32 gUnknown_8103904;
+extern u32 gUnknown_8103938;
+extern u32 gUnknown_8103AA4;
+extern u32 gUnknown_8103AE4;
+extern u32 gUnknown_8103B30;
+extern u32 gUnknown_8103690;
+extern u32 gUnknown_8103844;
+extern u32 gUnknown_8103874;
+extern u32 gUnknown_81038A8;
+extern u32 gUnknown_81038F8;
+extern u32 gUnknown_8103500;
+extern u32 gUnknown_810352C;
+extern u32 gUnknown_8103578;
+extern u32 gUnknown_81035D4;
+extern u32 gUnknown_8103618;
+extern u32 gUnknown_810367C;
+extern u32 gUnknown_8103690;
+extern u32 gUnknown_81036C8;
+extern u32 gUnknown_81037A0;
+extern u32 gUnknown_81037D4;
+extern u32 gUnknown_8103820;
+extern s16 gUnknown_80F57CA;
+extern u32 gUnknown_8102C30;
+extern u32 gUnknown_8102C54;
+extern u32 gUnknown_8102C98;
+extern u32 gUnknown_8102CB0;
+extern u32 gUnknown_8102CF8;
+extern u32 gUnknown_8102D34;
+extern u32 gUnknown_8102D4C;
+extern u32 gUnknown_8102D7C;
+extern u32 gUnknown_8102DFC;
+extern u32 gUnknown_8102E2C;
+extern u32 gUnknown_8102E54;
+extern u32 gUnknown_8102BE4;
+extern u32 gUnknown_8102BC4;
+extern u32 gUnknown_8102B54;
+extern u32 gUnknown_8102B1C;
+extern u32 gUnknown_8103488;
+extern u32 gUnknown_81033A0;
+extern u32 gUnknown_81033AC;
+extern u32 gUnknown_810343C;
+extern u32 gUnknown_810347C;
+extern u32 gUnknown_8103188;
+extern u32 gUnknown_8103228;
+extern u32 gUnknown_8103310;
+extern u32 gUnknown_8103340;
+extern u32 gUnknown_8102E70;
+extern u32 gUnknown_8102EBC;
+extern u32 gUnknown_8102EE0;
+extern u32 gUnknown_8102EF8;
+extern u32 gUnknown_8102F30;
+extern u32 gUnknown_8102F64;
+extern u32 gUnknown_8102F84;
+extern u32 gUnknown_8102FAC;
+extern u32 gUnknown_8102FC4;
+extern u32 gUnknown_8102FD8;
+extern u32 gUnknown_8103054;
+extern u32 gUnknown_81030D8;
+extern u32 gUnknown_8103110;
+extern u32 gUnknown_8103140;
+extern s16 gUnknown_80F57D2;
+
+extern void sub_8072008(struct unkDungeon_8041D5C *, struct unkDungeon_8041D5C *, s16, u32, u32);
+extern struct unkDungeon_8041D5C *sub_808548C();
+extern void sub_80856E0(struct unkDungeon_8041D5C *, u32);
+extern void sub_80869E4(struct unkDungeon_8041D5C *, u32, u32, u32);
+extern void sub_804539C(struct unkDungeon_8041D5C *, u32, u32);
+extern void sub_806CDD4(struct unkDungeon_8041D5C *, u32, u32);
+extern void sub_8085374();
+
+extern void sub_8086848(u32 ,u32);
+extern void sub_80856C8(struct unkDungeon_8041D5C *, s32, s32);
+extern void sub_80861D4(struct unkDungeon_8041D5C *, u32, u32);
+void sub_8088C08(struct unkDungeon_8041D5C * param_1);
+void sub_8088CA0(void);
+extern void sub_8086738();
+extern void sub_8086A54(struct unkDungeon_8041D5C *);
+extern void sub_8086764();
+
+extern u32 sub_803F994();
+extern s32 sub_803F9B0();
+extern void sub_803F878(u32,s32);
+
+void sub_80886C4(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ u32 uVar4;
+ s32 iVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(10);
+ uVar3 = sub_8085680(0xe);
+ sub_8083E38(0x3e5);
+ sub_80867F4();
+ sub_8085374();
+ sub_80854D4();
+ sub_8085930(4);
+ sub_8068FE0(uVar2,0x21c,0);
+ sub_8085918(uVar3,0);
+ sub_8086A3C(uVar3);
+ sub_8085860(iVar1->unk4,iVar1->unk6);
+ uVar4 = sub_803F994();
+ iVar2 = sub_803F9B0();
+ sub_803F878(uVar4,iVar2 + -0x1000);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_GROUDON);
+ CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_ALAKAZAM);
+}
+
+void sub_808875C(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+ struct unkDungeon_8041D5C * uVar4;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(10);
+ uVar4 = sub_8085680(0xe);
+ sub_80867F4();
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ sub_8068FE0(uVar3,0x21c,0);
+ if (sub_8086AE4(0x19b) != '\0') {
+ sub_8068FE0(uVar4,0x21c,0);
+ }
+ else {
+ sub_8072008(uVar4,uVar4,gUnknown_80F57D2,0,0);
+ sub_8085918(uVar4,0);
+ sub_80861D4(uVar4,0xf,0);
+ }
+ sub_8085860(iVar2->unk4,iVar2->unk6 - 3);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_GROUDON);
+ CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_ALAKAZAM);
+}
+
+void sub_8088818(char param_1, s32 param_2)
+{
+ if ((((param_2 * 0x1000000) + 0xEE000000U) >> 0x18 < 3) && (param_1 == 0xE)) {
+ sub_8097FA8(0xC);
+ gUnknown_203B418->unk2 = 1;
+ }
+}
+
+void sub_8088848(void)
+{
+ sub_8086854();
+}
+
+void GroudonPreFightDialogue(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+ struct unkDungeon_8041D5C * uVar3;
+ struct unkDungeon_8041D5C * uVar4;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_808548C();
+ uVar3 = sub_8085680(10);
+ uVar4 = sub_8085680(0xe);
+ sub_8086448();
+ sub_8052910(&gUnknown_8102E70);
+ sub_803E708(10,0x46);
+ sub_803E708(0x3c,0x46);
+ sub_8052910(&gUnknown_8102EBC);
+ sub_803E708(10,0x46);
+ sub_8086838(1,1,1);
+ sub_808680C();
+ sub_803E708(0x3c,0x46);
+ sub_808682C();
+ sub_803E708(0x1e,0x46);
+ sub_8052910(&gUnknown_8102EE0);
+ sub_803E708(10,0x46);
+ sub_8086838(1,1,1);
+ sub_808680C();
+ sub_803E708(0x3c,0x46);
+ sub_8052910(&gUnknown_8102EF8);
+ sub_803E708(10,0x46);
+ sub_8088CA0();
+ sub_8052910(&gUnknown_8102F30);
+ sub_803E708(10,0x46);
+ sub_8052910(&gUnknown_8102F64);
+ sub_803E708(10,0x46);
+ sub_8083E38(0x1d5);
+ sub_808696C(uVar2);
+ sub_8052910(&gUnknown_8102F84);
+ sub_803E708(10,0x46);
+ sub_808682C();
+ sub_803E708(0x3c,0x46);
+ sub_80861B8(uVar3,6,4);
+ sub_8083E38(0x205);
+ sub_8086738();
+ sub_8068FE0(uVar3,0x21c,0);
+ sub_8052910(&gUnknown_8102FAC);
+ sub_803E708(10,0x46);
+ sub_8052910(&gUnknown_8102FC4);
+ sub_803E708(10,0x46);
+ sub_8085930(4);
+ sub_8086764();
+ sub_803E708(0x28,0x46);
+ sub_8083E38(0x1d5);
+ sub_808696C(uVar2);
+ sub_8052910(&gUnknown_8102FD8);
+ sub_803E708(10,0x46);
+ sub_8086838(1,1,1);
+ sub_808680C();
+ sub_803E708(0x3c,0x46);
+ sub_8052910(&gUnknown_8103054);
+ sub_803E708(10,0x46);
+ sub_8083F14();
+ sub_8088D30();
+ sub_803E708(0x1e,0x46);
+ sub_8052910(&gUnknown_81030D8);
+ sub_803E708(10,0x46);
+ sub_8052910(&gUnknown_8103110);
+ sub_803E708(10,0x46);
+ sub_803E708(0x1e,0x46);
+ sub_808682C();
+ sub_803E708(0x3c,0x46);
+ sub_8083E38(0x1fa);
+ sub_8086738();
+ sub_8085930(4);
+ sub_8052910(&gUnknown_8103140);
+ sub_803E708(10,0x46);
+ sub_8086A54(uVar4);
+ sub_8085930(4);
+ sub_8086764();
+ sub_8086A70(uVar4,500,0xb);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void GroudonReFightDialogue(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0xe);
+ sub_8086838(1,1,1);
+ sub_808680C();
+ sub_803E708(0x3c,0x46);
+ sub_8052910(&gUnknown_8103188);
+ sub_803E708(10,0x46);
+ sub_8088CA0();
+ sub_803E708(0x1e,0x46);
+ sub_8052910(&gUnknown_8103228);
+ sub_803E708(10,0x46);
+ sub_8052910(&gUnknown_8103310);
+ sub_803E708(10,0x46);
+ sub_808682C();
+ sub_803E708(0x3c,0x46);
+ sub_8083F14();
+ sub_8083E38(0x1fa);
+ sub_8086738();
+ sub_8052910(&gUnknown_8103340);
+ sub_803E708(10,0x46);
+ sub_8086A54(uVar2);
+ sub_8085930(4);
+ sub_8086764();
+ sub_8086A70(uVar2,500,0xb);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void GroudonPostStoryPreFightDialogue(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0xe);
+ sub_8086448();
+ if (sub_8086AE4(SPECIES_GROUDON)) {
+ sub_80866C4(&gUnknown_8103488);
+ }
+ else{
+ sub_8052910(&gUnknown_81033A0);
+ sub_803E708(10,0x46);
+ sub_8088C08(uVar3);
+ sub_8088C08(uVar3);
+ sub_8052910(&gUnknown_81033AC);
+ sub_8083E38(0x1f6);
+ sub_8088CA0();
+ sub_8052910(&gUnknown_810343C);
+ sub_8083E38(0x1f6);
+ sub_8088CA0();
+ sub_8052910(&gUnknown_810347C);
+ sub_803E708(10,0x46);
+ sub_8086A70(uVar3,500,0xb);
+ sub_80858AC(&iVar2->unkC,0x10);
+ }
+}
+
+void sub_8088C08(struct unkDungeon_8041D5C * param_1)
+{
+ int iVar1;
+
+ sub_8086848(0x18,0x10);
+ sub_806CDD4(param_1,0,0);
+ for(iVar1 = 0; iVar1 < 0x2C; iVar1++)
+ {
+ if ((iVar1 == 10) || (iVar1 == 0x20)) {
+ sub_8083E38(0x1f9);
+ sub_8086838(0,1,0);
+ sub_808680C();
+ }
+ if ((iVar1 - 10U < 0xc) || (iVar1 > 0x1f)) {
+ sub_804539C(param_1,0,0x100);
+ }
+ sub_803E46C(0x46);
+ }
+ sub_80856C8(param_1,param_1->unk4,param_1->unk6 + 1);
+ sub_80861D4(param_1,0xf,0);
+ sub_803E708(10,0x46);
+ sub_808682C();
+ sub_8085930(4);
+ sub_803E708(0x22,0x46);
+}
+
+void sub_8088CA0(void)
+{
+ s32 iVar1;
+
+ for(iVar1 = 250; iVar1 > 0x95; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1 / 2,iVar1 / 2,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+
+ for(iVar1 = 250; iVar1 > 199; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1 / 2,0,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+
+ for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1 / 2,iVar1 / 2,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+ sub_8085EB0();
+}
+
+void sub_8088D30(void)
+{
+ s32 iVar1;
+
+ for(iVar1 = 250; iVar1 > 0x95; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1 / 2,iVar1 / 2,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+
+ for(iVar1 = 250; iVar1 > 199; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1 / 2,0,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+
+ for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1 / 2,iVar1 / 2,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+ sub_8085EB0();
+}
+
+
+void sub_8088DC0(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0xb);
+ uVar3 = sub_8085680(0xc);
+ sub_80867F4();
+ sub_8086838(0,1,0);
+ sub_8085374();
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ sub_8086A3C(uVar2);
+ sub_806CDD4(uVar2,0xe,0);
+ sub_8086A3C(uVar3);
+ sub_806CDD4(uVar3,0xe,0);
+ sub_8085860(iVar1->unk4,iVar1->unk6 - 3);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_GROUDON);
+ CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_ALAKAZAM);
+}
+
+void sub_8088E5C(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0xb);
+ uVar3 = sub_8085680(0xc);
+ sub_80867F4();
+ sub_8086838(0,1,0);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ sub_8068FE0(uVar2,0x21c,0);
+ sub_8068FE0(uVar3,0x21c,0);
+ sub_8085860(iVar1->unk4,iVar1->unk6 + -3);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_GROUDON);
+ CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_ALAKAZAM);
+}
+
+void sub_8088EE8(void)
+{
+ sub_8086854();
+}
+
+
+void MagmaCavernMidDialogue(void)
+{
+ struct unkDungeon_8041D5C * uVar1;
+ struct unkDungeon_8041D5C * uVar2;
+ struct unkDungeon_8041D5C * iVar3;
+ struct unkDungeon_8041D5C * iVar4;
+ u8 auStack36 [4];
+ s32 local_20[2];
+
+ uVar1 = sub_8085480();
+ uVar2 = sub_808548C();
+ iVar3 = sub_8085680(0xb);
+ iVar4 = sub_8085680(0xc);
+ sub_8052D44(auStack36,uVar1,uVar2);
+ sub_8086448();
+ sub_808696C(uVar2);
+ // Let's see..
+ // I wonder where we are?
+ sub_8052910(&gUnknown_8102B1C);
+ sub_803E708(10,0x46);
+ sub_80869E4(uVar2,4,1,2);
+ sub_80869E4(uVar1,4,2,6);
+ // I know we've come pretty
+ // far...
+ //
+ // I'm certain we've come quite
+ // far already..
+ sub_8052910(&gUnknown_8102B54);
+ sub_803E708(10,0x46);
+ sub_8083F14();
+ sub_80855E4(sub_80868F4);
+ sub_808680C();
+ sub_8083E38(0x1c5);
+ sub_803E708(0x28,0x46);
+ // Waaah!
+ // Qu-quake!
+ sub_8052910(&gUnknown_8102BC4);
+ sub_803E708(0x78,0x46);
+ sub_8083E58(0x1c5);
+ sub_808682C();
+ sub_80855E4(sub_8086910);
+ sub_803E708(0x14,0x46);
+ sub_8085930(4);
+ sub_803E708(10,0x46);
+ // Whew!
+ // It settled down.
+ //
+ // Whew
+ // It's over.
+ sub_8052910(&gUnknown_8102BE4);
+ sub_803E708(10,0x46);
+ sub_8083E38(0x1d5);
+ sub_808696C(uVar2);
+ sub_8083E38(0x1c7);
+ sub_80856E0(uVar2,4);
+ // Hey! $m0!
+ // Over there!
+ sub_8052910(&gUnknown_8102C30);
+ iVar3->unk70->unk15E = 0;
+ iVar4->unk70->unk15E =0;
+ local_20[0] = (iVar3->unkC + iVar4->unkC) / 2;
+ local_20[1] = (iVar3->unk10 + iVar4->unk10) / 2 + 0x800;
+ sub_80858AC(local_20,0x20);
+ sub_803E708(0x3c,0x46);
+ sub_80891F0();
+ // Hey!
+ // Are you OK?!
+ //
+ // Hey!
+ // Snap out of it!
+ sub_8052910(&gUnknown_8102C54);
+ sub_803E708(10,0x46);
+ // Urrrrgh...
+ sub_8052910(&gUnknown_8102C98);
+ sub_803E708(10,0x46);
+ sub_80869E4(uVar1,4,2,5);
+ // What happened to you?
+ //
+ // What happened here?
+ sub_8052910(&gUnknown_8102CB0);
+ sub_803E708(10,0x46);
+ // We challenged..
+ // $m2...
+ // And wiped out..
+ sub_8052910(&gUnknown_8102CF8);
+ sub_803E708(10,0x46);
+ sub_8052910(&gUnknown_8102D34);
+ sub_803E708(10,0x46);
+ sub_80869E4(uVar1,4,1,3);
+ sub_80869E4(uVar2,4,1,3);
+ // Grrgh..
+ // We... It crushed us
+ sub_8052910(&gUnknown_8102D4C);
+ sub_803E708(10,0x46);
+ sub_8083E38(0x1d5);
+ sub_808696C(uVar2);
+ // That's right...
+ // What happened to $m3?
+ // Where is $m3?
+ //
+ // Wait...
+ // What about $m3?
+ // Where did $m3 go?
+ sub_8052910(&gUnknown_8102D7C);
+ sub_803E708(0x1e,0x46);
+ // $m3 is...
+ // Still battling $m2...
+ sub_8052910(&gUnknown_8102DFC);
+ sub_803E708(10,0x46);
+ sub_80869E4(uVar2,4,1,2);
+ sub_80869E4(uVar1,4,2,6);
+ // $m0!
+ // We've got to hurry!
+ sub_8052910(&gUnknown_8102E2C);
+ sub_8089294();
+ // Be careful!
+ sub_8052910(&gUnknown_8102E54);
+ sub_803E708(10,0x46);
+ gUnknown_203B418->unk2 = 1;
+}
+
+void sub_8089168(void)
+{
+ struct unkDungeon_8041D5C *iVar1;
+
+ iVar1 = sub_8085480();
+ sub_8086448();
+ sub_803E708(10,0x46);
+ sub_808696C(iVar1);
+ sub_803E708(10,0x46);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void sub_808919C(struct unkDungeon_8041D5C *r0)
+{
+ sub_804539C(r0, 0, 0xfffffe00);
+}
+
+void sub_80891B0(struct unkDungeon_8041D5C *r0)
+{
+ sub_806CDD4(r0, 0, 4);
+ r0->unk70->unk15F = 1;
+}
+
+
+void sub_80891D0(struct unkDungeon_8041D5C *r0)
+{
+ sub_806CDD4(r0, 7, 4);
+ r0->unk70->unk15F = 0;
+}
+
+void sub_80891F0(void)
+{
+ s32 iVar1;
+
+ sub_80855E4(sub_80891B0);
+ for(iVar1 = 0; iVar1 < 0x30; iVar1++)
+ {
+ sub_80855E4(sub_808919C);
+ sub_803E46C(0x46);
+ }
+ sub_80855E4(sub_80891D0);
+}
+
+void sub_8089224(struct unkDungeon_8041D5C * param_1)
+{
+ s32 iVar1;
+
+ if (param_1->unk10 < 0x9001) {
+ return;
+ }
+ iVar1 = param_1->unkC;
+
+ if(iVar1 < 0xE400)
+ {
+ if(iVar1 <= 0xB400)
+ {
+ // 0 - 0xB400
+ sub_804539C(param_1, 0, 0xfffffe00);
+ }
+ else
+ {
+ // 0xB401 - 0xE3FF
+ sub_804539C(param_1, 0xfffffe00, 0);
+ }
+ }
+ else
+ {
+ if(iVar1 < 0xFC00)
+ {
+ sub_804539C(param_1, 0, 0xfffffe00);
+ }
+ else
+ {
+ if(iVar1 <= 0x11400)
+ {
+ sub_804539C(param_1, 0x200, 0);
+ }
+ else
+ {
+ sub_804539C(param_1, 0, 0xfffffe00);
+ }
+ }
+ }
+}
+
+void sub_8089294(void)
+{
+ s32 iVar1;
+
+ sub_80855E4(sub_80891B0);
+ for(iVar1 = 0; iVar1 <= 0x77; iVar1++)
+ {
+ sub_80855E4(sub_8089224);
+ sub_803E46C(0x46);
+ }
+ sub_80855E4(sub_80891D0);
+}
+
+void sub_80892C8(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0xf);
+ sub_8083E88(0x1a);
+ sub_8085374();
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ sub_8085918(uVar2,0);
+ sub_8086A3C(uVar2);
+ sub_8085860(iVar1->unk4,iVar1->unk6 - 3);
+ CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_RAYQUAZA);
+}
+
+void sub_8089328(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0xf);
+ sub_8083E88(0x1a);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ if (sub_8086AE4(SPECIES_RAYQUAZA)) {
+ sub_8068FE0(uVar3,0x21c,0);
+ }
+ else {
+ sub_8072008(uVar3,uVar3,gUnknown_80F57CA,0,0);
+ sub_8086A3C(uVar3);
+ }
+ sub_8085860(iVar2->unk4,iVar2->unk6 - 3);
+ CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_RAYQUAZA);
+}
+
+void sub_80893B4(char param_1, s32 param_2)
+{
+ if ((((param_2 * 0x1000000) + 0xE9000000U) >> 0x18 < 3) && (param_1 == 0xF)) {
+ sub_8097FA8(0xF);
+ gUnknown_203B418->unk2 = 1;
+ }
+}
+
+void RayquazaPreFightDialogue(void)
+{
+ struct unkDungeon_8041D5C *iVar1;
+ struct unkDungeon_8041D5C *uVar2;
+ struct unkDungeon_8041D5C *uVar3;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_808548C();
+ uVar3 = sub_8085680(0xf);
+ sub_8086448();
+ sub_8052910(&gUnknown_8103500);
+ RayquazaScreenFlash();
+ sub_8052910(&gUnknown_810352C);
+ sub_80856E0(uVar2,4);
+ sub_808696C(uVar2);
+ sub_803E708(10,0x46);
+ sub_80869E4(uVar2,4,1,2);
+ sub_80869E4(iVar1,4,2,6);
+ sub_8052910(&gUnknown_8103578);
+ sub_80869E4(uVar2,4,2,4);
+ sub_80869E4(iVar1,4,1,4);
+ sub_8052910(&gUnknown_81035D4);
+ sub_803E708(10,0x46);
+ sub_8052910(&gUnknown_8103618);
+ sub_803E708(10,0x46);
+ sub_8052910(&gUnknown_810367C);
+ RayquazaScreenFlash();
+ sub_8083E38(0x1da); // Rayquaza Cry
+ sub_8052910(&gUnknown_8103690);
+ sub_8089620(uVar3);
+ sub_8052910(&gUnknown_81036C8);
+ RayquazaScreenFlash();
+ sub_8052910(&gUnknown_81037A0);
+ RayquazaScreenFlash();
+ sub_8052910(&gUnknown_81037D4);
+ RayquazaScreenFlash();
+ sub_8052910(&gUnknown_8103820);
+ sub_8086A70(uVar3,600,0x20);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void RayquazaReFightDialogue(void)
+{
+ struct unkDungeon_8041D5C *iVar1;
+ struct unkDungeon_8041D5C *uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0xf);
+ sub_8086448();
+ RayquazaScreenFlash();
+ sub_8083E38(0x1da); // Rayquaza Cry
+ sub_8052910(&gUnknown_8103690);
+ sub_803E708(10,0x46);
+ sub_8089620(uVar2);
+ sub_8052910(&gUnknown_8103844);
+ RayquazaScreenFlash();
+ sub_8052910(&gUnknown_8103874);
+ RayquazaScreenFlash();
+ sub_8052910(&gUnknown_81038A8);
+ RayquazaScreenFlash();
+ sub_8052910(&gUnknown_81038F8);
+ sub_8086A70(uVar2,600,0x20);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void RayquazaPostStoryPreFightDialogue(void)
+{
+ struct unkDungeon_8041D5C *iVar2;
+ struct unkDungeon_8041D5C *uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0xf);
+ sub_8086448();
+ if (sub_8086AE4(SPECIES_RAYQUAZA)) {
+ sub_80866C4(&gUnknown_8103B58);
+ }
+ else {
+ sub_8083E38(0x1da); // Rayquaza Cry
+ sub_8052910(&gUnknown_8103904);
+ sub_8089620(uVar3);
+ sub_8052910(&gUnknown_8103938);
+ RayquazaScreenFlash();
+ sub_8052910(&gUnknown_8103AA4);
+ RayquazaScreenFlash();
+ sub_8052910(&gUnknown_8103AE4);
+ RayquazaScreenFlash();
+ sub_8052910(&gUnknown_8103B30);
+ sub_8086A70(uVar3,600,0xb);
+ sub_80858AC(&iVar2->unkC,0x10);
+ }
+}
+
+void sub_8089620(struct unkDungeon_8041D5C *param_1)
+{
+ s32 iVar1;
+ s32 iVar2;
+
+ param_1->unk70->unk15E = 0;
+ iVar2 = 51200;
+ iVar1 = 0x600;
+ sub_8083E38(0x1f8);
+ while( 1 ) {
+ iVar2 = iVar2 - iVar1;
+ iVar1 = iVar1 -= 0x18;
+ if (iVar1 < 0x14) {
+ iVar1 = 0x14;
+ }
+ if (iVar2 < 0) break;
+ param_1->unk70->unk174 = iVar2;
+ sub_803E46C(0x46);
+ }
+ param_1->unk70->unk174 = 0;
+}
+
+void RayquazaScreenFlash(void)
+{
+ s32 iVar1;
+
+ sub_8083E38(0x1f6);
+ for(iVar1 = 250; iVar1 > 149; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1 / 2, iVar1, iVar1 / 2, 1, 1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ for(iVar1 = 250; iVar1 > 199; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1 / 2, iVar1, 0, 1, 1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1 / 2, iVar1, iVar1 / 2, 1, 1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ sub_8085EB0();
+}
+
+
+void sub_808970C(void)
+{
+ struct unkDungeon_8041D5C *iVar1;
+
+ iVar1 = sub_8085480();
+ sub_8083E88(0x7D);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ sub_808563C(sub_8089908);
+ sub_8085860(iVar1->unk4,iVar1->unk6 + -3);
+}
+
+void sub_808974C(void)
+{
+ struct unkDungeon_8041D5C *iVar1;
+
+ iVar1 = sub_8085480();
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ sub_808563C(sub_80898F8);
+ sub_8085860(iVar1->unk4,iVar1->unk6 + -3);
+}
+
+void sub_8089788(struct unkDungeon_8041D5C *param_1, u8 param_2, s32 param_3)
+{
+ struct unkDungeon_8041D5C *iVar2;
+ s32 iVar3;
+ u32 unk1;
+
+ unk1 = 0;
+
+ if ((((param_3 * 0x1000000) + 0xe6000000U) >> 0x18) < 2) {
+ for(iVar3 = 0; iVar3 < 0x10; iVar3++)
+ {
+ iVar2 = gUnknown_203B418->unk1358C[iVar3];
+ if ((sub_80450E0(iVar2) != '\0') && (iVar2 != param_1) && (iVar2->unk70->unkA4 == param_2)) {
+ return;
+ }
+ }
+ // WTF is this??
+ if(!unk1){
+ sub_8097FA8(0x11);
+ gUnknown_203B418->unk2 = 1;
+ }
+ }
+}
+
+void sub_80897F0(void)
+{
+ struct unkDungeon_8041D5C *iVar1;
+
+ iVar1 = sub_8085480();
+ sub_8086448();
+ sub_803E708(10,0x46);
+ sub_808563C(sub_80862BC);
+ sub_803E708(0x20,0x46);
+ sub_808692C();
+ sub_8052910(&gUnknown_8103BD8);
+ // We don't like to brag or
+ // nothing, but
+ sub_8052910(&gUnknown_8103C00);
+ // We get furious real easy
+ // You know that?!
+ sub_8052910(&gUnknown_8103C3C);
+ // What really irritates us is
+ // when we see some dim witted face
+ sub_8052910(&gUnknown_8103C74);
+ // .........
+ // Wrooooooar!
+ // That vacant expression
+ sub_8052910(&gUnknown_8103CC4);
+ // Gwoooh
+ // It's ticking me off!
+ // I'm seeing red!
+ sub_8052910(&gUnknown_8103D0C);
+ // Mukkkeeeeeh
+ // Get 'em! It's frenzy time!
+ sub_8052910(&gUnknown_8103D50);
+ sub_803E708(10,0x46);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+
+
+void sub_8089878(void)
+{
+ struct unkDungeon_8041D5C *iVar1;
+
+ iVar1 = sub_8085480();
+ sub_8086448();
+ sub_803E708(10,0x46);
+ sub_808563C(sub_80862BC);
+ sub_803E708(0x20,0x46);
+ sub_808692C();
+ sub_8052910(&gUnknown_8103D8C);
+ sub_8052910(&gUnknown_8103D98);
+ sub_8052910(&gUnknown_8103DD8);
+ sub_8052910(&gUnknown_8103E28);
+ sub_803E708(10,0x46);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void sub_80898E4(void)
+{
+ sub_8086448();
+ sub_80866C4(&gUnknown_8103E34);
+}
+
+void sub_80898F8(struct unkDungeon_8041D5C *r0)
+{
+ sub_8068FE0(r0, 0x21C, 0);
+}
+
+void sub_8089908(struct unkDungeon_8041D5C *r0)
+{
+ sub_8085918(r0, 4);
+}
+
+void sub_8089914(void)
+{
+ struct unkDungeon_8041D5C *iVar1;
+ struct unkDungeon_8041D5C *uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x11);
+ sub_8083F14();
+ gUnknown_203B418->unk7 = 1;
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ sub_8085918(uVar2,0);
+ sub_8086A3C(uVar2);
+ sub_8085860(iVar1->unk4,iVar1->unk6 - 3);
+ CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_MEWTWO);
+}
+
+void sub_8089978(void)
+{
+ struct unkDungeon_8041D5C *iVar2;
+ struct unkDungeon_8041D5C *uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x11);
+ sub_8083F14();
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ if(HasRecruitedMon(SPECIES_MEWTWO)){
+ sub_8083E88(0x23);
+ sub_8068FE0(uVar3,0x21c,0);
+ }
+ else {
+ gUnknown_203B418->unk7 = 1;
+ sub_8085918(uVar3,0);
+ sub_8086A3C(uVar3);
+ }
+ sub_8085860(iVar2->unk4,iVar2->unk6 - 3);
+ CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_MEWTWO);
+}
+
+void sub_8089A00(char param_1, s32 param_2)
+{
+ if ((((param_2 * 0x1000000) + 0xE3000000U) >> 0x18 < 3) && (param_1 == 0x11)) {
+ sub_8097FA8(0x13);
+ gUnknown_203B418->unk2 = 1;
+ }
+}
+
+void MewtwoPreFightDialogue(void)
+{
+ struct unkDungeon_8041D5C *iVar1;
+ struct unkDungeon_8041D5C *uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x11);
+ sub_8086448();
+ sub_8052910(&gUnknown_8103EA4);
+ sub_803E708(10,0x46);
+ sub_8083E88(0x23);
+ sub_8086794();
+ sub_803E708(0x1e,0x46);
+ sub_8089B64(uVar2);
+ sub_803E708(0x3c,0x46);
+ sub_8052910(&gUnknown_8103F0C);
+ sub_8052910(&gUnknown_8103F4C);
+ sub_803E708(10,0x46);
+ MewtwoScreenFlash();
+ sub_8052910(&gUnknown_8103FCC);
+ MewtwoScreenFlash();
+ sub_8052910(&gUnknown_8104008);
+ sub_803E708(10,0x46);
+ sub_8086A70(uVar2,900,0x20);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void MewtwoPreFightDialogue1(void)
+{
+ struct unkDungeon_8041D5C *iVar2;
+ struct unkDungeon_8041D5C *uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x11);
+ sub_8086448();
+ if(HasRecruitedMon(SPECIES_MEWTWO)) {
+ sub_80866C4(&gUnknown_8104144);
+ }
+ else {
+ sub_8052910(&gUnknown_8104044);
+ sub_8083E88(0x23);
+ sub_8086794();
+ sub_8089B64(uVar3);
+ sub_803E708(0x3c,0x46);
+ sub_8052910(&gUnknown_8104050);
+ MewtwoScreenFlash();
+ sub_8052910(&gUnknown_81040CC);
+ MewtwoScreenFlash();
+ sub_8052910(&gUnknown_8104114);
+ sub_8086A70(uVar3,900,0x20);
+ sub_80858AC(&iVar2->unkC,0x10);
+ }
+}
+
+void sub_8089B64(struct unkDungeon_8041D5C *param_1)
+{
+ s32 iVar1;
+ s32 iVar2;
+
+ param_1->unk70->unk15E = 0;
+ iVar2 = 51200;
+ iVar1 = 0x400;
+ sub_8083E38(0x1f8);
+ while( 1 ) {
+ iVar2 = iVar2 - iVar1;
+ iVar1 = iVar1 -= 11;
+ if (iVar1 < 0x1e) {
+ iVar1 = 0x1e;
+ }
+ if (iVar2 < 0) break;
+ param_1->unk70->unk174 = iVar2;
+ sub_803E46C(0x46);
+ }
+ param_1->unk70->unk174 = 0;
+}
+
+void MewtwoScreenFlash(void)
+{
+ int iVar1;
+
+ sub_8083E38(0x1f6);
+ for(iVar1 = 250; iVar1 > 149; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1,iVar1,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+ for(iVar1 = 250; iVar1 > 199; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1,0,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+ for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1,iVar1,1,1);
+ sub_803E46C(0x46);
+ }
+ sub_803E708(10,0x46);
+ sub_8085EB0();
+}
+
+void sub_8089C44(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x12);
+ sub_8083E88(0x72);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_8085918(uVar3, 0);
+ sub_8085860(iVar2->unk4,iVar2->unk6);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_ENTEI);
+}
+
+
+void sub_8089C90(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x12);
+ sub_8083E88(0x72);
+ sub_80854D4();
+ sub_8085930(4);
+ if (HasRecruitedMon(SPECIES_ENTEI)) {
+ sub_8068FE0(uVar3,0x21c,0);
+ }
+ else {
+ sub_8085918(uVar3,0);
+ }
+ sub_8085860(iVar2->unk4,iVar2->unk6);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_ENTEI);
+}
+
+
+void sub_8089CFC(char param_1,int param_2)
+{
+ if ((((param_2 * 0x1000000) + 0xE0000000U) >> 0x18 < 3) && (param_1 == 0x12)) {
+ sub_8097FA8(0x15);
+ gUnknown_203B418->unk2 = 1;
+ }
+}
+
+
+void EnteiPreFightDialogue(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x12);
+ EnteiScreenFlash();
+ sub_8052910(&gUnknown_8104150);
+ EnteiScreenFlash();
+ sub_8052910(&gUnknown_81041AC);
+ EnteiScreenFlash();
+ sub_8052910(&gUnknown_81041F8);
+ sub_803E708(10,70);
+ sub_8086A70(uVar2,600,0xb);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void EnteiPreFightDialogue1(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x12);
+ EnteiScreenFlash();
+ sub_8052910(&gUnknown_8104240);
+ EnteiScreenFlash();
+ sub_8052910(&gUnknown_81042AC);
+ EnteiScreenFlash();
+ sub_8052910(&gUnknown_81042B8);
+ sub_803E708(10,70);
+ sub_8086A70(uVar2,600,0xb);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void EnteiPreFightDialogue2(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x12);
+ if (HasRecruitedMon(SPECIES_ENTEI)) {
+ sub_80866C4(&gUnknown_81043DC);
+ }
+ else {
+ EnteiScreenFlash();
+ sub_8052910(&gUnknown_8104310);
+ EnteiScreenFlash();
+ sub_8052910(&gUnknown_810439C);
+ EnteiScreenFlash();
+ sub_8052910(&gUnknown_81043C0);
+ sub_803E708(10,70);
+ sub_8086A70(uVar3,600,0xb);
+ sub_80858AC(&iVar2->unkC,0x10);
+ }
+}
+
+void EnteiScreenFlash(void)
+{
+ s32 iVar1;
+
+ sub_8083E38(0x1ed);
+ for(iVar1 = 250; iVar1 > 149; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1, iVar1 / 2, iVar1 / 2, 1, 1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ for(iVar1 = 250; iVar1 > 199; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1, 0, 0, 1, 1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1, iVar1 / 2, iVar1 / 2, 1, 1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ sub_8085EB0();
+}
+
+void sub_8089EFC(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x13);
+ sub_8083E88(0x72);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_8085918(uVar3, 0);
+ sub_8085860(iVar2->unk4,iVar2->unk6);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_RAIKOU);
+}
+
+
+void sub_8089F44(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x13);
+ sub_8083E88(0x72);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_8085918(uVar3, 0);
+ sub_8085860(iVar2->unk4,iVar2->unk6);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_RAIKOU);
+}
+
+
+void sub_8089F8C(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x13);
+ sub_8083E88(0x72);
+ sub_80854D4();
+ sub_8085930(4);
+ if (HasRecruitedMon(SPECIES_RAIKOU)) {
+ sub_8068FE0(uVar3,0x21c,0);
+ }
+ else {
+ sub_8085918(uVar3,0);
+ }
+ sub_8085860(iVar2->unk4,iVar2->unk6);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_RAIKOU);
+}
+
+void sub_8089FF0(char param_1,int param_2)
+{
+ if ((((param_2 * 0x1000000) + 0xdD000000U) >> 0x18 < 3) && (param_1 == 0x13)) {
+ sub_8097FA8(0x17);
+ gUnknown_203B418->unk2 = 1;
+ }
+}
+
+
+void RaikouPreFightDialogue(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x13);
+ sub_8052910(&gUnknown_8104450);
+ RaikouScreenFlash();
+ sub_8052910(&gUnknown_81044B4);
+ gUnknown_203B418->unkE265 = 4;
+ sub_807EAA0(0,1);
+ sub_803E708(10,70);
+ sub_8052910(&gUnknown_8104510);
+ RaikouScreenFlash();
+ sub_8052910(&gUnknown_810453C);
+ RaikouScreenFlash();
+ sub_8052910(&gUnknown_8104570);
+ RaikouScreenFlash();
+ sub_8052910(&gUnknown_81045B0);
+ sub_803E708(10,70);
+ sub_8086A70(uVar2,0x28a,0xb);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void RaikouPreFightDialogue1(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x13);
+ gUnknown_203B418->unkE265 = 4;
+ sub_807EAA0(0,1);
+ RaikouScreenFlash();
+ sub_8052910(&gUnknown_81045F8);
+ RaikouScreenFlash();
+ sub_8052910(&gUnknown_8104674);
+ RaikouScreenFlash();
+ sub_8052910(&gUnknown_81046A0);
+ sub_803E708(10,70);
+ sub_8086A70(uVar3,0x28a,0xb);
+ sub_80858AC(&iVar2->unkC,0x10);
+}
+
+void RaikouPreFightDialogue2(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x13);
+ if (HasRecruitedMon(SPECIES_RAIKOU)) {
+ sub_80866C4(&gUnknown_8104778);
+ }
+ else {
+ gUnknown_203B418->unkE265 = 4;
+ sub_807EAA0(0,1);
+ sub_8052910(&gUnknown_81046CC);
+ RaikouScreenFlash();
+ sub_8052910(&gUnknown_8104744);
+ RaikouScreenFlash();
+ sub_8052910(&gUnknown_810476C);
+ sub_803E708(10,70);
+ sub_8086A70(uVar3,0x28a,0xb);
+ sub_80858AC(&iVar2->unkC,0x10);
+ }
+}
+
+void RaikouScreenFlash(void)
+{
+ s32 iVar1;
+
+ sub_8083E38(0x1f6);
+ for(iVar1 = 250; iVar1 > 149; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1,iVar1,1,1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ for(iVar1 = 250; iVar1 > 199; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1,iVar1,1,1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1,iVar1,1,1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ sub_8085EB0();
+}
+
+void sub_808A264(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x14);
+ sub_8083E88(0x72);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ sub_8085918(uVar2,0);
+ sub_8086A3C(uVar2);
+ sub_8085860(iVar1->unk4,iVar1->unk6 - 3);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SUICUNE);
+}
+
+void sub_808A2C0(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x14);
+ sub_8083E88(0x72);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_8085918(uVar2,0);
+ sub_8085860(iVar1->unk4,iVar1->unk6);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SUICUNE);
+}
+
+void sub_808A308(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x14);
+ sub_8083E88(0x72);
+ sub_80854D4();
+ sub_8085930(4);
+ if (HasRecruitedMon(SPECIES_SUICUNE)) {
+ sub_8068FE0(uVar3,0x21c,0);
+ }
+ else {
+ sub_8085918(uVar3,0);
+ }
+ sub_8085860(iVar2->unk4,iVar2->unk6);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SUICUNE);
+}
+
+void sub_808A36C(char param_1,int param_2)
+{
+ if ((((param_2 * 0x1000000) + 0xda000000U) >> 0x18 < 3) && (param_1 == 0x14)) {
+ sub_8097FA8(0x19);
+ gUnknown_203B418->unk2 = 1;
+ }
+}
+
+void SuicunePreFightDialogue(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x14);
+ sub_8086448();
+ sub_8052910(&gUnknown_8104784);
+ sub_803E708(10,70);
+ sub_8052910(&gUnknown_8104790);
+ sub_803E708(10,70);
+ sub_80426C8(1,2);
+ sub_803E708(0x3c,70);
+ sub_8052910(&gUnknown_81047B0);
+ sub_803E708(10,70);
+ sub_808A528(uVar2);
+ sub_8052910(&gUnknown_810484C);
+ sub_8052910(&gUnknown_8104888);
+ SuicuneScreenFlash();
+ sub_8052910(&gUnknown_81048C8);
+ SuicuneScreenFlash();
+ sub_8052910(&gUnknown_8104914);
+ sub_803E708(10,70);
+ sub_8086A70(uVar2,0x28a,0xb);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void SuicunePreFightDialogue1(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x14);
+ sub_8052910(&gUnknown_8104930);
+ SuicuneScreenFlash();
+ sub_8052910(&gUnknown_8104980);
+ SuicuneScreenFlash();
+ sub_8052910(&gUnknown_8104998);
+ sub_803E708(10,70);
+ sub_8086A70(uVar2,0x28a,0xb);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void SuicunePreFightDialogue2(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x14);
+ if (HasRecruitedMon(SPECIES_SUICUNE)) {
+ sub_80866C4(&gUnknown_8104AC8);
+ }
+ else {
+ sub_8052910(&gUnknown_81049D4);
+ SuicuneScreenFlash();
+ sub_8052910(&gUnknown_8104A80);
+ SuicuneScreenFlash();
+ sub_8052910(&gUnknown_8104A9C);
+ sub_803E708(10,70);
+ sub_8086A70(uVar3,0x28a,0xb);
+ sub_80858AC(&iVar2->unkC,0x10);
+ }
+}
+
+void sub_808A528(struct unkDungeon_8041D5C * param_1)
+{
+ s32 iVar1;
+ s32 iVar2;
+
+ param_1->unk70->unk15E = 0;
+ iVar2 = 51200;
+ iVar1 = 3072;
+ sub_8083E38(0x1f8);
+ while( 1 ) {
+ iVar2 = iVar2 - iVar1;
+ iVar1 -= 96;
+ if (iVar1 < 20) {
+ iVar1 = 20;
+ }
+ if (iVar2 < 0) break;
+ param_1->unk70->unk174 = iVar2;
+ sub_803E46C(70);
+ }
+ param_1->unk70->unk174 = 0;
+}
+
+void SuicuneScreenFlash(void)
+{
+ s32 iVar1;
+
+ sub_8083E38(0x1ee);
+ for(iVar1 = 250; iVar1 > 149; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1,iVar1,1,1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ for(iVar1 = 250; iVar1 > 199; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1,iVar1,1,1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1,iVar1,1,1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ sub_8085EB0();
+}
+
+void sub_808A608(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x15);
+ sub_8083E88(0x1c);
+ sub_80867F4();
+ sub_8086838(0,0,0);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_8085918(uVar2,0);
+ sub_8086A3C(uVar2);
+ sub_8085860(iVar1->unk4,iVar1->unk6 + -6);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_HO_OH);
+}
+
+void sub_808A668(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x15);
+ sub_8083E88(0x1c);
+ sub_80867F4();
+ sub_8086838(0,0,0);
+ sub_80854D4();
+ sub_8085930(4);
+ if (HasRecruitedMon(SPECIES_HO_OH)) {
+ sub_8068FE0(uVar3,0x21c,0);
+ }
+ else {
+ sub_8085918(uVar3,0);
+ sub_8086A3C(uVar3);
+ }
+ sub_8085860(iVar2->unk4,iVar2->unk6 - 6);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_HO_OH);
+}
+
+void sub_808A6E8(char param_1, s32 param_2)
+{
+ if ((((param_2 * 0x1000000) + 0xd7000000U) >> 0x18 < 2) && (param_1 == 0x15)) {
+ sub_8097FA8(0x1A);
+ gUnknown_203B418->unk2 = 1;
+ }
+}
+
+
+void sub_808A718(void)
+{
+ sub_8086854();
+}
+
+void HoOhPreFightDialogue(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+ int local_14[2];
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x15);
+ local_14[0] = iVar1->unkC;
+ local_14[1] = iVar1->unk10 + -0x1000;
+ sub_80858AC(local_14,0x88);
+ sub_803E708(0x40,70);
+ sub_8052910(&gUnknown_8104AD4);
+ sub_803E708(10,70);
+ HoOhScreenFlash();
+ sub_8052910(&gUnknown_8104BEC);
+ sub_803E708(10,70);
+ sub_80855E4(sub_80868F4);
+ sub_808680C();
+ sub_8083E38(0x1c5);
+ sub_803E708(0xfa,70);
+ sub_808A904(uVar2);
+ sub_8083E58(0x1c5);
+ sub_808682C();
+ sub_80855E4(sub_8086910);
+ sub_8085930(4);
+ sub_8052910(&gUnknown_8104C10);
+ sub_8052910(&gUnknown_8104C54);
+ sub_803E708(0x1e,70);
+ sub_803E708(0x1e,70);
+ HoOhScreenFlash();
+ sub_8052910(&gUnknown_8104CB4);
+ HoOhScreenFlash();
+ sub_8052910(&gUnknown_8104CE0);
+ sub_803E708(10,70);
+ sub_8086A70(uVar2,800,0x20);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void HoOhPreFightDialogue1(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+ u32 local_14[2];
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x15);
+
+ local_14[0] = iVar2->unkC;
+ local_14[1] = iVar2->unk10 + -0x1000;
+ sub_80858AC(local_14,0x88);
+ sub_803E708(0x40,70);
+ if (HasRecruitedMon(SPECIES_HO_OH)) {
+ sub_80866C4(&gUnknown_8104E54);
+ }
+ else {
+ sub_8052910(&gUnknown_8104CEC);
+ HoOhScreenFlash();
+ sub_80855E4(sub_80868F4);
+ sub_808680C();
+ sub_803E708(10,70);
+ sub_808A904(uVar3);
+ sub_808682C();
+ sub_80855E4(sub_8086910);
+ sub_8085930(4);
+ sub_8052910(&gUnknown_8104D60);
+ HoOhScreenFlash();
+ sub_8052910(&gUnknown_8104DDC);
+ HoOhScreenFlash();
+ sub_8052910(&gUnknown_8104E0C);
+ sub_803E708(10,70);
+ sub_8086A70(uVar3,800,0x20);
+ sub_80858AC(&iVar2->unkC,0x10);
+ }
+}
+
+void sub_808A904(struct unkDungeon_8041D5C * param_1)
+{
+ s32 iVar1;
+ s32 iVar2;
+
+ param_1->unk70->unk15E = 0;
+ iVar2 = 51200;
+ iVar1 = 3072;
+ sub_8083E38(0x1f8);
+ while( 1 ) {
+ iVar2 = iVar2 - iVar1;
+ iVar1 -= 96;
+ if (iVar1 < 20) {
+ iVar1 = 20;
+ }
+ if (iVar2 < 0) break;
+ param_1->unk70->unk174 = iVar2;
+ sub_803E46C(70);
+ }
+ param_1->unk70->unk174 = 0;
+}
+
+void HoOhScreenFlash(void)
+{
+ s32 iVar1;
+
+ sub_8083E38(0x1ed);
+ for(iVar1 = 250; iVar1 > 149; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1,iVar1,1,1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ for(iVar1 = 250; iVar1 > 199; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1,iVar1,1,1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1,iVar1,1,1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ sub_8085EB0();
+}
+
+void sub_808A9E4(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x16);
+ sub_8083E88(0x72);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ sub_8085918(uVar2,4);
+ sub_8085860(iVar1->unk4,iVar1->unk6 - 4);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_LATIOS);
+}
+
+void sub_808AA3C(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x16);
+ sub_8083E88(0x72);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ sub_8085918(uVar2,4);
+ sub_8085860(iVar1->unk4,iVar1->unk6 - 3);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_LATIOS);
+}
+
+void sub_808AA94(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x16);
+ sub_8083E88(0x72);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ sub_8068FE0(uVar2,0x21c,0);
+ sub_8085860(iVar1->unk4,iVar1->unk6 - 3);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_LATIOS);
+}
+
+void sub_808AAF0(char param_1, s32 param_2)
+{
+ if ((((param_2 * 0x1000000) + 0xd5000000U) >> 0x18 < 3) && (param_1 == 0x16)) {
+ sub_8097FA8(0x1c);
+ gUnknown_203B418->unk2 = 1;
+ }
+}
+
+void LatiosPreFightDialogue(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * iVar2;
+ u32 local_18[3];
+
+ iVar1 = sub_8085480();
+ iVar2 = sub_8085680(0x16);
+
+ local_18[0] = iVar2->unkC;
+ local_18[1] = iVar2->unk10 + (0x80 << 6);
+ local_18[2] = 0x7000fc;
+ sub_8085EC8(0x1bd,0,0,&local_18[2],1);
+
+ sub_803E708(0x1e,70);
+ sub_8086448();
+ sub_80858AC(local_18,0x18);
+ sub_803E708(2,70);
+ sub_80862BC(iVar2);
+ sub_803E708(0x20,70);
+ sub_808692C();
+ sub_8052910(&gUnknown_8104E60);
+ LatiosScreenFlash();
+ sub_8052910(&gUnknown_8104EFC);
+ LatiosScreenFlash();
+ sub_8052910(&gUnknown_8104F30);
+ sub_803E708(10,70);
+ sub_8086A70(iVar2,600,0xb);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void LatiosReFightDialogue(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x16);
+ sub_8086448();
+ sub_808692C();
+ sub_8052910(&gUnknown_8104F64);
+ LatiosScreenFlash();
+ sub_8052910(&gUnknown_8104EFC);
+ LatiosScreenFlash();
+ sub_8052910(&gUnknown_8104F30);
+ sub_803E708(10,70);
+ sub_8086A70(uVar2,600,0xb);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void sub_808AC3C(void)
+{
+ sub_8086448();
+ // There appears to be no one here
+ sub_80866C4(&gUnknown_8104FC8);
+}
+
+void LatiosScreenFlash(void)
+{
+ s32 iVar1;
+
+ sub_8083E38(0x1ee);
+ gUnknown_202EDC8 = 0x1f;
+ for(iVar1 = 250; iVar1 > 149; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1,iVar1,1,1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10)
+ {
+ sub_8085C54(iVar1,iVar1,iVar1,1,1);
+ sub_803E46C(70);
+ }
+ sub_803E708(10,70);
+ sub_8085EB0();
+}
+
+void sub_808ACC0(void)
+{
+ struct unkDungeon_8041D5C * uVar2;
+
+ if (HasRecruitedMon(SPECIES_REGIROCK)) {
+ uVar2 = sub_8085680(0x17);
+ sub_8068FE0(uVar2,0x21c,0);
+ sub_8097FA8(0x22);
+ sub_8097FA8(0x1d);
+ sub_808B1CC(0x79);
+ }
+ else {
+ if (sub_80860A8(0x79) != 0) {
+ sub_8098044(0x22);
+ sub_8097FA8(0x1d);
+ }
+ else
+ {
+ if (sub_80860A8(0x7a) != 0) {
+ sub_8098044(0x22);
+ sub_8097FA8(0x1d);
+ }
+ else {
+ sub_8098044(0x22);
+ sub_8098044(0x1d);
+ sub_80855E4(sub_808B2B0);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_REGIROCK);
+ }
+ }
+ }
+}
+
+void sub_808AD48(void)
+{
+ struct unkDungeon_8041D5C * uVar2;
+
+ if (HasRecruitedMon(SPECIES_REGICE)) {
+ uVar2 = sub_8085680(0x18);
+ sub_8068FE0(uVar2,0x21c,0);
+ sub_8097FA8(0x22);
+ sub_8097FA8(0x1d);
+ sub_808B1CC(0x77);
+ }
+ else {
+ if (sub_80860A8(0x77) != 0) {
+ sub_8098044(0x22);
+ sub_8097FA8(0x1d);
+ }
+ else
+ {
+ if (sub_80860A8(0x7a) != 0) {
+ sub_8098044(0x22);
+ sub_8097FA8(0x1d);
+ }
+ else {
+ sub_8098044(0x22);
+ sub_8098044(0x1d);
+ sub_80855E4(sub_808B2B0);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_REGICE);
+ }
+ }
+ }
+}
+
+void sub_808ADCC(void)
+{
+
+ struct unkDungeon_8041D5C * uVar2;
+
+ if (HasRecruitedMon(SPECIES_REGISTEEL)) {
+ uVar2 = sub_8085680(0x19);
+ sub_8068FE0(uVar2,0x21c,0);
+ sub_8097FA8(0x22);
+ sub_8097FA8(0x1d);
+ sub_808B1CC(0x78);
+ }
+ else {
+ if (sub_80860A8(0x78) != 0) {
+ sub_8098044(0x22);
+ sub_8097FA8(0x1d);
+ }
+ else
+ {
+ if (sub_80860A8(0x7a) != 0) {
+ sub_8098044(0x22);
+ sub_8097FA8(0x1d);
+ }
+ else {
+ sub_8098044(0x22);
+ sub_8098044(0x1d);
+ sub_80855E4(sub_808B2B0);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_REGISTEEL);
+ }
+ }
+ }
+}
+
+void sub_808AE54(char param_1,char param_2,u32 param_3)
+{
+ struct unkDungeon_8041D5C * uVar3;
+ u8 auStack24 [4];
+ u8 auStack20 [4];
+
+
+ uVar3 = sub_8085480();
+ sub_8052D44(auStack24,uVar3,0);
+ if ((sub_8098100(0x22) == 0) && (param_2 == 0x2E) && (param_1 == 0x17)) {
+ sub_808B1CC(0);
+ if (sub_8098100(0x1d) == 0) {
+ sub_8090A8C(auStack20,0x79,0);
+ sub_80464C8(sub_8083600(),param_3,auStack20);
+ sub_8083E88(0x72);
+ // Something fell from Regirock's body
+ // Regirock was apparently guarding this item
+ sub_8052910(&gUnknown_8105040);
+ }
+ }
+}
+
+
+void sub_808AEC8(char param_1,char param_2,u32 param_3)
+{
+ struct unkDungeon_8041D5C * uVar3;
+ u8 auStack24 [4];
+ u8 auStack20 [4];
+
+
+ uVar3 = sub_8085480();
+ sub_8052D44(auStack24,uVar3,0);
+ if ((sub_8098100(0x22) == 0) && (param_2 == 0x2F) && (param_1 == 0x18)) {
+ sub_808B1CC(0);
+ if (sub_8098100(0x1d) == 0) {
+ sub_8090A8C(auStack20,0x77,0);
+ sub_80464C8(sub_8083600(),param_3,auStack20);
+ sub_8083E88(0x72);
+ // Something fell from Regice's body
+ // Regice was apparently guarding this item
+ sub_8052910(&gUnknown_810510C);
+ }
+ }
+}
+
+void sub_808AF3C(char param_1,char param_2,u32 param_3)
+{
+ struct unkDungeon_8041D5C * uVar3;
+ u8 auStack24 [4];
+ u8 auStack20 [4];
+
+
+ uVar3 = sub_8085480();
+ sub_8052D44(auStack24,uVar3,0);
+ if ((sub_8098100(0x22) == 0) && (param_2 == 0x30) && (param_1 == 0x19)) {
+ sub_808B1CC(0);
+ if (sub_8098100(0x1d) == 0) {
+ sub_8090A8C(auStack20,0x78,0);
+ sub_80464C8(sub_8083600(),param_3,auStack20);
+ sub_8083E88(0x72);
+ // Something fell from Registeel's body
+ // Registeel was apparently guarding this item
+ sub_8052910(&gUnknown_81051D0);
+ }
+ }
+}
+
+void sub_808AFB0(char param_1)
+{
+ struct unkDungeon_8041D5C * uVar3;
+ u8 auStack12 [4];
+
+ uVar3 = sub_8085480();
+ sub_8052D44(auStack12,uVar3,0);
+ if ((sub_8098100(0x22) == 0) && (param_1 == 0x2E) && (sub_8098100(0x1d) == 0) && (sub_80860A8(0x79) != 0)) {
+ sub_8097FD0(0x1d);
+ sub_8045B94(gAvailablePokemonNames,sub_8083600(),0);
+ // $m0 obatined the Rock Part that Regirock was guarding
+ sub_8052910(&gUnknown_81050B4);
+ sub_80421C0(0,0xd4);
+ sub_803E708(10,70);
+ sub_8046D20();
+ }
+}
+
+void sub_808B030(char param_1)
+{
+ struct unkDungeon_8041D5C * uVar3;
+ u8 auStack12 [4];
+
+ uVar3 = sub_8085480();
+ sub_8052D44(auStack12,uVar3,0);
+ if ((sub_8098100(0x22) == 0) && (param_1 == 0x2F) && (sub_8098100(0x1d) == 0) && (sub_80860A8(0x77) != 0)) {
+ sub_8097FD0(0x1d);
+ sub_8045B94(gAvailablePokemonNames,sub_8083600(),0);
+ // $m0 obatined the Ice Part that Regice was guarding
+ sub_8052910(&gUnknown_810517C);
+ sub_80421C0(0,0xd4);
+ sub_803E708(10,70);
+ sub_8046D20();
+ }
+}
+
+void sub_808B0B0(char param_1)
+{
+ struct unkDungeon_8041D5C * uVar3;
+ u8 auStack12 [4];
+
+ uVar3 = sub_8085480();
+ sub_8052D44(auStack12,uVar3,0);
+ if ((sub_8098100(0x22) == 0) && (param_1 == 0x30) && (sub_8098100(0x1d) == 0) && (sub_80860A8(0x78) != 0)) {
+ sub_8097FD0(0x1d);
+ sub_8045B94(gAvailablePokemonNames, sub_8083600(), 0);
+ // $m0 obatined the Steel Part that Registeel was guarding
+ sub_8052910(&gUnknown_8105244);
+ sub_80421C0(0,0xd4);
+ sub_803E708(10,70);
+ sub_8046D20();
+ }
+}
+
+void RegirockPreFightDialogue(void)
+{
+ if (sub_8098100(0x22) == '\0') {
+ sub_8085930(4);
+ // INTRUDER ALERT
+ // EXTERMINATE
+ sub_8052910(&gUnknown_8104FD4);
+ sub_803E708(10,70);
+ sub_808563C(sub_808B2C4);
+ }
+}
+
+void RegicePreFightDialogue(void)
+{
+ if (sub_8098100(0x22) == '\0') {
+ sub_8085930(4);
+ // INTRUDER ALERT
+ // EXTERMINATE
+ sub_8052910(&gUnknown_8105028);
+ sub_803E708(10,70);
+ sub_808563C(sub_808B2D4);
+ }
+}
+
+void RegisteelPreFightDialogue(void)
+{
+ if (sub_8098100(0x22) == '\0') {
+ sub_8085930(4);
+ // INTRUDER ALERT
+ // EXTERMINATE
+ sub_8052910(&gUnknown_8105034);
+ sub_803E708(10,70);
+ sub_808563C(sub_808B2E4);
+ }
+}
+
+NAKED
+void sub_808B1CC(u8 r0)
+{
+ asm_unified(
+ "\tpush {r4-r7,lr}\n"
+ "\tsub sp, 0x8\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "\tldr r7, _0808B21C\n"
+ "\tldr r2, [r7]\n"
+ "\tldr r1, _0808B220\n"
+ "\tadds r0, r2, r1\n"
+ "\tldrh r0, [r0]\n"
+ "\tldr r5, _0808B224\n"
+ "\tldr r1, [sp]\n"
+ "\tands r1, r5\n"
+ "\torrs r1, r0\n"
+ "\tstr r1, [sp]\n"
+ "\tldr r3, _0808B228\n"
+ "\tadds r2, r3\n"
+ "\tldrh r0, [r2]\n"
+ "\tlsls r0, 16\n"
+ "\tldr r4, _0808B22C\n"
+ "\tadds r2, r4, 0\n"
+ "\tands r2, r1\n"
+ "\torrs r2, r0\n"
+ "\tstr r2, [sp]\n"
+ "\tmov r0, sp\n"
+ "\tmovs r1, 0\n"
+ "\tldrsh r0, [r0, r1]\n"
+ "\tcmp r0, 0\n"
+ "\tblt _0808B208\n"
+ "\tcmp r2, 0\n"
+ "\tbge _0808B244\n"
+"_0808B208:\n"
+ "\tbl sub_8083600\n"
+ "\tadds r2, r0, 0\n"
+ "\tcmp r2, 0\n"
+ "\tbne _0808B230\n"
+ "\tldr r1, [r7]\n"
+ "\tmovs r0, 0x1\n"
+ "\tstrb r0, [r1, 0x2]\n"
+ "\tb _0808B2A8\n"
+ "\t.align 2, 0\n"
+"_0808B21C: .4byte gUnknown_203B418\n"
+"_0808B220: .4byte 0x00000684\n"
+"_0808B224: .4byte 0xffff0000\n"
+"_0808B228: .4byte 0x00000686\n"
+"_0808B22C: .4byte 0x0000ffff\n"
+"_0808B230:\n"
+ "\tldrh r0, [r2, 0x4]\n"
+ "\tldr r1, [sp]\n"
+ "\tands r1, r5\n"
+ "\torrs r1, r0\n"
+ "\tstr r1, [sp]\n"
+ "\tldrh r0, [r2, 0x6]\n"
+ "\tlsls r0, 16\n"
+ "\tands r1, r4\n"
+ "\torrs r1, r0\n"
+ "\tstr r1, [sp]\n"
+"_0808B244:\n"
+ "\tmov r5, sp\n"
+ "\tmov r0, sp\n"
+ "\tmovs r1, 0\n"
+ "\tbl sub_807FE04\n"
+ "\tmov r0, sp\n"
+ "\tmovs r2, 0\n"
+ "\tldrsh r0, [r0, r2]\n"
+ "\tmovs r3, 0x2\n"
+ "\tldrsh r1, [r5, r3]\n"
+ "\tbl sub_8049590\n"
+ "\tldrh r2, [r0]\n"
+ "\tmovs r3, 0x80\n"
+ "\tlsls r3, 2\n"
+ "\tadds r1, r3, 0\n"
+ "\torrs r1, r2\n"
+ "\tstrh r1, [r0]\n"
+ "\tcmp r6, 0\n"
+ "\tbeq _0808B2A0\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl sub_80860A8\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0808B2A0\n"
+ "\tmovs r0, 0x7A\n"
+ "\tbl sub_80860A8\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0808B2A0\n"
+ "\tadd r4, sp, 0x4\n"
+ "\tadds r0, r4, 0\n"
+ "\tadds r1, r6, 0\n"
+ "\tmovs r2, 0\n"
+ "\tbl sub_8090A8C\n"
+ "\tldrh r0, [r5, 0x2]\n"
+ "\tsubs r0, 0x1\n"
+ "\tstrh r0, [r5, 0x2]\n"
+ "\tmov r0, sp\n"
+ "\tadds r1, r4, 0\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_80460F8\n"
+"_0808B2A0:\n"
+ "\tbl sub_8049ED4\n"
+ "\tbl sub_8040A84\n"
+"_0808B2A8:\n"
+ "\tadd sp, 0x8\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0");
+}
+
+
+void sub_808B2B0(struct unkDungeon_8041D5C *r0)
+{
+ r0->unk70->unk46 = 4;
+ sub_806CE68(r0, 4);
+}
+
+
+void sub_808B2C4(struct unkDungeon_8041D5C *r0)
+{
+ sub_8086A70(r0, 0xE1 << 1, 0xB);
+}
+
+
+void sub_808B2D4(struct unkDungeon_8041D5C *r0)
+{
+ sub_8086A70(r0, 0xE1 << 1, 0xB);
+}
+
+
+void sub_808B2E4(struct unkDungeon_8041D5C *r0)
+{
+ sub_8086A70(r0, 0xE1 << 1, 0xB);
+}
+
+void sub_808B2F4(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x1a);
+ sub_8083E88(0x79);
+ sub_808BCE4();
+ sub_8049ED4();
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ sub_8085918(uVar2,0);
+ sub_8086A3C(uVar2);
+ sub_8085860(iVar1->unk4,iVar1->unk6 - 3);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_JIRACHI);
+}
+
+void sub_808B35C(void)
+{
+ struct unkDungeon_8041D5C * iVar2;
+ struct unkDungeon_8041D5C * uVar3;
+
+ iVar2 = sub_8085480();
+ uVar3 = sub_8085680(0x1a);
+ sub_8083E88(0x79);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ if (HasRecruitedMon(SPECIES_JIRACHI)) {
+ sub_8068FE0(uVar3,0x21c,0);
+ }
+ else {
+ sub_8085918(uVar3,0);
+ sub_8086A3C(uVar3);
+ sub_808BCE4();
+ sub_8049ED4();
+
+ }
+ sub_8085860(iVar2->unk4,iVar2->unk6 - 3);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_JIRACHI);
+}
+
+#ifdef NONMATCHING
+void sub_808B3E4(u8 param_1,u8 param_2,u8 param_3)
+{
+ u8 uVar1;
+
+ // TODO R1 and R2 shifts are switched ordering but matches
+ if (((((param_2 * 0x1000000) + 0xcf000000U) >> 0x18) < 2) && (param_1 == 0x1A)){
+ sub_8097FA8(0x1e);
+ if (param_3 != 0) {
+ gUnknown_203B418->unk2 = 1;
+ }
+ else {
+ uVar1 = gUnknown_203B418->unk1356C;
+ if (sub_80860A8(0x36) != 0) {
+ JirachiWish();
+ }
+ else {
+ sub_808B50C();
+ }
+ gUnknown_203B418->unk1356C = uVar1;
+ sub_8040A84();
+ }
+ }
+}
+#else
+NAKED
+void sub_808B3E4(u8 param_1, u8 param_2, u8 param_3)
+{
+ asm_unified(
+ "\tpush {r4,lr}\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tlsls r1, 24\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r4, r2, 24\n"
+ "\tmovs r2, 0xCF\n"
+ "\tlsls r2, 24\n"
+ "\tadds r1, r2\n"
+ "\tlsrs r1, 24\n"
+ "\tcmp r1, 0x1\n"
+ "\tbhi _0808B44E\n"
+ "\tcmp r0, 0x1A\n"
+ "\tbne _0808B44E\n"
+ "\tmovs r0, 0x1E\n"
+ "\tbl sub_8097FA8\n"
+ "\tcmp r4, 0\n"
+ "\tbeq _0808B418\n"
+ "\tldr r0, _0808B414\n"
+ "\tldr r1, [r0]\n"
+ "\tmovs r0, 0x1\n"
+ "\tstrb r0, [r1, 0x2]\n"
+ "\tb _0808B44E\n"
+ "\t.align 2, 0\n"
+"_0808B414: .4byte gUnknown_203B418\n"
+"_0808B418:\n"
+ "\tldr r0, _0808B434\n"
+ "\tldr r0, [r0]\n"
+ "\tldr r1, _0808B438\n"
+ "\tadds r0, r1\n"
+ "\tldrb r4, [r0]\n"
+ "\tmovs r0, 0x36\n"
+ "\tbl sub_80860A8\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0808B43C\n"
+ "\tbl JirachiWish\n"
+ "\tb _0808B440\n"
+ "\t.align 2, 0\n"
+"_0808B434: .4byte gUnknown_203B418\n"
+"_0808B438: .4byte 0x0001356c\n"
+"_0808B43C:\n"
+ "\tbl sub_808B50C\n"
+"_0808B440:\n"
+ "\tldr r0, _0808B454\n"
+ "\tldr r0, [r0]\n"
+ "\tldr r2, _0808B458\n"
+ "\tadds r0, r2\n"
+ "\tstrb r4, [r0]\n"
+ "\tbl sub_8040A84\n"
+"_0808B44E:\n"
+ "\tpop {r4}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"_0808B454: .4byte gUnknown_203B418\n"
+"_0808B458: .4byte 0x0001356c");
+}
+#endif
+
+void JirachiPreFightDialogue(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+ struct unkDungeon_8041D5C * uVar2;
+
+ iVar1 = sub_8085480();
+ uVar2 = sub_8085680(0x1a);
+ sub_8086448();
+ sub_803E708(0x40,70);
+ sub_8052910(&gUnknown_8105438);
+ sub_803E708(10,70);
+ sub_808696C(iVar1);
+ sub_803E708(10,70);
+ sub_8052910(&gUnknown_81054A0);
+ sub_80861F8(0x37,uVar2,1);
+ sub_80855E4(sub_80862BC);
+ sub_803E708(0x3c,70);
+ sub_808BBB8(uVar2);
+ sub_803E708(0x5a,70);
+ sub_8052910(&gUnknown_81054E4);
+ sub_803E708(10,70);
+ sub_8052910(&gUnknown_810550C);
+ sub_803E708(10,70);
+ sub_8086A70(uVar2,0x15e,0x20);
+ sub_80858AC(&iVar1->unkC,0x10);
+}
+
+void sub_808B50C(void)
+{
+ struct unkDungeon_8041D5C * iVar1;
+
+ iVar1 = sub_8085680(0x1a);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_JIRACHI);
+ sub_80855E4(sub_808BBA8);
+ sub_808BBA8(iVar1);
+ sub_8041888(0);
+ iVar1->unk70->unk15C = 1;
+ iVar1->unk70->unk15E = 0;
+ sub_80861B8(iVar1,0xe,0);
+ sub_8083ED8(0x1e);
+ sub_803E708(0x1e,70);
+ // Fwaaaahhhh
+ sub_8052910(&gUnknown_810554C);
+ sub_8083E88(0x79);
+ // I think I had a dream, and I was fighting in it
+ // Did I imagine it?
+ // I'm sleepy so I'm going back to sleep.
+ sub_8052910(&gUnknown_8105558);
+ sub_803E708(10,70);
+ sub_808BC20(iVar1);
+ sub_8052910(&gUnknown_81055F4);
+ sub_803E708(10,70);
+ gUnknown_203B418->unk2 = 1;
+}
diff --git a/src/cpu.c b/src/cpu.c
index eb1043a..a948d66 100644
--- a/src/cpu.c
+++ b/src/cpu.c
@@ -1,13 +1,13 @@
#include "global.h"
extern u32 gUnknown_202D800;
-extern u16 gUnknown_202D7FC; // used to update Blend Count Reg
+extern u16 gBldCnt; // used to update Blend Count Reg
extern u16 gUnknown_203B0BE[];
void sub_800CDA8(u32 r0)
{
gUnknown_202D800 = r0;
- gUnknown_202D7FC = gUnknown_203B0BE[r0];
+ gBldCnt = gUnknown_203B0BE[r0];
}
u32 sub_800CDC8(void)
@@ -48,7 +48,7 @@ void CpuFill(void* src, void *dest, s32 size)
}
#ifdef NONMATCHING
-void sub_800CE54(void)
+void VBlank_CB(void)
{
// TODO this is so gross.. looks like a macro or something else but I don't want to deal with this rn
REG_DMA0CNT_H = (REG_DMA0CNT_H | DMA_ENABLE) & 0xcdff;
@@ -62,8 +62,8 @@ void sub_800CE54(void)
REG_WININ = WININ_WIN0_ALL | WININ_WIN1_ALL;
REG_WINOUT = WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WIN01_BG3 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG0;
- REG_BLDCNT = gUnknown_202D7FC;
- REG_BLDALPHA = gUnknown_202D7FA;
+ REG_BLDCNT = gBldCnt;
+ REG_BLDALPHA = gBldAlpha;
if(gUnknown_2026E38 != 0)
{
DmaSet(0, &gUnknown_2026E3C[2], REG_ADDR_WIN0H, 0xa2600002);
@@ -82,7 +82,7 @@ void sub_800CE54(void)
}
#else
NAKED
-void sub_800CE54(void)
+void VBlank_CB(void)
{
asm_unified("\tpush {lr}\n"
"\tldr r2, _0800CEC0\n"
@@ -144,8 +144,8 @@ void sub_800CE54(void)
"_0800CEC8: .4byte 0x00007fff\n"
"_0800CECC: .4byte 0x04000048\n"
"_0800CED0: .4byte 0x00003f3f\n"
-"_0800CED4: .4byte gUnknown_202D7FC\n"
-"_0800CED8: .4byte gUnknown_202D7FA\n"
+"_0800CED4: .4byte gBldCnt\n"
+"_0800CED8: .4byte gBldAlpha\n"
"_0800CEDC: .4byte gUnknown_2026E38\n"
"_0800CEE0: .4byte 0x040000b0\n"
"_0800CEE4: .4byte gUnknown_2026E3C\n"
diff --git a/src/ds_menus.c b/src/ds_menus.c
new file mode 100644
index 0000000..47cece9
--- /dev/null
+++ b/src/ds_menus.c
@@ -0,0 +1,44 @@
+#include "global.h"
+#include "input.h"
+
+extern u8 *gUnknown_203B3E8;
+extern void sub_800641C(void *, u32, u32);
+extern void nullsub_54();
+extern void sub_8039E18();
+
+void sub_803A1C0(u8 r0)
+{
+ *gUnknown_203B3E8 = r0;
+ nullsub_54();
+ sub_8039E18();
+}
+
+u32 CreateDualSlotMenu(void)
+{
+ return 1;
+}
+
+u32 UpdateDualSlotMenu(void)
+{
+ return 0;
+}
+
+void CleanDualSlotMenu()
+{
+}
+
+u32 CreateWirelessCommsMenu(void)
+{
+ return 1;
+}
+
+u32 UpdateWirelessCommsMenu(void)
+{
+ return 2;
+}
+
+void CleanWirelessCommsMenu(void)
+{
+ ResetUnusedInputStruct();
+ sub_800641C(NULL, 1, 1);
+}
diff --git a/src/m4a.c b/src/m4a.c
index e34c303..2144c8b 100644
--- a/src/m4a.c
+++ b/src/m4a.c
@@ -835,92 +835,25 @@ static inline int CgbPan(struct CgbChannel *chan)
return 0;
}
-#ifndef NONMATCHING
-NAKED
-#endif
+
void CgbModVol(struct CgbChannel *chan)
{
-#ifdef NONMATCHING
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
- if ((soundInfo->mode & 1) || !CgbPan(chan))
+ if (!CgbPan(chan))
{
chan->pan = 0xFF;
- chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
+ chan->eg = (u32)(chan->rightVolume + chan->leftVolume) / 16;
}
else
{
- // Force chan->rightVolume and chan->leftVolume to be read from memory again,
- // even though there is no reason to do so.
- // The command line option "-fno-gcse" achieves the same result as this.
- asm("" : : : "memory");
- chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
+ chan->eg = (u32)(chan->rightVolume + chan->leftVolume) / 16;
if (chan->eg > 15)
chan->eg = 15;
}
chan->sg = (chan->eg * chan->su + 15) >> 4;
chan->pan &= chan->panMask;
-#else
- asm_unified("\tpush {r4,lr}\n"
- "\tadds r1, r0, 0\n"
- "\tldrb r0, [r1, 0x2]\n"
- "\tlsls r2, r0, 24\n"
- "\tlsrs r4, r2, 24\n"
- "\tldrb r3, [r1, 0x3]\n"
- "\tlsls r0, r3, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tcmp r4, r3\n"
- "\tbcc _080AFA94\n"
- "\tlsrs r0, r2, 25\n"
- "\tcmp r0, r3\n"
- "\tbcc _080AFAA0\n"
- "\tmovs r0, 0xF\n"
- "\tstrb r0, [r1, 0x1B]\n"
- "\tb _080AFAAE\n"
- "_080AFA94:\n"
- "\tlsrs r0, 25\n"
- "\tcmp r0, r4\n"
- "\tbcc _080AFAA0\n"
- "\tmovs r0, 0xF0\n"
- "\tstrb r0, [r1, 0x1B]\n"
- "\tb _080AFAAE\n"
- "_080AFAA0:\n"
- "\tmovs r0, 0xFF\n"
- "\tstrb r0, [r1, 0x1B]\n"
- "\tldrb r2, [r1, 0x3]\n"
- "\tldrb r3, [r1, 0x2]\n"
- "\tadds r0, r2, r3\n"
- "\tlsrs r0, 4\n"
- "\tb _080AFABE\n"
- "_080AFAAE:\n"
- "\tldrb r2, [r1, 0x3]\n"
- "\tldrb r3, [r1, 0x2]\n"
- "\tadds r0, r2, r3\n"
- "\tlsrs r0, 4\n"
- "\tstrb r0, [r1, 0xA]\n"
- "\tcmp r0, 0xF\n"
- "\tbls _080AFAC0\n"
- "\tmovs r0, 0xF\n"
- "_080AFABE:\n"
- "\tstrb r0, [r1, 0xA]\n"
- "_080AFAC0:\n"
- "\tldrb r2, [r1, 0x6]\n"
- "\tldrb r3, [r1, 0xA]\n"
- "\tadds r0, r2, 0\n"
- "\tmuls r0, r3\n"
- "\tadds r0, 0xF\n"
- "\tasrs r0, 4\n"
- "\tstrb r0, [r1, 0x19]\n"
- "\tldrb r0, [r1, 0x1C]\n"
- "\tldrb r2, [r1, 0x1B]\n"
- "\tands r0, r2\n"
- "\tstrb r0, [r1, 0x1B]\n"
- "\tpop {r4}\n"
- "\tpop {r0}\n"
- "\tbx r0\n");
-#endif
}
void CgbSound(void)
diff --git a/src/main.c b/src/main.c
index 0960d70..da984c6 100644
--- a/src/main.c
+++ b/src/main.c
@@ -9,8 +9,8 @@ extern char ewram_start[];
typedef void (*IntrCallback)(void);
extern u8 IntrMain_Buffer[0x120];
-extern IntrCallback gUnknown_202D5F0[6];
-extern u16 gUnknown_202D7FC;
+extern IntrCallback gIntrCallbacks[6];
+extern u16 gBldCnt;
extern u8 gUnknown_202D7FE;
extern u8 gInterruptsEnabled;
extern u16 gUnknown_203B0AC;
@@ -50,7 +50,7 @@ extern void sub_80098A0(void);
extern void InitGraphics(void);
extern void GameLoop(void);
extern void Hang(void);
-extern void sub_800CE54(void);
+extern void VBlank_CB(void);
extern void nullsub_17(void);
extern void sub_800BD08(void); // music initializer
@@ -59,7 +59,7 @@ extern void sub_800D7D0(void);
bool8 EnableInterrupts(void);
void InitIntrTable(const u32 *interrupt_table);
-void *sub_800B6F4(u32 index, void * new_callback);
+void *SetInterruptCallback(u32 index, void * new_callback);
void AgbMain(void)
@@ -98,7 +98,7 @@ void AgbMain(void)
REG_WIN1V = 0;
REG_WININ = WININ_WIN0_ALL | WININ_WIN1_ALL; // 16191
REG_WINOUT = WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; // 61
- gUnknown_202D7FC = REG_BLDCNT = BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_BD | BLDCNT_TGT2_OBJ; // 15426
+ gBldCnt = REG_BLDCNT = BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_BD | BLDCNT_TGT2_OBJ; // 15426
REG_BLDALPHA = BLDALPHA_BLEND(10, 6); // 1546
gUnknown_202D7FE = 0;
REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_WRAP | BGCNT_SCREENBASE(12); // 11264
@@ -121,7 +121,7 @@ void AgbMain(void)
LoadCharmaps();
sub_80098A0();
InitGraphics();
- sub_800B6F4(1, sub_800CE54);
+ SetInterruptCallback(1, VBlank_CB);
REG_DISPCNT = DISPCNT_WIN1_ON | DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP; // 32576
GameLoop();
Hang();
@@ -131,7 +131,7 @@ void sub_800B540(void)
{
s32 i;
for (i = 0; i < 6; i++) {
- gUnknown_202D5F0[i] = NULL;
+ gIntrCallbacks[i] = NULL;
}
nullsub_17();
@@ -213,7 +213,7 @@ bool8 sub_800B650(void)
}
}
-void SetInterruptFlag(u16 flag)
+void AckInterrupt(u16 flag)
{
if(!gInterruptsEnabled)
{
@@ -237,14 +237,14 @@ u32 *sub_800B6E8(u32 r0)
return &gIntrTable[r0];
}
-void *sub_800B6F4(u32 index, void * new_callback)
+void *SetInterruptCallback(u32 index, void * new_callback)
{
void *old_callback;
u32 interrupt_var;
interrupt_var = DisableInterrupts();
- old_callback = gUnknown_202D5F0[index];
- gUnknown_202D5F0[index] = new_callback;
+ old_callback = gIntrCallbacks[index];
+ gIntrCallbacks[index] = new_callback;
if(interrupt_var){
EnableInterrupts();
}
diff --git a/src/main_menu.c b/src/main_menu.c
index 3b405ae..e590334 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -28,9 +28,9 @@ extern void sub_8099690(u32);
extern void DrawMainMenu(void);
extern void CreateTradeItemsMenu(void);
extern void sub_8036FDC(s32);
-extern void sub_803A1E4(void);
+extern void CreateWirelessCommsMenu(void);
extern void CreateFriendRescueMenu(void);
-extern void sub_803A1D8(void);
+extern void CreateDualSlotMenu(void);
extern void CreateWonderMailMenu(void);
extern void CreateLoadScreen(u32);
extern s32 sub_8035DB4(u32);
@@ -41,8 +41,8 @@ extern s32 sub_803941C(void);
extern s32 UpdateTradeItemsMenu(void);
extern s32 UpdateFriendRescueMenu(void);
extern s32 UpdateWonderMailMenu(void);
-extern s32 sub_803A1DC(void);
-extern s32 sub_803A1E8(void);
+extern s32 UpdateDualSlotMenu(void);
+extern s32 UpdateWirelessCommsMenu(void);
extern s32 UpdateRescuePasswordMenu(void);
extern s32 sub_80383D4(void);
extern s32 sub_8038630(void);
@@ -53,8 +53,8 @@ extern void CleanTradeItemsMenu(void);
extern void sub_80370D4(void);
extern void CleanFriendRescueMenu(void);
extern void CleanWonderMailMenu(void);
-extern void nullsub_55(void);
-extern void sub_803A1EC(void);
+extern void CleanDualSlotMenu(void);
+extern void CleanWirelessCommsMenu(void);
extern void CleanRescuePasswordMenu(void);
extern void sub_80383A8(void);
extern void sub_8038604(void);
@@ -94,7 +94,7 @@ void SetUpMenu(void)
sub_8099690(0);
DrawMainMenu();
break;
- case 6:
+ case MENU_AWAITING_RESCUE:
case MENU_CONTINUE:
case MENU_DELETE_SAVE_PROMPT:
case 9:
@@ -113,11 +113,11 @@ void SetUpMenu(void)
case MENU_WONDER_MAIL:
CreateWonderMailMenu();
break;
- case 0xe:
- sub_803A1D8();
+ case MENU_DUAL_SLOT:
+ CreateDualSlotMenu();
break;
- case 0xf:
- sub_803A1E4();
+ case MENU_WIRELESS_COMMS:
+ CreateWirelessCommsMenu();
break;
case MENU_DISPLAY_RESCUE_PASSWORD:
case MENU_RESCUE_PASSWORD_ENTRY:
@@ -152,7 +152,7 @@ s32 UpdateMenu(void)
case MENU_MAIN_SCREEN:
nextMenu = UpdateMainMenu();
break;
- case 6:
+ case MENU_AWAITING_RESCUE:
case MENU_CONTINUE:
case MENU_DELETE_SAVE_PROMPT:
case 9:
@@ -179,15 +179,15 @@ s32 UpdateMenu(void)
nextMenu = MENU_NO_SCREEN_CHANGE;
}
break;
- case 0xe:
- iVar1 = sub_803A1DC();
+ case MENU_DUAL_SLOT:
+ iVar1 = UpdateDualSlotMenu();
nextMenu = MENU_MAIN_SCREEN;
if (iVar1 != 3) {
nextMenu = MENU_NO_SCREEN_CHANGE;
}
break;
- case 0xf:
- iVar1 = sub_803A1E8();
+ case MENU_WIRELESS_COMMS:
+ iVar1 = UpdateWirelessCommsMenu();
nextMenu = 5;
if ((iVar1 != 3) && (nextMenu = MENU_NO_SCREEN_CHANGE, iVar1 == 2)) {
nextMenu = MENU_MAIN_SCREEN;
@@ -232,7 +232,7 @@ void CleanUpMenu(void)
case MENU_MAIN_SCREEN:
CleanMainMenu();
break;
- case 6:
+ case MENU_AWAITING_RESCUE:
case MENU_CONTINUE:
case MENU_DELETE_SAVE_PROMPT:
case 9:
@@ -251,11 +251,11 @@ void CleanUpMenu(void)
case MENU_WONDER_MAIL:
CleanWonderMailMenu();
break;
- case 0xe:
- nullsub_55();
+ case MENU_DUAL_SLOT:
+ CleanDualSlotMenu();
break;
- case 0xf:
- sub_803A1EC();
+ case MENU_WIRELESS_COMMS:
+ CleanWirelessCommsMenu();
break;
case MENU_DISPLAY_RESCUE_PASSWORD:
case MENU_RESCUE_PASSWORD_ENTRY:
diff --git a/src/main_menu_1.c b/src/main_menu_1.c
new file mode 100644
index 0000000..6715af4
--- /dev/null
+++ b/src/main_menu_1.c
@@ -0,0 +1,225 @@
+#include "global.h"
+#include "main_menu.h"
+
+struct unkData
+{
+ u8 unk0[24];
+};
+
+struct unkSubStruct
+{
+ u32 unk0;
+ u32 unk4;
+};
+
+struct unkStruct_203B34C
+{
+ // size: 0x1A8
+ u32 unk0;
+ u32 unk4;
+ struct unkSubStruct *unk8; // Array of menu choices??
+ u8 fillC[0x30 - 0xC];
+ s16 unk30;
+ u8 fill32[0x144 - 0x32];
+ struct unkData unk144[4];
+ /* 0x1A4 */ u32 currMenuChoice;
+};
+
+extern struct unkStruct_203B34C *gUnknown_203B34C;
+
+
+extern u32 gUnknown_80E59E0;
+extern u32 gUnknown_203B350;
+extern u32 gUnknown_80E59F8;
+extern u32 gUnknown_80E5A78;
+extern u32 gUnknown_80E5B34;
+extern u32 gUnknown_80E5A90;
+extern u32 gUnknown_80E5A60;
+extern u32 gUnknown_80E5AFC;
+extern u32 gUnknown_80E5B8C;
+extern u32 gUnknown_80E5B4C;
+extern u32 gUnknown_80E5BC4;
+extern u32 gUnknown_80E5BDC;
+extern u32 gUnknown_80E5C18;
+
+extern u32 gUnknown_80E5CB4;
+extern u32 gUnknown_80E5D48;
+extern u32 gUnknown_80E5CCC;
+extern u32 gUnknown_80E5F1C;
+extern u32 gUnknown_80E5DA0;
+extern u32 gUnknown_80E5DF0;
+extern u32 gUnknown_80E5D0C;
+extern u32 gUnknown_80E6030;
+extern u32 gUnknown_80E5FCC;
+extern u32 gUnknown_80E5F80;
+extern u32 gUnknown_80E5EBC;
+extern u32 gUnknown_80E5E5C;
+
+extern u8 sub_803D0D8();
+extern s32 sub_8011C34();
+extern s32 sub_8095324(u32);
+extern void SetMenuItems(u32 *, struct unkData *, u32, u32 *, u32 *, u32, u32, u32);
+void SetMainMenuItems(void);
+extern u8 SetMainMenuText();
+extern void sub_8035CF4(u32 *, u32, u32);
+extern void sub_8035CC0(struct unkData *, u32);
+
+u8 SetMainMenuText(void)
+{
+ u32 menuChoice;
+ struct unkSubStruct *preload;
+
+ // Have to load the pointer before the index
+ preload = gUnknown_203B34C->unk8;
+ menuChoice = preload[gUnknown_203B34C->unk30].unk4; // chosen menu action?
+ if (gUnknown_203B34C->currMenuChoice == menuChoice) {
+ return 0;
+ }
+
+ gUnknown_203B34C->currMenuChoice = menuChoice;
+ sub_8035CC0(gUnknown_203B34C->unk144,2);
+ sub_8035CC0(gUnknown_203B34C->unk144,3);
+ switch(menuChoice) {
+ case MENU_WIRELESS_COMMS:
+ // Using wireless communications, you can go on an adventure to unknown worlds.
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E6030,0,0,0);
+ break;
+ case MENU_WONDER_MAIL:
+ // Using passwords, you can receive Wonder Mail
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5F80,0,0,0);
+ break;
+ case MENU_AWAITING_RESCUE:
+ // You are awaiting resuce by a friend
+ // You can give up waiting for rescue
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5F1C,0,0,0);
+ break;
+ case MENU_NEW_GAME:
+ // Start an entirely new adventure
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5CCC,0,0,0);
+ break;
+ case MENU_CONTINUE:
+ // Resume your adventure from where you last saved
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5DA0,0,0,0);
+ break;
+ case MENU_DELETE_SAVE_PROMPT:
+ // This will delete your saved game data.
+ // Beware! This will delete it forever
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5DF0,0,0,0);
+ break;
+ case MENU_ADVENTURE_LOG:
+ // Check your career as an adventurer
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5D0C,0,0,0);
+ break;
+ case MENU_FRIEND_RESCUE:
+ // Using a Game Link cable or passwords, friends may rescue each other
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5E5C,0,0,0);
+ break;
+ case MENU_TRADE_ITEMS:
+ // Using a Game Link cable you can trade stored items with a friend
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5EBC,0,0,0);
+ break;
+ case MENU_DUAL_SLOT:
+ // Using Dual Slot function, you can receive teams from your friends
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5FCC,0,0,0);
+ break;
+ case MENU_DEBUG:
+ // This is the Debug Mode.
+ // It won't be in the release version
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5D48,0,0,0);
+ break;
+ default:
+ break;
+ }
+ return 1;
+}
+
+void sub_803623C(void)
+{
+ sub_8035CC0(gUnknown_203B34C->unk144,1);
+ SetMainMenuItems();
+ gUnknown_203B34C->currMenuChoice = -1;
+ if (SetMainMenuText() != 0) {
+ sub_8035CF4(&gUnknown_203B34C->unk4,2,0);
+ }
+ sub_8035CF4(&gUnknown_203B34C->unk4,0,1);
+}
+
+void SetMainMenuItems(void)
+{
+ if (sub_8011C34() != -1) {
+ if (sub_8095324(1) == 0) {
+ if (sub_8095324(7) != 0) {
+ if (sub_803D0D8() != 0) {
+ // Revive Team
+ // Delete Save Data
+ // Adventure Log
+ // Friend Rescue
+ // Trade Items
+ // Wonder Mail
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,&gUnknown_80E5C18,1,gUnknown_203B350,1);
+ }
+ else {
+ // Revive Team
+ // Delete Save Data
+ // Adventure Log
+ // Friend Rescue
+ // Trade Items
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5BC4,&gUnknown_80E5BDC,1,gUnknown_203B350,1);
+ }
+ }
+ else {
+ if (sub_803D0D8() != 0) {
+ // Continue
+ // Delete Save Data
+ // Adventure Log
+ // Friend Rescue
+ // Trade Items
+ // Wonder Mail
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,&gUnknown_80E5AFC,1,gUnknown_203B350,1);
+ }
+ else {
+ // Continue
+ // Delete Save Data
+ // Adventure Log
+ // Friend Rescue
+ // Trade Items
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A60,&gUnknown_80E5A90,1,gUnknown_203B350,1);
+ }
+ }
+ }
+ else {
+ if (sub_803D0D8() != 0) {
+ // Awaiting Rescue
+ // Delete Save Data
+ // Adventure Log
+ // Friend Rescue
+ // Trade Items
+ // Wonder Mail
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,&gUnknown_80E5B8C,1,gUnknown_203B350,1);
+ }
+ else {
+ // Awaiting Rescue
+ // Delete Save Data
+ // Adventure Log
+ // Friend Rescue
+ // Trade Items
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5B34,&gUnknown_80E5B4C,1,gUnknown_203B350,1);
+ }
+ }
+ }
+ else
+ {
+ // New Game
+ // Adventure Log
+ SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E59E0,&gUnknown_80E59F8,1,gUnknown_203B350,1);
+ }
+}
+
+u8 sub_80363E0(void)
+{
+ if(gUnknown_203B34C == NULL)
+ return 0;
+ if(gUnknown_203B34C->unk0 == 0xC)
+ return 0;
+ return 1;
+}
diff --git a/src/main_menu_mid.c b/src/main_menu_mid.c
index 4d36edf..e6e0868 100644
--- a/src/main_menu_mid.c
+++ b/src/main_menu_mid.c
@@ -7,11 +7,40 @@ struct unkData
u8 unk0[24];
};
+struct unkSubStruct
+{
+ u32 unk0;
+ u32 unk4;
+};
+
+struct unkStruct_203B34C
+{
+ // size: 0x1A8
+ u32 unk0;
+ u32 unk4;
+ struct unkSubStruct *unk8; // Array of menu choices??
+ u8 fillC[0x30 - 0xC];
+ s16 unk30;
+ u8 fill32[0x144 - 0x32];
+ struct unkData unk144[4];
+ /* 0x1A4 */ u32 currMenuChoice;
+};
+
+extern struct unkStruct_203B34C *gUnknown_203B34C;
+
+
extern struct MainMenu *gMainMenu;
extern struct unkData gUnknown_80E59A8;
+extern struct unkData gUnknown_80E59C8;
extern void sub_8006518(struct unkData *);
extern void sub_800641C(struct unkData *, u32, u32);
+extern void *MemoryAlloc(u32, u32);
+extern void MemoryFill8(u8*, u8, s32);
+extern void MemoryFree(void *);
+
+extern u8 SetMainMenuText();
+extern void SetMainMenuItems();
void sub_8035CC0(struct unkData *dataArray, u32 index)
{
@@ -78,3 +107,102 @@ s32 sub_8035D74(void)
{
return gMainMenu->unk3C;
}
+
+NAKED
+void sub_8035D80(void *r0)
+{
+ asm_unified(
+ "\tldr r1, _08035D90\n"
+ "\tldr r2, [r1]\n"
+ "\tldr r1, [r0, 0x4]\n"
+ "\tldr r0, [r0]\n"
+ "\tstr r0, [r2, 0x30]\n"
+ "\tstr r1, [r2, 0x34]\n"
+ "\tbx lr\n"
+ "\t.align 2, 0\n"
+"_08035D90: .4byte gMainMenu");
+}
+
+u8 *sub_8035D94(void)
+{
+ return &gMainMenu->unk30;
+}
+
+
+void sub_8035DA0(void)
+{
+ gMainMenu->unk30 = 0;
+ gMainMenu->unk34 = 0;
+}
+
+u32 sub_8035DB4(u32 r0)
+{
+ u32 returnVar = 8;
+ switch(r0)
+ {
+ case MENU_COMMUNICATION_1:
+ returnVar = 0;
+ break;
+ case MENU_COMMUNICATION_2:
+ returnVar = 1;
+ break;
+ case 0x15:
+ returnVar = 2;
+ break;
+ case 0x16:
+ returnVar = 3;
+ break;
+ case 0x17:
+ returnVar = 4;
+ break;
+ case 0x18:
+ returnVar = 5;
+ break;
+ case 0x19:
+ returnVar = 6;
+ break;
+ case 0x1a:
+ returnVar = 7;
+ }
+ return returnVar;
+}
+
+void DrawMainMenu(void)
+{
+ s32 iVar3;
+
+ if(gUnknown_203B34C == NULL)
+ {
+ gUnknown_203B34C = MemoryAlloc(0x1A8, 8);
+ MemoryFill8((u8 *)gUnknown_203B34C, 0, 0x1A8);
+ }
+
+ for(iVar3 = 0; iVar3 < 4; iVar3++)
+ {
+ gUnknown_203B34C->unk144[iVar3] = gUnknown_80E59C8;
+ }
+
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B34C->unk144, 1, 1);
+ SetMainMenuItems();
+ gUnknown_203B34C->currMenuChoice = -1;
+
+ if(SetMainMenuText() != 0)
+ {
+ sub_8035CF4(&gUnknown_203B34C->unk4,2,0);
+ }
+
+ sub_8035CF4(&gUnknown_203B34C->unk4,0,1);
+ gUnknown_203B34C->unk0 = 1;
+}
+
+void CleanMainMenu(void)
+{
+ ResetUnusedInputStruct();
+ sub_800641C(NULL, 1, 1);
+ if(gUnknown_203B34C != NULL)
+ {
+ MemoryFree(gUnknown_203B34C);
+ gUnknown_203B34C = NULL;
+ }
+}
diff --git a/src/music_pre.c b/src/music_pre.c
index a325be6..b357b97 100644
--- a/src/music_pre.c
+++ b/src/music_pre.c
@@ -8,7 +8,7 @@ extern bool8 EnableInterrupts(void);
extern bool8 DisableInterrupts(void);
extern void SoundBiasReset();
extern void SoundBiasSet();
-extern void SetInterruptFlag(u16);
+extern void AckInterrupt(u16);
extern void nullsub_25();
extern void nullsub_18();
extern void UpdateSound();
@@ -17,7 +17,7 @@ extern void UpdateInput();
extern void sub_800C298(u16 r0);
typedef void (*IntrCallback)(void);
-extern IntrCallback gUnknown_202D5F0[];
+extern IntrCallback gIntrCallbacks[];
struct unkStruct_202D648
{
@@ -61,7 +61,7 @@ struct unkStruct_3000FD8
extern struct unkStruct_3000FD8 gUnknown_3000FD8[8];
extern u8 gUnknown_202D7FE;
-extern u16 gUnknown_202D7FC;
+extern u16 gBldCnt;
extern struct BGControlStruct gBG0Control;
extern struct BGControlStruct gBG1Control;
extern struct BGControlStruct gBG2Control;
@@ -84,8 +84,8 @@ void VBlankIntr(void)
gUnknown_203B0A0++;
SoundVSync();
BlinkSavingIcon();
- if (gUnknown_202D5F0[1] != NULL) {
- gUnknown_202D5F0[1]();
+ if (gIntrCallbacks[1] != NULL) {
+ gIntrCallbacks[1]();
}
index = 0;
while (index < gUnknown_203B0AA) {
@@ -100,7 +100,7 @@ void VBlankIntr(void)
if (gUnknown_203B099 == 0) {
UpdateSound();
}
- SetInterruptFlag(INTR_FLAG_VBLANK);
+ AckInterrupt(INTR_FLAG_VBLANK);
}
// Registers are a little off.. seems to be around the while loop
@@ -115,8 +115,8 @@ void VCountIntr(void)
sVar2 = sVar2 >> 16;
if (gUnknown_203B0AE < 0) {
- if (gUnknown_202D5F0[2] != 0) {
- gUnknown_202D5F0[2]();
+ if (gIntrCallbacks[2] != 0) {
+ gIntrCallbacks[2]();
}
gUnknown_203B0AE = 0;
}
@@ -134,7 +134,7 @@ void VCountIntr(void)
REG_DISPSTAT = gUnknown_202D648[gUnknown_203B0AE].unk2 << 8 | DISPSTAT_VBLANK_INTR | DISPSTAT_VCOUNT_INTR;
}
}
- SetInterruptFlag(INTR_FLAG_VCOUNT);
+ AckInterrupt(INTR_FLAG_VCOUNT);
}
#else
NAKED
@@ -232,7 +232,7 @@ void VCountIntr(void)
"\tstrh r0, [r2]\n"
"_0800BA34:\n"
"\tmovs r0, 0x4\n"
- "\tbl SetInterruptFlag\n"
+ "\tbl AckInterrupt\n"
"\tpop {r3}\n"
"\tmov r8, r3\n"
"\tpop {r4-r7}\n"
@@ -241,7 +241,7 @@ void VCountIntr(void)
"\t.align 2, 0\n"
"_0800BA44: .4byte 0x04000006\n"
"_0800BA48: .4byte gUnknown_203B0AE\n"
-"_0800BA4C: .4byte gUnknown_202D5F0\n"
+"_0800BA4C: .4byte gIntrCallbacks\n"
"_0800BA50: .4byte gUnknown_203B0AC\n"
"_0800BA54: .4byte gUnknown_202D648\n"
"_0800BA58: .4byte 0x04000004"
@@ -290,9 +290,9 @@ void xxx_update_bg_sound_input(void)
void Timer3Intr(void)
{
- if(gUnknown_202D5F0[4])
- gUnknown_202D5F0[4]();
- SetInterruptFlag(INTR_FLAG_TIMER3);
+ if(gIntrCallbacks[4])
+ gIntrCallbacks[4]();
+ AckInterrupt(INTR_FLAG_TIMER3);
}
// Unused
@@ -388,7 +388,7 @@ void UpdateBGControlRegisters(void)
}
REG_BG3CNT = BG[3] | 0x2f08;
- REG_BLDCNT = gUnknown_202D7FC;
+ REG_BLDCNT = gBldCnt;
}
// Some kind of initializer for music?
diff --git a/src/other_menus.c b/src/other_menus.c
index 8b5eca3..f64c976 100644
--- a/src/other_menus.c
+++ b/src/other_menus.c
@@ -323,6 +323,9 @@ void sub_80371B8(void)
if (sub_8037C10(0) != 0) {
sub_80376CC();
sub_8035CC0(&gUnknown_203B35C->unk15C,0);
+ // Success!
+ // The item exchange with your friend
+ // went through successfully
SetMenuItems(&gUnknown_203B35C->unk1C, gUnknown_203B35C->unk15C, 0, &gUnknown_80E6C50,
&gUnknown_80E6C68, 0, 6, 0);
sub_8035CF4(&gUnknown_203B35C->unk1C, 0, 1);
@@ -375,10 +378,12 @@ void sub_80371B8(void)
break;
case 0xe:
puVar5 = &gUnknown_80E6B78;
+ // Error, there was a problem on your friend's end
ppuVar4 = &gUnknown_80E6B90;
break;
case 0xf:
puVar5 = &gUnknown_80E6BF4;
+ // Error, your friend is not responding
ppuVar4 = &gUnknown_80E6C0C;
break;
}
diff --git a/src/pokemon.c b/src/pokemon.c
index 05a0dff..75d7577 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -10,22 +10,6 @@ extern struct OpenedFile *gMonsterParametersFile;
extern u16 gLevelCurrentPokeId;
extern struct gPokemon *gMonsterParameters;
-extern u64 gUnknown_8107544[];
-extern u32 gUnknown_810697C;
-extern void sub_8086448();
-extern void sub_80866C4(u32 *r0);
-
-void sub_808CD9C(u8 r0)
-{
- sub_8086448();
- sub_80866C4(&gUnknown_810697C);
-}
-
-u64 *sub_808CDB0(u8 r0)
-{
- return &gUnknown_8107544[r0];
-}
-
void LoadMonsterParameters(void)
{
gUnknown_203B45C = &gUnknown_202F400;
@@ -37,6 +21,5 @@ void LoadMonsterParameters(void)
u32 *sub_808CE00(void)
{
return &gUnknown_202F400;
-
}
diff --git a/src/unk_menu_203B360.c b/src/unk_menu_203B360.c
index 6d778c2..220b737 100644
--- a/src/unk_menu_203B360.c
+++ b/src/unk_menu_203B360.c
@@ -54,6 +54,9 @@ void sub_80382E4(s32 param_1)
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B360->unk148,1,1);
if (param_1 == 0x25) {
+ // Caution!
+ // The storage space is empty!
+ // Please check again.
SetMenuItems(&gUnknown_203B360->unk8,gUnknown_203B360->unk148,0,&gUnknown_80E6E94,&gUnknown_80E6EAC,
0,4,0);
}
diff --git a/src/wonder_mail.c b/src/wonder_mail.c
index 656d156..0947f24 100644
--- a/src/wonder_mail.c
+++ b/src/wonder_mail.c
@@ -10,11 +10,17 @@ extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4;
struct unkStruct_8095228
{
- u8 unkArray[0x10];
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+ u8 unk4;
+ u8 padding[0x10 - 0x5];
u32 unk10;
u8 padding2[0x20 - 0x14];
struct unkStruct_41C unk20;
- u8 padding3[0x2C - 0x24];
+ u8 padding3[0x28 - 0x24];
+ u32 unk28;
s8 unk2C;
u8 padding4[0x30 - 0x2D];
};
@@ -603,7 +609,7 @@ void sub_8028FDC(void)
{
case 8:
return_var = sub_8095228(gUnknown_203B2C0->unk218);
- if(sub_80A2824(return_var->unkArray[4]) == 0)
+ if(sub_80A2824(return_var->unk4) == 0)
{
sub_8028B04(0x1C);
}
@@ -891,7 +897,7 @@ void sub_80293F4(void)
switch(return_var)
{
case 3:
- switch(sub_8039068(0x1C, (gUnknown_203B2C0->unk8), temp.unkArray))
+ switch(sub_8039068(0x1C, (gUnknown_203B2C0->unk8), &temp.unk0))
{
case 8:
case 9:
@@ -921,8 +927,8 @@ void sub_80293F4(void)
break;
case 22:
sub_8095274(temp.unk10);
- temp.unkArray[0] = 2; // Some sort of Ack?
- sub_80951BC(temp.unkArray);
+ temp.unk0 = 2; // Some sort of Ack?
+ sub_80951BC(&temp.unk0);
sub_80141B4(gWonderMailAOKMailReceivedText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x101);
sub_8028B04(35);
break;
@@ -1912,7 +1918,7 @@ void sub_802A50C(void)
switch(return_var)
{
case 3:
- switch(sub_8039068(0x20,gUnknown_203B2C4->unk8,temp.unkArray))
+ switch(sub_8039068(0x20,gUnknown_203B2C4->unk8,&temp.unk0))
{
case 7:
case 8:
@@ -1943,7 +1949,7 @@ void sub_802A50C(void)
uVar1 = sub_809539C(4,temp.unk10);
puVar5 = sub_8095228(uVar1);
*puVar5 = temp;
- puVar5->unkArray[0] = 6;
+ puVar5->unk0 = 6;
gUnknown_203B2C4->unk430 = temp.unk10;
sub_802B2BC(0x21);
break;
diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c
new file mode 100644
index 0000000..12654e3
--- /dev/null
+++ b/src/wonder_mail_2.c
@@ -0,0 +1,290 @@
+#include "global.h"
+#include "file_system.h"
+#include "input.h"
+#include "pokemon.h"
+#include "constants/species.h"
+
+struct unkStruct_203B2C8
+{
+ // size: 0x140
+ u8 unk0;
+ u8 unk1;
+ u16 unk2;
+ /* 0x4 */ struct OpenedFile *faceFile;
+ /* 0x8 */ u8 *faceData;
+ /* 0xC */ u16 unkC;
+ /* 0xE */ u16 unkE;
+ /* 0x10 */ u8 unk10;
+ /* 0x11 */ u8 unk11;
+ /* 0x12 */ u8 unk12;
+ /* 0x13 */ u8 unk13;
+ /* 0x14 */ u8 unk14[4]; // Figure out size of this buffer
+ u8 fill18[0x114 - 0x18];
+ u8 unk114[0xA]; // holds species name
+ u8 fill118[0x128 - 0x11E];
+ u16 unk128;
+ u8 unk12A;
+ u8 unk12B;
+ u32 unk12C;
+ u8 unk130;
+ u8 unk131;
+ u8 unk132;
+ u8 unk133;
+ u8 unk134;
+ u8 fill135[0x3];
+ u32 unk138;
+};
+
+extern struct unkStruct_203B2C8 *gUnknown_203B2C8;
+
+struct unkStruct_41C
+{
+ u8 unk41C;
+ u8 unk41D;
+ u8 unk41E;
+ u8 unk41F;
+};
+
+
+struct unkStruct_8095228
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+ u8 unk4;
+ u8 padding[0x10 - 0x5];
+ u32 unk10;
+ u8 padding2[0x20 - 0x14];
+ u32 unk20;
+ u8 padding3[0x28 - 0x24];
+ u32 unk28;
+ s8 unk2C;
+ u8 padding4[0x30 - 0x2D];
+};
+
+extern void sub_80920D8(u8 *buffer);
+extern void sub_8097790();
+extern struct unkStruct_8095228 *sub_8095228(u8);
+extern char gUnknown_202E5D8[0x50];
+extern char gAvailablePokemonNames[0x50];
+void sub_808D8E0(u8 *, u32);
+extern u32 sub_802F298();
+extern void sub_802F2C0();
+extern u32 sub_8011C34();
+extern void *MemoryAlloc(u32, u32);
+extern void MemoryFill8(u8 *, u8, s32);
+extern void MemoryFree(void *);
+extern void sub_800641C(void *, u32, u32);
+extern u8 sub_8099394(u8 *);
+extern void sub_802B548(u32);
+extern u32 sub_80144A4(s32 *);
+extern void sub_8011C28(u32);
+extern void sub_8012574(u32);
+extern void sub_8012750();
+extern bool8 sub_8012600();
+
+
+extern void sub_802B560();
+extern void sub_802B57C();
+extern void sub_802B5B8();
+extern void sub_802B5FC();
+extern void sub_802B624();
+
+void sub_800D158(u8 *buffer, const char *text, ...);
+extern void sub_802F204(u8 *, u32);
+extern void sub_803C37C(u8 *, u32, u8 *);
+extern u32 sub_803C200(u8 *, u32);
+extern void sub_80141B4(const char *r0, u32, u32 *r1, u32);
+extern const char gUnknown_80DFAA8[];
+extern const char gUnknown_80DFB14[];
+extern const char gUnknown_80DF9F0[];
+extern const char gUnknown_80DF9F8[];
+extern u8 sub_80023E4(u32);
+extern char * GetMonSpecies(u32);
+
+u32 sub_802B2D4(void)
+{
+ s32 iVar1;
+ struct OpenedFile *faceFile;
+
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ gUnknown_203B2C8 = MemoryAlloc(0x140,8);
+ MemoryFill8((u8 *)gUnknown_203B2C8,0,0x140);
+ gUnknown_203B2C8->unk1 = -1;
+ sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER);
+ faceFile = GetDialogueSpriteDataPtr(SPECIES_PELIPPER);
+ gUnknown_203B2C8->faceFile = faceFile;
+ gUnknown_203B2C8->faceData = faceFile->data;
+ gUnknown_203B2C8->unk10 = 0;
+ gUnknown_203B2C8->unk11 = 0;
+ gUnknown_203B2C8->unk12 = 0;
+ gUnknown_203B2C8->unkC = 2;
+ gUnknown_203B2C8->unkE = 8;
+ if (sub_8099394(&gUnknown_203B2C8->unk1) == 1) {
+ sub_802B548(0);
+ iVar1 = 1;
+ }
+ else
+ iVar1 = 0;
+ return iVar1;
+}
+
+u32 sub_802B358(void)
+{
+ switch(gUnknown_203B2C8->unk0) {
+ case 0:
+ sub_802B560();
+ break;
+ case 1:
+ sub_802B57C();
+ break;
+ case 2:
+ sub_802B5B8();
+ break;
+ case 3:
+ sub_802B5FC();
+ break;
+ case 4:
+ sub_802B624();
+ break;
+ case 5:
+ return 3;
+ }
+ return 0;
+}
+
+void sub_802B3B8(void)
+{
+ if(gUnknown_203B2C8 != NULL)
+ {
+ CloseFile(gUnknown_203B2C8->faceFile);
+ MemoryFree(gUnknown_203B2C8);
+ gUnknown_203B2C8 = NULL;
+ }
+}
+
+void nullsub_132(void)
+{
+}
+
+void sub_802B3E0(void)
+{
+ struct unkStruct_8095228 *iVar3;
+ char *monName;
+ char teamNameBuffer[40];
+
+ switch(gUnknown_203B2C8->unk0) {
+ case 0:
+ if (sub_80023E4(0) != '\0') {
+ // Copy Team Name to buffer
+ sub_80920D8(teamNameBuffer);
+ }
+ else {
+ // Copy "????" to buffer
+ strcpy(teamNameBuffer,gUnknown_80DF9F0);
+ }
+ // Print and expand placeholders?
+ sub_800D158(gUnknown_203B2C8->unk14,gUnknown_80DF9F8,teamNameBuffer);
+ // Display to screen with Pelliper face
+ sub_80141B4(gUnknown_203B2C8->unk14, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d);
+ break;
+ case 1:
+ monName = GetMonSpecies(SPECIES_PELIPPER);
+ strcpy(gUnknown_203B2C8->unk114, monName);
+ gUnknown_203B2C8->unk128 = 0x130;
+ gUnknown_203B2C8->unk12A = 2;
+ gUnknown_203B2C8->unk12C = 0;
+ sub_8097790();
+ iVar3 = sub_8095228(gUnknown_203B2C8->unk1);
+ sub_803C37C(&iVar3->unk4, 0, &gUnknown_203B2C8->unk130);
+ gUnknown_203B2C8->unk138 = sub_803C200(&iVar3->unk4, 0);
+ gUnknown_203B2C8->unk131 = 0;
+ gUnknown_203B2C8->unk132 = 0;
+ gUnknown_203B2C8->unk133 = 10;
+ gUnknown_203B2C8->unk134 = 0;
+ sub_802F204(gUnknown_203B2C8->unk114, 0);
+ break;
+ case 2:
+ // I hope you will keep on rescuing your friends
+ // I must save your adventure
+ sub_80141B4(gUnknown_80DFAA8, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d);
+ break;
+ case 4:
+ // Oh yes, that's right. Please don't forget to send an A-OK Mail
+ // to the friend you just rescued
+ sub_80141B4(gUnknown_80DFB14, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d);
+ case 3:
+ case 5:
+ break;
+ }
+}
+
+void sub_802B548(u32 newState)
+{
+ gUnknown_203B2C8->unk0 = newState;
+ nullsub_132();
+ sub_802B3E0();
+}
+
+void sub_802B560(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B548(1);
+ }
+}
+
+void sub_802B57C(void)
+{
+ char *monName;
+
+ if (sub_802F298() == 3) {
+ sub_802F2C0();
+ sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER);
+ monName = GetMonSpecies(SPECIES_PELIPPER);
+ strcpy(gAvailablePokemonNames, monName);
+ sub_802B548(2);
+ }
+}
+
+void sub_802B5B8(void)
+{
+ u32 uVar2;
+ struct unkStruct_8095228 *puVar3;
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ uVar2 = sub_8011C34();
+ puVar3 = sub_8095228(gUnknown_203B2C8->unk1);
+ puVar3->unk0 = 4;
+ puVar3->unk28 = uVar2;
+ sub_802B548(3);
+ sub_8011C28(1);
+ sub_8012574(0);
+ }
+}
+
+void sub_802B5FC(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ if (sub_8012600() == '\0') {
+ sub_8012750();
+ sub_802B548(4);
+ }
+ }
+}
+
+
+void sub_802B624(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ sub_802B548(5);
+ }
+}
diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c
new file mode 100644
index 0000000..7951efc
--- /dev/null
+++ b/src/wonder_mail_3.c
@@ -0,0 +1,106 @@
+#include "global.h"
+
+struct unkStruct_203B2F8
+{
+ // size: 0x208
+ u32 unk0; // state
+ u32 unk4;
+ u8 unk8;
+ u8 unk9;
+ u8 unkA;
+ u8 unkB;
+ u32 unkC;
+ u8 fill10[0x6C - 0x10];
+ u32 unk6C;
+ u32 unk70;
+ u32 unk74;
+};
+extern struct unkStruct_203B2F8 *gUnknown_203B2F8;
+
+extern void *MemoryAlloc(u32, u32);
+extern void MemoryFree(void *);
+extern u8 sub_8099328(u8 *);
+extern u32 sub_8011C1C();
+extern void sub_802D1A0(u32);
+
+extern void sub_802D7D0();
+extern void sub_802D8CC();
+extern void sub_802D940();
+extern void sub_802D9F0();
+extern void sub_802DA60();
+extern void sub_802D82C();
+extern void sub_802DA84();
+extern void sub_802D1B8();
+extern void sub_802D2A8();
+
+
+u32 sub_802D098(u32 param_1)
+{
+ gUnknown_203B2F8 = MemoryAlloc(0x208,8);
+ gUnknown_203B2F8->unk6C = 0;
+ gUnknown_203B2F8->unk70 = 0;
+ gUnknown_203B2F8->unk74 = 0;
+ gUnknown_203B2F8->unkC = param_1;
+ gUnknown_203B2F8->unk8 = 0;
+ gUnknown_203B2F8->unk9 = sub_8099328(&gUnknown_203B2F8->unkA);
+ if (sub_8011C1C() != 2) {
+ gUnknown_203B2F8->unk9 = 0;
+ }
+ sub_802D1A0(0);
+ return 1;
+}
+
+u32 sub_802D0E0(void)
+{
+ switch(gUnknown_203B2F8->unk0) {
+ case 0:
+ break;
+ case 1:
+ sub_802D7D0();
+ break;
+ case 0xb:
+ case 0xc:
+ sub_802D8CC();
+ break;
+ case 0xd:
+ sub_802D940();
+ break;
+ case 0xe:
+ sub_802D9F0();
+ break;
+ case 0xf:
+ case 0x10:
+ sub_802DA60();
+ break;
+ case 9:
+ sub_802D82C();
+ break;
+ case 2:
+ return 3;
+ default:
+ sub_802DA84();
+ break;
+ }
+ return 0;
+}
+
+u8 sub_802D178(void)
+{
+ return gUnknown_203B2F8->unk8;
+}
+
+void sub_802D184(void)
+{
+ if(gUnknown_203B2F8 != NULL)
+ {
+ MemoryFree(gUnknown_203B2F8);
+ gUnknown_203B2F8 = NULL;
+ }
+}
+
+void sub_802D1A0(u32 newState)
+{
+ gUnknown_203B2F8->unk0 = newState;
+ sub_802D1B8();
+ sub_802D2A8();
+}
diff --git a/src/wonder_mail_main_menu.c b/src/wonder_mail_main_menu.c
index d8207c4..288d352 100644
--- a/src/wonder_mail_main_menu.c
+++ b/src/wonder_mail_main_menu.c
@@ -1,44 +1,442 @@
#include "global.h"
-#include "input.h"
+#include "save.h"
-extern u8 *gUnknown_203B3E8;
+#define EXIT_TO_MAIN_MENU 5
+#define PASSWORD_SUCCESS 13
+#define PASSWORD_INVALID 19
+#define PASSWORD_ENTRY_SCREEN 18
+
+struct unkWonderMailData
+{
+ u8 unk0[20];
+};
+
+struct unkStruct_203B3E8
+{
+ // size: 0x49C
+ u8 unk0; // state variable?
+ u8 PasswordEntryBuffer[0x36]; // Wonder Mail Buffer...
+ struct unkWonderMailData unk38; // 0x30 - 0x14
+ u8 unk38_1[0x30 - 20]; // TODO: split for the ldm/stm stuff (fix dumb hack)
+ u8 fill68[0x1EC - 0x68];
+ u32 unk1EC;
+ u8 fill1F0[0x24C - 0x1F0];
+ u32 unk24C;
+ u32 unk250;
+ u8 fill254[0x3C0 - 0x254];
+ struct unkWonderMailData unk3C0; // 0x3C0 + 0x14
+ u8 fill3D0[0x490 - 0x3D4];
+ u32 unk490;
+ u32 unk494;
+ u8 unk498;
+ u8 unk499;
+ u8 unk49A;
+ u8 unk49B;
+};
+
+extern u32 sub_8095324(u32);
+extern u32 sub_80144A4(s32 *);
+extern u32 sub_8011C1C(void);
+extern struct unkStruct_203B3E8 *gUnknown_203B3E8;
+extern void* MemoryAlloc(u32, u32);
+extern void MemoryFree(void *);
+extern void MemoryFill8(u8 *dest, u8 value, s32 size);
+extern void sub_803A1C0(u8);
+extern void ResetUnusedInputStruct(void);
extern void sub_800641C(void *, u32, u32);
-extern void nullsub_54();
-extern void sub_8039E18();
+extern void sub_8030DE4(void);
+extern void sub_801B450(void);
+extern void sub_803084C(void);
+extern void sub_801CBB8(void);
+extern void sub_80155F0(void);
+extern void sub_8031E10(void);
+
+extern u32 sub_802D0E0();
+extern u8 sub_802D178();
+extern void sub_802D184();
+
+extern s32 sub_80154F0();
+extern bool8 sub_803D358(u8 *, void *);
+extern bool8 sub_80959C0(void *);
+extern void sub_80141B4(u32 *r0, u32, u32 *r1, u32);
+
+void sub_8039BAC(u32);
+void sub_8039A18(void);
+void sub_8039AA8(void);
+void sub_8039B14(void);
+void sub_8039B20(void);
+void sub_8039B58(void);
+void sub_8039D88(void);
+void sub_8039D28(void);
+void sub_8039D68(void);
+void sub_8039DA4(void);
+void sub_8039DCC(void);
+void sub_8039B3C(void);
+void sub_8039D0C(void);
+void sub_8039C60(void);
+void sub_8039DE8(void);
+
+
+extern u32 gUnknown_80E7914;
+extern u32 gUnknown_80E7938;
+extern u32 gUnknown_80E7994;
+extern u32 gUnknown_80E79E4;
+extern u32 gUnknown_80E7A48;
+
+bool8 sub_8039880(void)
+{
+ return (sub_8095324(1) != 0 || sub_8095324(7) != 0 || sub_8011C1C() == 2);
+}
+
+bool8 CreateWonderMailMenu(void)
+{
+ int iVar2;
+
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+
+ gUnknown_203B3E8 = MemoryAlloc(sizeof(struct unkStruct_203B3E8), 8);
+ MemoryFill8((u8 *)gUnknown_203B3E8, 0, sizeof(struct unkStruct_203B3E8));
+
+ for(iVar2 = 0; iVar2 < 0x36; iVar2++){
+ gUnknown_203B3E8->PasswordEntryBuffer[iVar2] = 0;
+ }
+
+ gUnknown_203B3E8->unk490 = 3;
+ gUnknown_203B3E8->unk494 = 2;
+ gUnknown_203B3E8->unk498 = 1;
+ gUnknown_203B3E8->unk490 = 5; // ??? Why?
+ sub_803A1C0(0x11); // 0x11 -> Display "Enter Wonder Mail Password"
+ return 1;
+}
+
+u8 UpdateWonderMailMenu(void)
+{
+ switch(gUnknown_203B3E8->unk0) {
+ case 4:
+ sub_8039A18();
+ break;
+ case EXIT_TO_MAIN_MENU: // When you exit out of the menu
+ return 3;
+ case 8:
+ sub_8039AA8();
+ break;
+ case 11:
+ break;
+ case 12:
+ sub_8039B14();
+ break;
+ case 6:
+ sub_8039B20();
+ break;
+ case 9:
+ sub_8039B58();
+ break;
+ case 7:
+ sub_8039D88();
+ break;
+ case PASSWORD_SUCCESS:
+ sub_8039D28();
+ break;
+ case 14:
+ sub_8039D68();
+ break;
+ case 15: // Saving adventure
+ sub_8039DA4();
+ break;
+ case 16: // Display "Recieved Wonder Mail was added" and go back to main menu
+ sub_8039DCC();
+ break;
+ case 10:
+ sub_8039B3C();
+ break;
+ case 17: // "Please enter the Wonder Mail Password" Screen
+ sub_8039D0C();
+ break;
+ case PASSWORD_ENTRY_SCREEN: // Password Entry
+ sub_8039C60();
+ break;
+ case PASSWORD_INVALID:
+ sub_8039DE8();
+ }
+ return 0;
+}
+
+void CleanWonderMailMenu(void)
+{
+ if (gUnknown_203B3E8 != NULL) {
+ MemoryFree(gUnknown_203B3E8);
+ gUnknown_203B3E8 = NULL;
+ sub_8030DE4(); // Frees 203B324
+ sub_801B450(); // Frees 203B230
+ sub_803084C(); // Frees 203B320
+ sub_801CBB8(); // Frees 203B244
+ sub_80155F0(); // Frees 203B1FC
+ sub_8031E10(); // Frees 203B334
+ }
+}
+
+void sub_8039A18(void)
+{
+ s32 local_8;
+
+ if (sub_80144A4(&local_8) == 0) {
+ gUnknown_203B3E8->unk24C = 10;
+ switch(local_8) {
+ case 3:
+ case 4:
+ gUnknown_203B3E8->unk490 = 3;
+ sub_803A1C0(8);
+ break;
+ case 5:
+ gUnknown_203B3E8->unk490 = 5;
+ sub_803A1C0(17);
+ break;
+ case 0:
+ case 8:
+ sub_803A1C0(EXIT_TO_MAIN_MENU);
+ break;
+ }
+ }
+}
+
+void sub_8039AA8(void)
+{
+ s32 local_8;
+
+ if (sub_80144A4(&local_8) == 0) {
+ switch(local_8){
+ case 6:
+ if (gUnknown_203B3E8->unk494 == 1) {
+ sub_803A1C0(2);
+ }
+ else {
+ sub_803A1C0(12);
+ }
+ break;
+ case 0:
+ if (gUnknown_203B3E8->unk494 == 1) {
+ sub_803A1C0(1);
+ }
+ else {
+ sub_803A1C0(4);
+ }
+ break;
+ }
+ }
+}
+
+void sub_8039B14(void)
+{
+ sub_803A1C0(6);
+}
+
+void sub_8039B20(void)
+{
+ s32 local_8;
+
+ if (sub_80144A4(&local_8) == 0) {
+ sub_803A1C0(9);
+ }
+}
+
+void sub_8039B3C(void)
+{
+ s32 local_8;
+
+ if (sub_80144A4(&local_8) == 0) {
+ sub_803A1C0(4);
+ }
+}
+
+void sub_8039B58(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ if (gUnknown_203B3E8->unk250 == 0) {
+ switch(gUnknown_203B3E8->unk24C){
+ case 9:
+ sub_803A1C0(7);
+ break;
+ case 10:
+ sub_803A1C0(PASSWORD_SUCCESS);
+ break;
+ }
+ }
+ else {
+ sub_8039BAC(gUnknown_203B3E8->unk250);
+ sub_803A1C0(10);
+ }
+ }
+}
+
+void sub_8039BAC(u32 arg)
+{
+ switch(arg)
+ {
+ case 0:
+ break;
+ case 1:
+ // "Communication Error"
+ sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
+ break;
+ case 3:
+ // Incorrect number of GBA Systems
+ sub_80141B4(&gUnknown_80E7938, 0, 0, 0x101);
+ break;
+ case 2:
+ // No response from friend. Redo from start
+ sub_80141B4(&gUnknown_80E7994, 0, 0, 0x101);
+ break;
+ case 4:
+ // Sender and receiver in different modes
+ sub_80141B4(&gUnknown_80E79E4, 0, 0, 0x101);
+ break;
+ case 5:
+ // "Communication Error"
+ sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
+ break;
+ case 14:
+ // "Communication Error"
+ sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
+ break;
+ case 15: // "No response from your friend. Make sure sender and receiver are ready"
+ sub_80141B4(&gUnknown_80E7A48, 0, 0, 0x101);
+ break;
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ case PASSWORD_SUCCESS:
+ default:
+ // "Communication Error"
+ sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
+ break;
+
+ }
+}
+
+void sub_8039C60(void)
+{
+ int iVar2;
+
+ iVar2 = sub_80154F0();
+ MemoryFill8((u8 *)&gUnknown_203B3E8->unk38, 0, 0x30);
+ switch(iVar2){
+ case 3:
+ sub_80155F0();
+ ResetUnusedInputStruct();
+ sub_800641C(&gUnknown_203B3E8->unk1EC,1,1);
+ if ( !sub_803D358(gUnknown_203B3E8->PasswordEntryBuffer, &gUnknown_203B3E8->unk38) || !sub_80959C0(&gUnknown_203B3E8->unk38) )
+ {
+ // Invalid password
+ sub_803A1C0(PASSWORD_INVALID);
+ }
+ else {
+ // Successful password
+ // Copy the decoded data to another buffer?
+ gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->unk38;
+
+ gUnknown_203B3E8->unk498 = 1;
+ sub_803A1C0(PASSWORD_SUCCESS);
+ }
+ break;
+ case 2:
+ sub_80155F0();
+ ResetUnusedInputStruct();
+ sub_800641C(&gUnknown_203B3E8->unk1EC,1,1);
+ sub_803A1C0(EXIT_TO_MAIN_MENU);
+ break;
+ }
+}
+
+void sub_8039D0C(void)
+{
+ int iVar2;
+ if(sub_80144A4(&iVar2) == 0)
+ {
+ sub_803A1C0(PASSWORD_ENTRY_SCREEN);
+ }
+}
-void sub_803A1C0(u8 r0)
+void sub_8039D28(void)
{
- *gUnknown_203B3E8 = r0;
- nullsub_54();
- sub_8039E18();
+ if (sub_802D0E0() == 3) {
+ gUnknown_203B3E8->unk498 = sub_802D178();
+ sub_802D184();
+ if (gUnknown_203B3E8->unk498 != 0) {
+ sub_803A1C0(0xe);
+ }
+ else {
+ sub_803A1C0(0x10);
+ }
+ }
}
-u32 sub_803A1D8(void)
+void sub_8039D68(void)
{
- return 1;
+ int iVar2;
+ if(sub_80144A4(&iVar2) == 0)
+ {
+ sub_803A1C0(0xF);
+ sub_8012574(0); // "Saving Adventure.."
+ }
}
-u32 sub_803A1DC(void)
+void sub_8039D88(void)
{
- return 0;
+ int iVar2;
+ if(sub_80144A4(&iVar2) == 0)
+ {
+ sub_803A1C0(8);
+ }
}
-void nullsub_55()
+void sub_8039DA4(void)
{
+ int iVar2;
+ if(sub_80144A4(&iVar2) == 0)
+ {
+ if(!sub_8012600())
+ {
+ sub_8012750();
+ sub_803A1C0(0x10);
+ }
+ }
}
-u32 sub_803A1E4(void)
+void sub_8039DCC(void)
{
- return 1;
+ int iVar2;
+ if(sub_80144A4(&iVar2) == 0)
+ {
+ sub_803A1C0(EXIT_TO_MAIN_MENU);
+ }
}
-u32 sub_803A1E8(void)
+void sub_8039DE8(void)
{
- return 2;
+ int iVar2;
+
+ // Prompt to re-enter password
+ if(sub_80144A4(&iVar2) == 0)
+ {
+ switch(iVar2)
+ {
+ case 6: // Yes
+ sub_803A1C0(0x11);
+ break;
+ case 0: // No
+ sub_803A1C0(EXIT_TO_MAIN_MENU);
+ break;
+ }
+ }
}
-void sub_803A1EC(void)
+void nullsub_54(void)
{
- ResetUnusedInputStruct();
- sub_800641C(NULL, 1, 1);
}
diff --git a/src/wonder_mail_main_menu_pre.c b/src/wonder_mail_main_menu_pre.c
deleted file mode 100644
index 288d352..0000000
--- a/src/wonder_mail_main_menu_pre.c
+++ /dev/null
@@ -1,442 +0,0 @@
-#include "global.h"
-#include "save.h"
-
-#define EXIT_TO_MAIN_MENU 5
-#define PASSWORD_SUCCESS 13
-#define PASSWORD_INVALID 19
-#define PASSWORD_ENTRY_SCREEN 18
-
-struct unkWonderMailData
-{
- u8 unk0[20];
-};
-
-struct unkStruct_203B3E8
-{
- // size: 0x49C
- u8 unk0; // state variable?
- u8 PasswordEntryBuffer[0x36]; // Wonder Mail Buffer...
- struct unkWonderMailData unk38; // 0x30 - 0x14
- u8 unk38_1[0x30 - 20]; // TODO: split for the ldm/stm stuff (fix dumb hack)
- u8 fill68[0x1EC - 0x68];
- u32 unk1EC;
- u8 fill1F0[0x24C - 0x1F0];
- u32 unk24C;
- u32 unk250;
- u8 fill254[0x3C0 - 0x254];
- struct unkWonderMailData unk3C0; // 0x3C0 + 0x14
- u8 fill3D0[0x490 - 0x3D4];
- u32 unk490;
- u32 unk494;
- u8 unk498;
- u8 unk499;
- u8 unk49A;
- u8 unk49B;
-};
-
-extern u32 sub_8095324(u32);
-extern u32 sub_80144A4(s32 *);
-extern u32 sub_8011C1C(void);
-extern struct unkStruct_203B3E8 *gUnknown_203B3E8;
-extern void* MemoryAlloc(u32, u32);
-extern void MemoryFree(void *);
-extern void MemoryFill8(u8 *dest, u8 value, s32 size);
-extern void sub_803A1C0(u8);
-extern void ResetUnusedInputStruct(void);
-extern void sub_800641C(void *, u32, u32);
-extern void sub_8030DE4(void);
-extern void sub_801B450(void);
-extern void sub_803084C(void);
-extern void sub_801CBB8(void);
-extern void sub_80155F0(void);
-extern void sub_8031E10(void);
-
-extern u32 sub_802D0E0();
-extern u8 sub_802D178();
-extern void sub_802D184();
-
-extern s32 sub_80154F0();
-extern bool8 sub_803D358(u8 *, void *);
-extern bool8 sub_80959C0(void *);
-extern void sub_80141B4(u32 *r0, u32, u32 *r1, u32);
-
-void sub_8039BAC(u32);
-void sub_8039A18(void);
-void sub_8039AA8(void);
-void sub_8039B14(void);
-void sub_8039B20(void);
-void sub_8039B58(void);
-void sub_8039D88(void);
-void sub_8039D28(void);
-void sub_8039D68(void);
-void sub_8039DA4(void);
-void sub_8039DCC(void);
-void sub_8039B3C(void);
-void sub_8039D0C(void);
-void sub_8039C60(void);
-void sub_8039DE8(void);
-
-
-extern u32 gUnknown_80E7914;
-extern u32 gUnknown_80E7938;
-extern u32 gUnknown_80E7994;
-extern u32 gUnknown_80E79E4;
-extern u32 gUnknown_80E7A48;
-
-bool8 sub_8039880(void)
-{
- return (sub_8095324(1) != 0 || sub_8095324(7) != 0 || sub_8011C1C() == 2);
-}
-
-bool8 CreateWonderMailMenu(void)
-{
- int iVar2;
-
- ResetUnusedInputStruct();
- sub_800641C(0,1,1);
-
- gUnknown_203B3E8 = MemoryAlloc(sizeof(struct unkStruct_203B3E8), 8);
- MemoryFill8((u8 *)gUnknown_203B3E8, 0, sizeof(struct unkStruct_203B3E8));
-
- for(iVar2 = 0; iVar2 < 0x36; iVar2++){
- gUnknown_203B3E8->PasswordEntryBuffer[iVar2] = 0;
- }
-
- gUnknown_203B3E8->unk490 = 3;
- gUnknown_203B3E8->unk494 = 2;
- gUnknown_203B3E8->unk498 = 1;
- gUnknown_203B3E8->unk490 = 5; // ??? Why?
- sub_803A1C0(0x11); // 0x11 -> Display "Enter Wonder Mail Password"
- return 1;
-}
-
-u8 UpdateWonderMailMenu(void)
-{
- switch(gUnknown_203B3E8->unk0) {
- case 4:
- sub_8039A18();
- break;
- case EXIT_TO_MAIN_MENU: // When you exit out of the menu
- return 3;
- case 8:
- sub_8039AA8();
- break;
- case 11:
- break;
- case 12:
- sub_8039B14();
- break;
- case 6:
- sub_8039B20();
- break;
- case 9:
- sub_8039B58();
- break;
- case 7:
- sub_8039D88();
- break;
- case PASSWORD_SUCCESS:
- sub_8039D28();
- break;
- case 14:
- sub_8039D68();
- break;
- case 15: // Saving adventure
- sub_8039DA4();
- break;
- case 16: // Display "Recieved Wonder Mail was added" and go back to main menu
- sub_8039DCC();
- break;
- case 10:
- sub_8039B3C();
- break;
- case 17: // "Please enter the Wonder Mail Password" Screen
- sub_8039D0C();
- break;
- case PASSWORD_ENTRY_SCREEN: // Password Entry
- sub_8039C60();
- break;
- case PASSWORD_INVALID:
- sub_8039DE8();
- }
- return 0;
-}
-
-void CleanWonderMailMenu(void)
-{
- if (gUnknown_203B3E8 != NULL) {
- MemoryFree(gUnknown_203B3E8);
- gUnknown_203B3E8 = NULL;
- sub_8030DE4(); // Frees 203B324
- sub_801B450(); // Frees 203B230
- sub_803084C(); // Frees 203B320
- sub_801CBB8(); // Frees 203B244
- sub_80155F0(); // Frees 203B1FC
- sub_8031E10(); // Frees 203B334
- }
-}
-
-void sub_8039A18(void)
-{
- s32 local_8;
-
- if (sub_80144A4(&local_8) == 0) {
- gUnknown_203B3E8->unk24C = 10;
- switch(local_8) {
- case 3:
- case 4:
- gUnknown_203B3E8->unk490 = 3;
- sub_803A1C0(8);
- break;
- case 5:
- gUnknown_203B3E8->unk490 = 5;
- sub_803A1C0(17);
- break;
- case 0:
- case 8:
- sub_803A1C0(EXIT_TO_MAIN_MENU);
- break;
- }
- }
-}
-
-void sub_8039AA8(void)
-{
- s32 local_8;
-
- if (sub_80144A4(&local_8) == 0) {
- switch(local_8){
- case 6:
- if (gUnknown_203B3E8->unk494 == 1) {
- sub_803A1C0(2);
- }
- else {
- sub_803A1C0(12);
- }
- break;
- case 0:
- if (gUnknown_203B3E8->unk494 == 1) {
- sub_803A1C0(1);
- }
- else {
- sub_803A1C0(4);
- }
- break;
- }
- }
-}
-
-void sub_8039B14(void)
-{
- sub_803A1C0(6);
-}
-
-void sub_8039B20(void)
-{
- s32 local_8;
-
- if (sub_80144A4(&local_8) == 0) {
- sub_803A1C0(9);
- }
-}
-
-void sub_8039B3C(void)
-{
- s32 local_8;
-
- if (sub_80144A4(&local_8) == 0) {
- sub_803A1C0(4);
- }
-}
-
-void sub_8039B58(void)
-{
- s32 temp;
-
- if (sub_80144A4(&temp) == 0) {
- if (gUnknown_203B3E8->unk250 == 0) {
- switch(gUnknown_203B3E8->unk24C){
- case 9:
- sub_803A1C0(7);
- break;
- case 10:
- sub_803A1C0(PASSWORD_SUCCESS);
- break;
- }
- }
- else {
- sub_8039BAC(gUnknown_203B3E8->unk250);
- sub_803A1C0(10);
- }
- }
-}
-
-void sub_8039BAC(u32 arg)
-{
- switch(arg)
- {
- case 0:
- break;
- case 1:
- // "Communication Error"
- sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
- break;
- case 3:
- // Incorrect number of GBA Systems
- sub_80141B4(&gUnknown_80E7938, 0, 0, 0x101);
- break;
- case 2:
- // No response from friend. Redo from start
- sub_80141B4(&gUnknown_80E7994, 0, 0, 0x101);
- break;
- case 4:
- // Sender and receiver in different modes
- sub_80141B4(&gUnknown_80E79E4, 0, 0, 0x101);
- break;
- case 5:
- // "Communication Error"
- sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
- break;
- case 14:
- // "Communication Error"
- sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
- break;
- case 15: // "No response from your friend. Make sure sender and receiver are ready"
- sub_80141B4(&gUnknown_80E7A48, 0, 0, 0x101);
- break;
- case 6:
- case 7:
- case 8:
- case 9:
- case 10:
- case 11:
- case 12:
- case PASSWORD_SUCCESS:
- default:
- // "Communication Error"
- sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
- break;
-
- }
-}
-
-void sub_8039C60(void)
-{
- int iVar2;
-
- iVar2 = sub_80154F0();
- MemoryFill8((u8 *)&gUnknown_203B3E8->unk38, 0, 0x30);
- switch(iVar2){
- case 3:
- sub_80155F0();
- ResetUnusedInputStruct();
- sub_800641C(&gUnknown_203B3E8->unk1EC,1,1);
- if ( !sub_803D358(gUnknown_203B3E8->PasswordEntryBuffer, &gUnknown_203B3E8->unk38) || !sub_80959C0(&gUnknown_203B3E8->unk38) )
- {
- // Invalid password
- sub_803A1C0(PASSWORD_INVALID);
- }
- else {
- // Successful password
- // Copy the decoded data to another buffer?
- gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->unk38;
-
- gUnknown_203B3E8->unk498 = 1;
- sub_803A1C0(PASSWORD_SUCCESS);
- }
- break;
- case 2:
- sub_80155F0();
- ResetUnusedInputStruct();
- sub_800641C(&gUnknown_203B3E8->unk1EC,1,1);
- sub_803A1C0(EXIT_TO_MAIN_MENU);
- break;
- }
-}
-
-void sub_8039D0C(void)
-{
- int iVar2;
- if(sub_80144A4(&iVar2) == 0)
- {
- sub_803A1C0(PASSWORD_ENTRY_SCREEN);
- }
-}
-
-void sub_8039D28(void)
-{
- if (sub_802D0E0() == 3) {
- gUnknown_203B3E8->unk498 = sub_802D178();
- sub_802D184();
- if (gUnknown_203B3E8->unk498 != 0) {
- sub_803A1C0(0xe);
- }
- else {
- sub_803A1C0(0x10);
- }
- }
-}
-
-void sub_8039D68(void)
-{
- int iVar2;
- if(sub_80144A4(&iVar2) == 0)
- {
- sub_803A1C0(0xF);
- sub_8012574(0); // "Saving Adventure.."
- }
-}
-
-void sub_8039D88(void)
-{
- int iVar2;
- if(sub_80144A4(&iVar2) == 0)
- {
- sub_803A1C0(8);
- }
-}
-
-void sub_8039DA4(void)
-{
- int iVar2;
- if(sub_80144A4(&iVar2) == 0)
- {
- if(!sub_8012600())
- {
- sub_8012750();
- sub_803A1C0(0x10);
- }
- }
-}
-
-void sub_8039DCC(void)
-{
- int iVar2;
- if(sub_80144A4(&iVar2) == 0)
- {
- sub_803A1C0(EXIT_TO_MAIN_MENU);
- }
-}
-
-void sub_8039DE8(void)
-{
- int iVar2;
-
- // Prompt to re-enter password
- if(sub_80144A4(&iVar2) == 0)
- {
- switch(iVar2)
- {
- case 6: // Yes
- sub_803A1C0(0x11);
- break;
- case 0: // No
- sub_803A1C0(EXIT_TO_MAIN_MENU);
- break;
- }
- }
-}
-
-void nullsub_54(void)
-{
-}