diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2021-04-19 21:55:40 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-19 23:55:40 -0500 |
commit | f65dee5a143bd543c74c010d7252eb76893ee243 (patch) | |
tree | d343e826c63f8b501d37873c3c7bc1f010819deb /src | |
parent | d316d1e359c7672277a9cf644acd4e40170f5968 (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.c | 6 | ||||
-rw-r--r-- | src/code_800558C.c | 2 | ||||
-rw-r--r-- | src/code_800C9CC.c | 14 | ||||
-rw-r--r-- | src/code_8040094.c | 15 | ||||
-rw-r--r-- | src/code_8041AD0.c | 6 | ||||
-rw-r--r-- | src/code_8048480.c | 74 | ||||
-rw-r--r-- | src/code_80521D0_1.c | 1197 | ||||
-rw-r--r-- | src/code_8057824.c | 118 | ||||
-rw-r--r-- | src/code_8057824_1.c | 2661 | ||||
-rw-r--r-- | src/cpu.c | 16 | ||||
-rw-r--r-- | src/ds_menus.c | 44 | ||||
-rw-r--r-- | src/m4a.c | 75 | ||||
-rw-r--r-- | src/main.c | 22 | ||||
-rw-r--r-- | src/main_menu.c | 42 | ||||
-rw-r--r-- | src/main_menu_1.c | 225 | ||||
-rw-r--r-- | src/main_menu_mid.c | 128 | ||||
-rw-r--r-- | src/music_pre.c | 30 | ||||
-rw-r--r-- | src/other_menus.c | 5 | ||||
-rw-r--r-- | src/pokemon.c | 17 | ||||
-rw-r--r-- | src/unk_menu_203B360.c | 3 | ||||
-rw-r--r-- | src/wonder_mail.c | 22 | ||||
-rw-r--r-- | src/wonder_mail_2.c | 290 | ||||
-rw-r--r-- | src/wonder_mail_3.c | 106 | ||||
-rw-r--r-- | src/wonder_mail_main_menu.c | 438 | ||||
-rw-r--r-- | src/wonder_mail_main_menu_pre.c | 442 |
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; +} @@ -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); +} @@ -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) @@ -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) -{ -} |