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/code_80521D0_1.c | |
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/code_80521D0_1.c')
-rw-r--r-- | src/code_80521D0_1.c | 1197 |
1 files changed, 1156 insertions, 41 deletions
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]; +} |