Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 44 additions & 60 deletions src/wireless_communication_status_screen.c
Original file line number Diff line number Diff line change
Expand Up @@ -385,58 +385,49 @@ static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *
AddTextPrinterParameterized4(windowId, fontId, x, y, fontId == FONT_SMALL ? 0 : 1, 0, textColor, TEXT_SKIP_DRAW, str);
}

static u32 CountPlayersInGroupAndGetActivity(struct RfuPlayer * player, u32 * groupCounts)
static u32 CountPlayersInGroupAndGetActivity(struct RfuPlayer *player, u32 *groupCounts)
{
#if REVISION >= 0xA
u32 activity = player->rfu.data.activity;
s32 i, j;

#define group_activity(i) (sActivityGroupInfo[(i)][0])
#define group_type(i) (sActivityGroupInfo[(i)][1])
#define group_players(i) (sActivityGroupInfo[(i)][2])

#if REVISION >= 0xA || defined(UBFIX)
if (player->groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{

u32 i = 0;
const u8 * group_info = &sActivityGroupInfo[0][0];
const u8 * group_players = &group_info[2];
const u8 * group_activity = group_info;
s32 offset = 0;
for (; i < ARRAY_COUNT(sActivityGroupInfo); i++)
for (i = 0; i < ARRAY_COUNT(sActivityGroupInfo); i++)
{
const u8 * group_type = &group_info[1];
u8 type = ((u8*)offset)[(u32)group_type]; // needed to match, but nobody would write this???
if (type < MAX_LINK_PLAYERS && activity == *group_activity)
u8 type = group_type(i);

if (type < NUM_GROUPTYPES && activity == group_activity(i))
{
u8 k = *group_players;
if (k == 0)
{
s32 j;
for (j = 0; j < RFU_CHILD_MAX; j++)
if (player->rfu.data.partnerInfo[j] != 0) k++;
k++;
}
groupCounts[type] += k;
break;
u8 k = group_players(i);
if (k == 0)
{
for (j = 0; j < RFU_CHILD_MAX; j++)
if (player->rfu.data.partnerInfo[j] != 0)
k++;
k++;
}

groupCounts[type] += k;
break;
}
group_players += sizeof(sActivityGroupInfo[0]);
group_activity += sizeof(sActivityGroupInfo[0]);
offset += (u8)sizeof(sActivityGroupInfo[0]);
}

}
#else
u32 activity = player->rfu.data.activity;
s32 i, j, k;

#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 == group_activity(i) && player->groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
if (group_players(i) == 0)
{
k = 0;
for (j = 0; j < RFU_CHILD_MAX; j++)
if (player->rfu.data.partnerInfo[j] != 0) k++;
s32 k;
for (k = 0, j = 0; j < RFU_CHILD_MAX; j++)
if (player->rfu.data.partnerInfo[j] != 0)
k++;
k++;
groupCounts[group_type(i)] += k;
}
Expand All @@ -446,14 +437,13 @@ static u32 CountPlayersInGroupAndGetActivity(struct RfuPlayer * player, u32 * gr
}
}
}
#endif

#undef group_activity
#undef group_type
#undef group_players
#endif

return activity;

}

static bool32 HaveCountsChanged(const u32 * curCounts, const u32 * prevCounts)
Expand All @@ -471,52 +461,46 @@ static bool32 HaveCountsChanged(const u32 * curCounts, const u32 * prevCounts)

static bool32 UpdateCommunicationCounts(u32 * groupCounts, u32 * prevGroupCounts, u32 * activities, u8 taskId)
{
bool32 activitiesUpdated = FALSE;
bool32 activitiesChanged = FALSE;
u32 groupCountBuffer[NUM_GROUPTYPES] = {0, 0, 0, 0};
struct WirelessLink_Group * group = (void *)gTasks[taskId].data;
s32 i;
struct WirelessLink_Group *group = (void *)gTasks[taskId].data;
s32 i, activity;

for (i = 0; i < NUM_TASK_DATA; i++)
{
u32 activity = CountPlayersInGroupAndGetActivity(&group->playerList->players[i], groupCountBuffer);
activity = CountPlayersInGroupAndGetActivity(&group->playerList->players[i], groupCountBuffer);
if (activity != activities[i])
{
activities[i] = activity;
activitiesUpdated = TRUE;
activitiesChanged = TRUE;
}
}

#if REVISION >= 0xA
if (HaveCountsChanged(groupCountBuffer, prevGroupCounts))
#else
if (!HaveCountsChanged(groupCountBuffer, prevGroupCounts))
{
if (activitiesUpdated == TRUE)
return TRUE;
else
return FALSE;
}
#endif
{
memcpy(groupCounts, groupCountBuffer, sizeof(groupCountBuffer));
memcpy(groupCounts, groupCountBuffer, sizeof(groupCountBuffer));
memcpy(prevGroupCounts, groupCountBuffer, sizeof(groupCountBuffer));

groupCounts[GROUPTYPE_TOTAL] = groupCounts[GROUPTYPE_TRADE]
+ groupCounts[GROUPTYPE_BATTLE]
+ groupCounts[GROUPTYPE_UNION]
#if defined(BUGFIX) || REVISION >= 0xA
#if defined(BUGFIX) || REVISION >= 0xA
+ groupCounts[GROUPTYPE_TOTAL] // Missing count for activities not in above groups
#endif
;
#endif
;

#if REVISION >= 0xA
activitiesUpdated = TRUE;
activitiesChanged = TRUE;
#else
return TRUE;
#endif
}

#if REVISION >= 0xA
return activitiesUpdated;
return activitiesChanged;
#else
return TRUE;
if (activitiesChanged == TRUE)
return TRUE;
return FALSE;
#endif
}