From aed8e1b59c1fad365ea9e8ea55266a2a488413f2 Mon Sep 17 00:00:00 2001 From: Lincoln-LM <73306575+Lincoln-LM@users.noreply.github.com> Date: Tue, 3 Sep 2024 12:05:26 -0600 Subject: [PATCH] finish functions --- arm9/global.inc | 3 + arm9/overlays/24/asm/overlay_24.s | 229 ------------------------ arm9/overlays/24/src/overlay_24_sinit.c | 96 ++++++++-- 3 files changed, 87 insertions(+), 241 deletions(-) diff --git a/arm9/global.inc b/arm9/global.inc index 1bcdb83a4..e4e9d1d2e 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -8041,6 +8041,9 @@ .extern ov24_02254DDC .extern ov24_02254EE0 .extern ov24_02254F28 +.extern ov24_02254F40 +.extern ov24_02255038 +.extern ov24_02255050 .extern ov26_02254BD4 .extern ov26_02254C04 .extern ov26_02254C10 diff --git a/arm9/overlays/24/asm/overlay_24.s b/arm9/overlays/24/asm/overlay_24.s index d24f60c0d..ed626e6aa 100644 --- a/arm9/overlays/24/asm/overlay_24.s +++ b/arm9/overlays/24/asm/overlay_24.s @@ -3,235 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start ov24_02254F40 -ov24_02254F40: ; 0x02254F40 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x18 - add r0, r1, #0 - str r1, [sp, #8] - bl ov20_022538A0 - add r7, r0, #0 - ldr r0, [r7] - ldr r1, [r0] - cmp r1, #0 - bne _02254FF2 - mov r1, #8 - str r1, [sp, #0x10] - str r1, [sp, #0x14] - ldr r1, [r0, #4] - ldr r0, [r0, #8] - lsl r1, r1, #1 - lsl r0, r0, #1 - sub r6, r1, #4 - sub r5, r0, #4 - cmp r6, #0 - bge _02254F74 - ldr r0, [sp, #0x10] - add r0, r0, r6 - str r0, [sp, #0x14] - mov r6, #0 -_02254F74: - cmp r5, #0 - bge _02254F80 - ldr r0, [sp, #0x10] - add r0, r0, r5 - str r0, [sp, #0x10] - mov r5, #0 -_02254F80: - ldr r0, [sp, #0x14] - lsl r2, r6, #0x10 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - str r0, [sp] - ldr r0, [sp, #0x10] - lsl r3, r5, #0x10 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #4] - ldr r0, [r7, #0x70] - mov r1, #4 - lsr r2, r2, #0x10 - lsr r3, r3, #0x10 - bl FillWindowPixelRect - asr r1, r5, #3 - mov r2, #0x14 - asr r0, r6, #3 - mul r2, r1 - add r4, r0, r2 - ldr r2, [sp, #0x14] - add r2, r6, r2 - sub r2, r2, #1 - asr r2, r2, #3 - sub r0, r2, r0 - ldr r2, [sp, #0x10] - add r0, r0, #1 - add r2, r5, r2 - sub r2, r2, #1 - asr r2, r2, #3 - sub r1, r2, r1 - add r1, r1, #1 - sub r6, r1, #1 - cmp r1, #0 - beq _0225502C - lsl r0, r0, #5 - lsl r5, r4, #5 - str r0, [sp, #0xc] -_02254FCE: - ldr r0, [r7, #0x70] - add r1, r4, #0 - ldr r0, [r0, #0xc] - add r1, #0xc - ldr r2, [sp, #0xc] - add r0, r0, r5 - lsl r1, r1, #5 - bl GXS_LoadBG3Char - mov r0, #0xa - lsl r0, r0, #6 - add r5, r5, r0 - add r0, r6, #0 - add r4, #0x14 - sub r6, r6, #1 - cmp r0, #0 - bne _02254FCE - b _0225502C -_02254FF2: - ldr r1, [r0, #4] - ldr r0, [r0, #8] - lsl r2, r1, #1 - lsl r3, r0, #1 - asr r1, r3, #3 - mov r0, #0x14 - asr r4, r2, #3 - mul r0, r1 - add r4, r4, r0 - mov r0, #2 - str r0, [sp] - str r0, [sp, #4] - lsl r2, r2, #0x10 - lsl r3, r3, #0x10 - ldr r0, [r7, #0x70] - mov r1, #1 - lsr r2, r2, #0x10 - lsr r3, r3, #0x10 - bl FillWindowPixelRect - ldr r0, [r7, #0x70] - mov r2, #0x20 - ldr r1, [r0, #0xc] - lsl r0, r4, #5 - add r4, #0xc - add r0, r1, r0 - lsl r1, r4, #5 - bl GXS_LoadBG3Char -_0225502C: - ldr r0, [sp, #8] - bl ov24_02254DC8 - add sp, #0x18 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_end ov24_02254F40 - - thumb_func_start ov24_02255038 -ov24_02255038: ; 0x02255038 - push {r4, lr} - add r4, r1, #0 - add r0, r4, #0 - bl ov20_022538A0 - ldr r0, [r0, #0x70] - bl CopyWindowPixelsToVram_TextMode - add r0, r4, #0 - bl ov24_02254DC8 - pop {r4, pc} - thumb_func_end ov24_02255038 - - thumb_func_start ov24_02255050 -ov24_02255050: ; 0x02255050 - push {r3, r4, r5, lr} - add r5, r1, #0 - add r0, r5, #0 - bl ov20_022538A0 - add r4, r0, #0 - bl ov24_022550D4 - ldr r0, [r4, #4] - mov r1, #6 - bl FreeBgTilemapBuffer - ldr r0, [r4, #4] - mov r1, #7 - bl FreeBgTilemapBuffer - add r0, r5, #0 - bl ov24_02254DC8 - pop {r3, r4, r5, pc} - thumb_func_end ov24_02255050 - - thumb_func_start ov24_02255078 -ov24_02255078: ; 0x02255078 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - mov r3, #0 - str r3, [sp] - mov r2, #1 - add r7, r0, #0 - str r2, [sp, #4] - mov r0, #8 - str r0, [sp, #8] - mov r0, #0xc - mov r1, #0x20 - bl GfGfxLoader_LoadWholePalette - mov r0, #8 - str r0, [sp] - add r0, r7, #0 - add r0, #0x54 - mov r1, #0xc - mov r2, #0x21 - mov r3, #0x22 - bl ov20_02253FBC - cmp r0, #0 - beq _022550CC - add r0, r7, #0 - str r0, [sp, #0xc] - add r0, #0x54 - ldr r4, _022550D0 ; =ov24_0225514C - mov r6, #0 - add r5, r7, #0 - str r0, [sp, #0xc] -_022550B6: - ldr r0, [r7, #0x50] - ldr r2, [sp, #0xc] - add r1, r4, #0 - bl ov20_02253E74 - str r0, [r5, #0x68] - add r6, r6, #1 - add r4, #0x10 - add r5, r5, #4 - cmp r6, #2 - blt _022550B6 -_022550CC: - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_022550D0: .word ov24_0225514C - thumb_func_end ov24_02255078 - - thumb_func_start ov24_022550D4 -ov24_022550D4: ; 0x022550D4 - push {r4, r5, r6, lr} - add r6, r0, #0 - mov r4, #0 - add r5, r6, #0 -_022550DC: - ldr r0, [r6, #0x50] - ldr r1, [r5, #0x68] - bl ov20_02253F14 - add r4, r4, #1 - add r5, r5, #4 - cmp r4, #2 - blo _022550DC - add r6, #0x54 - add r0, r6, #0 - bl ov20_02254014 - pop {r4, r5, r6, pc} - .align 2, 0 - thumb_func_end ov24_022550D4 - .section .rodata .global ov24_022550F8 ov24_022550F8: ; 0x022550F8 diff --git a/arm9/overlays/24/src/overlay_24_sinit.c b/arm9/overlays/24/src/overlay_24_sinit.c index 3feff755b..d6a00b9e9 100644 --- a/arm9/overlays/24/src/overlay_24_sinit.c +++ b/arm9/overlays/24/src/overlay_24_sinit.c @@ -23,8 +23,7 @@ struct UnkSubStructOverlay24 u8 unkC[0x44]; u32 unk50; u8 unk54[0x14]; - u32* unk68; - u32* unk6C; + u32* unk68[2]; Window *window; }; typedef struct UnkStructOverlay24 UnkStructOverlay24; @@ -67,6 +66,11 @@ void ov24_02254DC8(void*); void ov24_02254DDC(void*, void*); void ov24_02254EE0(u32, void*); void ov24_02254F28(int, void*); +void ov24_02254F40(u32 arg0, void* arg1); +void ov24_02255038(u32 arg0, void* arg1); +void ov24_02255050(u32 arg0, void* arg1); +void ov24_02255078(UnkSubStructOverlay24* arg0); +void ov24_022550D4(UnkSubStructOverlay24* arg0); extern void Poketch_InitApp(void *func1, void *func2); extern u32 ov20_02254130(void *, u32, void *, void*, u32); @@ -77,27 +81,28 @@ extern void ov20_022529A0(u32); extern void ov24_0225499(UnkStructOverlay24*); extern void ov20_0225298C(u32); extern BOOL ov20_02252C08(u32); -extern BOOL ov24_02254A70(UnkStructOverlay24*); extern BOOL TouchScreen_GetTapState(u32*, u32*); -extern BOOL ov24_02254AD4(UnkStructOverlay24*); -extern BOOL ov24_02254CA(u32**, u32); extern _s32_div_f(void); extern void ov20_022536F4(void*, u32); extern u32 ov20_02252D34(); extern u32 ov20_02252D24(); extern BOOL sub_0208946C(u32, void*, u32); extern void sub_02089444(u32, void*, u32); -extern void ov24_02255078(void*); extern void ov20_02252D7C(u32, u32); extern void ov20_02253F28(u32*, u32); extern void Poketch_PlaySoundEffect(u32); -extern UnkSubStructOverlay24* ov20_022538A0(void*); +extern void* ov20_022538A0(void*); extern void ov20_02253888(u32*, void*); extern BOOL (ov20_022537B8)(void*); extern BOOL (ov20_02253794)(void*, u8); extern void ov20_022537E0(u32*, u32, void*, void*, void*, u32, u32); +extern BOOL ov20_02253FBC(void*, NarcId, u32, u32, HeapID); +extern u32* ov20_02253E74(u32, void*, void*); +extern void ov20_02254014(void*); +extern void ov20_02253F14(u32, void*); extern FnType02254918 ov24_02255100[3]; +extern u32 ov24_0225514C[2][4]; extern u32 ov24_0225516C[]; extern const WindowTemplate ov24_0225510C; extern BgTemplate ov24_02255114; @@ -503,7 +508,7 @@ BOOL ov24_02254DBC(UnkSubStructOverlay24* arg0) { } void ov24_02254DC8(void* arg0) { - ov20_02253888(&(ov20_022538A0(arg0)->unk8), arg0); + ov20_02253888(&(((UnkSubStructOverlay24*)ov20_022538A0(arg0))->unk8), arg0); } void ov24_02254DDC(void* arg0, void* arg1) { @@ -544,11 +549,11 @@ void ov24_02254DDC(void* arg0, void* arg1) { void ov24_02254EE0(u32 arg0, void* arg1) { UnkSubStructOverlay24* v0 = ov20_022538A0(arg1); if (v0->unk0->unk0 == 1) { - ov20_02253F28(v0->unk68, 0); - ov20_02253F28(v0->unk6C, 3); + ov20_02253F28(v0->unk68[0], 0); + ov20_02253F28(v0->unk68[1], 3); } else { - ov20_02253F28(v0->unk68, 1); - ov20_02253F28(v0->unk6C, 2); + ov20_02253F28(v0->unk68[0], 1); + ov20_02253F28(v0->unk68[1], 2); } Poketch_PlaySoundEffect(1635); ov24_02254DC8(arg1); @@ -559,3 +564,70 @@ void ov24_02254F28(int arg0, void* arg1) { CopyWindowPixelsToVram_TextMode(a0->window); ov24_02254DC8(arg1); } + +void ov24_02254F40(u32 arg0, void* arg1) { + UnkSubStructOverlay24 *v0 = ov20_022538A0(arg1); + UnkSubStructOverlay24_1* v1 = v0->unk0; + if (v1->unk0 == 0) { + int width, height; + height = 8; + width = 8; + int x = v1->lastModifiedX * 2 - 4; + int y = v1->lastModifiedY * 2 - 4; + if (x < 0) { + width += x; + x = 0; + } + if (y < 0) { + height += y; + y = 0; + } + FillWindowPixelRect(v0->window, 4, x, y, width, height); + int a = (x >> 3) + (y >> 3) * 0x14; + int e = ((x + width - 1) >> 3) - (x >> 3) + 1; + int b = ((y + height - 1) >> 3) - (y >> 3) + 1; + while (b--) { + GXS_LoadBG3Char((u8*)(v0->window->pixelBuffer) + (a * 0x20), (a + 0xc) * 0x20, e * 0x20); + a += 0x14; + } + } else { + int height = 2; + int width = 2; + int x = v1->lastModifiedX * 2; + int y = v1->lastModifiedY * 2; + int a = (x >> 3) + ((y >> 3) * 0x14); + FillWindowPixelRect(v0->window, 1, x, y, width, height); + GXS_LoadBG3Char((u8*)(v0->window->pixelBuffer) + a * 0x20, (a + 0xc) * 0x20, 0x20); + } + ov24_02254DC8(arg1); +} + +void ov24_02255038(u32 arg0, void* arg1) { + UnkSubStructOverlay24* v0 = ov20_022538A0(arg1); + CopyWindowPixelsToVram_TextMode(v0->window); + ov24_02254DC8(arg1); +} + +void ov24_02255050(u32 arg0, void* arg1) { + UnkSubStructOverlay24* v0 = ov20_022538A0(arg1); + ov24_022550D4(v0); + FreeBgTilemapBuffer(v0->config, 6); + FreeBgTilemapBuffer(v0->config, 7); + ov24_02254DC8(arg1); +} + +void ov24_02255078(UnkSubStructOverlay24* arg0) { + GfGfxLoader_LoadWholePalette(NARC_GRAPHIC_POKETCH, 0x20, 1, 0, 0, 1, HEAP_ID_POKETCH_APP); + if (ov20_02253FBC(&(arg0->unk54), NARC_GRAPHIC_POKETCH, 0x21, 0x22, HEAP_ID_POKETCH_APP)) { + for (int i = 0; i < 2; i++) { + arg0->unk68[i] = ov20_02253E74(arg0->unk50, &(ov24_0225514C[i]), &(arg0->unk54)); + } + } +} + +void ov24_022550D4(UnkSubStructOverlay24* arg0) { + for (u32 i = 0; i < 2; i++) { + ov20_02253F14(arg0->unk50, arg0->unk68[i]); + } + ov20_02254014(&(arg0->unk54)); +} \ No newline at end of file