diff options
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/bg_window.c (renamed from arm9/src/unk_02016B94.c) | 968 | ||||
-rw-r--r-- | arm9/src/error_message_reset.c | 10 | ||||
-rw-r--r-- | arm9/src/gf_gfx_loader.c | 4 | ||||
-rw-r--r-- | arm9/src/scrcmd.c | 10 | ||||
-rw-r--r-- | arm9/src/text_02054590.c | 2 |
5 files changed, 497 insertions, 497 deletions
diff --git a/arm9/src/unk_02016B94.c b/arm9/src/bg_window.c index 5da8dd32..23763d76 100644 --- a/arm9/src/unk_02016B94.c +++ b/arm9/src/bg_window.c @@ -1,35 +1,35 @@ #include "global.h" -#include "unk_02016B94.h" +#include "bg_window.h" #include "GX_layers.h" #include "game_init.h" #include "gx.h" #include "heap.h" -const u8 UNK_020EDB30[] = { - 0x10, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, +const u8 sTilemapWidthByBufferSize[] = { + [GF_BG_SCR_SIZE_128x128] = 0x10, + [GF_BG_SCR_SIZE_256x256] = 0x20, + [GF_BG_SCR_SIZE_256x512] = 0x20, + [GF_BG_SCR_SIZE_512x256] = 0x20, + [GF_BG_SCR_SIZE_512x512] = 0x20, + [GF_BG_SCR_SIZE_1024x1024] = 0x20, }; -void (*const UNK_020EDB5C[])(struct Window *) = { - FUN_020194C8, - FUN_0201951C, - FUN_020194C8, +void (*const sScheduleWindowCopyToVramFuncs[])(struct Window *) = { + ScheduleWindowCopyToVram_TextMode, + ScheduleWindowCopyToVram_AffineMode, + ScheduleWindowCopyToVram_TextMode, }; -void (*const UNK_020EDB50[])(struct Window *) = { - FUN_020195A8, - FUN_020195E4, - FUN_020195A8, +void (*const sClearWindowTilemapAndCopyToVramFuncs[])(struct Window *) = { + ClearWindowTilemapAndCopyToVram_TextMode, + ClearWindowTilemapAndCopyToVram_AffineMode, + ClearWindowTilemapAndCopyToVram_TextMode, }; -void (*const UNK_020EDB44[])(struct Window *) = { - FUN_020195D0, - FUN_0201960C, - FUN_020195D0, +void (*const sClearWindowTilemapAndScheduleTransferFuncs[])(struct Window *) = { + ClearWindowTilemapAndScheduleTransfer_TextMode, + ClearWindowTilemapAndScheduleTransfer_AffineMode, + ClearWindowTilemapAndScheduleTransfer_TextMode, }; void (*const sPutWindowTilemapFuncs[])(struct Window *) = { @@ -44,13 +44,13 @@ void (*const sCopyWindowToVramFuncs[])(struct Window *) = { CopyWindowToVram_TextMode, }; -void (*const UNK_020EDB74[])(struct Window *) = { +void (*const sClearWindowTilemapFuncs[])(struct Window *) = { ClearWindowTilemapText, ClearWindowTilemapAffine, ClearWindowTilemapText, }; -THUMB_FUNC struct BgConfig *FUN_02016B94(u32 heap_id) +THUMB_FUNC struct BgConfig *BgConfig_Alloc(u32 heap_id) { struct BgConfig *ptr = AllocFromHeap(heap_id, sizeof(struct BgConfig)); memset(ptr, 0, sizeof(struct BgConfig)); @@ -61,12 +61,12 @@ THUMB_FUNC struct BgConfig *FUN_02016B94(u32 heap_id) return ptr; } -THUMB_FUNC u32 FUN_02016BB8(u32 *param0) +THUMB_FUNC u32 BgConfig_GetHeapId(struct BgConfig *bgConfig) { - return *param0; + return bgConfig->heap_id; } -THUMB_FUNC void FUN_02016BBC(const struct GraphicsModes *modes) +THUMB_FUNC void SetBothScreensModesAndDisable(const struct GraphicsModes *modes) { GX_SetGraphicsMode(modes->dispMode, modes->bgMode, modes->_2d3dMode); GXS_SetGraphicsMode(modes->subMode); @@ -77,52 +77,52 @@ THUMB_FUNC void FUN_02016BBC(const struct GraphicsModes *modes) GX_DisableEngineBLayers(); } -THUMB_FUNC void FUN_02016BF4(const struct GraphicsModes *param0, u32 param1) +THUMB_FUNC void SetScreenModeAndDisable(const struct GraphicsModes *gfxModes, u32 whichScreen) { - if (param1 == 0) + if (whichScreen == 0) { - GX_SetGraphicsMode(param0->dispMode, param0->bgMode, param0->_2d3dMode); + GX_SetGraphicsMode(gfxModes->dispMode, gfxModes->bgMode, gfxModes->_2d3dMode); GX_DisableEngineALayers(); } else { - GXS_SetGraphicsMode(param0->subMode); + GXS_SetGraphicsMode(gfxModes->subMode); GX_DisableEngineBLayers(); } } -THUMB_FUNC void FUN_02016C18( - struct BgConfig *param0, u8 param1, const struct BgTemplate *template, u8 bgMode) +THUMB_FUNC void InitBgFromTemplate( + struct BgConfig *bgConfig, u8 bgId, const struct BgTemplate *template, u8 bgMode) { - u8 screenSize = FUN_020177DC(template->unk10, bgMode); - switch (param1) + u8 screenSize = TranslateGFBgModePairToGXScreenSize(template->size, bgMode); + switch (bgId) { - case 0: - GX_EngineAToggleLayers(1, GX_LAYER_TOGGLE_ON); + case GF_BG_LYR_MAIN_0: + GX_EngineAToggleLayers(GF_BG_LYR_MAIN_0_F, GX_LAYER_TOGGLE_ON); G2_SetBG0Control(screenSize, template->colorMode, template->screenBase, template->charBase, template->bgExtPltt); G2_SetBG0Priority(template->priority); G2_BG0Mosaic(template->mosaic); break; - case 1: - GX_EngineAToggleLayers(2, GX_LAYER_TOGGLE_ON); + case GF_BG_LYR_MAIN_1: + GX_EngineAToggleLayers(GF_BG_LYR_MAIN_1_F, GX_LAYER_TOGGLE_ON); G2_SetBG1Control(screenSize, template->colorMode, template->screenBase, template->charBase, template->bgExtPltt); G2_SetBG1Priority(template->priority); G2_BG1Mosaic(template->mosaic); break; - case 2: - GX_EngineAToggleLayers(4, GX_LAYER_TOGGLE_ON); + case GF_BG_LYR_MAIN_2: + GX_EngineAToggleLayers(GF_BG_LYR_MAIN_2_F, GX_LAYER_TOGGLE_ON); switch (bgMode) { default: - case 0: + case GF_BG_TYPE_TEXT: G2_SetBG2ControlText(screenSize, template->colorMode, template->screenBase, template->charBase); break; - case 1: + case GF_BG_TYPE_AFFINE: G2_SetBG2ControlAffine(screenSize, template->areaOver, template->screenBase, template->charBase); break; - case 2: + case GF_BG_TYPE_256x16PLTT: G2_SetBG2Control256x16Pltt(screenSize, template->areaOver, template->screenBase, template->charBase); break; } @@ -130,18 +130,18 @@ THUMB_FUNC void FUN_02016C18( G2_BG2Mosaic(template->mosaic); break; - case 3: - GX_EngineAToggleLayers(8, GX_LAYER_TOGGLE_ON); + case GF_BG_LYR_MAIN_3: + GX_EngineAToggleLayers(GF_BG_LYR_MAIN_3_F, GX_LAYER_TOGGLE_ON); switch (bgMode) { default: - case 0: + case GF_BG_TYPE_TEXT: G2_SetBG3ControlText(screenSize, template->colorMode, template->screenBase, template->charBase); break; - case 1: + case GF_BG_TYPE_AFFINE: G2_SetBG3ControlAffine(screenSize, template->areaOver, template->screenBase, template->charBase); break; - case 2: + case GF_BG_TYPE_256x16PLTT: G2_SetBG3Control256x16Pltt(screenSize, template->areaOver, template->screenBase, template->charBase); break; } @@ -149,32 +149,32 @@ THUMB_FUNC void FUN_02016C18( G2_BG3Mosaic(template->mosaic); break; - case 4: - GX_EngineBToggleLayers(1, GX_LAYER_TOGGLE_ON); + case GF_BG_LYR_SUB_0: + GX_EngineBToggleLayers(GF_BG_LYR_SUB_0_F, GX_LAYER_TOGGLE_ON); G2S_SetBG0Control(screenSize, template->colorMode, template->screenBase, template->charBase, template->bgExtPltt); G2S_SetBG0Priority(template->priority); G2S_BG0Mosaic(template->mosaic); break; - case 5: - GX_EngineBToggleLayers(2, GX_LAYER_TOGGLE_ON); + case GF_BG_LYR_SUB_1: + GX_EngineBToggleLayers(GF_BG_LYR_SUB_1_F, GX_LAYER_TOGGLE_ON); G2S_SetBG1Control(screenSize, template->colorMode, template->screenBase, template->charBase, template->bgExtPltt); G2S_SetBG1Priority(template->priority); G2S_BG1Mosaic(template->mosaic); break; - case 6: - GX_EngineBToggleLayers(4, GX_LAYER_TOGGLE_ON); + case GF_BG_LYR_SUB_2: + GX_EngineBToggleLayers(GF_BG_LYR_SUB_2_F, GX_LAYER_TOGGLE_ON); switch (bgMode) { default: - case 0: + case GF_BG_TYPE_TEXT: G2S_SetBG2ControlText(screenSize, template->colorMode, template->screenBase, template->charBase); break; - case 1: + case GF_BG_TYPE_AFFINE: G2S_SetBG2ControlAffine(screenSize, template->areaOver, template->screenBase, template->charBase); break; - case 2: + case GF_BG_TYPE_256x16PLTT: G2S_SetBG2Control256x16Pltt(screenSize, template->areaOver, template->screenBase, template->charBase); break; } @@ -182,18 +182,18 @@ THUMB_FUNC void FUN_02016C18( G2S_BG2Mosaic(template->mosaic); break; - case 7: - GX_EngineBToggleLayers(8, GX_LAYER_TOGGLE_ON); + case GF_BG_LYR_SUB_3: + GX_EngineBToggleLayers(GF_BG_LYR_SUB_3_F, GX_LAYER_TOGGLE_ON); switch (bgMode) { default: - case 0: + case GF_BG_TYPE_TEXT: G2S_SetBG3ControlText(screenSize, template->colorMode, template->screenBase, template->charBase); break; - case 1: + case GF_BG_TYPE_AFFINE: G2S_SetBG3ControlAffine(screenSize, template->areaOver, template->screenBase, template->charBase); break; - case 2: + case GF_BG_TYPE_256x16PLTT: G2S_SetBG3Control256x16Pltt(screenSize, template->areaOver, template->screenBase, template->charBase); break; } @@ -202,104 +202,104 @@ THUMB_FUNC void FUN_02016C18( break; } - param0->bgs[param1].rotation = 0; - param0->bgs[param1].xScale = FX32_ONE; - param0->bgs[param1].yScale = FX32_ONE; - param0->bgs[param1].centerX = 0; - param0->bgs[param1].centerY = 0; + bgConfig->bgs[bgId].rotation = 0; + bgConfig->bgs[bgId].xScale = FX32_ONE; + bgConfig->bgs[bgId].yScale = FX32_ONE; + bgConfig->bgs[bgId].centerX = 0; + bgConfig->bgs[bgId].centerY = 0; if (template->bufferSize != 0) { - param0->bgs[param1].tilemapBuffer = AllocFromHeap(param0->heap_id, template->bufferSize); + bgConfig->bgs[bgId].tilemapBuffer = AllocFromHeap(bgConfig->heap_id, template->bufferSize); - MI_CpuClear16(param0->bgs[param1].tilemapBuffer, template->bufferSize); + MI_CpuClear16(bgConfig->bgs[bgId].tilemapBuffer, template->bufferSize); - param0->bgs[param1].bufferSize = template->bufferSize; - param0->bgs[param1].unk10 = template->unk0c; + bgConfig->bgs[bgId].bufferSize = template->bufferSize; + bgConfig->bgs[bgId].baseTile = template->unk0c; } else { - param0->bgs[param1].tilemapBuffer = NULL; - param0->bgs[param1].bufferSize = 0; - param0->bgs[param1].unk10 = 0; + bgConfig->bgs[bgId].tilemapBuffer = NULL; + bgConfig->bgs[bgId].bufferSize = 0; + bgConfig->bgs[bgId].baseTile = 0; } - param0->bgs[param1].size = template->unk10; - param0->bgs[param1].mode = bgMode; - param0->bgs[param1].colorMode = template->colorMode; + bgConfig->bgs[bgId].size = template->size; + bgConfig->bgs[bgId].mode = bgMode; + bgConfig->bgs[bgId].colorMode = template->colorMode; - if (bgMode == 0 && template->colorMode == 0) + if (bgMode == GF_BG_TYPE_TEXT && template->colorMode == 0) { - param0->bgs[param1].tileSize = 0x20; + bgConfig->bgs[bgId].tileSize = 0x20; } else { - param0->bgs[param1].tileSize = 0x40; + bgConfig->bgs[bgId].tileSize = 0x40; } - FUN_020179E0(param0, param1, 0, template->unk00); - FUN_020179E0(param0, param1, 3, template->unk04); + BgSetPosTextAndCommit(bgConfig, bgId, BG_POS_OP_SET_X, template->unk00); + BgSetPosTextAndCommit(bgConfig, bgId, BG_POS_OP_SET_Y, template->unk04); } -THUMB_FUNC void FUN_020170F4(struct BgConfig *config, u8 bgId, u32 attr, u8 value) +THUMB_FUNC void SetBgControlParam(struct BgConfig *config, u8 bgId, u32 attr, u8 value) { - if (attr == 0) + if (attr == GF_BG_CNT_SET_COLOR_MODE) { config->bgs[bgId].colorMode = value; } switch (bgId) { - case 0: + case GF_BG_LYR_MAIN_0: GXBg01Control bg0cnt = G2_GetBG0Control(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg0cnt.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg0cnt.charBase = value; } G2_SetBG0Control(bg0cnt.screenSize, config->bgs[bgId].colorMode, bg0cnt.screenBase, bg0cnt.charBase, bg0cnt.bgExtPltt); break; - case 1: + case GF_BG_LYR_MAIN_1: GXBg01Control bg1cnt = G2_GetBG1Control(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg1cnt.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg1cnt.charBase = value; } G2_SetBG1Control(bg1cnt.screenSize, config->bgs[bgId].colorMode, bg1cnt.screenBase, bg1cnt.charBase, bg1cnt.bgExtPltt); break; - case 2: + case GF_BG_LYR_MAIN_2: switch (config->bgs[bgId].mode) { default: - case 0: + case GF_BG_TYPE_TEXT: GXBg23ControlText bg2cnt_tx = G2_GetBG2ControlText(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg2cnt_tx.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg2cnt_tx.charBase = value; } G2_SetBG2ControlText(bg2cnt_tx.screenSize, config->bgs[bgId].colorMode, bg2cnt_tx.screenBase, bg2cnt_tx.charBase); break; - case 1: + case GF_BG_TYPE_AFFINE: GXBg23ControlAffine bg2cnt_aff = G2_GetBG2ControlAffine(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg2cnt_aff.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg2cnt_aff.charBase = value; } @@ -307,13 +307,13 @@ THUMB_FUNC void FUN_020170F4(struct BgConfig *config, u8 bgId, u32 attr, u8 valu G2_SetBG2ControlAffine(bg2cnt_aff.screenSize, bg2cnt_aff.areaOver, bg2cnt_aff.screenBase, bg2cnt_aff.charBase); break; - case 2: + case GF_BG_TYPE_256x16PLTT: GXBg23Control256x16Pltt bg2cnt_256x16pltt = G2_GetBG2Control256x16Pltt(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg2cnt_256x16pltt.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg2cnt_256x16pltt.charBase = value; } @@ -323,30 +323,30 @@ THUMB_FUNC void FUN_020170F4(struct BgConfig *config, u8 bgId, u32 attr, u8 valu break; } break; - case 3: + case GF_BG_LYR_MAIN_3: switch (config->bgs[bgId].mode) { default: - case 0: + case GF_BG_TYPE_TEXT: GXBg23ControlText bg3cnt_tx = G2_GetBG3ControlText(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg3cnt_tx.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg3cnt_tx.charBase = value; } G2_SetBG3ControlText(bg3cnt_tx.screenSize, config->bgs[bgId].colorMode, bg3cnt_tx.screenBase, bg3cnt_tx.charBase); break; - case 1: + case GF_BG_TYPE_AFFINE: GXBg23ControlAffine bg3cnt_aff = G2_GetBG3ControlAffine(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg3cnt_aff.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg3cnt_aff.charBase = value; } @@ -354,13 +354,13 @@ THUMB_FUNC void FUN_020170F4(struct BgConfig *config, u8 bgId, u32 attr, u8 valu G2_SetBG3ControlAffine(bg3cnt_aff.screenSize, bg3cnt_aff.areaOver, bg3cnt_aff.screenBase, bg3cnt_aff.charBase); break; - case 2: + case GF_BG_TYPE_256x16PLTT: GXBg23Control256x16Pltt bg3cnt_256x16pltt = G2_GetBG3Control256x16Pltt(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg3cnt_256x16pltt.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg3cnt_256x16pltt.charBase = value; } @@ -370,56 +370,56 @@ THUMB_FUNC void FUN_020170F4(struct BgConfig *config, u8 bgId, u32 attr, u8 valu break; } break; - case 4: + case GF_BG_LYR_SUB_0: GXBg01Control bg0cntsub = G2S_GetBG0Control(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg0cntsub.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg0cntsub.charBase = value; } G2S_SetBG0Control(bg0cntsub.screenSize, config->bgs[bgId].colorMode, bg0cntsub.screenBase, bg0cntsub.charBase, bg0cntsub.bgExtPltt); break; - case 5: + case GF_BG_LYR_SUB_1: GXBg01Control bg1cntsub = G2S_GetBG1Control(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg1cntsub.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg1cntsub.charBase = value; } G2S_SetBG1Control(bg1cntsub.screenSize, config->bgs[bgId].colorMode, bg1cntsub.screenBase, bg1cntsub.charBase, bg1cntsub.bgExtPltt); break; - case 6: + case GF_BG_LYR_SUB_2: switch (config->bgs[bgId].mode) { default: - case 0: + case GF_BG_TYPE_TEXT: GXBg23ControlText bg2cntsub_tx = G2S_GetBG2ControlText(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg2cntsub_tx.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg2cntsub_tx.charBase = value; } G2S_SetBG2ControlText(bg2cntsub_tx.screenSize, config->bgs[bgId].colorMode, bg2cntsub_tx.screenBase, bg2cntsub_tx.charBase); break; - case 1: + case GF_BG_TYPE_AFFINE: GXBg23ControlAffine bg2cntsub_aff = G2S_GetBG2ControlAffine(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg2cntsub_aff.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg2cntsub_aff.charBase = value; } @@ -427,13 +427,13 @@ THUMB_FUNC void FUN_020170F4(struct BgConfig *config, u8 bgId, u32 attr, u8 valu G2S_SetBG2ControlAffine(bg2cntsub_aff.screenSize, bg2cntsub_aff.areaOver, bg2cntsub_aff.screenBase, bg2cntsub_aff.charBase); break; - case 2: + case GF_BG_TYPE_256x16PLTT: GXBg23Control256x16Pltt bg2cntsub_256x16pltt = G2S_GetBG2Control256x16Pltt(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg2cntsub_256x16pltt.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg2cntsub_256x16pltt.charBase = value; } @@ -443,30 +443,30 @@ THUMB_FUNC void FUN_020170F4(struct BgConfig *config, u8 bgId, u32 attr, u8 valu break; } break; - case 7: + case GF_BG_LYR_SUB_3: switch (config->bgs[bgId].mode) { default: - case 0: + case GF_BG_TYPE_TEXT: GXBg23ControlText bg3cntsub_tx = G2S_GetBG3ControlText(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg3cntsub_tx.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg3cntsub_tx.charBase = value; } G2S_SetBG3ControlText(bg3cntsub_tx.screenSize, config->bgs[bgId].colorMode, bg3cntsub_tx.screenBase, bg3cntsub_tx.charBase); break; - case 1: + case GF_BG_TYPE_AFFINE: GXBg23ControlAffine bg3cntsub_aff = G2S_GetBG3ControlAffine(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg3cntsub_aff.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg3cntsub_aff.charBase = value; } @@ -474,13 +474,13 @@ THUMB_FUNC void FUN_020170F4(struct BgConfig *config, u8 bgId, u32 attr, u8 valu G2S_SetBG3ControlAffine(bg3cntsub_aff.screenSize, bg3cntsub_aff.areaOver, bg3cntsub_aff.screenBase, bg3cntsub_aff.charBase); break; - case 2: + case GF_BG_TYPE_256x16PLTT: GXBg23Control256x16Pltt bg3cntsub_256x16pltt = G2S_GetBG3Control256x16Pltt(); - if (attr == 1) + if (attr == GF_BG_CNT_SET_SCREEN_BASE) { bg3cntsub_256x16pltt.screenBase = value; } - else if (attr == 2) + else if (attr == GF_BG_CNT_SET_CHAR_BASE) { bg3cntsub_256x16pltt.charBase = value; } @@ -493,106 +493,106 @@ THUMB_FUNC void FUN_020170F4(struct BgConfig *config, u8 bgId, u32 attr, u8 valu } } -THUMB_FUNC u8 FUN_020177DC(u8 param0, u32 param1) +THUMB_FUNC u8 TranslateGFBgModePairToGXScreenSize(u8 size, u32 bgMode) { - switch (param1) + switch (bgMode) { - case 0: + case GF_BG_TYPE_TEXT: - if (param0 == 1) + if (size == GF_BG_SCR_SIZE_256x256) { return GX_BG_SCRSIZE_TEXT_256x256; } - else if (param0 == 2) + else if (size == GF_BG_SCR_SIZE_256x512) { return GX_BG_SCRSIZE_TEXT_256x512; } - else if (param0 == 3) + else if (size == GF_BG_SCR_SIZE_512x256) { return GX_BG_SCRSIZE_TEXT_512x256; } - else if (param0 == 4) + else if (size == GF_BG_SCR_SIZE_512x512) { return GX_BG_SCRSIZE_TEXT_512x512; } break; - case 1: + case GF_BG_TYPE_AFFINE: - if (param0 == 0) + if (size == GF_BG_SCR_SIZE_128x128) { - return GX_BG_SCRSIZE_TEXT_256x256; + return GX_BG_SCRSIZE_AFFINE_128x128; } - else if (param0 == 1) + else if (size == GF_BG_SCR_SIZE_256x256) { - return GX_BG_SCRSIZE_TEXT_512x256; + return GX_BG_SCRSIZE_AFFINE_256x256; } - else if (param0 == 4) + else if (size == GF_BG_SCR_SIZE_512x512) { - return GX_BG_SCRSIZE_TEXT_256x512; + return GX_BG_SCRSIZE_AFFINE_512x512; } - else if (param0 == 5) + else if (size == GF_BG_SCR_SIZE_1024x1024) { - return GX_BG_SCRSIZE_TEXT_512x512; + return GX_BG_SCRSIZE_AFFINE_1024x1024; } break; - case 2: + case GF_BG_TYPE_256x16PLTT: - if (param0 == 0) + if (size == GF_BG_SCR_SIZE_128x128) { - return GX_BG_SCRSIZE_TEXT_256x256; + return GX_BG_SCRSIZE_256x16PLTT_128x128; } - else if (param0 == 1) + else if (size == GF_BG_SCR_SIZE_256x256) { - return GX_BG_SCRSIZE_TEXT_512x256; + return GX_BG_SCRSIZE_256x16PLTT_256x256; } - else if (param0 == 4) + else if (size == GF_BG_SCR_SIZE_512x512) { - return GX_BG_SCRSIZE_TEXT_256x512; + return GX_BG_SCRSIZE_256x16PLTT_512x512; } - else if (param0 == 5) + else if (size == GF_BG_SCR_SIZE_1024x1024) { - return GX_BG_SCRSIZE_TEXT_512x512; + return GX_BG_SCRSIZE_256x16PLTT_1024x1024; } break; } - return GX_BG_SCRSIZE_TEXT_256x256; + return GX_BG_SCRSIZE_TEXT_256x256; // GX_BG_SCRSIZE_AFFINE_128x128; GX_BG_SCRSIZE_256x16PLTT_128x128; } THUMB_FUNC void GetBgScreenDimensions(u32 screenSize, u8 *width_p, u8 *height_p) { switch (screenSize) { - case 0: + case GF_BG_SCR_SIZE_128x128: *width_p = 0x10; *height_p = 0x10; break; - case 1: + case GF_BG_SCR_SIZE_256x256: *width_p = 0x20; *height_p = 0x20; break; - case 2: + case GF_BG_SCR_SIZE_256x512: *width_p = 0x20; *height_p = 0x40; break; - case 3: + case GF_BG_SCR_SIZE_512x256: *width_p = 0x40; *height_p = 0x20; break; - case 4: + case GF_BG_SCR_SIZE_512x512: *width_p = 0x40; *height_p = 0x40; break; - case 5: + case GF_BG_SCR_SIZE_1024x1024: *width_p = 0x80; *height_p = 0x80; break; } } -THUMB_FUNC void FUN_020178A0(struct BgConfig *bgConfig, u32 bgId) +THUMB_FUNC void FreeBgTilemapBuffer(struct BgConfig *bgConfig, u32 bgId) { if (bgConfig->bgs[bgId].tilemapBuffer != NULL) { @@ -601,32 +601,32 @@ THUMB_FUNC void FUN_020178A0(struct BgConfig *bgConfig, u32 bgId) } } -THUMB_FUNC void FUN_020178BC(u32 bgId, u16 priority) +THUMB_FUNC void SetBgPriority(u32 bgId, u16 priority) { switch (bgId) { - case 0: + case GF_BG_LYR_MAIN_0: G2_SetBG0Priority(priority); break; - case 1: + case GF_BG_LYR_MAIN_1: G2_SetBG1Priority(priority); break; - case 2: + case GF_BG_LYR_MAIN_2: G2_SetBG2Priority(priority); break; - case 3: + case GF_BG_LYR_MAIN_3: G2_SetBG3Priority(priority); break; - case 4: + case GF_BG_LYR_SUB_0: G2S_SetBG0Priority(priority); break; - case 5: + case GF_BG_LYR_SUB_1: G2S_SetBG1Priority(priority); break; - case 6: + case GF_BG_LYR_SUB_2: G2S_SetBG2Priority(priority); break; - case 7: + case GF_BG_LYR_SUB_3: G2S_SetBG3Priority(priority); break; } @@ -636,220 +636,219 @@ THUMB_FUNC void ToggleBgLayer(u32 bgId, GX_LayerToggle toggle) { switch (bgId) { - case 0: - GX_EngineAToggleLayers(1, toggle); + case GF_BG_LYR_MAIN_0: + GX_EngineAToggleLayers(GF_BG_LYR_MAIN_0_F, toggle); break; - case 1: - GX_EngineAToggleLayers(2, toggle); + case GF_BG_LYR_MAIN_1: + GX_EngineAToggleLayers(GF_BG_LYR_MAIN_1_F, toggle); break; - case 2: - GX_EngineAToggleLayers(4, toggle); + case GF_BG_LYR_MAIN_2: + GX_EngineAToggleLayers(GF_BG_LYR_MAIN_2_F, toggle); break; - case 3: - GX_EngineAToggleLayers(8, toggle); + case GF_BG_LYR_MAIN_3: + GX_EngineAToggleLayers(GF_BG_LYR_MAIN_3_F, toggle); break; - case 4: - GX_EngineBToggleLayers(1, toggle); + case GF_BG_LYR_SUB_0: + GX_EngineBToggleLayers(GF_BG_LYR_SUB_0_F, toggle); break; - case 5: - GX_EngineBToggleLayers(2, toggle); + case GF_BG_LYR_SUB_1: + GX_EngineBToggleLayers(GF_BG_LYR_SUB_1_F, toggle); break; - case 6: - GX_EngineBToggleLayers(4, toggle); + case GF_BG_LYR_SUB_2: + GX_EngineBToggleLayers(GF_BG_LYR_SUB_2_F, toggle); break; - case 7: - GX_EngineBToggleLayers(8, toggle); + case GF_BG_LYR_SUB_3: + GX_EngineBToggleLayers(GF_BG_LYR_SUB_3_F, toggle); break; } } -THUMB_FUNC void FUN_020179E0(struct BgConfig *bgConfig, u32 bgId, u32 param2, fx32 val) +THUMB_FUNC void BgSetPosTextAndCommit(struct BgConfig *bgConfig, u32 bgId, u32 op, fx32 val) { - Bg_SetPosText(&bgConfig->bgs[bgId], param2, val); + Bg_SetPosText(&bgConfig->bgs[bgId], op, val); u32 x = (u32)bgConfig->bgs[bgId].hOffset; u32 y = (u32)bgConfig->bgs[bgId].vOffset; switch (bgId) { - case 0: + case GF_BG_LYR_MAIN_0: G2_SetBG0Offset(x, y); break; - case 1: + case GF_BG_LYR_MAIN_1: G2_SetBG1Offset(x, y); break; - case 2: - if (bgConfig->bgs[2].mode == 0) + case GF_BG_LYR_MAIN_2: + if (bgConfig->bgs[GF_BG_LYR_MAIN_2].mode == 0) { G2_SetBG2Offset(x, y); } else { - FUN_02017C6C(bgConfig, 2); + BgAffineReset(bgConfig, GF_BG_LYR_MAIN_2); } break; - case 3: - if (bgConfig->bgs[3].mode == 0) + case GF_BG_LYR_MAIN_3: + if (bgConfig->bgs[GF_BG_LYR_MAIN_3].mode == 0) { G2_SetBG3Offset(x, y); } else { - FUN_02017C6C(bgConfig, 3); + BgAffineReset(bgConfig, GF_BG_LYR_MAIN_3); } break; - case 4: + case GF_BG_LYR_SUB_0: G2S_SetBG0Offset(x, y); break; - case 5: + case GF_BG_LYR_SUB_1: G2S_SetBG1Offset(x, y); break; - case 6: - if (bgConfig->bgs[6].mode == 0) + case GF_BG_LYR_SUB_2: + if (bgConfig->bgs[GF_BG_LYR_SUB_2].mode == 0) { G2S_SetBG2Offset(x, y); } else { - FUN_02017C6C(bgConfig, 6); + BgAffineReset(bgConfig, GF_BG_LYR_SUB_2); } break; - case 7: - if (bgConfig->bgs[7].mode == 0) + case GF_BG_LYR_SUB_3: + if (bgConfig->bgs[GF_BG_LYR_SUB_3].mode == 0) { G2S_SetBG3Offset(x, y); } else { - FUN_02017C6C(bgConfig, 7); + BgAffineReset(bgConfig, GF_BG_LYR_SUB_3); } break; } } -THUMB_FUNC fx32 FUN_02017B48(struct BgConfig *param0, u32 param1) +THUMB_FUNC fx32 Bg_GetXpos(struct BgConfig *bgConfig, u32 bgId) { - return param0->bgs[param1].hOffset; + return bgConfig->bgs[bgId].hOffset; } -THUMB_FUNC fx32 FUN_02017B54(struct BgConfig *param0, u32 param1) +THUMB_FUNC fx32 Bg_GetYpos(struct BgConfig *bgConfig, u32 bgId) { - return param0->bgs[param1].vOffset; + return bgConfig->bgs[bgId].vOffset; } -THUMB_FUNC void FUN_02017B60(struct BgConfig *param0, - u32 param1, - u32 param2, - fx32 param3, - struct Mtx22 *param4, - fx32 param5, - fx32 param6) +THUMB_FUNC void Bg_SetTextDimAndAffineParams(struct BgConfig *bgConfig, + u32 bgId, + u32 txOp, + fx32 txVal, + struct Mtx22 *mtx, + fx32 centerX, + fx32 centerY) { - Bg_SetPosText(¶m0->bgs[param1], param2, param3); - FUN_02017BD0(param0, param1, param4, param5, param6); + Bg_SetPosText(&bgConfig->bgs[bgId], txOp, txVal); + SetBgAffine(bgConfig, bgId, mtx, centerX, centerY); } THUMB_FUNC void Bg_SetPosText(struct Bg *bg, u32 op, fx32 val) { switch (op) { - case 0: + case BG_POS_OP_SET_X: bg->hOffset = val; break; - case 1: + case BG_POS_OP_ADD_X: bg->hOffset += val; break; - case 2: + case BG_POS_OP_SUB_X: bg->hOffset -= val; break; - case 3: + case BG_POS_OP_SET_Y: bg->vOffset = val; break; - case 4: + case BG_POS_OP_ADD_Y: bg->vOffset += val; break; - case 5: + case BG_POS_OP_SUB_Y: bg->vOffset -= val; break; } } -THUMB_FUNC void FUN_02017BD0( - struct BgConfig *param0, u32 param1, struct Mtx22 *param2, fx32 param3, fx32 param4) +THUMB_FUNC void SetBgAffine( + struct BgConfig *bgConfig, u32 bgId, struct Mtx22 *mtx, fx32 centerX, fx32 centerY) { - switch (param1) + switch (bgId) { - case 2: - G2_SetBG2Affine(param2, param3, param4, param0->bgs[param1].hOffset, param0->bgs[param1].vOffset); + case GF_BG_LYR_MAIN_2: + G2_SetBG2Affine(mtx, centerX, centerY, bgConfig->bgs[bgId].hOffset, bgConfig->bgs[bgId].vOffset); break; - case 3: - G2_SetBG3Affine(param2, param3, param4, param0->bgs[param1].hOffset, param0->bgs[param1].vOffset); + case GF_BG_LYR_MAIN_3: + G2_SetBG3Affine(mtx, centerX, centerY, bgConfig->bgs[bgId].hOffset, bgConfig->bgs[bgId].vOffset); break; - case 6: - G2S_SetBG2Affine(param2, param3, param4, param0->bgs[param1].hOffset, param0->bgs[param1].vOffset); + case GF_BG_LYR_SUB_2: + G2S_SetBG2Affine(mtx, centerX, centerY, bgConfig->bgs[bgId].hOffset, bgConfig->bgs[bgId].vOffset); break; - case 7: - G2S_SetBG3Affine(param2, param3, param4, param0->bgs[param1].hOffset, param0->bgs[param1].vOffset); + case GF_BG_LYR_SUB_3: + G2S_SetBG3Affine(mtx, centerX, centerY, bgConfig->bgs[bgId].hOffset, bgConfig->bgs[bgId].vOffset); break; } } -THUMB_FUNC void FUN_02017C6C(struct BgConfig *param0, u32 param1) +THUMB_FUNC void BgAffineReset(struct BgConfig *bgConfig, u32 bgId) { struct Mtx22 mtx; - MTX22_2DAffine(&mtx, 0, 0x1000, 0x1000, 0); - FUN_02017BD0(param0, param1, &mtx, 0, 0); + MTX22_2DAffine(&mtx, 0, FX32_ONE, FX32_ONE, 0); + SetBgAffine(bgConfig, bgId, &mtx, 0, 0); } -THUMB_FUNC void FUN_02017C98(const void *param0, void *param1, u32 param2) +THUMB_FUNC void CopyOrUncompressTilemapData(const void *src, void *dest, u32 size) { - if (param2 == 0) + if (size == 0) { - MI_UncompressLZ8(param0, param1); + MI_UncompressLZ8(src, dest); return; } - if (((u32)param0 % 4) == 0 && ((u32)param1 % 4) == 0 && ((u16)param2 % 4) == 0) + if (((u32)src % 4) == 0 && ((u32)dest % 4) == 0 && ((u16)size % 4) == 0) { - MI_CpuCopy32(param0, param1, param2); + MI_CpuCopy32(src, dest, size); return; } - MI_CpuCopy16(param0, param1, param2); + MI_CpuCopy16(src, dest, size); } -THUMB_FUNC void FUN_02017CD0(struct BgConfig *param0, u32 param1) +THUMB_FUNC void BgCommitTilemapBufferToVram(struct BgConfig *bgConfig, u32 bgId) { - FUN_02017CE8(param0, - param1, - param0->bgs[param1].tilemapBuffer, - param0->bgs[param1].bufferSize, - param0->bgs[param1].unk10); + BgCopyOrUncompressTilemapBufferRangeToVram(bgConfig, + bgId, + bgConfig->bgs[bgId].tilemapBuffer, + bgConfig->bgs[bgId].bufferSize, + bgConfig->bgs[bgId].baseTile); } -THUMB_FUNC void FUN_02017CE8( - struct BgConfig *param0, u32 param1, u32 *param2, u32 param3, u32 param4) +THUMB_FUNC void BgCopyOrUncompressTilemapBufferRangeToVram( + struct BgConfig *bgConfig, u32 bgId, u32 *src, u32 size, u32 tileOffset) { - u32 st0 = param3; - if (param3 == 0) + if (size == 0) { - void *st4 = param0->bgs[param1].tilemapBuffer; - if (st4 != 0) + void *tilemapBuffer = bgConfig->bgs[bgId].tilemapBuffer; + if (tilemapBuffer != 0) { - FUN_02017C98(param2, st4, param3); - LoadBgVramScr(param1, st4, param0->bgs[param1].unk10 * 2, param0->bgs[param1].bufferSize); + CopyOrUncompressTilemapData(src, tilemapBuffer, size); + LoadBgVramScr(bgId, tilemapBuffer, bgConfig->bgs[bgId].baseTile * 2, bgConfig->bgs[bgId].bufferSize); return; } - u32 r7 = param2[0] >> 8; - void *ptr = AllocFromHeapAtEnd(param0->heap_id, r7); - FUN_02017C98(param2, ptr, st0); - LoadBgVramScr(param1, ptr, param4 * 2, r7); + u32 uncompSize = src[0] >> 8; + void *ptr = AllocFromHeapAtEnd(bgConfig->heap_id, uncompSize); + CopyOrUncompressTilemapData(src, ptr, size); + LoadBgVramScr(bgId, ptr, tileOffset * 2, uncompSize); FreeToHeap(ptr); return; } - LoadBgVramScr(param1, param2, param4 * 2, param3); + LoadBgVramScr(bgId, src, tileOffset * 2, size); } THUMB_FUNC void LoadBgVramScr(u32 bgId, void *buffer_p, u32 offset, u32 size) @@ -885,10 +884,10 @@ THUMB_FUNC void LoadBgVramScr(u32 bgId, void *buffer_p, u32 offset, u32 size) } } -THUMB_FUNC void FUN_02017DFC( - struct BgConfig *param0, u32 param1, void *param2, u32 param3) +THUMB_FUNC void BG_LoadScreenTilemapData( + struct BgConfig *bgConfig, u32 bgId, void *src, u32 numTiles) { - FUN_02017C98(param2, param0->bgs[param1].tilemapBuffer, param3); + CopyOrUncompressTilemapData(src, bgConfig->bgs[bgId].tilemapBuffer, numTiles); } THUMB_FUNC void BG_LoadCharTilesData( @@ -910,7 +909,7 @@ THUMB_FUNC void BG_LoadCharPixelData( u32 uncompressedSize = charData[0] >> 8; void *ptr = AllocFromHeapAtEnd(bgConfig->heap_id, uncompressedSize); - FUN_02017C98(charData, ptr, size); + CopyOrUncompressTilemapData(charData, ptr, size); LoadBgVramChar(bgId, ptr, offset, uncompressedSize); FreeToHeap(ptr); return; @@ -925,28 +924,28 @@ THUMB_FUNC void LoadBgVramChar(u32 bgId, void *buffer_p, u32 offset, u32 size) switch (bgId) { - case 0: + case GF_BG_LYR_MAIN_0: GX_LoadBG0Char(buffer_p, offset, size); break; - case 1: + case GF_BG_LYR_MAIN_1: GX_LoadBG1Char(buffer_p, offset, size); break; - case 2: + case GF_BG_LYR_MAIN_2: GX_LoadBG2Char(buffer_p, offset, size); break; - case 3: + case GF_BG_LYR_MAIN_3: GX_LoadBG3Char(buffer_p, offset, size); break; - case 4: + case GF_BG_LYR_SUB_0: GXS_LoadBG0Char(buffer_p, offset, size); break; - case 5: + case GF_BG_LYR_SUB_1: GXS_LoadBG1Char(buffer_p, offset, size); break; - case 6: + case GF_BG_LYR_SUB_2: GXS_LoadBG2Char(buffer_p, offset, size); break; - case 7: + case GF_BG_LYR_SUB_3: GXS_LoadBG3Char(buffer_p, offset, size); break; } @@ -988,7 +987,7 @@ THUMB_FUNC void BG_FillCharDataRange( THUMB_FUNC void BG_LoadPlttData(u32 bgId, void *plttData, u32 size, u32 offset) { DC_FlushRange(plttData, size); - if (bgId < 4) + if (bgId < GF_BG_LYR_MAIN_CNT) { GX_LoadBGPltt(plttData, offset, size); return; @@ -1006,18 +1005,18 @@ THUMB_FUNC u16 GetTileMapIndexFromCoords(u8 x, u8 y, u8 screenSize) { switch (screenSize) { - case 0: + case GF_BG_SCR_SIZE_128x128: return (u16)(x + (y << 4)); - case 1: - case 2: + case GF_BG_SCR_SIZE_256x256: + case GF_BG_SCR_SIZE_256x512: return (u16)(x + (y << 5)); - case 3: + case GF_BG_SCR_SIZE_512x256: return (u16)((x & 0x1f) + ((y + (x & ~0x1f)) << 5)); - case 4: + case GF_BG_SCR_SIZE_512x512: u16 res = (u16)(((u16)((x >> 5) + (y >> 5) * 2)) << 10); res += (x & 0x1f) + ((y & 0x1f) << 5); return res; - case 5: + case GF_BG_SCR_SIZE_1024x1024: return 0; } @@ -1511,82 +1510,82 @@ THUMB_FUNC void BgTilemapRectChangePalette(struct BgConfig *bgConfig, } } -THUMB_FUNC void FUN_02018744(struct BgConfig *param0, u32 param1) +THUMB_FUNC void BgClearTilemapBufferAndCommit(struct BgConfig *bgConfig, u32 bgId) { - if (param0->bgs[param1].tilemapBuffer != NULL) + if (bgConfig->bgs[bgId].tilemapBuffer != NULL) { - MI_CpuClear16(param0->bgs[param1].tilemapBuffer, param0->bgs[param1].bufferSize); - FUN_02017CD0(param0, param1); + MI_CpuClear16(bgConfig->bgs[bgId].tilemapBuffer, bgConfig->bgs[bgId].bufferSize); + BgCommitTilemapBufferToVram(bgConfig, bgId); } } -THUMB_FUNC void FUN_02018768(struct BgConfig *param0, u32 param1, u16 param2) +THUMB_FUNC void BgFillTilemapBufferAndCommit(struct BgConfig *bgConfig, u32 bgId, u16 fillValue) { - if (param0->bgs[param1].tilemapBuffer != NULL) + if (bgConfig->bgs[bgId].tilemapBuffer != NULL) { - MI_CpuFill16(param0->bgs[param1].tilemapBuffer, param2, param0->bgs[param1].bufferSize); - FUN_02017CD0(param0, param1); + MI_CpuFill16(bgConfig->bgs[bgId].tilemapBuffer, fillValue, bgConfig->bgs[bgId].bufferSize); + BgCommitTilemapBufferToVram(bgConfig, bgId); } } -THUMB_FUNC void FUN_0201878C(struct BgConfig *param0, u32 param1, u16 param2) +THUMB_FUNC void BgFillTilemapBufferAndSchedule(struct BgConfig *bgConfig, u32 bgId, u16 fillValue) { - if (param0->bgs[param1].tilemapBuffer != NULL) + if (bgConfig->bgs[bgId].tilemapBuffer != NULL) { - MI_CpuFill16(param0->bgs[param1].tilemapBuffer, param2, param0->bgs[param1].bufferSize); - ScheduleBgTilemapBufferTransfer(param0, param1); + MI_CpuFill16(bgConfig->bgs[bgId].tilemapBuffer, fillValue, bgConfig->bgs[bgId].bufferSize); + ScheduleBgTilemapBufferTransfer(bgConfig, bgId); } } -THUMB_FUNC void *FUN_020187B0(u32 param0) +THUMB_FUNC void *BgGetCharPtr(u32 bgId) { - switch (param0) + switch (bgId) { - case 0: + case GF_BG_LYR_MAIN_0: return G2_GetBG0CharPtr(); - case 1: + case GF_BG_LYR_MAIN_1: return G2_GetBG1CharPtr(); - case 2: + case GF_BG_LYR_MAIN_2: return G2_GetBG2CharPtr(); - case 3: + case GF_BG_LYR_MAIN_3: return G2_GetBG3CharPtr(); - case 4: + case GF_BG_LYR_SUB_0: return G2S_GetBG0CharPtr(); - case 5: + case GF_BG_LYR_SUB_1: return G2S_GetBG1CharPtr(); - case 6: + case GF_BG_LYR_SUB_2: return G2S_GetBG2CharPtr(); - case 7: + case GF_BG_LYR_SUB_3: return G2S_GetBG3CharPtr(); } return NULL; } -THUMB_FUNC void FUN_02018808(u8 *param0, u32 param1, u8 (*param2)[2], u8 param3) +THUMB_FUNC void Convert4bppTo8bppInternal(u8 *src4bpp, u32 size, u8 (*dest8bpp), u8 paletteNum) { - param3 <<= 4; - for (int i = 0; i < param1; i++) + paletteNum <<= 4; + for (u32 i = 0; i < size; i++) { - param2[i][0] = (u8)(param0[i] & 0xf); - if (param2[i][0] != 0) + dest8bpp[i * 2 + 0] = (u8)(src4bpp[i] & 0xf); + if (dest8bpp[i * 2 + 0] != 0) { - param2[i][0] += param3; + dest8bpp[i * 2 + 0] += paletteNum; } - param2[i][1] = (u8)((param0[i] >> 4) & 0xf); - if (param2[i][1] != 0) + dest8bpp[i * 2 + 1] = (u8)((src4bpp[i] >> 4) & 0xf); + if (dest8bpp[i * 2 + 1] != 0) { - param2[i][1] += param3; + dest8bpp[i * 2 + 1] += paletteNum; } } } -THUMB_FUNC u8 (*FUN_02018848(u8 *param0, u32 param1, u8 param2, u32 heap_id))[2] +THUMB_FUNC u8 *Convert4bppTo8bpp(u8 *src4Bpp, u32 size, u8 paletteNum, u32 heap_id) { - u8(*ptr)[2] = (u8(*)[2])AllocFromHeap(heap_id, param1 * 2); + u8 *ptr = (u8*)AllocFromHeap(heap_id, size * 2); - FUN_02018808(param0, param1, ptr, param2); + Convert4bppTo8bppInternal(src4Bpp, size, ptr, paletteNum); return ptr; } @@ -1596,70 +1595,70 @@ THUMB_FUNC void *GetBgTilemapBuffer(struct BgConfig *bgConfig, u8 bgId) return bgConfig->bgs[bgId].tilemapBuffer; } -THUMB_FUNC u16 FUN_02018878(struct BgConfig *param0, u32 param1) +THUMB_FUNC u16 GetBgAffineRotation(struct BgConfig *bgConfig, u32 bgId) { - return param0->bgs[param1].rotation; + return bgConfig->bgs[bgId].rotation; } THUMB_FUNC u8 GetBgPriority(struct BgConfig *bgConfig, u32 bgId) { switch (bgId) { - case 0: + case GF_BG_LYR_MAIN_0: return G2_GetBG0Control().priority; - case 1: + case GF_BG_LYR_MAIN_1: return G2_GetBG1Control().priority; - case 2: + case GF_BG_LYR_MAIN_2: switch (bgConfig->bgs[bgId].mode) { default: - case 0: + case GF_BG_TYPE_TEXT: return G2_GetBG2ControlText().priority; - case 1: + case GF_BG_TYPE_AFFINE: return G2_GetBG2ControlAffine().priority; - case 2: + case GF_BG_TYPE_256x16PLTT: return G2_GetBG2Control256x16Pltt().priority; } break; - case 3: + case GF_BG_LYR_MAIN_3: switch (bgConfig->bgs[bgId].mode) { default: - case 0: + case GF_BG_TYPE_TEXT: return G2_GetBG3ControlText().priority; - case 1: + case GF_BG_TYPE_AFFINE: return G2_GetBG3ControlAffine().priority; - case 2: + case GF_BG_TYPE_256x16PLTT: return G2_GetBG3Control256x16Pltt().priority; } break; - case 4: + case GF_BG_LYR_SUB_0: return G2S_GetBG0Control().priority; - case 5: + case GF_BG_LYR_SUB_1: return G2S_GetBG1Control().priority; - case 6: + case GF_BG_LYR_SUB_2: switch (bgConfig->bgs[bgId].mode) { default: - case 0: + case GF_BG_TYPE_TEXT: return G2S_GetBG2ControlText().priority; - case 1: + case GF_BG_TYPE_AFFINE: return G2S_GetBG2ControlAffine().priority; - case 2: + case GF_BG_TYPE_256x16PLTT: return G2S_GetBG2Control256x16Pltt().priority; } break; - case 7: + case GF_BG_LYR_SUB_3: switch (bgConfig->bgs[bgId].mode) { default: - case 0: + case GF_BG_TYPE_TEXT: return G2S_GetBG3ControlText().priority; - case 1: + case GF_BG_TYPE_AFFINE: return G2S_GetBG3ControlAffine().priority; - case 2: + case GF_BG_TYPE_256x16PLTT: return G2S_GetBG3Control256x16Pltt().priority; } break; @@ -2028,15 +2027,15 @@ THUMB_FUNC void CopyWindowToVram(struct Window *window) sCopyWindowToVramFuncs[window->bgConfig->bgs[window->bgId].mode](window); } -THUMB_FUNC void FUN_02019220(struct Window *window) +THUMB_FUNC void ScheduleWindowCopyToVram(struct Window *window) { GF_ASSERT(window); GF_ASSERT(window->bgConfig); GF_ASSERT(window->bgId < NELEMS(window->bgConfig->bgs)); - GF_ASSERT(window->bgConfig->bgs[window->bgId].mode < NELEMS(UNK_020EDB5C)); + GF_ASSERT(window->bgConfig->bgs[window->bgId].mode < NELEMS(sScheduleWindowCopyToVramFuncs)); - UNK_020EDB5C[window->bgConfig->bgs[window->bgId].mode](window); + sScheduleWindowCopyToVramFuncs[window->bgConfig->bgs[window->bgId].mode](window); } THUMB_FUNC void PutWindowTilemap(struct Window *window) @@ -2057,9 +2056,9 @@ THUMB_FUNC void PutWindowTilemapRectAnchoredTopLeft(struct Window *window, u8 wi window->height = heightBak; } -THUMB_FUNC void FUN_020192B8(struct Window *window) +THUMB_FUNC void ClearWindowTilemap(struct Window *window) { - UNK_020EDB74[window->bgConfig->bgs[window->bgId].mode](window); + sClearWindowTilemapFuncs[window->bgConfig->bgs[window->bgId].mode](window); } THUMB_FUNC void PutWindowTilemap_TextMode(struct Window *param0) @@ -2103,7 +2102,7 @@ THUMB_FUNC void PutWindowTilemap_AffineMode(struct Window *window) return; } - tilemapWidth = UNK_020EDB30[window->bgConfig->bgs[window->bgId].size]; + tilemapWidth = sTilemapWidthByBufferSize[window->bgConfig->bgs[window->bgId].size]; dst = window->bgConfig->bgs[window->bgId].tilemapBuffer + window->tilemapTop * tilemapWidth + window->tilemapLeft; tileId = window->baseTile; @@ -2135,7 +2134,7 @@ THUMB_FUNC void ClearWindowTilemapText(struct Window *window) } dst = window->bgConfig->bgs[window->bgId].tilemapBuffer; - tilemapWidth = UNK_020EDB30[window->bgConfig->bgs[window->bgId].size]; + tilemapWidth = sTilemapWidthByBufferSize[window->bgConfig->bgs[window->bgId].size]; xEnd = (u32)(window->tilemapLeft + window->width); yEnd = (u32)(window->tilemapTop + window->height); @@ -2161,7 +2160,7 @@ THUMB_FUNC void ClearWindowTilemapAffine(struct Window *window) return; } - tilemapWidth = UNK_020EDB30[window->bgConfig->bgs[window->bgId].size]; + tilemapWidth = sTilemapWidthByBufferSize[window->bgConfig->bgs[window->bgId].size]; dstPos = window->bgConfig->bgs[window->bgId].tilemapBuffer + window->tilemapTop * tilemapWidth + window->tilemapLeft; for (i = 0; i < window->height; i++) @@ -2177,29 +2176,29 @@ THUMB_FUNC void ClearWindowTilemapAffine(struct Window *window) THUMB_FUNC void CopyWindowToVram_TextMode(struct Window *window) { PutWindowTilemap_TextMode(window); - FUN_02019548(window); - FUN_02017CE8(window->bgConfig, - window->bgId, - window->bgConfig->bgs[window->bgId].tilemapBuffer, - window->bgConfig->bgs[window->bgId].bufferSize, - window->bgConfig->bgs[window->bgId].unk10); + CopyWindowPixelsToVram_TextMode(window); + BgCopyOrUncompressTilemapBufferRangeToVram(window->bgConfig, + window->bgId, + window->bgConfig->bgs[window->bgId].tilemapBuffer, + window->bgConfig->bgs[window->bgId].bufferSize, + window->bgConfig->bgs[window->bgId].baseTile); } -THUMB_FUNC void FUN_020194C8(struct Window *window) +THUMB_FUNC void ScheduleWindowCopyToVram_TextMode(struct Window *window) { PutWindowTilemap_TextMode(window); ScheduleBgTilemapBufferTransfer(window->bgConfig, window->bgId); - FUN_02019548(window); + CopyWindowPixelsToVram_TextMode(window); } THUMB_FUNC void CopyWindowToVram_AffineMode(struct Window *window) { PutWindowTilemap_AffineMode(window); - FUN_02017CE8(window->bgConfig, - window->bgId, - window->bgConfig->bgs[window->bgId].tilemapBuffer, - window->bgConfig->bgs[window->bgId].bufferSize, - window->bgConfig->bgs[window->bgId].unk10); + BgCopyOrUncompressTilemapBufferRangeToVram(window->bgConfig, + window->bgId, + window->bgConfig->bgs[window->bgId].tilemapBuffer, + window->bgConfig->bgs[window->bgId].bufferSize, + window->bgConfig->bgs[window->bgId].baseTile); BG_LoadCharTilesData(window->bgConfig, window->bgId, @@ -2208,7 +2207,7 @@ THUMB_FUNC void CopyWindowToVram_AffineMode(struct Window *window) window->baseTile); } -THUMB_FUNC void FUN_0201951C(struct Window *window) +THUMB_FUNC void ScheduleWindowCopyToVram_AffineMode(struct Window *window) { PutWindowTilemap_AffineMode(window); ScheduleBgTilemapBufferTransfer(window->bgConfig, window->bgId); @@ -2219,7 +2218,7 @@ THUMB_FUNC void FUN_0201951C(struct Window *window) window->baseTile); } -THUMB_FUNC void FUN_02019548(struct Window *window) +THUMB_FUNC void CopyWindowPixelsToVram_TextMode(struct Window *window) { BG_LoadCharTilesData(window->bgConfig, window->bgId, @@ -2228,43 +2227,43 @@ THUMB_FUNC void FUN_02019548(struct Window *window) window->baseTile); } -THUMB_FUNC void FUN_02019570(struct Window *window) +THUMB_FUNC void ClearWindowTilemapAndCopyToVram(struct Window *window) { - UNK_020EDB50[window->bgConfig->bgs[window->bgId].mode](window); + sClearWindowTilemapAndCopyToVramFuncs[window->bgConfig->bgs[window->bgId].mode](window); } -THUMB_FUNC void FUN_0201958C(struct Window *window) +THUMB_FUNC void ClearWindowTilemapAndScheduleTransfer(struct Window *window) { - UNK_020EDB44[window->bgConfig->bgs[window->bgId].mode](window); + sClearWindowTilemapAndScheduleTransferFuncs[window->bgConfig->bgs[window->bgId].mode](window); } -THUMB_FUNC void FUN_020195A8(struct Window *window) +THUMB_FUNC void ClearWindowTilemapAndCopyToVram_TextMode(struct Window *window) { ClearWindowTilemapText(window); - FUN_02017CE8(window->bgConfig, - window->bgId, - window->bgConfig->bgs[window->bgId].tilemapBuffer, - window->bgConfig->bgs[window->bgId].bufferSize, - window->bgConfig->bgs[window->bgId].unk10); + BgCopyOrUncompressTilemapBufferRangeToVram(window->bgConfig, + window->bgId, + window->bgConfig->bgs[window->bgId].tilemapBuffer, + window->bgConfig->bgs[window->bgId].bufferSize, + window->bgConfig->bgs[window->bgId].baseTile); } -THUMB_FUNC void FUN_020195D0(struct Window *window) +THUMB_FUNC void ClearWindowTilemapAndScheduleTransfer_TextMode(struct Window *window) { ClearWindowTilemapText(window); ScheduleBgTilemapBufferTransfer(window->bgConfig, window->bgId); } -THUMB_FUNC void FUN_020195E4(struct Window *window) +THUMB_FUNC void ClearWindowTilemapAndCopyToVram_AffineMode(struct Window *window) { ClearWindowTilemapAffine(window); - FUN_02017CE8(window->bgConfig, - window->bgId, - window->bgConfig->bgs[window->bgId].tilemapBuffer, - window->bgConfig->bgs[window->bgId].bufferSize, - window->bgConfig->bgs[window->bgId].unk10); + BgCopyOrUncompressTilemapBufferRangeToVram(window->bgConfig, + window->bgId, + window->bgConfig->bgs[window->bgId].tilemapBuffer, + window->bgConfig->bgs[window->bgId].bufferSize, + window->bgConfig->bgs[window->bgId].baseTile); } -THUMB_FUNC void FUN_0201960C(struct Window *window) +THUMB_FUNC void ClearWindowTilemapAndScheduleTransfer_AffineMode(struct Window *window) { ClearWindowTilemapAffine(window); ScheduleBgTilemapBufferTransfer(window->bgConfig, window->bgId); @@ -3869,7 +3868,7 @@ _0201A12C: // 0x0201A12C ldr r0, [sp, #0x0] ldr r3, [r3, #0x0] lsl r1, r1, #0x3 - bl FUN_02018848 + bl Convert4bppTo8bpp str r0, [sp, #0x1ec] cmp r4, #0x3 bhi _0201A21E @@ -5144,44 +5143,44 @@ THUMB_FUNC void DoScheduledBgGpuUpdates(struct BgConfig *bgConfig) THUMB_FUNC void DoScheduledBgTilemapBufferTransfers(struct BgConfig *bgConfig) { - if ((bgConfig->bufferTransferScheduled & 1) != 0) + if ((bgConfig->bufferTransferScheduled & (1 << GF_BG_LYR_MAIN_0)) != 0) { - LoadBgVramScr(0, bgConfig->bgs[0].tilemapBuffer, bgConfig->bgs[0].unk10 * 2, bgConfig->bgs[0].bufferSize); + LoadBgVramScr(GF_BG_LYR_MAIN_0, bgConfig->bgs[GF_BG_LYR_MAIN_0].tilemapBuffer, bgConfig->bgs[GF_BG_LYR_MAIN_0].baseTile * 2, bgConfig->bgs[GF_BG_LYR_MAIN_0].bufferSize); } - if ((bgConfig->bufferTransferScheduled & 2) != 0) + if ((bgConfig->bufferTransferScheduled & (1 << GF_BG_LYR_MAIN_1)) != 0) { - LoadBgVramScr(1, bgConfig->bgs[1].tilemapBuffer, bgConfig->bgs[1].unk10 * 2, bgConfig->bgs[1].bufferSize); + LoadBgVramScr(GF_BG_LYR_MAIN_1, bgConfig->bgs[GF_BG_LYR_MAIN_1].tilemapBuffer, bgConfig->bgs[GF_BG_LYR_MAIN_1].baseTile * 2, bgConfig->bgs[GF_BG_LYR_MAIN_1].bufferSize); } - if ((bgConfig->bufferTransferScheduled & 4) != 0) + if ((bgConfig->bufferTransferScheduled & (1 << GF_BG_LYR_MAIN_2)) != 0) { - LoadBgVramScr(2, bgConfig->bgs[2].tilemapBuffer, bgConfig->bgs[2].unk10 * 2, bgConfig->bgs[2].bufferSize); + LoadBgVramScr(GF_BG_LYR_MAIN_2, bgConfig->bgs[GF_BG_LYR_MAIN_2].tilemapBuffer, bgConfig->bgs[GF_BG_LYR_MAIN_2].baseTile * 2, bgConfig->bgs[GF_BG_LYR_MAIN_2].bufferSize); } - if ((bgConfig->bufferTransferScheduled & 8) != 0) + if ((bgConfig->bufferTransferScheduled & (1 << GF_BG_LYR_MAIN_3)) != 0) { - LoadBgVramScr(3, bgConfig->bgs[3].tilemapBuffer, bgConfig->bgs[3].unk10 * 2, bgConfig->bgs[3].bufferSize); + LoadBgVramScr(GF_BG_LYR_MAIN_3, bgConfig->bgs[GF_BG_LYR_MAIN_3].tilemapBuffer, bgConfig->bgs[GF_BG_LYR_MAIN_3].baseTile * 2, bgConfig->bgs[GF_BG_LYR_MAIN_3].bufferSize); } - if ((bgConfig->bufferTransferScheduled & 0x10) != 0) + if ((bgConfig->bufferTransferScheduled & (1 << GF_BG_LYR_SUB_0)) != 0) { - LoadBgVramScr(4, bgConfig->bgs[4].tilemapBuffer, bgConfig->bgs[4].unk10 * 2, bgConfig->bgs[4].bufferSize); + LoadBgVramScr(GF_BG_LYR_SUB_0, bgConfig->bgs[GF_BG_LYR_SUB_0].tilemapBuffer, bgConfig->bgs[GF_BG_LYR_SUB_0].baseTile * 2, bgConfig->bgs[GF_BG_LYR_SUB_0].bufferSize); } - if ((bgConfig->bufferTransferScheduled & 0x20) != 0) + if ((bgConfig->bufferTransferScheduled & (1 << GF_BG_LYR_SUB_1)) != 0) { - LoadBgVramScr(5, bgConfig->bgs[5].tilemapBuffer, bgConfig->bgs[5].unk10 * 2, bgConfig->bgs[5].bufferSize); + LoadBgVramScr(GF_BG_LYR_SUB_1, bgConfig->bgs[GF_BG_LYR_SUB_1].tilemapBuffer, bgConfig->bgs[GF_BG_LYR_SUB_1].baseTile * 2, bgConfig->bgs[GF_BG_LYR_SUB_1].bufferSize); } - if ((bgConfig->bufferTransferScheduled & 0x40) != 0) + if ((bgConfig->bufferTransferScheduled & (1 << GF_BG_LYR_SUB_2)) != 0) { - LoadBgVramScr(6, bgConfig->bgs[6].tilemapBuffer, bgConfig->bgs[6].unk10 * 2, bgConfig->bgs[6].bufferSize); + LoadBgVramScr(GF_BG_LYR_SUB_2, bgConfig->bgs[GF_BG_LYR_SUB_2].tilemapBuffer, bgConfig->bgs[GF_BG_LYR_SUB_2].baseTile * 2, bgConfig->bgs[GF_BG_LYR_SUB_2].bufferSize); } - if ((bgConfig->bufferTransferScheduled & 0x80) != 0) + if ((bgConfig->bufferTransferScheduled & (1 << GF_BG_LYR_SUB_3)) != 0) { - LoadBgVramScr(7, bgConfig->bgs[7].tilemapBuffer, bgConfig->bgs[7].unk10 * 2, bgConfig->bgs[7].bufferSize); + LoadBgVramScr(GF_BG_LYR_SUB_3, bgConfig->bgs[GF_BG_LYR_SUB_3].tilemapBuffer, bgConfig->bgs[GF_BG_LYR_SUB_3].baseTile * 2, bgConfig->bgs[GF_BG_LYR_SUB_3].bufferSize); } } @@ -5192,103 +5191,103 @@ THUMB_FUNC void ScheduleBgTilemapBufferTransfer(struct BgConfig *bgConfig, u32 b THUMB_FUNC void ApplyScheduledBgPosUpdate(struct BgConfig *bgConfig) { - if ((bgConfig->scrollScheduled & 1) != 0) + if ((bgConfig->scrollScheduled & (1 << GF_BG_LYR_MAIN_0)) != 0) { - G2_SetBG0Offset(bgConfig->bgs[0].hOffset, bgConfig->bgs[0].vOffset); + G2_SetBG0Offset(bgConfig->bgs[GF_BG_LYR_MAIN_0].hOffset, bgConfig->bgs[GF_BG_LYR_MAIN_0].vOffset); } - if ((bgConfig->scrollScheduled & 2) != 0) + if ((bgConfig->scrollScheduled & (1 << GF_BG_LYR_MAIN_1)) != 0) { - G2_SetBG1Offset(bgConfig->bgs[1].hOffset, bgConfig->bgs[1].vOffset); + G2_SetBG1Offset(bgConfig->bgs[GF_BG_LYR_MAIN_1].hOffset, bgConfig->bgs[GF_BG_LYR_MAIN_1].vOffset); } - if ((bgConfig->scrollScheduled & 4) != 0) + if ((bgConfig->scrollScheduled & (1 << GF_BG_LYR_MAIN_2)) != 0) { - if (bgConfig->bgs[2].mode == 0) + if (bgConfig->bgs[GF_BG_LYR_MAIN_2].mode == 0) { - G2_SetBG2Offset(bgConfig->bgs[2].hOffset, bgConfig->bgs[2].vOffset); + G2_SetBG2Offset(bgConfig->bgs[GF_BG_LYR_MAIN_2].hOffset, bgConfig->bgs[GF_BG_LYR_MAIN_2].vOffset); } else { struct Mtx22 st38; MTX22_2DAffine( - &st38, bgConfig->bgs[2].rotation, bgConfig->bgs[2].xScale, bgConfig->bgs[2].yScale, 2); + &st38, bgConfig->bgs[GF_BG_LYR_MAIN_2].rotation, bgConfig->bgs[GF_BG_LYR_MAIN_2].xScale, bgConfig->bgs[GF_BG_LYR_MAIN_2].yScale, 2); G2_SetBG2Affine( &st38, - bgConfig->bgs[2].centerX, - bgConfig->bgs[2].centerY, - bgConfig->bgs[2].hOffset, - bgConfig->bgs[2].vOffset); + bgConfig->bgs[GF_BG_LYR_MAIN_2].centerX, + bgConfig->bgs[GF_BG_LYR_MAIN_2].centerY, + bgConfig->bgs[GF_BG_LYR_MAIN_2].hOffset, + bgConfig->bgs[GF_BG_LYR_MAIN_2].vOffset); } } - if ((bgConfig->scrollScheduled & 8) != 0) + if ((bgConfig->scrollScheduled & (1 << GF_BG_LYR_MAIN_3)) != 0) { - if (bgConfig->bgs[3].mode == 0) + if (bgConfig->bgs[GF_BG_LYR_MAIN_3].mode == 0) { - G2_SetBG3Offset(bgConfig->bgs[3].hOffset, bgConfig->bgs[3].vOffset); + G2_SetBG3Offset(bgConfig->bgs[GF_BG_LYR_MAIN_3].hOffset, bgConfig->bgs[GF_BG_LYR_MAIN_3].vOffset); } else { struct Mtx22 st28; MTX22_2DAffine( - &st28, bgConfig->bgs[3].rotation, bgConfig->bgs[3].xScale, bgConfig->bgs[3].yScale, 2); + &st28, bgConfig->bgs[GF_BG_LYR_MAIN_3].rotation, bgConfig->bgs[GF_BG_LYR_MAIN_3].xScale, bgConfig->bgs[GF_BG_LYR_MAIN_3].yScale, 2); G2_SetBG3Affine( &st28, - bgConfig->bgs[3].centerX, - bgConfig->bgs[3].centerY, - bgConfig->bgs[3].hOffset, - bgConfig->bgs[3].vOffset); + bgConfig->bgs[GF_BG_LYR_MAIN_3].centerX, + bgConfig->bgs[GF_BG_LYR_MAIN_3].centerY, + bgConfig->bgs[GF_BG_LYR_MAIN_3].hOffset, + bgConfig->bgs[GF_BG_LYR_MAIN_3].vOffset); } } - if ((bgConfig->scrollScheduled & 0x10) != 0) + if ((bgConfig->scrollScheduled & (1 << GF_BG_LYR_SUB_0)) != 0) { - G2S_SetBG0Offset(bgConfig->bgs[4].hOffset, bgConfig->bgs[4].vOffset); + G2S_SetBG0Offset(bgConfig->bgs[GF_BG_LYR_SUB_0].hOffset, bgConfig->bgs[GF_BG_LYR_SUB_0].vOffset); } - if ((bgConfig->scrollScheduled & 0x20) != 0) + if ((bgConfig->scrollScheduled & (1 << GF_BG_LYR_SUB_1)) != 0) { - G2S_SetBG1Offset(bgConfig->bgs[5].hOffset, bgConfig->bgs[5].vOffset); + G2S_SetBG1Offset(bgConfig->bgs[GF_BG_LYR_SUB_1].hOffset, bgConfig->bgs[GF_BG_LYR_SUB_1].vOffset); } - if ((bgConfig->scrollScheduled & 0x40) != 0) + if ((bgConfig->scrollScheduled & (1 << GF_BG_LYR_SUB_2)) != 0) { - if (bgConfig->bgs[6].mode == 0) + if (bgConfig->bgs[GF_BG_LYR_SUB_2].mode == 0) { - G2S_SetBG2Offset(bgConfig->bgs[6].hOffset, bgConfig->bgs[6].vOffset); + G2S_SetBG2Offset(bgConfig->bgs[GF_BG_LYR_SUB_2].hOffset, bgConfig->bgs[GF_BG_LYR_SUB_2].vOffset); } else { struct Mtx22 st18; MTX22_2DAffine( - &st18, bgConfig->bgs[6].rotation, bgConfig->bgs[6].xScale, bgConfig->bgs[6].yScale, 2); + &st18, bgConfig->bgs[GF_BG_LYR_SUB_2].rotation, bgConfig->bgs[GF_BG_LYR_SUB_2].xScale, bgConfig->bgs[GF_BG_LYR_SUB_2].yScale, 2); G2S_SetBG2Affine( &st18, - bgConfig->bgs[6].centerX, - bgConfig->bgs[6].centerY, - bgConfig->bgs[6].hOffset, - bgConfig->bgs[6].vOffset); + bgConfig->bgs[GF_BG_LYR_SUB_2].centerX, + bgConfig->bgs[GF_BG_LYR_SUB_2].centerY, + bgConfig->bgs[GF_BG_LYR_SUB_2].hOffset, + bgConfig->bgs[GF_BG_LYR_SUB_2].vOffset); } } - if ((bgConfig->scrollScheduled & 0x80) != 0) + if ((bgConfig->scrollScheduled & (1 << GF_BG_LYR_SUB_3)) != 0) { - if (bgConfig->bgs[7].mode == 0) + if (bgConfig->bgs[GF_BG_LYR_SUB_3].mode == 0) { - G2S_SetBG3Offset(bgConfig->bgs[7].hOffset, bgConfig->bgs[7].vOffset); + G2S_SetBG3Offset(bgConfig->bgs[GF_BG_LYR_SUB_3].hOffset, bgConfig->bgs[GF_BG_LYR_SUB_3].vOffset); } else { struct Mtx22 st08; MTX22_2DAffine( - &st08, bgConfig->bgs[7].rotation, bgConfig->bgs[7].xScale, bgConfig->bgs[7].yScale, 2); + &st08, bgConfig->bgs[GF_BG_LYR_SUB_3].rotation, bgConfig->bgs[GF_BG_LYR_SUB_3].xScale, bgConfig->bgs[GF_BG_LYR_SUB_3].yScale, 2); G2S_SetBG3Affine( &st08, - bgConfig->bgs[7].centerX, - bgConfig->bgs[7].centerY, - bgConfig->bgs[7].hOffset, - bgConfig->bgs[7].vOffset); + bgConfig->bgs[GF_BG_LYR_SUB_3].centerX, + bgConfig->bgs[GF_BG_LYR_SUB_3].centerY, + bgConfig->bgs[GF_BG_LYR_SUB_3].hOffset, + bgConfig->bgs[GF_BG_LYR_SUB_3].vOffset); } } } @@ -5311,13 +5310,13 @@ THUMB_FUNC void Bg_SetAffineRotation(struct Bg *bg, u32 op, u16 val) { switch (op) { - case 0: + case BG_POS_OP_SET_ROT: bg->rotation = val; break; - case 1: + case BG_POS_OP_ADD_ROT: bg->rotation += val; break; - case 2: + case BG_POS_OP_SUB_ROT: bg->rotation -= val; break; } @@ -5334,35 +5333,35 @@ THUMB_FUNC void Bg_SetAffinePos(struct Bg *bg, u32 op, fx32 val) { switch (op) { - case 9: + case BG_POS_OP_SET_CENTERX: bg->centerX = val; break; - case 10: + case BG_POS_OP_ADD_CENTERX: bg->centerX += val; break; - case 11: + case BG_POS_OP_SUB_CENTERX: bg->centerX -= val; break; - case 12: + case BG_POS_OP_SET_CENTERY: bg->centerY = val; break; - case 13: + case BG_POS_OP_ADD_CENTERY: bg->centerY += val; break; - case 14: + case BG_POS_OP_SUB_CENTERY: bg->centerY -= val; break; } } -THUMB_FUNC u32 FUN_0201AFBC( +THUMB_FUNC u32 DoesPixelAtScreenXYMatchPtrVal( struct BgConfig *bgConfig, u8 bgId, u8 x, u8 y, u16 *src) { - void *st18; - u16 r6; - u8 st14; - u8 st10; - u8 r5; + void *bgCharPtr; + u16 tilemapIdx; + u8 xPixOffs; + u8 yPixOffs; + u8 pixelValue; u8 i; if (bgConfig->bgs[bgId].tilemapBuffer == NULL) @@ -5370,60 +5369,61 @@ THUMB_FUNC u32 FUN_0201AFBC( return 0; } - r6 = GetTileMapIndexFromCoords((u8) (x >> 3), (u8) (y >> 3), bgConfig->bgs[bgId].size); - st18 = FUN_020187B0(bgId); + tilemapIdx = GetTileMapIndexFromCoords((u8) (x >> 3), (u8) (y >> 3), bgConfig->bgs[bgId].size); + bgCharPtr = BgGetCharPtr(bgId); - st14 = (u8)(x & 7); - st10 = (u8)(y & 7); + xPixOffs = (u8)(x & 7); + yPixOffs = (u8)(y & 7); if (bgConfig->bgs[bgId].colorMode == 0) { - u16 *stc = bgConfig->bgs[bgId].tilemapBuffer; + u16 *tilemapBuffer = bgConfig->bgs[bgId].tilemapBuffer; u8 *ptr = AllocFromHeapAtEnd(bgConfig->heap_id, 0x40); - st18 += ((stc[r6] & 0x3ff) << 5); + bgCharPtr += ((tilemapBuffer[tilemapIdx] & 0x3ff) << 5); for (i = 0; i < 0x20; i++) { - ptr[(i << 1)] = (u8)(((u8 *)st18)[i] & 0xf); - ptr[(i << 1) + 1] = (u8)(((u8 *)st18)[i] >> 4); + ptr[(i << 1)] = (u8)(((u8 *)bgCharPtr)[i] & 0xf); + ptr[(i << 1) + 1] = (u8)(((u8 *)bgCharPtr)[i] >> 4); } - FUN_0201B118(bgConfig, (u8)((stc[r6] >> 0xa) & 3), ptr); + ApplyFlipFlagsToTile(bgConfig, (u8)((tilemapBuffer[tilemapIdx] >> 0xa) & 3), ptr); - r5 = ptr[st14 + (st10 << 3)]; + pixelValue = ptr[xPixOffs + (yPixOffs << 3)]; FreeToHeap(ptr); - if ((src[0] & (1 << r5)) != 0) + if ((src[0] & (1 << pixelValue)) != 0) { return 1; } } else { - if (bgConfig->bgs[bgId].mode != 1) + if (bgConfig->bgs[bgId].mode != GF_BG_TYPE_AFFINE) { - u16 *r4 = bgConfig->bgs[bgId].tilemapBuffer; + u16 *tilemapBuffer = bgConfig->bgs[bgId].tilemapBuffer; u8 *ptr = AllocFromHeapAtEnd(bgConfig->heap_id, 0x40); - memcpy(ptr, st18 + ((r4[r6] & 0x3ff) << 6), 0x40); + memcpy(ptr, bgCharPtr + ((tilemapBuffer[tilemapIdx] & 0x3ff) << 6), 0x40); - FUN_0201B118(bgConfig, (u8)((r4[r6] >> 0xa) & 3), ptr); + ApplyFlipFlagsToTile(bgConfig, (u8)((tilemapBuffer[tilemapIdx] >> 0xa) & 3), ptr); - r5 = ptr[st14 + (st10 << 3)]; + pixelValue = ptr[xPixOffs + (yPixOffs << 3)]; FreeToHeap(ptr); } else { - r5 = ((u8 *)st18)[(((u8 *)bgConfig->bgs[bgId].tilemapBuffer)[r6] << 6) + st14 + (st10 << 3)]; + pixelValue = ((u8 *)bgCharPtr)[(((u8 *)bgConfig->bgs[bgId].tilemapBuffer)[tilemapIdx] << 6) + xPixOffs + (yPixOffs << 3)]; } + // BUG: Infinite loop while (TRUE) { if (src[0] == 0xffff) { break; } - if (r5 == (u8)(src[0])) + if (pixelValue == (u8)(src[0])) { return 1; } @@ -5432,39 +5432,39 @@ THUMB_FUNC u32 FUN_0201AFBC( return 0; } -THUMB_FUNC void FUN_0201B118(struct BgConfig *param0, u8 param1, u8 *param2) +THUMB_FUNC void ApplyFlipFlagsToTile(struct BgConfig *bgConfig, u8 flag, u8 *src) { u8 i, j; - if (param1 != 0) + if (flag != 0) { - u8 *ptr = AllocFromHeapAtEnd(param0->heap_id, 0x40); + u8 *ptr = AllocFromHeapAtEnd(bgConfig->heap_id, 0x40); - if ((param1 & 1) != 0) + if ((flag & 1) != 0) { for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) { - ptr[i * 8 + j] = param2[i * 8 + (7 - j)]; + ptr[i * 8 + j] = src[i * 8 + (7 - j)]; } } - memcpy(param2, ptr, 0x40); + memcpy(src, ptr, 0x40); } - if ((param1 & 2) != 0) + if ((flag & 2) != 0) { for (i = 0; i < 8; i++) { u8 *r3 = &ptr[i * 8]; - u8 *r2 = ¶m2[(7 - i) * 8]; + u8 *r2 = &src[(7 - i) * 8]; for (u32 j = 8; j > 0; j--) { *r3++ = *r2++; } } - memcpy(param2, ptr, 0x40); + memcpy(src, ptr, 0x40); } FreeToHeap(ptr); diff --git a/arm9/src/error_message_reset.c b/arm9/src/error_message_reset.c index 128092eb..0c6ac0fe 100644 --- a/arm9/src/error_message_reset.c +++ b/arm9/src/error_message_reset.c @@ -3,7 +3,7 @@ #include "gx.h" #include "unk_02031734.h" #include "unk_0202F150.h" -#include "unk_02016B94.h" +#include "bg_window.h" #include "PAD_pad.h" @@ -75,11 +75,11 @@ THUMB_FUNC void PrintErrorMessageAndReset() reg_GXS_DB_DISPCNT &= ~(REG_GXS_DB_DISPCNT_OW_MASK | REG_GXS_DB_DISPCNT_W1_MASK | REG_GXS_DB_DISPCNT_W0_MASK); GX_SetBanks(&UNK_020FF4D8); - ptr = FUN_02016B94(0); - FUN_02016BBC(&UNK_020FF4AC); + ptr = BgConfig_Alloc(0); + SetBothScreensModesAndDisable(&UNK_020FF4AC); - FUN_02016C18(ptr, 0, &UNK_020FF4BC, 0); - FUN_02018744(ptr, 0); + InitBgFromTemplate(ptr, 0, &UNK_020FF4BC, 0); + BgClearTilemapBufferAndCommit(ptr, 0); FUN_0200CB00(ptr, 0, 503, 2, 0, 0); diff --git a/arm9/src/gf_gfx_loader.c b/arm9/src/gf_gfx_loader.c index eac7b417..1dc7f50e 100644 --- a/arm9/src/gf_gfx_loader.c +++ b/arm9/src/gf_gfx_loader.c @@ -31,8 +31,8 @@ THUMB_FUNC void GfGfxLoader_LoadScrnData(NarcId narcId, s32 memberNo, struct BgC if (szByte == 0)
szByte = pScreenData->szByte;
if (GetBgTilemapBuffer(unkStruct02016B94_2, (u8) a3) != NULL)
- FUN_02017DFC(unkStruct02016B94_2, (u8)a3, pScreenData->rawData, szByte);
- FUN_02017CE8(unkStruct02016B94_2, (u8)a3, pScreenData->rawData, szByte, a4);
+ BG_LoadScreenTilemapData(unkStruct02016B94_2, (u8) a3, pScreenData->rawData, szByte);
+ BgCopyOrUncompressTilemapBufferRangeToVram(unkStruct02016B94_2, (u8) a3, pScreenData->rawData, szByte, a4);
}
FreeToHeap(pFile);
}
diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index 34ae6e20..6287579c 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -4,7 +4,7 @@ #include "options.h" #include "player_data.h" #include "text.h" -#include "unk_02016B94.h" +#include "bg_window.h" extern void *FUN_02039438(struct UnkSavStruct80* arg, u32 id); extern void *CreateScriptContext(struct UnkSavStruct80* arg, u16 id); @@ -834,11 +834,11 @@ THUMB_FUNC static BOOL FUN_0203A6C8(struct ScriptContext* ctx) { if (*xdir == 0) { - FUN_020179E0(unk80->unk08, 3, 1, *xval); + BgSetPosTextAndCommit(unk80->unk08, 3, 1, *xval); } else { - FUN_020179E0(unk80->unk08, 3, 2, *xval); + BgSetPosTextAndCommit(unk80->unk08, 3, 2, *xval); } } @@ -846,11 +846,11 @@ THUMB_FUNC static BOOL FUN_0203A6C8(struct ScriptContext* ctx) { if (*ydir == 0) { - FUN_020179E0(unk80->unk08, 3, 4, *yval); + BgSetPosTextAndCommit(unk80->unk08, 3, 4, *yval); } else { - FUN_020179E0(unk80->unk08, 3, 5, *yval); + BgSetPosTextAndCommit(unk80->unk08, 3, 5, *yval); } } diff --git a/arm9/src/text_02054590.c b/arm9/src/text_02054590.c index bc779ad7..d4984f78 100644 --- a/arm9/src/text_02054590.c +++ b/arm9/src/text_02054590.c @@ -1,6 +1,6 @@ #include "text_02054590.h" #include "text.h" -#include "unk_02016B94.h" +#include "bg_window.h" extern void FUN_0201BD5C(void); extern void FUN_02002ED0(u32 param0, u32 param1, u32 param2); |