From 1e043dbb89cb43d0dbd275937bd33b8eb39c5dd7 Mon Sep 17 00:00:00 2001 From: red031000 Date: Thu, 4 May 2023 20:40:50 +0100 Subject: [PATCH] MOD59_021D9C74 --- arm9/modules/59/asm/mod59_TV_asm.s | 128 ------------------------- arm9/modules/59/include/mod59_TV_src.h | 4 +- arm9/modules/59/src/mod59_TV_src.c | 52 +++++++++- 3 files changed, 54 insertions(+), 130 deletions(-) diff --git a/arm9/modules/59/asm/mod59_TV_asm.s b/arm9/modules/59/asm/mod59_TV_asm.s index 2c5a13f05..b375c41c9 100644 --- a/arm9/modules/59/asm/mod59_TV_asm.s +++ b/arm9/modules/59/asm/mod59_TV_asm.s @@ -3,134 +3,6 @@ .section .text .balign 4, 0 - thumb_func_start MOD59_021D9C74 -MOD59_021D9C74: ; 0x021D9C74 - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - add r4, r0, #0 - ldr r0, [r4, #0xc] - str r1, [sp, #0x10] - add r7, r3, #0 - mov r5, #0 - cmp r0, #3 - bhi _021D9D66 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_021D9C92: ; jump table - .short _021D9C9A - _021D9C92 - 2 ; case 0 - .short _021D9D24 - _021D9C92 - 2 ; case 1 - .short _021D9D36 - _021D9C92 - 2 ; case 2 - .short _021D9D50 - _021D9C92 - 2 ; case 3 -_021D9C9A: - mov r0, #2 - add r1, r5, #0 - bl ToggleBgLayer - mov r0, #1 - ldr r1, [r4] - lsl r0, r0, #0xa - bl String_ctor - add r6, r0, #0 - ldr r0, [r4, #8] - ldr r1, [sp, #0x10] - add r2, r6, #0 - bl ReadMsgDataIntoString - add r1, r4, #0 - ldr r0, [r4, #4] - ldr r2, _021D9D6C ; =0x021DA04C - add r1, #0x10 - bl AddWindow - add r1, r5, #0 - mov r0, #1 - lsl r0, r0, #8 - str r0, [sp] - mov r0, #0xc0 - str r0, [sp, #4] - add r0, r4, #0 - add r0, #0x10 - add r2, r1, #0 - add r3, r1, #0 - bl FillWindowPixelRect - add r0, r5, #0 - add r1, r6, #0 - add r2, r0, #0 - bl FUN_02002F08 - mov r1, #1 - lsl r1, r1, #8 - sub r0, r1, r0 - lsr r3, r0, #1 - str r7, [sp] - add r1, r5, #0 - ldr r0, _021D9D70 ; =0x000F0200 - str r1, [sp, #4] - str r0, [sp, #8] - add r0, r4, #0 - add r0, #0x10 - add r2, r6, #0 - str r1, [sp, #0xc] - bl AddTextPrinterParameterized2 - add r0, r6, #0 - bl String_dtor - add r0, r4, #0 - add r0, #0x10 - bl CopyWindowToVram - mov r0, #2 - mov r1, #1 - bl ToggleBgLayer - mov r0, #0xf0 - str r0, [r4, #0x24] - mov r0, #1 - str r0, [r4, #0xc] - b _021D9D66 -_021D9D24: - ldr r0, [r4, #0x24] - cmp r0, #0 - beq _021D9D30 - sub r0, r0, #1 - str r0, [r4, #0x24] - b _021D9D66 -_021D9D30: - mov r0, #2 - str r0, [r4, #0xc] - b _021D9D66 -_021D9D36: - ldr r0, _021D9D74 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #1 - and r0, r1 - cmp r0, #1 - beq _021D9D4A - mov r0, #2 - and r0, r1 - cmp r0, #2 - bne _021D9D66 -_021D9D4A: - mov r0, #3 - str r0, [r4, #0xc] - b _021D9D66 -_021D9D50: - add r0, r4, #0 - add r0, #0x10 - bl RemoveWindow - ldr r0, [r4, #4] - mov r1, #2 - bl BgClearTilemapBufferAndCommit - add r0, r5, #0 - str r0, [r4, #0xc] - mov r5, #1 -_021D9D66: - add r0, r5, #0 - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_021D9D6C: .word MOD59_021DA04C -_021D9D70: .word 0x000F0200 -_021D9D74: .word gMain - thumb_func_end MOD59_021D9C74 - thumb_func_start MOD59_021D9D78 MOD59_021D9D78: ; 0x021D9D78 push {r3, lr} diff --git a/arm9/modules/59/include/mod59_TV_src.h b/arm9/modules/59/include/mod59_TV_src.h index 82959332a..dbbd239b2 100644 --- a/arm9/modules/59/include/mod59_TV_src.h +++ b/arm9/modules/59/include/mod59_TV_src.h @@ -12,7 +12,8 @@ typedef struct MOD59_TVOverlayData2 struct BgConfig *bgConfig; struct MsgData *msgData; u32 unk0C; - u8 padding[0x14]; + struct Window window; + u8 padding[0x4]; u32 unk24; } MOD59_TVOverlayData; @@ -24,5 +25,6 @@ void MOD59_TVSetupGraphics(MOD59_TVOverlayData *data); void MOD59_TVDestroyGraphics(MOD59_TVOverlayData *data); void MOD59_TVSetupMsg(MOD59_TVOverlayData *data); void MOD59_TVDestroyMsg(MOD59_TVOverlayData *data); +BOOL MOD59_021D9C74(MOD59_TVOverlayData *data, u32 msgNo, u32 param2, u32 param3); #endif // POKEDIAMOND_MOD59_TV_H diff --git a/arm9/modules/59/src/mod59_TV_src.c b/arm9/modules/59/src/mod59_TV_src.c index c144fbf6c..a97051c5c 100644 --- a/arm9/modules/59/src/mod59_TV_src.c +++ b/arm9/modules/59/src/mod59_TV_src.c @@ -1,6 +1,7 @@ #include "global.h" #include "mod59_TV_src.h" #include "GX_layers.h" +#include "PAD_pad.h" #include "constants/sndseq.h" #include "demo/intro/intro_tv.naix" #include "filesystem.h" @@ -19,7 +20,6 @@ extern void FUN_0200E1D0(u32 param0, u32 param1, u32 param2, u32 param3, u32 par extern u32 FUN_0200E308(void); extern void MOD59_021D9D78(void); -extern BOOL MOD59_021D9C74(MOD59_TVOverlayData *data, u32 param1, u32 param2, u32 param3); extern const struct GraphicsBanks MOD59_021DA0D4; extern const struct GraphicsModes MOD59_021DA054; @@ -27,6 +27,7 @@ extern const struct BgTemplate MOD59_021DA080; extern const struct BgTemplate MOD59_021DA09C; extern const struct BgTemplate MOD59_021DA064; extern const struct BgTemplate MOD59_021DA0B8; +extern const struct WindowTemplate MOD59_021DA04C; THUMB_FUNC BOOL MOD59_TVInit(struct UnkStruct_02006234 *param0, u32 *param1) { @@ -403,3 +404,52 @@ THUMB_FUNC void MOD59_TVDestroyMsg(MOD59_TVOverlayData *data) { DestroyMsgData(data->msgData); } + +THUMB_FUNC BOOL MOD59_021D9C74(MOD59_TVOverlayData *data, u32 msgNo, u32 param2, u32 param3) +{ + BOOL ret = FALSE; + switch (data->unk0C) + { + case 0: + ToggleBgLayer(GF_BG_LYR_MAIN_2, GX_LAYER_TOGGLE_OFF); + struct String *string = String_ctor(1024, data->heap_id); + ReadMsgDataIntoString(data->msgData, msgNo, string); + AddWindow(data->bgConfig, &data->window, &MOD59_021DA04C); + FillWindowPixelRect(&data->window, 0, 0, 0, 256, 192); + u32 unk0 = (u32)FUN_02002F08(0, string, 0); + + unk0 = (256 - unk0 ) / 2; + AddTextPrinterParameterized2(&data->window, 0, string, unk0, param3, 0, MakeFontColor(15, 2, 0), 0); + String_dtor(string); + CopyWindowToVram(&data->window); + ToggleBgLayer(GF_BG_LYR_MAIN_2, GX_LAYER_TOGGLE_ON); + data->unk24 = 240; + data->unk0C = 1; + break; + + case 1: + if (data->unk24 != 0) + { + data->unk24--; + break; + } + data->unk0C = 2; + break; + + case 2: + if((gMain.newKeys & PAD_BUTTON_A) != 1 && (gMain.newKeys & PAD_BUTTON_B) != 2) + { + break; + } + data->unk0C = 3; + break; + + case 3: + RemoveWindow(&data->window); + BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_2); + data->unk0C = 0; + ret = TRUE; + break; + } + return ret; +}