From 6f9dbf8e2c88034e4b5b7904b8a94871ea1faa07 Mon Sep 17 00:00:00 2001 From: scbroede <32247405+scbroede@users.noreply.github.com> Date: Tue, 15 Jul 2025 13:25:46 -0400 Subject: [PATCH] decompile ov98_02248350 (#625) --- .clang-format-ignore | 1 - src/overlay098/ov98_022471C8.c | 500 ++++++++------------------------- 2 files changed, 116 insertions(+), 385 deletions(-) diff --git a/.clang-format-ignore b/.clang-format-ignore index ca33d15547..50f695f0b6 100644 --- a/.clang-format-ignore +++ b/.clang-format-ignore @@ -4,7 +4,6 @@ src/overlay107/ov107_02245EB0.c src/overlay107/ov107_02241AE0.c src/overlay065/ov65_0222DCE0.c src/overlay064/ov64_0222DCE0.c -src/overlay098/ov98_022471C8.c src/overlay062/ov62_02241204.c src/overlay062/ov62_0223DFA8.c src/overlay062/ov62_0223CAEC.c diff --git a/src/overlay098/ov98_022471C8.c b/src/overlay098/ov98_022471C8.c index 5c20cfbbbb..e44bbdb70f 100644 --- a/src/overlay098/ov98_022471C8.c +++ b/src/overlay098/ov98_022471C8.c @@ -34,14 +34,14 @@ #include "render_window.h" #include "save_player.h" #include "savedata.h" +#include "screen_fade.h" +#include "sound_playback.h" #include "strbuf.h" #include "string_list.h" #include "string_template.h" #include "system.h" #include "system_data.h" #include "text.h" -#include "sound_playback.h" -#include "screen_fade.h" #include "touch_pad.h" #include "unk_0202ACE0.h" #include "unk_02030CE8.h" @@ -970,390 +970,122 @@ static void ov98_022482CC(UnkStruct_ov98_02247704 *param0) Window_CopyToVRAM(¶m0->unk_C4); } -// clang-format off -asm static int ov98_02248350 (UnkStruct_ov98_02247704 * param0) +static int ov98_02248350(UnkStruct_ov98_02247704 *param0) { - push {r4, r5, r6, r7, lr} - sub sp, #0x1c - add r5, r0, #0 - add r1, r5, #0 - add r1, #0xa8 - ldr r1, [r1, #0] - cmp r1, #0 - beq _0224836E - cmp r1, #1 - bne _02248366 - b _022484B8 - _02248366: - cmp r1, #2 - bne _0224836C - b _02248566 - _0224836C: - b _02248614 - _0224836E: - ldr r0, [r5, #0x34] - mov r1, #0x2c - bl MessageLoader_GetNewStrbuf - str r0, [sp, #0x14] - bl Strbuf_NumLines - add r1, r5, #0 - mov r2, #0 - add r1, #0xac - str r2, [r1, #0] - add r1, r5, #0 - add r1, #0xb0 - str r2, [r1, #0] - add r1, r5, #0 - add r1, #0xb8 - str r2, [r1, #0] - add r1, r5, #0 - add r1, #0xb4 - str r0, [r1, #0] - mov r0, #5 - str r0, [sp] - mov r0, #0x1e - str r0, [sp, #4] - mov r0, #0xc - str r0, [sp, #8] - mov r0, #0xd - str r0, [sp, #0xc] - mov r0, #0x94 - str r0, [sp, #0x10] - add r1, r5, #0 - ldr r0, [r5, #4] - add r1, #0xc4 - mov r2, #2 - mov r3, #1 - bl Window_Add - mov r0, #0x13 - str r0, [sp] - mov r0, #0x1e - str r0, [sp, #4] - mov r0, #4 - str r0, [sp, #8] - mov r0, #0xd - str r0, [sp, #0xc] - mov r0, #0x7f - lsl r0, r0, #2 - str r0, [sp, #0x10] - add r1, r5, #0 - ldr r0, [r5, #4] - add r1, #0xd4 - mov r2, #2 - mov r3, #1 - bl Window_Add - add r0, r5, #0 - add r0, #0xc4 - mov r1, #0xf - bl Window_FillTilemap - ldr r0, [sp, #0x14] - bl Strbuf_Length - mov r1, #0x6d - bl Strbuf_Init - add r7, r0, #0 - add r0, r5, #0 - mov r6, #0 - str r0, [sp, #0x18] - add r0, #0xc4 - add r4, r6, #0 - str r0, [sp, #0x18] - _02248400: - ldr r1, [sp, #0x14] - add r0, r7, #0 - add r2, r6, #0 - bl Strbuf_CopyLineNum - str r4, [sp] - mov r0, #0xff - str r0, [sp, #4] - mov r0, #0 - str r0, [sp, #8] - ldr r0, [sp, #0x18] - mov r1, #0 - add r2, r7, #0 - mov r3, #4 - bl Text_AddPrinterWithParams - add r6, r6, #1 - add r4, #0x10 - cmp r6, #6 - blt _02248400 - ldr r0, [sp, #0x14] - bl Strbuf_Free - add r0, r7, #0 - bl Strbuf_Free - add r0, r5, #0 - add r0, #0xc4 - mov r1, #1 - mov r2, #0x1f - mov r3, #0xb - bl Window_DrawStandardFrame - add r0, r5, #0 - add r0, #0xc4 - bl Window_CopyToVRAM - add r0, r5, #0 - add r0, #0xd4 - mov r1, #0xf - bl Window_FillTilemap - add r0, r5, #0 - add r0, #0xd4 - mov r1, #1 - mov r2, #0x1f - mov r3, #0xb - bl Window_DrawStandardFrame - add r0, r5, #0 - add r0, #0xd4 - bl Window_CopyToVRAM - mov r0, #0x6d - bl ColoredArrow_New - add r1, r5, #0 - add r1, #0xe4 - str r0, [r1, #0] - add r0, r5, #0 - add r0, #0x48 - mov r1, #0xf - bl Window_FillTilemap - add r0, r5, #0 - add r0, #0x48 - mov r1, #1 - bl Window_EraseMessageBox - add r0, r5, #0 - add r0, #0x48 - bl Window_ClearAndCopyToVRAM - mov r0, #8 - mov r1, #1 - bl GXLayers_EngineAToggleLayers - add r0, r5, #0 - mov r1, #0 - add r0, #0xbc - str r1, [r0, #0] - add r0, r5, #0 - add r0, #0xc0 - str r1, [r0, #0] - add r0, r5, #0 - add r0, #0xa8 - ldr r0, [r0, #0] - add r1, r0, #1 - add r0, r5, #0 - add r0, #0xa8 - str r1, [r0, #0] - b _02248670 - _022484B8: - ldr r1, = gSystem - add r0, #0xac - ldr r2, [r1, #0x4c] - ldr r4, [r0, #0] - mov r0, #0x40 - tst r0, r2 - beq _022484E0 - cmp r4, #0 - beq _02248552 - add r0, r5, #0 - add r0, #0xac - ldr r0, [r0, #0] - sub r1, r0, #1 - add r0, r5, #0 - add r0, #0xac - str r1, [r0, #0] - ldr r0, = 0x5DC - bl Sound_PlayEffect - b _02248552 - _022484E0: - mov r0, #0x80 - tst r0, r2 - beq _02248534 - add r0, r5, #0 - add r0, #0xb4 - ldr r0, [r0, #0] - add r1, r4, #6 - cmp r1, r0 - bge _02248506 - add r0, r5, #0 - add r0, #0xac - ldr r0, [r0, #0] - add r1, r0, #1 - add r0, r5, #0 - add r0, #0xac - str r1, [r0, #0] - ldr r0, = 0x5DC - bl Sound_PlayEffect - _02248506: - add r0, r5, #0 - add r0, #0xac - ldr r0, [r0, #0] - add r1, r0, #6 - add r0, r5, #0 - add r0, #0xb4 - ldr r0, [r0, #0] - cmp r1, r0 - bne _02248552 - add r0, r5, #0 - bl ov98_02247F08 - add r0, r5, #0 - add r0, #0xa8 - ldr r0, [r0, #0] - add r1, r0, #1 - add r0, r5, #0 - add r0, #0xa8 - str r1, [r0, #0] - ldr r0, = 0x5DC - bl Sound_PlayEffect - b _02248552 - _02248534: - ldr r1, [r1, #0x48] - mov r0, #2 - tst r0, r1 - beq _02248552 - ldr r0, = 0x5DC - bl Sound_PlayEffect - add r0, r5, #0 - mov r1, #2 - add r0, #0xb8 - str r1, [r0, #0] - add r0, r5, #0 - mov r1, #0xff - add r0, #0xa8 - str r1, [r0, #0] - _02248552: - add r0, r5, #0 - add r0, #0xac - ldr r0, [r0, #0] - cmp r4, r0 - bne _0224855E - b _02248670 - _0224855E: - add r0, r5, #0 - bl ov98_022482CC - b _02248670 - _02248566: - ldr r1, = gSystem - mov r2, #0x10 - ldr r1, [r1, #0x48] - tst r2, r1 - bne _02248576 - mov r2, #0x20 - tst r2, r1 - beq _02248594 - _02248576: - add r0, r5, #0 - add r0, #0xb0 - ldr r1, [r0, #0] - mov r0, #1 - eor r1, r0 - add r0, r5, #0 - add r0, #0xb0 - str r1, [r0, #0] - ldr r0, = 0x5DC - bl Sound_PlayEffect - add r0, r5, #0 - bl ov98_02247F08 - b _02248670 - _02248594: - mov r2, #1 - tst r2, r1 - beq _022485BE - add r0, #0xb0 - ldr r1, [r0, #0] - mov r0, #2 - sub r1, r0, r1 - add r0, r5, #0 - add r0, #0xb8 - str r1, [r0, #0] - ldr r0, = 0x5DC - bl Sound_PlayEffect - add r0, r5, #0 - add r0, #0xa8 - ldr r0, [r0, #0] - add r1, r0, #1 - add r0, r5, #0 - add r0, #0xa8 - str r1, [r0, #0] - b _02248670 - _022485BE: - mov r2, #2 - add r3, r1, #0 - tst r3, r2 - beq _022485E0 - add r0, #0xb8 - str r2, [r0, #0] - ldr r0, = 0x5DC - bl Sound_PlayEffect - add r0, r5, #0 - add r0, #0xa8 - ldr r0, [r0, #0] - add r1, r0, #1 - add r0, r5, #0 - add r0, #0xa8 - str r1, [r0, #0] - b _02248670 - _022485E0: - mov r2, #0x40 - tst r1, r2 - beq _02248670 - bl ov98_02247FA4 - ldr r0, = 0x5DC - bl Sound_PlayEffect - add r0, r5, #0 - add r0, #0xa8 - ldr r0, [r0, #0] - sub r1, r0, #1 - add r0, r5, #0 - add r0, #0xa8 - str r1, [r0, #0] - add r0, r5, #0 - add r0, #0xac - ldr r0, [r0, #0] - sub r1, r0, #1 - add r0, r5, #0 - add r0, #0xac - str r1, [r0, #0] - add r0, r5, #0 - bl ov98_022482CC - b _02248670 - _02248614: - add r0, #0xc4 - mov r1, #0 - bl Window_EraseStandardFrame - add r0, r5, #0 - add r0, #0xc4 - bl Window_ClearAndCopyToVRAM - add r0, r5, #0 - add r0, #0xc4 - bl Window_Remove - add r0, r5, #0 - add r0, #0xd4 - mov r1, #0 - bl Window_EraseStandardFrame - add r0, r5, #0 - add r0, #0xd4 - bl Window_ClearAndCopyToVRAM - add r0, r5, #0 - add r0, #0xd4 - bl Window_Remove - add r0, r5, #0 - add r0, #0xe4 - ldr r0, [r0, #0] - bl ColoredArrow_Free - ldr r0, [r5, #4] - mov r1, #3 - bl Bg_ClearTilemap - mov r0, #8 - mov r1, #0 - bl GXLayers_EngineAToggleLayers - add r0, r5, #0 - mov r1, #0 - add r0, #0xa8 - str r1, [r0, #0] - add r5, #0xb8 - add sp, #0x1c - ldr r0, [r5, #0] - pop {r4, r5, r6, r7, pc} - _02248670: - add r0, r5, #0 - bl ov98_02247FBC - mov r0, #0 - add sp, #0x1c - pop {r4, r5, r6, r7, pc} + switch (param0->unk_A8) { + case 0: + int i; + + Strbuf *strbuf1 = MessageLoader_GetNewStrbuf(param0->unk_34, 44); + u32 lineCount = Strbuf_NumLines(strbuf1); + param0->unk_AC = 0; + param0->unk_B0 = 0; + param0->unk_B8 = 0; + param0->unk_B4 = lineCount; + + Window_Add(param0->unk_04, ¶m0->unk_C4, BG_LAYER_MAIN_2, 1, 5, 30, 12, 13, 148); + Window_Add(param0->unk_04, ¶m0->unk_D4, BG_LAYER_MAIN_2, 1, 19, 30, 4, 13, 508); + + Window_FillTilemap(¶m0->unk_C4, 15); + Strbuf *strbuf2 = Strbuf_Init(Strbuf_Length(strbuf1), HEAP_ID_109); + for (i = 0; i < 6; i++) { + Strbuf_CopyLineNum(strbuf2, strbuf1, i); + Text_AddPrinterWithParams(¶m0->unk_C4, FONT_SYSTEM, strbuf2, 4, i * 16, 0xFF, NULL); + } + Strbuf_Free(strbuf1); + Strbuf_Free(strbuf2); + Window_DrawStandardFrame(¶m0->unk_C4, TRUE, 31, 11); + Window_CopyToVRAM(¶m0->unk_C4); + + Window_FillTilemap(¶m0->unk_D4, 15); + Window_DrawStandardFrame(¶m0->unk_D4, TRUE, 31, 11); + Window_CopyToVRAM(¶m0->unk_D4); + + param0->unk_E4 = ColoredArrow_New(HEAP_ID_109); + + Window_FillTilemap(¶m0->unk_48, 15); + Window_EraseMessageBox(¶m0->unk_48, TRUE); + Window_ClearAndCopyToVRAM(¶m0->unk_48); + + GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG3, TRUE); + + param0->unk_BC = 0; + param0->unk_C0 = 0; + param0->unk_A8++; + break; + case 1: + int v1 = param0->unk_AC; + + if (JOY_REPEAT(PAD_KEY_UP)) { + if (param0->unk_AC != 0) { + param0->unk_AC--; + Sound_PlayEffect(SEQ_SE_CONFIRM); + } + } else if (JOY_REPEAT(PAD_KEY_DOWN)) { + if (param0->unk_AC + 6 < param0->unk_B4) { + param0->unk_AC++; + Sound_PlayEffect(SEQ_SE_CONFIRM); + } + + if (param0->unk_AC + 6 == param0->unk_B4) { + ov98_02247F08(param0); + param0->unk_A8++; + Sound_PlayEffect(SEQ_SE_CONFIRM); + } + } else if (gSystem.pressedKeys & PAD_BUTTON_B) { + Sound_PlayEffect(SEQ_SE_CONFIRM); + param0->unk_B8 = 2; + param0->unk_A8 = 0xFF; + } + + if (v1 != param0->unk_AC) { + ov98_022482CC(param0); + } + + break; + case 2: + if (gSystem.pressedKeys & PAD_KEY_RIGHT || gSystem.pressedKeys & PAD_KEY_LEFT) { + param0->unk_B0 ^= 1; + Sound_PlayEffect(SEQ_SE_CONFIRM); + ov98_02247F08(param0); + } else if (gSystem.pressedKeys & PAD_BUTTON_A) { + param0->unk_B8 = 2 - param0->unk_B0; + Sound_PlayEffect(SEQ_SE_CONFIRM); + param0->unk_A8++; + } else if (gSystem.pressedKeys & PAD_BUTTON_B) { + param0->unk_B8 = 2; + Sound_PlayEffect(SEQ_SE_CONFIRM); + param0->unk_A8++; + } else if (gSystem.pressedKeys & PAD_KEY_UP) { + ov98_02247FA4(param0); + Sound_PlayEffect(SEQ_SE_CONFIRM); + param0->unk_A8--; + param0->unk_AC--; + ov98_022482CC(param0); + } + + break; + default: + Window_EraseStandardFrame(¶m0->unk_C4, 0); + Window_ClearAndCopyToVRAM(¶m0->unk_C4); + Window_Remove(¶m0->unk_C4); + + Window_EraseStandardFrame(¶m0->unk_D4, 0); + Window_ClearAndCopyToVRAM(¶m0->unk_D4); + Window_Remove(¶m0->unk_D4); + + ColoredArrow_Free(param0->unk_E4); + + Bg_ClearTilemap(param0->unk_04, BG_LAYER_MAIN_3); + GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG3, FALSE); + + param0->unk_A8 = 0; + return param0->unk_B8; + } + + ov98_02247FBC(param0); + return 0; } -// clang-format on static int ov98_02248684(UnkStruct_ov98_02247704 *param0) {