summaryrefslogtreecommitdiff
path: root/src/contest_2.c
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2021-06-23 11:10:02 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2021-06-23 11:10:02 -0400
commitd461cbcaa18e282f0a1ac5954298f2185a69b7c5 (patch)
tree99ce725ce6b91e9d340fad0b07ad2deae08327cf /src/contest_2.c
parent6e9821ca07a64ee09129038286aaba3eb1825946 (diff)
Sync more function names from Emerald
Diffstat (limited to 'src/contest_2.c')
-rw-r--r--src/contest_2.c466
1 files changed, 249 insertions, 217 deletions
diff --git a/src/contest_2.c b/src/contest_2.c
index e86de000e..08cd4c802 100644
--- a/src/contest_2.c
+++ b/src/contest_2.c
@@ -29,8 +29,8 @@
#include "contest_internal.h"
-extern void sub_80C8C80(u8);
-extern void sub_80ADCDC(u8 taskId);
+extern void Task_LinkContest_CommunicateAppealsState(u8 taskId);
+extern void Task_UpdateContestantBoxOrder(u8 taskId);
extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern u8 gBattleMonForms[];
@@ -45,10 +45,10 @@ extern const u8 gUnknown_083CA308[][2];
extern const u8 gUnknown_083CA310[][2];
extern const u8 gUnknown_083CA318[][2];
extern const u8 gUnknown_083CA330[][2];
-extern const u8 gUnknown_083CA338[];
+extern const u8 sSliderHeartYPositions[];
extern const u8 gUnknown_083CA33C[];
-extern const struct SpriteSheet gUnknown_083CA350;
-extern const struct SpriteTemplate gSpriteTemplate_83CA3AC;
+extern const struct SpriteSheet sSpriteSheet_SliderHeart;
+extern const struct SpriteTemplate sSpriteTemplate_SliderHeart;
extern const struct CompressedSpriteSheet gUnknown_083CA3C4[];
extern const struct SpritePalette gUnknown_083CA3E4;
extern const struct SpriteTemplate gSpriteTemplate_83CA3F4[];
@@ -74,7 +74,7 @@ extern const u8 gUnknown_083CC2EC[];
extern const u8 gUnknown_083CC59C[];
extern const u8 gText_Slash[];
extern const u16 gUnknown_083CC5A4[];
-extern const struct ContestWinner gUnknown_083CC5D0[];
+extern const struct ContestWinner gDefaultContestWinners[];
extern const u8 gUnknownText_MissedTurn[];
extern const u8 gUnknownText_LinkStandbyAndWinner[];
extern void (*const gContestEffectFuncs[])(void);
@@ -462,7 +462,7 @@ u8 unref_sub_80AE908(void)
30);
gSprites[spriteId].oam.paletteNum = 1;
gSprites[spriteId].callback = SpriteCallbackDummy;
- gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7C18;
+ gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteContest;
StartSpriteAffineAnim(&gSprites[spriteId], 0);
return spriteId;
}
@@ -484,7 +484,7 @@ u8 CreateContestantSprite(u16 species, u32 otId, u32 personality)
lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personality);
LoadCompressedPalette(lzPaletteData, 0x120, 32);
GetMonSpriteTemplate_803C56C(species, 0);
- spriteId = CreateSprite(&gUnknown_02024E8C, 112, sub_8077E44(2, species, 0), 30);
+ spriteId = CreateSprite(&gUnknown_02024E8C, 112, GetBattlerSpriteFinal_Y(2, species, 0), 30);
gSprites[spriteId].oam.paletteNum = 2;
gSprites[spriteId].oam.priority = 2;
gSprites[spriteId].subpriority = GetBattlerSubpriority(2);
@@ -492,9 +492,9 @@ u8 CreateContestantSprite(u16 species, u32 otId, u32 personality)
gSprites[spriteId].data[0] = gSprites[spriteId].oam.paletteNum;
gSprites[spriteId].data[2] = species;
if (IsSpeciesNotUnown(species))
- gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7C18;
+ gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteContest;
else
- gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7BEC;
+ gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteOpponentSide;
StartSpriteAffineAnim(&gSprites[spriteId], 0);
return spriteId;
}
@@ -507,6 +507,9 @@ bool8 IsSpeciesNotUnown(u16 species)
return TRUE;
}
+// The contestant info windows and general-purpose text box are drawn on one half, while
+// the moves and move description windows are drawn on another screen. Only the first 32 * 20
+// tiles are actually drawn on screen.
void SwapMoveDescAndContestTilemaps(void)
{
__copy_tilemap((void *)(VRAM + 0xC000));
@@ -800,7 +803,7 @@ u16 GetChosenMove(u8 a)
}
}
-void sub_80AF1B8(void)
+void GetAllChosenMoves(void)
{
u8 i;
@@ -857,7 +860,7 @@ void unref_sub_80AF2E0(void)
sub_80AF2A0(i);
}
-void sub_80AF2FC(void)
+void RankContestants(void)
{
u8 i;
u8 j;
@@ -865,9 +868,11 @@ void sub_80AF2FC(void)
for (i = 0; i < 4; i++)
{
- sContestantStatus[i].unk4 += sContestantStatus[i].appeal;
- arr[i] = sContestantStatus[i].unk4;
+ sContestantStatus[i].pointTotal += sContestantStatus[i].appeal;
+ arr[i] = sContestantStatus[i].pointTotal;
}
+
+ // Sort the point totals using bubble-sort.
for (i = 0; i < 3; i++)
{
for (j = 3; j > i; j--)
@@ -881,11 +886,21 @@ void sub_80AF2FC(void)
}
}
}
+
+ // For each contestant, find the best rank with their point total.
+ // Normally, each point total is different, and this will output the
+ // rankings as expected. However, if two pokemon are tied, then they
+ // both get the best rank for that point total.
+ //
+ // For example if the point totals are [100, 80, 80, 50], the ranks will
+ // be [1, 2, 2, 4]. The pokemon with a point total of 80 stop looking
+ // when they see the first 80 in the array, so they both share the '2'
+ // rank.
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
- if (sContestantStatus[i].unk4 == arr[j])
+ if (sContestantStatus[i].pointTotal == arr[j])
{
sContestantStatus[i].ranking = j;
break;
@@ -896,7 +911,7 @@ void sub_80AF2FC(void)
ApplyNextTurnOrder();
}
-void sub_80AF3C0(void)
+void SetAttentionLevels(void)
{
s32 i;
@@ -929,7 +944,7 @@ bool8 ContestantCanUseTurn(u8 a)
return TRUE;
}
-void sub_80AF438(void)
+void SetContestantStatusesForNextRound(void)
{
u8 i;
@@ -951,7 +966,7 @@ void sub_80AF438(void)
sContestantStatus[i].effectStringId = CONTEST_STRING_NONE;
sContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE;
sContestantStatus[i].conditionMod = 0;
- sContestantStatus[i].unk15_2 = sContestantStatus[i].disappointedRepeat;
+ sContestantStatus[i].repeatedPrevMove = sContestantStatus[i].disappointedRepeat;
sContestantStatus[i].disappointedRepeat = FALSE;
sContestantStatus[i].turnOrderModAction = 0;
sContestantStatus[i].appealTripleCondition = 0;
@@ -1131,11 +1146,11 @@ u8 unref_sub_80AF89C(s16 a, s16 b, u8 c, u8 d)
s8 r4;
u16 r0;
- eContestGfxState[d].unk2_2 = 1;
+ eContestGfxState[d].updatingAppealHearts = 1;
taskId = CreateTask(sub_80AF94C, 20);
- r5 = sub_80AFB74(a);
- r4 = sub_80AFB74(a + b) - r5;
- r0 = sub_80AFB40(d);
+ r5 = GetNumHeartsFromAppealPoints(a);
+ r4 = GetNumHeartsFromAppealPoints(a + b) - r5;
+ r0 = GetAppealHeartTileOffset(d);
gTasks[taskId].data[0] = r5;
gTasks[taskId].data[1] = r4;
gTasks[taskId].data[2] = r0 + c;
@@ -1153,7 +1168,7 @@ void sub_80AF94C(u8 taskId)
{
nullsub_19(r5);
DestroyTask(taskId);
- eContestGfxState[r5].unk2_2 = 0;
+ eContestGfxState[r5].updatingAppealHearts = 0;
}
else if (++gTasks[taskId].data[10] > 29)
{
@@ -1199,7 +1214,7 @@ void sub_80AF94C(u8 taskId)
}
}
-void sub_80AFA5C(void)
+void FillContestantWindowBgs(void)
{
u8 i;
@@ -1212,7 +1227,7 @@ void sub_80AFA5C(void)
void unref_sub_80AFAB8(s16 a, u8 b)
{
- u8 r5 = sub_80AFB74(a);
+ u8 r5 = GetNumHeartsFromAppealPoints(a);
u16 r2;
u8 i;
u16 arr[9];
@@ -1237,7 +1252,7 @@ void unref_sub_80AFAB8(s16 a, u8 b)
DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xC000 + (148 + b * 160) * 2), sizeof(arr));
}
-u16 sub_80AFB40(u8 a)
+u16 GetAppealHeartTileOffset(u8 a)
{
u16 var;
@@ -1252,7 +1267,7 @@ u16 sub_80AFB40(u8 a)
return var + 1;
}
-s8 sub_80AFB74(s16 a)
+s8 GetNumHeartsFromAppealPoints(s16 a)
{
s8 retVal = a / 10;
@@ -1263,126 +1278,126 @@ s8 sub_80AFB74(s16 a)
return retVal;
}
-u8 sub_80AFBA0(s16 a, s16 b, u8 c)
+u8 UpdateAppealHearts(s16 startAppeal, s16 appealDelta, u8 contestant)
{
u8 taskId;
- s8 r4;
- s8 r5;
-
- eContestGfxState[c].unk2_2 = 1;
- taskId = CreateTask(sub_80AFC74, 20);
- r4 = sub_80AFB74(a);
- r5 = sub_80AFB74(a + b) - r4;
- sub_80AFB40(c); // unused return value
- gTasks[taskId].data[0] = abs(r4);
- gTasks[taskId].data[1] = r5;
- if (r4 > 0 || (r4 == 0 && r5 > 0))
+ s8 startHearts;
+ s8 heartsDelta;
+
+ eContestGfxState[contestant].updatingAppealHearts = 1;
+ taskId = CreateTask(Task_UpdateAppealHearts, 20);
+ startHearts = GetNumHeartsFromAppealPoints(startAppeal);
+ heartsDelta = GetNumHeartsFromAppealPoints(startAppeal + appealDelta) - startHearts;
+ GetAppealHeartTileOffset(contestant); // unused return value
+ gTasks[taskId].data[0] = abs(startHearts);
+ gTasks[taskId].data[1] = heartsDelta;
+ if (startHearts > 0 || (startHearts == 0 && heartsDelta > 0))
gTasks[taskId].data[2] = 1;
else
gTasks[taskId].data[2] = -1;
- gTasks[taskId].data[3] = c;
- if (b < 0)
- nullsub_19(c);
+ gTasks[taskId].data[3] = contestant;
+ if (appealDelta < 0)
+ nullsub_19(contestant);
return taskId;
}
-void sub_80AFC74(u8 taskId)
+void Task_UpdateAppealHearts(u8 taskId)
{
- u8 r7 = gTasks[taskId].data[3];
- s16 r3 = gTasks[taskId].data[0];
- s16 r1 = gTasks[taskId].data[1];
+ u8 contestant = gTasks[taskId].data[3];
+ s16 startHearts = gTasks[taskId].data[0];
+ s16 heartsDelta = gTasks[taskId].data[1];
if (++gTasks[taskId].data[10] > 14)
{
- u16 r6;
- u8 r5;
- u8 r10;
+ u16 heartOffset;
+ u8 newNumHearts;
+ u8 pitchMod;
gTasks[taskId].data[10] = 0;
if (gTasks[taskId].data[1] == 0)
{
- nullsub_19(r7);
+ nullsub_19(contestant);
DestroyTask(taskId);
- eContestGfxState[r7].unk2_2 = 0;
+ eContestGfxState[contestant].updatingAppealHearts = 0;
return;
}
- else if (r3 == 0)
+ else if (startHearts == 0)
{
- if (r1 < 0)
+ if (heartsDelta < 0)
{
- r6 = sub_80AFB40(r7) + 2;
+ heartOffset = GetAppealHeartTileOffset(contestant) + 2;
gTasks[taskId].data[1]++;
}
else
{
- r6 = sub_80AFB40(r7);
+ heartOffset = GetAppealHeartTileOffset(contestant);
gTasks[taskId].data[1]--;
}
- r5 = gTasks[taskId].data[0]++;
+ newNumHearts = gTasks[taskId].data[0]++;
}
else
{
if (gTasks[taskId].data[2] < 0)
{
- if (r1 < 0)
+ if (heartsDelta < 0)
{
- r5 = gTasks[taskId].data[0]++;
+ newNumHearts = gTasks[taskId].data[0]++;
gTasks[taskId].data[1]++;
- r6 = sub_80AFB40(r7) + 2;
+ heartOffset = GetAppealHeartTileOffset(contestant) + 2;
}
else
{
- r5 = --gTasks[taskId].data[0];
- r6 = 0;
+ newNumHearts = --gTasks[taskId].data[0];
+ heartOffset = 0;
gTasks[taskId].data[1]--;
}
}
else
{
- if (r1 < 0)
+ if (heartsDelta < 0)
{
- r5 = --gTasks[taskId].data[0];
- r6 = 0;
+ newNumHearts = --gTasks[taskId].data[0];
+ heartOffset = 0;
gTasks[taskId].data[1]++;
}
else
{
- r5 = gTasks[taskId].data[0]++;
+ newNumHearts = gTasks[taskId].data[0]++;
gTasks[taskId].data[1]--;
- r6 = sub_80AFB40(r7);
+ heartOffset = GetAppealHeartTileOffset(contestant);
}
}
}
- r10 = r5;
- if (r5 > 7)
- r5 += 24;
+ pitchMod = newNumHearts;
+ if (newNumHearts >= 8)
+ newNumHearts += 32 - 8; // jump to second line
// Seriously, a 2-byte CpuFill? Why?
- CpuFill16(r6, (void *)(VRAM + 0xC000 + (0x56 + r5 + gContestantTurnOrder[r7] * 160) * 2), 2);
- if (r1 > 0)
+ CpuFill16(heartOffset, (void *)(VRAM + 0xC000 + (0x56 + newNumHearts + gContestantTurnOrder[contestant] * 160) * 2), 2);
+ if (heartsDelta > 0) // Appeal
{
PlaySE(SE_CONTEST_HEART);
m4aMPlayImmInit(&gMPlayInfo_SE1);
- m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, r10 * 256);
+ m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, pitchMod * 256);
}
- else
+ else // Jam
{
PlaySE(SE_BOO);
}
- if (r5 == 0 && r6 == 0)
+ if (newNumHearts == 0 && heartOffset == 0)
gTasks[taskId].data[2] = -gTasks[taskId].data[2];
}
}
-void sub_80AFE30(void)
+void CreateSliderHeartSprites(void)
{
s32 i;
- LoadSpriteSheet(&gUnknown_083CA350);
+ LoadSpriteSheet(&sSpriteSheet_SliderHeart);
for (i = 0; i < 4; i++)
{
- u8 y = gUnknown_083CA338[gContestantTurnOrder[i]];
+ u8 y = sSliderHeartYPositions[gContestantTurnOrder[i]];
- eContestGfxState[i].unk0 = CreateSprite(&gSpriteTemplate_83CA3AC, 180, y, 1);
+ eContestGfxState[i].sliderHeartSpriteId = CreateSprite(&sSpriteTemplate_SliderHeart, 180, y, 1);
}
}
@@ -1392,8 +1407,8 @@ void sub_80AFE78(u8 a)
s16 r5;
eContestGfxState[a].unk2_0 = 1;
- spriteId = eContestGfxState[a].unk0;
- r5 = sContestantStatus[a].unk4 / 10 * 2;
+ spriteId = eContestGfxState[a].sliderHeartSpriteId;
+ r5 = sContestantStatus[a].pointTotal / 10 * 2;
if (r5 > 56)
r5 = 56;
else if (r5 < 0)
@@ -1444,12 +1459,12 @@ void sub_80AFF60(struct Sprite *sprite)
}
}
-void sub_80AFFA0(void)
+void UpdateSliderHeartSpriteYPositions(void)
{
s32 i;
for (i = 0; i < 4; i++)
- gSprites[eContestGfxState[i].unk0].pos1.y = gUnknown_083CA338[gContestantTurnOrder[i]];
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.y = sSliderHeartYPositions[gContestantTurnOrder[i]];
}
void sub_80AFFE0(bool8 a)
@@ -1461,9 +1476,9 @@ void sub_80AFFE0(bool8 a)
if (gContestantTurnOrder[i] > 1)
{
if (!a)
- gSprites[eContestGfxState[i].unk0].pos1.x = 180;
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.x = 180;
else
- gSprites[eContestGfxState[i].unk0].pos1.x = 256;
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.x = 256;
}
}
}
@@ -1618,7 +1633,7 @@ void sub_80B03D8(u8 taskId)
{
gTasks[sContest.unk19211].data[r4 * 4 + 0] = 0xFF;
gTasks[sContest.unk19211].data[r4 * 4 + 1] = 0;
- BlendPalette((sContest.unk19218[r4] + 5) * 16 + 6, 2, 0, RGB(31, 31, 18));
+ BlendPalette((sContest.prevTurnOrder[r4] + 5) * 16 + 6, 2, 0, RGB(31, 31, 18));
DestroyTask(taskId);
}
}
@@ -1643,7 +1658,7 @@ void sub_80B0458(u8 taskId)
gTasks[taskId].data[r3 + 1] ^= 1;
BlendPalette(
- (sContest.unk19218[i] + 5) * 16 + 6,
+ (sContest.prevTurnOrder[i] + 5) * 16 + 6,
2,
gTasks[taskId].data[r3 + 0],
RGB(31, 31, 18));
@@ -1666,7 +1681,7 @@ void sub_80B0548(u8 a)
gTasks[sContest.unk19212].data[a * 4 + 1] = 0;
}
-void sub_80B0588(void)
+void UpdateBlendTaskContestantsData(void)
{
u8 i;
@@ -2282,7 +2297,7 @@ void SpriteCB_EndBlinkContestantBox(struct Sprite *sprite)
ResetBlendForContestantBoxBlink();
}
-void sub_80B0CDC(u8 a, int unused)
+void Unused_EndBlinkingState(u8 a, int unused)
{
eContestGfxState[a].boxBlinking = 0;
}
@@ -2335,7 +2350,7 @@ void ContestDebugDoPrint(void)
}
for (i = 0; i < 4; i++)
{
- r2 = sContestantStatus[i].unk4;
+ r2 = sContestantStatus[i].pointTotal;
if (r2 < 0)
{
r2 = -r2;
@@ -3018,49 +3033,51 @@ void Task_AnimateAudience(u8 taskId)
#define tBlendColor data[0]
#define tBlendCoeff data[1]
-void sub_80B1EA8(s8 a, s8 b)
+void BlendAudienceBackground(s8 excitementDir, s8 blendDir)
{
- u8 taskId = CreateTask(sub_80B1F4C, 10);
+ u8 taskId = CreateTask(Task_BlendAudienceBackground, 10);
u16 blendColor;
u8 blendCoeff;
- u8 r3;
+ u8 targetBlendCoeff;
- if (a > 0)
+ if (excitementDir > 0)
{
blendColor = RGB(30, 27, 8);
- if (b > 0)
+ if (blendDir > 0)
{
blendCoeff = 0;
- r3 = sContest.applauseLevel * 3;
+ targetBlendCoeff = sContest.applauseLevel * 3;
}
else
{
blendCoeff = sContest.applauseLevel * 3;
- r3 = 0;
+ targetBlendCoeff = 0;
}
}
else
{
blendColor = 0;
- if (b > 0)
+ if (blendDir > 0)
{
blendCoeff = 0;
- r3 = 12;
+ targetBlendCoeff = 12;
}
else
{
blendCoeff = 12;
- r3 = 0;
+ targetBlendCoeff = 0;
}
}
gTasks[taskId].tBlendColor = blendColor;
gTasks[taskId].tBlendCoeff = blendCoeff;
- gTasks[taskId].data[2] = b;
- gTasks[taskId].data[3] = r3;
- sContest.unk1920B_0 = 0;
+ gTasks[taskId].data[2] = blendDir;
+ gTasks[taskId].data[3] = targetBlendCoeff;
+ // Because this isn't set to TRUE here, the main task doesn't wait for the color blend
+ // Unclear if this was intentional or not (perhaps waiting added too much delay). In any case it does nothing now
+ sContest.waitForAudienceBlend = 0;
}
-void sub_80B1F4C(u8 taskId)
+void Task_BlendAudienceBackground(u8 taskId)
{
if (gTasks[taskId].data[10]++ >= 0)
{
@@ -3074,7 +3091,7 @@ void sub_80B1F4C(u8 taskId)
if (gTasks[taskId].tBlendCoeff == gTasks[taskId].data[3])
{
DestroyTask(taskId);
- sContest.unk1920B_0 = 0;
+ sContest.waitForAudienceBlend = 0;
}
}
}
@@ -3082,7 +3099,7 @@ void sub_80B1F4C(u8 taskId)
#undef tBlendColor
#undef tBlendCoeff
-void sub_80B1FD0(bool8 a)
+void ShowHideNextTurnGfx(bool8 a)
{
s32 i;
@@ -3112,7 +3129,7 @@ const u8 *GetTurnOrderNumberGfx(u8 contestant)
return gContestNextTurnNumbersGfx + sContestantStatus[contestant].nextTurnOrder * 64;
}
-void sub_80B20C4(void)
+void DrawUnnervedSymbols(void)
{
s32 i;
@@ -3132,15 +3149,15 @@ void sub_80B20C4(void)
}
}
-bool8 IsContestantAllowedToCombo(u8 a)
+bool8 IsContestantAllowedToCombo(u8 contestant)
{
- if (sContestantStatus[a].disappointedRepeat || sContestantStatus[a].nervous)
+ if (sContestantStatus[contestant].disappointedRepeat || sContestantStatus[contestant].nervous)
return FALSE;
else
return TRUE;
}
-void sub_80B2184(void)
+void SetBgForCurtainDrop(void)
{
s32 i;
@@ -3160,7 +3177,7 @@ void sub_80B2184(void)
for (i = 0; i < 4; i++)
{
- gSprites[eContestGfxState[i].unk0].oam.priority = 1;
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.priority = 1;
gSprites[eContestGfxState[i].unk1].oam.priority = 1;
}
@@ -3169,7 +3186,7 @@ void sub_80B2184(void)
((vBgCnt *)&REG_BG1CNT)->screenSize = 2;
}
-void sub_80B2280(void)
+void UpdateContestantBoxOrder(void)
{
s32 i;
@@ -3186,20 +3203,20 @@ void sub_80B2280(void)
for (i = 0; i < 4; i++)
{
- gSprites[eContestGfxState[i].unk0].oam.priority = 0;
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.priority = 0;
gSprites[eContestGfxState[i].unk1].oam.priority = 0;
}
}
-void sub_80B237C(u8 taskId)
+void Task_StartDropCurtainAtRoundEnd(u8 taskId)
{
gBattle_BG1_X = 0;
gBattle_BG1_Y = DISPLAY_HEIGHT;
PlaySE12WithPanning(SE_CONTEST_CURTAIN_FALL, 0);
- gTasks[taskId].func = sub_80B23BC;
+ gTasks[taskId].func = Task_UpdateCurtainDropAtRoundEnd;
}
-void sub_80B23BC(u8 taskId)
+void Task_UpdateCurtainDropAtRoundEnd(u8 taskId)
{
if ((s16)(gBattle_BG1_Y -= 7) < 0)
gBattle_BG1_Y = 0;
@@ -3208,11 +3225,11 @@ void sub_80B23BC(u8 taskId)
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80B2400;
+ gTasks[taskId].func = Task_ResetForNextRound;
}
}
-void sub_80B2400(u8 taskId)
+void Task_ResetForNextRound(u8 taskId)
{
s32 i;
@@ -3220,13 +3237,13 @@ void sub_80B2400(u8 taskId)
{
case 0:
for (i = 0; i < 4; i++)
- sContest.unk19218[i] = gContestantTurnOrder[i];
- sub_80AFA5C();
- sub_80B0588();
+ sContest.prevTurnOrder[i] = gContestantTurnOrder[i];
+ FillContestantWindowBgs();
+ UpdateBlendTaskContestantsData();
DrawConditionStars();
DrawContestantWindows();
- sub_80B1FD0(TRUE);
- sub_80AFFA0();
+ ShowHideNextTurnGfx(TRUE);
+ UpdateSliderHeartSpriteYPositions();
gTasks[taskId].data[0] = 1;
break;
case 1:
@@ -3234,40 +3251,41 @@ void sub_80B2400(u8 taskId)
{
u8 taskId2;
- sContest.unk1920B_2 = 1;
+ sContest.waitForLink = 1;
if (IsPlayerLinkLeader())
- sub_80AF438();
- taskId2 = CreateTask(sub_80C8C80, 0);
- SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC);
+ SetContestantStatusesForNextRound();
+ taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0);
+ SetTaskFuncWithFollowupFunc(
+ taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink);
ContestPrintLinkStandby();
gTasks[taskId].data[0] = 2;
}
else
{
- sub_80AF438();
+ SetContestantStatusesForNextRound();
gTasks[taskId].data[0] = 3;
}
break;
case 2:
- if (!sContest.unk1920B_2)
+ if (!sContest.waitForLink)
gTasks[taskId].data[0] = 3;
break;
case 3:
DrawStatusSymbols();
SwapMoveDescAndContestTilemaps();
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80B253C;
+ gTasks[taskId].func = Task_WaitRaiseCurtainAtRoundEnd;
break;
}
}
-void sub_80B2508(u8 taskId)
+void Task_UpdateRaiseCurtainAtRoundEnd(u8 taskId)
{
if ((s16)(gBattle_BG1_Y += 7) > DISPLAY_HEIGHT)
- gTasks[taskId].func = sub_80ADCDC;
+ gTasks[taskId].func = Task_UpdateContestantBoxOrder;
}
-void sub_80B253C(u8 taskId)
+void Task_WaitRaiseCurtainAtRoundEnd(u8 taskId)
{
if (gTasks[taskId].data[2] < 10)
{
@@ -3288,7 +3306,7 @@ void sub_80B253C(u8 taskId)
{
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80B25A4;
+ gTasks[taskId].func = Task_StartRaiseCurtainAtRoundEnd;
}
else
{
@@ -3298,7 +3316,7 @@ void sub_80B253C(u8 taskId)
}
}
-void sub_80B25A4(u8 taskId)
+void Task_StartRaiseCurtainAtRoundEnd(u8 taskId)
{
if (gTasks[taskId].data[2] < 10)
{
@@ -3308,45 +3326,45 @@ void sub_80B25A4(u8 taskId)
{
gTasks[taskId].data[2] = 0;
PlaySE12WithPanning(SE_CONTEST_CURTAIN_RISE, 0);
- gTasks[taskId].func = sub_80B2508;
+ gTasks[taskId].func = Task_UpdateRaiseCurtainAtRoundEnd;
}
}
-void sub_80B25E4(u8 a)
+void AnimateSliderHearts(u8 animId)
{
s32 i;
u8 taskId;
for (i = 0; i < 4; i++)
{
- gSprites[eContestGfxState[i].unk0].oam.matrixNum = AllocOamMatrix();
- gSprites[eContestGfxState[i].unk0].oam.affineMode = 1;
- StartSpriteAffineAnim(&gSprites[eContestGfxState[i].unk0], a);
- if (a == 2)
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.matrixNum = AllocOamMatrix();
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.affineMode = 1;
+ StartSpriteAffineAnim(&gSprites[eContestGfxState[i].sliderHeartSpriteId], animId);
+ if (animId == 2)
{
- AnimateSprite(&gSprites[eContestGfxState[i].unk0]);
- gSprites[eContestGfxState[i].unk0].invisible = FALSE;
+ AnimateSprite(&gSprites[eContestGfxState[i].sliderHeartSpriteId]);
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].invisible = FALSE;
}
}
- taskId = CreateTask(sub_80B26C8, 5);
- gTasks[taskId].data[0] = a;
- sContest.unk1920B_1 = 1;
+ taskId = CreateTask(Task_WaitForSliderHeartAnim, 5);
+ gTasks[taskId].data[0] = animId;
+ sContest.sliderHeartsAnimating = 1;
}
-void sub_80B26C8(u8 taskId)
+void Task_WaitForSliderHeartAnim(u8 taskId)
{
s32 i;
- if (gSprites[eContestGfxState[0].unk0].affineAnimEnded)
+ if (gSprites[eContestGfxState[0].sliderHeartSpriteId].affineAnimEnded)
{
if ((u8)gTasks[taskId].data[0] == 1)
{
for (i = 0; i < 4; i++)
- gSprites[eContestGfxState[i].unk0].invisible = TRUE;
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].invisible = TRUE;
}
for (i = 0; i < 4; i++)
- FreeSpriteOamMatrix(&gSprites[eContestGfxState[i].unk0]);
- sContest.unk1920B_1 = 0;
+ FreeSpriteOamMatrix(&gSprites[eContestGfxState[i].sliderHeartSpriteId]);
+ sContest.sliderHeartsAnimating = 0;
DestroyTask(taskId);
}
}
@@ -3365,14 +3383,14 @@ u16 SanitizeSpecies(u16 species)
return species;
}
-void sub_80B2790(u8 a)
+void SetMoveSpecificAnimData(u8 contestant)
{
s32 i;
- u16 move = SanitizeMove(sContestantStatus[a].currMove);
- u16 species = SanitizeSpecies(gContestMons[a].species);
+ u16 move = SanitizeMove(sContestantStatus[contestant].currMove);
+ u16 species = SanitizeSpecies(gContestMons[contestant].species);
u8 r5_2;
- memset(&shared19348, 0, sizeof(shared19348));
+ memset(&gContestResources__moveAnim, 0, sizeof(gContestResources__moveAnim));
ClearBattleAnimationVars();
for (i = 0; i < 4; i++)
gBattleMonForms[i] = 0;
@@ -3386,10 +3404,10 @@ void sub_80B2790(u8 a)
break;
case MOVE_TRANSFORM:
case MOVE_ROLE_PLAY:
- r5_2 = sContestantStatus[a].unk1B;
- shared19348.unk2 = SanitizeSpecies(gContestMons[r5_2].species);
- shared19348.unk10 = gContestMons[r5_2].personality;
- shared19348.unk4_0 = 1;
+ r5_2 = sContestantStatus[contestant].unk1B;
+ gContestResources__moveAnim.unk2 = SanitizeSpecies(gContestMons[r5_2].species);
+ gContestResources__moveAnim.unk10 = gContestMons[r5_2].personality;
+ gContestResources__moveAnim.unk4_0 = 1;
break;
case MOVE_RETURN:
gAnimFriendship = 0xFF;
@@ -3401,9 +3419,9 @@ void sub_80B2790(u8 a)
case MOVE_RAZOR_WIND:
case MOVE_SKULL_BASH:
case MOVE_SKY_ATTACK:
- if (sContest.unk1925E == 0)
+ if (sContest.moveAnimTurnCount == 0)
{
- sContest.unk1925E = 2;
+ sContest.moveAnimTurnCount = 2;
gAnimMoveTurn = 0;
}
else
@@ -3412,32 +3430,32 @@ void sub_80B2790(u8 a)
}
break;
}
- sub_80B2968();
+ SetBattleTargetSpritePosition();
}
-void sub_80B28CC(int unused)
+void ClearMoveAnimData(UNUSED u8 contestant)
{
- memset(&shared19348, 0, sizeof(shared19348));
- if (sContest.unk1925E != 0)
- sContest.unk1925E--;
+ memset(&gContestResources__moveAnim, 0, sizeof(gContestResources__moveAnim));
+ if (sContest.moveAnimTurnCount != 0)
+ sContest.moveAnimTurnCount--;
}
-void sub_80B28F0(u8 a)
+void SetMoveAnimAttackerData(u8 contestant)
{
- shared19348.unk5 = a;
- shared19348.unk0 = SanitizeSpecies(gContestMons[a].species);
- shared19348.unk8 = gContestMons[a].personality;
- shared19348.unkC = gContestMons[a].otId;
+ gContestResources__moveAnim.contestant = contestant;
+ gContestResources__moveAnim.species = SanitizeSpecies(gContestMons[contestant].species);
+ gContestResources__moveAnim.personality = gContestMons[contestant].personality;
+ gContestResources__moveAnim.otId = gContestMons[contestant].otId;
}
-void sub_80B292C(void)
+void CreateInvisibleBattleTargetSprite(void)
{
gBattlerSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
InitSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]]);
- sub_80B2968();
+ SetBattleTargetSpritePosition();
}
-void sub_80B2968(void)
+void SetBattleTargetSpritePosition(void)
{
struct Sprite *sprite = &gSprites[gBattlerSpriteIds[3]];
@@ -3466,102 +3484,116 @@ void SelectContestMoveBankTarget(u16 move)
}
}
-bool8 Contest_SaveWinner(u8 a)
+bool8 Contest_SaveWinner(u8 rank)
{
s32 i;
- u8 r7 = Random() % 3;
+ u8 captionId = Random() % 3;
+ // Get the index of the winner among the contestants
for (i = 0; i < 3; i++)
{
if (gContestFinalStandings[i] == 0)
break;
}
- if (a == 0xFF && i != gContestPlayerMonIndex)
+
+ // Exit if attempting to save a Pokémon other than the player's to the museum
+ if (rank == CONTEST_SAVE_FOR_MUSEUM && i != gContestPlayerMonIndex)
return FALSE;
+
+ // Adjust the random painting caption depending on the category
switch (gSpecialVar_ContestCategory)
{
case CONTEST_CATEGORY_COOL:
- r7 += 0;
+ captionId += 0;
break;
case CONTEST_CATEGORY_BEAUTY:
- r7 += 3;
+ captionId += 3;
break;
case CONTEST_CATEGORY_CUTE:
- r7 += 6;
+ captionId += 6;
break;
case CONTEST_CATEGORY_SMART:
- r7 += 9;
+ captionId += 9;
break;
case CONTEST_CATEGORY_TOUGH:
- r7 += 12;
+ captionId += 12;
break;
}
- if (a != 0xFE)
+ if (rank != CONTEST_SAVE_FOR_ARTIST)
{
- u8 r4 = GetContestWinnerSaveIdx(a, 1);
+ // Save winner in the saveblock
+ // Used to save any winner for the Contest Hall or the Museum
+ // but excludes the temporary save used by the artist
+ u8 saveIdx = GetContestWinnerSaveIdx(rank, TRUE);
- gSaveBlock1.contestWinners[r4].personality = gContestMons[i].personality;
- gSaveBlock1.contestWinners[r4].species = gContestMons[i].species;
- gSaveBlock1.contestWinners[r4].otId = gContestMons[i].otId;
- StringCopy(gSaveBlock1.contestWinners[r4].nickname, gContestMons[i].nickname);
- StringCopy(gSaveBlock1.contestWinners[r4].trainerName, gContestMons[i].trainerName);
- if (a != 0xFF)
- gSaveBlock1.contestWinners[r4].contestCategory = gSpecialVar_ContestCategory;
+ gSaveBlock1.contestWinners[saveIdx].personality = gContestMons[i].personality;
+ gSaveBlock1.contestWinners[saveIdx].species = gContestMons[i].species;
+ gSaveBlock1.contestWinners[saveIdx].otId = gContestMons[i].otId;
+ StringCopy(gSaveBlock1.contestWinners[saveIdx].nickname, gContestMons[i].nickname);
+ StringCopy(gSaveBlock1.contestWinners[saveIdx].trainerName, gContestMons[i].trainerName);
+ if (rank != CONTEST_SAVE_FOR_MUSEUM)
+ gSaveBlock1.contestWinners[saveIdx].contestCategory = gSpecialVar_ContestCategory;
else
- gSaveBlock1.contestWinners[r4].contestCategory = r7;
+ gSaveBlock1.contestWinners[saveIdx].contestCategory = captionId;
}
else
{
- shared15DE0.personality = gContestMons[i].personality;
- shared15DE0.otId = gContestMons[i].otId;
- shared15DE0.species = gContestMons[i].species;
- StringCopy(shared15DE0.nickname, gContestMons[i].nickname);
+ gCurContestWinner.personality = gContestMons[i].personality;
+ gCurContestWinner.otId = gContestMons[i].otId;
+ gCurContestWinner.species = gContestMons[i].species;
+ StringCopy(gCurContestWinner.nickname, gContestMons[i].nickname);
if (gIsLinkContest & 1)
- StringCopy(shared15DE0.trainerName, gLinkPlayers[i].name);
+ StringCopy(gCurContestWinner.trainerName, gLinkPlayers[i].name);
else
- StringCopy(shared15DE0.trainerName, gContestMons[i].trainerName);
- shared15DE0.contestCategory = r7;
+ StringCopy(gCurContestWinner.trainerName, gContestMons[i].trainerName);
+ gCurContestWinner.contestCategory = captionId;
}
return TRUE;
}
-u8 GetContestWinnerSaveIdx(u8 a, u8 b)
+// Rank is either a regular contest rank (for saving winners to show in the Contest Hall)
+// Or one of two special IDs listed below (for saving winners to show in Museum, or from the artist)
+// If just retrieving the index where the winner *would* go, shift is FALSE
+// If actually preparing to insert the winner into the saveblock, shift is TRUE
+u8 GetContestWinnerSaveIdx(u8 rank, u8 shift)
{
s32 i;
- switch (a)
+ switch (rank)
{
- case 0:
- case 1:
- return a;
- case 2:
- if (b != 0)
+ case CONTEST_RANK_NORMAL:
+ case CONTEST_RANK_SUPER:
+ return rank;
+ case CONTEST_RANK_HYPER:
+ if (shift)
{
- for (i = 4; i >= 3; i--)
+ for (i = CONTEST_WINNER_HYPER_3 - 1; i > CONTEST_WINNER_HYPER_1 - 1; i--)
memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner));
}
- return 2;
- case 3:
- if (b != 0)
+ return CONTEST_WINNER_HYPER_1 - 1;
+ case CONTEST_RANK_MASTER:
+ if (shift)
{
- for (i = 7; i >= 6; i--)
+ for (i = CONTEST_WINNER_MASTER_3 - 1; i > CONTEST_WINNER_MASTER_1 - 1; i--)
memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner));
}
- return 5;
+ return CONTEST_WINNER_MASTER_1 - 1;
default:
+// case CONTEST_SAVE_FOR_MUSEUM:
+// case CONTEST_SAVE_FOR_ARTIST:
switch (gSpecialVar_ContestCategory)
{
case CONTEST_CATEGORY_COOL:
- return 8;
+ return CONTEST_WINNER_MUSEUM_COOL - 1;
case CONTEST_CATEGORY_BEAUTY:
- return 9;
+ return CONTEST_WINNER_MUSEUM_BEAUTY - 1;
case CONTEST_CATEGORY_CUTE:
- return 10;
+ return CONTEST_WINNER_MUSEUM_CUTE - 1;
case CONTEST_CATEGORY_SMART:
- return 11;
+ return CONTEST_WINNER_MUSEUM_SMART - 1;
case CONTEST_CATEGORY_TOUGH:
default:
- return 12;
+ return CONTEST_WINNER_MUSEUM_TOUGH - 1;
}
}
}
@@ -3571,6 +3603,6 @@ void Contest_ResetWinners(void)
s32 i;
for (i = 0; i < 8; i++)
- gSaveBlock1.contestWinners[i] = gUnknown_083CC5D0[i];
+ gSaveBlock1.contestWinners[i] = gDefaultContestWinners[i];
}