From 86196330be74dc38d2d7f4ee982cdb54bb4ea101 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 3 Jun 2022 17:52:24 -0700 Subject: [PATCH 01/11] document some rescue password --- include/rescue_password_menu.h | 20 ++++++ src/friend_rescue_1.c | 29 ++++---- src/rescue_password_menu.c | 128 ++++++++++++++++----------------- src/thank_you_wonder_mail.c | 15 ++-- src/wonder_mail.c | 11 +-- sym_ewram.txt | 2 +- 6 files changed, 111 insertions(+), 94 deletions(-) diff --git a/include/rescue_password_menu.h b/include/rescue_password_menu.h index 588251963..54b965fec 100644 --- a/include/rescue_password_menu.h +++ b/include/rescue_password_menu.h @@ -24,6 +24,26 @@ struct RescuePasswordMenu u32 unk210; }; + +#define PASSWORD_ENTRY_DUPLICATE_SOS_MAIL 0x7 +#define PASSWORD_ENTRY_DUPLICATE_AOK_MAIL 0x9 +#define PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL 0xB + +#define PASSWORD_ENTRY_INCORRECT_PASSWORD 0x11 + +#define PASSWORD_ENTRY_NOT_SOS_MAIL 0x12 +#define PASSWORD_ENTRY_NOT_AOK_MAIL 0x13 +#define PASSWORD_ENTRY_NOT_THANK_YOU_MAIL 0x14 + +#define PASSWORD_ENTRY_SOS_MAIL_SUCCESS 0x16 +#define PASSWORD_ENTRY_AOK_MAIL_SUCCESS 0x17 +#define PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS 0x18 + +#define PASSWORD_ENTRY_SOS_MAIL_MODE 0x1C +#define PASSWORD_ENTRY_AOK_MAIL_MODE 0x1E +#define PASSWORD_ENTRY_THANK_YOU_MAIL_MODE 0x20 + + void CreateRescuePasswordMenu(u32 currMenu); s32 UpdateRescuePasswordMenu(void); void CleanRescuePasswordMenu(void); diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c index c3571c0a9..8b2281ca6 100644 --- a/src/friend_rescue_1.c +++ b/src/friend_rescue_1.c @@ -9,6 +9,7 @@ #include "sub_8095228.h" #include "item.h" #include "code_8094F88.h" +#include "rescue_password_menu.h" extern struct TeamInventory *gTeamInventory_203B460; extern u8 *gUnknown_203B484; @@ -447,44 +448,44 @@ void sub_8033DBC(void) switch(gUnknown_203B33C->unk528) { case 3: - input_var = 0x1C; + input_var = PASSWORD_ENTRY_SOS_MAIL_MODE; break; case 0x12: - input_var = 0x1E; + input_var = PASSWORD_ENTRY_AOK_MAIL_MODE; break; default: break; } switch(sub_8039068(input_var, gUnknown_203B33C->passwordBuffer, &temp)) { - case 17: + case PASSWORD_ENTRY_INCORRECT_PASSWORD: sub_8014248(gUnknown_80E48A8, 0, 6, gUnknown_80E2290, 0, 4, 0, 0, 0x101); SetFriendRescueMenuState(0x1B); break; - case 18: + case PASSWORD_ENTRY_NOT_SOS_MAIL: sub_80141B4(gUnknown_80E48E8, 0, 0, 0x101); SetFriendRescueMenuState(8); break; - case 7: + case PASSWORD_ENTRY_DUPLICATE_SOS_MAIL: sub_80141B4(gUnknown_80E460C, 0, 0, 0x101); SetFriendRescueMenuState(8); break; - case 22: + case PASSWORD_ENTRY_SOS_MAIL_SUCCESS: sub_8095274(temp.unk10); temp.mailType = 2; sub_80951BC(&temp); sub_80141B4(gUnknown_80E4928, 0, 0, 0x101); SetFriendRescueMenuState(0x16); break; - case 19: + case PASSWORD_ENTRY_NOT_AOK_MAIL: sub_80141B4(gUnknown_80E4964, 0, 0, 0x101); SetFriendRescueMenuState(8); break; - case 9: + case PASSWORD_ENTRY_DUPLICATE_AOK_MAIL: sub_80141B4(gUnknown_80E499C, 0, 0, 0x101); SetFriendRescueMenuState(8); break; - case 23: + case PASSWORD_ENTRY_AOK_MAIL_SUCCESS: temp.mailType = 5; sub_80951FC(&temp); temp2 = sub_8095228(sub_809539C(1, temp.unk10)); @@ -1340,21 +1341,21 @@ void sub_8034D74(void) switch(return_var) { case 3: - switch(sub_8039068(0x20, gUnknown_203B33C->passwordBuffer, &temp)) + switch(sub_8039068(PASSWORD_ENTRY_THANK_YOU_MAIL_MODE, gUnknown_203B33C->passwordBuffer, &temp)) { - case 17: + case PASSWORD_ENTRY_INCORRECT_PASSWORD: sub_8014248(gUnknown_80E48A8, 0, 6, gUnknown_80E2440, 0, 4, 0, 0, 0x101); SetFriendRescueMenuState(0x74); break; - case 20: + case PASSWORD_ENTRY_NOT_THANK_YOU_MAIL: sub_80141B4(gUnknown_80E49C4, 0, 0, 0x101); SetFriendRescueMenuState(0x6B); break; - case 11: + case PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL: sub_80141B4(gUnknown_80E4704, 0, 0, 0x101); SetFriendRescueMenuState(0x6B); break; - case 24: + case PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS: temp2 = sub_8095228(sub_809539C(4, temp.unk10)); *temp2 = temp; temp2->mailType = 6; diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index 0df817896..22c5c54d9 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -12,7 +12,7 @@ #include "code_8094F88.h" #include "wonder_mail.h" -extern u8 gUnknown_202EC50[]; +extern u8 gRescuePasswordBuffer[]; extern u32 gUnknown_202EC4C; extern struct unkStruct_203B484 *gUnknown_203B484; extern struct UnkTextStruct2 gUnknown_80E71E4; @@ -28,10 +28,10 @@ extern u32 ConvertMenutoRescuePasswordState(u32); extern void sub_8039174(void); extern void sub_80155F0(void); extern void sub_8031E10(void); -extern void sub_8038F98(void); +extern void DisplayPasswordAcceptScreen(void); -extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_8095228 *r0); +extern u32 sub_8039068(u32, u8 *passwordBuffer, struct unkStruct_8095228 *r0); extern void sub_80951BC(struct unkStruct_8095228 *r0); extern void sub_80951FC(struct unkStruct_8095228 *r0); @@ -43,7 +43,7 @@ extern void sub_8095274(u32); extern u32 sub_8031DCC(void); extern void sub_80391F8(void); extern void sub_8031E00(); -extern void sub_8038DC0(u32); +extern void DisplayRescuePasswordError(u32); extern struct MainMenu *GetMainMenu(void); @@ -99,7 +99,7 @@ void CreateRescuePasswordMenu(u32 currMenu) if ((gUnknown_203B368 != 0) || (gUnknown_203B36C != currMenu)) { for(counter = 0; counter < 0x36; counter++) { - gUnknown_202EC50[counter] = 0; + gRescuePasswordBuffer[counter] = 0; } gUnknown_203B368 = 0; } @@ -117,7 +117,7 @@ void CreateRescuePasswordMenu(u32 currMenu) case 0x1C: case 0x1E: case 0x20: - sub_80151C0(4, gUnknown_202EC50); + sub_80151C0(4, gRescuePasswordBuffer); break; case MENU_DISPLAY_RESCUE_PASSWORD: temp = sub_8095228(0x1F); @@ -127,7 +127,7 @@ void CreateRescuePasswordMenu(u32 currMenu) sub_8031D70(0x1F, 0); break; case MENU_RESCUE_PASSWORD_ENTRY: - sub_80151C0(4, gUnknown_202EC50); + sub_80151C0(4, gRescuePasswordBuffer); break; } @@ -198,53 +198,53 @@ s32 UpdateRescuePasswordMenu(void) nextMenu = MENU_FRIEND_RESCUE; break; case 3: - switch(sub_8039068(gRescuePasswordMenu->currMenu, gUnknown_202EC50, &local_44)) { - case 0x11: - nextMenu = 0x11; - sub_8038DC0(nextMenu); + switch(sub_8039068(gRescuePasswordMenu->currMenu, gRescuePasswordBuffer, &local_44)) { + case PASSWORD_ENTRY_INCORRECT_PASSWORD: + nextMenu = PASSWORD_ENTRY_INCORRECT_PASSWORD; + DisplayRescuePasswordError(nextMenu); gRescuePasswordMenu->state = 8; nextMenu = MENU_NO_SCREEN_CHANGE; break; case 0xd: nextMenu = 0xD; - sub_8038DC0(nextMenu); + DisplayRescuePasswordError(nextMenu); gRescuePasswordMenu->state = 8; nextMenu = MENU_NO_SCREEN_CHANGE; break; - case 0x12: - nextMenu = 0x12; - sub_8038DC0(nextMenu); + case PASSWORD_ENTRY_NOT_SOS_MAIL: + nextMenu = PASSWORD_ENTRY_NOT_SOS_MAIL; + DisplayRescuePasswordError(nextMenu); gRescuePasswordMenu->state = 8; nextMenu = MENU_NO_SCREEN_CHANGE; break; - case 7: - nextMenu = 7; - sub_8038DC0(nextMenu); + case PASSWORD_ENTRY_DUPLICATE_SOS_MAIL: + nextMenu = PASSWORD_ENTRY_DUPLICATE_SOS_MAIL; + DisplayRescuePasswordError(nextMenu); gRescuePasswordMenu->state = 8; nextMenu = MENU_NO_SCREEN_CHANGE; break; - case 0x16: + case PASSWORD_ENTRY_SOS_MAIL_SUCCESS: sub_8095274(local_44.unk10); - sub_8038F98(); + DisplayPasswordAcceptScreen(); gRescuePasswordMenu->state = 9; nextMenu = MENU_NO_SCREEN_CHANGE; local_44.mailType = 2; sub_80951BC(&local_44); break; - case 0x13: - nextMenu = 0x13; - sub_8038DC0(nextMenu); + case PASSWORD_ENTRY_NOT_AOK_MAIL: + nextMenu = PASSWORD_ENTRY_NOT_AOK_MAIL; + DisplayRescuePasswordError(nextMenu); gRescuePasswordMenu->state = 8; nextMenu = MENU_NO_SCREEN_CHANGE; break; - case 9: - nextMenu = 0x9; - sub_8038DC0(nextMenu); + case PASSWORD_ENTRY_DUPLICATE_AOK_MAIL: + nextMenu = PASSWORD_ENTRY_DUPLICATE_AOK_MAIL; + DisplayRescuePasswordError(nextMenu); gRescuePasswordMenu->state = 8; nextMenu = MENU_NO_SCREEN_CHANGE; break; - case 0x17: - sub_8038F98(); + case PASSWORD_ENTRY_AOK_MAIL_SUCCESS: + DisplayPasswordAcceptScreen(); gRescuePasswordMenu->state = 9; nextMenu = MENU_NO_SCREEN_CHANGE; local_44.mailType = 5; @@ -253,22 +253,20 @@ s32 UpdateRescuePasswordMenu(void) puVar5->mailType = 7; MemoryFill8((u8 *)&gUnknown_203B484, 0, sizeof(struct unkStruct_203B484)); break; - default: - break; - case 0x14: - nextMenu = 0x14; - sub_8038DC0(nextMenu); + case PASSWORD_ENTRY_NOT_THANK_YOU_MAIL: + nextMenu = PASSWORD_ENTRY_NOT_THANK_YOU_MAIL; + DisplayRescuePasswordError(nextMenu); gRescuePasswordMenu->state = 8; nextMenu = MENU_NO_SCREEN_CHANGE; break; case 0xb: nextMenu = 0xb; - sub_8038DC0(nextMenu); + DisplayRescuePasswordError(nextMenu); gRescuePasswordMenu->state = 8; nextMenu = MENU_NO_SCREEN_CHANGE; break; - case 0x18: - sub_8038F98(); + case PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS: + DisplayPasswordAcceptScreen(); gRescuePasswordMenu->state = 9; nextMenu = MENU_NO_SCREEN_CHANGE; puVar6 = sub_8095228(sub_809539C(4, local_44.unk10)); @@ -291,7 +289,7 @@ s32 UpdateRescuePasswordMenu(void) { case 3: nextMenu = 0x15; - sub_8038DC0(nextMenu); + DisplayRescuePasswordError(nextMenu); gRescuePasswordMenu->state = 8; nextMenu = MENU_NO_SCREEN_CHANGE; break; @@ -323,7 +321,7 @@ s32 UpdateRescuePasswordMenu(void) sub_8039174(); ResetUnusedInputStruct(); sub_800641C(0,1,1); - sub_80151C0(4,gUnknown_202EC50); + sub_80151C0(4,gRescuePasswordBuffer); gRescuePasswordMenu->state = 8; subtract = gRescuePasswordMenu->currMenu - 0x21; nextMenu = MENU_FRIEND_RESCUE; @@ -351,7 +349,7 @@ s32 UpdateRescuePasswordMenu(void) sub_8039174(); ResetUnusedInputStruct(); sub_800641C(0,1,1); - sub_80151C0(4,gUnknown_202EC50); + sub_80151C0(4,gRescuePasswordBuffer); gRescuePasswordMenu->state = ConvertMenutoRescuePasswordState(gRescuePasswordMenu->currMenu); subtract = gRescuePasswordMenu->currMenu - 0x21; nextMenu = 0x2a; @@ -369,35 +367,35 @@ s32 UpdateRescuePasswordMenu(void) return nextMenu; } -void sub_8038DC0(u32 param_1) +void DisplayRescuePasswordError(u32 passwordError) { sub_8006518(gRescuePasswordMenu->unk1A8); ResetUnusedInputStruct(); sub_800641C(0,1,1); sub_80155F0(); - switch(param_1) { - case 0x11: + switch(passwordError) { + case PASSWORD_ENTRY_INCORRECT_PASSWORD: SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E71FC,gUnknown_80E7214,0,0xd,0); break; - case 0x12: + case PASSWORD_ENTRY_NOT_SOS_MAIL: SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E72EC,gUnknown_80E7304,0,0xd,0); break; - case 7: + case PASSWORD_ENTRY_DUPLICATE_SOS_MAIL: SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7344,gUnknown_80E735C,0,0xd,0); break; case 0xd: SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7588,gUnknown_80E75A0,0,0xd,0); break; - case 0x13: + case PASSWORD_ENTRY_NOT_AOK_MAIL: SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E73AC,gUnknown_80E73C4,0,0xd,0); break; - case 9: + case PASSWORD_ENTRY_DUPLICATE_AOK_MAIL: SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7408,gUnknown_80E7420,0,0xd,0); break; - case 0x14: + case PASSWORD_ENTRY_NOT_THANK_YOU_MAIL: SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7468,gUnknown_80E7480,0,0xd,0); break; - case 0xb: + case PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL: SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E74C8,gUnknown_80E74E0,0,0xd,0); break; case 0x15: @@ -409,7 +407,7 @@ void sub_8038DC0(u32 param_1) sub_8035CF4(&gRescuePasswordMenu->unk8,0,1); } -void sub_8038F98(void) +void DisplayPasswordAcceptScreen(void) { sub_8006518(gRescuePasswordMenu->unk1A8); ResetUnusedInputStruct(); @@ -453,51 +451,51 @@ u32 ConvertMenutoRescuePasswordState(u32 unused) return uVar1; } -u32 sub_8039068(u32 param_1, u8 *param_2,struct unkStruct_8095228 *param_3) +u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_8095228 *param_3) { - if ( (!sub_803D204(param_2,param_3)) || (7 < param_3->mailType) || + if ( (!sub_803D204(passwordBuffer, param_3)) || (7 < param_3->mailType) || (param_3->floor >= GetDungeonFloorCount(param_3->dungeon)) || (param_3->clientSpecies == SPECIES_NONE) || (SPECIES_RAYQUAZA_CUTSCENE < param_3->clientSpecies) || (IsInvalidItemReward(param_3->unk20.itemIndex))) { - return 0x11; + return PASSWORD_ENTRY_INCORRECT_PASSWORD; } else - switch(param_1) + switch(mailMode) { - case 0x1C: + case PASSWORD_ENTRY_SOS_MAIL_MODE: if (param_3->mailType != WONDER_MAIL_TYPE_SOS) { - return 0x12; + return PASSWORD_ENTRY_NOT_SOS_MAIL; } else if ( (sub_80952F0(2, param_3->unk10)) || (sub_80952F0(4, param_3->unk10)) || (sub_80952F0(6, param_3->unk10)) || (sub_8095298(param_3->unk10))) { - return 0x7; + return PASSWORD_ENTRY_DUPLICATE_SOS_MAIL; } else if (sub_8095190() == -1) { return 0xd; } else { - return 0x16; + return PASSWORD_ENTRY_SOS_MAIL_SUCCESS; } break; - case 0x1E: + case PASSWORD_ENTRY_AOK_MAIL_MODE: if (param_3->mailType != WONDER_MAIL_TYPE_AOK) { - return 0x13; + return PASSWORD_ENTRY_NOT_AOK_MAIL; } else if (!sub_80952F0(1, param_3->unk10)) { - return 0x9; + return PASSWORD_ENTRY_DUPLICATE_AOK_MAIL; } else { - return 0x17; + return PASSWORD_ENTRY_AOK_MAIL_SUCCESS; } break; - case 0x20: + case PASSWORD_ENTRY_THANK_YOU_MAIL_MODE: if (param_3->mailType != WONDER_MAIL_TYPE_THANK_YOU) { - return 0x14; + return PASSWORD_ENTRY_NOT_THANK_YOU_MAIL; } else if ((!sub_80952F0(4, param_3->unk10)) || (param_3->unk28 != sub_8011C34())) { - return 0xb; + return PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL; } else { - return 0x18; + return PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS; } break; default: diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index fedf2ffd2..3b63a619d 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -8,6 +8,7 @@ #include "memory.h" #include "menu.h" #include "input.h" +#include "rescue_password_menu.h" #include "text.h" #include "team_inventory.h" #include "code_800D090.h" @@ -829,25 +830,21 @@ void HandleThankYouMailPasswordMenu(void) switch(return_var) { case 3: - switch(sub_8039068(0x20,gUnknown_203B2C4->passwordBuffer,&temp)) + switch(sub_8039068(PASSWORD_ENTRY_THANK_YOU_MAIL_MODE,gUnknown_203B2C4->passwordBuffer,&temp)) { - case 0x11: - // Wrong password + case PASSWORD_ENTRY_INCORRECT_PASSWORD: sub_8014248(gUnknown_80DF1C0, 0, 7, gUnknown_80DEE44, 0, 4, 0, &gUnknown_203B2C4->faceFile, 0xc); SetThankYouMailMenuState(THANK_YOU_PASSWORD_WRONG); break; - case 0x14: - // Incorrect password + case PASSWORD_ENTRY_NOT_THANK_YOU_MAIL: sub_80141B4(gUnknown_80DF208, 0, &gUnknown_203B2C4->faceFile, 0x10d); SetThankYouMailMenuState(PRINT_THANK_YOU_ERROR); break; - case 0xB: - // Not eligible to receive + case PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL: sub_80141B4(gUnknown_80DF0A0, 0, &gUnknown_203B2C4->faceFile, 0x10d); SetThankYouMailMenuState(PRINT_THANK_YOU_ERROR); break; - case 0x18: - // I think this is when password works successfully + case PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS: uVar1 = sub_809539C(4,temp.unk10); puVar5 = sub_8095228(uVar1); *puVar5 = temp; diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 6c449aa7d..9a05db4aa 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -9,6 +9,7 @@ #include "menu.h" #include "text.h" #include "team_inventory.h" +#include "rescue_password_menu.h" extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0; @@ -1459,21 +1460,21 @@ void sub_80293F4(void) switch(return_var) { case 3: - switch(sub_8039068(0x1C, (gUnknown_203B2C0->passwordBuffer), &temp)) + switch(sub_8039068(PASSWORD_ENTRY_SOS_MAIL_MODE, (gUnknown_203B2C0->passwordBuffer), &temp)) { - case 17: + case PASSWORD_ENTRY_INCORRECT_PASSWORD: sub_8014248(gWonderMailPasswordIncorrectText, 0, 8, gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->faceFile, 0xC); sub_8028B04(40); break; - case 18: + case PASSWORD_ENTRY_NOT_SOS_MAIL: sub_80141B4(gWonderMailSOSPasswordIncorrectText, 0, &gUnknown_203B2C0->faceFile, 0x10d); sub_8028B04(7); break; - case 7: + case PASSWORD_ENTRY_DUPLICATE_SOS_MAIL: sub_80141B4(gWonderMailDuplicateText, 0, &gUnknown_203B2C0->faceFile, 0x10d); sub_8028B04(7); break; - case 22: + case PASSWORD_ENTRY_SOS_MAIL_SUCCESS: sub_8095274(temp.unk10); temp.mailType = 2; sub_80951BC(&temp); diff --git a/sym_ewram.txt b/sym_ewram.txt index ebfd11701..5ad637869 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -537,7 +537,7 @@ gUnknown_202EC48 = .; /* 202EC48 */ gUnknown_202EC4C = .; /* 202EC4C */ . += 0x4; -gUnknown_202EC50 = .; /* 202EC50 */ +gRescuePasswordBuffer = .; /* 202EC50 */ . += 0x38; gDungeonNameBannerPalette = .; /* 202EC88 */ From ad9c25598d6720d599bd0b40f12dff0db583f611 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 3 Jun 2022 17:53:07 -0700 Subject: [PATCH 02/11] some more decomp --- asm/code_8098BDC.s | 253 --------------------------------------------- src/code_8098BDC.c | 63 ++++++++++- src/code_809D148.c | 61 +++++++++++ src/code_80A26CC.c | 15 +-- 4 files changed, 124 insertions(+), 268 deletions(-) diff --git a/asm/code_8098BDC.s b/asm/code_8098BDC.s index e354b7db7..0e13d9e2f 100644 --- a/asm/code_8098BDC.s +++ b/asm/code_8098BDC.s @@ -5,137 +5,6 @@ .text - thumb_func_start sub_8098FCC -sub_8098FCC: - push {r4,lr} - movs r0, 0 - movs r1, 0x13 - bl sub_8001658 - lsls r0, 16 - asrs r1, r0, 16 - adds r2, r1, 0 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0809909E - cmp r1, 0x51 - bne _08098FF6 - movs r0, 0 - movs r1, 0x14 - bl sub_8001658 - lsls r0, 16 - asrs r0, 16 - b _08098FF8 -_08098FF6: - adds r0, r2, 0 -_08098FF8: - bl sub_80A2608 - adds r4, r0, 0 - ldr r0, _0809900C - ldr r0, [r0] - cmp r0, 0x9 - bne _08099010 - movs r1, 0x2 - ldrsh r0, [r4, r1] - b _080990B2 - .align 2, 0 -_0809900C: .4byte gUnknown_20398B4 -_08099010: - ldrh r0, [r4, 0x4] - subs r0, 0xB2 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x17 - bhi _080990AE - lsls r0, 2 - ldr r1, _08099028 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08099028: .4byte _0809902C - .align 2, 0 -_0809902C: - .4byte _0809908C - .4byte _080990AE - .4byte _080990AE - .4byte _080990AE - .4byte _080990AE - .4byte _080990AE - .4byte _080990AE - .4byte _080990AE - .4byte _080990AE - .4byte _080990AE - .4byte _080990AE - .4byte _080990AE - .4byte _080990AE - .4byte _080990AE - .4byte _080990AE - .4byte _080990A2 - .4byte _080990AE - .4byte _080990A2 - .4byte _080990AE - .4byte _080990AE - .4byte _080990A2 - .4byte _080990AE - .4byte _080990AE - .4byte _080990A2 -_0809908C: - movs r2, 0x1 - negs r2, r2 - movs r0, 0x3 - movs r1, 0x2 - bl sub_8001D44 - lsls r0, 24 - cmp r0, 0 - beq _080990AE -_0809909E: - movs r0, 0xC - b _080990B2 -_080990A2: - movs r0, 0x5 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - beq _0809909E -_080990AE: - movs r1, 0x4 - ldrsh r0, [r4, r1] -_080990B2: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8098FCC - - thumb_func_start sub_80990B8 -sub_80990B8: - push {lr} - movs r0, 0xB - bl sub_8098FCC - lsls r0, 16 - asrs r2, r0, 16 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - bne _080990D2 - bl sub_8098FB4 - b _080990E4 -_080990D2: - ldr r1, _080990E8 - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - movs r1, 0x2 - ldrsh r0, [r0, r1] - bl sub_80A2B18 -_080990E4: - pop {r1} - bx r1 - .align 2, 0 -_080990E8: .4byte gUnknown_811BAF4 - thumb_func_end sub_80990B8 - thumb_func_start sub_80990EC sub_80990EC: push {r4-r7,lr} @@ -8230,126 +8099,4 @@ _0809CFDA: bx r1 thumb_func_end sub_809CDC8 - thumb_func_start sub_809CFE8 -sub_809CFE8: - push {lr} - lsls r0, 16 - lsrs r1, r0, 16 - adds r2, r1, 0 - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0809D014 - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0809D004 - movs r0, 0x3 - b _0809D052 -_0809D004: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0809D010 - movs r0, 0x5 - b _0809D052 -_0809D010: - movs r0, 0x4 - b _0809D052 -_0809D014: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0809D038 - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0809D028 - movs r0, 0x1 - b _0809D052 -_0809D028: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0809D034 - movs r0, 0x7 - b _0809D052 -_0809D034: - movs r0, 0 - b _0809D052 -_0809D038: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0809D044 - movs r0, 0x2 - b _0809D052 -_0809D044: - movs r0, 0x20 - ands r2, r0 - cmp r2, 0 - bne _0809D050 - subs r0, 0x21 - b _0809D052 -_0809D050: - movs r0, 0x6 -_0809D052: - pop {r1} - bx r1 - thumb_func_end sub_809CFE8 - - thumb_func_start sub_809D058 -sub_809D058: - push {lr} - ldr r1, [r0, 0x4] - cmp r1, 0x3F - bgt _0809D076 - ldr r0, [r0] - cmp r0, 0x67 - bgt _0809D06A - movs r0, 0x5 - b _0809D0A6 -_0809D06A: - cmp r0, 0x88 - ble _0809D072 - movs r0, 0x3 - b _0809D0A6 -_0809D072: - movs r0, 0x4 - b _0809D0A6 -_0809D076: - cmp r1, 0x60 - ble _0809D090 - ldr r0, [r0] - cmp r0, 0x67 - bgt _0809D084 - movs r0, 0x7 - b _0809D0A6 -_0809D084: - cmp r0, 0x88 - ble _0809D08C - movs r0, 0x1 - b _0809D0A6 -_0809D08C: - movs r0, 0 - b _0809D0A6 -_0809D090: - ldr r0, [r0] - cmp r0, 0x67 - bgt _0809D09A - movs r0, 0x6 - b _0809D0A6 -_0809D09A: - cmp r0, 0x88 - bgt _0809D0A4 - movs r0, 0x1 - negs r0, r0 - b _0809D0A6 -_0809D0A4: - movs r0, 0x2 -_0809D0A6: - pop {r1} - bx r1 - thumb_func_end sub_809D058 - .align 2,0 diff --git a/src/code_8098BDC.c b/src/code_8098BDC.c index e3795427a..486242a49 100644 --- a/src/code_8098BDC.c +++ b/src/code_8098BDC.c @@ -2,6 +2,7 @@ #include "play_time.h" #include "input.h" #include "debug.h" +#include "code_80A26CC.h" extern u32 gUnknown_20398A8; extern u32 gUnknown_20398AC; @@ -21,6 +22,15 @@ extern const char gUnknown_8115FA4; extern const char gUnknown_8115FC8; extern const char gUnknown_8115FE8; +struct unkStruct_811BAF4 +{ + u16 unk0; + s16 unk2; + u8 fill4[8]; +}; + +extern struct unkStruct_811BAF4 gUnknown_811BAF4[10]; + extern void sub_809B57C(); extern void GroundScript_Unlock(); extern void sub_809D25C(); @@ -61,11 +71,11 @@ extern void ClearAllItems_8091FB4(); extern const char *sub_80A2B18(s16); extern u8 sub_8001CC4(u8, u8, u8); extern void xxx_inv_unk250_random_8091980(u32); - extern u8 sub_80023E4(u32); extern void sub_80118C4(u16); extern u8 sub_809C730(); extern s16 sub_80A2750(s16); +extern u8 sub_8001D44(u32, u32, s32); void sub_8098BDC(void) { @@ -319,3 +329,54 @@ const char *sub_8098FB4(void) { return sub_80A2B18(sub_8001658(0, 0x11)); } + + +s32 sub_8098FCC(u32 unused) +{ + s32 iVar4; + s32 iVar5; + s32 iVar6; + struct unkStruct_80A2608 *iVar3; + + iVar5 = (s16)sub_8001658(0,0x13); + iVar6 = iVar5; + if (iVar5 == -1) return 0xC; + + if (iVar5 == 0x51) + iVar4 = (s16)sub_8001658(0,0x14); + else + iVar4 = iVar6; + + iVar3 = sub_80A2608(iVar4); + if (gUnknown_20398B4 == 9) { + return iVar3->unk2; + } + switch((s16)(iVar3->unk4 - 0xb2)) { + case 0: + if (sub_8001D44(3,2,-1) != 0) return 0xc; + break; + case 0xf: + case 0x11: + case 0x14: + case 0x17: + if (sub_80023E4(5) == 0) return 0xC; + break; + default: + break; + } + return iVar3->unk4; +} + +const char *sub_80990B8(void) +{ + s16 index; + index = sub_8098FCC(0xB); + if(index != -1) + { + return sub_80A2B18(gUnknown_811BAF4[index].unk2); + } + else + { + return sub_8098FB4(); + } +} diff --git a/src/code_809D148.c b/src/code_809D148.c index 5a33674f5..35331a92e 100644 --- a/src/code_809D148.c +++ b/src/code_809D148.c @@ -33,6 +33,67 @@ extern struct unkStruct_20399E8 gUnknown_20399E8; void sub_809D0BC(void); +s32 sub_809CFE8(u16 param_1) +{ + if ((param_1 & 0x40) != 0) { + if ((param_1 & 0x10) != 0) + return 3; + else if ((param_1 & 0x20) != 0) + return 5; + else + return 4; + } + else if ((param_1 & 0x80) != 0) { + if ((param_1 & 0x10) != 0) + return 1; + else if ((param_1 & 0x20) != 0) + return 7; + else + return 0; + } + else if ((param_1 & 0x10) != 0) + return 2; + else if ((param_1 & 0x20) != 0) + return 6; + else + return -1; +} + +// Unused +s32 sub_809D058(s32 *param_1) +{ + if (param_1[1] < 0x40) { + if (param_1[0] < 0x68) { + return 5; + } + else if (param_1[0] > 0x88) { + return 3; + } + else { + return 4; + } + } + else if (param_1[1] > 0x60) { + if (param_1[0] < 0x68) { + return 7; + } + else if (param_1[0] > 0x88) { + return 1; + } + else { + return 0; + } + } + else if (param_1[0] < 0x68) { + return 6; + } + else if (param_1[0] > 0x88) { + return 2; + } + else { + return -1; + } +} void sub_809D0AC(void) { diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c index b18cf5fb4..c482100cc 100644 --- a/src/code_80A26CC.c +++ b/src/code_80A26CC.c @@ -1,18 +1,5 @@ #include "global.h" - -struct unkStruct_80A2608 -{ - /* 0x0 */ s16 unk0; - /* 0x2 */ u16 padding; - /* 0x4 */ u32 padding2; - /* 0x8 */ u16 padding3; - /* 0xA */ u16 padding4; - /* 0xC */ u8 unkC; - /* 0xD */ u8 padding5; - /* 0xE */ s16 unkE; - /* 0x10 */ u8 unk10; - /* 0x11 */ u8 unk11; -}; +#include "code_80A26CC.h" extern u8 sub_80023E4(u32); extern u8 sub_80973F4(s16); From 68b8d3853c0ba92ef39ba6988e429f581e8dbdb7 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 4 Jun 2022 08:36:08 -0700 Subject: [PATCH 03/11] finish out all jirachi funcs.. thx jiang for JirachiWish match --- asm/jirachi_wish.s | 660 ---------------------------------- include/code_80A26CC.h | 17 + include/dungeon_global_data.h | 3 +- ld_script.txt | 1 - src/code_80521D0_1.c | 4 +- src/code_8057824_1.c | 320 ++++++++++++++++- 6 files changed, 338 insertions(+), 667 deletions(-) delete mode 100644 asm/jirachi_wish.s create mode 100644 include/code_80A26CC.h diff --git a/asm/jirachi_wish.s b/asm/jirachi_wish.s deleted file mode 100644 index 053642398..000000000 --- a/asm/jirachi_wish.s +++ /dev/null @@ -1,660 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start JirachiWish -JirachiWish: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x78 - movs r0, 0x1A - bl GetEntityFromClientType - adds r6, r0, 0 - ldr r0, _0808B82C - ldr r1, _0808B830 - bl CopySpeciesNametoBuffer - ldr r4, _0808B834 - adds r0, r4, 0 - bl sub_80855E4 - adds r0, r6, 0 - bl _call_via_r4 - movs r0, 0 - bl sub_8041888 - ldr r0, [r6, 0x70] - movs r1, 0xAE - lsls r1, 1 - adds r0, r1 - movs r1, 0 - movs r4, 0x1 - strb r4, [r0] - ldr r0, [r6, 0x70] - movs r2, 0xAF - lsls r2, 1 - adds r0, r2 - strb r1, [r0] - adds r0, r6, 0 - movs r1, 0xE - movs r2, 0 - bl sub_80861B8 - ldr r0, _0808B838 - bl sub_80855E4 - ldr r0, _0808B83C - ldr r0, [r0] - ldr r1, _0808B840 - adds r0, r1 - strb r4, [r0] - movs r0, 0x1E - bl sub_8083ED8 - movs r0, 0x1E - movs r1, 0x46 - bl sub_803E708 - ldr r0, _0808B844 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _0808B848 - bl PlaySoundEffect - movs r0, 0x96 - movs r1, 0x46 - bl sub_803E708 - adds r0, r6, 0 - bl sub_80862BC - ldr r0, _0808B84C - bl DisplayDungeonDialogue - movs r0, 0x79 - bl sub_8083E88 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r6, 0 - movs r1, 0 - bl sub_80856E0 - movs r0, 0xB5 - lsls r0, 1 - bl PlaySoundEffect - ldr r0, _0808B850 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r6, 0 - bl SpriteLookAroundEffect - ldr r0, _0808B854 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 -_0808B690: - ldr r4, _0808B858 -_0808B692: - movs r0, 0 - ldr r1, [r4] - ldr r2, _0808B85C - ldr r3, _0808B860 - bl sub_8052C68 - mov r9, r0 - cmp r0, 0 - ble _0808B692 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - mov r2, r9 - cmp r2, 0x1 - bne _0808B754 - ldr r0, _0808B864 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r6, 0 - bl JirachiWishGrantDialogue - movs r0, 0 - add r7, sp, 0x6C -_0808B6CA: - adds r0, 0x1 - mov r8, r0 - mov r4, sp - movs r5, 0x8 -_0808B6D2: - adds r0, r4, 0 - movs r1, 0x69 - movs r2, 0 - bl sub_8045C28 - adds r4, 0x4 - subs r5, 0x1 - cmp r5, 0 - bge _0808B6D2 - movs r0, 0x3 - bl DungeonRandomCapped - ldrh r1, [r6, 0x4] - adds r1, r0 - subs r1, 0x1 - lsls r1, 16 - lsrs r1, 16 - ldr r2, _0808B868 - ldr r0, [sp, 0x6C] - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x6C] - movs r0, 0x3 - bl DungeonRandomCapped - ldrh r2, [r6, 0x6] - adds r2, r0 - subs r2, 0x1 - lsls r2, 16 - ldr r0, _0808B86C - ldr r1, [sp, 0x6C] - ands r1, r0 - orrs r1, r2 - str r1, [sp, 0x6C] - movs r2, 0 - ldrsh r0, [r7, r2] - asrs r1, 16 - bl GetMapTile_2 - ldrh r1, [r0] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0808B744 - movs r0, 0xA6 - lsls r0, 1 - bl PlaySoundEffect - adds r0, r7, 0 - bl sub_808BB3C - adds r0, r6, 0 - adds r1, r7, 0 - mov r2, sp - movs r3, 0x9 - bl sub_8046860 -_0808B744: - mov r0, r8 - cmp r0, 0x5 - ble _0808B6CA - ldr r0, [r6, 0x70] - ldr r2, _0808B870 - adds r1, r0, r2 - movs r0, 0 - strb r0, [r1] -_0808B754: - mov r0, r9 - cmp r0, 0x2 - bne _0808B80A - ldr r0, _0808B874 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r6, 0 - bl JirachiWishGrantDialogue - movs r0, 0 - add r1, sp, 0x24 - mov r8, r1 - add r7, sp, 0x70 -_0808B776: - adds r0, 0x1 - mov r10, r0 - mov r4, r8 - movs r5, 0x8 -_0808B77E: - movs r0, 0 - bl sub_803D73C - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - movs r2, 0 - bl sub_8045C28 - adds r4, 0x4 - subs r5, 0x1 - cmp r5, 0 - bge _0808B77E - movs r0, 0x3 - bl DungeonRandomCapped - ldrh r1, [r6, 0x4] - adds r1, r0 - subs r1, 0x1 - lsls r1, 16 - lsrs r1, 16 - ldr r2, _0808B868 - ldr r0, [sp, 0x70] - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x70] - movs r0, 0x3 - bl DungeonRandomCapped - ldrh r2, [r6, 0x6] - adds r2, r0 - subs r2, 0x1 - lsls r2, 16 - ldr r0, _0808B86C - ldr r1, [sp, 0x70] - ands r1, r0 - orrs r1, r2 - str r1, [sp, 0x70] - movs r2, 0 - ldrsh r0, [r7, r2] - asrs r1, 16 - bl GetMapTile_2 - ldrh r1, [r0] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0808B7FA - movs r0, 0xC8 - lsls r0, 1 - bl PlaySoundEffect - adds r0, r7, 0 - bl sub_808BB3C - adds r0, r6, 0 - adds r1, r7, 0 - mov r2, r8 - movs r3, 0x9 - bl sub_8046860 -_0808B7FA: - mov r0, r10 - cmp r0, 0x5 - ble _0808B776 - ldr r0, [r6, 0x70] - ldr r2, _0808B870 - adds r1, r0, r2 - movs r0, 0 - strb r0, [r1] -_0808B80A: - mov r0, r9 - cmp r0, 0x3 - bne _0808B8CA - bl JirachiFriendAreaSearch - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3A - bne _0808B87C - ldr r0, _0808B878 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - b _0808B690 - .align 2, 0 -_0808B82C: .4byte gUnknown_202E038 -_0808B830: .4byte 0x0000019d -_0808B834: .4byte sub_808BBA8 -_0808B838: .4byte sub_80861A8 -_0808B83C: .4byte gDungeonGlobalData -_0808B840: .4byte 0x0001356c -_0808B844: .4byte gUnknown_8105668 -_0808B848: .4byte 0x000001a7 -_0808B84C: .4byte gUnknown_8105674 -_0808B850: .4byte gUnknown_81056B8 -_0808B854: .4byte gUnknown_81056DC -_0808B858: .4byte gUnknown_8105798 -_0808B85C: .4byte gUnknown_810579C -_0808B860: .4byte 0x00000705 -_0808B864: .4byte gUnknown_810581C -_0808B868: .4byte 0xffff0000 -_0808B86C: .4byte 0x0000ffff -_0808B870: .4byte 0x0000015d -_0808B874: .4byte gUnknown_8105974 -_0808B878: .4byte gUnknown_8105A08 -_0808B87C: - ldr r0, _0808BA30 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r6, 0 - bl JirachiWishGrantDialogue - ldr r0, [r6, 0x70] - ldr r2, _0808BA34 - adds r1, r0, r2 - movs r0, 0 - strb r0, [r1] - ldr r0, _0808BA38 - bl DisplayDungeonDialogue - adds r0, r4, 0 - bl UnlockFriendArea - movs r0, 0xD4 - bl PlaySoundEffect - bl GetLeaderEntity - adds r1, r0, 0 - ldr r0, _0808BA3C - movs r2, 0 - bl SetMessageArgument - ldr r0, _0808BA40 - adds r1, r4, 0 - movs r2, 0 - bl sub_8092578 - ldr r0, _0808BA44 - bl DisplayDungeonDialogue -_0808B8CA: - mov r0, r9 - cmp r0, 0x4 - bne _0808B98E - ldr r0, _0808BA48 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r6, 0 - bl JirachiWishGrantDialogue - movs r0, 0 - add r1, sp, 0x48 - mov r8, r1 - add r7, sp, 0x74 -_0808B8EC: - adds r0, 0x1 - mov r10, r0 - mov r4, r8 - movs r5, 0x3 -_0808B8F4: - movs r0, 0x8 - bl DungeonRandomCapped - ldr r2, _0808BA4C - adds r0, r2 - ldrb r1, [r0] - adds r0, r4, 0 - movs r2, 0 - bl sub_8045C28 - adds r4, 0x4 - subs r5, 0x1 - cmp r5, 0 - bge _0808B8F4 - movs r0, 0x3 - bl DungeonRandomCapped - ldrh r1, [r6, 0x4] - adds r1, r0 - subs r1, 0x1 - lsls r1, 16 - lsrs r1, 16 - ldr r2, _0808BA50 - ldr r0, [sp, 0x74] - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x74] - movs r0, 0x3 - bl DungeonRandomCapped - ldrh r2, [r6, 0x6] - adds r2, r0 - subs r2, 0x1 - lsls r2, 16 - ldr r0, _0808BA54 - ldr r1, [sp, 0x74] - ands r1, r0 - orrs r1, r2 - str r1, [sp, 0x74] - movs r2, 0 - ldrsh r0, [r7, r2] - asrs r1, 16 - bl GetMapTile_2 - ldrh r1, [r0] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0808B970 - movs r0, 0xC8 - lsls r0, 1 - bl PlaySoundEffect - adds r0, r7, 0 - bl sub_808BB3C - adds r0, r6, 0 - adds r1, r7, 0 - mov r2, r8 - movs r3, 0x4 - bl sub_8046860 -_0808B970: - mov r0, r10 - cmp r0, 0x4 - ble _0808B8EC - ldr r0, [r6, 0x70] - ldr r2, _0808BA34 - adds r1, r0, r2 - movs r0, 0 - strb r0, [r1] - ldr r0, _0808BA58 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 -_0808B98E: - mov r0, r9 - cmp r0, 0x5 - bne _0808B9F8 - ldr r0, _0808BA5C - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r6, 0 - bl JirachiWishGrantDialogue - ldr r0, [r6, 0x70] - ldr r2, _0808BA34 - adds r1, r0, r2 - movs r0, 0 - strb r0, [r1] - ldr r0, _0808BA60 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - bl GetLeaderEntity - adds r1, r0, 0 - adds r1, 0x4 - adds r0, r6, 0x4 - bl CalculateFacingDir - adds r1, r0, 0 - adds r0, r6, 0 - bl SetFacingDirection - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _0808BA64 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _0808BA68 - ldr r0, [r0] - ldr r1, _0808BA6C - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] -_0808B9F8: - ldr r0, _0808BA70 - bl DisplayDungeonDialogue - adds r0, r6, 0 - bl JirachiSpinEffect - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _0808BA74 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - bl sub_808BD38 - add sp, 0x78 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0808BA30: .4byte gUnknown_8105AD4 -_0808BA34: .4byte 0x0000015d -_0808BA38: .4byte gUnknown_8105B20 -_0808BA3C: .4byte gAvailablePokemonNames -_0808BA40: .4byte gUnknown_202DE58 -_0808BA44: .4byte gUnknown_8105B68 -_0808BA48: .4byte gUnknown_8105BA8 -_0808BA4C: .4byte gUnknown_81074FC -_0808BA50: .4byte 0xffff0000 -_0808BA54: .4byte 0x0000ffff -_0808BA58: .4byte gUnknown_8105BF4 -_0808BA5C: .4byte gUnknown_8105D2C -_0808BA60: .4byte gUnknown_8105D80 -_0808BA64: .4byte gUnknown_8105D9C -_0808BA68: .4byte gDungeonGlobalData -_0808BA6C: .4byte 0x00000674 -_0808BA70: .4byte gUnknown_81058E0 -_0808BA74: .4byte gUnknown_810593C - thumb_func_end JirachiWish - - thumb_func_start JirachiReFightDialogue -JirachiReFightDialogue: - push {lr} - ldr r0, _0808BA94 - bl HasRecruitedMon - lsls r0, 24 - cmp r0, 0 - beq _0808BA9C - bl sub_8086448 - ldr r0, _0808BA98 - bl sub_80866C4 - b _0808BAA0 - .align 2, 0 -_0808BA94: .4byte 0x0000019d -_0808BA98: .4byte gJirachiReFightDialogue_1 -_0808BA9C: - bl JirachiPreFightDialogue -_0808BAA0: - pop {r0} - bx r0 - thumb_func_end JirachiReFightDialogue - - thumb_func_start JirachiWishGrantFlash -JirachiWishGrantFlash: - push {r4,r5,lr} - sub sp, 0x4 - ldr r0, _0808BB34 - bl PlaySoundEffect - ldr r1, _0808BB38 - movs r0, 0x1F - str r0, [r1] - movs r4, 0xFA - movs r5, 0x1 -_0808BAB8: - str r5, [sp] - adds r0, r4, 0 - adds r1, r4, 0 - adds r2, r4, 0 - movs r3, 0x1 - bl SetDungeonBGColorRGB - movs r0, 0x46 - bl sub_803E46C - subs r4, 0xA - cmp r4, 0x95 - bgt _0808BAB8 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - movs r4, 0xFA - movs r5, 0x1 -_0808BADE: - str r5, [sp] - adds r0, r4, 0 - adds r1, r4, 0 - adds r2, r4, 0 - movs r3, 0x1 - bl SetDungeonBGColorRGB - movs r0, 0x46 - bl sub_803E46C - subs r4, 0xA - cmp r4, 0xC7 - bgt _0808BADE - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - movs r4, 0xFA - movs r5, 0x1 -_0808BB04: - str r5, [sp] - adds r0, r4, 0 - adds r1, r4, 0 - adds r2, r4, 0 - movs r3, 0x1 - bl SetDungeonBGColorRGB - movs r0, 0x46 - bl sub_803E46C - subs r4, 0xA - cmp r4, 0 - bge _0808BB04 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - bl sub_8085EB0 - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808BB34: .4byte 0x000002c1 -_0808BB38: .4byte gUnknown_202EDC8 - thumb_func_end JirachiWishGrantFlash - - thumb_func_start sub_808BB3C -sub_808BB3C: - push {lr} - sub sp, 0x8 - adds r3, r0, 0 - movs r0, 0 - ldrsh r1, [r3, r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 11 - movs r1, 0xC0 - lsls r1, 4 - adds r0, r1 - cmp r0, 0 - bge _0808BB58 - adds r0, 0xFF -_0808BB58: - lsls r0, 8 - lsrs r0, 16 - ldr r1, _0808BBA0 - ldr r2, [sp, 0x4] - ands r2, r1 - orrs r2, r0 - str r2, [sp, 0x4] - movs r0, 0x2 - ldrsh r1, [r3, r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 11 - movs r1, 0x80 - lsls r1, 5 - adds r0, r1 - cmp r0, 0 - bge _0808BB7C - adds r0, 0xFF -_0808BB7C: - lsls r0, 8 - lsrs r0, 16 - lsls r0, 16 - ldr r1, _0808BBA4 - ands r2, r1 - orrs r2, r0 - str r2, [sp, 0x4] - movs r0, 0 - str r0, [sp] - movs r0, 0x64 - movs r1, 0 - movs r2, 0 - add r3, sp, 0x4 - bl sub_8085EC8 - add sp, 0x8 - pop {r0} - bx r0 - .align 2, 0 -_0808BBA0: .4byte 0xffff0000 -_0808BBA4: .4byte 0x0000ffff - thumb_func_end sub_808BB3C - - .align 2,0 diff --git a/include/code_80A26CC.h b/include/code_80A26CC.h new file mode 100644 index 000000000..2838f15a7 --- /dev/null +++ b/include/code_80A26CC.h @@ -0,0 +1,17 @@ +struct unkStruct_80A2608 +{ + /* 0x0 */ s16 unk0; + /* 0x2 */ s16 unk2; + /* 0x4 */ s16 unk4; + /* 0x6 */ u16 unk6; + /* 0x8 */ u16 unk8; + /* 0xA */ u16 unkA; + /* 0xC */ u8 unkC; + /* 0xD */ u8 unkD; + /* 0xE */ s16 unkE; + /* 0x10 */ u8 unk10; + /* 0x11 */ u8 unk11; +}; + +struct unkStruct_80A2608 *sub_80A2608(s16 r0); +struct unkStruct_80A2608 *sub_80A2620(s16 r0); diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index 75b5d0143..bc40855d6 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -58,7 +58,8 @@ struct DungeonGlobalData u8 fill66C[0x671 - 0x66C]; /* 0x671 */ bool8 monsterHouseActive; /* 0x672 */ u8 unk672; - u8 fill673[0x675 - 0x673]; + u8 fill673[0x674 - 0x673]; + u8 unk674; u8 unk675; u8 unk676[0x68A - 0x676]; /* 0x68A */ u8 unk68A; diff --git a/ld_script.txt b/ld_script.txt index b046898f9..583d61191 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -274,7 +274,6 @@ SECTIONS { src/code_8086A3C.o(.text); asm/code_8086A3C.o(.text); src/code_8057824_1.o(.text); - asm/jirachi_wish.o(.text); src/code_80521D0_1.o(.text); src/pokemon.o(.text); asm/pokemon.o(.text); diff --git a/src/code_80521D0_1.c b/src/code_80521D0_1.c index f4257ad7b..3386db7c5 100644 --- a/src/code_80521D0_1.c +++ b/src/code_80521D0_1.c @@ -141,9 +141,9 @@ extern void sub_8086A54(struct DungeonEntity *); extern void sub_806BFC0(struct DungeonEntityData *, u32); -void sub_808BBA8(struct DungeonEntity *param_1) +void sub_808BBA8(struct DungeonEntity *jirachiEntity) { - sub_806BFC0(param_1->entityData,0); + sub_806BFC0(jirachiEntity->entityData,0); } void JirachiDropInEffect(struct DungeonEntity *jirachiEntity) diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index ccaab4b05..933c0015b 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -1,16 +1,22 @@ #include "global.h" #include "constants/direction.h" +#include "constants/friend_area.h" #include "constants/weather.h" #include "dungeon_global_data.h" #include "dungeon_entity.h" +#include "dungeon_map_access.h" +#include "dungeon_random.h" #include "dungeon_util.h" #include "dungeon_util_1.h" +#include "friend_area.h" #include "item.h" #include "pokemon.h" +#include "position_util.h" extern u32 gUnknown_202EDC8; extern u8 gUnknown_202E038[0x50]; extern u8 gAvailablePokemonNames[0x58]; +extern u8 gUnknown_202DE58[]; extern s16 gUnknown_80F57CA; extern s16 gUnknown_80F57D2; @@ -219,6 +225,29 @@ extern u32 gZapdosPostStoryPreFightDialogue_3; extern u32 gZapdosPostStoryPreFightDialogue_4; extern u32 gZapdosPostStoryPreFightDialogue_5; extern u32 gZapdosPostStoryPreFightDialogue_6; +extern u32 gUnknown_8105668; +extern u32 gUnknown_8105674; +extern u32 gUnknown_81056B8; +extern u32 gUnknown_81056DC; +extern u32 gUnknown_810579C; +extern u32 gUnknown_8105974; +extern u32 gUnknown_810581C; + +extern u32 gUnknown_8105BF4; +extern u32 gUnknown_8105D2C; +extern u32 gUnknown_8105D80; +extern u32 gUnknown_8105D9C; +extern u32 gUnknown_81058E0; +extern u32 gUnknown_810593C; +extern u32 gUnknown_8105A08; +extern u32 gUnknown_8105AD4; +extern u32 gUnknown_8105B20; +extern u32 gUnknown_8105B68; +extern u32 gUnknown_8105BA8; +extern u8 *gUnknown_8105798[]; +extern u32 gJirachiReFightDialogue_1; + +extern u8 gUnknown_81074FC[]; extern struct DungeonEntity *xxx_call_GetLeaderEntity(void); extern struct DungeonEntity *GetEntityFromClientType(u32); @@ -231,6 +260,7 @@ extern void sub_803E708(u32, u32); extern void DisplayDungeonDialogue(u32 *r0); extern void sub_8083E88(u32); extern void JirachiSpinEffect(struct DungeonEntity *); +extern void JirachiWishGrantDialogue(struct DungeonEntity *jirachiEntity); extern void sub_80862BC(struct DungeonEntity *); extern void sub_8086448(); @@ -251,7 +281,7 @@ extern void SetFacingDirection(struct DungeonEntity *, u32); extern void sub_8049ED4(); extern void sub_8085860(s32 r0, u32 r1); extern void sub_806CE68(struct DungeonEntity *, u32); - +extern void sub_8092578(u8 *buffer, u8 index, u8 r2); extern void sub_8052D44(u8 *, struct DungeonEntity *, struct DungeonEntity *); extern void sub_8097FD0(u32); extern void SetMessageArgument(u8 *, struct DungeonEntity *, u32); @@ -363,7 +393,14 @@ extern u32 gUnknown_81015A0; extern u32 gZapdosReFightDialogue_2; extern u32 gZapdosReFightDialogue_3; extern u32 gZapdosReFightDialogue_4; - +extern s32 sub_8052C68(u32, u8 *, u32 *, u32); +extern void sub_80861A8(void); +extern void sub_8045C28(struct ItemSlot *, u8 , u8 *); +extern void sub_808BD38(void); +extern u8 JirachiFriendAreaSearch(void); +extern void sub_808BB3C(s16 *); +extern void sub_8046860(struct DungeonEntity *, s32 *, struct ItemSlot *, u32); +extern u32 sub_803D73C(u32); void ZapdosReFightDialogue(void) { @@ -1909,7 +1946,7 @@ void sub_8089620(struct DungeonEntity *param_1) PlaySoundEffect(0x1f8); while( 1 ) { iVar2 = iVar2 - iVar1; - iVar1 = iVar1 -= 0x18; + iVar1 -= 0x18; if (iVar1 < 0x14) { iVar1 = 0x14; } @@ -3557,3 +3594,280 @@ void sub_808B50C(void) sub_803E708(10,70); gDungeonGlobalData->unk2 = 1; } + +void JirachiWish(void) +{ + u8 friendArea; + struct DungeonEntity *JirachiEntity; + struct Position *LeaderPos; + struct DungeonEntity *LeaderEntity; + s32 wishChoice; + s32 iVar4; + u32 uVar6; + s32 iVar9; + struct ItemSlot auStack152 [9]; + struct ItemSlot auStack116 [9]; + struct ItemSlot auStack80 [9]; + s32 local_2c; + s32 local_28; + s32 local_24; + s32 temp; + s32 temp2; + s32 temp3; + + JirachiEntity = GetEntityFromClientType(0x1a); + CopySpeciesNametoBuffer(gUnknown_202E038,0x19d); // SPECIES_JIRACHI + sub_80855E4(sub_808BBA8); + sub_808BBA8(JirachiEntity); + sub_8041888(0); + JirachiEntity->entityData->unk15C = 1; + JirachiEntity->entityData->unk15E = 0; + sub_80861B8(JirachiEntity,0xe,0); + sub_80855E4(sub_80861A8); + gDungeonGlobalData->unk1356C = 1; + sub_8083ED8(0x1e); + sub_803E708(0x1e,0x46); + DisplayDungeonDialogue(&gUnknown_8105668); + sub_803E708(10,0x46); + PlaySoundEffect(0x1a7); + sub_803E708(0x96,0x46); + sub_80862BC(JirachiEntity); + DisplayDungeonDialogue(&gUnknown_8105674); + sub_8083E88(0x79); + sub_803E708(10,0x46); + sub_80856E0(JirachiEntity,0); + PlaySoundEffect(0x16a); + DisplayDungeonDialogue(&gUnknown_81056B8); + sub_803E708(10,0x46); + SpriteLookAroundEffect(JirachiEntity); + DisplayDungeonDialogue(&gUnknown_81056DC); + sub_803E708(10,0x46); + while( 1 ) { + while (1) { +#ifndef NONMATCHING + register s32 r0 asm("r0"); + asm("mov\t%0, #0":"=r"(r0)); +#else + s32 r0 = 0; +#endif + wishChoice = sub_8052C68(r0,*gUnknown_8105798,&gUnknown_810579C,0x705); + if (wishChoice >= 1) break; + } + sub_803E708(10,0x46); + if (wishChoice == 1) { + s32 r8; + // Lots of Money + DisplayDungeonDialogue(&gUnknown_810581C); + sub_803E708(10,0x46); + JirachiWishGrantDialogue(JirachiEntity); + + for(iVar4 = 0; iVar4 < 6; iVar4 = r8) + { + r8 = iVar4 + 1; + for(iVar9 = 0; iVar9 < 9; iVar9++) + { + sub_8045C28(&auStack152[iVar9], 0x69, 0); + } + temp = (u16)(((((u16)JirachiEntity->posWorld.x + DungeonRandomCapped(3)) - 1) << 16) >> 16); + local_2c &= 0xffff0000; + local_2c |= temp; + + temp = ((u16)JirachiEntity->posWorld.y + DungeonRandomCapped(3) + -1) * 0x10000; + local_2c &= 0xffff; + local_2c |= temp; + if ((GetMapTile_2((s16)local_2c, local_2c >> 16)->tileType & 3) != 0) { + PlaySoundEffect(0x14c); + sub_808BB3C((s16 *)&local_2c); + sub_8046860(JirachiEntity,&local_2c,auStack152,9); + } + } + JirachiEntity->entityData->unk15D = 0; + } + if (wishChoice == 2) { + // Lots of Items + DisplayDungeonDialogue(&gUnknown_8105974); + sub_803E708(10,0x46); + JirachiWishGrantDialogue(JirachiEntity); + + for(iVar4 = 0; iVar4 < 6; iVar4++) + { +#ifndef NONMATCHING + asm("":::"sl"); +#endif + for(iVar9 = 0; iVar9 < 9; iVar9++) + { + sub_8045C28(&auStack116[iVar9], sub_803D73C(0),0); + } + temp2 = (u16)(((((u16)JirachiEntity->posWorld.x + DungeonRandomCapped(3)) - 1) << 16) >> 16); + local_28 &= 0xffff0000; + local_28 |= temp2; + + temp2 = ((u16)JirachiEntity->posWorld.y + DungeonRandomCapped(3) + -1) * 0x10000; + local_28 &= 0xffff; + local_28 |= temp2; + if ((GetMapTile_2((s16)local_28, local_28 >> 16)->tileType & 3) != 0) { + PlaySoundEffect(400); + sub_808BB3C((s16 *)&local_28); + sub_8046860(JirachiEntity,&local_28,auStack116,9); + } + } + JirachiEntity->entityData->unk15D = 0; + } + + if (wishChoice == 3) + { + // A Friend Area + friendArea = JirachiFriendAreaSearch(); + if (friendArea == NUM_FRIEND_AREAS) + { + // You want a friend area? But you already have many friend areas... + DisplayDungeonDialogue(&gUnknown_8105A08); + sub_803E708(10,0x46); + continue; + } + else + { + // You want a friend area? As you wish.. + DisplayDungeonDialogue(&gUnknown_8105AD4); + sub_803E708(10,0x46); + JirachiWishGrantDialogue(JirachiEntity); + JirachiEntity->entityData->unk15D = 0; + DisplayDungeonDialogue(&gUnknown_8105B20); + UnlockFriendArea(friendArea); + PlaySoundEffect(0xd4); + LeaderEntity = GetLeaderEntity(); + SetMessageArgument(gAvailablePokemonNames,LeaderEntity,0); + sub_8092578(gUnknown_202DE58,friendArea,0); + // Obtained the friend area! + DisplayDungeonDialogue(&gUnknown_8105B68); + } + } + if (wishChoice == 4) { + // More Strength.. + DisplayDungeonDialogue(&gUnknown_8105BA8); + sub_803E708(10,0x46); + JirachiWishGrantDialogue(JirachiEntity); + + for(iVar4 = 0; iVar4 < 5; iVar4++) + { + + for(iVar9 = 0; iVar9 < 4; iVar9++) + { + sub_8045C28(&auStack80[iVar9],gUnknown_81074FC[DungeonRandomCapped(8)],0); + } + temp3 = (u16)(((((u16)JirachiEntity->posWorld.x + DungeonRandomCapped(3)) - 1) << 16) >> 16); + local_24 &= 0xffff0000; + local_24 |= temp3; + + temp3 = ((u16)JirachiEntity->posWorld.y + DungeonRandomCapped(3) + -1) * 0x10000; + local_24 &= 0xffff; + local_24 |= temp3; + if ((GetMapTile_2((s16)local_24, local_24 >> 16)->tileType & 3) != 0) { + PlaySoundEffect(400); + sub_808BB3C((s16 *)&local_24); + sub_8046860(JirachiEntity,&local_24,auStack80,4); + } + } + JirachiEntity->entityData->unk15D = 0; + DisplayDungeonDialogue(&gUnknown_8105BF4); + sub_803E708(10,0x46); + } + if (wishChoice == 5) { + // Something Good... + DisplayDungeonDialogue(&gUnknown_8105D2C); + sub_803E708(10,0x46); + JirachiWishGrantDialogue(JirachiEntity); + JirachiEntity->entityData->unk15D = 0; + DisplayDungeonDialogue(&gUnknown_8105D80); + sub_803E708(10,0x46); + LeaderPos = &GetLeaderEntity()->posWorld; + uVar6 = CalculateFacingDir(&JirachiEntity->posWorld,LeaderPos); + SetFacingDirection(JirachiEntity,uVar6); + sub_803E708(10,0x46); + DisplayDungeonDialogue(&gUnknown_8105D9C); + sub_803E708(10,0x46); + gDungeonGlobalData->unk674 = 1; + } + break; + } + + DisplayDungeonDialogue(&gUnknown_81058E0); + JirachiSpinEffect(JirachiEntity); + sub_803E708(10,0x46); + DisplayDungeonDialogue(&gUnknown_810593C); + sub_803E708(10,0x46); + sub_808BD38(); +} + +void JirachiReFightDialogue(void) +{ + if(HasRecruitedMon(SPECIES_JIRACHI)) + { + sub_8086448(); + sub_80866C4(&gJirachiReFightDialogue_1); + } + else + { + JirachiPreFightDialogue(); + } +} + +void JirachiWishGrantFlash(void) +{ + s32 iVar1; + + PlaySoundEffect(0x2c1); + gUnknown_202EDC8 = 0x1f; + + for(iVar1 = 0xFA; iVar1 > 0x95; iVar1 -= 10) + { + SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); + sub_803E46C(0x46); + } + sub_803E708(10,0x46); + + for(iVar1 = 0xFA; iVar1 > 0xC7; iVar1 -= 10) + { + SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); + sub_803E46C(0x46); + } + sub_803E708(10,0x46); + + for(iVar1 = 0xFA; iVar1 >= 0; iVar1 -= 10) + { + SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,1); + sub_803E46C(0x46); + } + sub_803E708(10,0x46); + sub_8085EB0(); +} + +void sub_808BB3C(s16 *param_1) +{ + register s32 iVar1 asm("r0"); + s32 uVar2; + u32 local_8; + + iVar1 = param_1[0] * 0x1800 + 0xc00; + if (iVar1 < 0) { + iVar1 += 0xff; + } + + iVar1 <<= 8; + iVar1 = (u16)(iVar1 >> 16); + + uVar2 = (local_8 & 0xffff0000) | iVar1; + local_8 = uVar2; + + iVar1 = param_1[1] * 0x1800 + 0x1000; + if (iVar1 < 0) { + iVar1 += 0xff; + } + + iVar1 <<= 8; + iVar1 = (u16)(iVar1 >> 0x10); + iVar1 <<= 0x10; + + local_8 = (iVar1) | (uVar2 & 0x0000ffff); + sub_8085EC8(100,0,0,&local_8,0); +} From 7d9bae28c8c0347ad90d648c309fb7e87289a510 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 5 Jun 2022 12:28:17 -0700 Subject: [PATCH 04/11] more labeling --- asm/code_8086A3C.s | 2 +- ld_script.txt | 1 - src/code_80521D0_1.c | 1307 --------------------------------------- src/code_8057824_1.c | 1410 +++++++++++++++++++++++++++++++++++++++--- src/code_80869E4.c | 132 ++-- src/code_8086A3C.c | 16 +- 6 files changed, 1415 insertions(+), 1453 deletions(-) delete mode 100644 src/code_80521D0_1.c diff --git a/asm/code_8086A3C.s b/asm/code_8086A3C.s index f2ced58b9..cf488ee7c 100644 --- a/asm/code_8086A3C.s +++ b/asm/code_8086A3C.s @@ -521,7 +521,7 @@ ZapdosPreFightDialogue: ldr r0, _08087478 bl DisplayDungeonDialogue ldr r0, [sp, 0x68] - bl sub_8087704 + bl ZapdosDropInEffect movs r0, 0x9 bl sub_8083E88 adds r0, r6, 0 diff --git a/ld_script.txt b/ld_script.txt index 583d61191..436c87aa7 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -274,7 +274,6 @@ SECTIONS { src/code_8086A3C.o(.text); asm/code_8086A3C.o(.text); src/code_8057824_1.o(.text); - src/code_80521D0_1.o(.text); src/pokemon.o(.text); asm/pokemon.o(.text); src/pokemon_mid.o(.text); diff --git a/src/code_80521D0_1.c b/src/code_80521D0_1.c deleted file mode 100644 index 3386db7c5..000000000 --- a/src/code_80521D0_1.c +++ /dev/null @@ -1,1307 +0,0 @@ -#include "global.h" -#include "constants/direction.h" -#include "constants/friend_area.h" -#include "dungeon_global_data.h" -#include "dungeon_entity.h" -#include "dungeon_map_access.h" -#include "dungeon_random.h" -#include "dungeon_util.h" -#include "dungeon_util_1.h" -#include "friend_area.h" -#include "map.h" -#include "pokemon.h" - -extern struct DungeonEntity *xxx_call_GetLeaderEntity(void); -extern struct DungeonEntity *GetEntityFromClientType(u32); -extern char gUnknown_202E038[0x50]; -extern u32 gUnknown_202EDC8; - -extern u32 gKyogrePreFightDialogue_8; -extern u32 gKyogrePreFightDialogue_1; -extern u32 gKyogrePreFightDialogue_2; -extern u32 gKyogrePreFightDialogue_3; -extern u32 gKyogrePreFightDialogue_4; -extern u32 gKyogrePreFightDialogue_5; -extern u32 gKyogrePreFightDialogue_6; -extern u32 gKyogrePreFightDialogue_7; -extern u32 gUnknown_810697C; -extern u64 gUnknown_8107544[]; -extern u32 gMedichamRescueDialogue_1; -extern u32 gMedichamRescueDialogue_2; -extern u32 gMedichamRescueDialogue_3; -extern u32 gMedichamRescueDialogue_4; -extern u32 gSmeargleRescueDialogue_1; -extern u32 gSmeargleRescueDialogue_2; -extern u32 gSmeargleRescueDialogue_3; -extern u32 gSmeargleRescueDialogue_4; -extern u32 gUnknown_8106720; - -extern u32 gCelebiJoinDialogue_10; -extern u32 gCelebiJoinDialogue_1; -extern u32 gCelebiJoinDialogue_2; -extern u32 gCelebiJoinDialogue_3; -extern u32 gCelebiJoinDialogue_4; -extern u32 gCelebiJoinDialogue_5; -extern u32 gCelebiJoinDialogue_6; -extern u32 gCelebiJoinDialogue_7; -extern u32 gCelebiJoinDialogue_8; -extern u32 gCelebiJoinDialogue_9; -extern u32 *gPtrPurityForestAllowCelebiToJoinText; -extern u32 gPurityForestAllowCelebiToJoinPrompt; -extern u32 *gPtrPurityForestRefuseCelebiConfirmText; -extern u32 gPurityForestRefuseCelebiConfirmPrompt; -extern u32 gDeoxysPreFightDialogue_1; -extern u32 gDeoxysPreFightDialogue_2; -extern u32 gDeoxysPreFightDialogue_3; -extern u32 gDeoxysPreFightDialogue_4; -extern u32 gDeoxysPreFightDialogue_5; -extern u32 gLugiaPreFightDialogue_8; -extern u32 gLugiaPreFightDialogue_1; -extern u32 gLugiaPreFightDialogue_2; -extern u32 gLugiaPreFightDialogue_3; -extern u32 gLugiaPreFightDialogue_4; -extern u32 gLugiaPreFightDialogue_5; -extern u32 gLugiaPreFightDialogue_6; -extern u32 gLugiaPreFightDialogue_7; - -extern u32 gUnknown_81058C4; -extern u32 gUnknown_81058A8; -extern u8 sub_800E9A8(u32); -extern void sub_800DC14(u32); -extern void JirachiWishGrantFlash(); - -extern void sub_8086A3C(struct DungeonEntity *r0); -extern void sub_8083E88(u32); -extern void sub_80854D4(void); -extern void sub_80855E4(void *); -extern void sub_8085930(u32); -extern void sub_8068FE0(struct DungeonEntity *, 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_8086448(void); -extern void sub_8086598(void); -extern void SpriteLookAroundEffect(struct DungeonEntity *); -extern void sub_80862BC(struct DungeonEntity *); -extern void PlaySoundEffect(u32); -extern void sub_806CDD4(struct DungeonEntity *, u32, u32); -extern void sub_80869E4(struct DungeonEntity *, u32, u32, u32); -extern void sub_806CE68(struct DungeonEntity *, u32); -extern void sub_804539C(struct DungeonEntity *, u32, u32); -extern void sub_803E46C(u32); -extern void sub_8042B0C(struct DungeonEntity *); -extern void SetFacingDirection(struct DungeonEntity *, u32); -extern void DisplayDungeonDialogue(u32 *); -extern void sub_803E708(u32, u32); -extern u8 HasRecruitedMon(u32); -extern u8 sub_806FD18(struct DungeonEntity *); -extern u8 sub_8083E74(u32); -extern s32 sub_8052C68(u32 *, u32 *, u32 *, u32); -extern void sub_8083F14(); -extern void sub_80861D4(struct DungeonEntity *, u32, u32); -extern void sub_806FDF4(struct DungeonEntity *, struct DungeonEntity *, struct DungeonEntity **); -extern u32 sub_80861F8(u32, struct DungeonEntity *, u32); -extern void sub_8083ED8(u32); -extern s32 GetCameraXPos(); -extern s32 GetCameraYPos(); -extern void sub_803F878(u32, s32); -extern void SetupBossFightHP(struct DungeonEntity *, u32, u32); -extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32); -extern void sub_803E9D0(void); -extern void DeoxysScreenFlash(void); -extern void sub_8085EB0(); -extern void sub_808563C(void *); - -void SetupDeoxysFightHP(struct DungeonEntity *r0); -void sub_808C550(void); -void sub_808C590(struct DungeonEntity *r0); -void SetupDeoxysFacingDirection(struct DungeonEntity *r0); -void sub_808C9B0(); -void sub_808C8E0(struct DungeonEntity *param_1); -void sub_808C360(void); -void KyogreScreenFlash(); - -void sub_808C0CC(); -void LugiaScreenFlash(); -void LugiaScreenFlash2(); -extern void sub_80861B8(struct DungeonEntity *, u32, u32); - -void nullsub_99(); -extern bool8 *gFriendAreas; - -extern void sub_8049884(); -extern void sub_8049B8C(); -extern void sub_8049ED4(); -extern void sub_8040A84(); -extern void sub_8086A54(struct DungeonEntity *); - -extern void sub_806BFC0(struct DungeonEntityData *, u32); - -void sub_808BBA8(struct DungeonEntity *jirachiEntity) -{ - sub_806BFC0(jirachiEntity->entityData,0); -} - -void JirachiDropInEffect(struct DungeonEntity *jirachiEntity) -{ - s32 iVar1; - s32 iVar2; - - sub_80861F8(0x1b,jirachiEntity,0); - sub_8086A54(jirachiEntity); - sub_80861B8(jirachiEntity,0xe,0); - iVar1 = 0xa000; - iVar2 = 0x200; - PlaySoundEffect(0x1f8); - while( 1 ) { - iVar1 = iVar1 - iVar2; - if (iVar1 < 0x1800) { - iVar2 = 0x100; - } - if (iVar1 < 0) break; - jirachiEntity->entityData->unk174 = iVar1; - sub_803E46C(0x46); - } - jirachiEntity->entityData->unk174 = 0; -} - -void JirachiSpinEffect(struct DungeonEntity * jirachiEntity) -{ - s32 uVar1; - - PlaySoundEffect(0x298); - for(uVar1 = 0; uVar1 < 25; uVar1++){ - SetFacingDirection(jirachiEntity, uVar1 & DIRECTION_MASK); - sub_803E708(3,0x46); - } - jirachiEntity->entityData->unk15E = 1; - PlaySoundEffect(0x27f); - sub_80861F8(99,jirachiEntity,1); -} - -void JirachiWishGrantDialogue(struct DungeonEntity *jirachiEntity) -{ - u32 uVar2; - - jirachiEntity->entityData->unk15D = 1; - // Nnnnnnnnnn! - DisplayDungeonDialogue(&gUnknown_81058A8); - PlaySoundEffect(0x375); - sub_80861F8(0x67,jirachiEntity,1); - PlaySoundEffect(0x2a8); - uVar2 = sub_80861F8(0x68,jirachiEntity,0); - // Taaaaaaaah! - DisplayDungeonDialogue(&gUnknown_81058C4); - if (sub_800E9A8(uVar2) != 0) { - sub_800DC14(uVar2); - } - sub_803E708(10,0x46); - JirachiWishGrantFlash(); -} - -void sub_808BCE4(void) -{ - struct MapTile *puVar1; - - puVar1 = GetMapTile_2(gDungeonGlobalData->unkE23C, gDungeonGlobalData->unkE23E); - puVar1->tileType &= ~(TILE_TYPE_FLOOR | TILE_TYPE_LIQUID); - puVar1->tileType |= TILE_TYPE_MAP_EDGE; - puVar1->tileType &= ~TILE_TYPE_STAIRS; - sub_8049884(); - sub_8049B8C(); - sub_8049ED4(); - sub_8040A84(); -} - -void sub_808BD38(void) -{ - struct MapTile *puVar1; - - puVar1 = GetMapTile_2(gDungeonGlobalData->unkE23C, gDungeonGlobalData->unkE23E); - puVar1->tileType &= ~(TILE_TYPE_FLOOR | TILE_TYPE_LIQUID); - puVar1->tileType |= TILE_TYPE_FLOOR; - puVar1->tileType &= ~TILE_TYPE_MAP_EDGE; - puVar1->tileType |= TILE_TYPE_STAIRS; - 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]) { - friendAreas[numUnlockableAreas] = friendAreaCounter; - numUnlockableAreas++; - } - } - } - } - - if (numUnlockableAreas == 0) { - return NUM_FRIEND_AREAS; - } - else { - // Randomly pick 1 - friendAreaIndex = DungeonRandomCapped(numUnlockableAreas); - return friendAreas[friendAreaIndex]; - } -} - -void sub_808BDEC(void) -{ - struct DungeonEntity * LeaderEntity; - struct DungeonEntity * LugiaEntity; - - LeaderEntity = xxx_call_GetLeaderEntity(); - LugiaEntity = GetEntityFromClientType(0x1b); - sub_8083F14(); - sub_80854D4(); - sub_8085930(DIRECTION_NORTH); - sub_80855E4(sub_8086A3C); - if (HasRecruitedMon(SPECIES_LUGIA)) { - sub_8083E88(0x23); - sub_8068FE0(LugiaEntity,0x21c,0); - } - else { - gDungeonGlobalData->unk7 = 1; - SetFacingDirection(LugiaEntity, DIRECTION_SOUTH); - } - sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); - CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_LUGIA); -} - -void sub_808BE70(u8 param_1,u8 param_2) -{ - if ((param_2 == 0x33) && (param_1 == 0x1B)) { - gDungeonGlobalData->unk2 = 1; - } -} - - -void LugiaPreFightDialogue(void) -{ - struct DungeonEntity * LeaderEntity; - struct DungeonEntity * LugiaEntity; - - LeaderEntity = xxx_call_GetLeaderEntity(); - LugiaEntity = GetEntityFromClientType(0x1b); - if (HasRecruitedMon(SPECIES_LUGIA)) { - sub_8086448(); - sub_80866C4(&gLugiaPreFightDialogue_8); - } - else { - sub_8083F14(); - sub_8086448(); - DisplayDungeonDialogue(&gLugiaPreFightDialogue_1); - sub_8083EA8(0x23,0x3c); - sub_808C0CC(); - DisplayDungeonDialogue(&gLugiaPreFightDialogue_2); - LugiaScreenFlash(); - DisplayDungeonDialogue(&gLugiaPreFightDialogue_3); - sub_803E708(10,0x46); - DisplayDungeonDialogue(&gLugiaPreFightDialogue_4); - PlaySoundEffect(0x1f8); - sub_80861D4(LugiaEntity,0xd,0); - sub_803E708(0x2b,0x46); - sub_80861B8(LugiaEntity,0,0); - DisplayDungeonDialogue(&gLugiaPreFightDialogue_5); - LugiaScreenFlash(); - DisplayDungeonDialogue(&gLugiaPreFightDialogue_6); - LugiaScreenFlash2(); - SetDungeonBGColorRGB(0xffffff06,0xffffff06,0xffffff06,1,0); - sub_8083F14(); - sub_80861D4(LugiaEntity,7,0); - DisplayDungeonDialogue(&gLugiaPreFightDialogue_7); - LugiaScreenFlash(); - SetupBossFightHP(LugiaEntity,800,0x20); - sub_8083E88(0x23); - ShiftCameraToPosition(&LeaderEntity->posPixel,0x10); - } -} - -void LugiaScreenFlash(void) -{ - s32 iVar1; - - PlaySoundEffect(0x1f6); - for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){ - SetDungeonBGColorRGB(0,0,iVar1,1,1); - sub_803E46C(0x46); - } - sub_803E708(10,0x46); - for(iVar1 = 250; iVar1 > 199; iVar1 -= 10){ - SetDungeonBGColorRGB(0,iVar1,iVar1,1,1); - sub_803E46C(0x46); - } - sub_803E708(10,0x46); - for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10){ - SetDungeonBGColorRGB(0,0,iVar1,1,1); - sub_803E46C(0x46); - } - sub_803E708(10,0x46); - sub_8085EB0(); -} - -void LugiaScreenFlash2(void) -{ - s32 iVar1; - - PlaySoundEffect(0x1f6); - - for(iVar1 = 0; iVar1 < 200; iVar1 += 100){ - SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,0); - sub_803E46C(0x46); - } - - for(iVar1 = 200; iVar1 >= 0; iVar1 -= 100){ - SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,0); - sub_803E46C(0x46); - } - - sub_803E708(4,0x46); - - for(iVar1 = 0; iVar1 < 200; iVar1 += 100){ - SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,0); - sub_803E46C(0x46); - } - - for(iVar1 = 200; iVar1 >= 0; iVar1 -= 100){ - SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,0); - sub_803E46C(0x46); - } - - sub_803E708(10,0x46); - sub_8085EB0(); -} - -void sub_808C0CC(void) -{ - gUnknown_202EDC8 = 0x1f; - SetDungeonBGColorRGB(0,0,0,1,1); - sub_803E9D0(); - sub_803E46C(0x46); - gDungeonGlobalData->unk7 = 0; - LugiaScreenFlash(); -} - -void sub_808C10C(void) -{ - struct DungeonEntity * LeaderEntity; - struct DungeonEntity * KyogreEntity; - - u32 uVar3; - s32 iVar2; - - LeaderEntity = xxx_call_GetLeaderEntity(); - KyogreEntity = GetEntityFromClientType(0x1c); - sub_8083F14(); - sub_80854D4(); - sub_8085930(DIRECTION_NORTH); - if (HasRecruitedMon(SPECIES_KYOGRE)) { - sub_8068FE0(KyogreEntity,0x21c,0); - } - else { - gDungeonGlobalData->unk7 = 1; - SetFacingDirection(KyogreEntity, DIRECTION_SOUTH); - } - sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); - uVar3 = GetCameraXPos(); - iVar2 = GetCameraYPos(); - 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)) { - gDungeonGlobalData->unk2 = 1; - sub_8083E88(0x23); - } -} - -void KyogrePreFightDialogue(void) -{ - struct DungeonEntity *LeaderEntity; - struct DungeonEntity *KyogreEntity; - - LeaderEntity = xxx_call_GetLeaderEntity(); - KyogreEntity = GetEntityFromClientType(0x1c); - sub_8083F14(); - if (HasRecruitedMon(SPECIES_KYOGRE)) { - sub_8083EA8(0x23,0x3c); - SpriteLookAroundEffect(LeaderEntity); - sub_803E708(10,0x46); - DisplayDungeonDialogue(&gKyogrePreFightDialogue_8); - sub_803E708(10,0x46); - gDungeonGlobalData->unk2 = 1; - } - else { - DisplayDungeonDialogue(&gKyogrePreFightDialogue_1); - sub_803E708(10,0x46); - DisplayDungeonDialogue(&gKyogrePreFightDialogue_2); - sub_803E708(10,0x46); - nullsub_99(); - sub_803E708(10,0x46); - // Gwwwwwooooooooh - DisplayDungeonDialogue(&gKyogrePreFightDialogue_3); - sub_803E708(10,0x46); - sub_8083EA8(0x23,0x3c); - sub_808C360(); - // My duels against {ARG_POKEMON_3} (Groudon) left us both exhausted - DisplayDungeonDialogue(&gKyogrePreFightDialogue_4); - KyogreScreenFlash(); - // I am {ARG_POKEMON_2} (Kyogre)! - // The lord of the sea! - DisplayDungeonDialogue(&gKyogrePreFightDialogue_5); - KyogreScreenFlash(); - // Witness the destructive force of my waves! - DisplayDungeonDialogue(&gKyogrePreFightDialogue_6); - KyogreScreenFlash(); - // Marvel at my awesome - // power! - DisplayDungeonDialogue(&gKyogrePreFightDialogue_7); - sub_803E708(10,0x46); - SetupBossFightHP(KyogreEntity,600,0xb); - sub_8083E88(0x23); - ShiftCameraToPosition(&LeaderEntity->posPixel,0x10); - } -} - -void nullsub_99(void) -{ -} - -void KyogreScreenFlash(void) -{ - s32 iVar1; - - PlaySoundEffect(0x1f8); - for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){ - SetDungeonBGColorRGB(0,0,iVar1,1,1); - sub_803E46C(0x46); - } - sub_803E708(10,0x46); - for(iVar1 = 250; iVar1 > 199; iVar1 -= 10){ - SetDungeonBGColorRGB(0,iVar1,iVar1,1,1); - sub_803E46C(0x46); - } - sub_803E708(10,0x46); - for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10){ - SetDungeonBGColorRGB(0,0,iVar1,1,1); - sub_803E46C(0x46); - } - sub_803E708(10,0x46); - sub_8085EB0(); -} - -void sub_808C360(void) -{ - gUnknown_202EDC8 = 0x1f; - SetDungeonBGColorRGB(0,0,0,1,1); - sub_803E9D0(); - sub_803E46C(0x46); - gDungeonGlobalData->unk7 = 0; - KyogreScreenFlash(); -} - -void sub_808C3A0(void) -{ - struct DungeonEntity * LeaderEntity; - - LeaderEntity = xxx_call_GetLeaderEntity(); - sub_8083F14(); - sub_80854D4(); - sub_8085930(DIRECTION_NORTH); - sub_80855E4(sub_8086A3C); - if (HasRecruitedMon(SPECIES_DEOXYS_NORMAL)) { - sub_808563C(sub_808C590); - } - else { - gDungeonGlobalData->unk7 = 1; - sub_808563C(SetupDeoxysFacingDirection); - } - sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); - CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_DEOXYS_NORMAL); -} - -void sub_808C414(u8 param_1,u8 param_2) -{ - if ((param_2 == 0x35) && (param_1 == 0x1D)) { - gDungeonGlobalData->unk2 = 1; - sub_8083E88(0x1a); - } -} - -void DeoxysPreFightDialogue(void) -{ - struct DungeonEntity * LeaderEntity; - - LeaderEntity = xxx_call_GetLeaderEntity(); - sub_8086448(); - if (HasRecruitedMon(SPECIES_DEOXYS_NORMAL)) { - // There appears to be no one here. - // It's impossible to go any further - sub_80866C4(&gDeoxysPreFightDialogue_5); - } - else { - DisplayDungeonDialogue(&gDeoxysPreFightDialogue_1); - sub_8083EA8(0x1a,0x3c); - sub_808C550(); - DisplayDungeonDialogue(&gDeoxysPreFightDialogue_2); - DeoxysScreenFlash(); - DisplayDungeonDialogue(&gDeoxysPreFightDialogue_3); - DeoxysScreenFlash(); - DisplayDungeonDialogue(&gDeoxysPreFightDialogue_4); - sub_803E708(10,0x46); - sub_808563C(SetupDeoxysFightHP); - ShiftCameraToPosition(&LeaderEntity->posPixel,0x10); - } -} - -void DeoxysScreenFlash(void) -{ - s32 iVar1; - - PlaySoundEffect(0x2c1); - for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){ - SetDungeonBGColorRGB(iVar1,0,0,1,1); - sub_803E46C(0x46); - } - sub_803E708(10,0x46); - for(iVar1 = 250; iVar1 > 199; iVar1 -= 10){ - SetDungeonBGColorRGB(iVar1,iVar1,0,1,1); - sub_803E46C(0x46); - } - sub_803E708(10,0x46); - for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10){ - SetDungeonBGColorRGB(iVar1,0,0,1,1); - sub_803E46C(0x46); - } - sub_803E708(10,0x46); - sub_8085EB0(); -} - -void sub_808C550(void) -{ - gUnknown_202EDC8 = 0x1f; - SetDungeonBGColorRGB(0,0,0,1,1); - sub_803E9D0(); - sub_803E46C(0x46); - gDungeonGlobalData->unk7 = 0; - DeoxysScreenFlash(); -} - -void sub_808C590(struct DungeonEntity *r0) -{ - sub_8068FE0(r0, 0x21C, 0); -} - -void SetupDeoxysFacingDirection(struct DungeonEntity *r0) -{ - SetFacingDirection(r0, DIRECTION_SOUTH); -} - -void SetupDeoxysFightHP(struct DungeonEntity *r0) -{ - SetupBossFightHP(r0, 950, 0x20); -} - -void sub_808C5C0(void) -{ - struct DungeonEntity * LeaderEntity; - struct DungeonEntity * CelebiEntity; - - u32 uVar3; - s32 iVar2; - - LeaderEntity = xxx_call_GetLeaderEntity(); - CelebiEntity = GetEntityFromClientType(0x1e); - sub_8083E88(0x7f); - sub_80854D4(); - sub_8085930(DIRECTION_NORTH); - SetFacingDirection(CelebiEntity, DIRECTION_SOUTH); - sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); - uVar3 = GetCameraXPos(); - iVar2 = GetCameraYPos(); - sub_803F878(uVar3,iVar2 + 0xfffff000); - CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_CELEBI); -} - -// Dummy Celebi Fight Dialogue?? -void nullsub_100(u32 r0, u32 r1, u32 r2) -{ -} - -#ifdef NONMATCHING -void CelebiJoinDialogue(void) -{ - struct DungeonEntity *LeaderEntity; - s32 state; - s32 menuChoice; - struct DungeonEntity *CelebiEntity; - - LeaderEntity = xxx_call_GetLeaderEntity(); - CelebiEntity = GetEntityFromClientType(0x1e); - if ((HasRecruitedMon(SPECIES_CELEBI)) || (sub_806FD18(CelebiEntity) == '\0')) - { - sub_8068FE0(local_1c,0x21c,0); - SpriteLookAroundEffect(LeaderEntity); - sub_803E708(10,0x46); - // ......... - DisplayDungeonDialogue(&gCelebiJoinDialogue_10); - } - else - { - SpriteLookAroundEffect(LeaderEntity); - sub_803E708(10,0x46); - sub_80862BC(LeaderEntity); - sub_803E708(10,0x46); - // Oh? There's someone there. - DisplayDungeonDialogue(&gCelebiJoinDialogue_1); - sub_803E708(10,0x46); - sub_8086598(); - sub_8086598(); - sub_8086598(); - sub_8086598(); - // The Time-Traveling Pokemon {ARG_POKEMON_2} (Celebi)! - DisplayDungeonDialogue(&gCelebiJoinDialogue_2); - PlaySoundEffect(0x1c7); - sub_806CDD4(CelebiEntity,10,DIRECTION_SOUTH); - sub_803E708(0x14,0x46); - sub_806CE68(CelebiEntity, DIRECTION_SOUTH); - sub_803E708(4,0x46); - PlaySoundEffect(0x1c7); - sub_806CDD4(CelebiEntity,10,DIRECTION_SOUTH); - DisplayDungeonDialogue(&gCelebiJoinDialogue_3); - 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(); - PlaySoundEffect(0xcc); - while (sub_8083E74(0xcc) != 0) { - sub_803E46C(0x46); - } - sub_8083E88(0x7f); - PlaySoundEffect(0x1c7); - sub_80861D4(CelebiEntity,0xd,0); - sub_803E708(0x37,0x46); - PlaySoundEffect(0x1d5); - sub_803E708(0x1a,0x46); - PlaySoundEffect(0x1d5); - sub_803E708(0x1c,0x46); - DisplayDungeonDialogue(&gCelebiJoinDialogue_4); - sub_803E708(10,0x46); - sub_806FDF4(LeaderEntity,CelebiEntity,&CelebiEntity); - sub_8083E88(0x7f); - DisplayDungeonDialogue(&gCelebiJoinDialogue_5); - sub_803E708(10,0x46); - PlaySoundEffect(0x1c7); - sub_80861D4(CelebiEntity,0xd,0); - sub_803E708(0x37,0x46); - PlaySoundEffect(0x1d5); - sub_803E708(0x1a,0x46); - PlaySoundEffect(0x1d5); - sub_803E708(0x1b,0x46); - DisplayDungeonDialogue(&gCelebiJoinDialogue_6); - 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); - DisplayDungeonDialogue(&gCelebiJoinDialogue_7); - sub_80861F8(0x3e,CelebiEntity,1); - sub_803E708(0x18,0x46); - sub_80861F8(0x3e,CelebiEntity,1); - sub_803E708(0xe,0x46); - DisplayDungeonDialogue(&gCelebiJoinDialogue_8); - sub_803E708(10,0x46); - sub_808C8E0(CelebiEntity); - DisplayDungeonDialogue(&gCelebiJoinDialogue_9); - sub_803E708(10,0x46); - state = 2; - } - break; - } - } while (state != 2); - } - sub_8083ED8(0x1e); - sub_803E708(0x1e,0x46); - gDungeonGlobalData->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 xxx_call_GetLeaderEntity\n" - "\tadds r7, r0, 0\n" - "\tmovs r0, 0x1E\n" - "\tbl GetEntityFromClientType\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 SpriteLookAroundEffect\n" - "\tmovs r0, 0xA\n" - "\tmovs r1, 0x46\n" - "\tbl sub_803E708\n" - "\tldr r0, _0808C67C\n" - "\tbl DisplayDungeonDialogue\n" - "\tb _0808C8AC\n" - "\t.align 2, 0\n" -"_0808C67C: .4byte gCelebiJoinDialogue_10\n" -"_0808C680:\n" - "\tadds r0, r7, 0\n" - "\tbl SpriteLookAroundEffect\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 DisplayDungeonDialogue\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 DisplayDungeonDialogue\n" - "\tldr r4, _0808C724\n" - "\tadds r0, r4, 0\n" - "\tbl PlaySoundEffect\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 PlaySoundEffect\n" - "\tldr r0, [sp]\n" - "\tmovs r1, 0xA\n" - "\tmovs r2, 0\n" - "\tbl sub_806CDD4\n" - "\tldr r0, _0808C728\n" - "\tbl DisplayDungeonDialogue\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 gCelebiJoinDialogue_1\n" -"_0808C720: .4byte gCelebiJoinDialogue_2\n" -"_0808C724: .4byte 0x000001c7\n" -"_0808C728: .4byte gCelebiJoinDialogue_3\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 PlaySoundEffect\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 PlaySoundEffect\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 PlaySoundEffect\n" - "\tmovs r0, 0x1A\n" - "\tmovs r1, 0x46\n" - "\tbl sub_803E708\n" - "\tadds r0, r6, 0\n" - "\tbl PlaySoundEffect\n" - "\tmovs r0, 0x1C\n" - "\tmovs r1, 0x46\n" - "\tbl sub_803E708\n" - "\tldr r0, _0808C818\n" - "\tbl DisplayDungeonDialogue\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 DisplayDungeonDialogue\n" - "\tmovs r0, 0xA\n" - "\tmovs r1, 0x46\n" - "\tbl sub_803E708\n" - "\tmov r0, r8\n" - "\tbl PlaySoundEffect\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 PlaySoundEffect\n" - "\tmovs r0, 0x1A\n" - "\tmovs r1, 0x46\n" - "\tbl sub_803E708\n" - "\tadds r0, r6, 0\n" - "\tbl PlaySoundEffect\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 gCelebiJoinDialogue_4\n" -"_0808C81C: .4byte gCelebiJoinDialogue_5\n" -"_0808C820: .4byte gCelebiJoinDialogue_6\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 DisplayDungeonDialogue\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 DisplayDungeonDialogue\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 DisplayDungeonDialogue\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 gCelebiJoinDialogue_7\n" -"_0808C8D4: .4byte gCelebiJoinDialogue_8\n" -"_0808C8D8: .4byte gCelebiJoinDialogue_9\n" -"_0808C8DC: .4byte gDungeonGlobalData"); -} -#endif - -void sub_808C8E0(struct DungeonEntity *param_1) -{ - s32 iVar1; - - PlaySoundEffect(0x1a5); - sub_806CDD4(param_1, 0, DIRECTION_SOUTH); - for(iVar1 = 0; iVar1 < 16; iVar1++){ - param_1->entityData->unk174 = iVar1 * 256; - sub_803E46C(0x46); - } - for(iVar1 = 16; iVar1 < 200; iVar1 += 4){ - param_1->entityData->unk174 = iVar1 * 256; - sub_803E46C(0x46); - } - sub_8086A3C(param_1); -} - -void sub_808C938(void) -{ - sub_80855E4(sub_808C9B0); -} - -void sub_808C948(struct DungeonEntity *param_1, u8 param_2) -{ - bool8 flag; - s32 iVar3; - struct DungeonEntity *iVar2; - - if (param_2 == 0x37) { - flag = FALSE; - for(iVar3 = 0; iVar3 < DUNGEON_MAX_WILD_POKEMON; iVar3++){ - iVar2 = gDungeonGlobalData->wildPokemon[iVar3]; - if ((iVar2 != param_1) && (EntityExists(iVar2) != 0)) { - flag = TRUE; - break; - } - } - if (!flag) { - gDungeonGlobalData->unk2 = 1; - } - } -} - -void sub_808C998(void) -{ - // Defeat the opposing team to win - // Be careful, your opponents are tough - DisplayDungeonDialogue(&gUnknown_8106720); - sub_803E708(0xA, 0x46); -} - -void sub_808C9B0(struct DungeonEntity *param_1) -{ - param_1->entityData->action.facingDir = DIRECTION_NORTH; - sub_806CE68(param_1, DIRECTION_NORTH); -} - -void sub_808C9C4(void) -{ - struct DungeonEntity *LeaderEntity; - struct DungeonEntity *MedichamEntity; - - LeaderEntity = xxx_call_GetLeaderEntity(); - MedichamEntity = GetEntityFromClientType(7); - sub_8083E88(0x72); - sub_80854D4(); - sub_8085930(DIRECTION_NORTH); - sub_80855E4(sub_8086A3C); - SetFacingDirection(MedichamEntity, DIRECTION_SOUTH); - sub_8085860(LeaderEntity->posWorld.x, LeaderEntity->posWorld.y - 3); - CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_MEDICHAM); -} - -// Medicham Rescue Dialogue? -void MedichamRescueDialogue(void) -{ - struct DungeonEntity *MedichamEntity; - s32 counter; - - MedichamEntity = GetEntityFromClientType(7); - SpriteLookAroundEffect(MedichamEntity); - sub_803E708(0xA, 0x46); - // Oh my I can't seem to find a way out... - DisplayDungeonDialogue(&gMedichamRescueDialogue_1); - sub_803E708(0xA, 0x46); - sub_80869E4(MedichamEntity, 4, 2, 4); - sub_803E708(0xA, 0x46); - // What am I to do...? - DisplayDungeonDialogue(&gMedichamRescueDialogue_2); - sub_803E708(0xA, 0x46); - sub_8086448(); - sub_8086598(); - sub_803E708(0x20, 0x46); - sub_80862BC(MedichamEntity); - sub_803E708(0x20, 0x46); - sub_80869E4(MedichamEntity, 4, 2, 0); - DisplayDungeonDialogue(&gMedichamRescueDialogue_3); - sub_803E708(0xA, 0x46); - PlaySoundEffect(0x1c7); - sub_806CDD4(MedichamEntity, 0xA, DIRECTION_SOUTH); - sub_803E708(0x14, 0x46); - sub_806CE68(MedichamEntity, DIRECTION_SOUTH); - sub_803E708(0x4, 0x46); - PlaySoundEffect(0x1c7); - sub_806CDD4(MedichamEntity, 0xA, DIRECTION_SOUTH); - sub_803E708(0x14, 0x46); - // Yes Yes - // I am so lucky - // - // There appears to be no one here - DisplayDungeonDialogue(&gMedichamRescueDialogue_4); - sub_803E708(0xA, 0x46); - sub_806CDD4(MedichamEntity, 0, DIRECTION_SOUTH); - for(counter = 0x17; counter >= 0; counter--) - { - sub_804539C(MedichamEntity, 0, 0x80 << 1); - sub_803E46C(0x46); - } - sub_806CE68(MedichamEntity, DIRECTION_SOUTH); - sub_803E708(0x20, 0x46); - sub_8042B0C(MedichamEntity); - sub_8068FE0(MedichamEntity, 0x21C, 0); - gDungeonGlobalData->unk4 = 1; - gDungeonGlobalData->unk11 = 4; -} - -void sub_808CB5C(void) -{ - struct DungeonEntity *LeaderEntity; - struct DungeonEntity *MedichamEntity; - - LeaderEntity = xxx_call_GetLeaderEntity(); - MedichamEntity = GetEntityFromClientType(7); - sub_8083E88(0x72); - sub_80854D4(); - sub_8085930(DIRECTION_NORTH); - sub_8068FE0(MedichamEntity, 0x21C, 0); - sub_8085860(LeaderEntity->posWorld.x, LeaderEntity->posWorld.y); - CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_MEDICHAM); -} - -void DummyFightDialogue(void) -{ -} - -void sub_808CBB0(void) -{ - struct DungeonEntity *LeaderEntity; - struct DungeonEntity *SmeargleEntity; - - LeaderEntity = xxx_call_GetLeaderEntity(); - SmeargleEntity = GetEntityFromClientType(0x1F); - sub_8083E88(0x72); - sub_80854D4(); - sub_8085930(DIRECTION_NORTH); - sub_80855E4(sub_8086A3C); - SetFacingDirection(SmeargleEntity, DIRECTION_SOUTH); - sub_8085860(LeaderEntity->posWorld.x, LeaderEntity->posWorld.y - 3); - CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SMEARGLE); -} - -// Smeargle Rescue dialogue scene -void SmeargleRescueDialogue(void) -{ - struct DungeonEntity *SmeargleEntity; - s32 counter; - - SmeargleEntity = GetEntityFromClientType(0x1F); - SpriteLookAroundEffect(SmeargleEntity); - sub_803E708(0xA, 0x46); - // Ohhh... - // I've lost my bearings - DisplayDungeonDialogue(&gSmeargleRescueDialogue_1); - sub_803E708(0xA, 0x46); - sub_80869E4(SmeargleEntity, 4, 2, 4); - sub_803E708(0xA, 0x46); - // I can't get out... - // I'm hungry... - // I'm in trouble - DisplayDungeonDialogue(&gSmeargleRescueDialogue_2); - sub_803E708(0xA, 0x46); - sub_8086448(); - sub_8086598(); - sub_803E708(0x20, 0x46); - sub_80862BC(SmeargleEntity); - sub_803E708(0x20, 0x46); - sub_80869E4(SmeargleEntity, 4, 2, 0); - // Oh! You are? - DisplayDungeonDialogue(&gSmeargleRescueDialogue_3); - sub_803E708(0xA, 0x46); - PlaySoundEffect(0x1c7); - sub_806CDD4(SmeargleEntity, 0xA, DIRECTION_SOUTH); - sub_803E708(0x14, 0x46); - sub_806CE68(SmeargleEntity, DIRECTION_SOUTH); - sub_803E708(0x4, 0x46); - PlaySoundEffect(0x1c7); - sub_806CDD4(SmeargleEntity, 0xA, DIRECTION_SOUTH); - sub_803E708(0x14, 0x46); - // Did you maybe come to rescue me? - // Am I glad to see you - DisplayDungeonDialogue(&gSmeargleRescueDialogue_4); - sub_803E708(0xA, 0x46); - sub_806CDD4(SmeargleEntity, 0, DIRECTION_SOUTH); - for(counter = 0x17; counter >= 0; counter--) - { - sub_804539C(SmeargleEntity, 0, 0x80 << 1); - sub_803E46C(0x46); - } - sub_806CE68(SmeargleEntity, DIRECTION_SOUTH); - sub_803E708(0x20, 0x46); - sub_8042B0C(SmeargleEntity); - sub_8068FE0(SmeargleEntity, 0x21C, 0); - gDungeonGlobalData->unk4 = 1; - gDungeonGlobalData->unk11 = 4; - -} - -void sub_808CD44(void) -{ - struct DungeonEntity *LeaderEntity; - struct DungeonEntity *SmeargleEntity; - - LeaderEntity = xxx_call_GetLeaderEntity(); - SmeargleEntity = GetEntityFromClientType(0x1F); - sub_8083E88(0x72); - sub_80854D4(); - sub_8085930(DIRECTION_NORTH); - sub_80855E4(sub_8086A3C); - sub_8068FE0(SmeargleEntity, 0x21C, 0); - sub_8085860(LeaderEntity->posWorld.x, LeaderEntity->posWorld.y - 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_1.c b/src/code_8057824_1.c index 933c0015b..df1e4153a 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -246,9 +246,135 @@ extern u32 gUnknown_8105B68; extern u32 gUnknown_8105BA8; extern u8 *gUnknown_8105798[]; extern u32 gJirachiReFightDialogue_1; +extern u32 gUnknown_202EDC8; + +extern u32 gKyogrePreFightDialogue_8; +extern u32 gKyogrePreFightDialogue_1; +extern u32 gKyogrePreFightDialogue_2; +extern u32 gKyogrePreFightDialogue_3; +extern u32 gKyogrePreFightDialogue_4; +extern u32 gKyogrePreFightDialogue_5; +extern u32 gKyogrePreFightDialogue_6; +extern u32 gKyogrePreFightDialogue_7; +extern u32 gUnknown_810697C; +extern u64 gUnknown_8107544[]; +extern u32 gMedichamRescueDialogue_1; +extern u32 gMedichamRescueDialogue_2; +extern u32 gMedichamRescueDialogue_3; +extern u32 gMedichamRescueDialogue_4; +extern u32 gSmeargleRescueDialogue_1; +extern u32 gSmeargleRescueDialogue_2; +extern u32 gSmeargleRescueDialogue_3; +extern u32 gSmeargleRescueDialogue_4; +extern u32 gUnknown_8106720; + +extern u32 gCelebiJoinDialogue_10; +extern u32 gCelebiJoinDialogue_1; +extern u32 gCelebiJoinDialogue_2; +extern u32 gCelebiJoinDialogue_3; +extern u32 gCelebiJoinDialogue_4; +extern u32 gCelebiJoinDialogue_5; +extern u32 gCelebiJoinDialogue_6; +extern u32 gCelebiJoinDialogue_7; +extern u32 gCelebiJoinDialogue_8; +extern u32 gCelebiJoinDialogue_9; +extern u32 *gPtrPurityForestAllowCelebiToJoinText; +extern u32 gPurityForestAllowCelebiToJoinPrompt; +extern u32 *gPtrPurityForestRefuseCelebiConfirmText; +extern u32 gPurityForestRefuseCelebiConfirmPrompt; +extern u32 gDeoxysPreFightDialogue_1; +extern u32 gDeoxysPreFightDialogue_2; +extern u32 gDeoxysPreFightDialogue_3; +extern u32 gDeoxysPreFightDialogue_4; +extern u32 gDeoxysPreFightDialogue_5; +extern u32 gLugiaPreFightDialogue_8; +extern u32 gLugiaPreFightDialogue_1; +extern u32 gLugiaPreFightDialogue_2; +extern u32 gLugiaPreFightDialogue_3; +extern u32 gLugiaPreFightDialogue_4; +extern u32 gLugiaPreFightDialogue_5; +extern u32 gLugiaPreFightDialogue_6; +extern u32 gLugiaPreFightDialogue_7; +extern u32 gZapdosReFightDialogue_1; +extern u32 gUnknown_81015A0; +extern u32 gZapdosReFightDialogue_2; +extern u32 gZapdosReFightDialogue_3; +extern u32 gZapdosReFightDialogue_4; + +extern u32 gUnknown_81058C4; +extern u32 gUnknown_81058A8; extern u8 gUnknown_81074FC[]; +extern u8 sub_800E9A8(u32); +extern void sub_800DC14(u32); + +extern void sub_8086A3C(struct DungeonEntity *r0); +extern void sub_8083E88(u32); +extern void sub_80854D4(void); +extern void sub_80855E4(void *); +extern void sub_8085930(u32); +extern void sub_8068FE0(struct DungeonEntity *, u32, u32); +extern void sub_8085860(s32 r0, u32 r1); +extern void sub_8083EA8(u32, u32); + +extern void sub_803E708(u32, u32); +extern void sub_8086448(void); +extern void sub_8086598(void); +extern void SpriteLookAroundEffect(struct DungeonEntity *); +extern void SpriteShockEffect(struct DungeonEntity *); +extern void PlaySoundEffect(u32); +extern void sub_806CDD4(struct DungeonEntity *, u32, u32); +extern void sub_80869E4(struct DungeonEntity *, u32, u32, u32); +extern void sub_806CE68(struct DungeonEntity *, u32); +extern void sub_804539C(struct DungeonEntity *, u32, u32); +extern void sub_8042B0C(struct DungeonEntity *); +extern void SetFacingDirection(struct DungeonEntity *, u32); +extern void DisplayDungeonDialogue(u32 *); +extern void sub_803E708(u32, u32); +extern u8 HasRecruitedMon(u32); +extern u8 sub_806FD18(struct DungeonEntity *); +extern u8 sub_8083E74(u32); +extern void sub_8083F14(); +extern void sub_80861D4(struct DungeonEntity *, u32, u32); +extern void sub_806FDF4(struct DungeonEntity *, struct DungeonEntity *, struct DungeonEntity **); +extern u32 sub_80861F8(u32, struct DungeonEntity *, u32); +extern void sub_8083ED8(u32); +extern s32 GetCameraXPos(); +extern s32 GetCameraYPos(); +extern void sub_803F878(u32, s32); +extern void SetupBossFightHP(struct DungeonEntity *, u32, u32); +extern void sub_803E9D0(void); +extern void DeoxysScreenFlash(void); +extern void sub_8085EB0(); +extern void sub_808563C(void *); + +void SetupDeoxysFightHP(struct DungeonEntity *r0); +void sub_808C550(void); +void sub_808C590(struct DungeonEntity *r0); +void SetupDeoxysFacingDirection(struct DungeonEntity *r0); +void sub_808C9B0(); +void sub_808C8E0(struct DungeonEntity *param_1); +void sub_808C360(void); +void KyogreScreenFlash(); + +void sub_808C0CC(); +void LugiaScreenFlash(); +void LugiaScreenFlash2(); +extern void sub_80861B8(struct DungeonEntity *, u32, u32); + +void nullsub_99(); +extern bool8 *gFriendAreas; + +extern void sub_8049884(); +extern void sub_8049B8C(); +extern void sub_8049ED4(); +extern void sub_8040A84(); +extern void sub_8086A54(struct DungeonEntity *); + +extern void sub_806BFC0(struct DungeonEntityData *, u32); + + extern struct DungeonEntity *xxx_call_GetLeaderEntity(void); extern struct DungeonEntity *GetEntityFromClientType(u32); extern void sub_808BBA8(struct DungeonEntity * ); @@ -259,28 +385,21 @@ extern void sub_8083ED8(u32); extern void sub_803E708(u32, u32); extern void DisplayDungeonDialogue(u32 *r0); extern void sub_8083E88(u32); -extern void JirachiSpinEffect(struct DungeonEntity *); -extern void JirachiWishGrantDialogue(struct DungeonEntity *jirachiEntity); -extern void sub_80862BC(struct DungeonEntity *); -extern void sub_8086448(); -extern void SpriteLookAroundEffect(struct DungeonEntity *); +extern void SpriteShockEffect(struct DungeonEntity *); extern u32 sub_80861F8(u32, struct DungeonEntity *, u32); -extern void SetupBossFightHP(struct DungeonEntity *, u32, u32); extern void sub_8097FA8(u32); + extern void JirachiWish(); +extern void JirachiSpinEffect(struct DungeonEntity *); +extern void JirachiWishGrantDialogue(struct DungeonEntity *jirachiEntity); +extern void JirachiWishGrantFlash(); +extern void JirachiDropInEffect(struct DungeonEntity *param_1); +extern u8 JirachiFriendAreaSearch(void); + extern u8 sub_80860A8(u32); -extern void sub_8040A84(); -extern void sub_8086A3C(struct DungeonEntity *); -extern u8 HasRecruitedMon(u32); -extern void sub_80854D4(); -extern void sub_8085930(u32); -extern void sub_8068FE0(struct DungeonEntity *, u32, u32); -extern void SetFacingDirection(struct DungeonEntity *, u32); extern void sub_8049ED4(); -extern void sub_8085860(s32 r0, u32 r1); -extern void sub_806CE68(struct DungeonEntity *, u32); extern void sub_8092578(u8 *buffer, u8 index, u8 r2); extern void sub_8052D44(u8 *, struct DungeonEntity *, struct DungeonEntity *); extern void sub_8097FD0(u32); @@ -291,10 +410,8 @@ extern void sub_8046D20(); extern void sub_808B1CC(u8); extern void sub_80464C8(struct DungeonEntity *, u32 *, struct ItemSlot *); extern void sub_8098044(u32); -extern void PlaySoundEffect(u32); extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32); extern void sub_803E46C(u32); -extern void sub_8085EB0(); extern void sub_80866C4(u32 *); extern void sub_808692C(); @@ -310,9 +427,7 @@ 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 JirachiDropInEffect(struct DungeonEntity *param_1); extern u8 sub_8098100(u32); extern void sub_8086794(); @@ -320,7 +435,7 @@ void EnteiScreenFlash(void); void RaikouScreenFlash(void); void sub_808A528(struct DungeonEntity * param_1); void SuicuneScreenFlash(); -void sub_808A904(struct DungeonEntity * param_1); +void HoOhDropInEffect(struct DungeonEntity * param_1); void HoOhScreenFlash(void); void LatiosScreenFlash(void); void SetupRegiFacingDirection(struct DungeonEntity *r0); @@ -328,18 +443,14 @@ void SetupRegirockFightHP(struct DungeonEntity *r0); void SetupRegiceFightHP(struct DungeonEntity *r0); void SetupRegisteelFightHP(struct DungeonEntity *r0); void sub_808B50C(void); -void sub_8089B64(struct DungeonEntity *param_1); +void MewtwoDropInEffect(struct DungeonEntity *param_1); void MewtwoScreenFlash(void); void sub_80898F8(struct DungeonEntity *r0); void sub_8089908(struct DungeonEntity *r0); -void sub_8089620(struct DungeonEntity *param_1); +void RayquazaDropInEffect(struct DungeonEntity *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 GroudonScreenFlash2(void); extern void sub_8083F14(); @@ -385,19 +496,13 @@ extern void sub_8086500(void); extern void sub_8086690(void); void MoltresScreenDarken(void); extern void sub_808663C(void); -void sub_8087704(struct DungeonEntity *param_1); +void ZapdosDropInEffect(struct DungeonEntity *param_1); void ZapdosScreenFlash(int param_1); -extern u32 gZapdosReFightDialogue_1; -extern u32 gUnknown_81015A0; -extern u32 gZapdosReFightDialogue_2; -extern u32 gZapdosReFightDialogue_3; -extern u32 gZapdosReFightDialogue_4; extern s32 sub_8052C68(u32, u8 *, u32 *, u32); extern void sub_80861A8(void); extern void sub_8045C28(struct ItemSlot *, u8 , u8 *); extern void sub_808BD38(void); -extern u8 JirachiFriendAreaSearch(void); extern void sub_808BB3C(s16 *); extern void sub_8046860(struct DungeonEntity *, s32 *, struct ItemSlot *, u32); extern u32 sub_803D73C(u32); @@ -416,7 +521,7 @@ void ZapdosReFightDialogue(void) PlaySoundEffect(0x1da); DisplayDungeonDialogue(&gUnknown_81015A0); sub_803E708(10,0x46); - sub_8087704(ZapdosEntity); + ZapdosDropInEffect(ZapdosEntity); sub_803E708(10,0x46); DisplayDungeonDialogue(&gZapdosReFightDialogue_2); ZapdosScreenFlash(1); @@ -442,7 +547,7 @@ void ZapdosPostStoryPreFightDialogue(void) ZapdosScreenFlash(1); PlaySoundEffect(0x1da); DisplayDungeonDialogue(&gZapdosPostStoryPreFightDialogue_1); - sub_8087704(ZapdosEntity); + ZapdosDropInEffect(ZapdosEntity); DisplayDungeonDialogue(&gZapdosPostStoryPreFightDialogue_2); ZapdosScreenFlash(1); DisplayDungeonDialogue(&gZapdosPostStoryPreFightDialogue_3); @@ -457,17 +562,17 @@ void ZapdosPostStoryPreFightDialogue(void) } -void sub_8087704(struct DungeonEntity *param_1) +void ZapdosDropInEffect(struct DungeonEntity *zapdosEntity) { int iVar1; - param_1->entityData->unk15C = 1; - param_1->entityData->unk15E = 0; - param_1->entityData->unk174 = 200; + zapdosEntity->entityData->unk15C = 1; + zapdosEntity->entityData->unk15E = 0; + zapdosEntity->entityData->unk174 = 200; PlaySoundEffect(0x1ea); for(iVar1 = 200; iVar1 >= 0; iVar1 -= 5) { - param_1->entityData->unk174 = iVar1 * 256; + zapdosEntity->entityData->unk174 = iVar1 * 256; sub_803E46C(0x46); } sub_803E708(0x1e,0x46); @@ -715,17 +820,17 @@ void MoltresPostStoryPreFightDialogue(void) } } -void MoltresDropInEffect(struct DungeonEntity * param_1) +void MoltresDropInEffect(struct DungeonEntity * moltresEntity) { s32 iVar1; - param_1->entityData->unk15C = 1; - param_1->entityData->unk15E = 0; - param_1->entityData->unk174 = 0xc800; + moltresEntity->entityData->unk15C = 1; + moltresEntity->entityData->unk15E = 0; + moltresEntity->entityData->unk174 = 0xc800; PlaySoundEffect(0x1f8); for(iVar1 = 200; iVar1 >= 0; iVar1 -= 5) { - param_1->entityData->unk174 = iVar1 * 256; + moltresEntity->entityData->unk174 = iVar1 * 256; sub_803E46C(0x46); } } @@ -1872,7 +1977,7 @@ void RayquazaPreFightDialogue(void) RayquazaScreenFlash(); PlaySoundEffect(0x1da); // Rayquaza Cry DisplayDungeonDialogue(&gRayquazaPreFightDialogue_7); - sub_8089620(RayquazaEntity); + RayquazaDropInEffect(RayquazaEntity); DisplayDungeonDialogue(&gRayquazaPreFightDialogue_8); RayquazaScreenFlash(); DisplayDungeonDialogue(&gRayquazaPreFightDialogue_9); @@ -1896,7 +2001,7 @@ void RayquazaReFightDialogue(void) PlaySoundEffect(0x1da); // Rayquaza Cry DisplayDungeonDialogue(&gRayquazaPreFightDialogue_7); sub_803E708(10,0x46); - sub_8089620(RayquazaEntity); + RayquazaDropInEffect(RayquazaEntity); DisplayDungeonDialogue(&gRayquazaReFightDialogue_1); RayquazaScreenFlash(); DisplayDungeonDialogue(&gRayquazaReFightDialogue_2); @@ -1922,7 +2027,7 @@ void RayquazaPostStoryPreFightDialogue(void) else { PlaySoundEffect(0x1da); // Rayquaza Cry DisplayDungeonDialogue(&gRayquazaPostStoryPreFightDialogue_1); - sub_8089620(RayquazaEntity); + RayquazaDropInEffect(RayquazaEntity); DisplayDungeonDialogue(&gRayquazaPostStoryPreFightDialogue_2); RayquazaScreenFlash(); DisplayDungeonDialogue(&gRayquazaPostStoryPreFightDialogue_3); @@ -1935,12 +2040,12 @@ void RayquazaPostStoryPreFightDialogue(void) } } -void sub_8089620(struct DungeonEntity *param_1) +void RayquazaDropInEffect(struct DungeonEntity *rayquazaEntity) { s32 iVar1; s32 iVar2; - param_1->entityData->unk15E = 0; + rayquazaEntity->entityData->unk15E = 0; iVar2 = 51200; iVar1 = 0x600; PlaySoundEffect(0x1f8); @@ -1951,10 +2056,10 @@ void sub_8089620(struct DungeonEntity *param_1) iVar1 = 0x14; } if (iVar2 < 0) break; - param_1->entityData->unk174 = iVar2; + rayquazaEntity->entityData->unk174 = iVar2; sub_803E46C(0x46); } - param_1->entityData->unk174 = 0; + rayquazaEntity->entityData->unk174 = 0; } void RayquazaScreenFlash(void) @@ -2040,7 +2145,7 @@ void sub_80897F0(void) LeaderEntity = xxx_call_GetLeaderEntity(); sub_8086448(); sub_803E708(10,0x46); - sub_808563C(sub_80862BC); + sub_808563C(SpriteShockEffect); sub_803E708(0x20,0x46); sub_808692C(); DisplayDungeonDialogue(&gUnknown_8103BD8); @@ -2077,7 +2182,7 @@ void sub_8089878(void) LeaderEntity = xxx_call_GetLeaderEntity(); sub_8086448(); sub_803E708(10,0x46); - sub_808563C(sub_80862BC); + sub_808563C(SpriteShockEffect); sub_803E708(0x20,0x46); sub_808692C(); DisplayDungeonDialogue(&gUnknown_8103D8C); @@ -2167,7 +2272,7 @@ void MewtwoPreFightDialogue(void) sub_8083E88(0x23); sub_8086794(); sub_803E708(0x1e,0x46); - sub_8089B64(MewtwoEntity); + MewtwoDropInEffect(MewtwoEntity); sub_803E708(0x3c,0x46); DisplayDungeonDialogue(&gMewtwoPreFightDialogue_2); DisplayDungeonDialogue(&gMewtwoPreFightDialogue_3); @@ -2196,7 +2301,7 @@ void MewtwoReFightDialogue(void) DisplayDungeonDialogue(&gMewtwoReFightDialogue_1); sub_8083E88(0x23); sub_8086794(); - sub_8089B64(MewtwoEntity); + MewtwoDropInEffect(MewtwoEntity); sub_803E708(0x3c,0x46); DisplayDungeonDialogue(&gMewtwoReFightDialogue_2); MewtwoScreenFlash(); @@ -2208,26 +2313,26 @@ void MewtwoReFightDialogue(void) } } -void sub_8089B64(struct DungeonEntity *param_1) +void MewtwoDropInEffect(struct DungeonEntity *mewtwoEntity) { s32 iVar1; s32 iVar2; - param_1->entityData->unk15E = 0; + mewtwoEntity->entityData->unk15E = 0; iVar2 = 51200; iVar1 = 0x400; PlaySoundEffect(0x1f8); while( 1 ) { iVar2 = iVar2 - iVar1; - iVar1 = iVar1 -= 11; + iVar1 -= 11; if (iVar1 < 0x1e) { iVar1 = 0x1e; } if (iVar2 < 0) break; - param_1->entityData->unk174 = iVar2; + mewtwoEntity->entityData->unk174 = iVar2; sub_803E46C(0x46); } - param_1->entityData->unk174 = 0; + mewtwoEntity->entityData->unk174 = 0; } void MewtwoScreenFlash(void) @@ -2794,7 +2899,7 @@ void HoOhPreFightDialogue(void) sub_808680C(); PlaySoundEffect(0x1c5); sub_803E708(0xfa,70); - sub_808A904(HoOhEntity); + HoOhDropInEffect(HoOhEntity); sub_8083E58(0x1c5); sub_808682C(); sub_80855E4(sub_8086910); @@ -2834,7 +2939,7 @@ void HoOhReFightDialogue(void) sub_80855E4(sub_80868F4); sub_808680C(); sub_803E708(10,70); - sub_808A904(HoOhEntity); + HoOhDropInEffect(HoOhEntity); sub_808682C(); sub_80855E4(sub_8086910); sub_8085930(DIRECTION_NORTH); @@ -2849,7 +2954,7 @@ void HoOhReFightDialogue(void) } } -void sub_808A904(struct DungeonEntity * param_1) +void HoOhDropInEffect(struct DungeonEntity * param_1) { s32 iVar1; s32 iVar2; @@ -2972,7 +3077,7 @@ void LatiosPreFightDialogue(void) sub_8086448(); ShiftCameraToPosition(&local_18,0x18); sub_803E708(2,70); - sub_80862BC(LatiosEntity); + SpriteShockEffect(LatiosEntity); sub_803E708(0x20,70); sub_808692C(); DisplayDungeonDialogue(&gLatiosPreFightDialogue_1); @@ -3383,10 +3488,10 @@ void sub_808B1CC(u8 r0) } -void SetupRegiFacingDirection(struct DungeonEntity *r0) +void SetupRegiFacingDirection(struct DungeonEntity *regiEntity) { - r0->entityData->action.facingDir = DIRECTION_NORTH; - sub_806CE68(r0, DIRECTION_NORTH); + regiEntity->entityData->action.facingDir = DIRECTION_NORTH; + sub_806CE68(regiEntity, DIRECTION_NORTH); } @@ -3555,7 +3660,7 @@ void JirachiPreFightDialogue(void) sub_803E708(10,70); DisplayDungeonDialogue(&gJirachiPreFightDialogue_2); sub_80861F8(0x37,JirachiEntity,1); - sub_80855E4(sub_80862BC); + sub_80855E4(SpriteShockEffect); sub_803E708(0x3c,70); JirachiDropInEffect(JirachiEntity); sub_803E708(0x5a,70); @@ -3631,7 +3736,7 @@ void JirachiWish(void) sub_803E708(10,0x46); PlaySoundEffect(0x1a7); sub_803E708(0x96,0x46); - sub_80862BC(JirachiEntity); + SpriteShockEffect(JirachiEntity); DisplayDungeonDialogue(&gUnknown_8105674); sub_8083E88(0x79); sub_803E708(10,0x46); @@ -3871,3 +3976,1168 @@ void sub_808BB3C(s16 *param_1) local_8 = (iVar1) | (uVar2 & 0x0000ffff); sub_8085EC8(100,0,0,&local_8,0); } + +void sub_808BBA8(struct DungeonEntity *jirachiEntity) +{ + sub_806BFC0(jirachiEntity->entityData,0); +} + +void JirachiDropInEffect(struct DungeonEntity *jirachiEntity) +{ + s32 iVar1; + s32 iVar2; + + sub_80861F8(0x1b,jirachiEntity,0); + sub_8086A54(jirachiEntity); + sub_80861B8(jirachiEntity,0xe,0); + iVar1 = 0xa000; + iVar2 = 0x200; + PlaySoundEffect(0x1f8); + while( 1 ) { + iVar1 = iVar1 - iVar2; + if (iVar1 < 0x1800) { + iVar2 = 0x100; + } + if (iVar1 < 0) break; + jirachiEntity->entityData->unk174 = iVar1; + sub_803E46C(0x46); + } + jirachiEntity->entityData->unk174 = 0; +} + +void JirachiSpinEffect(struct DungeonEntity * jirachiEntity) +{ + s32 uVar1; + + PlaySoundEffect(0x298); + for(uVar1 = 0; uVar1 < 25; uVar1++){ + SetFacingDirection(jirachiEntity, uVar1 & DIRECTION_MASK); + sub_803E708(3,0x46); + } + jirachiEntity->entityData->unk15E = 1; + PlaySoundEffect(0x27f); + sub_80861F8(99,jirachiEntity,1); +} + +void JirachiWishGrantDialogue(struct DungeonEntity *jirachiEntity) +{ + u32 uVar2; + + jirachiEntity->entityData->unk15D = 1; + // Nnnnnnnnnn! + DisplayDungeonDialogue(&gUnknown_81058A8); + PlaySoundEffect(0x375); + sub_80861F8(0x67,jirachiEntity,1); + PlaySoundEffect(0x2a8); + uVar2 = sub_80861F8(0x68,jirachiEntity,0); + // Taaaaaaaah! + DisplayDungeonDialogue(&gUnknown_81058C4); + if (sub_800E9A8(uVar2) != 0) { + sub_800DC14(uVar2); + } + sub_803E708(10,0x46); + JirachiWishGrantFlash(); +} + +void sub_808BCE4(void) +{ + struct MapTile *puVar1; + + puVar1 = GetMapTile_2(gDungeonGlobalData->unkE23C, gDungeonGlobalData->unkE23E); + puVar1->tileType &= ~(TILE_TYPE_FLOOR | TILE_TYPE_LIQUID); + puVar1->tileType |= TILE_TYPE_MAP_EDGE; + puVar1->tileType &= ~TILE_TYPE_STAIRS; + sub_8049884(); + sub_8049B8C(); + sub_8049ED4(); + sub_8040A84(); +} + +void sub_808BD38(void) +{ + struct MapTile *puVar1; + + puVar1 = GetMapTile_2(gDungeonGlobalData->unkE23C, gDungeonGlobalData->unkE23E); + puVar1->tileType &= ~(TILE_TYPE_FLOOR | TILE_TYPE_LIQUID); + puVar1->tileType |= TILE_TYPE_FLOOR; + puVar1->tileType &= ~TILE_TYPE_MAP_EDGE; + puVar1->tileType |= TILE_TYPE_STAIRS; + 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]) { + friendAreas[numUnlockableAreas] = friendAreaCounter; + numUnlockableAreas++; + } + } + } + } + + if (numUnlockableAreas == 0) { + return NUM_FRIEND_AREAS; + } + else { + // Randomly pick 1 + friendAreaIndex = DungeonRandomCapped(numUnlockableAreas); + return friendAreas[friendAreaIndex]; + } +} + +void sub_808BDEC(void) +{ + struct DungeonEntity * LeaderEntity; + struct DungeonEntity * LugiaEntity; + + LeaderEntity = xxx_call_GetLeaderEntity(); + LugiaEntity = GetEntityFromClientType(0x1b); + sub_8083F14(); + sub_80854D4(); + sub_8085930(DIRECTION_NORTH); + sub_80855E4(sub_8086A3C); + if (HasRecruitedMon(SPECIES_LUGIA)) { + sub_8083E88(0x23); + sub_8068FE0(LugiaEntity,0x21c,0); + } + else { + gDungeonGlobalData->unk7 = 1; + SetFacingDirection(LugiaEntity, DIRECTION_SOUTH); + } + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); + CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_LUGIA); +} + +void sub_808BE70(u8 param_1,u8 param_2) +{ + if ((param_2 == 0x33) && (param_1 == 0x1B)) { + gDungeonGlobalData->unk2 = 1; + } +} + + +void LugiaPreFightDialogue(void) +{ + struct DungeonEntity * LeaderEntity; + struct DungeonEntity * LugiaEntity; + + LeaderEntity = xxx_call_GetLeaderEntity(); + LugiaEntity = GetEntityFromClientType(0x1b); + if (HasRecruitedMon(SPECIES_LUGIA)) { + sub_8086448(); + sub_80866C4(&gLugiaPreFightDialogue_8); + } + else { + sub_8083F14(); + sub_8086448(); + DisplayDungeonDialogue(&gLugiaPreFightDialogue_1); + sub_8083EA8(0x23,0x3c); + sub_808C0CC(); + DisplayDungeonDialogue(&gLugiaPreFightDialogue_2); + LugiaScreenFlash(); + DisplayDungeonDialogue(&gLugiaPreFightDialogue_3); + sub_803E708(10,0x46); + DisplayDungeonDialogue(&gLugiaPreFightDialogue_4); + PlaySoundEffect(0x1f8); + sub_80861D4(LugiaEntity,0xd,0); + sub_803E708(0x2b,0x46); + sub_80861B8(LugiaEntity,0,0); + DisplayDungeonDialogue(&gLugiaPreFightDialogue_5); + LugiaScreenFlash(); + DisplayDungeonDialogue(&gLugiaPreFightDialogue_6); + LugiaScreenFlash2(); + SetDungeonBGColorRGB(0xffffff06,0xffffff06,0xffffff06,1,0); + sub_8083F14(); + sub_80861D4(LugiaEntity,7,0); + DisplayDungeonDialogue(&gLugiaPreFightDialogue_7); + LugiaScreenFlash(); + SetupBossFightHP(LugiaEntity,800,0x20); + sub_8083E88(0x23); + ShiftCameraToPosition(&LeaderEntity->posPixel,0x10); + } +} + +void LugiaScreenFlash(void) +{ + s32 iVar1; + + PlaySoundEffect(0x1f6); + for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){ + SetDungeonBGColorRGB(0,0,iVar1,1,1); + sub_803E46C(0x46); + } + sub_803E708(10,0x46); + for(iVar1 = 250; iVar1 > 199; iVar1 -= 10){ + SetDungeonBGColorRGB(0,iVar1,iVar1,1,1); + sub_803E46C(0x46); + } + sub_803E708(10,0x46); + for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10){ + SetDungeonBGColorRGB(0,0,iVar1,1,1); + sub_803E46C(0x46); + } + sub_803E708(10,0x46); + sub_8085EB0(); +} + +void LugiaScreenFlash2(void) +{ + s32 iVar1; + + PlaySoundEffect(0x1f6); + + for(iVar1 = 0; iVar1 < 200; iVar1 += 100){ + SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,0); + sub_803E46C(0x46); + } + + for(iVar1 = 200; iVar1 >= 0; iVar1 -= 100){ + SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,0); + sub_803E46C(0x46); + } + + sub_803E708(4,0x46); + + for(iVar1 = 0; iVar1 < 200; iVar1 += 100){ + SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,0); + sub_803E46C(0x46); + } + + for(iVar1 = 200; iVar1 >= 0; iVar1 -= 100){ + SetDungeonBGColorRGB(iVar1,iVar1,iVar1,1,0); + sub_803E46C(0x46); + } + + sub_803E708(10,0x46); + sub_8085EB0(); +} + +void sub_808C0CC(void) +{ + gUnknown_202EDC8 = 0x1f; + SetDungeonBGColorRGB(0,0,0,1,1); + sub_803E9D0(); + sub_803E46C(0x46); + gDungeonGlobalData->unk7 = 0; + LugiaScreenFlash(); +} + +void sub_808C10C(void) +{ + struct DungeonEntity * LeaderEntity; + struct DungeonEntity * KyogreEntity; + + u32 uVar3; + s32 iVar2; + + LeaderEntity = xxx_call_GetLeaderEntity(); + KyogreEntity = GetEntityFromClientType(0x1c); + sub_8083F14(); + sub_80854D4(); + sub_8085930(DIRECTION_NORTH); + if (HasRecruitedMon(SPECIES_KYOGRE)) { + sub_8068FE0(KyogreEntity,0x21c,0); + } + else { + gDungeonGlobalData->unk7 = 1; + SetFacingDirection(KyogreEntity, DIRECTION_SOUTH); + } + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); + uVar3 = GetCameraXPos(); + iVar2 = GetCameraYPos(); + 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)) { + gDungeonGlobalData->unk2 = 1; + sub_8083E88(0x23); + } +} + +void KyogrePreFightDialogue(void) +{ + struct DungeonEntity *LeaderEntity; + struct DungeonEntity *KyogreEntity; + + LeaderEntity = xxx_call_GetLeaderEntity(); + KyogreEntity = GetEntityFromClientType(0x1c); + sub_8083F14(); + if (HasRecruitedMon(SPECIES_KYOGRE)) { + sub_8083EA8(0x23,0x3c); + SpriteLookAroundEffect(LeaderEntity); + sub_803E708(10,0x46); + DisplayDungeonDialogue(&gKyogrePreFightDialogue_8); + sub_803E708(10,0x46); + gDungeonGlobalData->unk2 = 1; + } + else { + DisplayDungeonDialogue(&gKyogrePreFightDialogue_1); + sub_803E708(10,0x46); + DisplayDungeonDialogue(&gKyogrePreFightDialogue_2); + sub_803E708(10,0x46); + nullsub_99(); + sub_803E708(10,0x46); + // Gwwwwwooooooooh + DisplayDungeonDialogue(&gKyogrePreFightDialogue_3); + sub_803E708(10,0x46); + sub_8083EA8(0x23,0x3c); + sub_808C360(); + // My duels against {ARG_POKEMON_3} (Groudon) left us both exhausted + DisplayDungeonDialogue(&gKyogrePreFightDialogue_4); + KyogreScreenFlash(); + // I am {ARG_POKEMON_2} (Kyogre)! + // The lord of the sea! + DisplayDungeonDialogue(&gKyogrePreFightDialogue_5); + KyogreScreenFlash(); + // Witness the destructive force of my waves! + DisplayDungeonDialogue(&gKyogrePreFightDialogue_6); + KyogreScreenFlash(); + // Marvel at my awesome + // power! + DisplayDungeonDialogue(&gKyogrePreFightDialogue_7); + sub_803E708(10,0x46); + SetupBossFightHP(KyogreEntity,600,0xb); + sub_8083E88(0x23); + ShiftCameraToPosition(&LeaderEntity->posPixel,0x10); + } +} + +void nullsub_99(void) +{ +} + +void KyogreScreenFlash(void) +{ + s32 iVar1; + + PlaySoundEffect(0x1f8); + for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){ + SetDungeonBGColorRGB(0,0,iVar1,1,1); + sub_803E46C(0x46); + } + sub_803E708(10,0x46); + for(iVar1 = 250; iVar1 > 199; iVar1 -= 10){ + SetDungeonBGColorRGB(0,iVar1,iVar1,1,1); + sub_803E46C(0x46); + } + sub_803E708(10,0x46); + for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10){ + SetDungeonBGColorRGB(0,0,iVar1,1,1); + sub_803E46C(0x46); + } + sub_803E708(10,0x46); + sub_8085EB0(); +} + +void sub_808C360(void) +{ + gUnknown_202EDC8 = 0x1f; + SetDungeonBGColorRGB(0,0,0,1,1); + sub_803E9D0(); + sub_803E46C(0x46); + gDungeonGlobalData->unk7 = 0; + KyogreScreenFlash(); +} + +void sub_808C3A0(void) +{ + struct DungeonEntity * LeaderEntity; + + LeaderEntity = xxx_call_GetLeaderEntity(); + sub_8083F14(); + sub_80854D4(); + sub_8085930(DIRECTION_NORTH); + sub_80855E4(sub_8086A3C); + if (HasRecruitedMon(SPECIES_DEOXYS_NORMAL)) { + sub_808563C(sub_808C590); + } + else { + gDungeonGlobalData->unk7 = 1; + sub_808563C(SetupDeoxysFacingDirection); + } + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); + CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_DEOXYS_NORMAL); +} + +void sub_808C414(u8 param_1,u8 param_2) +{ + if ((param_2 == 0x35) && (param_1 == 0x1D)) { + gDungeonGlobalData->unk2 = 1; + sub_8083E88(0x1a); + } +} + +void DeoxysPreFightDialogue(void) +{ + struct DungeonEntity * LeaderEntity; + + LeaderEntity = xxx_call_GetLeaderEntity(); + sub_8086448(); + if (HasRecruitedMon(SPECIES_DEOXYS_NORMAL)) { + // There appears to be no one here. + // It's impossible to go any further + sub_80866C4(&gDeoxysPreFightDialogue_5); + } + else { + DisplayDungeonDialogue(&gDeoxysPreFightDialogue_1); + sub_8083EA8(0x1a,0x3c); + sub_808C550(); + DisplayDungeonDialogue(&gDeoxysPreFightDialogue_2); + DeoxysScreenFlash(); + DisplayDungeonDialogue(&gDeoxysPreFightDialogue_3); + DeoxysScreenFlash(); + DisplayDungeonDialogue(&gDeoxysPreFightDialogue_4); + sub_803E708(10,0x46); + sub_808563C(SetupDeoxysFightHP); + ShiftCameraToPosition(&LeaderEntity->posPixel,0x10); + } +} + +void DeoxysScreenFlash(void) +{ + s32 iVar1; + + PlaySoundEffect(0x2c1); + for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){ + SetDungeonBGColorRGB(iVar1,0,0,1,1); + sub_803E46C(0x46); + } + sub_803E708(10,0x46); + for(iVar1 = 250; iVar1 > 199; iVar1 -= 10){ + SetDungeonBGColorRGB(iVar1,iVar1,0,1,1); + sub_803E46C(0x46); + } + sub_803E708(10,0x46); + for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10){ + SetDungeonBGColorRGB(iVar1,0,0,1,1); + sub_803E46C(0x46); + } + sub_803E708(10,0x46); + sub_8085EB0(); +} + +void sub_808C550(void) +{ + gUnknown_202EDC8 = 0x1f; + SetDungeonBGColorRGB(0,0,0,1,1); + sub_803E9D0(); + sub_803E46C(0x46); + gDungeonGlobalData->unk7 = 0; + DeoxysScreenFlash(); +} + +void sub_808C590(struct DungeonEntity *r0) +{ + sub_8068FE0(r0, 0x21C, 0); +} + +void SetupDeoxysFacingDirection(struct DungeonEntity *deoxysEntity) +{ + SetFacingDirection(deoxysEntity, DIRECTION_SOUTH); +} + +void SetupDeoxysFightHP(struct DungeonEntity *deoxysEntity) +{ + SetupBossFightHP(deoxysEntity, 950, 0x20); +} + +void sub_808C5C0(void) +{ + struct DungeonEntity * LeaderEntity; + struct DungeonEntity * CelebiEntity; + + u32 uVar3; + s32 iVar2; + + LeaderEntity = xxx_call_GetLeaderEntity(); + CelebiEntity = GetEntityFromClientType(0x1e); + sub_8083E88(0x7f); + sub_80854D4(); + sub_8085930(DIRECTION_NORTH); + SetFacingDirection(CelebiEntity, DIRECTION_SOUTH); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); + uVar3 = GetCameraXPos(); + iVar2 = GetCameraYPos(); + sub_803F878(uVar3,iVar2 + 0xfffff000); + CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_CELEBI); +} + +// Dummy Celebi Fight Dialogue?? +void nullsub_100(u32 r0, u32 r1, u32 r2) +{ +} + +#ifdef NONMATCHING +void CelebiJoinDialogue(void) +{ + struct DungeonEntity *LeaderEntity; + s32 state; + s32 menuChoice; + struct DungeonEntity *CelebiEntity; + + LeaderEntity = xxx_call_GetLeaderEntity(); + CelebiEntity = GetEntityFromClientType(0x1e); + if ((HasRecruitedMon(SPECIES_CELEBI)) || (sub_806FD18(CelebiEntity) == '\0')) + { + sub_8068FE0(local_1c,0x21c,0); + SpriteLookAroundEffect(LeaderEntity); + sub_803E708(10,0x46); + // ......... + DisplayDungeonDialogue(&gCelebiJoinDialogue_10); + } + else + { + SpriteLookAroundEffect(LeaderEntity); + sub_803E708(10,0x46); + SpriteShockEffect(LeaderEntity); + sub_803E708(10,0x46); + // Oh? There's someone there. + DisplayDungeonDialogue(&gCelebiJoinDialogue_1); + sub_803E708(10,0x46); + sub_8086598(); + sub_8086598(); + sub_8086598(); + sub_8086598(); + // The Time-Traveling Pokemon {ARG_POKEMON_2} (Celebi)! + DisplayDungeonDialogue(&gCelebiJoinDialogue_2); + PlaySoundEffect(0x1c7); + sub_806CDD4(CelebiEntity,10,DIRECTION_SOUTH); + sub_803E708(0x14,0x46); + sub_806CE68(CelebiEntity, DIRECTION_SOUTH); + sub_803E708(4,0x46); + PlaySoundEffect(0x1c7); + sub_806CDD4(CelebiEntity,10,DIRECTION_SOUTH); + DisplayDungeonDialogue(&gCelebiJoinDialogue_3); + 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(); + PlaySoundEffect(0xcc); + while (sub_8083E74(0xcc) != 0) { + sub_803E46C(0x46); + } + sub_8083E88(0x7f); + PlaySoundEffect(0x1c7); + sub_80861D4(CelebiEntity,0xd,0); + sub_803E708(0x37,0x46); + PlaySoundEffect(0x1d5); + sub_803E708(0x1a,0x46); + PlaySoundEffect(0x1d5); + sub_803E708(0x1c,0x46); + DisplayDungeonDialogue(&gCelebiJoinDialogue_4); + sub_803E708(10,0x46); + sub_806FDF4(LeaderEntity,CelebiEntity,&CelebiEntity); + sub_8083E88(0x7f); + DisplayDungeonDialogue(&gCelebiJoinDialogue_5); + sub_803E708(10,0x46); + PlaySoundEffect(0x1c7); + sub_80861D4(CelebiEntity,0xd,0); + sub_803E708(0x37,0x46); + PlaySoundEffect(0x1d5); + sub_803E708(0x1a,0x46); + PlaySoundEffect(0x1d5); + sub_803E708(0x1b,0x46); + DisplayDungeonDialogue(&gCelebiJoinDialogue_6); + 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); + DisplayDungeonDialogue(&gCelebiJoinDialogue_7); + sub_80861F8(0x3e,CelebiEntity,1); + sub_803E708(0x18,0x46); + sub_80861F8(0x3e,CelebiEntity,1); + sub_803E708(0xe,0x46); + DisplayDungeonDialogue(&gCelebiJoinDialogue_8); + sub_803E708(10,0x46); + sub_808C8E0(CelebiEntity); + DisplayDungeonDialogue(&gCelebiJoinDialogue_9); + sub_803E708(10,0x46); + state = 2; + } + break; + } + } while (state != 2); + } + sub_8083ED8(0x1e); + sub_803E708(0x1e,0x46); + gDungeonGlobalData->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 xxx_call_GetLeaderEntity\n" + "\tadds r7, r0, 0\n" + "\tmovs r0, 0x1E\n" + "\tbl GetEntityFromClientType\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 SpriteLookAroundEffect\n" + "\tmovs r0, 0xA\n" + "\tmovs r1, 0x46\n" + "\tbl sub_803E708\n" + "\tldr r0, _0808C67C\n" + "\tbl DisplayDungeonDialogue\n" + "\tb _0808C8AC\n" + "\t.align 2, 0\n" +"_0808C67C: .4byte gCelebiJoinDialogue_10\n" +"_0808C680:\n" + "\tadds r0, r7, 0\n" + "\tbl SpriteLookAroundEffect\n" + "\tmovs r0, 0xA\n" + "\tmovs r1, 0x46\n" + "\tbl sub_803E708\n" + "\tadds r0, r7, 0\n" + "\tbl SpriteShockEffect\n" + "\tmovs r0, 0xA\n" + "\tmovs r1, 0x46\n" + "\tbl sub_803E708\n" + "\tldr r0, _0808C71C\n" + "\tbl DisplayDungeonDialogue\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 DisplayDungeonDialogue\n" + "\tldr r4, _0808C724\n" + "\tadds r0, r4, 0\n" + "\tbl PlaySoundEffect\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 PlaySoundEffect\n" + "\tldr r0, [sp]\n" + "\tmovs r1, 0xA\n" + "\tmovs r2, 0\n" + "\tbl sub_806CDD4\n" + "\tldr r0, _0808C728\n" + "\tbl DisplayDungeonDialogue\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 gCelebiJoinDialogue_1\n" +"_0808C720: .4byte gCelebiJoinDialogue_2\n" +"_0808C724: .4byte 0x000001c7\n" +"_0808C728: .4byte gCelebiJoinDialogue_3\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 PlaySoundEffect\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 PlaySoundEffect\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 PlaySoundEffect\n" + "\tmovs r0, 0x1A\n" + "\tmovs r1, 0x46\n" + "\tbl sub_803E708\n" + "\tadds r0, r6, 0\n" + "\tbl PlaySoundEffect\n" + "\tmovs r0, 0x1C\n" + "\tmovs r1, 0x46\n" + "\tbl sub_803E708\n" + "\tldr r0, _0808C818\n" + "\tbl DisplayDungeonDialogue\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 DisplayDungeonDialogue\n" + "\tmovs r0, 0xA\n" + "\tmovs r1, 0x46\n" + "\tbl sub_803E708\n" + "\tmov r0, r8\n" + "\tbl PlaySoundEffect\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 PlaySoundEffect\n" + "\tmovs r0, 0x1A\n" + "\tmovs r1, 0x46\n" + "\tbl sub_803E708\n" + "\tadds r0, r6, 0\n" + "\tbl PlaySoundEffect\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 gCelebiJoinDialogue_4\n" +"_0808C81C: .4byte gCelebiJoinDialogue_5\n" +"_0808C820: .4byte gCelebiJoinDialogue_6\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 DisplayDungeonDialogue\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 DisplayDungeonDialogue\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 DisplayDungeonDialogue\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 gCelebiJoinDialogue_7\n" +"_0808C8D4: .4byte gCelebiJoinDialogue_8\n" +"_0808C8D8: .4byte gCelebiJoinDialogue_9\n" +"_0808C8DC: .4byte gDungeonGlobalData"); +} +#endif + +void sub_808C8E0(struct DungeonEntity *param_1) +{ + s32 iVar1; + + PlaySoundEffect(0x1a5); + sub_806CDD4(param_1, 0, DIRECTION_SOUTH); + for(iVar1 = 0; iVar1 < 16; iVar1++){ + param_1->entityData->unk174 = iVar1 * 256; + sub_803E46C(0x46); + } + for(iVar1 = 16; iVar1 < 200; iVar1 += 4){ + param_1->entityData->unk174 = iVar1 * 256; + sub_803E46C(0x46); + } + sub_8086A3C(param_1); +} + +void sub_808C938(void) +{ + sub_80855E4(sub_808C9B0); +} + +void sub_808C948(struct DungeonEntity *param_1, u8 param_2) +{ + bool8 flag; + s32 iVar3; + struct DungeonEntity *iVar2; + + if (param_2 == 0x37) { + flag = FALSE; + for(iVar3 = 0; iVar3 < DUNGEON_MAX_WILD_POKEMON; iVar3++){ + iVar2 = gDungeonGlobalData->wildPokemon[iVar3]; + if ((iVar2 != param_1) && (EntityExists(iVar2) != 0)) { + flag = TRUE; + break; + } + } + if (!flag) { + gDungeonGlobalData->unk2 = 1; + } + } +} + +void sub_808C998(void) +{ + // Defeat the opposing team to win + // Be careful, your opponents are tough + DisplayDungeonDialogue(&gUnknown_8106720); + sub_803E708(0xA, 0x46); +} + +void sub_808C9B0(struct DungeonEntity *param_1) +{ + param_1->entityData->action.facingDir = DIRECTION_NORTH; + sub_806CE68(param_1, DIRECTION_NORTH); +} + +void sub_808C9C4(void) +{ + struct DungeonEntity *LeaderEntity; + struct DungeonEntity *MedichamEntity; + + LeaderEntity = xxx_call_GetLeaderEntity(); + MedichamEntity = GetEntityFromClientType(7); + sub_8083E88(0x72); + sub_80854D4(); + sub_8085930(DIRECTION_NORTH); + sub_80855E4(sub_8086A3C); + SetFacingDirection(MedichamEntity, DIRECTION_SOUTH); + sub_8085860(LeaderEntity->posWorld.x, LeaderEntity->posWorld.y - 3); + CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_MEDICHAM); +} + +// Medicham Rescue Dialogue? +void MedichamRescueDialogue(void) +{ + struct DungeonEntity *MedichamEntity; + s32 counter; + + MedichamEntity = GetEntityFromClientType(7); + SpriteLookAroundEffect(MedichamEntity); + sub_803E708(0xA, 0x46); + // Oh my I can't seem to find a way out... + DisplayDungeonDialogue(&gMedichamRescueDialogue_1); + sub_803E708(0xA, 0x46); + sub_80869E4(MedichamEntity, 4, 2, 4); + sub_803E708(0xA, 0x46); + // What am I to do...? + DisplayDungeonDialogue(&gMedichamRescueDialogue_2); + sub_803E708(0xA, 0x46); + sub_8086448(); + sub_8086598(); + sub_803E708(0x20, 0x46); + SpriteShockEffect(MedichamEntity); + sub_803E708(0x20, 0x46); + sub_80869E4(MedichamEntity, 4, 2, 0); + DisplayDungeonDialogue(&gMedichamRescueDialogue_3); + sub_803E708(0xA, 0x46); + PlaySoundEffect(0x1c7); + sub_806CDD4(MedichamEntity, 0xA, DIRECTION_SOUTH); + sub_803E708(0x14, 0x46); + sub_806CE68(MedichamEntity, DIRECTION_SOUTH); + sub_803E708(0x4, 0x46); + PlaySoundEffect(0x1c7); + sub_806CDD4(MedichamEntity, 0xA, DIRECTION_SOUTH); + sub_803E708(0x14, 0x46); + // Yes Yes + // I am so lucky + // + // There appears to be no one here + DisplayDungeonDialogue(&gMedichamRescueDialogue_4); + sub_803E708(0xA, 0x46); + sub_806CDD4(MedichamEntity, 0, DIRECTION_SOUTH); + for(counter = 0x17; counter >= 0; counter--) + { + sub_804539C(MedichamEntity, 0, 0x80 << 1); + sub_803E46C(0x46); + } + sub_806CE68(MedichamEntity, DIRECTION_SOUTH); + sub_803E708(0x20, 0x46); + sub_8042B0C(MedichamEntity); + sub_8068FE0(MedichamEntity, 0x21C, 0); + gDungeonGlobalData->unk4 = 1; + gDungeonGlobalData->unk11 = 4; +} + +void sub_808CB5C(void) +{ + struct DungeonEntity *LeaderEntity; + struct DungeonEntity *MedichamEntity; + + LeaderEntity = xxx_call_GetLeaderEntity(); + MedichamEntity = GetEntityFromClientType(7); + sub_8083E88(0x72); + sub_80854D4(); + sub_8085930(DIRECTION_NORTH); + sub_8068FE0(MedichamEntity, 0x21C, 0); + sub_8085860(LeaderEntity->posWorld.x, LeaderEntity->posWorld.y); + CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_MEDICHAM); +} + +void DummyFightDialogue(void) +{ +} + +void sub_808CBB0(void) +{ + struct DungeonEntity *LeaderEntity; + struct DungeonEntity *SmeargleEntity; + + LeaderEntity = xxx_call_GetLeaderEntity(); + SmeargleEntity = GetEntityFromClientType(0x1F); + sub_8083E88(0x72); + sub_80854D4(); + sub_8085930(DIRECTION_NORTH); + sub_80855E4(sub_8086A3C); + SetFacingDirection(SmeargleEntity, DIRECTION_SOUTH); + sub_8085860(LeaderEntity->posWorld.x, LeaderEntity->posWorld.y - 3); + CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SMEARGLE); +} + +// Smeargle Rescue dialogue scene +void SmeargleRescueDialogue(void) +{ + struct DungeonEntity *SmeargleEntity; + s32 counter; + + SmeargleEntity = GetEntityFromClientType(0x1F); + SpriteLookAroundEffect(SmeargleEntity); + sub_803E708(0xA, 0x46); + // Ohhh... + // I've lost my bearings + DisplayDungeonDialogue(&gSmeargleRescueDialogue_1); + sub_803E708(0xA, 0x46); + sub_80869E4(SmeargleEntity, 4, 2, 4); + sub_803E708(0xA, 0x46); + // I can't get out... + // I'm hungry... + // I'm in trouble + DisplayDungeonDialogue(&gSmeargleRescueDialogue_2); + sub_803E708(0xA, 0x46); + sub_8086448(); + sub_8086598(); + sub_803E708(0x20, 0x46); + SpriteShockEffect(SmeargleEntity); + sub_803E708(0x20, 0x46); + sub_80869E4(SmeargleEntity, 4, 2, 0); + // Oh! You are? + DisplayDungeonDialogue(&gSmeargleRescueDialogue_3); + sub_803E708(0xA, 0x46); + PlaySoundEffect(0x1c7); + sub_806CDD4(SmeargleEntity, 0xA, DIRECTION_SOUTH); + sub_803E708(0x14, 0x46); + sub_806CE68(SmeargleEntity, DIRECTION_SOUTH); + sub_803E708(0x4, 0x46); + PlaySoundEffect(0x1c7); + sub_806CDD4(SmeargleEntity, 0xA, DIRECTION_SOUTH); + sub_803E708(0x14, 0x46); + // Did you maybe come to rescue me? + // Am I glad to see you + DisplayDungeonDialogue(&gSmeargleRescueDialogue_4); + sub_803E708(0xA, 0x46); + sub_806CDD4(SmeargleEntity, 0, DIRECTION_SOUTH); + for(counter = 0x17; counter >= 0; counter--) + { + sub_804539C(SmeargleEntity, 0, 0x80 << 1); + sub_803E46C(0x46); + } + sub_806CE68(SmeargleEntity, DIRECTION_SOUTH); + sub_803E708(0x20, 0x46); + sub_8042B0C(SmeargleEntity); + sub_8068FE0(SmeargleEntity, 0x21C, 0); + gDungeonGlobalData->unk4 = 1; + gDungeonGlobalData->unk11 = 4; + +} + +void sub_808CD44(void) +{ + struct DungeonEntity *LeaderEntity; + struct DungeonEntity *SmeargleEntity; + + LeaderEntity = xxx_call_GetLeaderEntity(); + SmeargleEntity = GetEntityFromClientType(0x1F); + sub_8083E88(0x72); + sub_80854D4(); + sub_8085930(DIRECTION_NORTH); + sub_80855E4(sub_8086A3C); + sub_8068FE0(SmeargleEntity, 0x21C, 0); + sub_8085860(LeaderEntity->posWorld.x, LeaderEntity->posWorld.y - 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_80869E4.c b/src/code_80869E4.c index 1d24061d9..3b2519fc1 100644 --- a/src/code_80869E4.c +++ b/src/code_80869E4.c @@ -18,14 +18,14 @@ EWRAM_DATA struct unkStruct_202F3D0 gUnknown_202F3D0; s8 sub_8002984(s8, u8); void sub_803E708(u32, u32); -void sub_80869E4(struct DungeonEntity *r0, u32, u8, s8); +void sub_80869E4(struct DungeonEntity *entity, u32, u8, s8); extern void sub_80859F0(u32); extern void sub_803E46C(u32); extern void sub_803E9D0(void); extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32); extern void PlaySoundEffect(u32); extern struct DungeonEntity *xxx_call_GetLeaderEntity(void); -void SpriteLookAroundEffect(struct DungeonEntity *r0); +void SpriteLookAroundEffect(struct DungeonEntity *entity); extern void DisplayDungeonDialogue(u32); void sub_8086494(); @@ -39,7 +39,7 @@ extern void sub_80855E4(void *); extern s32 GetCameraXPos(void); extern s32 GetCameraYPos(void); extern void sub_803F878(u32, u32); -extern void sub_8086384(struct DungeonEntity *r0); +extern void sub_8086384(struct DungeonEntity *entity); extern void sub_8085930(u32); extern void sub_804539C(struct DungeonEntity *, u32, u32); extern void sub_806CE68(struct DungeonEntity *, u32); @@ -50,100 +50,100 @@ extern void sub_8086A3C(struct DungeonEntity *); extern void PlaySoundEffect(u32); extern void sub_80861F8(u32, struct DungeonEntity *, u32); -void sub_80862BC(struct DungeonEntity *r0) +void SpriteShockEffect(struct DungeonEntity *entity) { PlaySoundEffect(0xE8 << 1); - sub_80861F8(0x143, r0, 0); + sub_80861F8(0x143, entity, 0); } -void sub_80862DC(struct DungeonEntity *r0) +void sub_80862DC(struct DungeonEntity *entity) { u32 array[2]; - array[0] = r0->posPixel.x; - array[1] = r0->posPixel.y + (0xE0 << 6); + array[0] = entity->posPixel.x; + array[1] = entity->posPixel.y + (0xE0 << 6); - sub_804535C(r0, array); - sub_806CDD4(r0, 0, DIRECTION_NORTH); - sub_8086A54(r0); + sub_804535C(entity, array); + sub_806CDD4(entity, 0, DIRECTION_NORTH); + sub_8086A54(entity); } -void sub_8086310(struct DungeonEntity *r0) +void sub_8086310(struct DungeonEntity *entity) { u32 array[2]; - array[0] = r0->posPixel.x; - array[1] = r0->posPixel.y + (0x90 << 8); + array[0] = entity->posPixel.x; + array[1] = entity->posPixel.y + (0x90 << 8); - sub_804535C(r0, array); - sub_806CE68(r0, DIRECTION_SOUTH); - sub_8086A3C(r0); - r0->visible = 0; + sub_804535C(entity, array); + sub_806CE68(entity, DIRECTION_SOUTH); + sub_8086A3C(entity); + entity->visible = 0; } -void sub_8086348(struct DungeonEntity *r0) +void sub_8086348(struct DungeonEntity *entity) { u32 array[2]; - array[0] = r0->posPixel.x + (0xF0 << 7); - array[1] = r0->posPixel.y + 0xffffe000; + array[0] = entity->posPixel.x + (0xF0 << 7); + array[1] = entity->posPixel.y + 0xffffe000; - sub_804535C(r0, array); - sub_806CDD4(r0, 0, DIRECTION_WEST); - sub_8086A54(r0); + sub_804535C(entity, array); + sub_806CDD4(entity, 0, DIRECTION_WEST); + sub_8086A54(entity); } -void sub_8086384(struct DungeonEntity *r0) +void sub_8086384(struct DungeonEntity *entity) { u32 array[2]; - array[0] = r0->posPixel.x + (0xF0 << 7); - array[1] = r0->posPixel.y; + array[0] = entity->posPixel.x + (0xF0 << 7); + array[1] = entity->posPixel.y; - sub_804535C(r0, array); - sub_806CDD4(r0, 0, DIRECTION_WEST); - sub_8086A54(r0); + sub_804535C(entity, array); + sub_806CDD4(entity, 0, DIRECTION_WEST); + sub_8086A54(entity); } -void sub_80863B8(struct DungeonEntity *r0) +void sub_80863B8(struct DungeonEntity *entity) { - sub_806CDD4(r0, 0, DIRECTION_NORTH); + sub_806CDD4(entity, 0, DIRECTION_NORTH); } -void sub_80863C8(struct DungeonEntity *r0) +void sub_80863C8(struct DungeonEntity *entity) { - sub_806CDD4(r0, 0, DIRECTION_SOUTH); + sub_806CDD4(entity, 0, DIRECTION_SOUTH); } -void sub_80863D8(struct DungeonEntity *r0) +void sub_80863D8(struct DungeonEntity *entity) { - sub_806CDD4(r0, 0, DIRECTION_WEST); + sub_806CDD4(entity, 0, DIRECTION_WEST); } -void sub_80863E8(struct DungeonEntity *r0) +void sub_80863E8(struct DungeonEntity *entity) { - sub_806CDD4(r0, 6, DIRECTION_NORTH); + sub_806CDD4(entity, 6, DIRECTION_NORTH); } -void sub_80863F8(struct DungeonEntity *r0) +void sub_80863F8(struct DungeonEntity *entity) { - sub_806CE68(r0, DIRECTION_NORTH); + sub_806CE68(entity, DIRECTION_NORTH); } -void sub_8086404(struct DungeonEntity *r0) +void sub_8086404(struct DungeonEntity *entity) { - sub_806CE68(r0, DIRECTION_WEST); + sub_806CE68(entity, DIRECTION_WEST); } -void sub_8086410(struct DungeonEntity *r0) +void sub_8086410(struct DungeonEntity *entity) { - sub_804539C(r0, 0, 0xffffff00); + sub_804539C(entity, 0, 0xffffff00); } -void sub_8086424(struct DungeonEntity *r0) +void sub_8086424(struct DungeonEntity *entity) { - sub_804539C(r0, 0, 0x80 << 1); + sub_804539C(entity, 0, 0x80 << 1); } -void sub_8086434(struct DungeonEntity *r0) +void sub_8086434(struct DungeonEntity *entity) { - sub_804539C(r0, 0xffffff00, 0); + sub_804539C(entity, 0xffffff00, 0); } void sub_8086448(void) @@ -306,12 +306,12 @@ void sub_8086690(void) } -void sub_80866C4(u32 r0) +void sub_80866C4(u32 entity) { SpriteLookAroundEffect(xxx_call_GetLeaderEntity()); sub_803E708(0xA, 0x46); - DisplayDungeonDialogue(r0); + DisplayDungeonDialogue(entity); sub_803E708(0xA, 0x46); sub_8086494(); gDungeonGlobalData->unk2 = 1; @@ -395,21 +395,21 @@ void sub_808680C(void) PlaySoundEffect(0x1F9); } -void sub_808682C(u8 r0) +void sub_808682C(u8 entity) { gUnknown_202F3D0.unk0 = 0; } -void sub_8086838(u8 r0, u8 r1, u8 r2) +void sub_8086838(u8 entity, u8 r1, u8 r2) { - gUnknown_202F3D0.unk1 = r0; + gUnknown_202F3D0.unk1 = entity; gUnknown_202F3D0.unk2 = r1; gUnknown_202F3D0.unk3 = r2; } -void sub_8086848(u8 r0, u8 r1) +void sub_8086848(u8 entity, u8 r1) { - gUnknown_202F3D0.unk4 = r0; + gUnknown_202F3D0.unk4 = entity; gUnknown_202F3D0.unk5 = r1; } @@ -446,16 +446,16 @@ void sub_8086854(void) } } -void sub_80868F4(struct DungeonEntity *r0) +void sub_80868F4(struct DungeonEntity *entity) { - r0->entityData->unk15C = 1; - r0->entityData->unk15D = 1; + entity->entityData->unk15C = 1; + entity->entityData->unk15D = 1; } -void sub_8086910(struct DungeonEntity *r0) +void sub_8086910(struct DungeonEntity *entity) { - r0->entityData->unk15C = 0; - r0->entityData->unk15D = 0; + entity->entityData->unk15C = 0; + entity->entityData->unk15D = 0; } void sub_808692C(void) @@ -473,26 +473,26 @@ void sub_808692C(void) sub_803E708(0x4, 0x46); } -void SpriteLookAroundEffect(struct DungeonEntity *r0) +void SpriteLookAroundEffect(struct DungeonEntity *entity) { s8 r4; s8 r3; - r4 = sub_8002984(r0->entityData->action.facingDir, 4); + r4 = sub_8002984(entity->entityData->action.facingDir, 4); - sub_80869E4(r0, 4, 2, r4); + sub_80869E4(entity, 4, 2, r4); sub_803E708(0xF, 0x46); r4 = sub_8002984(r4, 5); - sub_80869E4(r0, 4, 1, r4); + sub_80869E4(entity, 4, 1, r4); sub_803E708(0xF, 0x46); r3 = sub_8002984(r4, 4); - sub_80869E4(r0, 4, 2, r3); + sub_80869E4(entity, 4, 2, r3); sub_803E708(0xF, 0x46); } diff --git a/src/code_8086A3C.c b/src/code_8086A3C.c index b07656118..27af2fa58 100644 --- a/src/code_8086A3C.c +++ b/src/code_8086A3C.c @@ -28,8 +28,8 @@ extern void sub_80869E4(struct DungeonEntity *, u32, u32, u32); extern void sub_8083E88(u32); extern void sub_803E708(u32, u32); extern void sub_8086448(void); -extern void sub_80862BC(struct DungeonEntity *); -extern void sub_8086E74(struct DungeonEntity *); +extern void SpriteShockEffect(struct DungeonEntity *); +extern void SkarmoryEntry(struct DungeonEntity *); extern void SpriteLookAroundEffect(struct DungeonEntity *); extern void sub_8086A54(struct DungeonEntity *); extern void PlaySoundEffect(u32); @@ -174,7 +174,7 @@ void SkarmoryPreFightDialogue(void) sub_8086448(); sub_803E708(10,0x46); - sub_80862BC(PartnerEntity); + SpriteShockEffect(PartnerEntity); sub_803E708(0x20,0x46); sub_803E708(10,0x46); DisplayDungeonDialogue(&gSkarmoryPreFightDialogue_1); @@ -189,7 +189,7 @@ void SkarmoryPreFightDialogue(void) sub_803E708(10,0x46); ShiftCameraToPosition(&local_20,0x20); sub_803E708(0x20,0x46); - sub_8086E74(SkarmoryEntity); + SkarmoryEntry(SkarmoryEntity); DisplayDungeonDialogue(&gSkarmoryPreFightDialogue_4); // Skarmory: You!\nWhat do you think you're doing here?! sub_803E708(10,0x46); DisplayDungeonDialogue(&gSkarmoryPreFightDialogue_5); @@ -223,7 +223,7 @@ void SkarmoryReFightDialogue(void) local_14.y = SkarmoryEntity->posPixel.y + 0x2000; sub_8086448(); sub_803E708(10,0x46); - sub_8086E74(SkarmoryEntity); + SkarmoryEntry(SkarmoryEntity); ShiftCameraToPosition(&local_14,0x10); DisplayDungeonDialogue(&gSkarmoryReFightDialogue_1); sub_803E708(10,0x46); @@ -245,10 +245,10 @@ void sub_8086E40(void) gDungeonGlobalData->unk2 = 1; } -void sub_8086E74(struct DungeonEntity * param_1) +void SkarmoryEntry(struct DungeonEntity * skarmoryEntity) { - sub_806CDD4(param_1,0xf,0); - sub_8086A54(param_1); + sub_806CDD4(skarmoryEntity,0xf,0); + sub_8086A54(skarmoryEntity); PlaySoundEffect(0x1f8); sub_803E708(0x44,0x46); } From bf5b67c5aaa466a84224adc81aef598b36ed5f79 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 10 Jun 2022 19:14:10 -0500 Subject: [PATCH 05/11] fakematch sub_800C5D0 --- src/code_80118A4.c | 4 +-- src/music_pre.c | 81 ++++++++-------------------------------------- 2 files changed, 16 insertions(+), 69 deletions(-) diff --git a/src/code_80118A4.c b/src/code_80118A4.c index 2a2160787..dd87530b3 100644 --- a/src/code_80118A4.c +++ b/src/code_80118A4.c @@ -15,7 +15,7 @@ extern u8 sub_80023E4(u8); extern void sub_800C3F8(u16 r0, u16 r1); extern void sub_801199C(u16 r0); extern void sub_800C298(u16 r0); -extern u8 sub_800C5D0(u16 r0); +extern bool8 sub_800C5D0(u16 r0); struct UnkSaveStruct1 { @@ -240,7 +240,7 @@ void sub_80119AC(u16 songIndex, u16 r1) sub_800C3F8(songIndex, r1); } -u8 sub_80119C0(u16 songIndex) +bool8 sub_80119C0(u16 songIndex) { return sub_800C5D0(songIndex); } diff --git a/src/music_pre.c b/src/music_pre.c index 3bac47474..d1ec4f523 100644 --- a/src/music_pre.c +++ b/src/music_pre.c @@ -902,87 +902,34 @@ void sub_800C3F8(u16 songIndex, u16 speed) } } -#ifdef NONMATCHING -u8 sub_800C5D0(u16 param_1) +bool8 sub_800C5D0(u16 songIndex) { u32 uVar3; struct unkStruct_3000FD8 *preload; + register u32 songIndex_u32 asm("r4"); + register u32 songIndex_u32_2 asm("r5"); + + songIndex_u32 = songIndex; + songIndex_u32_2 = songIndex_u32; - if (sub_800CACC(param_1) != '\0') { - if ((gUnknown_202D690 != 0) && (gUnknown_202D68E == param_1)) { - return 1; + if (sub_800CACC(songIndex_u32)) { + if ((gUnknown_202D690 != 0) && (gUnknown_202D68E == songIndex_u32)) { + return TRUE; } } else { - // NOTE: regswap of r5 for r4 here... but is functionally matching - if (sub_800CAAC(param_1) != '\0') { - uVar3 = GetMusicPlayerIndex(param_1); + if (sub_800CAAC(songIndex_u32)) { + uVar3 = GetMusicPlayerIndex(songIndex_u32); preload = &gUnknown_3000FD8[uVar3]; - if ((1 < uVar3) && (preload->songIndex == param_1)) { - return 1; + if ((1 < uVar3) && (preload->songIndex == songIndex_u32_2)) { + return TRUE; } } } - return 0; + return FALSE; } -#else -NAKED -u8 sub_800C5D0(u16 param_1) -{ - asm_unified("\tpush {r4,r5,lr}\n" - "\tlsls r0, 16\n" - "\tlsrs r4, r0, 16\n" - "\tadds r5, r4, 0\n" - "\tadds r0, r4, 0\n" - "\tbl sub_800CACC\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _0800C600\n" - "\tldr r0, _0800C5F8\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbeq _0800C630\n" - "\tldr r0, _0800C5FC\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, r4\n" - "\tbne _0800C630\n" - "\tmovs r0, 0x1\n" - "\tb _0800C632\n" - "\t.align 2, 0\n" -"_0800C5F8: .4byte gUnknown_202D690\n" -"_0800C5FC: .4byte gUnknown_202D68E\n" -"_0800C600:\n" - "\tadds r0, r4, 0\n" - "\tbl sub_800CAAC\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _0800C630\n" - "\tadds r0, r4, 0\n" - "\tbl GetMusicPlayerIndex\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tlsls r2, r0, 3\n" - "\tldr r1, _0800C62C\n" - "\tadds r2, r1\n" - "\tcmp r0, 0x1\n" - "\tbls _0800C630\n" - "\tldrh r0, [r2, 0x2]\n" - "\tcmp r0, r5\n" - "\tbne _0800C630\n" - "\tmovs r0, 0x1\n" - "\tb _0800C632\n" - "\t.align 2, 0\n" -"_0800C62C: .4byte gUnknown_3000FD8\n" -"_0800C630:\n" - "\tmovs r0, 0\n" -"_0800C632:\n" - "\tpop {r4,r5}\n" - "\tpop {r1}\n" - "\tbx r1"); -} -#endif void SoundVSync(void) { From b6bafe452790f0f2cfcc5268cbde94c9c21f482f Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 11 Jun 2022 20:01:36 -0500 Subject: [PATCH 06/11] more wonder mail decomp --- asm/wonder_mail_2.s | 673 ------------------------------------ include/constants/mailbox.h | 1 + ld_script.txt | 2 +- src/wonder_mail_2.c | 68 +++- src/wonder_mail_2_1.c | 19 +- src/wonder_mail_2_mid.c | 358 +++++++++++++++++++ 6 files changed, 436 insertions(+), 685 deletions(-) delete mode 100644 asm/wonder_mail_2.s create mode 100644 src/wonder_mail_2_mid.c diff --git a/asm/wonder_mail_2.s b/asm/wonder_mail_2.s deleted file mode 100644 index 4add06ee1..000000000 --- a/asm/wonder_mail_2.s +++ /dev/null @@ -1,673 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_802BF30 -sub_802BF30: - push {r4,lr} - ldr r4, _0802BF9C - ldr r0, [r4] - adds r0, 0xA0 - movs r2, 0 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xA1 - strb r2, [r0] - ldr r0, [r4] - adds r0, 0xA2 - movs r1, 0xC - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xA3 - strb r2, [r0] - ldr r0, [r4] - movs r1, 0x1E - ldrsh r0, [r0, r1] - movs r1, 0x18 - bl sub_8009614 - adds r0, 0x2 - lsls r0, 16 - ldr r2, [r4] - ldr r3, [r2, 0x38] - lsls r1, r3, 1 - adds r1, r3 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x4E - asrs r3, r0, 16 - lsrs r0, 16 - strh r0, [r1] - ldr r1, [r2, 0x38] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r2, r0 - adds r3, 0x2 - adds r2, 0x50 - strh r3, [r2] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x40 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802BF9C: .4byte gUnknown_203B2D8 - thumb_func_end sub_802BF30 - - thumb_func_start CreateMailMenu -CreateMailMenu: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xDC - ldr r4, _0802C060 - ldr r0, [r4] - ldr r0, [r0, 0x38] - bl sub_8008C54 - ldr r0, [r4] - ldr r0, [r0, 0x38] - bl sub_80073B8 - ldr r1, [r4] - movs r2, 0x22 - ldrsh r0, [r1, r2] - lsls r0, 3 - adds r0, 0xA - ldr r2, _0802C064 - ldr r3, [r1, 0x38] - movs r1, 0 - str r1, [sp] - bl xxx_call_draw_string - movs r6, 0 - ldr r0, [r4] - movs r3, 0x1E - ldrsh r0, [r0, r3] - cmp r6, r0 - bge _0802C09A - adds r7, r4, 0 - ldr r0, _0802C068 - mov r9, r0 - add r1, sp, 0x5C - mov r8, r1 -_0802BFE8: - ldr r1, [r7] - movs r3, 0x22 - ldrsh r2, [r1, r3] - movs r3, 0x20 - ldrsh r0, [r1, r3] - muls r0, r2 - adds r0, r6 - adds r1, r0 - ldrb r0, [r1] - bl sub_8095FE8 - adds r5, r0, 0 - ldr r0, [r7] - ldr r1, [r0, 0x38] - str r1, [sp, 0x4] - adds r0, 0x4 - adds r1, r6, 0 - bl sub_8013800 - str r0, [sp, 0x4C] - ldrb r0, [r5] - cmp r0, 0x1 - bne _0802C06C - ldr r0, [r7] - adds r0, 0x4 - adds r1, r6, 0 - bl sub_8013800 - adds r4, r0, 0 - ldr r0, [r7] - ldr r3, [r0, 0x38] - movs r0, 0xA - adds r1, r4, 0 - movs r2, 0x6 - bl sub_803B6B0 - bl GetPlayerPokemonStruct - adds r1, r0, 0 - mov r0, r9 - bl PrintPokeNameToBuffer - ldrb r0, [r5, 0x5] - bl GetPokemonMailHeadline - adds r1, r0, 0 - mov r0, r8 - mov r2, r9 - bl sprintf_2 - ldr r0, [r7] - ldr r3, [r0, 0x38] - movs r0, 0 - str r0, [sp] - movs r0, 0x15 - adds r1, r4, 0 - mov r2, r8 - bl xxx_call_draw_string - b _0802C08E - .align 2, 0 -_0802C060: .4byte gUnknown_203B2D8 -_0802C064: .4byte gMailboxText -_0802C068: .4byte gAvailablePokemonNames -_0802C06C: - adds r0, r5, 0 - add r1, sp, 0x4 - bl sub_803B35C - adds r0, r5, 0 - bl sub_80968B0 - lsls r0, 24 - cmp r0, 0 - beq _0802C088 - mov r1, sp - adds r1, 0x47 - movs r0, 0x2 - strb r0, [r1] -_0802C088: - add r0, sp, 0x4 - bl sub_803B6D4 -_0802C08E: - adds r6, 0x1 - ldr r0, [r7] - movs r1, 0x1E - ldrsh r0, [r0, r1] - cmp r6, r0 - blt _0802BFE8 -_0802C09A: - ldr r0, _0802C0B4 - ldr r0, [r0] - ldr r0, [r0, 0x38] - bl sub_80073E0 - add sp, 0xDC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802C0B4: .4byte gUnknown_203B2D8 - thumb_func_end CreateMailMenu - - thumb_func_start CountEmptyMailSlots -CountEmptyMailSlots: - push {r4,r5,lr} - movs r5, 0 - movs r4, 0 -_0802C0BE: - lsls r0, r4, 24 - lsrs r0, 24 - bl IsMailSlotEmpty - lsls r0, 24 - cmp r0, 0 - bne _0802C0D6 - ldr r0, _0802C0E4 - ldr r0, [r0] - adds r0, r5 - strb r4, [r0] - adds r5, 0x1 -_0802C0D6: - adds r4, 0x1 - cmp r4, 0x3 - ble _0802C0BE - adds r0, r5, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0802C0E4: .4byte gUnknown_203B2D8 - thumb_func_end CountEmptyMailSlots - - thumb_func_start HasNoMailinMailbox -HasNoMailinMailbox: - push {r4,lr} - movs r4, 0 -_0802C0EC: - lsls r0, r4, 24 - lsrs r0, 24 - bl IsMailSlotEmpty - lsls r0, 24 - cmp r0, 0 - bne _0802C0FE - movs r0, 0 - b _0802C106 -_0802C0FE: - adds r4, 0x1 - cmp r4, 0x3 - ble _0802C0EC - movs r0, 0x1 -_0802C106: - pop {r4} - pop {r1} - bx r1 - thumb_func_end HasNoMailinMailbox - - thumb_func_start sub_802C10C -sub_802C10C: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - adds r4, r1, 0 - mov r8, r2 - bl sub_802C4A4 - lsls r0, 24 - cmp r0, 0 - beq _0802C126 - movs r0, 0 - b _0802C1CC -_0802C126: - ldr r5, _0802C1D8 - ldr r0, [r5] - cmp r0, 0 - bne _0802C138 - movs r0, 0xA8 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r5] -_0802C138: - ldr r0, [r5] - str r6, [r0, 0x3C] - lsls r1, r6, 1 - adds r1, r6 - lsls r1, 3 - adds r1, 0x44 - adds r1, r0, r1 - str r1, [r0, 0x40] - adds r0, 0x44 - bl sub_8006518 - ldr r1, [r5] - ldr r2, [r1, 0x3C] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, 0x44 - ldr r0, _0802C1DC - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldr r2, [r5] - ldr r1, [r2, 0x40] - adds r0, r2, 0 - adds r0, 0xA4 - str r0, [r1, 0x14] - cmp r4, 0 - beq _0802C186 - ldr r1, [r2, 0x3C] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r1, r2, 0 - adds r1, 0x4C - adds r1, r0 - ldr r0, [r4] - str r0, [r1] -_0802C186: - ldr r0, [r5] - ldr r0, [r0, 0x40] - mov r1, r8 - bl sub_8012D34 - bl ResetUnusedInputStruct - ldr r0, [r5] - adds r0, 0x44 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r4, [r5] - adds r4, 0x8 - bl sub_802C474 - adds r1, r0, 0 - adds r0, r4, 0 - mov r2, r8 - adds r3, r6, 0 - bl sub_8013848 - ldr r0, [r5] - ldr r1, _0802C1E0 - ldrh r1, [r1] - strh r1, [r0, 0x20] - adds r0, 0x8 - bl sub_8013984 - bl sub_802C328 - bl sub_802C39C - movs r0, 0x1 -_0802C1CC: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0802C1D8: .4byte gUnknown_203B2E0 -_0802C1DC: .4byte gUnknown_80DFCB4 -_0802C1E0: .4byte gUnknown_203B2E4 - thumb_func_end sub_802C10C - - thumb_func_start sub_802C1E4 -sub_802C1E4: - push {lr} - lsls r0, 24 - cmp r0, 0 - bne _0802C200 - ldr r0, _0802C1FC - ldr r0, [r0] - adds r0, 0x8 - bl sub_8013660 - movs r0, 0 - b _0802C266 - .align 2, 0 -_0802C1FC: .4byte gUnknown_203B2E0 -_0802C200: - ldr r0, _0802C218 - ldr r0, [r0] - adds r0, 0x8 - bl GetKeyPress - cmp r0, 0x2 - beq _0802C222 - cmp r0, 0x2 - bgt _0802C21C - cmp r0, 0x1 - beq _0802C22C - b _0802C240 - .align 2, 0 -_0802C218: .4byte gUnknown_203B2E0 -_0802C21C: - cmp r0, 0x4 - beq _0802C236 - b _0802C240 -_0802C222: - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _0802C266 -_0802C22C: - movs r0, 0 - bl PlayMenuSoundEffect - movs r0, 0x3 - b _0802C266 -_0802C236: - movs r0, 0x4 - bl PlayMenuSoundEffect - movs r0, 0x4 - b _0802C266 -_0802C240: - ldr r0, _0802C258 - ldr r0, [r0] - adds r0, 0x8 - movs r1, 0x1 - bl sub_80138B8 - lsls r0, 24 - cmp r0, 0 - bne _0802C25C - movs r0, 0 - b _0802C266 - .align 2, 0 -_0802C258: .4byte gUnknown_203B2E0 -_0802C25C: - bl sub_802C328 - bl sub_802C39C - movs r0, 0x1 -_0802C266: - pop {r1} - bx r1 - thumb_func_end sub_802C1E4 - - thumb_func_start sub_802C26C -sub_802C26C: - ldr r0, _0802C288 - ldr r1, [r0] - movs r0, 0x26 - ldrsh r2, [r1, r0] - movs r3, 0x24 - ldrsh r0, [r1, r3] - muls r0, r2 - movs r3, 0x20 - ldrsh r2, [r1, r3] - adds r0, r2 - adds r1, r0 - ldrb r0, [r1] - bx lr - .align 2, 0 -_0802C288: .4byte gUnknown_203B2E0 - thumb_func_end sub_802C26C - - thumb_func_start sub_802C28C -sub_802C28C: - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl ResetUnusedInputStruct - ldr r5, _0802C2D0 - ldr r0, [r5] - adds r0, 0x44 - movs r1, 0 - movs r2, 0 - bl sub_800641C - bl sub_802C474 - adds r1, r0, 0 - ldr r0, [r5] - strh r1, [r0, 0x2A] - adds r0, 0x8 - bl sub_8013984 - bl sub_802C328 - bl sub_802C39C - cmp r4, 0 - beq _0802C2CA - ldr r0, [r5] - adds r0, 0x8 - bl AddMenuCursorSprite -_0802C2CA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802C2D0: .4byte gUnknown_203B2E0 - thumb_func_end sub_802C28C - - thumb_func_start sub_802C2D4 -sub_802C2D4: - push {r4,r5,lr} - ldr r4, _0802C31C - ldr r2, [r4] - cmp r2, 0 - beq _0802C314 - ldr r1, _0802C320 - ldrh r0, [r2, 0x20] - strh r0, [r1] - ldr r0, [r2, 0x3C] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x44 - ldr r0, _0802C324 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x44 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0802C314: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802C31C: .4byte gUnknown_203B2E0 -_0802C320: .4byte gUnknown_203B2E4 -_0802C324: .4byte gUnknown_80DFC9C - thumb_func_end sub_802C2D4 - - thumb_func_start sub_802C328 -sub_802C328: - push {r4,lr} - ldr r4, _0802C398 - ldr r0, [r4] - ldrh r1, [r0, 0x28] - adds r0, 0xA4 - movs r2, 0 - strb r1, [r0] - ldr r0, [r4] - ldrh r1, [r0, 0x26] - adds r0, 0xA5 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xA6 - movs r1, 0xC - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xA7 - strb r2, [r0] - ldr r0, [r4] - movs r1, 0x22 - ldrsh r0, [r0, r1] - movs r1, 0x18 - bl sub_8009614 - adds r0, 0x2 - lsls r0, 16 - ldr r2, [r4] - ldr r3, [r2, 0x3C] - lsls r1, r3, 1 - adds r1, r3 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x52 - asrs r3, r0, 16 - lsrs r0, 16 - strh r0, [r1] - ldr r1, [r2, 0x3C] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r2, r0 - adds r3, 0x2 - adds r2, 0x54 - strh r3, [r2] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x44 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802C398: .4byte gUnknown_203B2E0 - thumb_func_end sub_802C328 - - thumb_func_start sub_802C39C -sub_802C39C: - push {r4-r7,lr} - sub sp, 0x60 - ldr r7, _0802C3F8 - ldr r0, [r7] - ldr r0, [r0, 0x3C] - bl sub_8008C54 - ldr r0, [r7] - ldr r0, [r0, 0x3C] - bl sub_80073B8 - ldr r0, [r7] - movs r1, 0x26 - ldrsh r4, [r0, r1] - lsls r4, 3 - adds r5, r4, 0 - adds r5, 0xA - ldr r2, _0802C3FC - ldr r3, [r0, 0x3C] - movs r0, 0 - str r0, [sp] - adds r0, r5, 0 - movs r1, 0 - bl xxx_call_draw_string - adds r4, 0x4 - ldr r1, [r7] - adds r0, r1, 0 - adds r0, 0xA6 - ldrb r0, [r0] - lsls r0, 3 - adds r5, r4, r0 - movs r3, 0x26 - ldrsh r2, [r1, r3] - adds r2, 0x1 - movs r0, 0x7 - str r0, [sp] - ldr r0, [r1, 0x3C] - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r1, 0 - movs r3, 0x2 - bl sub_8012BC4 - movs r6, 0 - b _0802C452 - .align 2, 0 -_0802C3F8: .4byte gUnknown_203B2E0 -_0802C3FC: .4byte gBulletinBoardText -_0802C400: - ldr r1, [r7] - movs r3, 0x26 - ldrsh r2, [r1, r3] - movs r3, 0x24 - ldrsh r0, [r1, r3] - muls r0, r2 - adds r0, r6 - adds r1, r0 - ldrb r5, [r1] - adds r0, r5, 0 - bl sub_8096574 - adds r4, r0, 0 - ldr r0, [r7] - ldr r1, [r0, 0x3C] - str r1, [sp, 0x8] - adds r0, 0x8 - adds r1, r6, 0 - bl sub_8013800 - str r0, [sp, 0x50] - adds r0, r4, 0 - add r1, sp, 0x8 - bl sub_803B35C - adds r0, r5, 0 - bl sub_8096574 - bl sub_80968B0 - lsls r0, 24 - cmp r0, 0 - beq _0802C44A - mov r1, sp - adds r1, 0x4B - movs r0, 0x2 - strb r0, [r1] -_0802C44A: - add r0, sp, 0x8 - bl sub_803B6D4 - adds r6, 0x1 -_0802C452: - ldr r0, [r7] - movs r1, 0x22 - ldrsh r0, [r0, r1] - cmp r6, r0 - blt _0802C400 - ldr r0, _0802C470 - ldr r0, [r0] - ldr r0, [r0, 0x3C] - bl sub_80073E0 - add sp, 0x60 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802C470: .4byte gUnknown_203B2E0 - thumb_func_end sub_802C39C - - .align 2,0 diff --git a/include/constants/mailbox.h b/include/constants/mailbox.h index 6a918621f..8f961f501 100644 --- a/include/constants/mailbox.h +++ b/include/constants/mailbox.h @@ -2,5 +2,6 @@ #define GUARD_CONSTANTS_MAILBOX_H #define MAX_ACCEPTED_JOBS 8 +#define NUM_MAILBOX_SLOTS 4 #endif // GUARD_CONSTANTS_MAILBOX_H diff --git a/ld_script.txt b/ld_script.txt index 436c87aa7..69e4a4a42 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -125,7 +125,7 @@ SECTIONS { src/wonder_mail.o(.text); src/thank_you_wonder_mail.o(.text); src/wonder_mail_2.o(.text); - asm/wonder_mail_2.o(.text); + src/wonder_mail_2_mid.o(.text); src/wonder_mail_2_1.o(.text); asm/wonder_mail_802C860.o(.text); src/wonder_mail_3.o(.text); diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 3359a6100..11e5a1cb5 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -643,7 +643,7 @@ void sub_802B880(void) void sub_802B8D4(void) { s32 iVar2; - s32 retvar; + s32 y; s32 new_index; u8 mailIndex; @@ -654,12 +654,12 @@ void sub_802B8D4(void) sub_8012BC4(((gUnknown_80DFBE8[2] << 3) + 4), 0, gUnknown_203B2CC->unk56 + 1, 2, 7, gUnknown_203B2CC->unk6C); for(iVar2 = 0; iVar2 < gUnknown_203B2CC->unk52; iVar2++) { - retvar = sub_8013800(&gUnknown_203B2CC->unk38, iVar2); + y = sub_8013800(&gUnknown_203B2CC->unk38, iVar2); new_index = (gUnknown_203B2CC->unk56 * gUnknown_203B2CC->unk54) + iVar2; mailIndex = gUnknown_203B2CC->receivedNewsletters[new_index]; - sub_803B6B0(0xA, retvar, 6, gUnknown_203B2CC->unk6C); + sub_803B6B0(0xA, y, 6, gUnknown_203B2CC->unk6C); sub_802BC7C(); - xxx_format_and_draw(0x15, retvar, GetPokemonMailHeadline(mailIndex), gUnknown_203B2CC->unk6C, 0); + xxx_format_and_draw(0x15, y, GetPokemonMailHeadline(mailIndex), gUnknown_203B2CC->unk6C, 0); } sub_80073E0(gUnknown_203B2CC->unk6C); } @@ -953,3 +953,63 @@ void sub_802BEDC(void) gUnknown_203B2D8 = NULL; } } + +NAKED +void sub_802BF30(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _0802BF9C\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xA0\n" + "\tmovs r2, 0\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xA1\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xA2\n" + "\tmovs r1, 0xC\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xA3\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tmovs r1, 0x1E\n" + "\tldrsh r0, [r0, r1]\n" + "\tmovs r1, 0x18\n" + "\tbl sub_8009614\n" + "\tadds r0, 0x2\n" + "\tlsls r0, 16\n" + "\tldr r2, [r4]\n" + "\tldr r3, [r2, 0x38]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r1, r2, r1\n" + "\tadds r1, 0x4E\n" + "\tasrs r3, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r2, 0x38]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 3\n" + "\tadds r2, r0\n" + "\tadds r3, 0x2\n" + "\tadds r2, 0x50\n" + "\tstrh r3, [r2]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x40\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_0802BF9C: .4byte gUnknown_203B2D8" + ); +} diff --git a/src/wonder_mail_2_1.c b/src/wonder_mail_2_1.c index 0fc0ea174..c02dedccf 100644 --- a/src/wonder_mail_2_1.c +++ b/src/wonder_mail_2_1.c @@ -5,6 +5,12 @@ #include "text.h" #include "menu.h" +struct unkStruct_802C39C +{ + /* 0x0 */ u32 local_6c[15]; + /* 0x3C */ u8 local_29[12]; + /* 0x48 */ u32 local_24[4]; +}; struct unkStruct_203B2E8 { @@ -143,7 +149,7 @@ extern s32 sub_8013800(void *, u32); extern void sub_803B35C(void *, u32 *); extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); -extern void sub_803B6D4(u32 *); +extern void sub_803B6D4(void *); extern void sub_8013984(u32 *); extern void sub_802C6DC(void); @@ -356,8 +362,7 @@ void sub_802C750(void) int iVar2; s32 r4; s32 r5; - u32 auStack104 [18]; - u32 uStack32[4]; + struct unkStruct_802C39C local; sub_8008C54(gUnknown_203B2E8->unk3C); sub_80073B8(gUnknown_203B2E8->unk3C); @@ -374,10 +379,10 @@ void sub_802C750(void) do { uVar1 = GetJobSlotInfo(gUnknown_203B2E8->unk0[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + iVar2]); - auStack104[0] = gUnknown_203B2E8->unk3C; - uStack32[0] = sub_8013800(&gUnknown_203B2E8->unk8,iVar2); - sub_803B35C(uVar1,auStack104); - sub_803B6D4(auStack104); + local.local_6c[0] = gUnknown_203B2E8->unk3C; + local.local_24[0] = sub_8013800(&gUnknown_203B2E8->unk8,iVar2); + sub_803B35C(uVar1,local.local_6c); + sub_803B6D4(&local); iVar2++; } while( iVar2 < gUnknown_203B2E8->unk22); sub_80073E0(gUnknown_203B2E8->unk3C); diff --git a/src/wonder_mail_2_mid.c b/src/wonder_mail_2_mid.c new file mode 100644 index 000000000..2e5bd3627 --- /dev/null +++ b/src/wonder_mail_2_mid.c @@ -0,0 +1,358 @@ +#include "global.h" +#include "constants/mailbox.h" +#include "code_800D090.h" +#include "input.h" +#include "memory.h" +#include "text.h" +#include "pokemon_mail.h" + +bool8 IsMailSlotEmpty(u8); +extern void sub_8013984(void *); +extern void sub_8013848(u32 *, s32, u32, u32); +extern s32 sub_802C474(void); +extern void sub_8012D34(struct UnkTextStruct2 *, u32); +extern void sub_802C328(void); +extern void sub_802C39C(void); +extern void PlayMenuSoundEffect(u32); +extern void sub_8013660(u32 *); +extern s32 GetKeyPress(u32 *); +extern bool8 sub_80138B8(u32 *, u32); +extern void AddMenuCursorSprite(u32 *); +extern u8 sub_802C4A4(void); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); + +extern s32 sub_8013800(u32 *, s32); +extern u8 *sub_8096574(u32); +extern void sub_803B35C(u8 *, u32 *); +extern u8 gBulletinBoardText[]; +extern u8 sub_80968B0(u8 *); +extern void sub_803B6D4(void *); +extern void xxx_call_draw_string(s32, s32, u8 *, s32, s32); +extern void sub_8012BC4(s32, s32, s32, s32 ,s32 ,s32); + + +struct unkStruct_203B2D8 +{ + // size: 0xA4 + u8 unk0[4]; + u32 unk4; + u8 fill8[0x1C - 0x8]; + s16 unk1C; + s16 unk1E; + s16 unk20; + s16 unk22; + s16 fill24; + /* 0x26 */ s16 emptyMailSlots; + u8 fill28[0x38 - 0x28]; + u32 unk38; + struct UnkTextStruct2 *unk3C; + struct UnkTextStruct2 unk40[4]; + u8 unkA0[4]; +}; + + +extern struct unkStruct_203B2D8 *gUnknown_203B2D8; + +struct unkStruct_203B2E0 +{ + // size: 0xA8 + u8 unk0[0x8]; + u32 unk8; + u8 unkC[0x20 - 0xC]; + s16 unk20; + s16 unk22; + s16 unk24; + s16 unk26; + s16 unk28; + s16 unk2A; + u8 fill22[0x3C - 0x2C]; + s32 unk3C; + struct UnkTextStruct2 *unk40; + struct UnkTextStruct2 unk44[4]; + u8 unkA4[4]; +}; +extern struct unkStruct_203B2E0 *gUnknown_203B2E0; + +struct unkStruct_802C39C +{ + /* 0x0 */ u32 local_6c[15]; + /* 0x3C */ u8 local_29[12]; + /* 0x48 */ u32 local_24[4]; +}; + + +extern struct UnkTextStruct2 gUnknown_80DFCB4; +extern struct UnkTextStruct2 gUnknown_80DFC9C; + +extern u16 gUnknown_203B2E4; + +extern u8 *sub_8095FE8(u8); +extern u8 sub_80968B0(u8 *); +extern void sub_803B35C(u8 *, u32 *); +extern void sub_803B6D4(void *); +extern struct PokemonStruct *GetPlayerPokemonStruct(void); +extern u8 gMailboxText[]; +extern u8 gAvailablePokemonNames[]; +extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); +extern void sub_803B6B0(u32, u32, u32, u32); + +void CreateMailMenu(void) +{ + u8 *pcVar2; + s32 y; + s32 iVar5; + struct unkStruct_802C39C local; + u8 buffer [128]; + + sub_8008C54(gUnknown_203B2D8->unk38); + sub_80073B8(gUnknown_203B2D8->unk38); + xxx_call_draw_string(gUnknown_203B2D8->unk22 * 8 + 10,0,gMailboxText,gUnknown_203B2D8->unk38,0); + iVar5 = 0; + if (iVar5 < gUnknown_203B2D8->unk1E) { + do { + pcVar2 = sub_8095FE8(gUnknown_203B2D8->unk0[(gUnknown_203B2D8->unk22 * gUnknown_203B2D8->unk20) + iVar5]); + local.local_6c[0] = gUnknown_203B2D8->unk38; + local.local_24[0] = sub_8013800(&gUnknown_203B2D8->unk4, iVar5); + if (*pcVar2 == 1) { + y = sub_8013800(&gUnknown_203B2D8->unk4, iVar5); + sub_803B6B0(10,y,6,gUnknown_203B2D8->unk38); + PrintPokeNameToBuffer(gAvailablePokemonNames, GetPlayerPokemonStruct()); + sprintf_2(buffer, GetPokemonMailHeadline(pcVar2[5]), gAvailablePokemonNames); + xxx_call_draw_string(0x15,y,buffer,gUnknown_203B2D8->unk38,0); + } + else { + sub_803B35C(pcVar2,local.local_6c); + if (sub_80968B0(pcVar2) != 0) { + local.local_29[7] = 2; + } + sub_803B6D4(&local); + } + iVar5++; + } while (iVar5 < gUnknown_203B2D8->unk1E); + } + sub_80073E0(gUnknown_203B2D8->unk38); +} + +s32 CountEmptyMailSlots(void) +{ + s32 mailSlots; + s32 index; + + mailSlots = 0; + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) + { + if(!IsMailSlotEmpty(index)) + { + gUnknown_203B2D8->unk0[mailSlots] = index; + mailSlots++; + } + } + return mailSlots; +} + +bool8 HasNoMailinMailbox(void) +{ + s32 index; + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) + { + if(!IsMailSlotEmpty(index)) + return FALSE; + } + return TRUE; +} + + +bool8 sub_802C10C(s32 param_1,struct UnkTextStruct2_sub *param_2,s32 param_3) +{ + if (sub_802C4A4() != 0) { + return FALSE; + } + else + { + if (gUnknown_203B2E0 == NULL) { + gUnknown_203B2E0 = MemoryAlloc(sizeof(struct unkStruct_203B2E0),8); + } + gUnknown_203B2E0->unk3C = param_1; + gUnknown_203B2E0->unk40 = &gUnknown_203B2E0->unk44[param_1]; + sub_8006518(gUnknown_203B2E0->unk44); + + gUnknown_203B2E0->unk44[gUnknown_203B2E0->unk3C] = gUnknown_80DFCB4; + gUnknown_203B2E0->unk40->unk14 = gUnknown_203B2E0->unkA4; + if (param_2 != NULL) { + gUnknown_203B2E0->unk44[gUnknown_203B2E0->unk3C].unk08 = *param_2; + } + sub_8012D34(gUnknown_203B2E0->unk40,param_3); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2E0->unk44,1,1); + sub_8013848(&gUnknown_203B2E0->unk8,sub_802C474(),param_3,param_1); + gUnknown_203B2E0->unk20 = gUnknown_203B2E4; + sub_8013984(&gUnknown_203B2E0->unk8); + sub_802C328(); + sub_802C39C(); + return TRUE; + } +} + +u32 sub_802C1E4(u8 param_1) +{ + if (param_1 == '\0') { + sub_8013660(&gUnknown_203B2E0->unk8); + return 0; + } + else { + switch(GetKeyPress(&gUnknown_203B2E0->unk8)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + case 4: + PlayMenuSoundEffect(4); + return 4; + default: + if (sub_80138B8(&gUnknown_203B2E0->unk8,1)) { + sub_802C328(); + sub_802C39C(); + return 1; + } + else { + return 0; + } + } + } +} + +u8 sub_802C26C(void) +{ + return gUnknown_203B2E0->unk0[(gUnknown_203B2E0->unk26 * gUnknown_203B2E0->unk24) + gUnknown_203B2E0->unk20]; +} + +void sub_802C28C(u32 r0) +{ + u8 r0_u8; + + r0_u8 = r0; + + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2E0->unk44, 0, 0); + gUnknown_203B2E0->unk2A = sub_802C474(); + sub_8013984(&gUnknown_203B2E0->unk8); + sub_802C328(); + sub_802C39C(); + if(r0_u8) + AddMenuCursorSprite(&gUnknown_203B2E0->unk8); +} + +void sub_802C2D4(void) +{ + if(gUnknown_203B2E0 != NULL) + { + gUnknown_203B2E4 = gUnknown_203B2E0->unk20; + gUnknown_203B2E0->unk44[gUnknown_203B2E0->unk3C] = gUnknown_80DFC9C; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2E0->unk44, 1, 1); + MemoryFree(gUnknown_203B2E0); + gUnknown_203B2E0 = NULL; + } +} + +NAKED +void sub_802C328(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _0802C398\n" + "\tldr r0, [r4]\n" + "\tldrh r1, [r0, 0x28]\n" + "\tadds r0, 0xA4\n" + "\tmovs r2, 0\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tldrh r1, [r0, 0x26]\n" + "\tadds r0, 0xA5\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xA6\n" + "\tmovs r1, 0xC\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xA7\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tmovs r1, 0x22\n" + "\tldrsh r0, [r0, r1]\n" + "\tmovs r1, 0x18\n" + "\tbl sub_8009614\n" + "\tadds r0, 0x2\n" + "\tlsls r0, 16\n" + "\tldr r2, [r4]\n" + "\tldr r3, [r2, 0x3C]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r1, r2, r1\n" + "\tadds r1, 0x52\n" + "\tasrs r3, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r2, 0x3C]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 3\n" + "\tadds r2, r0\n" + "\tadds r3, 0x2\n" + "\tadds r2, 0x54\n" + "\tstrh r3, [r2]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x44\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_0802C398: .4byte gUnknown_203B2E0"); +} + +void sub_802C39C(void) +{ + u32 uVar1; + u8 *uVar3; + s32 iVar4; + s32 iVar5; + s32 iVar6; + struct unkStruct_802C39C local; + + sub_8008C54(gUnknown_203B2E0->unk3C); + sub_80073B8(gUnknown_203B2E0->unk3C); + iVar4 = gUnknown_203B2E0->unk26 * 8; + iVar5 = iVar4; + iVar5 += 10; + xxx_call_draw_string(iVar5,0,gBulletinBoardText,gUnknown_203B2E0->unk3C,0); + iVar4 += 4; + iVar5 = iVar4 + gUnknown_203B2E0->unkA4[2] * 8; + sub_8012BC4(iVar5,0,gUnknown_203B2E0->unk26 + 1,2,7,gUnknown_203B2E0->unk3C); + + iVar6 = 0; + if(iVar6 < gUnknown_203B2E0->unk22) + do + { + uVar1 = (gUnknown_203B2E0->unk0[gUnknown_203B2E0->unk26 * gUnknown_203B2E0->unk24 + iVar6]); + uVar3 = sub_8096574(uVar1); + local.local_6c[0] = gUnknown_203B2E0->unk3C; + local.local_24[0] = sub_8013800(&gUnknown_203B2E0->unk8,iVar6); + sub_803B35C(uVar3,local.local_6c); + if (sub_80968B0(sub_8096574(uVar1)) != '\0') { + local.local_29[7] = 2; + } + sub_803B6D4(&local); + iVar6++; + } while (iVar6 < gUnknown_203B2E0->unk22); + sub_80073E0(gUnknown_203B2E0->unk3C); +} From b0217dd7786f5ba1d362489ed6440edac4758ae3 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 12 Jun 2022 07:46:47 -0700 Subject: [PATCH 07/11] document Fanfare/SoundEffect funcs --- include/music.h | 4 ++-- src/music.c | 8 ++++---- src/music_pre.c | 20 ++++++++++---------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/include/music.h b/include/music.h index a8710e19f..c086c8968 100644 --- a/include/music.h +++ b/include/music.h @@ -6,8 +6,8 @@ void StartBGMusicVSync(void); u8 sub_800CA38(u32 songIndex); void StartNewBGM(u16 songIndex); bool8 IsBGSong(u32 songIndex); -bool8 sub_800CAAC(u32 songIndex); -bool8 sub_800CACC(u32 songIndex); +bool8 IsSoundEffect(u32 songIndex); +bool8 IsFanfare(u32 songIndex); u16 GetMusicPlayerIndex(u16 songIndex); bool8 sub_800CAF0(u16 songIndex); void StartNewBGM(u16 songIndex); diff --git a/src/music.c b/src/music.c index 8d060254d..79502a965 100644 --- a/src/music.c +++ b/src/music.c @@ -107,14 +107,14 @@ u8 sub_800CA38(u32 songIndex) return 1; } } - if(sub_800CACC(songIndex)) + if(IsFanfare(songIndex)) { if(GetMusicPlayerIndex(songIndex) == 1) { return 1; } } - else if(sub_800CAAC(songIndex)) + else if(IsSoundEffect(songIndex)) { if(GetMusicPlayerIndex(songIndex) > 1) { @@ -137,7 +137,7 @@ bool8 IsBGSong(u32 songIndex) return FALSE; } -bool8 sub_800CAAC(u32 songIndex) +bool8 IsSoundEffect(u32 songIndex) { if(songIndex - 300 <= 639) { @@ -146,7 +146,7 @@ bool8 sub_800CAAC(u32 songIndex) return FALSE; } -bool8 sub_800CACC(u32 songIndex) +bool8 IsFanfare(u32 songIndex) { if(songIndex - 200 <= 19) { diff --git a/src/music_pre.c b/src/music_pre.c index d1ec4f523..b93ddbfa5 100644 --- a/src/music_pre.c +++ b/src/music_pre.c @@ -58,7 +58,7 @@ struct unkStruct_3000FD8 }; extern struct unkStruct_3000FD8 gUnknown_3000FD8[8]; -extern struct unkStruct_3000FD8 gUnknown_3000FE8[4]; +extern struct unkStruct_3000FD8 gUnknown_3000FE8[8]; extern u8 gUnknown_202D7FE; extern u16 gBldCnt; @@ -595,7 +595,7 @@ void sub_800C074(u16 SongIndex, u16 param_2) if (param_2 > 256) param_2 = 256; - if (sub_800CACC(SongIndex)) + if (IsFanfare(SongIndex)) { if (GetMusicPlayerIndex(SongIndex) == 1) { interrupt_flag = DisableInterrupts(); @@ -668,7 +668,7 @@ void sub_800C074(u16 SongIndex, u16 param_2) } else { - if (!sub_800CAAC(SongIndex)) + if (!IsSoundEffect(SongIndex)) return; msVar = GetMusicPlayerIndex(SongIndex); preload = &gUnknown_3000FD8[msVar]; // need to load this before comparison to match @@ -706,7 +706,7 @@ void sub_800C214(u16 songIndex, u16 volume) volume = 256; } - if ((!sub_800CACC(songIndex)) && (sub_800CAAC(songIndex))) { + if ((!IsFanfare(songIndex)) && (IsSoundEffect(songIndex))) { msVar = GetMusicPlayerIndex(songIndex); info = gMPlayTable[msVar].info; preload = &gUnknown_3000FD8[msVar]; @@ -750,7 +750,7 @@ void sub_800C298(u16 songIndex) EnableInterrupts(); } } - else if (sub_800CAAC(songIndex)) + else if (IsSoundEffect(songIndex)) { uVar2 = GetMusicPlayerIndex(songIndex); puVar6 = gMPlayTable[uVar2].info; @@ -785,7 +785,7 @@ void sub_800C298(u16 songIndex) EnableInterrupts(); } } - else if (sub_800CACC(songIndex)) + else if (IsFanfare(songIndex)) { cVar4 = DisableInterrupts(); if (gUnknown_202D690 != 0) { @@ -848,7 +848,7 @@ void sub_800C3F8(u16 songIndex, u16 speed) } } else { - if (sub_800CAAC(songIndex)) { + if (IsSoundEffect(songIndex)) { uVar8 = GetMusicPlayerIndex(songIndex); preload = &gUnknown_3000FD8[uVar8]; puVar5 = gMPlayTable[uVar8].info; @@ -884,7 +884,7 @@ void sub_800C3F8(u16 songIndex, u16 speed) EnableInterrupts(); } } - else if (sub_800CACC(songIndex)) { + else if (IsFanfare(songIndex)) { cVar4 = DisableInterrupts(); if ((gUnknown_202D690 != 0) && (gUnknown_202D68E == songIndex)) { if (sub_800CAF0(1) != '\0') { @@ -913,14 +913,14 @@ bool8 sub_800C5D0(u16 songIndex) songIndex_u32_2 = songIndex_u32; - if (sub_800CACC(songIndex_u32)) { + if (IsFanfare(songIndex_u32)) { if ((gUnknown_202D690 != 0) && (gUnknown_202D68E == songIndex_u32)) { return TRUE; } } else { - if (sub_800CAAC(songIndex_u32)) { + if (IsSoundEffect(songIndex_u32)) { uVar3 = GetMusicPlayerIndex(songIndex_u32); preload = &gUnknown_3000FD8[uVar3]; if ((1 < uVar3) && (preload->songIndex == songIndex_u32_2)) { From 10248ae24815cdb705dbe6e1485c88bb577af5da Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 12 Jun 2022 18:18:09 -0700 Subject: [PATCH 08/11] decomp most funcs with CreateRescueTitle --- asm/code_803B050.s | 6 +- asm/code_803C1D0.s | 8 +- asm/code_80958E8.s | 6 +- asm/friend_rescue.s | 2 +- asm/ground_script.s | 2 +- asm/wonder_mail_3_mid.s | 2 +- asm/wonder_mail_4.s | 233 ------------------------------------ asm/wonder_mail_802C860.s | 2 +- include/sub_8095228.h | 3 +- src/post_office_guide.c | 19 +-- src/rescue_password_menu.c | 2 +- src/thank_you_wonder_mail.c | 4 +- src/wonder_mail.c | 2 +- src/wonder_mail_2.c | 6 +- src/wonder_mail_2_1.c | 25 ++-- src/wonder_mail_2_mid.c | 53 ++++---- src/wonder_mail_3_mid.c | 32 ++--- src/wonder_mail_4.c | 180 ++++++++++++++++++++++++++-- 18 files changed, 264 insertions(+), 323 deletions(-) diff --git a/asm/code_803B050.s b/asm/code_803B050.s index 2fc580b71..27ba3abb8 100644 --- a/asm/code_803B050.s +++ b/asm/code_803B050.s @@ -884,8 +884,8 @@ sub_803B6B0: _0803B6D0: .4byte gUnknown_80E8B94 thumb_func_end sub_803B6B0 - thumb_func_start sub_803B6D4 -sub_803B6D4: + thumb_func_start CreateRescueTitle +CreateRescueTitle: push {r4-r7,lr} sub sp, 0x144 adds r7, r0, 0 @@ -1204,7 +1204,7 @@ _0803B968: pop {r4-r7} pop {r0} bx r0 - thumb_func_end sub_803B6D4 + thumb_func_end CreateRescueTitle thumb_func_start CreateRescueDescription CreateRescueDescription: diff --git a/asm/code_803C1D0.s b/asm/code_803C1D0.s index fb6c7cf51..2fff797c6 100644 --- a/asm/code_803C1D0.s +++ b/asm/code_803C1D0.s @@ -37,8 +37,8 @@ sub_803C1F0: _0803C1FC: .4byte gUnknown_80E8BF8 thumb_func_end sub_803C1F0 - thumb_func_start sub_803C200 -sub_803C200: + thumb_func_start GetDungeonTeamRankPts +GetDungeonTeamRankPts: push {lr} lsls r1, 24 lsrs r1, 24 @@ -51,7 +51,7 @@ sub_803C200: bx r1 .align 2, 0 _0803C218: .4byte gUnknown_80E80A0 - thumb_func_end sub_803C200 + thumb_func_end GetDungeonTeamRankPts thumb_func_start sub_803C21C sub_803C21C: @@ -225,7 +225,7 @@ _0803C35A: strh r0, [r4, 0x14] ldrb r1, [r6, 0x1] adds r0, r5, 0 - bl sub_803C200 + bl GetDungeonTeamRankPts str r0, [r4, 0x24] pop {r3} mov r8, r3 diff --git a/asm/code_80958E8.s b/asm/code_80958E8.s index 818d7db69..ff49585cc 100644 --- a/asm/code_80958E8.s +++ b/asm/code_80958E8.s @@ -2009,8 +2009,8 @@ _080969C2: bx r1 thumb_func_end GetNumAcceptedJobs - thumb_func_start sub_80969D0 -sub_80969D0: + thumb_func_start CountJobsinDungeon +CountJobsinDungeon: push {r4-r6,lr} lsls r0, 24 lsrs r6, r0, 24 @@ -2041,7 +2041,7 @@ _080969FA: pop {r4-r6} pop {r1} bx r1 - thumb_func_end sub_80969D0 + thumb_func_end CountJobsinDungeon thumb_func_start sub_8096A08 sub_8096A08: diff --git a/asm/friend_rescue.s b/asm/friend_rescue.s index 44b8b0882..660e78d01 100644 --- a/asm/friend_rescue.s +++ b/asm/friend_rescue.s @@ -1453,7 +1453,7 @@ _08033512: strb r1, [r0] adds r0, r2, 0x4 movs r1, 0 - bl sub_803C200 + bl GetDungeonTeamRankPts ldr r1, [r4] movs r3, 0xAC lsls r3, 3 diff --git a/asm/ground_script.s b/asm/ground_script.s index d1927840a..8992effcc 100644 --- a/asm/ground_script.s +++ b/asm/ground_script.s @@ -7349,7 +7349,7 @@ _080A1730: bl sub_80A2740 lsls r0, 24 lsrs r0, 24 - bl sub_80969D0 + bl CountJobsinDungeon movs r1, 0 cmp r0, 0 ble _080A1750 diff --git a/asm/wonder_mail_3_mid.s b/asm/wonder_mail_3_mid.s index 90c0c250a..6add33aa8 100644 --- a/asm/wonder_mail_3_mid.s +++ b/asm/wonder_mail_3_mid.s @@ -379,7 +379,7 @@ _0802FCA8: cmp r5, 0 bne _0802FCCA mov r0, r9 - bl sub_80969D0 + bl CountJobsinDungeon cmp r0, 0 ble _0802FCCA ldr r0, [r4] diff --git a/asm/wonder_mail_4.s b/asm/wonder_mail_4.s index 404c7cfde..df3277c4f 100644 --- a/asm/wonder_mail_4.s +++ b/asm/wonder_mail_4.s @@ -5,239 +5,6 @@ .text - thumb_func_start sub_80308A0 -sub_80308A0: - push {r4,lr} - ldr r4, _08030928 - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x44 - ldrh r1, [r1] - adds r0, 0xC0 - movs r2, 0 - strb r1, [r0] - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x42 - ldrh r1, [r1] - adds r0, 0xC1 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xC2 - movs r1, 0xC - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xC3 - strb r2, [r0] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x60 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - movs r1, 0x3E - ldrsh r0, [r0, r1] - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - lsls r0, 16 - ldr r2, [r4] - ldr r3, [r2, 0x58] - lsls r1, r3, 1 - adds r1, r3 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x6E - asrs r3, r0, 16 - lsrs r0, 16 - strh r0, [r1] - ldr r1, [r2, 0x58] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r2, r0 - adds r3, 0x2 - adds r2, 0x70 - strh r3, [r2] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x60 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08030928: .4byte gUnknown_203B320 - thumb_func_end sub_80308A0 - - thumb_func_start sub_803092C -sub_803092C: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x60 - ldr r7, _08030A24 - ldr r0, [r7] - ldr r0, [r0, 0x58] - bl sub_8008C54 - ldr r0, [r7] - ldr r0, [r0, 0x58] - bl sub_80073B8 - ldr r1, [r7] - adds r0, r1, 0 - adds r0, 0x42 - movs r2, 0 - ldrsh r4, [r0, r2] - lsls r4, 3 - adds r5, r4, 0 - adds r5, 0xA - ldr r2, _08030A28 - ldr r0, [r1, 0x20] - lsls r0, 2 - adds r0, r2 - ldr r2, [r0] - ldr r3, [r1, 0x58] - movs r0, 0 - str r0, [sp] - adds r0, r5, 0 - movs r1, 0 - bl xxx_call_draw_string - adds r4, 0x4 - ldr r3, [r7] - adds r0, r3, 0 - adds r0, 0xC2 - ldrb r0, [r0] - lsls r0, 3 - adds r5, r4, r0 - adds r0, r3, 0 - adds r0, 0x42 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r2, 0x1 - movs r0, 0x7 - str r0, [sp] - ldr r0, [r3, 0x58] - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r1, 0 - movs r3, 0x1 - bl sub_8012BC4 - movs r6, 0 - ldr r0, [r7] - movs r2, 0x3E - ldrsh r0, [r0, r2] - cmp r6, r0 - bge _08030A56 - mov r9, r7 - mov r8, r6 - add r7, sp, 0x8 - mov r5, sp - adds r5, 0x4B -_080309B0: - mov r3, r9 - ldr r1, [r3] - adds r0, r1, 0 - adds r0, 0x42 - movs r3, 0 - ldrsh r2, [r0, r3] - subs r0, 0x2 - movs r3, 0 - ldrsh r0, [r0, r3] - muls r0, r2 - adds r0, r6 - adds r1, r0 - ldrb r0, [r1] - bl sub_8095228 - adds r4, r0, 0 - mov r1, r9 - ldr r0, [r1] - ldr r1, [r0, 0x58] - str r1, [sp, 0x8] - adds r0, 0x24 - adds r1, r6, 0 - bl sub_8013800 - str r0, [sp, 0x50] - add r1, sp, 0x48 - movs r0, 0x7 - strb r0, [r1] - mov r0, sp - adds r0, 0x4A - mov r2, r8 - strb r2, [r0] - add r0, sp, 0x4C - strb r2, [r0] - adds r0, r4, 0x4 - str r0, [sp, 0x10] - adds r0, 0x10 - str r0, [sp, 0x14] - ldrh r0, [r4, 0xC] - strh r0, [r7, 0x10] - ldrh r0, [r4, 0xC] - strh r0, [r7, 0x12] - strb r2, [r7, 0x14] - subs r1, 0x12 - movs r0, 0x5 - strb r0, [r1] - ldrb r0, [r4] - cmp r0, 0x4 - beq _08030A32 - cmp r0, 0x4 - bgt _08030A2C - cmp r0, 0x2 - bgt _08030A3E - cmp r0, 0x1 - blt _08030A3E - movs r0, 0x1 - strb r0, [r5] - b _08030A42 - .align 2, 0 -_08030A24: .4byte gUnknown_203B320 -_08030A28: .4byte gUnknown_80E086C -_08030A2C: - cmp r0, 0x5 - beq _08030A38 - b _08030A3E -_08030A32: - movs r0, 0x3 - strb r0, [r5] - b _08030A42 -_08030A38: - movs r0, 0x4 - strb r0, [r5] - b _08030A42 -_08030A3E: - mov r3, r8 - strb r3, [r5] -_08030A42: - add r0, sp, 0x8 - bl sub_803B6D4 - adds r6, 0x1 - mov r1, r9 - ldr r0, [r1] - movs r2, 0x3E - ldrsh r0, [r0, r2] - cmp r6, r0 - blt _080309B0 -_08030A56: - ldr r0, _08030A70 - ldr r0, [r0] - ldr r0, [r0, 0x58] - bl sub_80073E0 - add sp, 0x60 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08030A70: .4byte gUnknown_203B320 - thumb_func_end sub_803092C - thumb_func_start sub_8030A74 sub_8030A74: push {r4,r5,lr} diff --git a/asm/wonder_mail_802C860.s b/asm/wonder_mail_802C860.s index 33144d736..036c51a78 100644 --- a/asm/wonder_mail_802C860.s +++ b/asm/wonder_mail_802C860.s @@ -736,7 +736,7 @@ _0802D034: ldr r0, [r4, 0x14] str r0, [sp, 0x54] add r0, sp, 0x8 - bl sub_803B6D4 + bl CreateRescueTitle adds r5, 0x1 _0802D076: ldr r0, [r6] diff --git a/include/sub_8095228.h b/include/sub_8095228.h index 9541d206b..1dec21a72 100644 --- a/include/sub_8095228.h +++ b/include/sub_8095228.h @@ -7,8 +7,7 @@ struct unkStruct_8095228 /* 0x1 */ u8 missionType; // mission type /* 0x2 */ u8 unk2; /* 0x3 */ u8 unk3; - /* 0x4 */ u8 dungeon; // dungeon - /* 0x5 */ u8 floor; // floor + /* 0x4 */ struct DungeonLocation dungeon; // dungeon /* 0x8 */ u32 unk8; /* 0xC */ s16 clientSpecies; // client pokemon /* 0xE */ s16 targetSpecies; // target diff --git a/src/post_office_guide.c b/src/post_office_guide.c index ca3ceb2d1..a40b8a767 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -2,6 +2,7 @@ #include "pokemon.h" #include "file_system.h" #include "input.h" +#include "constants/mailbox.h" #include "menu.h" #include "memory.h" #include "text.h" @@ -185,7 +186,7 @@ extern void DisplayMissionObjectives(); extern u8 *GetCurrentMissionText(s16 r0); extern u8 *sub_80975DC(u32 r0); extern u8 sub_8099360(u8 *); -extern u8 sub_8099394(u8 *); +extern u8 sub_8099394(volatile u8 *); extern struct WonderMail *GetJobSlotInfo(u8); extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32); extern void sub_80073B8(u32); @@ -208,7 +209,7 @@ extern void ReturntoGoRescueMenu(); extern void HandlePostOfficeHelpGetHelpMenuSelection(); extern void ReturnToGetHelpMenu(); extern s32 sub_80144A4(s32 *); -extern s32 sub_80969D0(u8); +extern s32 CountJobsinDungeon(u8); extern void sub_8012D08(struct UnkTextStruct2 *, s32); @@ -582,7 +583,7 @@ void sub_8031A84(void) sub_8006518(gUnknown_203B330->unk18); gUnknown_203B330->unk18[gUnknown_203B330->unk10] = gUnknown_80E1F18; if (gUnknown_203B330->unkC == 2) { - iVar1 = sub_80969D0(gUnknown_203B330->dungeonIndex); + iVar1 = CountJobsinDungeon(gUnknown_203B330->dungeonIndex); if (iVar1 == 0) { iVar1 = 1; } @@ -599,7 +600,7 @@ void DisplayMissionObjectives(void) struct unkStruct_8095228 *iVar8; struct WonderMail *jobInfo; u8 auStack248 [100]; - u8 local_94 [4]; + volatile u8 local_94; u8 auStack144 [100]; short auStack44; short local_2a; @@ -611,18 +612,18 @@ void DisplayMissionObjectives(void) switch(gUnknown_203B330->unkC) { case 1: - sub_8099394(local_94); - iVar8 = sub_8095228(local_94[0]); + sub_8099394(&local_94); + iVar8 = sub_8095228(local_94); sub_803B6B0(10,16,3,gUnknown_203B330->unk10); // %dF - sprintf_2(auStack248,gUnknown_80E1F3C,iVar8->floor); + sprintf_2(auStack248,gUnknown_80E1F3C,iVar8->dungeon.dungeonFloor); xxx_call_draw_string(0x15,16,auStack248,gUnknown_203B330->unk10,0); // Rescue #C6%s#R sprintf_2(auStack248,gUnknown_80E1F40,GetMonSpecies(iVar8->clientSpecies)); xxx_call_draw_string(0x28,16,auStack248,gUnknown_203B330->unk10,0); break; case 2: - if (sub_80969D0(gUnknown_203B330->dungeonIndex) == 0) { + if (CountJobsinDungeon(gUnknown_203B330->dungeonIndex) == 0) { // Just go! xxx_call_draw_string(10,16,gUnknown_80E1F54,gUnknown_203B330->unk10,0); } @@ -631,7 +632,7 @@ void DisplayMissionObjectives(void) yCoord = 16; // 8 Job Slots... check each of them - for(jobSlotIdx = 0; jobSlotIdx < 8; jobSlotIdx++) + for(jobSlotIdx = 0; jobSlotIdx < MAX_ACCEPTED_JOBS; jobSlotIdx++) { jobInfo = GetJobSlotInfo(jobSlotIdx); if ((((jobInfo->dungeon == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0) diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index 22c5c54d9..b650c1153 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -454,7 +454,7 @@ u32 ConvertMenutoRescuePasswordState(u32 unused) u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_8095228 *param_3) { if ( (!sub_803D204(passwordBuffer, param_3)) || (7 < param_3->mailType) || - (param_3->floor >= GetDungeonFloorCount(param_3->dungeon)) || + (param_3->dungeon.dungeonFloor >= GetDungeonFloorCount(param_3->dungeon.dungeonIndex)) || (param_3->clientSpecies == SPECIES_NONE) || (SPECIES_RAYQUAZA_CUTSCENE < param_3->clientSpecies) || (IsInvalidItemReward(param_3->unk20.itemIndex))) { return PASSWORD_ENTRY_INCORRECT_PASSWORD; diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index 3b63a619d..0a2ae19b4 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -237,7 +237,7 @@ extern s32 sub_80381F4(u32, void *, void *); extern void sub_801C8C4(u32, u32, s32 * , u32); extern u8 sub_809539C(u32, u32); extern u8 sub_800D588(void); -extern u32 sub_803C200(u8 *, u32); +extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); extern void sub_8031D70(u8, u32); extern void sub_803092C(void); @@ -1420,7 +1420,7 @@ void UpdateThankYouMailText(void) else gUnknown_203B2C4->unk53C.itemRewards[0] = 0; // unk558 gUnknown_203B2C4->unk53C.numItems = 1; // unk55B - gUnknown_203B2C4->unk53C.teamRankPtsReward = sub_803C200(&puVar4->dungeon, 0); // unk560 + gUnknown_203B2C4->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&puVar4->dungeon, 0); // unk560 gUnknown_203B2C4->unk53C.itemRewards[1] = 0; // unk559 gUnknown_203B2C4->unk53C.itemRewards[2] = 0; // unk55A gUnknown_203B2C4->unk53C.friendAreaReward = 0; // unk55C diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 9a05db4aa..33dc9fd56 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -1172,7 +1172,7 @@ void sub_8028FDC(void) { case 8: return_var = sub_8095228(gUnknown_203B2C0->unk218); - if(sub_80A2824(return_var->dungeon) == 0) + if(sub_80A2824(return_var->dungeon.dungeonIndex) == 0) { sub_8028B04(0x1C); } diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 11e5a1cb5..b40cd6dc4 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -141,8 +141,8 @@ extern void sub_802B5FC(void); extern void sub_802B624(void); extern void sub_802F204(struct unkStruct_802F204 *, u32); -extern void sub_803C37C(u8 *, u32, u8 *); -extern u32 sub_803C200(u8 *, u32); +extern void sub_803C37C(struct DungeonLocation *, u32, u8 *); +extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); extern u8 sub_80023E4(u32); extern void nullsub_131(void); @@ -387,7 +387,7 @@ void sub_802B3E0(void) sub_8097790(); iVar3 = sub_8095228(gUnknown_203B2C8->unk1); sub_803C37C(&iVar3->dungeon, 0, gUnknown_203B2C8->unk114.itemRewards); - gUnknown_203B2C8->unk114.teamRankPtsReward = sub_803C200(&iVar3->dungeon, 0); + gUnknown_203B2C8->unk114.teamRankPtsReward = GetDungeonTeamRankPts(&iVar3->dungeon, 0); gUnknown_203B2C8->unk114.itemRewards[1] = 0; gUnknown_203B2C8->unk114.itemRewards[2] = 0; gUnknown_203B2C8->unk114.numItems = 10; diff --git a/src/wonder_mail_2_1.c b/src/wonder_mail_2_1.c index c02dedccf..ebc50e3af 100644 --- a/src/wonder_mail_2_1.c +++ b/src/wonder_mail_2_1.c @@ -7,9 +7,18 @@ struct unkStruct_802C39C { - /* 0x0 */ u32 local_6c[15]; - /* 0x3C */ u8 local_29[12]; - /* 0x48 */ u32 local_24[4]; + /* 0x0 */ u32 unk0[2]; + /* 0x8 */ struct DungeonLocation *unk8; + /* 0xC */ u8 *unkC; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + /* 0x14 */ u8 unk14; + /* 0x15 */ u8 fill15[0x1B]; + /* 0x36 */ u8 fill36[0x3C - 0x36]; + /* 0x3C */ u8 unk3C[0xC]; + /* 0x48 */ u8 fill48[4]; + /* 0x4C */ u32 unk4C; + /* 0x50 */ u32 unk50[3]; }; struct unkStruct_203B2E8 @@ -149,7 +158,7 @@ extern s32 sub_8013800(void *, u32); extern void sub_803B35C(void *, u32 *); extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); -extern void sub_803B6D4(void *); +extern void CreateRescueTitle(void *); extern void sub_8013984(u32 *); extern void sub_802C6DC(void); @@ -379,10 +388,10 @@ void sub_802C750(void) do { uVar1 = GetJobSlotInfo(gUnknown_203B2E8->unk0[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + iVar2]); - local.local_6c[0] = gUnknown_203B2E8->unk3C; - local.local_24[0] = sub_8013800(&gUnknown_203B2E8->unk8,iVar2); - sub_803B35C(uVar1,local.local_6c); - sub_803B6D4(&local); + local.unk0[0] = gUnknown_203B2E8->unk3C; + local.unk4C = sub_8013800(&gUnknown_203B2E8->unk8,iVar2); + sub_803B35C(uVar1,local.unk0); + CreateRescueTitle(&local); iVar2++; } while( iVar2 < gUnknown_203B2E8->unk22); sub_80073E0(gUnknown_203B2E8->unk3C); diff --git a/src/wonder_mail_2_mid.c b/src/wonder_mail_2_mid.c index 2e5bd3627..1c1430427 100644 --- a/src/wonder_mail_2_mid.c +++ b/src/wonder_mail_2_mid.c @@ -28,7 +28,7 @@ extern u8 *sub_8096574(u32); extern void sub_803B35C(u8 *, u32 *); extern u8 gBulletinBoardText[]; extern u8 sub_80968B0(u8 *); -extern void sub_803B6D4(void *); +extern void CreateRescueTitle(void *); extern void xxx_call_draw_string(s32, s32, u8 *, s32, s32); extern void sub_8012BC4(s32, s32, s32, s32 ,s32 ,s32); @@ -77,12 +77,21 @@ extern struct unkStruct_203B2E0 *gUnknown_203B2E0; struct unkStruct_802C39C { - /* 0x0 */ u32 local_6c[15]; - /* 0x3C */ u8 local_29[12]; - /* 0x48 */ u32 local_24[4]; + /* 0x0 */ u32 unk0[2]; + /* 0x8 */ struct DungeonLocation *unk8; + /* 0xC */ u8 *unkC; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + /* 0x14 */ u8 unk14; + /* 0x15 */ u8 fill15[0x1B]; + /* 0x34 */ u8 fill34[2]; + /* 0x36 */ u8 fill36[0x3C - 0x36]; + /* 0x3C */ u8 unk3C[0xC]; + /* 0x48 */ u8 fill48[4]; + /* 0x4C */ u32 unk4C; + /* 0x50 */ u32 unk50[3]; }; - extern struct UnkTextStruct2 gUnknown_80DFCB4; extern struct UnkTextStruct2 gUnknown_80DFC9C; @@ -91,7 +100,7 @@ extern u16 gUnknown_203B2E4; extern u8 *sub_8095FE8(u8); extern u8 sub_80968B0(u8 *); extern void sub_803B35C(u8 *, u32 *); -extern void sub_803B6D4(void *); +extern void CreateRescueTitle(void *); extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern u8 gMailboxText[]; extern u8 gAvailablePokemonNames[]; @@ -113,8 +122,8 @@ void CreateMailMenu(void) if (iVar5 < gUnknown_203B2D8->unk1E) { do { pcVar2 = sub_8095FE8(gUnknown_203B2D8->unk0[(gUnknown_203B2D8->unk22 * gUnknown_203B2D8->unk20) + iVar5]); - local.local_6c[0] = gUnknown_203B2D8->unk38; - local.local_24[0] = sub_8013800(&gUnknown_203B2D8->unk4, iVar5); + local.unk0[0] = gUnknown_203B2D8->unk38; + local.unk4C = sub_8013800(&gUnknown_203B2D8->unk4, iVar5); if (*pcVar2 == 1) { y = sub_8013800(&gUnknown_203B2D8->unk4, iVar5); sub_803B6B0(10,y,6,gUnknown_203B2D8->unk38); @@ -123,11 +132,11 @@ void CreateMailMenu(void) xxx_call_draw_string(0x15,y,buffer,gUnknown_203B2D8->unk38,0); } else { - sub_803B35C(pcVar2,local.local_6c); + sub_803B35C(pcVar2,local.unk0); if (sub_80968B0(pcVar2) != 0) { - local.local_29[7] = 2; + local.unk3C[11] = 2; } - sub_803B6D4(&local); + CreateRescueTitle(&local); } iVar5++; } while (iVar5 < gUnknown_203B2D8->unk1E); @@ -325,19 +334,19 @@ void sub_802C39C(void) u32 uVar1; u8 *uVar3; s32 iVar4; - s32 iVar5; + s32 x; s32 iVar6; struct unkStruct_802C39C local; sub_8008C54(gUnknown_203B2E0->unk3C); sub_80073B8(gUnknown_203B2E0->unk3C); iVar4 = gUnknown_203B2E0->unk26 * 8; - iVar5 = iVar4; - iVar5 += 10; - xxx_call_draw_string(iVar5,0,gBulletinBoardText,gUnknown_203B2E0->unk3C,0); + x = iVar4; + x += 10; + xxx_call_draw_string(x,0,gBulletinBoardText,gUnknown_203B2E0->unk3C,0); iVar4 += 4; - iVar5 = iVar4 + gUnknown_203B2E0->unkA4[2] * 8; - sub_8012BC4(iVar5,0,gUnknown_203B2E0->unk26 + 1,2,7,gUnknown_203B2E0->unk3C); + x = iVar4 + gUnknown_203B2E0->unkA4[2] * 8; + sub_8012BC4(x,0,gUnknown_203B2E0->unk26 + 1,2,7,gUnknown_203B2E0->unk3C); iVar6 = 0; if(iVar6 < gUnknown_203B2E0->unk22) @@ -345,13 +354,13 @@ void sub_802C39C(void) { uVar1 = (gUnknown_203B2E0->unk0[gUnknown_203B2E0->unk26 * gUnknown_203B2E0->unk24 + iVar6]); uVar3 = sub_8096574(uVar1); - local.local_6c[0] = gUnknown_203B2E0->unk3C; - local.local_24[0] = sub_8013800(&gUnknown_203B2E0->unk8,iVar6); - sub_803B35C(uVar3,local.local_6c); + local.unk0[0] = gUnknown_203B2E0->unk3C; + local.unk4C = sub_8013800(&gUnknown_203B2E0->unk8,iVar6); + sub_803B35C(uVar3,local.unk0); if (sub_80968B0(sub_8096574(uVar1)) != '\0') { - local.local_29[7] = 2; + local.unk3C[11] = 2; } - sub_803B6D4(&local); + CreateRescueTitle(&local); iVar6++; } while (iVar6 < gUnknown_203B2E0->unk22); sub_80073E0(gUnknown_203B2E0->unk3C); diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index 4d0efcb05..66e4011cf 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -44,8 +44,8 @@ struct unkStruct_203B310 { // size: 0x84 /* 0x0 */ u32 state; - u32 unk4; - u8 unk8; + /* 0x4 */ u32 nextState; + /* 0x8 */ bool8 displayClientDialogueSprite; // true to display the dialogue sprite for the client /* 0x9 */ u8 currTeamRank; // team rank u8 unkA; u8 unkB; @@ -354,7 +354,7 @@ void sub_802F1E8(void) -u32 sub_802F204(struct unkStruct_802F204 *r0, u8 r1) +u32 sub_802F204(struct unkStruct_802F204 *r0, bool8 r1) { struct unkStruct_203B310 *preload; @@ -363,7 +363,7 @@ u32 sub_802F204(struct unkStruct_802F204 *r0, u8 r1) gUnknown_203B310 = MemoryAlloc(sizeof(struct unkStruct_203B310), 8); gUnknown_203B310->unk10 = r0; gUnknown_203B310->itemRewardIndex = 0; - gUnknown_203B310->unk8 = r1; + gUnknown_203B310->displayClientDialogueSprite = r1; // NOTE: dumb var to get correct ordering preload = gUnknown_203B310; @@ -459,9 +459,9 @@ void HandleMissionReward(void) } else { gUnknown_202DE30 = moneyReward; - if (gUnknown_203B310->unk8 != '\0') { + if (gUnknown_203B310->displayClientDialogueSprite) { sub_80141B4(gUnknown_80E0434,0,&gUnknown_203B310->faceFile,0x10d); - gUnknown_203B310->unk4 = 1; + gUnknown_203B310->nextState = 1; } else { sub_802F2E8(1); @@ -477,7 +477,7 @@ void HandleMissionReward(void) else { sub_80141B4(gUnknown_80E0484,0,0,0x101); } - gUnknown_203B310->unk4 = 2; + gUnknown_203B310->nextState = 2; break; case 2: if (gUnknown_203B310->unk10->friendAreaReward == '\0') { @@ -486,9 +486,9 @@ void HandleMissionReward(void) } else { sub_8092578(gUnknown_202E628,gUnknown_203B310->unk10->friendAreaReward,0); - if (gUnknown_203B310->unk8 != '\0') { + if (gUnknown_203B310->displayClientDialogueSprite) { sub_80141B4(gUnknown_80E04B4,0,&gUnknown_203B310->faceFile,0x10d); - gUnknown_203B310->unk4 = 3; + gUnknown_203B310->nextState = 3; } else { sub_802F2E8(3); @@ -516,7 +516,7 @@ void HandleMissionReward(void) sub_80141B4(gUnknown_80E05FC,0,0,0x101); } } - gUnknown_203B310->unk4 = 4; + gUnknown_203B310->nextState = 4; break; case 4: uVar7 = gUnknown_203B310->unk10->itemRewards[0]; @@ -542,9 +542,9 @@ void HandleMissionReward(void) local_20.unk4 = 0; local_20.unk8 = 1; sub_8090E14(gUnknown_202DEA8,(struct ItemSlot *)&local_14,&local_20); - if (gUnknown_203B310->unk8 != '\0') { + if (gUnknown_203B310->displayClientDialogueSprite) { sub_80141B4(gUnknown_80E0640,0,&gUnknown_203B310->faceFile,0x10d); - gUnknown_203B310->unk4 = 5; + gUnknown_203B310->nextState = 5; } else { @@ -594,11 +594,11 @@ void HandleMissionReward(void) PlaySound(0xcb); if (gUnknown_203B310->currTeamRank != GetRescueTeamRank()) { // Rank up time - gUnknown_203B310->unk4 = 8; + gUnknown_203B310->nextState = 8; } else { // No rank up.. close out - gUnknown_203B310->unk4 = 9; + gUnknown_203B310->nextState = 9; } gUnknown_202DE30 = gUnknown_203B310->unk10->teamRankPtsReward; sub_80141B4(gUnknown_80E0670,0,0,0x101); @@ -607,7 +607,7 @@ void HandleMissionReward(void) case 8: // Rank up PlaySound(0xc9); - gUnknown_203B310->unk4 = 9; + gUnknown_203B310->nextState = 9; rankString = GetTeamRankString(gUnknown_203B310->currTeamRank); strcpy(gUnknown_202E038,rankString); rankString = GetTeamRankString(GetRescueTeamRank()); @@ -639,7 +639,7 @@ void sub_802F718(void) s32 temp; if (sub_80144A4(&temp) == 0) { - sub_802F2E8(gUnknown_203B310->unk4); + sub_802F2E8(gUnknown_203B310->nextState); } } diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index 873daf440..49b4c91bf 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -2,6 +2,8 @@ #include "text.h" #include "input.h" #include "memory.h" +#include "item.h" +#include "sub_8095228.h" struct unkStruct_203B320 { @@ -9,7 +11,8 @@ struct unkStruct_203B320 u8 unk0[4]; u8 fill4[0x20 - 4]; u32 unk20; - u8 fill24[0x3C - 0x24]; + u32 unk24; + u8 fill28[0x3C - 0x28]; s16 unk3C; s16 unk3E; s16 unk40; @@ -25,6 +28,23 @@ struct unkStruct_203B320 extern struct unkStruct_203B320 *gUnknown_203B320; extern struct UnkTextStruct2 gUnknown_80E083C; extern struct UnkTextStruct2 gUnknown_80E0854; +extern u8 *gUnknown_80E086C[]; + +struct unkStruct_802C39C +{ + /* 0x0 */ u32 unk0[2]; + /* 0x8 */ struct DungeonLocation *unk8; + /* 0xC */ u8 *unkC; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + /* 0x14 */ u8 unk14; + /* 0x15 */ u8 fill15[0x1B]; + /* 0x34 */ u8 fill34[2]; + /* 0x36 */ u8 fill36[0x3C - 0x36]; + /* 0x3C */ u8 unk3C[0x10]; + /* 0x4C */ u32 unk4C; + /* 0x50 */ u32 unk50[3]; +}; extern u8 sub_8030C20(u32); extern s32 sub_8030A74(void); @@ -33,12 +53,19 @@ extern void sub_803092C(void); extern void sub_8012D08(struct UnkTextStruct2 *, s32); extern void sub_8013818(void *, u32, u32, u32); -extern u8 sub_80138B8(u8 *, u32); -extern void sub_8013660(u8 *); -extern s32 GetKeyPress(u8 *); +extern u8 sub_80138B8(u32 *, u32); +extern void sub_8013660(u32 *); +extern s32 GetKeyPress(u32 *); extern void PlayMenuSoundEffect(u32); -extern void sub_8013984(u8 *); -extern void AddMenuCursorSprite(u8 *); +extern void sub_8013984(u32 *); +extern void AddMenuCursorSprite(u32 *); +extern s32 sub_8013800(void *, u32); +extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); +extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +extern void CreateRescueTitle(void *); u32 sub_80306A8(u32 r0, u32 r1, struct UnkTextStruct2_sub *r2, u32 r3) { @@ -63,7 +90,7 @@ u32 sub_80306A8(u32 r0, u32 r1, struct UnkTextStruct2_sub *r2, u32 r3) sub_8012D08(gUnknown_203B320->unk5C, r3); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B320->unk60, 1, 1); - sub_8013818(gUnknown_203B320->fill24, sub_8030A74(), r3, r1); + sub_8013818(&gUnknown_203B320->unk24, sub_8030A74(), r3, r1); sub_80308A0(); sub_803092C(); return 1; @@ -73,10 +100,10 @@ u32 sub_8030768(u8 r0) { if(r0 == 0) { - sub_8013660(gUnknown_203B320->fill24); + sub_8013660(&gUnknown_203B320->unk24); return 0; } - switch(GetKeyPress(gUnknown_203B320->fill24)) + switch(GetKeyPress(&gUnknown_203B320->unk24)) { case 4: PlayMenuSoundEffect(4); @@ -88,7 +115,7 @@ u32 sub_8030768(u8 r0) PlayMenuSoundEffect(0); return 3; default: - if(sub_80138B8(gUnknown_203B320->fill24, 1) != 0) + if(sub_80138B8(&gUnknown_203B320->unk24, 1) != 0) { sub_80308A0(); sub_803092C(); @@ -111,12 +138,12 @@ void sub_8030810(u32 r0) r0_u8 = r0; // cast needed.. gUnknown_203B320->unk46 = sub_8030A74(); - sub_8013984(gUnknown_203B320->fill24); + sub_8013984(&gUnknown_203B320->unk24); sub_80308A0(); sub_803092C(); if(r0_u8 != 0) - AddMenuCursorSprite(gUnknown_203B320->fill24); + AddMenuCursorSprite(&gUnknown_203B320->unk24); } void sub_803084C() @@ -135,3 +162,132 @@ u8 *sub_8030894() { return gUnknown_203B320->unk0; } + +NAKED +void sub_80308A0(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _08030928\n" + "\tldr r0, [r4]\n" + "\tadds r1, r0, 0\n" + "\tadds r1, 0x44\n" + "\tldrh r1, [r1]\n" + "\tadds r0, 0xC0\n" + "\tmovs r2, 0\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r1, r0, 0\n" + "\tadds r1, 0x42\n" + "\tldrh r1, [r1]\n" + "\tadds r0, 0xC1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xC2\n" + "\tmovs r1, 0xC\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xC3\n" + "\tstrb r2, [r0]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x60\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tldr r0, [r4]\n" + "\tmovs r1, 0x3E\n" + "\tldrsh r0, [r0, r1]\n" + "\tmovs r1, 0xC\n" + "\tbl sub_80095E4\n" + "\tadds r0, 0x2\n" + "\tlsls r0, 16\n" + "\tldr r2, [r4]\n" + "\tldr r3, [r2, 0x58]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r1, r2, r1\n" + "\tadds r1, 0x6E\n" + "\tasrs r3, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r2, 0x58]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 3\n" + "\tadds r2, r0\n" + "\tadds r3, 0x2\n" + "\tadds r2, 0x70\n" + "\tstrh r3, [r2]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x60\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08030928: .4byte gUnknown_203B320"); +} + +void sub_803092C(void) +{ + struct unkStruct_8095228 *pbVar2; + s32 r4; + s32 r5; + s32 r6; + struct unkStruct_802C39C local; + + sub_8008C54(gUnknown_203B320->unk58); + sub_80073B8(gUnknown_203B320->unk58); + r4 = gUnknown_203B320->unk42 * 8; + r5 = r4; + r5 += 10; + xxx_call_draw_string(r5,0,gUnknown_80E086C[gUnknown_203B320->unk20],gUnknown_203B320->unk58,0); + r4 += 4; + r5 = r4 + gUnknown_203B320->unkC0[2] * 8; + sub_8012BC4(r5,0,gUnknown_203B320->unk42 + 1,1,7,gUnknown_203B320->unk58); + + r6 = 0; + if (r6 < gUnknown_203B320->unk3E) { + do { + pbVar2 = sub_8095228(gUnknown_203B320->unk0[(gUnknown_203B320->unk42 * gUnknown_203B320->unk40) + r6]); + local.unk0[0] = gUnknown_203B320->unk58; + local.unk4C = sub_8013800(&gUnknown_203B320->unk24,r6); + local.unk3C[8] = 7; + local.unk3C[10] = 0; + local.unk3C[12] = 0; + + local.unk8 = &pbVar2->dungeon; + local.unkC = pbVar2->padding2; + + local.unk10 = (pbVar2->clientSpecies); + local.unk12 = (pbVar2->clientSpecies); + local.unk14 = 0; + local.fill15[0x19] = 5; + + switch(pbVar2->mailType) + { + case 4: + local.unk3C[11] = 3; + break; + case 5: + local.unk3C[11] = 4; + break; + case 1: + case 2: + local.unk3C[11]= 1; + break; + default: + local.unk3C[11]= 0; + break; + } + CreateRescueTitle(&local); + r6++; + } while (r6 < gUnknown_203B320->unk3E); + } + sub_80073E0(gUnknown_203B320->unk58); +} From 4ba50b534938ec6832bb9f29fa7324e0cdc3dfa0 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 16 Jun 2022 16:38:44 -0700 Subject: [PATCH 09/11] document all music players --- asm/music.s | 28 ++-- include/m4a.h | 8 +- include/music.h | 24 +++- sound/music_player_table.inc | 16 +-- src/music.c | 33 +++-- src/music_pre.c | 240 +++++++++++++++++------------------ sym_ewram.txt | 43 +++++-- 7 files changed, 215 insertions(+), 177 deletions(-) diff --git a/asm/music.s b/asm/music.s index c6177949d..929d0600c 100644 --- a/asm/music.s +++ b/asm/music.s @@ -54,7 +54,7 @@ _0800C6A0: strh r0, [r2] b _0800C8A2 .align 2, 0 -_0800C6B4: .4byte gUnknown_202D68E +_0800C6B4: .4byte gCurrentFanfareSong _0800C6B8: .4byte 0x000003e5 _0800C6BC: ldrh r0, [r3] @@ -66,7 +66,7 @@ _0800C6C0: cmp r1, r0 beq _0800C6D8 movs r0, 0 - bl sub_800CAF0 + bl IsMusicPlayerPlaying lsls r0, 24 cmp r0, 0 beq _0800C6D8 @@ -86,7 +86,7 @@ _0800C6E4: .align 2, 0 _0800C6F0: .4byte gCurrentBGSong _0800C6F4: .4byte 0x000003e7 -_0800C6F8: .4byte gUnknown_202D68E +_0800C6F8: .4byte gCurrentFanfareSong _0800C6FC: .4byte 0x000003e5 _0800C700: ldr r0, _0800C724 @@ -95,7 +95,7 @@ _0800C700: cmp r1, r0 beq _0800C718 movs r0, 0x1 - bl sub_800CAF0 + bl IsMusicPlayerPlaying lsls r0, 24 cmp r0, 0 bne _0800C718 @@ -108,7 +108,7 @@ _0800C718: strh r0, [r1] b _0800C8A2 .align 2, 0 -_0800C724: .4byte gUnknown_202D68E +_0800C724: .4byte gCurrentFanfareSong _0800C728: .4byte 0x000003e5 _0800C72C: .4byte gUnknown_202D692 _0800C730: @@ -118,7 +118,7 @@ _0800C730: cmp r1, r0 beq _0800C754 movs r0, 0x1 - bl sub_800CAF0 + bl IsMusicPlayerPlaying lsls r0, 24 cmp r0, 0 beq _0800C748 @@ -126,7 +126,7 @@ _0800C730: _0800C748: b _0800C75A .align 2, 0 -_0800C74C: .4byte gUnknown_202D68E +_0800C74C: .4byte gCurrentFanfareSong _0800C750: .4byte 0x000003e5 _0800C754: ldr r0, _0800C76C @@ -141,7 +141,7 @@ _0800C75A: strh r0, [r1] b _0800C8A2 .align 2, 0 -_0800C76C: .4byte gUnknown_2000970 +_0800C76C: .4byte gMPlayInfo_Fanfare _0800C770: .4byte gUnknown_202D692 _0800C774: ldr r3, _0800C794 @@ -187,7 +187,7 @@ _0800C7BE: _0800C7CC: .4byte gBGMusicPlayerState _0800C7D0: .4byte gMPlayInfo_BGM _0800C7D4: .4byte gUnknown_202D690 -_0800C7D8: .4byte gUnknown_202D68E +_0800C7D8: .4byte gCurrentFanfareSong _0800C7DC: .4byte 0x000003e5 _0800C7E0: ldr r5, _0800C810 @@ -206,7 +206,7 @@ _0800C7E0: cmp r1, r0 beq _0800C80A movs r0, 0 - bl sub_800CAF0 + bl IsMusicPlayerPlaying lsls r0, 24 cmp r0, 0 beq _0800C8A2 @@ -225,7 +225,7 @@ _0800C81C: cmp r1, r0 beq _0800C83C movs r0, 0 - bl sub_800CAF0 + bl IsMusicPlayerPlaying lsls r0, 24 cmp r0, 0 bne _0800C8A2 @@ -253,7 +253,7 @@ _0800C85C: .4byte gCurrentBGSong _0800C860: .4byte 0x000003e7 _0800C864: movs r0, 0 - bl sub_800CAF0 + bl IsMusicPlayerPlaying lsls r0, 24 lsrs r0, 24 cmp r0, 0 @@ -309,7 +309,7 @@ _0800C8D0: beq _0800C8E4 lsls r0, r5, 16 lsrs r0, 16 - bl sub_800CAF0 + bl IsMusicPlayerPlaying lsls r0, 24 cmp r0, 0 beq _0800C926 @@ -322,7 +322,7 @@ _0800C8EC: .4byte 0x000003e7 _0800C8F0: lsls r0, r5, 16 lsrs r0, 16 - bl sub_800CAF0 + bl IsMusicPlayerPlaying lsls r0, 24 lsrs r0, 24 cmp r0, 0 diff --git a/include/m4a.h b/include/m4a.h index 6f2ffc583..0bc7988ff 100644 --- a/include/m4a.h +++ b/include/m4a.h @@ -22,6 +22,12 @@ void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 void m4aSoundVSync(void); extern struct MusicPlayerInfo gMPlayInfo_BGM; // BGM?? -extern struct MusicPlayerInfo gUnknown_2000970; +extern struct MusicPlayerInfo gMPlayInfo_Fanfare; +extern struct MusicPlayerInfo gMPlayInfo_SE1; +extern struct MusicPlayerInfo gMPlayInfo_SE2; +extern struct MusicPlayerInfo gMPlayInfo_SE3; +extern struct MusicPlayerInfo gMPlayInfo_SE4; +extern struct MusicPlayerInfo gMPlayInfo_SE5; +extern struct MusicPlayerInfo gMPlayInfo_SE6; #endif //GUARD_M4A_H diff --git a/include/music.h b/include/music.h index c086c8968..7527a07c7 100644 --- a/include/music.h +++ b/include/music.h @@ -3,13 +3,13 @@ void StopBGMusicVSync(void); void StartBGMusicVSync(void); -u8 sub_800CA38(u32 songIndex); +bool8 IsValidSong(u32 songIndex); void StartNewBGM(u16 songIndex); bool8 IsBGSong(u32 songIndex); bool8 IsSoundEffect(u32 songIndex); bool8 IsFanfare(u32 songIndex); u16 GetMusicPlayerIndex(u16 songIndex); -bool8 sub_800CAF0(u16 songIndex); +bool8 IsMusicPlayerPlaying(u16 songIndex); void StartNewBGM(u16 songIndex); void FadeInNewBGM(u16 SongIndex, u16 speed); u16 GetCurrentBGSong(void); @@ -18,8 +18,28 @@ void sub_800BF80(void); void FadeOutBGM(u16 speed); void sub_800C074(u16 SongIndex, u16 param_2); void sub_800C298(u16 songIndex); +void sub_800C3F8(u16 songIndex, u16 speed); void nullsub_19(void); void nullsub_20(u16 songIndex); +enum GetMusicPlayerIndex +{ + INDEX_BGM, + INDEX_FANFARE, + INDEX_SE1, + INDEX_SE2, + INDEX_SE3, + INDEX_SE4, + INDEX_SE5, + INDEX_SE6, +}; + +enum BG_Player_State +{ + BG_PLAYER_STATE_INITIALIZE = 0, + BG_PLAYER_STATE_PLAYING = 1, + BG_PLAYER_STATE_STOPPED = 4, +}; + #endif //GUARD_MUSIC_H diff --git a/sound/music_player_table.inc b/sound/music_player_table.inc index 11b4e5ccf..3c2a3f8c3 100644 --- a/sound/music_player_table.inc +++ b/sound/music_player_table.inc @@ -1,10 +1,10 @@ .align 2 gMPlayTable:: @ 9E8665C - music_player gMPlayInfo_BGM, gMPlayTrack_BGM, 12, 0 @ BGM - music_player gUnknown_2000970, gMPlayTrack_Unknown1, 6, 0 @ SE? - music_player 0x20009B0, gMPlayTrack_Unknown2, 1, 0 - music_player 0x2000A40, gMPlayTrack_Unknown3, 1, 0 - music_player 0x20009F0, gMPlayTrack_Unknown4, 2, 0 - music_player 0x2000870, gMPlayTrack_Unknown5, 2, 0 - music_player 0x20008B0, gMPlayTrack_Unknown6, 2, 0 - music_player 0x2000930, gMPlayTrack_Unknown7, 1, 0 + music_player gMPlayInfo_BGM, gMPlayTrack_BGM, 12, 0 + music_player gMPlayInfo_Fanfare, gMPlayTrack_Fanfare, 6, 0 + music_player gMPlayInfo_SE1, gMPlayTrack_SE1, 1, 0 + music_player gMPlayInfo_SE2, gMPlayTrack_SE2, 1, 0 + music_player gMPlayInfo_SE3, gMPlayTrack_SE3, 2, 0 + music_player gMPlayInfo_SE4, gMPlayTrack_SE4, 2, 0 + music_player gMPlayInfo_SE5, gMPlayTrack_SE5, 2, 0 + music_player gMPlayInfo_SE6, gMPlayTrack_SE6, 1, 0 diff --git a/src/music.c b/src/music.c index 79502a965..2acb74337 100644 --- a/src/music.c +++ b/src/music.c @@ -10,7 +10,6 @@ extern void sub_809C730(); extern bool8 DisableInterrupts(); extern bool8 EnableInterrupts(); -extern void sub_800C3F8(u16, u16); extern void Random(); extern void sub_800BA5C(); extern void xxx_update_bg_sound_input(); @@ -48,11 +47,11 @@ void StopBGMusicVSync(void) { gUnknown_202D694 = 0; } - else if(gBGMusicPlayerState == 1) + else if(gBGMusicPlayerState == BG_PLAYER_STATE_PLAYING) { gUnknown_202D694 = 1; } - gBGMusicPlayerState = 4; + gBGMusicPlayerState = BG_PLAYER_STATE_STOPPED; } } } @@ -72,9 +71,9 @@ void StartBGMusicVSync(void) { if(gCurrentBGSong != 999) { - if(gBGMusicPlayerState == 4) + if(gBGMusicPlayerState == BG_PLAYER_STATE_STOPPED) { - gBGMusicPlayerState = 1; + gBGMusicPlayerState = BG_PLAYER_STATE_PLAYING; if(gUnknown_202D694 != 0) { m4aSongNumStart(gCurrentBGSong); @@ -98,30 +97,30 @@ void nullsub_179(void) } // Unused -u8 sub_800CA38(u32 songIndex) +bool8 IsValidSong(u32 songIndex) { if(IsBGSong(songIndex)) { - if(GetMusicPlayerIndex(songIndex) == 0) + if(GetMusicPlayerIndex(songIndex) == INDEX_BGM) { - return 1; + return TRUE; } } if(IsFanfare(songIndex)) { - if(GetMusicPlayerIndex(songIndex) == 1) + if(GetMusicPlayerIndex(songIndex) == INDEX_FANFARE) { - return 1; + return TRUE; } } else if(IsSoundEffect(songIndex)) { - if(GetMusicPlayerIndex(songIndex) > 1) + if(GetMusicPlayerIndex(songIndex) >= INDEX_SE1) { - return 1; + return TRUE; } } - return 0; + return FALSE; } void nullsub_19(void) @@ -160,14 +159,14 @@ u16 GetMusicPlayerIndex(u16 songIndex) return gSongTable[songIndex].ms; } -bool8 sub_800CAF0(u16 songIndex) +bool8 IsMusicPlayerPlaying(u16 playerIndex) { // Had to cast this.. m4a_internal header has this as u32 - if((u16)gMPlayTable[songIndex].info->status == 0) + if((u16)gMPlayTable[playerIndex].info->status == 0) { - return 0; + return FALSE; } - return 1; + return TRUE; } void nullsub_20(u16 songIndex) diff --git a/src/music_pre.c b/src/music_pre.c index b93ddbfa5..252e26033 100644 --- a/src/music_pre.c +++ b/src/music_pre.c @@ -4,6 +4,7 @@ #include "bg.h" #include "music.h" #include "input.h" +#include "constants/bg_music.h" extern bool8 EnableInterrupts(void); extern bool8 DisableInterrupts(void); @@ -33,7 +34,7 @@ extern u32 gUnknown_203B0A4; extern u16 gBGMusicPlayerState; extern u16 gCurrentBGSong; extern u16 gUnknown_202D68C; -extern u16 gUnknown_202D68E; +extern u16 gCurrentFanfareSong; extern u16 gUnknown_202D690; extern u16 gUnknown_202D692; extern u8 gUnknown_202D694; @@ -407,12 +408,12 @@ void InitMusic(void) gBGMusicPlayerState = 0; gCurrentBGSong = 999; gUnknown_202D68C = 999; - gUnknown_202D68E = 997; + gCurrentFanfareSong = 997; gUnknown_202D690 = 0; gUnknown_202D692 = 0; gUnknown_202D694 = 0; - for(counter = 0, preload = &gUnknown_3000FD8[0]; counter < 8; counter++, preload++) + for(counter = INDEX_BGM, preload = &gUnknown_3000FD8[0]; counter < INDEX_SE6 + 1; counter++, preload++) { preload->unk0 = 0; preload->songIndex = 997; @@ -443,7 +444,7 @@ void StartNewBGM(u16 songIndex) if((u16)(gBGMusicPlayerState - 1) <= 1) return; } - if(GetMusicPlayerIndex(songIndex)) + if(GetMusicPlayerIndex(songIndex) != INDEX_BGM) { nullsub_20(songIndex); return; @@ -454,22 +455,22 @@ void StartNewBGM(u16 songIndex) if(gUnknown_202D690 == 0) { - gBGMusicPlayerState = 1; + gBGMusicPlayerState = BG_PLAYER_STATE_PLAYING; m4aSongNumStart(songIndex); } if(interrupt_flag) EnableInterrupts(); } -void FadeInNewBGM(u16 SongIndex, u16 speed) +void FadeInNewBGM(u16 songIndex, u16 speed) { bool8 interrupt_flag; - if(!IsBGSong(SongIndex)) + if(!IsBGSong(songIndex)) return; - if(SongIndex == 999) + if(songIndex == 999) return; - if(SongIndex == gCurrentBGSong) + if(songIndex == gCurrentBGSong) { if((u16)(gBGMusicPlayerState - 1) <= 1) return; @@ -489,32 +490,32 @@ void FadeInNewBGM(u16 SongIndex, u16 speed) } interrupt_flag = DisableInterrupts(); - gCurrentBGSong = SongIndex; + gCurrentBGSong = songIndex; gUnknown_202D694 = 1; if(gUnknown_202D690 == 0) { - gBGMusicPlayerState = 1; - m4aSongNumStart(SongIndex); + gBGMusicPlayerState = BG_PLAYER_STATE_PLAYING; + m4aSongNumStart(songIndex); m4aMPlayImmInit(&gMPlayInfo_BGM); m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFF, 0); - m4aSongNumStop(SongIndex); + m4aSongNumStop(songIndex); m4aMPlayFadeIn(&gMPlayInfo_BGM, speed); } if(interrupt_flag) EnableInterrupts(); } -void sub_800BF48(u16 SongIndex) +void sub_800BF48(u16 songIndex) { u16 preload = gCurrentBGSong; if(preload == 999) { - StartNewBGM(SongIndex); + StartNewBGM(songIndex); gUnknown_202D68C = preload; return; } - gUnknown_202D68C = SongIndex; + gUnknown_202D68C = songIndex; } void sub_800BF80(void) @@ -583,23 +584,23 @@ u16 GetCurrentBGSong(void) return gCurrentBGSong; } -void sub_800C074(u16 SongIndex, u16 param_2) +void sub_800C074(u16 songIndex, u16 param_2) { bool8 interrupt_flag; bool8 interrupt_flag2; - u16 msVar; + u16 playerIndex; struct unkStruct_3000FD8 *preload; - if (SongIndex == 997) + if (songIndex == 997) return; if (param_2 > 256) param_2 = 256; - if (IsFanfare(SongIndex)) + if (IsFanfare(songIndex)) { - if (GetMusicPlayerIndex(SongIndex) == 1) { + if (GetMusicPlayerIndex(songIndex) == INDEX_FANFARE) { interrupt_flag = DisableInterrupts(); - gUnknown_202D68E = SongIndex; + gCurrentFanfareSong = songIndex; if(gUnknown_202D690 == 0) { if (gCurrentBGSong != 999) @@ -617,14 +618,14 @@ void sub_800C074(u16 SongIndex, u16 param_2) { gUnknown_202D690 = 3; m4aMPlayStop(&gMPlayInfo_BGM); - m4aSongNumStart(gUnknown_202D68E); + m4aSongNumStart(gCurrentFanfareSong); } } else { gUnknown_202D690 = 3; m4aMPlayStop(&gMPlayInfo_BGM); - m4aSongNumStart(gUnknown_202D68E); + m4aSongNumStart(gCurrentFanfareSong); } } else @@ -632,27 +633,27 @@ void sub_800C074(u16 SongIndex, u16 param_2) if (1 < (u16)(gUnknown_202D690 - 1)) { m4aMPlayStop(&gMPlayInfo_BGM); - m4aSongNumStart(gUnknown_202D68E); + m4aSongNumStart(gCurrentFanfareSong); gUnknown_202D690 = 3; } } switch(gCurrentBGSong) { - case 26: // 0x1A - case 27: // 0x1B - case 28: // 0x1C - case 29: // 0x1D - case 30: // 0x1E - case 31: // 0x1F - case 34: // 0x22 - case 35: // 0x23 - case 37: // 0x25 - case 38: // 0x26 - case 117: // 0x75 - case 118: // 0x76 - case 119: // 0x77 - case 122: // 0x7A - case 127: // 0x7F + case MUS_RAYQUAZAS_DOMAIN: + case MUS_FRIEND_AREA_STRATOS_LOOKOUT: + case MUS_FRIEND_AREA_RAINBOW_PEAK: + case MUS_DREAM_EATER: + case MUS_FRIEND_AREA_DEEPSEA_CURRENT: + case MUS_FRIEND_AREA_SEAFLOOR_CAVE: + case MUS_FRIEND_AREA_VOLCANIC_PIT: + case MUS_FRIEND_AREA_CRYPTIC_CAVE: + case MUS_THE_OTHER_SIDE: + case MUS_THE_MOUNTAIN_OF_FIRE: + case MUS_FRIEND_AREA_LEGENDARY_ISLAND: + case MUS_FRIEND_AREA_SOUTHERN_ISLAND: + case MUS_FRIEND_AREA_ENCLOSED_ISLAND: + case MUS_FRIEND_AREA_FINAL_ISLAND: + case MUS_FRIEND_AREA_HEALING_FOREST: gUnknown_202D694 = 1; break; default: @@ -663,23 +664,23 @@ void sub_800C074(u16 SongIndex, u16 param_2) } else { - nullsub_20(SongIndex); + nullsub_20(songIndex); } } else { - if (!IsSoundEffect(SongIndex)) + if (!IsSoundEffect(songIndex)) return; - msVar = GetMusicPlayerIndex(SongIndex); - preload = &gUnknown_3000FD8[msVar]; // need to load this before comparison to match - if (msVar <= 1) - nullsub_20(SongIndex); + playerIndex = GetMusicPlayerIndex(songIndex); + preload = &gUnknown_3000FD8[playerIndex]; // need to load this before comparison to match + if (playerIndex < INDEX_SE1) + nullsub_20(songIndex); else { interrupt_flag2 = DisableInterrupts(); - m4aSongNumStart(SongIndex); + m4aSongNumStart(songIndex); preload->unk0 = 1; - preload->songIndex = SongIndex; + preload->songIndex = songIndex; if(param_2 == 256) { preload->unk6 = 0; @@ -695,10 +696,10 @@ void sub_800C074(u16 SongIndex, u16 param_2) } } -void sub_800C214(u16 songIndex, u16 volume) +void SetSoundEffectVolume(u16 songIndex, u16 volume) { bool8 interrupt_flag; - u16 msVar; + u16 playerIndex; struct MusicPlayerInfo *info; struct unkStruct_3000FD8 *preload; @@ -707,10 +708,10 @@ void sub_800C214(u16 songIndex, u16 volume) } if ((!IsFanfare(songIndex)) && (IsSoundEffect(songIndex))) { - msVar = GetMusicPlayerIndex(songIndex); - info = gMPlayTable[msVar].info; - preload = &gUnknown_3000FD8[msVar]; - if (msVar > 1) { + playerIndex = GetMusicPlayerIndex(songIndex); + info = gMPlayTable[playerIndex].info; + preload = &gUnknown_3000FD8[playerIndex]; + if (playerIndex >= INDEX_SE1) { interrupt_flag = DisableInterrupts(); if (preload->songIndex == songIndex) { m4aMPlayVolumeControl(info, 0xf, volume); @@ -729,8 +730,8 @@ void sub_800C298(u16 songIndex) char cVar3; char cVar4; - u32 uVar2; - int iVar4; + u32 playerIndex; + s32 playerIndex2; struct MusicPlayerInfo *puVar6; struct unkStruct_3000FD8 *preload; struct unkStruct_3000FD8 *puVar3; @@ -738,9 +739,9 @@ void sub_800C298(u16 songIndex) if (songIndex == 997) { cVar1 = DisableInterrupts(); - for(iVar4 = 2, puVar3 = &gUnknown_3000FE8[0]; iVar4 < 7; iVar4++, puVar3++) + for(playerIndex2 = INDEX_SE1, puVar3 = &gUnknown_3000FE8[0]; playerIndex2 < INDEX_SE6; playerIndex2++, puVar3++) { - m4aMPlayStop(gMPlayTable[iVar4].info); + m4aMPlayStop(gMPlayTable[playerIndex2].info); puVar3->unk0 = 0; puVar3->songIndex = 997; puVar3->unk4 = 0; @@ -752,10 +753,10 @@ void sub_800C298(u16 songIndex) } else if (IsSoundEffect(songIndex)) { - uVar2 = GetMusicPlayerIndex(songIndex); - puVar6 = gMPlayTable[uVar2].info; - preload = &gUnknown_3000FD8[uVar2]; - if (uVar2 < 2) { + playerIndex = GetMusicPlayerIndex(songIndex); + puVar6 = gMPlayTable[playerIndex].info; + preload = &gUnknown_3000FD8[playerIndex]; + if (playerIndex < INDEX_SE1) { nullsub_21(songIndex); } else { @@ -776,9 +777,9 @@ void sub_800C298(u16 songIndex) { cVar3 = DisableInterrupts(); if (gUnknown_202D690 != 0) { - if (gUnknown_202D68E != 997) { - gUnknown_202D68E = 997; - m4aMPlayStop(&gUnknown_2000970); + if (gCurrentFanfareSong != 997) { + gCurrentFanfareSong = 997; + m4aMPlayStop(&gMPlayInfo_Fanfare); } } if (cVar3 != '\0') { @@ -789,9 +790,9 @@ void sub_800C298(u16 songIndex) { cVar4 = DisableInterrupts(); if (gUnknown_202D690 != 0) { - if (gUnknown_202D68E == songIndex) { - gUnknown_202D68E = 997; - m4aMPlayStop(&gUnknown_2000970); + if (gCurrentFanfareSong == songIndex) { + gCurrentFanfareSong = 997; + m4aMPlayStop(&gMPlayInfo_Fanfare); } } if (cVar4 != '\0') { @@ -807,11 +808,11 @@ void sub_800C3F8(u16 songIndex, u16 speed) char cVar3; char cVar4; u32 comparison; - s32 uVar6; - u32 uVar8; + s32 playerIndex2; + u32 playerIndex; struct unkStruct_3000FD8 *preload; struct unkStruct_3000FD8 *puVar3; - struct MusicPlayerInfo *puVar5; + struct MusicPlayerInfo *playerInfo; comparison = 0x80 << 17; // 16777216 if((speed * 65536) > comparison) @@ -828,14 +829,14 @@ void sub_800C3F8(u16 songIndex, u16 speed) if (songIndex == 997) { cVar1 = DisableInterrupts(); - for(uVar6 = 2, puVar3 = &gUnknown_3000FE8[0]; uVar6 < 7; uVar6++, puVar3++) + for(playerIndex2 = INDEX_SE1, puVar3 = &gUnknown_3000FE8[0]; playerIndex2 < INDEX_SE6; playerIndex2++, puVar3++) { if (puVar3->songIndex != 997) { - if (sub_800CAF0(uVar6) != '\0') { - m4aMPlayFadeOut(gMPlayTable[uVar6].info,speed); + if (IsMusicPlayerPlaying(playerIndex2)) { + m4aMPlayFadeOut(gMPlayTable[playerIndex2].info,speed); } else { - m4aMPlayStop(gMPlayTable[uVar6].info); + m4aMPlayStop(gMPlayTable[playerIndex2].info); puVar3->unk0 = 0; puVar3->songIndex = 997; puVar3->unk4 = 0; @@ -847,58 +848,56 @@ void sub_800C3F8(u16 songIndex, u16 speed) EnableInterrupts(); } } - else { - if (IsSoundEffect(songIndex)) { - uVar8 = GetMusicPlayerIndex(songIndex); - preload = &gUnknown_3000FD8[uVar8]; - puVar5 = gMPlayTable[uVar8].info; - cVar2 = DisableInterrupts(); - if (preload->songIndex != 997) { - if (sub_800CAF0(uVar8) != '\0') { - m4aMPlayFadeOut(puVar5,speed); - } - else { - m4aMPlayStop(puVar5); - preload->unk0 = 0; - preload->songIndex = 997; - preload->unk4 = 0; - preload->unk6 = 0; - } + else if (IsSoundEffect(songIndex)) { + playerIndex = GetMusicPlayerIndex(songIndex); + preload = &gUnknown_3000FD8[playerIndex]; + playerInfo = gMPlayTable[playerIndex].info; + cVar2 = DisableInterrupts(); + if (preload->songIndex != 997) { + if (IsMusicPlayerPlaying(playerIndex)) { + m4aMPlayFadeOut(playerInfo,speed); } - if (cVar2 != '\0') { - EnableInterrupts(); + else { + m4aMPlayStop(playerInfo); + preload->unk0 = 0; + preload->songIndex = 997; + preload->unk4 = 0; + preload->unk6 = 0; } } - else if (songIndex == 998) { - cVar3 = DisableInterrupts(); - if ((gUnknown_202D690 != 0) && (gUnknown_202D68E != 997)) { - if (sub_800CAF0(1) != '\0') { - m4aMPlayFadeOut(&gUnknown_2000970,speed); - } - else { - m4aMPlayStop(&gUnknown_2000970); - gUnknown_202D68E = 997; - } + if (cVar2 != '\0') { + EnableInterrupts(); + } + } + else if (songIndex == 998) { + cVar3 = DisableInterrupts(); + if ((gUnknown_202D690 != 0) && (gCurrentFanfareSong != 997)) { + if (IsMusicPlayerPlaying(INDEX_FANFARE)) { + m4aMPlayFadeOut(&gMPlayInfo_Fanfare,speed); } - if (cVar3 != '\0') { - EnableInterrupts(); + else { + m4aMPlayStop(&gMPlayInfo_Fanfare); + gCurrentFanfareSong = 997; } } - else if (IsFanfare(songIndex)) { - cVar4 = DisableInterrupts(); - if ((gUnknown_202D690 != 0) && (gUnknown_202D68E == songIndex)) { - if (sub_800CAF0(1) != '\0') { - m4aMPlayFadeOut(&gUnknown_2000970,speed); - } - else { - m4aMPlayStop(&gUnknown_2000970); - gUnknown_202D68E = 997; - } + if (cVar3 != '\0') { + EnableInterrupts(); + } + } + else if (IsFanfare(songIndex)) { + cVar4 = DisableInterrupts(); + if ((gUnknown_202D690 != 0) && (gCurrentFanfareSong == songIndex)) { + if (IsMusicPlayerPlaying(INDEX_FANFARE)) { + m4aMPlayFadeOut(&gMPlayInfo_Fanfare,speed); } - if (cVar4 != '\0') { - EnableInterrupts(); + else { + m4aMPlayStop(&gMPlayInfo_Fanfare); + gCurrentFanfareSong = 997; } } + if (cVar4 != '\0') { + EnableInterrupts(); + } } } @@ -911,10 +910,9 @@ bool8 sub_800C5D0(u16 songIndex) songIndex_u32 = songIndex; songIndex_u32_2 = songIndex_u32; - if (IsFanfare(songIndex_u32)) { - if ((gUnknown_202D690 != 0) && (gUnknown_202D68E == songIndex_u32)) { + if ((gUnknown_202D690 != 0) && (gCurrentFanfareSong == songIndex_u32)) { return TRUE; } } @@ -923,7 +921,7 @@ bool8 sub_800C5D0(u16 songIndex) if (IsSoundEffect(songIndex_u32)) { uVar3 = GetMusicPlayerIndex(songIndex_u32); preload = &gUnknown_3000FD8[uVar3]; - if ((1 < uVar3) && (preload->songIndex == songIndex_u32_2)) { + if ((INDEX_SE1 <= uVar3) && (preload->songIndex == songIndex_u32_2)) { return TRUE; } } diff --git a/sym_ewram.txt b/sym_ewram.txt index 5ad637869..fe49cf47a 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1,38 +1,53 @@ gMPlayTrack_BGM = .; /* 2000000 */ . += 0x3C0; -gMPlayTrack_Unknown1 = .; /* 20003C0 */ +gMPlayTrack_Fanfare = .; /* 20003C0 */ . += 0x1E0; -gMPlayTrack_Unknown2 = .; /* 20005A0 */ +gMPlayTrack_SE1 = .; /* 20005A0 */ . += 0x50; -gMPlayTrack_Unknown3 = .; /* 20005F0 */ +gMPlayTrack_SE2 = .; /* 20005F0 */ . += 0x50; -gMPlayTrack_Unknown4 = .; /* 2000640 */ +gMPlayTrack_SE3 = .; /* 2000640 */ . += 0xA0; -gMPlayTrack_Unknown5 = .; /* 20006E0 */ +gMPlayTrack_SE4 = .; /* 20006E0 */ . += 0xA0; -gMPlayTrack_Unknown6 = .; /* 2000780 */ +gMPlayTrack_SE5 = .; /* 2000780 */ . += 0xA0; -gMPlayTrack_Unknown7 = .; /* 2000820 */ +gMPlayTrack_SE6 = .; /* 2000820 */ . += 0x50; -gUnknown_2000870 = .; /* 2000870 */ - . += 0x80; +gMPlayInfo_SE4 = .; /* 2000870 */ + . += 0x40; + +gMPlayInfo_SE5 = .; /* 20008B0 */ + . += 0x40; gMPlayInfo_BGM = .; /* 20008F0 */ - . += 0x80; + . += 0x40; -gUnknown_2000970 = .; /* 2000970 */ - . += 0xC0; +gMPlayInfo_SE6 = .; /* 2000930 */ + . += 0x40; + +gMPlayInfo_Fanfare = .; /* 2000970 */ + . += 0x40; + +gMPlayInfo_SE1 = .; /* 20009B0 */ + . += 0x40; + +gMPlayInfo_SE3 = .; /* 20009F0 */ + . += 0x40; gMPlayMemAccArea = .; /* 2000A30 */ - . += 0x50; + . += 0x10; + +gMPlayInfo_SE2 = .; /* 2000A40 */ + . += 0x40; gUnknown_2000A80 = .; /* 2000A80 */ . += 0x8; @@ -305,7 +320,7 @@ gCurrentBGSong = .; /* 202D68A */ gUnknown_202D68C = .; /* 202D68C */ . += 0x2; -gUnknown_202D68E = .; /* 202D68E */ +gCurrentFanfareSong = .; /* 202D68E */ . += 0x2; gUnknown_202D690 = .; /* 202D690 */ From 6746cb699a47c9f4c6b9364547ae47a7c53569d3 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 17 Jun 2022 11:39:29 -0700 Subject: [PATCH 10/11] continue labeling more music stuff --- asm/code_2.s | 4 +- asm/code_805D8C8.s | 2 +- asm/code_808333C.s | 38 ++++++------- asm/code_8098468.s | 8 +-- asm/code_8098BDC.s | 4 +- asm/ground_script.s | 12 ++-- include/music.h | 11 ++-- src/code_80118A4.c | 51 ++++++++--------- src/code_8057824_1.c | 6 +- src/code_8098BDC.c | 6 +- src/luminous_cave.c | 4 +- src/music.c | 6 +- src/music_pre.c | 132 +++++++++++++++++++++---------------------- 13 files changed, 141 insertions(+), 143 deletions(-) diff --git a/asm/code_2.s b/asm/code_2.s index b062aaba1..cad5df10a 100644 --- a/asm/code_2.s +++ b/asm/code_2.s @@ -452,7 +452,7 @@ sub_80009D0: mov r10, r0 bl sub_801180C movs r0, 0x10 - bl sub_80118C4 + bl FadeOutAllMusic cmp r7, 0x7 bne _08000A30 cmp r4, 0x2 @@ -1161,7 +1161,7 @@ _08000FB8: adds r0, r4, 0 adds r0, 0x80 bl SetDungeonLocationInfo - bl sub_8011924 + bl xxx_call_stop_bgm movs r1, 0 ldrsh r0, [r7, r1] cmp r0, r6 diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index bd1a38fdb..f7d79d2f3 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -3200,7 +3200,7 @@ _0805F1F8: ldr r0, _0805F20C movs r1, 0x80 lsls r1, 1 - bl sub_800C074 + bl PlayFanfareSE b _0805F240 .align 2, 0 _0805F208: .4byte gDungeonGlobalData diff --git a/asm/code_808333C.s b/asm/code_808333C.s index 239d7813a..7cbda48e0 100644 --- a/asm/code_808333C.s +++ b/asm/code_808333C.s @@ -1232,7 +1232,7 @@ _08083CF2: ldr r0, _08083D04 movs r1, 0x80 lsls r1, 1 - bl sub_800C074 + bl PlayFanfareSE _08083CFC: pop {r0} bx r0 @@ -1248,7 +1248,7 @@ sub_8083D08: lsls r0, 1 movs r1, 0x80 lsls r1, 1 - bl sub_800C074 + bl PlayFanfareSE pop {r0} bx r0 thumb_func_end sub_8083D08 @@ -1259,7 +1259,7 @@ sub_8083D1C: ldr r0, _08083D2C movs r1, 0x80 lsls r1, 1 - bl sub_800C074 + bl PlayFanfareSE pop {r0} bx r0 .align 2, 0 @@ -1272,7 +1272,7 @@ sub_8083D30: ldr r0, _08083D40 movs r1, 0x80 lsls r1, 1 - bl sub_800C074 + bl PlayFanfareSE pop {r0} bx r0 .align 2, 0 @@ -1286,7 +1286,7 @@ sub_8083D44: lsls r0, 1 movs r1, 0x80 lsls r1, 1 - bl sub_800C074 + bl PlayFanfareSE pop {r0} bx r0 thumb_func_end sub_8083D44 @@ -1297,7 +1297,7 @@ sub_8083D58: movs r1, 0x80 lsls r1, 1 movs r0, 0xC8 - bl sub_800C074 + bl PlayFanfareSE pop {r0} bx r0 thumb_func_end sub_8083D58 @@ -1308,7 +1308,7 @@ sub_8083D68: movs r1, 0x80 lsls r1, 1 movs r0, 0xCF - bl sub_800C074 + bl PlayFanfareSE pop {r0} bx r0 thumb_func_end sub_8083D68 @@ -1319,7 +1319,7 @@ sub_8083D78: movs r1, 0x80 lsls r1, 1 movs r0, 0xD3 - bl sub_800C074 + bl PlayFanfareSE pop {r0} bx r0 thumb_func_end sub_8083D78 @@ -1330,7 +1330,7 @@ sub_8083D88: movs r1, 0x80 lsls r1, 1 movs r0, 0xCC - bl sub_800C074 + bl PlayFanfareSE pop {r0} bx r0 thumb_func_end sub_8083D88 @@ -1409,7 +1409,7 @@ sub_8083E28: movs r1, 0x80 lsls r1, 1 movs r0, 0xCF - bl sub_800C074 + bl PlayFanfareSE pop {r0} bx r0 thumb_func_end sub_8083E28 @@ -1425,7 +1425,7 @@ PlaySoundEffect: movs r1, 0x80 lsls r1, 1 adds r0, r2, 0 - bl sub_800C074 + bl PlayFanfareSE _08083E4E: pop {r0} bx r0 @@ -1442,7 +1442,7 @@ sub_8083E58: cmp r1, r0 beq _08083E6A adds r0, r1, 0 - bl sub_800C298 + bl StopFanfareSE _08083E6A: pop {r0} bx r0 @@ -1450,17 +1450,17 @@ _08083E6A: _08083E70: .4byte 0x000003e5 thumb_func_end sub_8083E58 - thumb_func_start sub_8083E74 -sub_8083E74: + thumb_func_start IsFanfareSEPlaying_2 +IsFanfareSEPlaying_2: push {lr} lsls r0, 16 lsrs r0, 16 - bl sub_800C5D0 + bl IsFanfareSEPlaying lsls r0, 24 lsrs r0, 24 pop {r1} bx r1 - thumb_func_end sub_8083E74 + thumb_func_end IsFanfareSEPlaying_2 thumb_func_start sub_8083E88 sub_8083E88: @@ -1511,7 +1511,7 @@ sub_8083ED8: push {lr} lsls r0, 16 lsrs r0, 16 - bl sub_80118C4 + bl FadeOutAllMusic ldr r0, _08083F00 ldr r1, [r0] ldr r2, _08083F04 @@ -1538,7 +1538,7 @@ _08083F10: .4byte 0x0001ceda sub_8083F14: push {lr} bl sub_8083F34 - bl sub_8011924 + bl xxx_call_stop_bgm pop {r0} bx r0 thumb_func_end sub_8083F14 @@ -1716,7 +1716,7 @@ _0808406C: ldr r0, _0808407C cmp r1, r0 bne _08084080 - bl sub_800BF80 + bl StopBGM movs r0, 0 b _08084082 .align 2, 0 diff --git a/asm/code_8098468.s b/asm/code_8098468.s index 62154f7a2..57a593c04 100644 --- a/asm/code_8098468.s +++ b/asm/code_8098468.s @@ -94,7 +94,7 @@ _08098504: cmp r0, 0 bne _08098522 movs r0, 0x10 - bl sub_80118C4 + bl FadeOutAllMusic _08098522: ldr r1, _080985B4 ldr r2, _080985B8 @@ -490,7 +490,7 @@ _080988E4: movs r0, 0x1E bl sub_8098F44 movs r0, 0x1E - bl sub_80118C4 + bl FadeOutAllMusic _080988F8: bl GroundMap_Action bl nullsub_124 @@ -572,7 +572,7 @@ _080989E8: .4byte gUnknown_20398A8 _080989EC: .4byte gUnknown_20398B9 _080989F0: movs r0, 0x1E - bl sub_80118C4 + bl FadeOutAllMusic movs r0, 0xF b _08098BD2 _080989FA: @@ -779,7 +779,7 @@ _08098BC0: movs r2, 0x1 bl sub_80018D8 movs r0, 0x10 - bl sub_80118C4 + bl FadeOutAllMusic movs r0, 0xE _08098BD2: add sp, 0x8 diff --git a/asm/code_8098BDC.s b/asm/code_8098BDC.s index 0e13d9e2f..c5d0c99b5 100644 --- a/asm/code_8098BDC.s +++ b/asm/code_8098BDC.s @@ -426,7 +426,7 @@ sub_80993F0: mov r10, r0 bl sub_801180C movs r0, 0x10 - bl sub_80118C4 + bl FadeOutAllMusic ldr r1, _0809948C ldr r2, _08099490 adds r0, r2, 0 @@ -661,7 +661,7 @@ _08099604: _08099620: .4byte gUnknown_203B46C _08099624: movs r0, 0x10 - bl sub_80118C4 + bl FadeOutAllMusic bl sub_80A4AC4 bl sub_8099768 bl nullsub_103 diff --git a/asm/ground_script.s b/asm/ground_script.s index 8992effcc..8fe8c5d3c 100644 --- a/asm/ground_script.s +++ b/asm/ground_script.s @@ -768,7 +768,7 @@ _0809DF24: str r0, [r1] add r0, sp, 0x4 ldrh r0, [r0, 0x2] - bl sub_80119C0 + bl IsFanfareSEPlaying_1 lsls r0, 24 cmp r0, 0 bne _0809DF42 @@ -4176,7 +4176,7 @@ _0809FCCE: .align 2, 0 _0809FCE4: .4byte gUnknown_2039D98 _0809FCE8: - bl sub_80118A4 + bl StopAllMusic_1 bl _0809EAE0 _0809FCF0: add r0, sp, 0x8 @@ -4190,7 +4190,7 @@ _0809FCF0: _0809FD00: movs r0, 0x1E _0809FD02: - bl sub_80118C4 + bl FadeOutAllMusic bl _0809EAE0 _0809FD0A: add r0, sp, 0x8 @@ -4266,7 +4266,7 @@ _0809FD90: .align 2, 0 _0809FD9C: .4byte 0x000003e7 _0809FDA0: - bl sub_8011924 + bl xxx_call_stop_bgm bl _0809EAE0 _0809FDA8: add r0, sp, 0x8 @@ -4294,7 +4294,7 @@ _0809FDD4: ldr r0, [sp, 0xC] lsls r0, 16 lsrs r0, 16 - bl sub_801199C + bl xxx_call_stop_fanfare_se bl _0809EAE0 _0809FDE2: ldr r0, [sp, 0xC] @@ -8734,7 +8734,7 @@ _080A229E: bl sub_8098F00 lsls r0, r5, 16 lsrs r0, 16 - bl sub_80118C4 + bl FadeOutAllMusic b _080A236A _080A22AE: bl GetCurrentBGSong diff --git a/include/music.h b/include/music.h index 7527a07c7..9723e6424 100644 --- a/include/music.h +++ b/include/music.h @@ -14,16 +14,17 @@ void StartNewBGM(u16 songIndex); void FadeInNewBGM(u16 SongIndex, u16 speed); u16 GetCurrentBGSong(void); void sub_800BF48(u16 SongIndex); -void sub_800BF80(void); +void StopBGM(void); // stops all BGM, fanfares and SE's void FadeOutBGM(u16 speed); -void sub_800C074(u16 SongIndex, u16 param_2); -void sub_800C298(u16 songIndex); -void sub_800C3F8(u16 songIndex, u16 speed); +void PlayFanfareSE(u16 SongIndex, u16 param_2); +void StopFanfareSE(u16 songIndex); +void FadeOutFanfareSE(u16 songIndex, u16 speed); +bool8 IsFanfareSEPlaying(u16 songIndex); void nullsub_19(void); void nullsub_20(u16 songIndex); -enum GetMusicPlayerIndex +enum MusicPlayerIndex { INDEX_BGM, INDEX_FANFARE, diff --git a/src/code_80118A4.c b/src/code_80118A4.c index dd87530b3..e0822d889 100644 --- a/src/code_80118A4.c +++ b/src/code_80118A4.c @@ -9,13 +9,10 @@ #include "config.h" -void sub_8011924(void); +void xxx_call_stop_bgm(void); extern u8 sub_80023E4(u8); -extern void sub_800C3F8(u16 r0, u16 r1); -extern void sub_801199C(u16 r0); -extern void sub_800C298(u16 r0); -extern bool8 sub_800C5D0(u16 r0); +extern void xxx_call_stop_fanfare_se(u16 r0); struct UnkSaveStruct1 { @@ -118,19 +115,19 @@ void sub_80117C4(void) // Some sound effect void sub_80117D0(void) { - sub_800C074(302, 256); + PlayFanfareSE(302, 256); } // Some sound effect void sub_80117E4(void) { - sub_800C074(303, 256); + PlayFanfareSE(303, 256); } // Some sound effect void sub_80117F8(void) { - sub_800C074(301, 256); + PlayFanfareSE(301, 256); } void sub_801180C(void) @@ -170,18 +167,18 @@ void sub_8011860(void) } } -void sub_80118A4(void) +void StopAllMusic_1(void) { - sub_8011924(); - sub_801199C(0x3e6); - sub_801199C(0x3e5); + xxx_call_stop_bgm(); + xxx_call_stop_fanfare_se(998); + xxx_call_stop_fanfare_se(997); } -void sub_80118C4(u16 r0) +void FadeOutAllMusic(u16 speed) { - FadeOutBGM(r0); - sub_800C3F8(0x3e6, r0); - sub_800C3F8(0x3e5, r0); + FadeOutBGM(speed); + FadeOutFanfareSE(998, speed); + FadeOutFanfareSE(997, speed); } void xxx_call_start_new_bgm(u16 songIndex) @@ -199,9 +196,9 @@ void sub_8011914(u16 songIndex) sub_800BF48(songIndex); } -void sub_8011924() +void xxx_call_stop_bgm() { - sub_800BF80(); + StopBGM(); } void xxx_call_fade_out_bgm(u16 speed) @@ -222,34 +219,34 @@ u32 IsEqualtoBGTrack(u16 songIndex) void sub_8011974(u16 songIndex, u16 r1) { - sub_800C074(songIndex, r1); + PlayFanfareSE(songIndex, r1); } void PlaySound(u16 songIndex) { - sub_800C074(songIndex, 256); + PlayFanfareSE(songIndex, 256); } -void sub_801199C(u16 songIndex) +void xxx_call_stop_fanfare_se(u16 songIndex) { - sub_800C298(songIndex); + StopFanfareSE(songIndex); } void sub_80119AC(u16 songIndex, u16 r1) { - sub_800C3F8(songIndex, r1); + FadeOutFanfareSE(songIndex, r1); } -bool8 sub_80119C0(u16 songIndex) +bool8 IsFanfareSEPlaying_1(u16 songIndex) { - return sub_800C5D0(songIndex); + return IsFanfareSEPlaying(songIndex); } void PlayMenuSoundEffect(u32 r0) { if(gUnknown_202DE20 > 0) return; - sub_800C074(gUnknown_80D4144[r0], 256); + PlayFanfareSE(gUnknown_80D4144[r0], 256); gUnknown_202DE20 = 4; } @@ -258,7 +255,7 @@ void sub_8011A04(void) if(gUnknown_202DE22 > 0) return; gUnknown_202DE22 = 3; - sub_800C074(305, 256); + PlayFanfareSE(305, 256); } void sub_8011A2C(u32 r0) diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index df1e4153a..3fb4a3176 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -334,7 +334,7 @@ extern void DisplayDungeonDialogue(u32 *); extern void sub_803E708(u32, u32); extern u8 HasRecruitedMon(u32); extern u8 sub_806FD18(struct DungeonEntity *); -extern u8 sub_8083E74(u32); +extern bool8 IsFanfareSEPlaying_2(u32); extern void sub_8083F14(); extern void sub_80861D4(struct DungeonEntity *, u32, u32); extern void sub_806FDF4(struct DungeonEntity *, struct DungeonEntity *, struct DungeonEntity **); @@ -4546,7 +4546,7 @@ void CelebiJoinDialogue(void) { sub_8083F14(); PlaySoundEffect(0xcc); - while (sub_8083E74(0xcc) != 0) { + while (IsFanfareSEPlaying_2(0xcc) != 0) { sub_803E46C(0x46); } sub_8083E88(0x7f); @@ -4746,7 +4746,7 @@ void CelebiJoinDialogue(void) "\tbl sub_803E46C\n" "_0808C76E:\n" "\tmovs r0, 0xCC\n" - "\tbl sub_8083E74\n" + "\tbl IsFanfareSEPlaying_2\n" "\tlsls r0, 24\n" "\tcmp r0, 0\n" "\tbne _0808C768\n" diff --git a/src/code_8098BDC.c b/src/code_8098BDC.c index 486242a49..8e5d706f2 100644 --- a/src/code_8098BDC.c +++ b/src/code_8098BDC.c @@ -72,7 +72,7 @@ extern const char *sub_80A2B18(s16); extern u8 sub_8001CC4(u8, u8, u8); extern void xxx_inv_unk250_random_8091980(u32); extern u8 sub_80023E4(u32); -extern void sub_80118C4(u16); +extern void FadeOutAllMusic(u16); extern u8 sub_809C730(); extern s16 sub_80A2750(s16); extern u8 sub_8001D44(u32, u32, s32); @@ -209,7 +209,7 @@ bool8 sub_8098D80(u32 r0) sub_809C730(); if(sub_80023E4(0xD) == 0) { - sub_80118C4(r0); + FadeOutAllMusic(r0); } return TRUE; } @@ -226,7 +226,7 @@ bool8 sub_8098DCC(u32 r0) sub_809C730(); if(sub_80023E4(0xD) == 0) { - sub_80118C4(r0); + FadeOutAllMusic(r0); } return TRUE; } diff --git a/src/luminous_cave.c b/src/luminous_cave.c index fa78f0611..d9c850dc6 100644 --- a/src/luminous_cave.c +++ b/src/luminous_cave.c @@ -96,7 +96,7 @@ extern void UpdateLuminousCaveDialogue(void); extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u16 *, u32, u32, struct OpenedFile **r5, u32); void xxx_call_fade_out_bgm(u16 speed); -void sub_801199C(u16 songIndex); +void xxx_call_stop_fanfare_se(u16 songIndex); void xxx_call_fade_in_new_bgm(u16 songIndex, u16 speed); void sub_80977D0(void); void PlaySound(u32); @@ -397,7 +397,7 @@ void UpdateLuminousCaveDialogue(void) ClearItemSlotAt(gUnknown_203B2B0->evoItem2_InvIndex); } FillInventoryGaps(); - sub_801199C(0x1ff); + xxx_call_stop_fanfare_se(0x1ff); PlaySound(0xd2); if (gUnknown_203B2B0->pokeRenamed) { BoundedCopyStringtoBuffer(gUnknown_203B2B0->pokeStruct->name,GetMonSpecies(gUnknown_203B2B0->pokeStruct->speciesNum),POKEMON_NAME_LENGTH); diff --git a/src/music.c b/src/music.c index 2acb74337..9fda55f72 100644 --- a/src/music.c +++ b/src/music.c @@ -4,7 +4,7 @@ #include "music.h" extern u8 sub_80023E4(u32); -extern void sub_80118C4(u16); +extern void FadeOutAllMusic(u16); extern void sub_809C730(); extern bool8 DisableInterrupts(); @@ -32,8 +32,8 @@ void StopBGMusicVSync(void) bool8 interrupt_flag; u16 temp; - sub_800C3F8(0x3e5, 0x10); - sub_800C3F8(0x3e6, 0x10); + FadeOutFanfareSE(0x3e5, 0x10); + FadeOutFanfareSE(0x3e6, 0x10); interrupt_flag = DisableInterrupts(); if(gUnknown_202D690 == 0) diff --git a/src/music_pre.c b/src/music_pre.c index 252e26033..0eb09d33e 100644 --- a/src/music_pre.c +++ b/src/music_pre.c @@ -50,7 +50,8 @@ extern s16 gUnknown_203B0AE; extern s16 gUnknown_203B0B0; extern s16 gUnknown_203B0B2; -struct unkStruct_3000FD8 +// PMD keeps it's own copy of music players for some reason +struct PMDMusicPlayer { u16 unk0; u16 songIndex; @@ -58,8 +59,8 @@ struct unkStruct_3000FD8 u8 unk6; }; -extern struct unkStruct_3000FD8 gUnknown_3000FD8[8]; -extern struct unkStruct_3000FD8 gUnknown_3000FE8[8]; +extern struct PMDMusicPlayer gUnknown_3000FD8[8]; +extern struct PMDMusicPlayer gUnknown_3000FE8[8]; extern u8 gUnknown_202D7FE; extern u16 gBldCnt; @@ -80,7 +81,7 @@ enum extern void SoundVSync(); extern void BlinkSavingIcon(); -void sub_800BF80(void); +void StopBGM(void); void xxx_update_bg_sound_input(void); void UnusedIntrFunc(void) @@ -394,9 +395,9 @@ void UpdateBGControlRegisters(void) void InitMusic(void) { - s32 counter; + s32 playerIndex; - struct unkStruct_3000FD8 *preload; + struct PMDMusicPlayer *musicPlayer; DmaStop(0); DmaStop(1); @@ -413,24 +414,23 @@ void InitMusic(void) gUnknown_202D692 = 0; gUnknown_202D694 = 0; - for(counter = INDEX_BGM, preload = &gUnknown_3000FD8[0]; counter < INDEX_SE6 + 1; counter++, preload++) + for(playerIndex = INDEX_BGM, musicPlayer = &gUnknown_3000FD8[0]; playerIndex < INDEX_SE6 + 1; playerIndex++, musicPlayer++) { - preload->unk0 = 0; - preload->songIndex = 997; - preload->unk4 = 0; - preload->unk6 = 0; + musicPlayer->unk0 = 0; + musicPlayer->songIndex = 997; + musicPlayer->unk4 = 0; + musicPlayer->unk6 = 0; } nullsub_19(); } -void sub_800BDDC(void) +void StopAllMusic(void) { - sub_800BF80(); - sub_800C298(998); - sub_800C298(997); + StopBGM(); + StopFanfareSE(998); + StopFanfareSE(997); } - void StartNewBGM(u16 songIndex) { bool8 interrupt_flag; @@ -518,7 +518,7 @@ void sub_800BF48(u16 songIndex) gUnknown_202D68C = songIndex; } -void sub_800BF80(void) +void StopBGM(void) { bool8 interrupt_flag = DisableInterrupts(); if(gUnknown_202D690 == 0) @@ -584,12 +584,12 @@ u16 GetCurrentBGSong(void) return gCurrentBGSong; } -void sub_800C074(u16 songIndex, u16 param_2) +void PlayFanfareSE(u16 songIndex, u16 param_2) { bool8 interrupt_flag; bool8 interrupt_flag2; u16 playerIndex; - struct unkStruct_3000FD8 *preload; + struct PMDMusicPlayer *musicPlayer; if (songIndex == 997) return; @@ -672,24 +672,24 @@ void sub_800C074(u16 songIndex, u16 param_2) if (!IsSoundEffect(songIndex)) return; playerIndex = GetMusicPlayerIndex(songIndex); - preload = &gUnknown_3000FD8[playerIndex]; // need to load this before comparison to match + musicPlayer = &gUnknown_3000FD8[playerIndex]; // need to load this before comparison to match if (playerIndex < INDEX_SE1) nullsub_20(songIndex); else { interrupt_flag2 = DisableInterrupts(); m4aSongNumStart(songIndex); - preload->unk0 = 1; - preload->songIndex = songIndex; + musicPlayer->unk0 = 1; + musicPlayer->songIndex = songIndex; if(param_2 == 256) { - preload->unk6 = 0; + musicPlayer->unk6 = 0; } else { - preload->unk6 = 1; + musicPlayer->unk6 = 1; } - preload->unk4 = param_2; + musicPlayer->unk4 = param_2; if (interrupt_flag2) EnableInterrupts(); } @@ -701,7 +701,7 @@ void SetSoundEffectVolume(u16 songIndex, u16 volume) bool8 interrupt_flag; u16 playerIndex; struct MusicPlayerInfo *info; - struct unkStruct_3000FD8 *preload; + struct PMDMusicPlayer *musicPlayer; if (256 < volume) { volume = 256; @@ -710,10 +710,10 @@ void SetSoundEffectVolume(u16 songIndex, u16 volume) if ((!IsFanfare(songIndex)) && (IsSoundEffect(songIndex))) { playerIndex = GetMusicPlayerIndex(songIndex); info = gMPlayTable[playerIndex].info; - preload = &gUnknown_3000FD8[playerIndex]; + musicPlayer = &gUnknown_3000FD8[playerIndex]; if (playerIndex >= INDEX_SE1) { interrupt_flag = DisableInterrupts(); - if (preload->songIndex == songIndex) { + if (musicPlayer->songIndex == songIndex) { m4aMPlayVolumeControl(info, 0xf, volume); } if (interrupt_flag) @@ -722,7 +722,7 @@ void SetSoundEffectVolume(u16 songIndex, u16 volume) } } -void sub_800C298(u16 songIndex) +void StopFanfareSE(u16 songIndex) { // Each section needs a var for interrupts.. char cVar1; @@ -732,20 +732,20 @@ void sub_800C298(u16 songIndex) u32 playerIndex; s32 playerIndex2; - struct MusicPlayerInfo *puVar6; - struct unkStruct_3000FD8 *preload; - struct unkStruct_3000FD8 *puVar3; + struct MusicPlayerInfo *info; + struct PMDMusicPlayer *musicPlayer; + struct PMDMusicPlayer *musicPlayer1; if (songIndex == 997) { cVar1 = DisableInterrupts(); - for(playerIndex2 = INDEX_SE1, puVar3 = &gUnknown_3000FE8[0]; playerIndex2 < INDEX_SE6; playerIndex2++, puVar3++) + for(playerIndex2 = INDEX_SE1, musicPlayer1 = &gUnknown_3000FE8[0]; playerIndex2 < INDEX_SE6; playerIndex2++, musicPlayer1++) { m4aMPlayStop(gMPlayTable[playerIndex2].info); - puVar3->unk0 = 0; - puVar3->songIndex = 997; - puVar3->unk4 = 0; - puVar3->unk6 = 0; + musicPlayer1->unk0 = 0; + musicPlayer1->songIndex = 997; + musicPlayer1->unk4 = 0; + musicPlayer1->unk6 = 0; } if (cVar1 != '\0') { EnableInterrupts(); @@ -754,19 +754,19 @@ void sub_800C298(u16 songIndex) else if (IsSoundEffect(songIndex)) { playerIndex = GetMusicPlayerIndex(songIndex); - puVar6 = gMPlayTable[playerIndex].info; - preload = &gUnknown_3000FD8[playerIndex]; + info = gMPlayTable[playerIndex].info; + musicPlayer = &gUnknown_3000FD8[playerIndex]; if (playerIndex < INDEX_SE1) { nullsub_21(songIndex); } else { cVar2 = DisableInterrupts(); - if (preload->songIndex == songIndex) { - m4aMPlayStop(puVar6); - preload->unk0 = 0; - preload->songIndex = 997; - preload->unk4 = 0; - preload->unk6 = 0; + if (musicPlayer->songIndex == songIndex) { + m4aMPlayStop(info); + musicPlayer->unk0 = 0; + musicPlayer->songIndex = 997; + musicPlayer->unk4 = 0; + musicPlayer->unk6 = 0; } if (cVar2 != '\0') { EnableInterrupts(); @@ -801,7 +801,7 @@ void sub_800C298(u16 songIndex) } } -void sub_800C3F8(u16 songIndex, u16 speed) +void FadeOutFanfareSE(u16 songIndex, u16 speed) { char cVar1; char cVar2; @@ -810,8 +810,8 @@ void sub_800C3F8(u16 songIndex, u16 speed) u32 comparison; s32 playerIndex2; u32 playerIndex; - struct unkStruct_3000FD8 *preload; - struct unkStruct_3000FD8 *puVar3; + struct PMDMusicPlayer *musicPlayer; + struct PMDMusicPlayer *musicPlayer1; struct MusicPlayerInfo *playerInfo; comparison = 0x80 << 17; // 16777216 @@ -829,18 +829,18 @@ void sub_800C3F8(u16 songIndex, u16 speed) if (songIndex == 997) { cVar1 = DisableInterrupts(); - for(playerIndex2 = INDEX_SE1, puVar3 = &gUnknown_3000FE8[0]; playerIndex2 < INDEX_SE6; playerIndex2++, puVar3++) + for(playerIndex2 = INDEX_SE1, musicPlayer1 = &gUnknown_3000FE8[0]; playerIndex2 < INDEX_SE6; playerIndex2++, musicPlayer1++) { - if (puVar3->songIndex != 997) { + if (musicPlayer1->songIndex != 997) { if (IsMusicPlayerPlaying(playerIndex2)) { m4aMPlayFadeOut(gMPlayTable[playerIndex2].info,speed); } else { m4aMPlayStop(gMPlayTable[playerIndex2].info); - puVar3->unk0 = 0; - puVar3->songIndex = 997; - puVar3->unk4 = 0; - puVar3->unk6 = 0; + musicPlayer1->unk0 = 0; + musicPlayer1->songIndex = 997; + musicPlayer1->unk4 = 0; + musicPlayer1->unk6 = 0; } } } @@ -850,19 +850,19 @@ void sub_800C3F8(u16 songIndex, u16 speed) } else if (IsSoundEffect(songIndex)) { playerIndex = GetMusicPlayerIndex(songIndex); - preload = &gUnknown_3000FD8[playerIndex]; + musicPlayer = &gUnknown_3000FD8[playerIndex]; playerInfo = gMPlayTable[playerIndex].info; cVar2 = DisableInterrupts(); - if (preload->songIndex != 997) { + if (musicPlayer->songIndex != 997) { if (IsMusicPlayerPlaying(playerIndex)) { m4aMPlayFadeOut(playerInfo,speed); } else { m4aMPlayStop(playerInfo); - preload->unk0 = 0; - preload->songIndex = 997; - preload->unk4 = 0; - preload->unk6 = 0; + musicPlayer->unk0 = 0; + musicPlayer->songIndex = 997; + musicPlayer->unk4 = 0; + musicPlayer->unk6 = 0; } } if (cVar2 != '\0') { @@ -901,10 +901,10 @@ void sub_800C3F8(u16 songIndex, u16 speed) } } -bool8 sub_800C5D0(u16 songIndex) +bool8 IsFanfareSEPlaying(u16 songIndex) { - u32 uVar3; - struct unkStruct_3000FD8 *preload; + u32 playerIndex; + struct PMDMusicPlayer *musicPlayer; register u32 songIndex_u32 asm("r4"); register u32 songIndex_u32_2 asm("r5"); @@ -919,9 +919,9 @@ bool8 sub_800C5D0(u16 songIndex) else { if (IsSoundEffect(songIndex_u32)) { - uVar3 = GetMusicPlayerIndex(songIndex_u32); - preload = &gUnknown_3000FD8[uVar3]; - if ((INDEX_SE1 <= uVar3) && (preload->songIndex == songIndex_u32_2)) { + playerIndex = GetMusicPlayerIndex(songIndex_u32); + musicPlayer = &gUnknown_3000FD8[playerIndex]; + if ((INDEX_SE1 <= playerIndex) && (musicPlayer->songIndex == songIndex_u32_2)) { return TRUE; } } From 015b63fef23972df563d2c04514c668b9d6e84d2 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 25 Jun 2022 09:07:33 -0700 Subject: [PATCH 11/11] address review comments --- asm/music.s | 2 +- src/code_8057824_1.c | 2 +- src/music.c | 8 ++++---- src/music_pre.c | 12 ++++++------ sym_ewram.txt | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/asm/music.s b/asm/music.s index 929d0600c..edb7f8525 100644 --- a/asm/music.s +++ b/asm/music.s @@ -163,7 +163,7 @@ _0800C774: _0800C794: .4byte gCurrentBGSong _0800C798: .4byte 0x000003e7 _0800C79C: .4byte gBGMusicPlayerState -_0800C7A0: .4byte gUnknown_202D694 +_0800C7A0: .4byte gRestartBGM _0800C7A4: ldr r0, _0800C7B0 movs r1, 0x4 diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index 3fb4a3176..76da08096 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -3721,7 +3721,7 @@ void JirachiWish(void) s32 temp3; JirachiEntity = GetEntityFromClientType(0x1a); - CopySpeciesNametoBuffer(gUnknown_202E038,0x19d); // SPECIES_JIRACHI + CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_JIRACHI); sub_80855E4(sub_808BBA8); sub_808BBA8(JirachiEntity); sub_8041888(0); diff --git a/src/music.c b/src/music.c index 9fda55f72..a570d5ba1 100644 --- a/src/music.c +++ b/src/music.c @@ -23,7 +23,7 @@ extern u16 gBGMusicPlayerState; extern u16 gCurrentBGSong; extern u16 gUnknown_202D690; -extern u8 gUnknown_202D694; +extern u8 gRestartBGM; extern u32 gUnknown_203B0B8; extern u16 gRawKeyInput; @@ -45,11 +45,11 @@ void StopBGMusicVSync(void) { if(gBGMusicPlayerState == 2) { - gUnknown_202D694 = 0; + gRestartBGM = FALSE; } else if(gBGMusicPlayerState == BG_PLAYER_STATE_PLAYING) { - gUnknown_202D694 = 1; + gRestartBGM = TRUE; } gBGMusicPlayerState = BG_PLAYER_STATE_STOPPED; } @@ -74,7 +74,7 @@ void StartBGMusicVSync(void) if(gBGMusicPlayerState == BG_PLAYER_STATE_STOPPED) { gBGMusicPlayerState = BG_PLAYER_STATE_PLAYING; - if(gUnknown_202D694 != 0) + if(gRestartBGM) { m4aSongNumStart(gCurrentBGSong); } diff --git a/src/music_pre.c b/src/music_pre.c index 0eb09d33e..2c0fcb125 100644 --- a/src/music_pre.c +++ b/src/music_pre.c @@ -37,7 +37,7 @@ extern u16 gUnknown_202D68C; extern u16 gCurrentFanfareSong; extern u16 gUnknown_202D690; extern u16 gUnknown_202D692; -extern u8 gUnknown_202D694; +extern bool8 gRestartBGM; extern u8 gUnknown_203B099; extern u8 gUnknown_203B09B; extern u32 gUnknown_203B09C; @@ -412,7 +412,7 @@ void InitMusic(void) gCurrentFanfareSong = 997; gUnknown_202D690 = 0; gUnknown_202D692 = 0; - gUnknown_202D694 = 0; + gRestartBGM = FALSE; for(playerIndex = INDEX_BGM, musicPlayer = &gUnknown_3000FD8[0]; playerIndex < INDEX_SE6 + 1; playerIndex++, musicPlayer++) { @@ -451,7 +451,7 @@ void StartNewBGM(u16 songIndex) } interrupt_flag = DisableInterrupts(); gCurrentBGSong = songIndex; - gUnknown_202D694 = 1; + gRestartBGM = TRUE; if(gUnknown_202D690 == 0) { @@ -491,7 +491,7 @@ void FadeInNewBGM(u16 songIndex, u16 speed) interrupt_flag = DisableInterrupts(); gCurrentBGSong = songIndex; - gUnknown_202D694 = 1; + gRestartBGM = TRUE; if(gUnknown_202D690 == 0) { @@ -609,7 +609,7 @@ void PlayFanfareSE(u16 songIndex, u16 param_2) { gUnknown_202D690 = 1; gUnknown_202D692 = 16; - gUnknown_202D694 = 0; + gRestartBGM = FALSE; m4aMPlayFadeOutTemporarily(&gMPlayInfo_BGM, 1); } else if (gBGMusicPlayerState == 3) @@ -654,7 +654,7 @@ void PlayFanfareSE(u16 songIndex, u16 param_2) case MUS_FRIEND_AREA_ENCLOSED_ISLAND: case MUS_FRIEND_AREA_FINAL_ISLAND: case MUS_FRIEND_AREA_HEALING_FOREST: - gUnknown_202D694 = 1; + gRestartBGM = TRUE; break; default: break; diff --git a/sym_ewram.txt b/sym_ewram.txt index fe49cf47a..bde480c5f 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -329,7 +329,7 @@ gUnknown_202D690 = .; /* 202D690 */ gUnknown_202D692 = .; /* 202D692 */ . += 0x2; -gUnknown_202D694 = .; /* 202D694 */ +gRestartBGM = .; /* 202D694 */ . += 0x4; gBG0Control = .; /* 202D698 */