diff options
author | red031000 <rubenru09@aol.com> | 2021-08-22 04:03:11 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2021-08-22 04:03:11 +0100 |
commit | 3fdad08888cb5f9b72e30613e1b1c951e3a07be6 (patch) | |
tree | 8acbab98d049de2eb1b0df9e33f1747c4cb13052 /arm9/modules/59/src | |
parent | bc451c7cca2b74d92c2615b5ab60c94d5c724af4 (diff) |
MOD59_SetupBg
Diffstat (limited to 'arm9/modules/59/src')
-rw-r--r-- | arm9/modules/59/src/mod59_021D74E0_src.c | 88 |
1 files changed, 84 insertions, 4 deletions
diff --git a/arm9/modules/59/src/mod59_021D74E0_src.c b/arm9/modules/59/src/mod59_021D74E0_src.c index e104cf4f..92880515 100644 --- a/arm9/modules/59/src/mod59_021D74E0_src.c +++ b/arm9/modules/59/src/mod59_021D74E0_src.c @@ -13,12 +13,18 @@ extern void *FUN_02077A84(u32 heap_id, u32 param1, u32 param2, u32 param3, struc extern void FUN_0200E3A0(PMLCDTarget, int); -extern void MOD59_021D778C(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_021D79F8(MOD59_OverlayData *data); 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); @@ -26,13 +32,17 @@ extern u32 FUN_0200E308(void); extern void FUN_02077AC4(void *param0); +extern void FUN_0200CD68(struct BgConfig *param0, u32 param1, u32 param2, u32 param3, u8 frame_id, u32 heap_id); + +extern void FUN_0200CB00(struct BgConfig *param0, u32 param1, u32 param2, u32 param3, u8 frame_id, u32 heap_id); + FS_EXTERN_OVERLAY(MODULE_52); 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); @@ -72,7 +82,7 @@ THUMB_FUNC BOOL MOD59_021D7564(struct UnkStruct_02006234 *param0, u32 *param1) SetKeyRepeatTimers(4, 8); - MOD59_021D778C(data); + MOD59_SetupBg(data); MOD59_021D79F8(data); MOD59_021D7A4C(data); @@ -177,7 +187,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 +210,73 @@ 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; +} |