Document Task_UpdateContestResultBar
This commit is contained in:
parent
ef4d99c87e
commit
71ea78cc32
1 changed files with 27 additions and 19 deletions
|
@ -77,7 +77,10 @@ enum {
|
|||
#define TAG_CONFETTI 3017
|
||||
#define TAG_WIRELESS_INDICATOR_WINDOW 22222
|
||||
|
||||
#define MAX_BAR_LENGTH 87
|
||||
// Length of the score bar on the results screen
|
||||
#define NUM_BAR_SEGMENTS 11
|
||||
#define BAR_SEGMENT_LENGTH 8 // Each segment of the results bar is a single tile, so 8 pixels long
|
||||
#define MAX_BAR_LENGTH (NUM_BAR_SEGMENTS * BAR_SEGMENT_LENGTH)
|
||||
|
||||
// Starting x/y for the sliding results screen text box
|
||||
#define TEXT_BOX_X (DISPLAY_WIDTH + 32)
|
||||
|
@ -96,7 +99,7 @@ struct ContestResultsInternal
|
|||
u8 winnerMonSpriteId;
|
||||
bool8 destroyConfetti;
|
||||
bool8 pointsFlashing;
|
||||
s16 unkC[CONTESTANT_COUNT];
|
||||
s16 barLength[CONTESTANT_COUNT];
|
||||
u8 numBarsUpdating;
|
||||
};
|
||||
|
||||
|
@ -1748,7 +1751,7 @@ static void CalculateContestantsResultData(void)
|
|||
if ((*sContestResults->monResults)[i].lostPoints)
|
||||
barLengthRound2 *= -1;
|
||||
|
||||
if (barLengthPreliminary + barLengthRound2 == MAX_BAR_LENGTH + 1)
|
||||
if (barLengthPreliminary + barLengthRound2 == MAX_BAR_LENGTH)
|
||||
{
|
||||
if (barLengthRound2 > 0)
|
||||
(*sContestResults->monResults)[i].barLengthRound2--;
|
||||
|
@ -1841,47 +1844,52 @@ static void Task_UpdateContestResultBar(u8 taskId)
|
|||
s16 target = gTasks[taskId].tTarget;
|
||||
s16 decreasing = gTasks[taskId].tDecreasing;
|
||||
|
||||
// Has the results bar reached the limit?
|
||||
if (decreasing)
|
||||
{
|
||||
if (sContestResults->data->unkC[monId] <= 0)
|
||||
if (sContestResults->data->barLength[monId] <= 0)
|
||||
minMaxReached = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sContestResults->data->unkC[monId] > MAX_BAR_LENGTH)
|
||||
if (sContestResults->data->barLength[monId] >= MAX_BAR_LENGTH)
|
||||
minMaxReached = TRUE;
|
||||
}
|
||||
|
||||
if (sContestResults->data->unkC[monId] == target)
|
||||
if (sContestResults->data->barLength[monId] == target)
|
||||
targetReached = TRUE;
|
||||
|
||||
if (!targetReached)
|
||||
{
|
||||
// Target length has not been reached, update bar length
|
||||
if (minMaxReached)
|
||||
sContestResults->data->unkC[monId] = target;
|
||||
sContestResults->data->barLength[monId] = target;
|
||||
else if (decreasing)
|
||||
sContestResults->data->unkC[monId] = sContestResults->data->unkC[monId] - 1;
|
||||
sContestResults->data->barLength[monId]--;
|
||||
else
|
||||
sContestResults->data->unkC[monId] = sContestResults->data->unkC[monId] + 1;
|
||||
sContestResults->data->barLength[monId]++;
|
||||
}
|
||||
|
||||
// Update the tiles of the results bar if it's still changing
|
||||
if (!minMaxReached && !targetReached)
|
||||
{
|
||||
u8 var0;
|
||||
u8 tileOffset;
|
||||
u16 tileNum;
|
||||
for (i = 0; i < 11; i++)
|
||||
for (i = 0; i < NUM_BAR_SEGMENTS; i++)
|
||||
{
|
||||
if (sContestResults->data->unkC[monId] >= (i + 1) * 8)
|
||||
var0 = 8;
|
||||
else if (sContestResults->data->unkC[monId] >= i * 8)
|
||||
var0 = sContestResults->data->unkC[monId] % 8;
|
||||
if (sContestResults->data->barLength[monId] >= (i + 1) * BAR_SEGMENT_LENGTH)
|
||||
tileOffset = 8; // Bar segment is full
|
||||
else if (sContestResults->data->barLength[monId] >= i * BAR_SEGMENT_LENGTH)
|
||||
tileOffset = sContestResults->data->barLength[monId] % 8; // Bar segment is between full and empty
|
||||
else
|
||||
var0 = 0;
|
||||
tileOffset = 0; // Bar segment is empty
|
||||
|
||||
if (var0 < 4)
|
||||
tileNum = 0x504C + var0;
|
||||
// The first 4 bar segment tiles are not adjacent in the tileset to the
|
||||
// remaining bar segment tiles; choose the base tile number accordingly.
|
||||
if (tileOffset < 4)
|
||||
tileNum = 0x504C + tileOffset;
|
||||
else
|
||||
tileNum = 0x5057 + var0;
|
||||
tileNum = 0x5057 + tileOffset;
|
||||
|
||||
FillBgTilemapBufferRect_Palette0(2, tileNum, i + 7, monId * 3 + 6, 1, 1);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue