start overlay 24

This commit is contained in:
Seth Barberee
2026-07-31 19:06:00 -07:00
parent e142cd9953
commit 182a1df94e
4 changed files with 257 additions and 343 deletions

View File

@@ -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

28
include/overlay_24.h Normal file
View File

@@ -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 */

View File

@@ -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

227
src/overlay_24_init.c Normal file
View File

@@ -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;
}