From e4634dde8e6412c5cb174def5091ee35d08b7536 Mon Sep 17 00:00:00 2001 From: Evan Chang Date: Wed, 29 Apr 2026 23:30:30 -0400 Subject: [PATCH] Window BG buffer names --- include/code_800558C.h | 13 +- src/code_800558C.c | 234 +++++------------------------------- src/debug_field_map.c | 6 +- src/dungeon_tilemap.c | 4 +- src/dungeon_vram.c | 2 +- src/friend_areas_map_util.c | 2 +- src/ground_main.c | 2 +- src/main.c | 2 +- src/main_loops.c | 4 +- src/other_menus1.c | 2 +- src/textbox.c | 2 +- src/world_map.c | 2 +- 12 files changed, 58 insertions(+), 217 deletions(-) diff --git a/include/code_800558C.h b/include/code_800558C.h index 4dfbdd65b..e8c40dbab 100644 --- a/include/code_800558C.h +++ b/include/code_800558C.h @@ -7,8 +7,17 @@ extern s16 gUnknown_2026E4E; extern s16 *gWindowBgCopy; -void sub_80057E8(void); -void CopyWindowBgBuffer(s32 *, u8 kind); +typedef enum CopyWindowBgBufferType { + COPY_WINDOW_BG_BUFFER_DEFAULT, + COPY_WINDOW_BG_BUFFER_DIM2, + COPY_WINDOW_BG_BUFFER_DIM1, + COPY_WINDOW_BG_BUFFER_UNK3, + COPY_WINDOW_BG_BUFFER_UNK4, + COPY_WINDOW_BG_BUFFER_UNK5, +} CopyWindowBgBufferType; + +void WindowBgBufferInit(void); +void CopyWindowBgBuffer(s32 *a0, u8 kind); void ToggleWindowBgBuffer(void); #endif // GUARD_CODE_800558C_H diff --git a/src/code_800558C.c b/src/code_800558C.c index cc9ef5c48..ead4a7e2a 100644 --- a/src/code_800558C.c +++ b/src/code_800558C.c @@ -4,6 +4,25 @@ #include "code_800558C.h" #include "math.h" +#define UNROLL16(x) do { \ + x; \ + x; \ + x; \ + x; \ + x; \ + x; \ + x; \ + x; \ + x; \ + x; \ + x; \ + x; \ + x; \ + x; \ + x; \ + x; \ +} while (0) + EWRAM_DATA bool8 gDrawWindow = FALSE; EWRAM_DATA s16 *gWin0HPtr = NULL; EWRAM_DATA static s32 sUnknown_2026E40 = 0; // Read from but never written to @@ -23,7 +42,6 @@ EWRAM_INIT s16 *gWindowBgCopy = NULL; static const s16 gUnknown_80B8008[17] = {16, 12, 9, 7, 6, 5, 4, 3, 2, 2, 1, 1, 1, 0, 0, 0, 0}; #define Y_MAX 160 - // Dim edges of screen in corridors with 1 visibility static const s16 sCorridorDim1[Y_MAX] = { 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, @@ -89,7 +107,7 @@ static const s16 sDefaultBgH[Y_MAX] = { }; // arm9.bin::02006154 -void sub_80057E8(void) +void WindowBgBufferInit(void) { sInitialized = TRUE; sBufferIdx = FALSE; @@ -109,7 +127,7 @@ void CopyWindowBgBuffer(s32 *a0, u8 kind) s32 i; if (!sInitialized) - kind = 0; + kind = COPY_WINDOW_BG_BUFFER_DEFAULT; dst = !sBufferIdx ? sBuffer0 : sBuffer1; @@ -120,154 +138,30 @@ void CopyWindowBgBuffer(s32 *a0, u8 kind) sBufferPtr = dst; switch (kind) { - case 0: + case COPY_WINDOW_BG_BUFFER_DEFAULT: for (i = 0; i < 10; i++) { - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; - *dst++ = *src1++; - *dst++ = 0; + UNROLL16(*dst++ = *src1++; *dst++ = 0;); } break; - case 1: + case COPY_WINDOW_BG_BUFFER_DIM2: src2 = sCorridorDim2; for (i = 0; i < 10; i++) { - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; + UNROLL16(*dst++ = *src1++; *dst++ = *src2++;); } break; - case 2: + case COPY_WINDOW_BG_BUFFER_DIM1: src2 = sCorridorDim1; for (i = 0; i < 10; i++) { - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; + UNROLL16(*dst++ = *src1++; *dst++ = *src2++;); } break; - case 3: + case COPY_WINDOW_BG_BUFFER_UNK3: if ((a0[0] < 0 && a0[2] < 0) || (a0[1] < 0 && a0[3] < 0) || (a0[0] >= 240 && a0[2] >= 240) || (a0[1] >= 160 && a0[3] >= 160)) { for (i = 0; i < 10; i++) { - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; - *dst++ = *src1++; - *dst++ = 240; + UNROLL16(*dst++ = *src1++; *dst++ = 240;); } } else { @@ -312,44 +206,13 @@ void CopyWindowBgBuffer(s32 *a0, u8 kind) } } break; - case 4: + case COPY_WINDOW_BG_BUFFER_UNK4: src2 = gUnknown_80B82AA; for (i = 0; i < 15; i++) { - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; - *dst++ = *src1++; - *dst++ = *src2++; + UNROLL16(*dst++ = *src1++; *dst++ = *src2++;); } break; - case 5: { + case COPY_WINDOW_BG_BUFFER_UNK5: { s32 r8; s32 sp14; s32 uVar7; @@ -364,38 +227,7 @@ void CopyWindowBgBuffer(s32 *a0, u8 kind) s32 j, k; for (i = 0; i < 15; i++) { - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; - *dst++ = *src1++; - *dst++ = 256; + UNROLL16(*dst++ = *src1++; *dst++ = 256;); } val1 = sUnknown_2026E40; diff --git a/src/debug_field_map.c b/src/debug_field_map.c index 58e8e1d23..03c831332 100644 --- a/src/debug_field_map.c +++ b/src/debug_field_map.c @@ -38,7 +38,7 @@ UNUSED static void DebugMapViewer(void) sub_809975C(); sub_809D0AC(); ResetDialogueBox(); - CopyWindowBgBuffer(NULL, 0); + CopyWindowBgBuffer(NULL, COPY_WINDOW_BG_BUFFER_DEFAULT); AllocGroundMapAction(); while (TRUE) { bool8 quitMapView; @@ -48,7 +48,7 @@ UNUSED static void DebugMapViewer(void) if (DebugFieldMapWindow_Init()) { DebugFieldMapWindow_MoveMenuTo(mapId); while (TRUE) { - CopyWindowBgBuffer(NULL, 0); + CopyWindowBgBuffer(NULL, COPY_WINDOW_BG_BUFFER_DEFAULT); sub_8012A18(0); switch (DebugFieldMapWindow_GetInput()) { case MENU_INPUT_A_PRESS: @@ -132,7 +132,7 @@ UNUSED static void DebugMapViewer(void) sub_809D25C(); sub_80A59DC(); DrawDialogueBoxString_Async(); - CopyWindowBgBuffer(NULL, 0); + CopyWindowBgBuffer(NULL, COPY_WINDOW_BG_BUFFER_DEFAULT); ToggleWindowBgBuffer(); nullsub_8(gGameOptionsRef->touchScreen); sub_8005180(); diff --git a/src/dungeon_tilemap.c b/src/dungeon_tilemap.c index 07a702546..b7b6fc20a 100644 --- a/src/dungeon_tilemap.c +++ b/src/dungeon_tilemap.c @@ -303,10 +303,10 @@ static void sub_803F7BC(void) u32 roomId = tile->room; if (strPtr->allTilesRevealed != 0 || strPtr->unk1820C != 0 || strPtr->unk18217 != 0) { - CopyWindowBgBuffer(NULL, 0); + CopyWindowBgBuffer(NULL, COPY_WINDOW_BG_BUFFER_DEFAULT); } else if (roomId == CORRIDOR_ROOM) { - u32 kind = (strPtr->visibilityRange == 2) ? 1 : 2; + u32 kind = (strPtr->visibilityRange == 2) ? COPY_WINDOW_BG_BUFFER_DIM2 : COPY_WINDOW_BG_BUFFER_DIM1; CopyWindowBgBuffer(NULL, kind); } else { diff --git a/src/dungeon_vram.c b/src/dungeon_vram.c index b69d77d22..366f77627 100644 --- a/src/dungeon_vram.c +++ b/src/dungeon_vram.c @@ -239,7 +239,7 @@ void sub_803E668(u32 unused) nullsub_8(gGameOptionsRef->touchScreen); sub_8005180(); nullsub_12(); - CopyWindowBgBuffer(NULL, 0); + CopyWindowBgBuffer(NULL, COPY_WINDOW_BG_BUFFER_DEFAULT); ToggleWindowBgBuffer(); gDungeonFramesCounter++; IncrementPlayTime(gPlayTimeRef); diff --git a/src/friend_areas_map_util.c b/src/friend_areas_map_util.c index cc35e4c17..22a141742 100644 --- a/src/friend_areas_map_util.c +++ b/src/friend_areas_map_util.c @@ -373,7 +373,7 @@ void FriendAreasMap_RunFrameActions(void) SetBG3RegOffsets(gFriendAreasMapPtr->bgPos.x, gFriendAreasMapPtr->bgPos.y); AnimateSprites(); UpdateAnimatedColors(FadeScreen(), gFriendAreasMapPtr->unk4C4C, 0xB0, 16, gFriendAreasMapPtr->brightness, NULL); - CopyWindowBgBuffer(NULL, 0); + CopyWindowBgBuffer(NULL, COPY_WINDOW_BG_BUFFER_DEFAULT); nullsub_8(gGameOptionsRef->touchScreen); sub_8005180(); ToggleWindowBgBuffer(); diff --git a/src/ground_main.c b/src/ground_main.c index 657c400f4..4a0972f08 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -308,7 +308,7 @@ u32 xxx_script_related_8098468_Async(s32 startMode) GroundMap_ExecuteEvent(EVENT_DIVIDE, FALSE); } GroundMap_Action(); - CopyWindowBgBuffer(NULL,0); + CopyWindowBgBuffer(NULL, COPY_WINDOW_BG_BUFFER_DEFAULT); ToggleWindowBgBuffer(); xxx_call_update_bg_sound_input(); while ( 1 ) { diff --git a/src/main.c b/src/main.c index 651d72708..829a16b2f 100644 --- a/src/main.c +++ b/src/main.c @@ -90,7 +90,7 @@ void AgbMain(void) nullsub_6(); InitInput(); InitBGPaletteBuffer(); - sub_80057E8(); + WindowBgBufferInit(); InitFileSystem(); LoadCharmaps(); ResetScheduledMemCopies(); diff --git a/src/main_loops.c b/src/main_loops.c index 79ec3f0aa..055f70ec0 100644 --- a/src/main_loops.c +++ b/src/main_loops.c @@ -273,7 +273,7 @@ void GameLoop_Async(void) static void MainLoops_RunFrameActions(u32 unused) { DrawDialogueBoxString_Async(); - CopyWindowBgBuffer(NULL, 0); + CopyWindowBgBuffer(NULL, COPY_WINDOW_BG_BUFFER_DEFAULT); nullsub_8(gGameOptionsRef->touchScreen); sub_8005180(); @@ -362,7 +362,7 @@ static void QuickSave_Async(u32 mode) sub_8099744(); sub_8099750(); SetCharacterMask(3); - CopyWindowBgBuffer(NULL, 0); + CopyWindowBgBuffer(NULL, COPY_WINDOW_BG_BUFFER_DEFAULT); ToggleWindowBgBuffer(); CreateDialogueBoxAndPortrait(sSaveTextQuicksaving, 0, 0, 0x20); diff --git a/src/other_menus1.c b/src/other_menus1.c index e0208e0b7..8ee531c90 100644 --- a/src/other_menus1.c +++ b/src/other_menus1.c @@ -208,7 +208,7 @@ static void sub_80371B8(void) void sub_80373C4(void) { - CopyWindowBgBuffer(NULL, 0); + CopyWindowBgBuffer(NULL, COPY_WINDOW_BG_BUFFER_DEFAULT); ToggleWindowBgBuffer(); WaitForNextFrameAndAdvanceRNG(); LoadBufferedInputs(); diff --git a/src/textbox.c b/src/textbox.c index 6aebaf9e8..2fb6ee199 100644 --- a/src/textbox.c +++ b/src/textbox.c @@ -1040,7 +1040,7 @@ void sub_809B57C_Async(void) } if (sTextbox->unk434 < 0) { - CopyWindowBgBuffer(0, 0); + CopyWindowBgBuffer(0, COPY_WINDOW_BG_BUFFER_DEFAULT); } else { CopyWindowBgBuffer(0, 5); diff --git a/src/world_map.c b/src/world_map.c index 85c8eb3a3..215b5487e 100644 --- a/src/world_map.c +++ b/src/world_map.c @@ -406,7 +406,7 @@ static void WorldMap_RunFrameActions(void) SetBG3RegOffsets(sWorldMapPtr->bgPos.x, sWorldMapPtr->bgPos.y); AnimateSprites(TRUE); FadeScreen(); - CopyWindowBgBuffer(NULL, 0); + CopyWindowBgBuffer(NULL, COPY_WINDOW_BG_BUFFER_DEFAULT); nullsub_8(gGameOptionsRef->touchScreen); sub_8005180(); ToggleWindowBgBuffer();