Window BG buffer names

This commit is contained in:
Evan Chang
2026-04-29 23:30:30 -04:00
parent aebdeb4275
commit e4634dde8e
12 changed files with 58 additions and 217 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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();

View File

@@ -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 {

View File

@@ -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);

View File

@@ -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();

View File

@@ -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 ) {

View File

@@ -90,7 +90,7 @@ void AgbMain(void)
nullsub_6();
InitInput();
InitBGPaletteBuffer();
sub_80057E8();
WindowBgBufferInit();
InitFileSystem();
LoadCharmaps();
ResetScheduledMemCopies();

View File

@@ -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);

View File

@@ -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();

View File

@@ -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);

View File

@@ -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();