diff --git a/graphics/misc/unk_846f4f0.pal b/graphics/misc/unk_846f4f0.pal deleted file mode 100644 index 4b0812f09..000000000 --- a/graphics/misc/unk_846f4f0.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/misc/unk_846f510.pal b/graphics/wireless_status_screen/anim_00.pal similarity index 100% rename from graphics/misc/unk_846f510.pal rename to graphics/wireless_status_screen/anim_00.pal diff --git a/graphics/misc/unk_846f530.pal b/graphics/wireless_status_screen/anim_01.pal similarity index 100% rename from graphics/misc/unk_846f530.pal rename to graphics/wireless_status_screen/anim_01.pal diff --git a/graphics/misc/unk_846f550.pal b/graphics/wireless_status_screen/anim_02.pal similarity index 100% rename from graphics/misc/unk_846f550.pal rename to graphics/wireless_status_screen/anim_02.pal diff --git a/graphics/misc/unk_846f570.pal b/graphics/wireless_status_screen/anim_03.pal similarity index 100% rename from graphics/misc/unk_846f570.pal rename to graphics/wireless_status_screen/anim_03.pal diff --git a/graphics/misc/unk_846f590.pal b/graphics/wireless_status_screen/anim_04.pal similarity index 100% rename from graphics/misc/unk_846f590.pal rename to graphics/wireless_status_screen/anim_04.pal diff --git a/graphics/misc/unk_846f5b0.pal b/graphics/wireless_status_screen/anim_05.pal similarity index 100% rename from graphics/misc/unk_846f5b0.pal rename to graphics/wireless_status_screen/anim_05.pal diff --git a/graphics/misc/unk_846f5d0.pal b/graphics/wireless_status_screen/anim_06.pal similarity index 100% rename from graphics/misc/unk_846f5d0.pal rename to graphics/wireless_status_screen/anim_06.pal diff --git a/graphics/misc/unk_846f5f0.pal b/graphics/wireless_status_screen/anim_07.pal similarity index 100% rename from graphics/misc/unk_846f5f0.pal rename to graphics/wireless_status_screen/anim_07.pal diff --git a/graphics/misc/unk_846f610.pal b/graphics/wireless_status_screen/anim_08.pal similarity index 100% rename from graphics/misc/unk_846f610.pal rename to graphics/wireless_status_screen/anim_08.pal diff --git a/graphics/misc/unk_846f630.pal b/graphics/wireless_status_screen/anim_09.pal similarity index 100% rename from graphics/misc/unk_846f630.pal rename to graphics/wireless_status_screen/anim_09.pal diff --git a/graphics/misc/unk_846f650.pal b/graphics/wireless_status_screen/anim_10.pal similarity index 100% rename from graphics/misc/unk_846f650.pal rename to graphics/wireless_status_screen/anim_10.pal diff --git a/graphics/misc/unk_846f670.pal b/graphics/wireless_status_screen/anim_11.pal similarity index 100% rename from graphics/misc/unk_846f670.pal rename to graphics/wireless_status_screen/anim_11.pal diff --git a/graphics/misc/unk_846f690.pal b/graphics/wireless_status_screen/anim_12.pal similarity index 100% rename from graphics/misc/unk_846f690.pal rename to graphics/wireless_status_screen/anim_12.pal diff --git a/graphics/misc/unk_846f4d0.pal b/graphics/wireless_status_screen/anim_13.pal similarity index 100% rename from graphics/misc/unk_846f4d0.pal rename to graphics/wireless_status_screen/anim_13.pal diff --git a/graphics/misc/unk_846f8e0.bin b/graphics/wireless_status_screen/bg.bin similarity index 100% rename from graphics/misc/unk_846f8e0.bin rename to graphics/wireless_status_screen/bg.bin diff --git a/graphics/misc/unk_846f6d0.png b/graphics/wireless_status_screen/bg.png similarity index 100% rename from graphics/misc/unk_846f6d0.png rename to graphics/wireless_status_screen/bg.png diff --git a/graphics/misc/unk_846f6b0.pal b/graphics/wireless_status_screen/default.pal similarity index 100% rename from graphics/misc/unk_846f6b0.pal rename to graphics/wireless_status_screen/default.pal diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index b6f018a9a..971db680f 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -14,46 +14,60 @@ #include "constants/songs.h" #include "constants/union_room.h" -struct WirelessCommunicationStatusScreenStruct -{ - u32 counts[4]; - u32 lastCounts[4]; - u32 activities[16]; - u8 taskId; - u8 rfuTaskId; - u8 filler_62[0xA]; +enum { + COLOR_NONE, + COLOR_NORMAL, + COLOR_TOTAL, + COLOR_TITLE, + COLOR_UNUSED, }; -static struct WirelessCommunicationStatusScreenStruct * sWCSS; +enum { + GROUPTYPE_NONE = -1, + GROUPTYPE_TRADE, + GROUPTYPE_BATTLE, + GROUPTYPE_UNION, + GROUPTYPE_TOTAL, + NUM_GROUPTYPES +}; + +static struct +{ + u32 groupCounts[NUM_GROUPTYPES]; + u32 prevGroupCounts[NUM_GROUPTYPES]; + u32 activities[NUM_TASK_DATA]; + u8 taskId; + u8 rfuTaskId; + u8 filler[10]; +} * sStatusScreen; static void CB2_InitWirelessCommunicationScreen(void); static void Task_WirelessCommunicationScreen(u8 taskId); static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx); static bool32 UpdateCommunicationCounts(u32 * counts, u32 * lastCounts, u32 * activities, u8 taskId); -static const u16 sWCSS_Palettes[][16] = { - INCBIN_U16("graphics/misc/unk_846f4d0.gbapal"), - INCBIN_U16("graphics/misc/unk_846f4f0.gbapal"), - INCBIN_U16("graphics/misc/unk_846f510.gbapal"), - INCBIN_U16("graphics/misc/unk_846f530.gbapal"), - INCBIN_U16("graphics/misc/unk_846f550.gbapal"), - INCBIN_U16("graphics/misc/unk_846f570.gbapal"), - INCBIN_U16("graphics/misc/unk_846f590.gbapal"), - INCBIN_U16("graphics/misc/unk_846f5b0.gbapal"), - INCBIN_U16("graphics/misc/unk_846f5d0.gbapal"), - INCBIN_U16("graphics/misc/unk_846f5f0.gbapal"), - INCBIN_U16("graphics/misc/unk_846f610.gbapal"), - INCBIN_U16("graphics/misc/unk_846f630.gbapal"), - INCBIN_U16("graphics/misc/unk_846f650.gbapal"), - INCBIN_U16("graphics/misc/unk_846f670.gbapal"), - INCBIN_U16("graphics/misc/unk_846f690.gbapal"), - INCBIN_U16("graphics/misc/unk_846f6b0.gbapal") +static const u16 sPalettes[][16] = { + INCBIN_U16("graphics/wireless_status_screen/default.gbapal"), + {}, // All black. Never read + INCBIN_U16("graphics/wireless_status_screen/anim_00.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_01.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_02.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_03.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_04.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_05.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_06.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_07.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_08.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_09.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_10.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_11.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_12.gbapal"), + INCBIN_U16("graphics/wireless_status_screen/anim_13.gbapal") }; +static const u32 sBgTiles_Gfx[] = INCBIN_U32("graphics/wireless_status_screen/bg.4bpp.lz"); +static const u16 sBgTiles_Tilemap[] = INCBIN_U16("graphics/wireless_status_screen/bg.bin"); -static const u32 sBgTilesGfx[] = INCBIN_U32("graphics/misc/unk_846f6d0.4bpp.lz"); -static const u16 sBgTilemap[] = INCBIN_U16("graphics/misc/unk_846f8e0.bin"); - -static const struct BgTemplate sBGTemplates[] = { +static const struct BgTemplate sBgTemplates[] = { { .bg = 0, .charBaseIndex = 2, @@ -75,29 +89,29 @@ static const struct BgTemplate sBGTemplates[] = { static const struct WindowTemplate sWindowTemplates[] = { { - .bg = 0x00, - .tilemapLeft = 0x03, - .tilemapTop = 0x00, - .width = 0x18, - .height = 0x03, - .paletteNum = 0x0f, - .baseBlock = 0x0001 + .bg = 0, + .tilemapLeft = 3, + .tilemapTop = 0, + .width = 24, + .height = 3, + .paletteNum = 15, + .baseBlock = 0x001 }, { - .bg = 0x00, - .tilemapLeft = 0x03, - .tilemapTop = 0x04, - .width = 0x16, - .height = 0x0f, - .paletteNum = 0x0f, - .baseBlock = 0x0049 + .bg = 0, + .tilemapLeft = 3, + .tilemapTop = 4, + .width = 22, + .height = 15, + .paletteNum = 15, + .baseBlock = 0x049 }, { - .bg = 0x00, - .tilemapLeft = 0x19, - .tilemapTop = 0x04, - .width = 0x02, - .height = 0x0f, - .paletteNum = 0x0f, - .baseBlock = 0x0193 + .bg = 0, + .tilemapLeft = 25, + .tilemapTop = 4, + .width = 2, + .height = 15, + .paletteNum = 15, + .baseBlock = 0x193 }, DUMMY_WIN_TEMPLATE }; @@ -109,41 +123,43 @@ static const u8 *const sPlayersTextPtrs[] = { gText_Dynamic3Players }; -static const u8 *const sHeaderTextPtrs[] = { - gText_WirelessCommunicationStatus, - gText_PeopleTrading, - gText_PeopleBattling, - gText_PeopleInUnionRoom, - gText_PeopleCommunicating +static const u8 *const sHeaderTexts[NUM_GROUPTYPES + 1] = { + [0] = gText_WirelessCommunicationStatus, + [GROUPTYPE_TRADE + 1] = gText_PeopleTrading, + [GROUPTYPE_BATTLE + 1] = gText_PeopleBattling, + [GROUPTYPE_UNION + 1] = gText_PeopleInUnionRoom, + [GROUPTYPE_TOTAL + 1] = gText_PeopleCommunicating }; -static const u8 sCountParams[][3] = { - // activity, count idx, by - // by=0 means count all - // UB: no check for count idx == -1 - {ACTIVITY_BATTLE_SINGLE, 1, 2}, - {ACTIVITY_BATTLE_DOUBLE, 1, 2}, - {ACTIVITY_BATTLE_MULTI, 1, 4}, - {ACTIVITY_TRADE, 0, 2}, - {ACTIVITY_WONDER_CARD, 3, 2}, - {ACTIVITY_WONDER_NEWS, 3, 2}, - {ACTIVITY_POKEMON_JUMP, 4, 0}, - {ACTIVITY_BERRY_CRUSH, 4, 0}, - {ACTIVITY_BERRY_PICK, 4, 0}, - {ACTIVITY_SEARCH, -1, 0}, - {ACTIVITY_SPIN_TRADE, 0, 0}, - {ACTIVITY_ITEM_TRADE, -1, 0}, - {ACTIVITY_RECORD_CORNER, 4, 0}, - {ACTIVITY_BERRY_BLENDER, -1, 0}, - {ACTIVITY_NONE | IN_UNION_ROOM, 2, 1}, - {ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM, 2, 2}, - {ACTIVITY_TRADE | IN_UNION_ROOM, 2, 2}, - {ACTIVITY_CHAT | IN_UNION_ROOM, 2, 0}, - {ACTIVITY_CARD | IN_UNION_ROOM, 2, 2}, - {ACTIVITY_PLYRTALK | IN_UNION_ROOM, 2, 1}, - {ACTIVITY_NPCTALK | IN_UNION_ROOM, 2, 2}, - {ACTIVITY_ACCEPT | IN_UNION_ROOM, 2, 1}, - {ACTIVITY_DECLINE | IN_UNION_ROOM, 2, 1} +// Activity, group type, number of players +// 0 players means the number of players can change and should be counted dynamically +// GROUPTYPE_TOTAL have no unique group and are simply counted in the total of "people communicating". +// A handful use NUM_GROUPTYPES, which is invalid, and are changed to GROUPTYPE_TOTAL in Emerald. +// UB: GROUPTYPE_NONE (-1) can potentially be used as an index into a u8[4] in CountPlayersInGroupAndGetActivity. +static const u8 sActivityGroupInfo[][3] = { + {ACTIVITY_BATTLE_SINGLE, GROUPTYPE_BATTLE, 2}, + {ACTIVITY_BATTLE_DOUBLE, GROUPTYPE_BATTLE, 2}, + {ACTIVITY_BATTLE_MULTI, GROUPTYPE_BATTLE, 4}, + {ACTIVITY_TRADE, GROUPTYPE_TRADE, 2}, + {ACTIVITY_WONDER_CARD, GROUPTYPE_TOTAL, 2}, + {ACTIVITY_WONDER_NEWS, GROUPTYPE_TOTAL, 2}, + {ACTIVITY_POKEMON_JUMP, NUM_GROUPTYPES, 0}, + {ACTIVITY_BERRY_CRUSH, NUM_GROUPTYPES, 0}, + {ACTIVITY_BERRY_PICK, NUM_GROUPTYPES, 0}, + {ACTIVITY_SEARCH, GROUPTYPE_NONE, 0}, + {ACTIVITY_SPIN_TRADE, GROUPTYPE_TRADE, 0}, + {ACTIVITY_ITEM_TRADE, GROUPTYPE_NONE, 0}, + {ACTIVITY_RECORD_CORNER, NUM_GROUPTYPES, 0}, + {ACTIVITY_BERRY_BLENDER, GROUPTYPE_NONE, 0}, + {ACTIVITY_NONE | IN_UNION_ROOM, GROUPTYPE_UNION, 1}, + {ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM, GROUPTYPE_UNION, 2}, + {ACTIVITY_TRADE | IN_UNION_ROOM, GROUPTYPE_UNION, 2}, + {ACTIVITY_CHAT | IN_UNION_ROOM, GROUPTYPE_UNION, 0}, + {ACTIVITY_CARD | IN_UNION_ROOM, GROUPTYPE_UNION, 2}, + {ACTIVITY_PLYRTALK | IN_UNION_ROOM, GROUPTYPE_UNION, 1}, + {ACTIVITY_NPCTALK | IN_UNION_ROOM, GROUPTYPE_UNION, 2}, + {ACTIVITY_ACCEPT | IN_UNION_ROOM, GROUPTYPE_UNION, 1}, + {ACTIVITY_DECLINE | IN_UNION_ROOM, GROUPTYPE_UNION, 1} }; static void CB2_RunWirelessCommunicationScreen(void) @@ -173,14 +189,14 @@ void ShowWirelessCommunicationScreen(void) static void CB2_InitWirelessCommunicationScreen(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); - sWCSS = AllocZeroed(sizeof(*sWCSS)); + sStatusScreen = AllocZeroed(sizeof(*sStatusScreen)); SetVBlankCallback(NULL); ResetBgsAndClearDma3BusyFlags(FALSE); - InitBgsFromTemplates(0, sBGTemplates, NELEMS(sBGTemplates)); - SetBgTilemapBuffer(1, Alloc(0x800)); - SetBgTilemapBuffer(0, Alloc(0x800)); - DecompressAndLoadBgGfxUsingHeap(1, sBgTilesGfx, 0, 0, 0); - CopyToBgTilemapBuffer(1, sBgTilemap, 0, 0); + InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); + SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(1, sBgTiles_Gfx, 0, 0, 0); + CopyToBgTilemapBuffer(1, sBgTiles_Tilemap, 0, 0); InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); ResetPaletteFade(); @@ -189,14 +205,14 @@ static void CB2_InitWirelessCommunicationScreen(void) ScanlineEffect_Stop(); m4aSoundVSyncOn(); SetVBlankCallback(VBlankCB_WirelessCommunicationScreen); - sWCSS->taskId = CreateTask(Task_WirelessCommunicationScreen, 0); - sWCSS->rfuTaskId = CreateTask_ListenToWireless(); - sWCSS->lastCounts[3] = 1; - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - LoadPalette(sWCSS_Palettes, 0, 0x20); + sStatusScreen->taskId = CreateTask(Task_WirelessCommunicationScreen, 0); + sStatusScreen->rfuTaskId = CreateTask_ListenToWireless(); + sStatusScreen->prevGroupCounts[3] = 1; + ChangeBgX(0, 0, BG_COORD_SET); + ChangeBgY(0, 0, BG_COORD_SET); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + LoadPalette(sPalettes, 0, 0x20); Menu_LoadStdPalAt(0xf0); DynamicPlaceholderTextUtil_Reset(); FillBgTilemapBufferRect(0, 0x000, 0, 0, 32, 32, 0xF); @@ -214,29 +230,24 @@ static void ExitWirelessCommunicationStatusScreen(void) s32 i; FreeAllWindowBuffers(); - for (i = 0; i < 2; i++) - { + for (i = 0; i < (int)ARRAY_COUNT(sBgTemplates); i++) Free(GetBgTilemapBuffer(i)); - } - Free(sWCSS); + Free(sStatusScreen); SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); } -static void WCSS_CyclePalette(s16 * frameCtr_p, s16 * palIdx_p) +// Cycle through palettes that relocate various shades of blue to create the wave effect at the bottom of the screen. +static void CyclePalette(s16 * counter, s16 * palIdx) { s32 idx; - (*frameCtr_p)++; - if (*frameCtr_p > 5) + if (++(*counter) > 5) { - (*palIdx_p)++; - if (*palIdx_p == 14) - { - *palIdx_p = 0; - } - *frameCtr_p = 0; + if (++(*palIdx) == (int)ARRAY_COUNT(sPalettes) - 2) + *palIdx = 0; + *counter = 0; } - idx = *palIdx_p + 2; - LoadPalette(sWCSS_Palettes[idx], 0, 16); + idx = *palIdx + 2; // +2 skips over default.pal and the empty black palette after it + LoadPalette(sPalettes[idx], 0, 16); } static void PrintHeaderTexts(void) @@ -247,50 +258,57 @@ static void PrintHeaderTexts(void) FillWindowPixelBuffer(0, PIXEL_FILL(0)); FillWindowPixelBuffer(1, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0)); - width = 0xC0 - GetStringWidth(FONT_3, sHeaderTextPtrs[0], 0); - WCSS_AddTextPrinterParameterized(0, FONT_3, sHeaderTextPtrs[0], width / 2, 6, 3); - for (i = 0; i < 3; i++) - { - WCSS_AddTextPrinterParameterized(1, FONT_3, sHeaderTextPtrs[i + 1], 0, 30 * i + 10, 1); - } - WCSS_AddTextPrinterParameterized(1, FONT_3, sHeaderTextPtrs[i + 1], 0, 30 * i + 10, 2); + + // Print title + width = 192 - GetStringWidth(FONT_3, sHeaderTexts[0], 0); + WCSS_AddTextPrinterParameterized(0, FONT_3, sHeaderTexts[0], width / 2, 6, COLOR_TITLE); + + // Print label for each group (excluding total) + for (i = 0; i < NUM_GROUPTYPES - 1; i++) + WCSS_AddTextPrinterParameterized(1, FONT_3, sHeaderTexts[i + 1], 0, 30 * i + 10, COLOR_NORMAL); + + // Print label for total + WCSS_AddTextPrinterParameterized(1, FONT_3, sHeaderTexts[i + 1], 0, 30 * i + 10, COLOR_TOTAL); + PutWindowTilemap(0); CopyWindowToVram(0, COPYWIN_GFX); PutWindowTilemap(1); CopyWindowToVram(1, COPYWIN_GFX); } +#define tState data[0] + static void Task_WirelessCommunicationScreen(u8 taskId) { s32 i; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: PrintHeaderTexts(); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 1: BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); ShowBg(1); CopyBgTilemapBufferToVram(0); ShowBg(0); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 2: if (!gPaletteFade.active) - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 3: - if (UpdateCommunicationCounts(sWCSS->counts, sWCSS->lastCounts, sWCSS->activities, sWCSS->rfuTaskId)) + if (UpdateCommunicationCounts(sStatusScreen->groupCounts, sStatusScreen->prevGroupCounts, sStatusScreen->activities, sStatusScreen->rfuTaskId)) { FillWindowPixelBuffer(2, PIXEL_FILL(0)); - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_GROUPTYPES; i++) { - ConvertIntToDecimalStringN(gStringVar4, sWCSS->counts[i], STR_CONV_MODE_RIGHT_ALIGN, 2); - if (i != 3) - WCSS_AddTextPrinterParameterized(2, FONT_3, gStringVar4, 4, 30 * i + 10, 1); + ConvertIntToDecimalStringN(gStringVar4, sStatusScreen->groupCounts[i], STR_CONV_MODE_RIGHT_ALIGN, 2); + if (i != GROUPTYPE_TOTAL) + WCSS_AddTextPrinterParameterized(2, FONT_3, gStringVar4, 4, 30 * i + 10, COLOR_NORMAL); else - WCSS_AddTextPrinterParameterized(2, FONT_3, gStringVar4, 4, 100, 2); + WCSS_AddTextPrinterParameterized(2, FONT_3, gStringVar4, 4, 100, COLOR_TOTAL); } PutWindowTilemap(2); CopyWindowToVram(2, COPYWIN_FULL); @@ -298,14 +316,14 @@ static void Task_WirelessCommunicationScreen(u8 taskId) if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - gTasks[sWCSS->rfuTaskId].data[15] = 0xFF; - gTasks[taskId].data[0]++; + gTasks[sStatusScreen->rfuTaskId].data[15] = 0xFF; + gTasks[taskId].tState++; } - WCSS_CyclePalette(&gTasks[taskId].data[7], &gTasks[taskId].data[8]); + CyclePalette(&gTasks[taskId].data[7], &gTasks[taskId].data[8]); break; case 4: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 5: if (!gPaletteFade.active) @@ -317,93 +335,99 @@ static void Task_WirelessCommunicationScreen(u8 taskId) } } -static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx) +static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode) { u8 textColor[3]; - switch (palIdx) + switch (mode) { - case 0: + case COLOR_NONE: // Unused. Default to usual text colors textColor[0] = TEXT_COLOR_TRANSPARENT; textColor[1] = TEXT_COLOR_DARK_GRAY; textColor[2] = TEXT_COLOR_LIGHT_GRAY; break; - case 1: + case COLOR_NORMAL: textColor[0] = TEXT_COLOR_TRANSPARENT; textColor[1] = TEXT_COLOR_WHITE; textColor[2] = TEXT_COLOR_LIGHT_GRAY; break; - case 2: + case COLOR_TOTAL: textColor[0] = TEXT_COLOR_TRANSPARENT; textColor[1] = TEXT_COLOR_RED; textColor[2] = TEXT_COLOR_LIGHT_RED; break; - case 3: + case COLOR_TITLE: textColor[0] = TEXT_COLOR_TRANSPARENT; textColor[1] = TEXT_COLOR_LIGHT_GREEN; textColor[2] = TEXT_COLOR_GREEN; break; - case 4: + case COLOR_UNUSED: textColor[0] = TEXT_COLOR_TRANSPARENT; textColor[1] = TEXT_COLOR_WHITE; textColor[2] = TEXT_COLOR_DARK_GRAY; break; // default: UB } - AddTextPrinterParameterized4(windowId, fontId, x, y, fontId == FONT_0 ? 0 : 1, 0, textColor, -1, str); + AddTextPrinterParameterized4(windowId, fontId, x, y, fontId == FONT_0 ? 0 : 1, 0, textColor, TEXT_SKIP_DRAW, str); } -static u32 CountMembersInGroup(struct RfuPlayer * unk20, u32 * counts) +static u32 CountPlayersInGroupAndGetActivity(struct RfuPlayer * player, u32 * groupCounts) { - u32 activity = unk20->rfu.data.activity; + u32 activity = player->rfu.data.activity; s32 i, j, k; - for (i = 0; i < NELEMS(sCountParams); i++) + #define group_activity(i) (sActivityGroupInfo[(i)][0]) + #define group_type(i) (sActivityGroupInfo[(i)][1]) + #define group_players(i) (sActivityGroupInfo[(i)][2]) + + for (i = 0; i < ARRAY_COUNT(sActivityGroupInfo); i++) { - if (activity == sCountParams[i][0] && unk20->groupScheduledAnim == UNION_ROOM_SPAWN_IN) + if (activity == group_activity(i) && player->groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - if (sCountParams[i][2] == 0) + if (group_players(i) == 0) { k = 0; for (j = 0; j < RFU_CHILD_MAX; j++) - { - if (unk20->rfu.data.partnerInfo[j] != 0) k++; - } + if (player->rfu.data.partnerInfo[j] != 0) k++; k++; - counts[sCountParams[i][1]] += k; + groupCounts[group_type(i)] += k; } else { - counts[sCountParams[i][1]] += sCountParams[i][2]; + groupCounts[group_type(i)] += group_players(i); } } } return activity; + + #undef group_activity + #undef group_type + #undef group_players } -static bool32 HaveCountsChanged(const u32 * newCounts, const u32 * prevCounts) +static bool32 HaveCountsChanged(const u32 * curCounts, const u32 * prevCounts) { s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_GROUPTYPES; i++) { - if (newCounts[i] != prevCounts[i]) + if (curCounts[i] != prevCounts[i]) return TRUE; } return FALSE; } -static bool32 UpdateCommunicationCounts(u32 * counts, u32 * lastCounts, u32 * activities, u8 taskId) +static bool32 UpdateCommunicationCounts(u32 * groupCounts, u32 * prevGroupCounts, u32 * activities, u8 taskId) { bool32 activitiesUpdated = FALSE; - u32 buffer[4] = {0, 0, 0, 0}; + u32 groupCountBuffer[NUM_GROUPTYPES] = {0, 0, 0, 0}; struct WirelessLink_Group * group = (void *)gTasks[taskId].data; s32 i; - for (i = 0; i < 16; i++) + for (i = 0; i < NUM_TASK_DATA; i++) { - u32 activity = CountMembersInGroup(&group->playerList->players[i], buffer); + u32 activity = CountPlayersInGroupAndGetActivity(&group->playerList->players[i], groupCountBuffer); if (activity != activities[i]) { activities[i] = activity; @@ -411,7 +435,7 @@ static bool32 UpdateCommunicationCounts(u32 * counts, u32 * lastCounts, u32 * ac } } - if (HaveCountsChanged(buffer, lastCounts) == FALSE) + if (!HaveCountsChanged(groupCountBuffer, prevGroupCounts)) { if (activitiesUpdated == TRUE) return TRUE; @@ -419,8 +443,15 @@ static bool32 UpdateCommunicationCounts(u32 * counts, u32 * lastCounts, u32 * ac return FALSE; } - memcpy(counts, buffer, sizeof(buffer)); - memcpy(lastCounts, buffer, sizeof(buffer)); - counts[3] = counts[0] + counts[1] + counts[2]; + memcpy(groupCounts, groupCountBuffer, sizeof(groupCountBuffer)); + memcpy(prevGroupCounts, groupCountBuffer, sizeof(groupCountBuffer)); + + groupCounts[GROUPTYPE_TOTAL] = groupCounts[GROUPTYPE_TRADE] + + groupCounts[GROUPTYPE_BATTLE] + + groupCounts[GROUPTYPE_UNION] + #ifdef BUGFIX + + groupCounts[GROUPTYPE_TOTAL] // Missing count for activities not in above groups + #endif + ; return TRUE; }