diff options
Diffstat (limited to 'arm9/modules')
-rw-r--r-- | arm9/modules/59/asm/mod59_021D74E0_asm.s | 294 | ||||
-rw-r--r-- | arm9/modules/59/include/mod59_021D74E0.h | 39 | ||||
-rw-r--r-- | arm9/modules/59/src/mod59_021D74E0_src.c | 162 |
3 files changed, 168 insertions, 327 deletions
diff --git a/arm9/modules/59/asm/mod59_021D74E0_asm.s b/arm9/modules/59/asm/mod59_021D74E0_asm.s index 7cb6272f..77bc1174 100644 --- a/arm9/modules/59/asm/mod59_021D74E0_asm.s +++ b/arm9/modules/59/asm/mod59_021D74E0_asm.s @@ -5,300 +5,6 @@ .extern MOD59_021D7730 - thumb_func_start MOD59_021D778C -MOD59_021D778C: ; 0x021D778C - push {r3, r4, r5, lr} - sub sp, #0x78 - ldr r5, _021D7954 ; =0x021D9F18 - add r4, r0, #0 - add r3, sp, #0x50 - mov r2, #5 -_021D7798: - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _021D7798 - add r0, sp, #0x50 - bl GX_SetBanks - ldr r0, [r4] - bl BgConfig_Alloc - add r3, sp, #0x40 - ldr r5, _021D7958 ; =0x021D9DCC - str r0, [r4, #0x18] - add r2, r3, #0 - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - add r0, r2, #0 - bl SetBothScreensModesAndDisable - ldr r5, _021D795C ; =0x021D9EA0 - add r3, sp, #0x24 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #0 - str r0, [r3] - mov r0, #0xf - strb r0, [r2, #0x12] - mov r0, #6 - strb r0, [r2, #0x13] - ldr r0, [r4, #0x18] - add r3, r1, #0 - bl InitBgFromTemplate - ldr r0, [r4, #0x18] - mov r1, #0 - bl BgClearTilemapBufferAndCommit - mov r0, #0xe - add r2, sp, #0x24 - strb r0, [r2, #0x12] - mov r0, #5 - strb r0, [r2, #0x13] - ldr r0, [r4, #0x18] - mov r1, #1 - mov r3, #0 - bl InitBgFromTemplate - ldr r0, [r4, #0x18] - mov r1, #1 - bl BgClearTilemapBufferAndCommit - mov r0, #0xd - add r2, sp, #0x24 - strb r0, [r2, #0x12] - mov r0, #4 - strb r0, [r2, #0x13] - ldr r0, [r4, #0x18] - mov r1, #2 - mov r3, #0 - bl InitBgFromTemplate - ldr r0, [r4, #0x18] - mov r1, #2 - bl BgClearTilemapBufferAndCommit - mov r0, #0xc - add r2, sp, #0x24 - strb r0, [r2, #0x12] - mov r1, #3 - strb r1, [r2, #0x13] - ldr r0, [r4, #0x18] - mov r3, #0 - bl InitBgFromTemplate - ldr r0, [r4, #0x18] - mov r1, #3 - bl BgClearTilemapBufferAndCommit - mov r1, #0 - str r1, [sp] - ldr r0, [r4] - ldr r2, _021D7960 ; =0x000003E2 - str r0, [sp, #4] - ldr r0, [r4, #0x18] - mov r3, #4 - bl FUN_0200CD68 - mov r1, #0 - str r1, [sp] - ldr r0, [r4] - ldr r2, _021D7964 ; =0x000003D9 - str r0, [sp, #4] - ldr r0, [r4, #0x18] - mov r3, #3 - bl FUN_0200CB00 - ldr r2, [r4] - mov r0, #0 - mov r1, #0xa0 - bl FUN_02002ED0 - ldr r2, [r4] - mov r0, #0 - mov r1, #0xc0 - bl FUN_02002EEC - ldr r5, _021D7968 ; =0x021D9EBC - add r3, sp, #8 - ldmia r5!, {r0, r1} - add r2, r3, #0 - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldmia r5!, {r0, r1} - stmia r3!, {r0, r1} - ldr r0, [r5] - mov r1, #0xf - str r0, [r3] - add r0, sp, #8 - strb r1, [r0, #0x12] - mov r1, #6 - strb r1, [r0, #0x13] - ldr r0, [r4, #0x18] - mov r1, #4 - mov r3, #0 - bl InitBgFromTemplate - ldr r0, [r4, #0x18] - mov r1, #4 - bl BgClearTilemapBufferAndCommit - mov r1, #0xe - add r0, sp, #8 - strb r1, [r0, #0x12] - mov r1, #5 - strb r1, [r0, #0x13] - ldr r0, [r4, #0x18] - add r2, sp, #8 - mov r3, #0 - bl InitBgFromTemplate - ldr r0, [r4, #0x18] - mov r1, #5 - bl BgClearTilemapBufferAndCommit - mov r1, #0xd - add r0, sp, #8 - strb r1, [r0, #0x12] - mov r1, #4 - strb r1, [r0, #0x13] - ldr r0, [r4, #0x18] - mov r1, #6 - add r2, sp, #8 - mov r3, #0 - bl InitBgFromTemplate - ldr r0, [r4, #0x18] - mov r1, #6 - bl BgClearTilemapBufferAndCommit - mov r1, #0xc - add r0, sp, #8 - strb r1, [r0, #0x12] - mov r1, #3 - strb r1, [r0, #0x13] - ldr r0, [r4, #0x18] - mov r1, #7 - add r2, sp, #8 - mov r3, #0 - bl InitBgFromTemplate - ldr r0, [r4, #0x18] - mov r1, #7 - bl BgClearTilemapBufferAndCommit - mov r0, #0 - add r1, r0, #0 - bl ToggleBgLayer - mov r0, #1 - mov r1, #0 - bl ToggleBgLayer - mov r0, #2 - mov r1, #0 - bl ToggleBgLayer - mov r0, #3 - mov r1, #0 - bl ToggleBgLayer - mov r0, #4 - mov r1, #0 - bl ToggleBgLayer - mov r0, #5 - mov r1, #0 - bl ToggleBgLayer - mov r0, #6 - mov r1, #0 - bl ToggleBgLayer - mov r0, #7 - mov r1, #0 - bl ToggleBgLayer - add r0, r4, #0 - bl MOD59_021D8058 - mov r0, #0 - str r0, [r4, #0x78] - add sp, #0x78 - pop {r3, r4, r5, pc} - .align 2, 0 -_021D7954: .word MOD59_021D9F18 -_021D7958: .word MOD59_021D9DCC -_021D795C: .word MOD59_021D9EA0 -_021D7960: .word 0x000003E2 -_021D7964: .word 0x000003D9 -_021D7968: .word MOD59_021D9EBC - thumb_func_end MOD59_021D778C - - thumb_func_start MOD59_021D796C -MOD59_021D796C: ; 0x021D796C - push {r4, lr} - add r4, r0, #0 - mov r0, #0 - add r1, r0, #0 - bl ToggleBgLayer - mov r0, #1 - mov r1, #0 - bl ToggleBgLayer - mov r0, #2 - mov r1, #0 - bl ToggleBgLayer - mov r0, #3 - mov r1, #0 - bl ToggleBgLayer - mov r0, #4 - mov r1, #0 - bl ToggleBgLayer - mov r0, #5 - mov r1, #0 - bl ToggleBgLayer - mov r0, #6 - mov r1, #0 - bl ToggleBgLayer - mov r0, #7 - mov r1, #0 - bl ToggleBgLayer - ldr r0, [r4, #0x18] - mov r1, #0 - bl FreeBgTilemapBuffer - ldr r0, [r4, #0x18] - mov r1, #1 - bl FreeBgTilemapBuffer - ldr r0, [r4, #0x18] - mov r1, #2 - bl FreeBgTilemapBuffer - ldr r0, [r4, #0x18] - mov r1, #3 - bl FreeBgTilemapBuffer - ldr r0, [r4, #0x18] - mov r1, #4 - bl FreeBgTilemapBuffer - ldr r0, [r4, #0x18] - mov r1, #5 - bl FreeBgTilemapBuffer - ldr r0, [r4, #0x18] - mov r1, #6 - bl FreeBgTilemapBuffer - ldr r0, [r4, #0x18] - mov r1, #7 - bl FreeBgTilemapBuffer - ldr r0, [r4, #0x18] - bl FreeToHeap - pop {r4, pc} - thumb_func_end MOD59_021D796C - - thumb_func_start MOD59_021D79F8 -MOD59_021D79F8: ; 0x021D79F8 - push {r4, lr} - add r4, r0, #0 - ldr r2, _021D7A30 ; =0x00000155 - ldr r3, [r4] - mov r0, #1 - mov r1, #0x1a - bl NewMsgDataFromNarc - str r0, [r4, #0x4c] - bl FUN_0201BD5C - mov r0, #0 - ldr r3, [r4] - add r1, r0, #0 - mov r2, #6 - bl FUN_020142EC - str r0, [r4, #0x60] - ldr r0, [r4] - bl ScrStrBufs_new - str r0, [r4, #0x64] - mov r0, #0 - str r0, [r4, #0x50] - str r0, [r4, #0x54] - str r0, [r4, #0x2c] - pop {r4, pc} - nop -_021D7A30: .word 0x00000155 - thumb_func_end MOD59_021D79F8 - thumb_func_start MOD59_021D7A34 MOD59_021D7A34: ; 0x021D7A34 push {r4, lr} diff --git a/arm9/modules/59/include/mod59_021D74E0.h b/arm9/modules/59/include/mod59_021D74E0.h index d6f52bba..bee72507 100644 --- a/arm9/modules/59/include/mod59_021D74E0.h +++ b/arm9/modules/59/include/mod59_021D74E0.h @@ -20,21 +20,31 @@ typedef struct MOD59_OverlayData u32 heap_id; struct SaveBlock2 *sav2; struct Options *options; - u32 Unk0C; - u32 Unk10; - struct UnkStruct_02006234 *Unk14; - struct BgConfig *Unk18; - u8 padding[0x54]; + u32 unk0C; + u32 unk10; + struct UnkStruct_02006234 *unk14; + struct BgConfig *bgConfig; + u8 filler1C[0x10]; + u32 unk2C; + u8 filler30[0x1C]; + struct MsgData *msgData; + u32 unk50; + u32 unk54; + u8 filler58[0x8]; + u32 unk60; // unknown if this is the right type, possibly a pointer instead? + struct ScrStrBufs *strBufs; + u8 filler68[0x8]; struct MOD59_UnkPlayerStruct *playerStruct; struct MOD59_UnkPlayerStruct *rivalStruct; - u8 padding2[0x10]; - u8 Unk88; - u8 Unk89; - u8 Unk8A; - u8 Unk8B; - u8 padding3[4]; - u32 Unk90; - u8 padding4[32]; + u32 unk78; + u8 filler7C[0xC]; + u8 unk88; + u8 unk89; + u8 unk8A; + u8 unk8B; + u8 filler8C[4]; + u32 unk90; + u8 filler94[32]; } MOD59_OverlayData; BOOL MOD59_Init(struct UnkStruct_02006234 *param0); @@ -42,5 +52,8 @@ BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1); BOOL MOD59_021D76C0(struct UnkStruct_02006234 *param0); void MOD59_021D7724(MOD59_OverlayData *data); BOOL MOD59_021D7730(void); +void MOD59_SetupBg(MOD59_OverlayData *data); +void MOD59_DestroyBg(MOD59_OverlayData *data); +void MOD59_SetupMsg(MOD59_OverlayData *data); #endif //POKEDIAMOND_MOD59_021D74E0_H diff --git a/arm9/modules/59/src/mod59_021D74E0_src.c b/arm9/modules/59/src/mod59_021D74E0_src.c index e104cf4f..1a301bc1 100644 --- a/arm9/modules/59/src/mod59_021D74E0_src.c +++ b/arm9/modules/59/src/mod59_021D74E0_src.c @@ -7,23 +7,34 @@ #include "GX_layers.h" #include "unk_02024E64.h" #include "bg_window.h" +#include "render_window.h" +#include "msgdata.h" +#include "msgdata/msg.naix" +#include "text.h" +#include "script_buffers.h" #include "module_52.h" extern void *FUN_02077A84(u32 heap_id, u32 param1, u32 param2, u32 param3, struct Options *options); extern void FUN_0200E3A0(PMLCDTarget, int); -extern void MOD59_021D778C(MOD59_OverlayData *data); -extern void MOD59_021D79F8(MOD59_OverlayData *data); +//todo move with the other rodata +extern struct GraphicsBanks MOD59_021D9F18; +extern struct GraphicsModes MOD59_021D9DCC; +extern struct BgTemplate MOD59_021D9EA0; +extern struct BgTemplate MOD59_021D9EBC; + extern void MOD59_021D7A34(MOD59_OverlayData *data); -extern void MOD59_021D796C(MOD59_OverlayData *data); extern void MOD59_021D7A4C(MOD59_OverlayData *data); extern void MOD59_021D7A5C(MOD59_OverlayData *data); +extern void MOD59_021D8058(MOD59_OverlayData *data); extern u32 MOD59_021D8920(MOD59_OverlayData *data); extern void FUN_0200E1D0(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 heap_id); extern u32 FUN_0200E308(void); +extern u32 FUN_020142EC(u32 param0, u32 param1, u32 param2, u32 heap_id); + extern void FUN_02077AC4(void *param0); FS_EXTERN_OVERLAY(MODULE_52); @@ -32,21 +43,21 @@ THUMB_FUNC BOOL MOD59_Init(struct UnkStruct_02006234 *param0) { CreateHeap(3, 0x52, 1 << 18); MOD59_OverlayData *data = (MOD59_OverlayData *) OverlayManager_CreateAndGetData(param0, sizeof(MOD59_OverlayData), 0x52); - (void)memset((void *)data, 0, 0xb4); + (void)memset((void *)data, 0, sizeof(MOD59_OverlayData)); data->heap_id = 0x52; s32 *field18 = OverlayManager_GetField18(param0); data->sav2 = (struct SaveBlock2 *)field18[2]; //? data->options = Sav2_PlayerData_GetOptionsAddr(data->sav2); - data->Unk10 = data->Unk0C = 0; - data->Unk14 = NULL; + data->unk10 = data->unk0C = 0; + data->unk14 = NULL; data->playerStruct = (struct MOD59_UnkPlayerStruct *)FUN_02077A84(0x52, 0, 0, 7, data->options); data->rivalStruct = (struct MOD59_UnkPlayerStruct *)FUN_02077A84(0x52, 3, 0, 7, data->options); - data->Unk88 = 0; - data->Unk89 = 0; - data->Unk8A = 0; - data->Unk8B = 0; - data->Unk90 = 0; + data->unk88 = 0; + data->unk89 = 0; + data->unk8A = 0; + data->unk8B = 0; + data->unk90 = 0; return TRUE; } @@ -72,8 +83,8 @@ THUMB_FUNC BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1) SetKeyRepeatTimers(4, 8); - MOD59_021D778C(data); - MOD59_021D79F8(data); + MOD59_SetupBg(data); + MOD59_SetupMsg(data); MOD59_021D7A4C(data); Main_SetVBlankIntrCB((void (*)(void *))MOD59_021D7724, data); @@ -91,7 +102,7 @@ THUMB_FUNC BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1) *param1 = 2; } - if (data->Unk14 == NULL) + if (data->unk14 == NULL) { break; } @@ -108,7 +119,7 @@ THUMB_FUNC BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1) } MOD59_021D7A34(data); - MOD59_021D796C(data); + MOD59_DestroyBg(data); MOD59_021D7A5C(data); Main_SetVBlankIntrCB(NULL, NULL); @@ -123,7 +134,7 @@ THUMB_FUNC BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1) } MOD59_021D7A34(data); - MOD59_021D796C(data); + MOD59_DestroyBg(data); MOD59_021D7A5C(data); Main_SetVBlankIntrCB(NULL, NULL); @@ -133,13 +144,13 @@ THUMB_FUNC BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1) break; case 4: - if (OverlayManager_Run(data->Unk14) != TRUE) + if (OverlayManager_Run(data->unk14) != TRUE) { break; } - OverlayManager_delete(data->Unk14); - data->Unk14 = NULL; + OverlayManager_delete(data->unk14); + data->unk14 = NULL; *param1 = 5; @@ -177,7 +188,7 @@ THUMB_FUNC BOOL MOD59_021D76C0(struct UnkStruct_02006234 *param0) THUMB_FUNC void MOD59_021D7724(MOD59_OverlayData *data) { - DoScheduledBgGpuUpdates(data->Unk18); + DoScheduledBgGpuUpdates(data->bgConfig); } THUMB_FUNC BOOL MOD59_021D7730(void) @@ -200,3 +211,114 @@ THUMB_FUNC BOOL MOD59_021D7730(void) return ret; } + +THUMB_FUNC void MOD59_SetupBg(MOD59_OverlayData *data) +{ + struct GraphicsBanks graphicsBanks = MOD59_021D9F18; + GX_SetBanks(&graphicsBanks); + data->bgConfig = BgConfig_Alloc(data->heap_id); + + struct GraphicsModes graphicsModes = MOD59_021D9DCC; + SetBothScreensModesAndDisable(&graphicsModes); + + struct BgTemplate bgTemplateMain = MOD59_021D9EA0; + bgTemplateMain.screenBase = 15; + bgTemplateMain.charBase = 6; + InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_0, &bgTemplateMain, 0); + BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_0); + + bgTemplateMain.screenBase = 14; + bgTemplateMain.charBase = 5; + InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_1, &bgTemplateMain, 0); + BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_1); + + bgTemplateMain.screenBase = 13; + bgTemplateMain.charBase = 4; + InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_2, &bgTemplateMain, 0); + BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_2); + + bgTemplateMain.screenBase = 12; + bgTemplateMain.charBase = 3; + InitBgFromTemplate(data->bgConfig, GF_BG_LYR_MAIN_3, &bgTemplateMain, 0); + BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_MAIN_3); + + FUN_0200CD68(data->bgConfig, 0, 994, 4, 0, data->heap_id); + FUN_0200CB00(data->bgConfig, 0, 985, 3, 0, data->heap_id); + FUN_02002ED0(GF_BG_LYR_MAIN_0, 160, data->heap_id); + FUN_02002EEC(GF_BG_LYR_MAIN_0, 192, data->heap_id); + + struct BgTemplate bgTemplateSub = MOD59_021D9EBC; + bgTemplateSub.screenBase = 15; + bgTemplateSub.charBase = 6; + InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_0, &bgTemplateSub, 0); + BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_0); + + bgTemplateSub.screenBase = 14; + bgTemplateSub.charBase = 5; + InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_1, &bgTemplateSub, 0); + BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_1); + + bgTemplateSub.screenBase = 13; + bgTemplateSub.charBase = 4; + InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_2, &bgTemplateSub, 0); + BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_2); + + bgTemplateSub.screenBase = 12; + bgTemplateSub.charBase = 3; + InitBgFromTemplate(data->bgConfig, GF_BG_LYR_SUB_3, &bgTemplateSub, 0); + BgClearTilemapBufferAndCommit(data->bgConfig, GF_BG_LYR_SUB_3); + + ToggleBgLayer(GF_BG_LYR_MAIN_0, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_MAIN_1, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_MAIN_2, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_MAIN_3, GX_LAYER_TOGGLE_OFF); + + ToggleBgLayer(GF_BG_LYR_SUB_0, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_SUB_1, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_SUB_2, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_SUB_3, GX_LAYER_TOGGLE_OFF); + + MOD59_021D8058(data); + data->unk78 = 0; +} + +THUMB_FUNC void MOD59_DestroyBg(MOD59_OverlayData *data) +{ + ToggleBgLayer(GF_BG_LYR_MAIN_0, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_MAIN_1, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_MAIN_2, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_MAIN_3, GX_LAYER_TOGGLE_OFF); + + ToggleBgLayer(GF_BG_LYR_SUB_0, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_SUB_1, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_SUB_2, GX_LAYER_TOGGLE_OFF); + ToggleBgLayer(GF_BG_LYR_SUB_3, GX_LAYER_TOGGLE_OFF); + + FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_MAIN_0); + FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_MAIN_1); + FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_MAIN_2); + FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_MAIN_3); + + FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_SUB_0); + FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_SUB_1); + FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_SUB_2); + FreeBgTilemapBuffer(data->bgConfig, GF_BG_LYR_SUB_3); + + FreeToHeap(data->bgConfig); +} + +THUMB_FUNC void MOD59_SetupMsg(MOD59_OverlayData *data) +{ + data->msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0341_bin, data->heap_id); + + FUN_0201BD5C(); + + data->unk60 = FUN_020142EC(0, 0, 6, data->heap_id); + + data->strBufs = ScrStrBufs_new(data->heap_id); + + data->unk50 = 0; + data->unk54 = 0; + data->unk2C = 0; +} + |