diff --git a/asm/overlay_24.s b/asm/overlay_24.s index de9d3b9a..402a11f6 100644 --- a/asm/overlay_24.s +++ b/asm/overlay_24.s @@ -3,349 +3,7 @@ .text - arm_func_start ov24_0238A140 -ov24_0238A140: ; 0x0238A140 - stmdb sp!, {r3, lr} - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - ldr r2, [r0] - ldr r1, [r2] - cmp r1, #0x26 - addls pc, pc, r1, lsl #2 - b _0238A5B8 -_0238A15C: ; jump table - b _0238A1F8 ; case 0 - b _0238A1F8 ; case 1 - b _0238A5B8 ; case 2 - b _0238A5B8 ; case 3 - b _0238A2B4 ; case 4 - b _0238A5B8 ; case 5 - b _0238A5B8 ; case 6 - b _0238A5B8 ; case 7 - b _0238A5B8 ; case 8 - b _0238A5B8 ; case 9 - b _0238A5B8 ; case 10 - b _0238A5B8 ; case 11 - b _0238A5B8 ; case 12 - b _0238A5B8 ; case 13 - b _0238A26C ; case 14 - b _0238A5B8 ; case 15 - b _0238A5B8 ; case 16 - b _0238A5B8 ; case 17 - b _0238A5B8 ; case 18 - b _0238A5B8 ; case 19 - b _0238A22C ; case 20 - b _0238A5B8 ; case 21 - b _0238A5B8 ; case 22 - b _0238A518 ; case 23 - b _0238A55C ; case 24 - b _0238A2C0 ; case 25 - b _0238A334 ; case 26 - b _0238A5B8 ; case 27 - b _0238A5B8 ; case 28 - b _0238A26C ; case 29 - b _0238A4A8 ; case 30 - b _0238A5B8 ; case 31 - b _0238A3DC ; case 32 - b _0238A3DC ; case 33 - b _0238A43C ; case 34 - b _0238A488 ; case 35 - b _0238A424 ; case 36 - b _0238A5B8 ; case 37 - b _0238A598 ; case 38 -_0238A1F8: - add r0, r2, #0x200 - ldrsb r0, [r0, #0x8c] - bl IsDialogueBoxActive - cmp r0, #0 - bne _0238A604 - mov r0, #0x1a - bl ov24_0238A610 - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsb r0, [r0, #0x8c] - bl ShowDialogueBox - b _0238A604 -_0238A22C: - bl ov11_02306C9C - cmp r0, #3 - beq _0238A250 - cmp r0, #4 - bne _0238A604 - bl ov11_02306C64 - mov r0, #0x11 - bl ov24_0238A610 - b _0238A604 -_0238A250: - bl ov11_02306C64 - ldr r1, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - ldr r1, [r1] - str r0, [r1, #0x1e8] - mov r0, #0x26 - bl ov24_0238A610 - b _0238A604 -_0238A26C: - add r0, r2, #0x200 - ldrsb r0, [r0, #0x8f] - bl GetSimpleMenuResult__0202B870 - cmp r0, #1 - beq _0238A2A4 - cmp r0, #4 - beq _0238A294 - cmp r0, #5 - beq _0238A2A4 - b _0238A604 -_0238A294: - bl ov24_0238C47C - mov r0, #0x13 - bl ov24_0238A610 - b _0238A604 -_0238A2A4: - bl ov24_0238C47C - mov r0, #0x11 - bl ov24_0238A610 - b _0238A604 -_0238A2B4: - bl ov11_022DC504 - mov r0, #3 - ldmia sp!, {r3, pc} -_0238A2C0: - bl ov11_0230D220 - cmp r0, #0 - bne _0238A604 - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsb r0, [r0, #0x8c] - bl IsDialogueBoxActive - cmp r0, #0 - bne _0238A604 - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsb r0, [r0, #0x8c] - bl ShowDialogueBox - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - mov r2, #0x27 - ldr r1, [r0] - str r2, [r1] - ldr r0, [r0] - add r0, r0, #0x200 - ldrsb r0, [r0, #0x8c] - bl sub_0202F2C4 - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsb r0, [r0, #0x8d] - bl HidePortraitBox - b _0238A604 -_0238A334: - add r0, r2, #0x200 - ldrsb r0, [r0, #0x8f] - bl GetSimpleMenuResult__0202B870 - cmp r0, #1 - ldrne r1, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - ldrne r1, [r1] - strne r0, [r1, #0x1c] - cmp r0, #1 - beq _0238A3CC - cmp r0, #6 - beq _0238A3BC - cmp r0, #7 - bne _0238A604 - bl ov24_0238C47C - bl GetEggHatchTimer - cmp r0, #0 - beq _0238A38C - cmp r0, #1 - beq _0238A398 - cmp r0, #2 - beq _0238A3A4 - b _0238A3B0 -_0238A38C: - mov r0, #9 - bl ov24_0238A610 - b _0238A604 -_0238A398: - mov r0, #7 - bl ov24_0238A610 - b _0238A604 -_0238A3A4: - mov r0, #6 - bl ov24_0238A610 - b _0238A604 -_0238A3B0: - mov r0, #5 - bl ov24_0238A610 - b _0238A604 -_0238A3BC: - bl ov24_0238C47C - mov r0, #2 - bl ov24_0238A610 - b _0238A604 -_0238A3CC: - bl ov24_0238C47C - mov r0, #3 - bl ov24_0238A610 - b _0238A604 -_0238A3DC: - bl GetKeyboardStatus - cmp r0, #3 - bne _0238A604 - bl GetKeyboardStringResult - ldr r2, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - mov r1, r0 - ldr r0, [r2] - add r0, r0, #0x42 - bl StrcpySimple - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - mov r2, #0x10 - ldr r1, [r0] - add r0, r1, #0x22 - add r1, r1, #0x42 - bl StrncpySimpleNoPadSafe - mov r0, #0x24 - bl ov24_0238A610 - b _0238A604 -_0238A424: - bl sub_02037468 - cmp r0, #0 - beq _0238A604 - mov r0, #0x22 - bl ov24_0238A610 - b _0238A604 -_0238A43C: - bl sub_0203931C - cmp r0, #0 - bne _0238A464 - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - mov r2, #0x10 - ldr r1, [r0] - mov r0, #0x23 - str r2, [r1, #4] - bl ov24_0238A610 - b _0238A604 -_0238A464: - cmp r0, #1 - bne _0238A604 - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - mov r2, #0x21 - ldr r1, [r0] - mov r0, #0x23 - str r2, [r1, #4] - bl ov24_0238A610 - b _0238A604 -_0238A488: - bl sub_02039218 - cmp r0, #0 - beq _0238A604 - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - ldr r0, [r0] - ldr r0, [r0, #4] - bl ov24_0238A610 - b _0238A604 -_0238A4A8: - ldr r1, [r2, #0xc] - add r1, r1, #1 - str r1, [r2, #0xc] - ldr r1, [r0] - ldr r0, [r1, #0xc] - cmp r0, #1 - beq _0238A4D8 - cmp r0, #2 - beq _0238A604 - cmp r0, #3 - beq _0238A4FC - b _0238A604 -_0238A4D8: - add r0, r1, #0x200 - ldrsb r0, [r0, #0x8e] - bl sub_0202836C - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsb r0, [r0, #0x8e] - bl CloseCollectionMenu - b _0238A604 -_0238A4FC: - ldr r0, [r1, #8] - bl ov24_0238A610 - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0xc] - b _0238A604 -_0238A518: - add r0, r2, #0x200 - ldrsb r0, [r0, #0x8c] - bl IsDialogueBoxActive - cmp r0, #0 - bne _0238A604 - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsb r0, [r0, #0x8c] - bl CloseDialogueBox - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - mvn r2, #1 - ldr r1, [r0] - mov r0, #0x18 - strb r2, [r1, #0x28c] - bl ov24_0238A610 - b _0238A604 -_0238A55C: - bl sub_0203D538 - mvn r1, #0 - cmp r0, r1 - beq _0238A578 - cmp r0, #1 - beq _0238A588 - b _0238A604 -_0238A578: - bl FreeMissionRewardStructMain - mov r0, #4 - bl ov24_0238A610 - b _0238A604 -_0238A588: - bl FreeMissionRewardStructMain - mov r0, #4 - bl ov24_0238A610 - b _0238A604 -_0238A598: - ldr r1, [r2, #0xc] - sub r0, r1, #1 - str r0, [r2, #0xc] - cmp r1, #0 - bne _0238A604 - mov r0, #0x1f - bl ov24_0238A610 - b _0238A604 -_0238A5B8: - bl ov11_0230D220 - cmp r0, #0 - bne _0238A604 - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsb r0, [r0, #0x8c] - bl IsDialogueBoxActive - cmp r0, #0 - bne _0238A604 - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - ldr r0, [r0] - add r0, r0, #0x200 - ldrsb r0, [r0, #0x8c] - bl ShowDialogueBox - ldr r0, _0238A60C ; =OVERLAY24_UNKNOWN_POINTER__NA_238C600 - ldr r0, [r0] - ldr r0, [r0, #8] - bl ov24_0238A610 -_0238A604: - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0238A60C: .word OVERLAY24_UNKNOWN_POINTER__NA_238C600 - arm_func_end ov24_0238A140 + .public ov24_0238A140 arm_func_start ov24_0238A610 ov24_0238A610: ; 0x0238A610 diff --git a/include/overlay_24.h b/include/overlay_24.h new file mode 100644 index 00000000..e22e19ea --- /dev/null +++ b/include/overlay_24.h @@ -0,0 +1,28 @@ +#ifndef PMD_SKY_OVERLAY_24_H +#define PMD_SKY_OVERLAY_24_H + +struct overlay_24 { + s32 unk0; // state + s32 unk4; + s32 unk8; + s32 unkC; + u8 fill10[0x1C - 0x10]; + s32 unk1C; + u8 fill20[0x22 - 0x20]; + u8 unk22[0x20]; + u8 unk42[0x20]; + u8 fill46[0x1E8 - 0x62]; + s32 unk1E8; + u8 fill1EC[0x28C - 0x1EC]; + s8 unk28C; // Dialogue Box + s8 unk28D; + s8 unk28E; + s8 unk28F; + +}; + +extern struct overlay_24* OVERLAY24_UNKNOWN_POINTER__NA_238C600; + +extern s32 ov24_0238A140(void); + +#endif /* ifndef PMD_SKY_OVERLAY_24_H */ diff --git a/main.lsf b/main.lsf index 6de52d4a..af0d19d6 100644 --- a/main.lsf +++ b/main.lsf @@ -512,6 +512,7 @@ Overlay OVY_23 Overlay OVY_24 { After OVY_11 + Object src/overlay_24_init.o Object asm/overlay_24.o } Overlay OVY_25 diff --git a/src/overlay_24_init.c b/src/overlay_24_init.c new file mode 100644 index 00000000..7991efe5 --- /dev/null +++ b/src/overlay_24_init.c @@ -0,0 +1,227 @@ +#include "overlay_24.h" + +extern void CloseCollectionMenu(s8); +extern void CloseDialogueBox(s8); +extern void FreeMissionRewardStructMain(); +extern s32 GetEggHatchTimer(); +extern s32 GetKeyboardStatus(); +extern const u8 *GetKeyboardStringResult(); +extern s32 GetSimpleMenuResult__0202B870(s8); +extern void HidePortraitBox(s8); +extern s32 IsDialogueBoxActive(s8); +extern void ShowDialogueBox(s8); +extern void StrcpySimple(unsigned char* dest, const unsigned char* src); +extern void StrncpySimpleNoPadSafe(u8* dest, const u8* src, u32 n); +extern void ov11_022DC504(); +extern s32 ov11_02306C64(); +extern s32 ov11_02306C9C(); +extern s32 ov11_0230D220(); +extern void ov24_0238A610(s32); +extern void ov24_0238C47C(); +extern void sub_0202836C(s8); +extern void sub_0202F2C4(s8); +extern s32 sub_02037468(); +extern s32 sub_02039218(); +extern s32 sub_0203931C(); +extern s32 sub_0203D538(); + + +s32 ov24_0238A140(void) +{ + s32 menu_result; + s32 temp_r0_5; + s32 temp_r1_2; + + switch (OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk0) + { + case 0: + case 1: + if (IsDialogueBoxActive(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28C) == 0) { + ov24_0238A610(0x1A); + ShowDialogueBox(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28C); + } + + break; + case 20: + switch(ov11_02306C9C()) + { + case 4: + ov11_02306C64(); + ov24_0238A610(0x11); + break; + case 3: + OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk1E8 = ov11_02306C64(); + ov24_0238A610(0x26); + break; + } + + break; + case 14: + case 29: + switch (GetSimpleMenuResult__0202B870(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28F)) { + case 4: + ov24_0238C47C(); + ov24_0238A610(0x13); + break; + case 1: + case 5: + ov24_0238C47C(); + ov24_0238A610(0x11); + break; + } + break; + case 4: + ov11_022DC504(); + return 3; + case 25: + if ((ov11_0230D220() == 0) && (IsDialogueBoxActive(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28C) == 0)) { + ShowDialogueBox(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28C); + OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk0 = 0x27; + sub_0202F2C4(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28C); + HidePortraitBox(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28D); + } + + break; + case 26: + menu_result = GetSimpleMenuResult__0202B870(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28F); + if (menu_result != 1) { + OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk1C = menu_result; + } + switch (menu_result) { + case 7: + ov24_0238C47C(); + switch (GetEggHatchTimer()) { + case 0: + ov24_0238A610(9); + break; + case 1: + ov24_0238A610(7); + break; + case 2: + ov24_0238A610(6); + break; + default: + ov24_0238A610(5); + break; + } + break; + case 6: + ov24_0238C47C(); + ov24_0238A610(2); + break; + case 1: + ov24_0238C47C(); + ov24_0238A610(3); + break; + } + break; + case 32: + case 33: + if (GetKeyboardStatus() == 3) { + StrcpySimple(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk42, GetKeyboardStringResult()); + StrncpySimpleNoPadSafe(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk22, OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk42, 0x10); + ov24_0238A610(0x24); + } + + break; + case 36: + if (sub_02037468() != 0) { + ov24_0238A610(0x22); + } + + break; + case 34: + temp_r0_5 = sub_0203931C(); + if (temp_r0_5 == 0) { + OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk4 = 0x10; + ov24_0238A610(0x23); + } else if (temp_r0_5 == 1) { + OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk4 = 0x21; + ov24_0238A610(0x23); + } + + break; + case 35: + if (sub_02039218() != 0) { + ov24_0238A610(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk4); + } + + break; + case 30: + OVERLAY24_UNKNOWN_POINTER__NA_238C600->unkC++; + switch (OVERLAY24_UNKNOWN_POINTER__NA_238C600->unkC) + { + case 2: + break; + case 1: + sub_0202836C(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28E); + CloseCollectionMenu(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28E); + break; + case 3: + ov24_0238A610(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk8); + OVERLAY24_UNKNOWN_POINTER__NA_238C600->unkC = 0; + break; + } + + break; + case 23: + if (IsDialogueBoxActive(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28C) == 0) { + CloseDialogueBox(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28C); + OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28C = -2; + ov24_0238A610(0x18); + } + + break; + case 24: + switch (sub_0203D538()) + { + case -1: + FreeMissionRewardStructMain(); + ov24_0238A610(4); + break; + case 1: + FreeMissionRewardStructMain(); + ov24_0238A610(4); + break; + } + + break; + case 38: + temp_r1_2 = OVERLAY24_UNKNOWN_POINTER__NA_238C600->unkC; + OVERLAY24_UNKNOWN_POINTER__NA_238C600->unkC--; + if (temp_r1_2 == 0) { + ov24_0238A610(0x1F); + } + break; + default: + case 2: + case 3: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 15: + case 16: + case 17: + case 18: + case 19: + case 21: + case 22: + case 27: + case 28: + case 31: + case 37: + if ((ov11_0230D220() == 0) && (IsDialogueBoxActive(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28C) == 0)) { + ShowDialogueBox(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk28C); + ov24_0238A610(OVERLAY24_UNKNOWN_POINTER__NA_238C600->unk8); + } + break; + + } + return 0; +}