Some union_room_chat clean up

This commit is contained in:
GriffinR 2021-10-17 15:11:36 -04:00
parent 164590e37d
commit c70ec9748a

View File

@ -105,6 +105,17 @@ enum {
CHAT_EXIT_DISBANDED, CHAT_EXIT_DISBANDED,
}; };
enum {
GFXTAG_KEYBOARD_CURSOR,
GFXTAG_TEXT_ENTRY_ARROW,
GFXTAG_TEXT_ENTRY_CURSOR,
GFXTAG_RBUTTON_ICON,
GFXTAG_RBUTTON_LABELS,
};
// Shared by all above
#define PALTAG_INTERFACE 0
struct UnionRoomChat struct UnionRoomChat
{ {
u32 filler1; u32 filler1;
@ -123,7 +134,7 @@ struct UnionRoomChat
u8 lastBufferCursorPos; u8 lastBufferCursorPos;
u8 bufferCursorPos; u8 bufferCursorPos;
u8 receivedPlayerIndex; u8 receivedPlayerIndex;
u8 exitType; u8 exitType; // CHAT_EXIT_*
bool8 changedRegisteredTexts; bool8 changedRegisteredTexts;
u8 afterSaveTimer; u8 afterSaveTimer;
u8 messageEntryBuffer[2 * MAX_MESSAGE_LENGTH + 1]; u8 messageEntryBuffer[2 * MAX_MESSAGE_LENGTH + 1];
@ -249,9 +260,9 @@ static void CreateRButtonSprites(void);
static void ShowKeyboardSwapMenu(void); static void ShowKeyboardSwapMenu(void);
static void HideKeyboardSwapMenu(void); static void HideKeyboardSwapMenu(void);
static void SetKeyboardCursorInvisibility(bool32); static void SetKeyboardCursorInvisibility(bool32);
static bool32 sub_8020320(void); static bool32 SlideKeyboardPageOut(void);
static void PrintCurrentKeyboardPage(void); static void PrintCurrentKeyboardPage(void);
static bool32 sub_8020368(void); static bool32 SlideKeyboardPageIn(void);
static void MoveKeyboardCursor(void); static void MoveKeyboardCursor(void);
static void UpdateRButtonLabel(void); static void UpdateRButtonLabel(void);
static void AddStdMessageWindow(int, u16); static void AddStdMessageWindow(int, u16);
@ -266,8 +277,8 @@ static void SetRegisteredTextPalette(bool32);
static void PrintChatMessage(u16, u8 *, u8); static void PrintChatMessage(u16, u8 *, u8);
static void StartKeyboardCursorAnim(void); static void StartKeyboardCursorAnim(void);
static bool32 TryKeyboardCursorReopen(void); static bool32 TryKeyboardCursorReopen(void);
static void sub_80207C0(s16); static void UpdateSlidingKeyboard(s16);
static void sub_8020818(s16); static void FinishSlidingKeyboard(s16);
static bool32 Display_Dummy(u8 *); static bool32 Display_Dummy(u8 *);
static bool32 Display_LoadGfx(u8 *state); static bool32 Display_LoadGfx(u8 *state);
static bool32 Display_ShowKeyboardSwapMenu(u8 *state); static bool32 Display_ShowKeyboardSwapMenu(u8 *state);
@ -550,36 +561,36 @@ static const struct BgTemplate sBgTemplates[] = {
static const struct WindowTemplate sWinTemplates[] = { static const struct WindowTemplate sWinTemplates[] = {
{ {
.bg = 0x03, .bg = 3,
.tilemapLeft = 0x08, .tilemapLeft = 8,
.tilemapTop = 0x01, .tilemapTop = 1,
.width = 0x15, .width = 21,
.height = 0x13, .height = 19,
.paletteNum = 0x0f, .paletteNum = 15,
.baseBlock = 0x0001, .baseBlock = 0x0001,
}, { }, {
.bg = 0x01, .bg = 1,
.tilemapLeft = 0x09, .tilemapLeft = 9,
.tilemapTop = 0x12, .tilemapTop = 18,
.width = 0x0f, .width = 15,
.height = 0x02, .height = 2,
.paletteNum = 0x0c, .paletteNum = 12,
.baseBlock = 0x007a, .baseBlock = 0x007a,
}, { }, {
.bg = 0x01, .bg = 1,
.tilemapLeft = 0x00, .tilemapLeft = 0,
.tilemapTop = 0x02, .tilemapTop = 2,
.width = 0x06, .width = 6,
.height = 0x0f, .height = 15,
.paletteNum = 0x07, .paletteNum = 7,
.baseBlock = 0x0020, .baseBlock = 0x0020,
}, { }, {
.bg = 0x00, .bg = 0,
.tilemapLeft = 0x01, .tilemapLeft = 1,
.tilemapTop = 0x02, .tilemapTop = 2,
.width = 0x07, .width = 7,
.height = 0x09, .height = 9,
.paletteNum = 0x0e, .paletteNum = 14,
.baseBlock = 0x0013, .baseBlock = 0x0013,
}, DUMMY_WIN_TEMPLATE }, DUMMY_WIN_TEMPLATE
}; };
@ -783,8 +794,8 @@ static const union AnimCmd *const sAnims_KeyboardCursor[] = {
}; };
static const struct SpriteTemplate sSpriteTemplate_KeyboardCursor = { static const struct SpriteTemplate sSpriteTemplate_KeyboardCursor = {
.tileTag = 0x0000, .tileTag = GFXTAG_KEYBOARD_CURSOR,
.paletteTag = 0x0000, .paletteTag = PALTAG_INTERFACE,
.oam = &sOam_KeyboardCursor, .oam = &sOam_KeyboardCursor,
.anims = sAnims_KeyboardCursor, .anims = sAnims_KeyboardCursor,
.images = NULL, .images = NULL,
@ -799,8 +810,8 @@ static const struct OamData sOam_TextEntrySprite = {
}; };
static const struct SpriteTemplate sSpriteTemplate_TextEntryCursor = { static const struct SpriteTemplate sSpriteTemplate_TextEntryCursor = {
.tileTag = 0x0002, .tileTag = GFXTAG_TEXT_ENTRY_CURSOR,
.paletteTag = 0x0000, .paletteTag = PALTAG_INTERFACE,
.oam = &sOam_TextEntrySprite, .oam = &sOam_TextEntrySprite,
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
@ -809,8 +820,8 @@ static const struct SpriteTemplate sSpriteTemplate_TextEntryCursor = {
}; };
static const struct SpriteTemplate sSpriteTemplate_TextEntryArrow = { static const struct SpriteTemplate sSpriteTemplate_TextEntryArrow = {
.tileTag = 0x0001, .tileTag = GFXTAG_TEXT_ENTRY_ARROW,
.paletteTag = 0x0000, .paletteTag = PALTAG_INTERFACE,
.oam = &sOam_TextEntrySprite, .oam = &sOam_TextEntrySprite,
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
@ -858,8 +869,8 @@ static const union AnimCmd *const sAnims_RButtonLabels[] = {
}; };
static const struct SpriteTemplate sSpriteTemplate_RButtonIcon = { static const struct SpriteTemplate sSpriteTemplate_RButtonIcon = {
.tileTag = 0x0003, .tileTag = GFXTAG_RBUTTON_ICON,
.paletteTag = 0x0000, .paletteTag = PALTAG_INTERFACE,
.oam = &sOam_RButtonIcon, .oam = &sOam_RButtonIcon,
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
@ -868,8 +879,8 @@ static const struct SpriteTemplate sSpriteTemplate_RButtonIcon = {
}; };
static const struct SpriteTemplate sSpriteTemplate_RButtonLabels = { static const struct SpriteTemplate sSpriteTemplate_RButtonLabels = {
.tileTag = 0x0004, .tileTag = GFXTAG_RBUTTON_LABELS,
.paletteTag = 0x0000, .paletteTag = PALTAG_INTERFACE,
.oam = &sOam_RButtonLabel, .oam = &sOam_RButtonLabel,
.anims = sAnims_RButtonLabels, .anims = sAnims_RButtonLabels,
.images = NULL, .images = NULL,
@ -879,7 +890,7 @@ static const struct SpriteTemplate sSpriteTemplate_RButtonLabels = {
void EnterUnionRoomChat(void) void EnterUnionRoomChat(void)
{ {
sChat = Alloc(sizeof(struct UnionRoomChat)); sChat = Alloc(sizeof(*sChat));
InitUnionRoomChat(sChat); InitUnionRoomChat(sChat);
gKeyRepeatStartDelay = 20; gKeyRepeatStartDelay = 20;
SetVBlankCallback(NULL); SetVBlankCallback(NULL);
@ -890,7 +901,7 @@ static void InitUnionRoomChat(struct UnionRoomChat *chat)
{ {
int i; int i;
chat->funcId = 0; chat->funcId = CHAT_FUNC_JOIN;
chat->funcState = 0; chat->funcState = 0;
chat->currentPage = 0; chat->currentPage = 0;
chat->currentCol = 0; chat->currentCol = 0;
@ -901,7 +912,7 @@ static void InitUnionRoomChat(struct UnionRoomChat *chat)
chat->messageEntryBuffer[0] = EOS; chat->messageEntryBuffer[0] = EOS;
chat->linkPlayerCount = GetLinkPlayerCount(); chat->linkPlayerCount = GetLinkPlayerCount();
chat->multiplayerId = GetMultiplayerId(); chat->multiplayerId = GetMultiplayerId();
chat->exitType = 0; chat->exitType = CHAT_EXIT_NONE;
chat->changedRegisteredTexts = FALSE; chat->changedRegisteredTexts = FALSE;
PrepareSendBuffer_Null(chat->sendMessageBuffer); PrepareSendBuffer_Null(chat->sendMessageBuffer);
for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++) for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++)
@ -969,6 +980,8 @@ static void CB2_UnionRoomChatMain(void)
static void Task_HandlePlayerInput(u8 taskId) static void Task_HandlePlayerInput(u8 taskId)
{ {
// If exitType is not CHAT_EXIT_NONE, begin exit function.
// Otherwise just call main function below.
switch (sChat->exitType) switch (sChat->exitType)
{ {
case CHAT_EXIT_ONLY_LEADER: case CHAT_EXIT_ONLY_LEADER:
@ -1056,7 +1069,7 @@ static void Chat_HandleInput(void)
} }
else else
{ {
SetChatFunction(5); SetChatFunction(CHAT_FUNC_REGISTER);
} }
} }
else if (HandleDPadInput()) else if (HandleDPadInput())
@ -2080,7 +2093,7 @@ static void Task_ReceiveChatMessage(u8 taskId)
if (GetLinkPlayerCount() == 2) if (GetLinkPlayerCount() == 2)
{ {
Rfu_StopPartnerSearch(); Rfu_StopPartnerSearch();
sChat->exitType = 1; sChat->exitType = CHAT_EXIT_ONLY_LEADER;
DestroyTask(taskId); DestroyTask(taskId);
return; return;
} }
@ -2091,12 +2104,12 @@ static void Task_ReceiveChatMessage(u8 taskId)
break; break;
case 5: case 5:
if (sChat->multiplayerId) if (sChat->multiplayerId)
sChat->exitType = 2; sChat->exitType = CHAT_EXIT_DROPPED;
DestroyTask(taskId); DestroyTask(taskId);
break; break;
case 6: case 6:
sChat->exitType = 3; sChat->exitType = CHAT_EXIT_DISBANDED;
DestroyTask(taskId); DestroyTask(taskId);
break; break;
case 2: case 2:
@ -2295,7 +2308,7 @@ static bool32 Display_SwitchPages(u8 *state)
{ {
case 0: case 0:
SetKeyboardCursorInvisibility(TRUE); SetKeyboardCursorInvisibility(TRUE);
if (sub_8020320()) if (SlideKeyboardPageOut())
return TRUE; return TRUE;
PrintCurrentKeyboardPage(); PrintCurrentKeyboardPage();
@ -2306,7 +2319,7 @@ static bool32 Display_SwitchPages(u8 *state)
return TRUE; return TRUE;
break; break;
case 2: case 2:
if (sub_8020368()) if (SlideKeyboardPageIn())
return TRUE; return TRUE;
MoveKeyboardCursor(); MoveKeyboardCursor();
@ -2928,26 +2941,29 @@ static void PrintCurrentKeyboardPage(void)
} }
} }
static bool32 sub_8020320(void) #define KEYBOARD_HOFS_END 56
static bool32 SlideKeyboardPageOut(void)
{ {
if (sDisplay->bg1hofs < 56) if (sDisplay->bg1hofs < KEYBOARD_HOFS_END)
{ {
sDisplay->bg1hofs += 12; sDisplay->bg1hofs += 12;
if (sDisplay->bg1hofs >= 56) if (sDisplay->bg1hofs >= KEYBOARD_HOFS_END)
sDisplay->bg1hofs = 56; sDisplay->bg1hofs = KEYBOARD_HOFS_END;
if (sDisplay->bg1hofs < 56) if (sDisplay->bg1hofs < KEYBOARD_HOFS_END)
{ {
sub_80207C0(sDisplay->bg1hofs); // Still sliding
UpdateSlidingKeyboard(sDisplay->bg1hofs);
return TRUE; return TRUE;
} }
} }
sub_8020818(sDisplay->bg1hofs); FinishSlidingKeyboard(sDisplay->bg1hofs);
return FALSE; return FALSE;
} }
static bool32 sub_8020368(void) static bool32 SlideKeyboardPageIn(void)
{ {
if (sDisplay->bg1hofs > 0) if (sDisplay->bg1hofs > 0)
{ {
@ -2957,12 +2973,13 @@ static bool32 sub_8020368(void)
if (sDisplay->bg1hofs > 0) if (sDisplay->bg1hofs > 0)
{ {
sub_80207C0(sDisplay->bg1hofs); // Still sliding
UpdateSlidingKeyboard(sDisplay->bg1hofs);
return TRUE; return TRUE;
} }
} }
sub_8020818(sDisplay->bg1hofs); FinishSlidingKeyboard(sDisplay->bg1hofs);
return FALSE; return FALSE;
} }
@ -3049,8 +3066,8 @@ static void LoadChatWindowGfx(void)
ptr = DecompressAndCopyTileDataToVram(2, gUnionRoomChat_Background_Gfx, 0, 0, 0); ptr = DecompressAndCopyTileDataToVram(2, gUnionRoomChat_Background_Gfx, 0, 0, 0);
if (ptr) if (ptr)
{ {
CpuFastCopy(&ptr[0x220], sDisplay->unk2128, 0x20); CpuFastCopy(&ptr[0x220], sDisplay->unk2128, sizeof(sDisplay->unk2128));
CpuFastCopy(&ptr[0x420], sDisplay->unk2148, 0x20); CpuFastCopy(&ptr[0x420], sDisplay->unk2148, sizeof(sDisplay->unk2148));
} }
CopyToBgTilemapBuffer(2, gUnionRoomChat_Background_Tilemap, 0, 0); CopyToBgTilemapBuffer(2, gUnionRoomChat_Background_Tilemap, 0, 0);
@ -3059,13 +3076,13 @@ static void LoadChatWindowGfx(void)
static void sub_8020680(void) static void sub_8020680(void)
{ {
LoadPalette(sUnk_Palette1, 0x80, 0x20); LoadPalette(sUnk_Palette1, 0x80, sizeof(sUnk_Palette1));
RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1); RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1);
} }
static void LoadChatMessagesWindow(void) static void LoadChatMessagesWindow(void)
{ {
LoadPalette(sUnk_Palette2, 0xF0, 0x20); LoadPalette(sUnk_Palette2, 0xF0, sizeof(sUnk_Palette2));
PutWindowTilemap(0); PutWindowTilemap(0);
FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillWindowPixelBuffer(0, PIXEL_FILL(1));
CopyWindowToVram(0, 3); CopyWindowToVram(0, 3);
@ -3113,13 +3130,13 @@ static void InitScanlineEffect(void)
ScanlineEffect_SetParams(params); ScanlineEffect_SetParams(params);
} }
static void sub_80207C0(s16 bg1hofs) static void UpdateSlidingKeyboard(s16 bg1hofs)
{ {
CpuFill16(bg1hofs, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120); CpuFill16(bg1hofs, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120);
CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20); CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20);
} }
static void sub_8020818(s16 bg1hofs) static void FinishSlidingKeyboard(s16 bg1hofs)
{ {
CpuFill16(bg1hofs, gScanlineEffectRegBuffers[0], 0x120); CpuFill16(bg1hofs, gScanlineEffectRegBuffers[0], 0x120);
CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20); CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20);
@ -3134,7 +3151,7 @@ static bool32 TryAllocSprites(void)
LoadCompressedSpriteSheet(&sSpriteSheets[i]); LoadCompressedSpriteSheet(&sSpriteSheets[i]);
LoadSpritePalette(&sSpritePalette); LoadSpritePalette(&sSpritePalette);
sSprites = Alloc(sizeof(struct UnionRoomChatSprites)); sSprites = Alloc(sizeof(*sSprites));
if (!sSprites) if (!sSprites)
return FALSE; return FALSE;
@ -3180,7 +3197,7 @@ static void MoveKeyboardCursor(void)
static void SetRegisteredTextPalette(bool32 registering) static void SetRegisteredTextPalette(bool32 registering)
{ {
const u16 *palette = &sUnionRoomChatInterfacePal[registering * 2 + 1]; const u16 *palette = &sUnionRoomChatInterfacePal[registering * 2 + 1];
u8 index = IndexOfSpritePaletteTag(0); u8 index = IndexOfSpritePaletteTag(PALTAG_INTERFACE);
LoadPalette(palette, index * 16 + 0x101, 4); LoadPalette(palette, index * 16 + 0x101, 4);
} }