diff --git a/asm/overlay_18.s b/asm/overlay_18.s index eecac0f9f..76e78ea14 100644 --- a/asm/overlay_18.s +++ b/asm/overlay_18.s @@ -8,7 +8,6 @@ .extern ov18_021E590C .extern ov18_021E595C .extern ov18_021E59A8 - .extern ov18_021E5E70 .extern ov18_021E613C .extern ov18_021E66EC .extern ov18_021E6714 @@ -31,269 +30,6 @@ .text - thumb_func_start PokedexApp_MainSeq_80 -PokedexApp_MainSeq_80: ; 0x021ECF58 - push {r4, lr} - sub sp, #0x18 - add r1, sp, #0x14 - add r4, r0, #0 - bl ov18_021F7D30 - mov r1, #0 - mvn r1, r1 - cmp r0, r1 - beq _021ECF70 - cmp r0, #0xc - bls _021ECF72 -_021ECF70: - b _021ED144 -_021ECF72: - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_021ECF7E: ; jump table - .short _021ECF98 - _021ECF7E - 2 ; case 0 - .short _021ECFBA - _021ECF7E - 2 ; case 1 - .short _021ECFDC - _021ECF7E - 2 ; case 2 - .short _021ECFFE - _021ECF7E - 2 ; case 3 - .short _021ED014 - _021ECF7E - 2 ; case 4 - .short _021ED042 - _021ECF7E - 2 ; case 5 - .short _021ED06E - _021ECF7E - 2 ; case 6 - .short _021ED09C - _021ECF7E - 2 ; case 7 - .short _021ED042 - _021ECF7E - 2 ; case 8 - .short _021ED09C - _021ECF7E - 2 ; case 9 - .short _021ED0CA - _021ECF7E - 2 ; case 10 - .short _021ED0F8 - _021ECF7E - 2 ; case 11 - .short _021ED122 - _021ECF7E - 2 ; case 12 -_021ECF98: - ldr r0, [sp, #0x14] - cmp r0, #1 - bne _021ECFA6 - ldr r0, _021ED14C ; =0x000008E9 - bl PlaySE - b _021ECFAC -_021ECFA6: - ldr r0, _021ED150 ; =0x000008E8 - bl PlaySE -_021ECFAC: - add r0, r4, #0 - mov r1, #0 - mov r2, #1 - bl ov18_021EC1DC - add sp, #0x18 - pop {r4, pc} -_021ECFBA: - ldr r0, [sp, #0x14] - cmp r0, #1 - bne _021ECFC8 - ldr r0, _021ED14C ; =0x000008E9 - bl PlaySE - b _021ECFCE -_021ECFC8: - ldr r0, _021ED150 ; =0x000008E8 - bl PlaySE -_021ECFCE: - add r0, r4, #0 - mov r1, #0 - mov r2, #2 - bl ov18_021EC1DC - add sp, #0x18 - pop {r4, pc} -_021ECFDC: - ldr r0, [sp, #0x14] - cmp r0, #1 - bne _021ECFEA - ldr r0, _021ED14C ; =0x000008E9 - bl PlaySE - b _021ECFF0 -_021ECFEA: - ldr r0, _021ED150 ; =0x000008E8 - bl PlaySE -_021ECFF0: - add r0, r4, #0 - mov r1, #0x10 - mov r2, #0x50 - bl ov18_021EDC28 - add sp, #0x18 - pop {r4, pc} -_021ECFFE: - mov r0, #0x25 - lsl r0, r0, #6 - bl PlaySE - add r0, r4, #0 - mov r1, #0 - mov r2, #0xff - bl ov18_021EC1DC - add sp, #0x18 - pop {r4, pc} -_021ED014: - add r0, r4, #0 - sub r1, r1, #1 - mov r2, #2 - bl ov18_021EDF14 - cmp r0, #1 - bne _021ED03C - ldr r0, [sp, #0x14] - cmp r0, #1 - bne _021ED030 - ldr r0, _021ED14C ; =0x000008E9 - bl PlaySE - b _021ED036 -_021ED030: - ldr r0, _021ED150 ; =0x000008E8 - bl PlaySE -_021ED036: - add sp, #0x18 - mov r0, #0x52 - pop {r4, pc} -_021ED03C: - add sp, #0x18 - mov r0, #0x50 - pop {r4, pc} -_021ED042: - add r0, r4, #0 - mov r2, #1 - bl ov18_021EDF14 - cmp r0, #1 - bne _021ED068 - ldr r0, [sp, #0x14] - cmp r0, #1 - bne _021ED05C - ldr r0, _021ED14C ; =0x000008E9 - bl PlaySE - b _021ED062 -_021ED05C: - ldr r0, _021ED150 ; =0x000008E8 - bl PlaySE -_021ED062: - add sp, #0x18 - mov r0, #0x52 - pop {r4, pc} -_021ED068: - add sp, #0x18 - mov r0, #0x50 - pop {r4, pc} -_021ED06E: - mov r1, #2 - add r0, r4, #0 - add r2, r1, #0 - bl ov18_021EDF14 - cmp r0, #1 - bne _021ED096 - ldr r0, [sp, #0x14] - cmp r0, #1 - bne _021ED08A - ldr r0, _021ED14C ; =0x000008E9 - bl PlaySE - b _021ED090 -_021ED08A: - ldr r0, _021ED150 ; =0x000008E8 - bl PlaySE -_021ED090: - add sp, #0x18 - mov r0, #0x53 - pop {r4, pc} -_021ED096: - add sp, #0x18 - mov r0, #0x50 - pop {r4, pc} -_021ED09C: - mov r1, #1 - add r0, r4, #0 - add r2, r1, #0 - bl ov18_021EDF14 - cmp r0, #1 - bne _021ED0C4 - ldr r0, [sp, #0x14] - cmp r0, #1 - bne _021ED0B8 - ldr r0, _021ED14C ; =0x000008E9 - bl PlaySE - b _021ED0BE -_021ED0B8: - ldr r0, _021ED150 ; =0x000008E8 - bl PlaySE -_021ED0BE: - add sp, #0x18 - mov r0, #0x53 - pop {r4, pc} -_021ED0C4: - add sp, #0x18 - mov r0, #0x50 - pop {r4, pc} -_021ED0CA: - add r0, sp, #0x10 - add r1, sp, #0xc - bl System_GetTouchHeldCoords - ldr r1, [sp, #0x10] - ldr r2, [sp, #0xc] - add r0, r4, #0 - bl ov18_021F6258 - cmp r0, #1 - bne _021ED0E6 - add sp, #0x18 - mov r0, #0x54 - pop {r4, pc} -_021ED0E6: - ldr r0, _021ED154 ; =0x00000868 - add r1, r4, r0 - ldr r0, [sp, #0x10] - strh r0, [r1] - ldr r0, [sp, #0xc] - add sp, #0x18 - strh r0, [r1, #2] - mov r0, #0x55 - pop {r4, pc} -_021ED0F8: - ldr r0, _021ED158 ; =0x000018C4 - ldrsb r0, [r4, r0] - cmp r0, #1 - beq _021ED144 - ldr r0, _021ED14C ; =0x000008E9 - bl PlaySE - mov r0, #0xf - str r0, [sp] - mov r0, #2 - str r0, [sp, #4] - mov r0, #0x56 - mov r2, #0x11 - str r0, [sp, #8] - add r0, r4, #0 - mov r1, #0 - add r3, r2, #0 - bl ov18_021EDC50 - add sp, #0x18 - pop {r4, pc} -_021ED122: - ldr r0, [sp, #0x14] - cmp r0, #1 - bne _021ED130 - ldr r0, _021ED14C ; =0x000008E9 - bl PlaySE - b _021ED136 -_021ED130: - ldr r0, _021ED150 ; =0x000008E8 - bl PlaySE -_021ED136: - add r0, r4, #0 - mov r1, #0 - mov r2, #4 - bl ov18_021EC1DC - add sp, #0x18 - pop {r4, pc} -_021ED144: - mov r0, #0x50 - add sp, #0x18 - pop {r4, pc} - nop -_021ED14C: .word 0x000008E9 -_021ED150: .word 0x000008E8 -_021ED154: .word 0x00000868 -_021ED158: .word 0x000018C4 - thumb_func_end PokedexApp_MainSeq_80 - thumb_func_start PokedexApp_MainSeq_81 PokedexApp_MainSeq_81: ; 0x021ED15C push {r4, r5, lr} diff --git a/include/application/pokedex/pokedex_internal.h b/include/application/pokedex/pokedex_internal.h index 486fcd08d..fede62924 100644 --- a/include/application/pokedex/pokedex_internal.h +++ b/include/application/pokedex/pokedex_internal.h @@ -388,6 +388,7 @@ int ov18_021EDBB8(PokedexAppData *pokedexApp, int a1, int a2, int a3); int ov18_021EDBDC(PokedexAppData *pokedexApp, int a1, int a2, int a3); int ov18_021EDC00(PokedexAppData *pokedexApp, int a1, int a2, int a3, int a4, int a5); int ov18_021EDC28(PokedexAppData *pokedexApp, int a1, int a2); +int ov18_021EDC50(PokedexAppData *pokedexApp, int a1, int a2, int a3, int a4, int a5, int a6); void ov18_021EDC74(PokedexAppData *pokedexApp, int a1); void ov18_021EDCD4(PokedexAppData *pokedexApp); void ov18_021EDDA4(PokedexAppData *pokedexApp, int a1); @@ -396,6 +397,7 @@ int ov18_021EDE04(PokedexAppData *pokedexApp); void ov18_021EDE4C(PokedexAppData *pokedexApp, int a1, int a2, int a3); void ov18_021EDE64(PokedexAppData *pokedexApp); void ov18_021EDEB0(PokedexAppData *pokedexApp); +int ov18_021EDF14(PokedexAppData *pokedexApp, int a1, int a2); void ov18_021EE068(PokedexAppData *pokedexApp); void ov18_021EE0CC(PokedexAppData *pokedexApp); int ov18_021EE0F0(PokedexAppData *pokedexApp, int a1, int a2); @@ -520,6 +522,7 @@ void ov18_021F4A50(PokedexAppData *pokedexApp); void ov18_021F5DC0(PokedexAppData *pokedexApp); void ov18_021F5DE0(PokedexAppData *pokedexApp); void ov18_021F619C(PokedexAppData *pokedexApp, s8 a1, s8 a2, int a3); +int ov18_021F6258(PokedexAppData *pokedexApp, int a1, int a2); int ov18_021F62B4(PokedexAppData *pokedexApp, u32 x, u32 y); BOOL ov18_021F63DC(PokedexAppData *pokedexApp, u32 x, u32 y); int ov18_021F64F4(PokedexAppData *pokedexApp, int a1); @@ -549,6 +552,7 @@ u32 ov18_021F7974(PokedexAppData *pokedexApp, int a1); void ov18_021F7B74(PokedexAppData *pokedexApp); u32 ov18_021F7C14(PokedexAppData *pokedexApp, u32 *a1); u32 ov18_021F7D00(PokedexAppData *pokedexApp, u32 *a1); +u32 ov18_021F7D30(PokedexAppData *pokedexApp, u32 *a1); void ov18_021F7ED4(PokedexAppData *pokedexApp, u8 a1, u32 a2, u32 a3, u32 a4, u32 a5, u32 a6, u32 a7, u32 a8, u32 a9, u32 a10, u32 a11); u32 ov18_021F8824(PokedexAppData *pokedexApp); u16 ov18_021F8838(PokedexAppData *pokedexApp); diff --git a/src/application/pokedex/ov18_021E8BF4.c b/src/application/pokedex/ov18_021E8BF4.c index 2a90f9576..c68279552 100644 --- a/src/application/pokedex/ov18_021E8BF4.c +++ b/src/application/pokedex/ov18_021E8BF4.c @@ -2871,3 +2871,110 @@ int PokedexApp_MainSeq_79(PokedexAppData *pokedexApp) { return POKEDEXAPP_MAINSEQ_79; } + +int PokedexApp_MainSeq_80(PokedexAppData *pokedexApp) { + u32 sp14; + + switch (ov18_021F7D30(pokedexApp, &sp14)) { + case 0: + if (sp14 == 1) { + PlaySE(SEQ_SE_GS_ZKN04); + } else { + PlaySE(SEQ_SE_GS_ZKN03); + } + return ov18_021EC1DC(pokedexApp, 0, 1); + case 1: + if (sp14 == 1) { + PlaySE(SEQ_SE_GS_ZKN04); + } else { + PlaySE(SEQ_SE_GS_ZKN03); + } + return ov18_021EC1DC(pokedexApp, 0, 2); + case 2: + if (sp14 == 1) { + PlaySE(SEQ_SE_GS_ZKN04); + } else { + PlaySE(SEQ_SE_GS_ZKN03); + } + return ov18_021EDC28(pokedexApp, 16, 80); + case 3: + PlaySE(SEQ_SE_GS_GEARCANCEL); + return ov18_021EC1DC(pokedexApp, 0, 255); + case 4: + if (ov18_021EDF14(pokedexApp, -2, 2) == 1) { + if (sp14 == 1) { + PlaySE(SEQ_SE_GS_ZKN04); + } else { + PlaySE(SEQ_SE_GS_ZKN03); + } + return POKEDEXAPP_MAINSEQ_82; + } else { + return POKEDEXAPP_MAINSEQ_80; + } + case 5: + case 8: + if (ov18_021EDF14(pokedexApp, -1, 1) == 1) { + if (sp14 == 1) { + PlaySE(SEQ_SE_GS_ZKN04); + } else { + PlaySE(SEQ_SE_GS_ZKN03); + } + return POKEDEXAPP_MAINSEQ_82; + } else { + return POKEDEXAPP_MAINSEQ_80; + } + case 6: + if (ov18_021EDF14(pokedexApp, 2, 2) == 1) { + if (sp14 == 1) { + PlaySE(SEQ_SE_GS_ZKN04); + } else { + PlaySE(SEQ_SE_GS_ZKN03); + } + return POKEDEXAPP_MAINSEQ_83; + } else { + return POKEDEXAPP_MAINSEQ_80; + } + case 7: + case 9: + if (ov18_021EDF14(pokedexApp, 1, 1) == 1) { + if (sp14 == 1) { + PlaySE(SEQ_SE_GS_ZKN04); + } else { + PlaySE(SEQ_SE_GS_ZKN03); + } + return POKEDEXAPP_MAINSEQ_83; + } else { + return POKEDEXAPP_MAINSEQ_80; + } + case 10: { + u32 x, y; + System_GetTouchHeldCoords(&x, &y); + if (ov18_021F6258(pokedexApp, x, y) == 1) { + return POKEDEXAPP_MAINSEQ_84; + } else { + PokedexAppData_UnkSub0868_State16 *r1 = &pokedexApp->unk_0868.state_16; + + r1->unk_0 = x; + r1->unk_2 = y; + return POKEDEXAPP_MAINSEQ_85; + } + } break; + case 11: + if (pokedexApp->numSeenForms != 1) { + PlaySE(SEQ_SE_GS_ZKN04); + return ov18_021EDC50(pokedexApp, 0, 17, 17, 15, 2, POKEDEXAPP_MAINSEQ_86); + } + break; + case 12: + if (sp14 == 1) { + PlaySE(SEQ_SE_GS_ZKN04); + } else { + PlaySE(SEQ_SE_GS_ZKN03); + } + return ov18_021EC1DC(pokedexApp, 0, 4); + case -1: + break; + } + + return POKEDEXAPP_MAINSEQ_80; +}