diff --git a/asm/include/overlay_15_0238AF54.inc b/asm/include/overlay_15_0238AF54.inc deleted file mode 100644 index 35cbe455..00000000 --- a/asm/include/overlay_15_0238AF54.inc +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once -.public CloseDialogueBox -.public ClosePortraitBox -.public HidePortraitBox -.public IsDialogueBoxActive -.public OVERLAY15_UNKNOWN_POINTER__NA_238B180 -.public ov11_022E6E68 -.public ov15_0238A234 -.public sub_0202836C -.public sub_0202F2C4 diff --git a/asm/include/overlay_15_0238B054.inc b/asm/include/overlay_15_0238B054.inc new file mode 100644 index 00000000..6f70f09b --- /dev/null +++ b/asm/include/overlay_15_0238B054.inc @@ -0,0 +1 @@ +#pragma once diff --git a/asm/overlay_15_0238AF54.s b/asm/overlay_15_0238B054.s similarity index 55% rename from asm/overlay_15_0238AF54.s rename to asm/overlay_15_0238B054.s index e0d97339..7462c14b 100644 --- a/asm/overlay_15_0238AF54.s +++ b/asm/overlay_15_0238B054.s @@ -1,83 +1,7 @@ .include "asm/macros.inc" - .include "overlay_15_0238AF54.inc" + .include "overlay_15_0238B054.inc" .text - - arm_func_start ov15_0238AF54 -ov15_0238AF54: ; 0x0238AF54 - stmdb sp!, {r3, lr} - ldr r0, _0238B050 ; =OVERLAY15_UNKNOWN_POINTER__NA_238B180 - ldr r1, [r0] - ldr r0, [r1] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _0238B048 -_0238AF70: ; jump table - b _0238AF88 ; case 0 - b _0238AF94 ; case 1 - b _0238AFB0 ; case 2 - b _0238B03C ; case 3 - b _0238B048 ; case 4 - b _0238AFF4 ; case 5 -_0238AF88: - mov r0, #1 - str r0, [r1] - b _0238B048 -_0238AF94: - bl ov15_0238A234 - cmp r0, #3 - ldreq r0, _0238B050 ; =OVERLAY15_UNKNOWN_POINTER__NA_238B180 - moveq r1, #2 - ldreq r0, [r0] - streq r1, [r0] - b _0238B048 -_0238AFB0: - ldrsb r0, [r1, #0x80] - bl IsDialogueBoxActive - cmp r0, #0 - bne _0238B048 - ldr r0, _0238B050 ; =OVERLAY15_UNKNOWN_POINTER__NA_238B180 - ldr r0, [r0] - ldrsb r0, [r0, #0x81] - bl HidePortraitBox - ldr r0, _0238B050 ; =OVERLAY15_UNKNOWN_POINTER__NA_238B180 - ldr r0, [r0] - ldrsb r0, [r0, #0x80] - bl sub_0202F2C4 - ldr r0, _0238B050 ; =OVERLAY15_UNKNOWN_POINTER__NA_238B180 - mov r1, #5 - ldr r0, [r0] - str r1, [r0] - b _0238B048 -_0238AFF4: - ldrsb r0, [r1, #0x80] - bl sub_0202836C - ldr r0, _0238B050 ; =OVERLAY15_UNKNOWN_POINTER__NA_238B180 - ldr r0, [r0] - ldrsb r0, [r0, #0x81] - bl ClosePortraitBox - ldr r0, _0238B050 ; =OVERLAY15_UNKNOWN_POINTER__NA_238B180 - ldr r0, [r0] - ldrsb r0, [r0, #0x80] - bl CloseDialogueBox - ldr r0, _0238B050 ; =OVERLAY15_UNKNOWN_POINTER__NA_238B180 - mov r3, #3 - ldr r2, [r0] - sub r1, r3, #5 - str r3, [r2] - ldr r0, [r0] - strb r1, [r0, #0x80] - b _0238B048 -_0238B03C: - bl ov11_022E6E68 - mov r0, #4 - ldmia sp!, {r3, pc} -_0238B048: - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0238B050: .word OVERLAY15_UNKNOWN_POINTER__NA_238B180 - arm_func_end ov15_0238AF54 ; 0x0238B054 .global BANK_MAIN_MENU_ITEMS diff --git a/include/overlay_15_0238AE6C.h b/include/overlay_15_0238AE6C.h index ff5d7ca8..b6aee110 100644 --- a/include/overlay_15_0238AE6C.h +++ b/include/overlay_15_0238AE6C.h @@ -2,13 +2,16 @@ #define PMDSKY_OVERLAY_15_0238AE6C_H typedef struct { - u8 fill0[0x54]; + s32 unk0; + u8 fill20[0x20 - 0x5]; + s8 unk20; + u8 fill54[0x54 - 0x21]; u32 unk54; - u8 fill58[0x68 - 0x58]; + u8 fill68[0x68 - 0x58]; u32 unk68; - u8 fill3[0x80 - 0x6c]; + u8 fill80[0x80 - 0x6c]; s8 unk80; - u8 fill82[0x82 - 0x81]; + s8 unk81; s8 unk82; s8 unk83; s8 unk84; @@ -19,6 +22,6 @@ typedef struct { void ov15_0238AE6C(void); s32 ov15_0238AE88(void); void ov15_0238AE98(void); +int ov15_0238AF54(void); #endif //PMDSKY_OVERLAY_15_0238AE6C_H - diff --git a/main.lsf b/main.lsf index 66059c7a..77c9aa5b 100644 --- a/main.lsf +++ b/main.lsf @@ -150,7 +150,7 @@ Overlay OVY_15 Object src/overlay_15_0238AD78.o Object asm/overlay_15_0238ADC4.o Object src/overlay_15_0238AE6C.o - Object asm/overlay_15_0238AF54.o + Object asm/overlay_15_0238B054.o } Overlay OVY_16 { diff --git a/src/overlay_15_0238AE6C.c b/src/overlay_15_0238AE6C.c index 6e8b7da5..9366259e 100644 --- a/src/overlay_15_0238AE6C.c +++ b/src/overlay_15_0238AE6C.c @@ -2,20 +2,28 @@ extern unkStruct_ov15_0238AE6C* OVERLAY15_UNKNOWN_POINTER__NA_238B180; -extern u16 ov15_0238A140(void); extern void ov15_0238AD78(u8); +extern u16 ov15_0238A140(void); extern void Debug_Print0(const char* fmt); extern void MemFree(void*); +extern int ov15_0238A234(void); +extern int IsDialogueBoxActive(s8); +extern void HidePortraitBox(int); +extern void sub_0202F2C4(s8); +extern void sub_0202836C(int); +extern void ClosePortraitBox(s8); +extern void CloseDialogueBox(int); +extern void ov11_022E6E68(void); + +void ov15_0238AE6C(void) { -void ov15_0238AE6C(void) -{ ov15_0238AD78(OVERLAY15_UNKNOWN_POINTER__NA_238B180->unkD8); } -s32 ov15_0238AE88(void) -{ +s32 ov15_0238AE88(void) { + ov15_0238A140(); - return 1; + return 1; } const char ov15_0238B11C[] = "mes not close\n"; @@ -23,23 +31,57 @@ const char ov15_0238B12C[] = "sub not close\n"; const char ov15_0238B13C[] = "select not close\n"; const char ov15_0238B150[] = "Input not close\n"; -void ov15_0238AE98(void) -{ - if (OVERLAY15_UNKNOWN_POINTER__NA_238B180 == NULL) { +void ov15_0238AE98(void) { + + if (OVERLAY15_UNKNOWN_POINTER__NA_238B180 == NULL) return; - } - if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk80 != -2) { + + if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk80 != -2) Debug_Print0(ov15_0238B11C); - } - if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk82 != -2) { + + if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk82 != -2) Debug_Print0(ov15_0238B12C); - } - if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk83 != -2) { + + if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk83 != -2) Debug_Print0(ov15_0238B13C); - } - if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk84 != -2) { + + if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk84 != -2) Debug_Print0(ov15_0238B150); - } + MemFree(OVERLAY15_UNKNOWN_POINTER__NA_238B180); OVERLAY15_UNKNOWN_POINTER__NA_238B180 = NULL; } + +int ov15_0238AF54(void) { + + switch(OVERLAY15_UNKNOWN_POINTER__NA_238B180 -> unk0) { + + case 0: + OVERLAY15_UNKNOWN_POINTER__NA_238B180 -> unk0 = 1; + break; + case 1: + if (ov15_0238A234() == 3) + OVERLAY15_UNKNOWN_POINTER__NA_238B180 -> unk0 = 2; + break; + case 2: + if (IsDialogueBoxActive(OVERLAY15_UNKNOWN_POINTER__NA_238B180 -> unk80) == FALSE) { + HidePortraitBox(OVERLAY15_UNKNOWN_POINTER__NA_238B180 -> unk81); + sub_0202F2C4(OVERLAY15_UNKNOWN_POINTER__NA_238B180 -> unk80); + OVERLAY15_UNKNOWN_POINTER__NA_238B180 -> unk0 = 5; + } + break; + case 4: + break; + case 5: + sub_0202836C(OVERLAY15_UNKNOWN_POINTER__NA_238B180 -> unk80); + ClosePortraitBox(OVERLAY15_UNKNOWN_POINTER__NA_238B180 -> unk81); + CloseDialogueBox(OVERLAY15_UNKNOWN_POINTER__NA_238B180 -> unk80); + OVERLAY15_UNKNOWN_POINTER__NA_238B180 -> unk0 = 3; + OVERLAY15_UNKNOWN_POINTER__NA_238B180 -> unk80 = 0xfe; + break; + case 3: + ov11_022E6E68(); + return 4; + } + return 1; +}