summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/contest.c3805
-rw-r--r--src/contest_2.c3576
-rw-r--r--src/contest_ai.c8
-rw-r--r--src/contest_effect.c392
-rw-r--r--src/contest_link.c8
-rw-r--r--src/debug/nakamura_debug_menu.c2
-rw-r--r--src/debug/start_menu_debug.c4
-rw-r--r--src/debug/taya_debug_window.c2
-rw-r--r--src/debug/watanabe_debug_menu.c34
-rw-r--r--src/pokedex_cry_screen.c2
-rw-r--r--src/region_map.c2
11 files changed, 3890 insertions, 3945 deletions
diff --git a/src/contest.c b/src/contest.c
index a282226d5..10a152f58 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -34,13 +34,14 @@
#include "tv.h"
#include "util.h"
+#include "contest_internal.h"
+
extern u8 gUnknown_020297ED;
extern void sub_80C8A38(u8);
extern void sub_80C8AD0(u8);
extern void sub_80C8C80(u8);
-extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern u8 gBattleMonForms[];
extern u8 gDisplayedStringBattle[];
extern u16 gBattleTypeFlags;
@@ -51,32 +52,7 @@ extern u8 gBattlerSpriteIds[];
extern struct Window gWindowTemplate_Contest_MoveDescription;
u32 gContestRngValue;
-extern struct SpriteTemplate gUnknown_02024E8C;
-extern const struct ContestPokemon gContestOpponents[60];
-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 gUnknown_083CA33C[];
extern const u8 gUnknown_083CA340[][4];
-extern const struct SpriteSheet gUnknown_083CA350;
-extern const struct SpriteTemplate gSpriteTemplate_83CA3AC;
-extern const struct CompressedSpriteSheet gUnknown_083CA3C4[];
-extern const struct SpritePalette gUnknown_083CA3E4;
-extern const struct SpriteTemplate gSpriteTemplate_83CA3F4[];
-extern const struct SubspriteTable gSubspriteTables_83CA464[];
-extern const struct CompressedSpriteSheet gUnknown_083CA46C;
-extern const struct SpritePalette gUnknown_083CA474;
-extern const struct SpriteTemplate gSpriteTemplate_83CA484;
-extern const struct SpriteTemplate sSpriteTemplate_Judge;
-extern const struct CompressedSpriteSheet sSpriteSheet_Judge;
-extern const struct CompressedSpriteSheet sSpriteSheet_JudgeSymbols;
-extern const struct CompressedSpritePalette sSpritePalette_JudgeSymbols;
-extern const struct SpriteTemplate sSpriteTemplate_JudgeSpeechBubble;
-extern const struct CompressedSpriteSheet gUnknown_083CC3AC;
-extern const struct CompressedSpritePalette gUnknown_083CC3B4[];
-extern const struct SpriteTemplate gSpriteTemplate_83CC454[];
extern const u8 gText_Contest_WhichMoveWillBePlayed[];
extern const u8 gText_Contest_ButItCantParticipate[];
extern const u8 gUnknown_083CAFD7[];
@@ -95,175 +71,10 @@ extern const u8 ContestString_GotCrowdGoing[];
extern const u8 ContestString_CantAppealNextTurn[];
extern const u8 ContestString_CrowdWatches[];
extern const u8 ContestString_Ignored2[];
-extern const u8 *const gUnknown_083CC188[];
-extern const u8 gText_Contest_Shyness[];
-extern const u8 gText_Contest_Anxiety[];
-extern const u8 gText_Contest_Laziness[];
-extern const u8 gText_Contest_Hesitancy[];
-extern const u8 gText_Contest_Fear[];
extern const u8 *const gContestCategoryStrings[];
-extern const u8 gUnknown_083CC2EC[];
extern const u8 *const gUnknown_083CC330[];
extern const u8 gUnknownText_UnknownFormatting2[];
extern const u8 gUnknownText_UnknownFormatting3[];
-extern const u8 gUnknown_083CC59C[];
-extern const u8 gText_Slash[];
-extern const u16 gUnknown_083CC5A4[];
-extern const struct ContestWinner gUnknown_083CC5D0[];
-extern const u8 gUnknownText_MissedTurn[];
-extern const u8 gUnknownText_LinkStandbyAndWinner[];
-extern void (*const gContestEffectFuncs[])(void);
-extern const s8 gContestExcitementTable[][5];
-
-void sub_80AB350(void);
-void sub_80AB5D4(u8);
-void sub_80AB604(u8);
-void sub_80AB678(u8);
-void sub_80AB694(u8);
-void sub_80AB6B4(u8);
-u8 sub_80AB70C(u8 *);
-void sub_80AB960(u8);
-void sub_80AB9A0(u8);
-void ContestMainCallback2(void);
-void ContestVBlankCallback(void);
-void sub_80ABB70(u8);
-void sub_80ABC3C(u8);
-void sub_80ABC70(u8);
-void sub_80ABCDC(u8);
-void sub_80ABEA0(u8);
-void sub_80AC0AC(s8);
-void nullsub_17(s8);
-void sub_80AC0C8(u8);
-void sub_80AC15C(u8);
-void sub_80AC188(u8);
-void sub_80AC204(u8);
-void sub_80AC250(u8);
-void sub_80AC284(u8);
-void sub_80AC2CC(u8);
-void sub_80AD8DC(u8);
-void sub_80AD8FC(struct Sprite *);
-void sub_80AD92C(struct Sprite *);
-void sub_80AD960(u8);
-void sub_80ADA1C(u8);
-void sub_80ADA4C(u8);
-void sub_80ADAD8(u8);
-void sub_80ADB04(u8);
-void sub_80ADB48(u8);
-void sub_80ADB88(u8);
-void sub_80ADC10(u8);
-void sub_80ADC4C(u8);
-void sub_80ADC84(u8);
-void sub_80ADCB4(u8);
-void sub_80ADD04(u8);
-void sub_80ADD74(u8);
-void sub_80ADDA4(u8);
-void sub_80ADE54(u8);
-void sub_80ADEAC(u8);
-void sub_80ADEEC(u8);
-void sub_80ADF4C(u8);
-void sub_80ADF98(u8);
-void sub_80ADFD8(u8);
-void sub_80AE010(void);
-void InsertStringDigit(u8 *, s32);
-bool8 sub_80AE074(void);
-void __copy_tilemap(void *);
-void PrintContestantTrainerName(u8 contestant);
-void PrintContestantTrainerNameWithColor(u8 contestant, u8 color);
-void PrintContestantMonName(u8 contestant);
-void PrintContestantMonNameWithColor(u8 contestant, u8 color);
-u8 CreateJudgeSprite(void);
-u8 CreateJudgeSpeechBubbleSprite(void);
-u8 CreateContestantSprite(u16, u32, u32);
-void SwapMoveDescAndContestTilemaps(void);
-void PrintContestMoveDescription(u16);
-void sub_80AED58(void);
-bool8 UpdateConditionStars(u8, u8);
-bool8 DrawStatusSymbol(u8);
-void DrawStatusSymbols(void);
-void ContestClearGeneralTextWindow(void);
-u16 GetChosenMove(u8);
-void sub_80AF1B8(void);
-void sub_80AF2A0(u8);
-void sub_80AF2FC(void);
-void sub_80AF3C0(void);
-s16 GetContestantRound2Points(u8 a);
-void DetermineFinalStandings(void);
-bool8 DidContestantPlaceHigher(s32 a, s32 b, struct ContestFinalStandings *c);
-void ContestPrintLinkStandby(void);
-void sub_80AF94C(u8);
-void sub_80AFA5C(void);
-u16 sub_80AFB40(u8);
-s8 sub_80AFB74(s16);
-u8 sub_80AFBA0(s16, s16, u8);
-void sub_80AFC74(u8);
-void sub_80AFE30(void);
-void sub_80AFF10(void);
-bool8 sub_80AFF28(void);
-void sub_80AFF60(struct Sprite *);
-void sub_80AFFE0(bool8);
-void sub_80B0034(void);
-void CreateApplauseMeterSprite(void);
-void nullsub_18(s8);
-void sub_80B0238(struct Sprite *);
-void sub_80B0280(struct Sprite *);
-void sub_80B02A8(struct Sprite *);
-void sub_80B02F4(struct Sprite *);
-void sub_80B0324(void);
-void sub_80B03A8(u8);
-void sub_80B03D8(u8);
-void sub_80B0458(u8);
-void sub_80B0518(void);
-void sub_80B0548(u8);
-void sub_80B05A4(u8);
-void nullsub_19(int);
-void sub_80B05FC(u8);
-void sub_80B0748(u8);
-void sub_80B09B0(u8);
-u8 sub_80B09E4(u8);
-void sub_80B0BC4(u8, bool8);
-void sub_80B0C5C(struct Sprite *);
-void sub_80B0CB0(struct Sprite *);
-void sub_80B0CDC(u8, int);
-void unref_sub_80B0CF4(void);
-void sub_80B0D7C(void);
-void sub_80B1118(void);
-void sub_80B114C(u8);
-void sub_80B146C(u8, u8);
-void sub_80B159C(void);
-void sub_80B1710(u8);
-void sub_80B1928(void);
-u8 sub_80B1A2C(void);
-void c3_08130B10(u8);
-void sub_80B1B14(void);
-void sub_80B1B68(u8);
-void sub_80B1BDC(void);
-void sub_80B1C34(u8);
-void sub_80B1CBC(s8);
-void sub_80B1CFC(u8);
-void sub_80B1DDC(void);
-void sub_80B1DFC(u8);
-void sub_80B1EA8(s8, s8);
-void sub_80B1F4C(u8);
-void sub_80B1FD0(bool8);
-const u8 *GetTurnOrderNumberGfx(u8);
-void sub_80B20C4(void);
-void sub_80B2184(void);
-void sub_80B2280(void);
-void sub_80B237C(u8);
-void sub_80B23BC(u8);
-void sub_80B2400(u8);
-void sub_80B253C(u8);
-void sub_80B25A4(u8);
-void sub_80B25E4(u8);
-void sub_80B26C8(u8);
-u16 SanitizeMove(u16);
-u16 SanitizeSpecies(u16);
-void sub_80B2790(u8);
-void sub_80B28CC(int);
-void sub_80B28F0(u8);
-void sub_80B292C(void);
-void sub_80B2968(void);
-void SelectContestMoveBankTarget(u16);
EWRAM_DATA u8 gUnknown_0203856C = 0;
EWRAM_DATA struct ContestPokemon gContestMons[4] = {0};
@@ -336,7 +147,7 @@ void LoadContestBgAfterMoveAnim(void)
{
u32 var = 5 + i;
- LoadPalette(shared18000.unk18004[var], 16 * (5 + gContestantTurnOrder[i]), 16 * sizeof(u16));
+ LoadPalette(eContestTempSave.cachedWindowPalettes[var], 16 * (5 + gContestantTurnOrder[i]), 16 * sizeof(u16));
}
}
@@ -370,15 +181,15 @@ void ClearContestVars(void)
memset(&sContestantStatus[i], 0, sizeof(sContestantStatus[i]));
for (i = 0; i < 4; i++)
{
- sContestantStatus[i].unkB_0 = 0;
+ sContestantStatus[i].ranking = 0;
sContestantStatus[i].effectStringId = CONTEST_STRING_NONE;
sContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE;
}
- memset(&shared192D0, 0, sizeof(shared192D0));
+ memset(&eContestAppealResults, 0, sizeof(eContestAppealResults));
memset(eContestAI, 0, sizeof(struct ContestAIInfo));
- memset(&shared19328, 0, sizeof(shared19328));
- memset(shared19338, 0, 4 * sizeof(*shared19338));
+ memset(&eContestExcitement, 0, sizeof(eContestExcitement));
+ memset(eContestGfxState, 0, 4 * sizeof(*eContestGfxState));
if (!(gIsLinkContest & 1))
SortContestants(0);
for (i = 0; i < 4; i++)
@@ -386,7 +197,7 @@ void ClearContestVars(void)
sContestantStatus[i].nextTurnOrder = 0xFF;
sContest.unk19218[i] = gContestantTurnOrder[i];
}
- sub_80B159C();
+ ApplyNextTurnOrder();
}
void CB2_StartContest(void)
@@ -405,8 +216,8 @@ void CB2_StartContest(void)
ResetTasks();
FreeAllSpritePalettes();
gReservedSpritePaletteCount = 4;
- //shared18000.unk18000 = 0;
- gSharedMem[0x18000] = 0;
+ //eContestTempSave.unk18000 = 0;
+ eEnableContestDebugging = 0;
ClearBattleMonForms();
ClearContestVars();
gMain.state++;
@@ -497,14 +308,14 @@ u8 sub_80AB70C(u8 *a)
break;
case 2:
LZDecompressVram(gContestAudienceGfx, (void *)(VRAM + 0x2000));
- DmaCopyLarge32(3, (void *)(VRAM + 0x2000), shared15800, 0x2000, 0x1000);
+ DmaCopyLarge32(3, (void *)(VRAM + 0x2000), ewram15800, 0x2000, 0x1000);
break;
case 3:
LZDecompressVram(gUnknown_08D1725C, (void *)(VRAM + 0xD000));
break;
case 4:
LZDecompressVram(gUnknown_08D17424, (void *)(VRAM + 0xE000));
- DmaCopy32Defvars(3, (void *)(VRAM + 0xE000), shared18000.unk18A04, 0x800);
+ DmaCopy32Defvars(3, (void *)(VRAM + 0xE000), eContestTempSave.unk18A04, 0x800);
break;
case 5:
LoadCompressedPalette(gUnknown_08D17144, 0, 0x200);
@@ -512,11 +323,11 @@ u8 sub_80AB70C(u8 *a)
CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, sp20, 16 * sizeof(u16));
CpuCopy32(sp20, gPlttBufferUnfaded + 128, 16 * sizeof(u16));
CpuCopy32(sp0, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16));
- DmaCopy32Defvars(3, gPlttBufferUnfaded, shared18000.unk18004, 0x200);
+ DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedWindowPalettes, 0x200);
sub_80AB350();
break;
case 6:
- sub_80B1118();
+ DrawContestantWindows();
sub_80AFA5C();
SwapMoveDescAndContestTilemaps();
sContest.unk19216 = CreateJudgeSpeechBubbleSprite();
@@ -578,12 +389,12 @@ void sub_80AB9A0(u8 taskId)
case 3:
REG_BG0CNT_BITFIELD.priority = 0;
REG_BG2CNT_BITFIELD.priority = 0;
- sub_80B1B14();
+ SlideApplauseMeterIn();
gTasks[taskId].data[0]++;
break;
case 4:
default:
- if (sContest.unk1920A_6)
+ if (sContest.applauseMeterIsMoving)
break;
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
@@ -596,7 +407,7 @@ void ContestMainCallback2(void)
{
#if DEBUG
if (gUnknown_020297ED == 1 && gMain.newKeys == 4)
- unref_sub_80B0CF4();
+ ContestDebugTogglePointTotal();
#endif
AnimateSprites();
RunTasks();
@@ -628,8 +439,8 @@ void sub_80ABB70(u8 taskId)
{
gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0;
- sub_80B0D7C();
- DmaCopy32Defvars(3, gPlttBufferUnfaded, shared18000.unk18204, 0x400);
+ ContestDebugDoPrint();
+ DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.unk18204, 0x400);
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
StringCopy(gDisplayedStringBattle, gText_Contest_WhichMoveWillBePlayed);
else
@@ -686,7 +497,8 @@ void sub_80ABCDC(u8 taskId)
u8 *r5 = sp8;
if (sContestantStatus[gContestPlayerMonIndex].prevMove != MOVE_NONE
- && sub_80B214C(gContestPlayerMonIndex)
+ &&
+ IsContestantAllowedToCombo(gContestPlayerMonIndex)
&& AreMovesContestCombo(sContestantStatus[gContestPlayerMonIndex].prevMove, move) != 0
&& sContestantStatus[gContestPlayerMonIndex].hasJudgesAttention)
{
@@ -871,7 +683,7 @@ void debug_sub_80B9EBC(u8 taskId)
case 8:
gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0;
- sub_80B1BDC();
+ SlideApplauseMeterOut();
gTasks[taskId].data[0] = 0;
gTasks[taskId].func = debug_sub_80BA054;
break;
@@ -949,7 +761,7 @@ void debug_sub_80BA054(u8 taskId)
{
r6 = gTasks[taskId].data[2];
gSprites[r6].callback = sub_80AD92C;
- sub_80B1B14();
+ SlideApplauseMeterIn();
gTasks[taskId].data[3] = 0;
gTasks[taskId].data[0]++;
}
@@ -1020,8 +832,8 @@ void sub_80AC188(u8 taskId)
gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0;
sub_80AFFE0(FALSE);
- DmaCopy32Defvars(3, gPlttBufferFaded, shared18000.unk18604, 0x400);
- LoadPalette(shared18000.unk18204, 0, 0x400);
+ DmaCopy32Defvars(3, gPlttBufferFaded, eContestTempSave.unk18604, 0x400);
+ LoadPalette(eContestTempSave.unk18204, 0, 0x400);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
gTasks[taskId].func = sub_80AC204;
@@ -1034,7 +846,7 @@ void sub_80AC204(u8 taskId)
gTasks[taskId].data[0] = 0;
if (++gTasks[taskId].data[1] == 2)
{
- sub_80B1BDC();
+ SlideApplauseMeterOut();
sub_80B25E4(1);
gTasks[taskId].func = sub_80AC250;
}
@@ -1043,7 +855,7 @@ void sub_80AC204(u8 taskId)
void sub_80AC250(u8 taskId)
{
- if (!sContest.unk1920A_6 && !sContest.unk1920B_1)
+ if (!sContest.applauseMeterIsMoving && !sContest.unk1920B_1)
gTasks[taskId].func = sub_80AC284;
}
@@ -1068,8 +880,8 @@ void sub_80AC2CC(u8 taskId)
switch (gTasks[taskId].data[0])
{
case 0:
- sub_80B0D7C();
- for (i = 0; sContest.unk19214 != shared192D0.turnOrder[i]; i++)
+ ContestDebugDoPrint();
+ for (i = 0; sContest.unk19214 != eContestAppealResults.turnOrder[i]; i++)
;
sContest.unk19215 = i;
r7 = sContest.unk19215;
@@ -1078,8 +890,8 @@ void sub_80AC2CC(u8 taskId)
u8 taskId2;
sContest.unk1920B_2 = 1;
- if (sub_80AE074())
- sub_80B114C(sContest.unk19215);
+ if (IsPlayerLinkLeader())
+ CalculateAppealMoveImpact(sContest.unk19215);
taskId2 = CreateTask(sub_80C8C80, 0);
SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC);
ContestPrintLinkStandby();
@@ -1087,7 +899,7 @@ void sub_80AC2CC(u8 taskId)
}
else
{
- sub_80B114C(sContest.unk19215);
+ CalculateAppealMoveImpact(sContest.unk19215);
gTasks[taskId].data[0] = 2;
}
return;
@@ -1122,14 +934,14 @@ void sub_80AC2CC(u8 taskId)
gSprites[spriteId].callback = sub_80AD8FC;
gTasks[taskId].data[2] = spriteId;
gBattlerSpriteIds[gBattlerAttacker] = spriteId;
- sub_80B0BC4(sub_80B09E4(sContest.unk19215), FALSE);
+ BlinkContestantBox(CreateContestantBoxBlinkSprites(sContest.unk19215), FALSE);
gTasks[taskId].data[0] = 4;
return;
case 4:
spriteId = gTasks[taskId].data[2];
if (gSprites[spriteId].callback == SpriteCallbackDummy)
{
- if (!shared19338[r7].unk2_1)
+ if (!eContestGfxState[r7].boxBlinking)
gTasks[taskId].data[0] = 5;
}
return;
@@ -1199,7 +1011,7 @@ void sub_80AC2CC(u8 taskId)
gTasks[taskId].data[1] = 0;
if (sContestantStatus[r7].effectStringId != CONTEST_STRING_NONE)
{
- sub_80B146C(r7, sContestantStatus[r7].effectStringId);
+ PrintAppealMoveResultText(r7, sContestantStatus[r7].effectStringId);
sContestantStatus[r7].effectStringId = CONTEST_STRING_NONE;
gTasks[taskId].data[0] = 24;
}
@@ -1214,7 +1026,7 @@ void sub_80AC2CC(u8 taskId)
}
if (i == 4)
{
- sub_80B146C(r7, sContestantStatus[r7].effectStringId2);
+ PrintAppealMoveResultText(r7, sContestantStatus[r7].effectStringId2);
sContestantStatus[r7].effectStringId2 = CONTEST_STRING_NONE;
gTasks[taskId].data[0] = 24;
}
@@ -1236,15 +1048,15 @@ void sub_80AC2CC(u8 taskId)
case 48:
if (sContestantStatus[r7].turnOrderModAction == 1)
{
- sub_80B1710(5);
+ DoJudgeSpeechBubble(5);
}
else if (sContestantStatus[r7].turnOrderModAction == 2)
{
- sub_80B1710(6);
+ DoJudgeSpeechBubble(6);
}
else if (sContestantStatus[r7].turnOrderModAction == 3)
{
- sub_80B1710(7);
+ DoJudgeSpeechBubble(7);
}
else
{
@@ -1254,7 +1066,7 @@ void sub_80AC2CC(u8 taskId)
gTasks[taskId].data[0] = 49;
return;
case 49:
- if (!sContest.unk1920A_4)
+ if (!sContest.waitForJudgeSpeechBubble)
gTasks[taskId].data[0] = 47;
return;
case 47:
@@ -1262,20 +1074,20 @@ void sub_80AC2CC(u8 taskId)
gTasks[taskId].data[0] = 12;
return;
case 12:
- sub_80AFBA0(0, sContestantStatus[r7].appeal2, r7);
+ sub_80AFBA0(0, sContestantStatus[r7].appeal, r7);
gTasks[taskId].data[0] = 13;
return;
case 13:
- if (!shared19338[sContest.unk19215].unk2_2)
+ if (!eContestGfxState[sContest.unk19215].unk2_2)
gTasks[taskId].data[0] = 35;
return;
case 35:
if (sContestantStatus[r7].conditionMod == 1)
- sub_80B1710(8);
+ DoJudgeSpeechBubble(8);
gTasks[taskId].data[0] = 36;
return;
case 36:
- if (!sContest.unk1920A_4)
+ if (!sContest.waitForJudgeSpeechBubble)
gTasks[taskId].data[0] = 37;
return;
case 37:
@@ -1328,7 +1140,7 @@ void sub_80AC2CC(u8 taskId)
if (r4)
{
gTasks[taskId].data[1] = gContestantTurnOrder[r2];
- sub_80B146C(r2, sContestantStatus[r2].effectStringId);
+ PrintAppealMoveResultText(r2, sContestantStatus[r2].effectStringId);
sContestantStatus[r2].effectStringId = CONTEST_STRING_NONE;
gTasks[taskId].data[0] = 27;
}
@@ -1348,13 +1160,13 @@ void sub_80AC2CC(u8 taskId)
case 28:
for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++)
;
- sub_80AFBA0(sContestantStatus[i].appeal2 + sContestantStatus[i].jam, -sContestantStatus[i].jam, i);
+ sub_80AFBA0(sContestantStatus[i].appeal + sContestantStatus[i].jam, -sContestantStatus[i].jam, i);
gTasks[taskId].data[0] = 29;
return;
case 29:
for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++)
;
- if (!shared19338[i].unk2_2)
+ if (!eContestGfxState[i].unk2_2)
gTasks[taskId].data[0] = 39;
return;
case 39:
@@ -1413,15 +1225,15 @@ void sub_80AC2CC(u8 taskId)
case 52:
if (Text_UpdateWindowInContest(&gMenuWindow) != 0)
{
- if (!sContestantStatus[r7].unk15_6)
+ if (!sContestantStatus[r7].usedComboMove)
gTasks[taskId].data[0] = 17;
else
gTasks[taskId].data[0] = 14;
}
return;
case 14:
- r4 = sContestantStatus[r7].unk16;
- if (sContestantStatus[r7].unk16 != 0)
+ r4 = sContestantStatus[r7].completedCombo;
+ if (sContestantStatus[r7].completedCombo != 0)
{
ContestClearGeneralTextWindow();
if (r4 == 1)
@@ -1430,7 +1242,7 @@ void sub_80AC2CC(u8 taskId)
Text_InitWindow8002EB0(&gMenuWindow, ContestString_WentOverVeryWell, 776, 1, 15);
else
Text_InitWindow8002EB0(&gMenuWindow, ContestString_AppealComboExcellently, 776, 1, 15);
- sub_80B1710(3);
+ DoJudgeSpeechBubble(3);
gTasks[taskId].data[10] = 0;
gTasks[taskId].data[0] = 45;
}
@@ -1440,15 +1252,15 @@ void sub_80AC2CC(u8 taskId)
StringCopy(gStringVar1, gContestMons[r7].nickname);
StringExpandPlaceholders(gStringVar4, ContestString_JudgeExpectantly2);
Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
- sub_80B1710(2);
+ DoJudgeSpeechBubble(2);
gTasks[taskId].data[10] = 0;
gTasks[taskId].data[0] = 45;
}
return;
case 45:
- if (!sContest.unk1920A_4)
+ if (!sContest.waitForJudgeSpeechBubble)
{
- sub_80B09B0(sContest.unk19215);
+ StartStopFlashJudgeAttentionEye(sContest.unk19215);
gTasks[taskId].data[0] = 15;
}
return;
@@ -1460,17 +1272,17 @@ void sub_80AC2CC(u8 taskId)
if (!sContestantStatus[r7].hasJudgesAttention)
{
sub_80AFBA0(
- sContestantStatus[r7].appeal2,
- sContestantStatus[r7].unk17,
+ sContestantStatus[r7].appeal,
+ sContestantStatus[r7].comboAppealBonus,
r7);
- sContestantStatus[r7].appeal2 += sContestantStatus[r7].unk17;
+ sContestantStatus[r7].appeal += sContestantStatus[r7].comboAppealBonus;
}
gTasks[taskId].data[0] = 16;
}
}
return;
case 16:
- if (!shared19338[r7].unk2_2)
+ if (!eContestGfxState[r7].unk2_2)
{
gTasks[taskId].data[10] = 0;
gTasks[taskId].data[0] = 17;
@@ -1484,7 +1296,7 @@ void sub_80AC2CC(u8 taskId)
StringExpandPlaceholders(gStringVar4, ContestString_DissapointedRepeat);
Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
gTasks[taskId].data[10] = 0;
- sub_80B1710(0);
+ DoJudgeSpeechBubble(0);
gTasks[taskId].data[0] = 46;
}
else
@@ -1493,20 +1305,20 @@ void sub_80AC2CC(u8 taskId)
}
return;
case 46:
- if (!sContest.unk1920A_4)
+ if (!sContest.waitForJudgeSpeechBubble)
gTasks[taskId].data[0] = 19;
return;
case 19:
if (Text_UpdateWindowInContest(&gMenuWindow) != 0)
{
- sub_80AFBA0(sContestantStatus[r7].appeal2, -sContestantStatus[r7].unk18, r7);
- sContestantStatus[r7].appeal2 -= sContestantStatus[r7].unk18;
+ sub_80AFBA0(sContestantStatus[r7].appeal, -sContestantStatus[r7].unk18, r7);
+ sContestantStatus[r7].appeal -= sContestantStatus[r7].unk18;
gTasks[taskId].data[0] = 18;
}
return;
case 18:
- sub_80B0D7C();
- if (!shared19338[r7].unk2_2)
+ ContestDebugDoPrint();
+ if (!eContestGfxState[r7].unk2_2)
{
gTasks[taskId].data[10] = 0;
ContestClearGeneralTextWindow();
@@ -1514,13 +1326,13 @@ void sub_80AC2CC(u8 taskId)
}
return;
case 41:
- if (shared19328.excitementFrozen && r7 != shared19328.excitementFreezer)
+ if (eContestExcitement.excitementFrozen && r7 != eContestExcitement.excitementFreezer)
{
gTasks[taskId].data[0] = 57;
}
else
{
- r4 = shared19328.bits_0;
+ r4 = eContestExcitement.moveExcitement;
if (sContestantStatus[r7].overrideCategoryExcitementMod)
{
r4 = 1;
@@ -1573,12 +1385,12 @@ void sub_80AC2CC(u8 taskId)
case 1:
if (!sContest.unk1920B_0 && Text_UpdateWindowInContest(&gMenuWindow) != 0)
{
- sub_80B1CBC(-1);
+ ShowAndUpdateApplauseMeter(-1);
gTasks[taskId].data[10]++;
}
break;
case 2:
- if (!sContest.unk1920A_5)
+ if (!sContest.isShowingApplauseMeter)
{
if (gTasks[taskId].data[11]++ > 29)
{
@@ -1611,28 +1423,28 @@ void sub_80AC2CC(u8 taskId)
case 1:
if (!sContest.unk1920B_0)
{
- sub_80B1DDC();
+ AnimateAudience();
PlaySE(SE_M_ENCORE2);
- sub_80B1CBC(1);
+ ShowAndUpdateApplauseMeter(1);
gTasks[taskId].data[10]++;
}
break;
case 2:
- if (!sContest.unk1920A_5)
+ if (!sContest.isShowingApplauseMeter)
{
if (gTasks[taskId].data[11]++ > 29)
{
gTasks[taskId].data[11] = 0;
- sub_80AFBA0(sContestantStatus[r7].appeal2, shared19328.unk2, r7);
- sContestantStatus[r7].appeal2 += shared19328.unk2;
+ sub_80AFBA0(sContestantStatus[r7].appeal, eContestExcitement.excitementAppealBonus, r7);
+ sContestantStatus[r7].appeal += eContestExcitement.excitementAppealBonus;
gTasks[taskId].data[10]++;
}
}
break;
case 3:
- if (!shared19338[r7].unk2_2)
+ if (!eContestGfxState[r7].unk2_2)
{
- if (!sContest.unk1920A_7)
+ if (!sContest.animatingAudience)
{
sub_80B1EA8(1, -1);
gTasks[taskId].data[10]++;
@@ -1650,7 +1462,7 @@ void sub_80AC2CC(u8 taskId)
}
return;
case 43:
- if (!shared19338[r7].unk2_2)
+ if (!eContestGfxState[r7].unk2_2)
{
ContestClearGeneralTextWindow();
gTasks[taskId].data[0] = 55;
@@ -1658,7 +1470,7 @@ void sub_80AC2CC(u8 taskId)
return;
case 57:
ContestClearGeneralTextWindow();
- StringCopy(gStringVar3, gContestMons[shared19328.excitementFreezer].nickname);
+ StringCopy(gStringVar3, gContestMons[eContestExcitement.excitementFreezer].nickname);
StringCopy(gStringVar1, gContestMons[r7].nickname);
StringCopy(gStringVar2, gMoveNames[sContestantStatus[r7].currMove]);
StringExpandPlaceholders(gStringVar4, ContestString_CrowdWatches);
@@ -1684,7 +1496,7 @@ void sub_80AC2CC(u8 taskId)
case 33:
if (sContestantStatus[r7].hasJudgesAttention)
sContestantStatus[r7].hasJudgesAttention = 0;
- sub_80B09B0(r7);
+ StartStopFlashJudgeAttentionEye(r7);
StringCopy(gStringVar1, gContestMons[r7].nickname);
StringCopy(gStringVar2, gMoveNames[sContestantStatus[r7].currMove]);
StringExpandPlaceholders(gStringVar4, gUnknown_083CBF60);
@@ -1696,16 +1508,16 @@ void sub_80AC2CC(u8 taskId)
gTasks[taskId].data[0] = 55;
return;
case 55:
- sub_80B1BDC();
+ SlideApplauseMeterOut();
gTasks[taskId].data[0] = 56;
return;
case 56:
- if (!sContest.unk1920A_6)
+ if (!sContest.applauseMeterIsMoving)
{
if (sContest.applauseLevel > 4)
{
sContest.applauseLevel = 0;
- sub_80B1928();
+ UpdateApplauseMeter();
}
gTasks[taskId].data[0] = 10;
}
@@ -1807,7 +1619,7 @@ void sub_80AD960(u8 taskId)
u8 taskId2;
sContest.unk1920B_2 = 1;
- if (sub_80AE074())
+ if (IsPlayerLinkLeader())
{
sub_80AF2FC();
sub_80AF3C0();
@@ -1882,7 +1694,7 @@ void sub_80ADAD8(u8 taskId)
void sub_80ADB04(u8 taskId)
{
- DmaCopy32Defvars(3, shared18000.unk18204, gPlttBufferUnfaded, 0x400);
+ DmaCopy32Defvars(3, eContestTempSave.unk18204, gPlttBufferUnfaded, 0x400);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 2;
gTasks[taskId].func = sub_80ADB48;
@@ -1915,7 +1727,7 @@ void sub_80ADC10(u8 taskId)
{
gTasks[taskId].data[0] = 0;
gTasks[taskId].func = sub_80ADC4C;
- sub_80B0D7C();
+ ContestDebugDoPrint();
}
}
@@ -1960,14 +1772,14 @@ void sub_80ADD04(u8 taskId)
}
else
{
- sub_80B1B14();
+ SlideApplauseMeterIn();
gTasks[taskId].func = sub_80ADD74;
}
}
void sub_80ADD74(u8 taskId)
{
- if (!sContest.unk1920A_6)
+ if (!sContest.applauseMeterIsMoving)
gTasks[taskId].func = sub_80ABB70;
}
@@ -2085,3447 +1897,4 @@ void InsertStringDigit(u8 *str, s32 n)
}
}
-void sub_80AE054(void)
-{
- if (!(gIsLinkContest & 1))
- gContestPlayerMonIndex = 3;
-}
-
-bool8 sub_80AE074(void)
-{
- if (gContestPlayerMonIndex == gContestLinkLeaderIndex)
- return TRUE;
- else
- return FALSE;
-}
-
-void Contest_CreatePlayerMon(u8 partyIndex)
-{
- u8 name[20];
- u16 heldItem;
- s16 cool;
- s16 beauty;
- s16 cute;
- s16 smart;
- s16 tough;
-
- StringCopy(name, gSaveBlock2.playerName);
- Text_StripExtCtrlCodes(name);
- if (gIsLinkContest & 1)
- {
- u8 temp = name[5];
-
- name[5] = EOS;
- name[7] = temp;
- }
- memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, 8);
- if (gSaveBlock2.playerGender == MALE)
- gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN;
- else
- gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_MAY;
- gContestMons[gContestPlayerMonIndex].flags = 0;
- gContestMons[gContestPlayerMonIndex].unk2C[0] = 0;
- gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES);
- GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name);
- StringGetEnd10(name);
- if (gIsLinkContest & 1)
- {
- Text_StripExtCtrlCodes(name);
- if (GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE)
- {
- name[5] = EOS;
- name[10] = EXT_CTRL_CODE_BEGIN;
- }
- else
- {
- u8 temp = name[5];
-
- name[5] = EOS;
- name[10] = temp;
- }
- }
- memcpy(gContestMons[gContestPlayerMonIndex].nickname, name, 11);
- gContestMons[gContestPlayerMonIndex].cool = GetMonData(&gPlayerParty[partyIndex], MON_DATA_COOL);
- gContestMons[gContestPlayerMonIndex].beauty = GetMonData(&gPlayerParty[partyIndex], MON_DATA_BEAUTY);
- gContestMons[gContestPlayerMonIndex].cute = GetMonData(&gPlayerParty[partyIndex], MON_DATA_CUTE);
- gContestMons[gContestPlayerMonIndex].smart = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SMART);
- gContestMons[gContestPlayerMonIndex].tough = GetMonData(&gPlayerParty[partyIndex], MON_DATA_TOUGH);
- gContestMons[gContestPlayerMonIndex].sheen = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SHEEN);
- gContestMons[gContestPlayerMonIndex].moves[0] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1);
- gContestMons[gContestPlayerMonIndex].moves[1] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE2);
- gContestMons[gContestPlayerMonIndex].moves[2] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE3);
- gContestMons[gContestPlayerMonIndex].moves[3] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE4);
- gContestMons[gContestPlayerMonIndex].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY);
- gContestMons[gContestPlayerMonIndex].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID);
-
- heldItem = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM);
- cool = gContestMons[gContestPlayerMonIndex].cool;
- beauty = gContestMons[gContestPlayerMonIndex].beauty;
- cute = gContestMons[gContestPlayerMonIndex].cute;
- smart = gContestMons[gContestPlayerMonIndex].smart;
- tough = gContestMons[gContestPlayerMonIndex].tough;
- if (heldItem == ITEM_RED_SCARF)
- cool += 20;
- else if (heldItem == ITEM_BLUE_SCARF)
- beauty += 20;
- else if (heldItem == ITEM_PINK_SCARF)
- cute += 20;
- else if (heldItem == ITEM_GREEN_SCARF)
- smart += 20;
- else if (heldItem == ITEM_YELLOW_SCARF)
- tough += 20;
- if (cool > 255)
- cool = 255;
- if (beauty > 255)
- beauty = 255;
- if (cute > 255)
- cute = 255;
- if (smart > 255)
- smart = 255;
- if (tough > 255)
- tough = 255;
- gContestMons[gContestPlayerMonIndex].cool = cool;
- gContestMons[gContestPlayerMonIndex].beauty = beauty;
- gContestMons[gContestPlayerMonIndex].cute = cute;
- gContestMons[gContestPlayerMonIndex].smart = smart;
- gContestMons[gContestPlayerMonIndex].tough = tough;
-}
-
-void Contest_InitAllPokemon(u8 contestType, u8 rank)
-{
- s32 i;
- u8 opponentsCount = 0;
- u8 opponents[64];
-
- sub_80AE054();
-
- // Find all suitable opponents
- for (i = 0; i < 60; i++)
- {
- if (rank == gContestOpponents[i].whichRank)
- {
- if (contestType == 0 && gContestOpponents[i].aiPool_Cool)
- opponents[opponentsCount++] = i;
- else if (contestType == 1 && gContestOpponents[i].aiPool_Beauty)
- opponents[opponentsCount++] = i;
- else if (contestType == 2 && gContestOpponents[i].aiPool_Cute)
- opponents[opponentsCount++] = i;
- else if (contestType == 3 && gContestOpponents[i].aiPool_Smart)
- opponents[opponentsCount++] = i;
- else if (contestType == 4 && gContestOpponents[i].aiPool_Tough)
- opponents[opponentsCount++] = i;
- }
- }
- opponents[opponentsCount] = 0xFF;
-
- // Choose three random opponents from the list
- for (i = 0; i < 3; i++)
- {
- u16 rnd = Random() % opponentsCount;
- s32 j;
-
- gContestMons[i] = gContestOpponents[opponents[rnd]];
- for (j = rnd; opponents[j] != 0xFF; j++)
- opponents[j] = opponents[j + 1];
- opponentsCount--;
- }
-
-#ifndef NONMATCHING
- // Compiler, please put i in r5. Thanks.
- asm(""::"r"(i));
- asm(""::"r"(i));
- asm(""::"r"(i));
- asm(""::"r"(i));
- asm(""::"r"(i));
-#endif
-
- Contest_CreatePlayerMon(gContestMonPartyIndex);
-}
-
-// GetContestAvailability?
-u8 CanMonParticipateInContest(struct Pokemon *pkmn)
-{
- u8 ribbon;
- u8 retVal;
-
- if (GetMonData(pkmn, MON_DATA_IS_EGG))
- return 3;
- if (GetMonData(pkmn, MON_DATA_HP) == 0)
- return 4;
- switch (gSpecialVar_ContestCategory)
- {
- case CONTEST_CATEGORY_COOL:
- ribbon = GetMonData(pkmn, MON_DATA_COOL_RIBBON);
- break;
- case CONTEST_CATEGORY_BEAUTY:
- ribbon = GetMonData(pkmn, MON_DATA_BEAUTY_RIBBON);
- break;
- case CONTEST_CATEGORY_CUTE:
- ribbon = GetMonData(pkmn, MON_DATA_CUTE_RIBBON);
- break;
- case CONTEST_CATEGORY_SMART:
- ribbon = GetMonData(pkmn, MON_DATA_SMART_RIBBON);
- break;
- case CONTEST_CATEGORY_TOUGH:
- ribbon = GetMonData(pkmn, MON_DATA_TOUGH_RIBBON);
- break;
- default:
- return 0;
- }
-
- // Couldn't get this to match any other way.
- // Returns 2, 1, or 0 respectively if ribbon's rank is above, equal, or below
- // the current contest rank.
- if (ribbon > gSpecialVar_ContestRank)
- retVal = 2;
- else if (ribbon >= gSpecialVar_ContestRank)
- retVal = 1;
- else
- retVal = 0;
- return retVal;
-}
-
-void sub_80AE514(void)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- {
- Text_FillWindowRectDefPalette(
- &gWindowTemplate_Contest_MoveDescription,
- 0,
- gUnknown_083CA308[gContestantTurnOrder[i]][0],
- gUnknown_083CA308[gContestantTurnOrder[i]][1],
- gUnknown_083CA310[gContestantTurnOrder[i]][0] + 5,
- gUnknown_083CA310[gContestantTurnOrder[i]][1] + 1);
- PrintContestantTrainerName(i);
- PrintContestantMonName(i);
- }
-}
-
-u8 *Contest_CopyStringWithColor(u8 *dest, const u8 *src, u8 color)
-{
- dest = StringCopy(dest, gUnknown_083CC59C); // {HIGHLIGHT TRANSPARENT}{COLOR}$
- *dest++ = color;
- dest = StringCopy(dest, src);
- return dest;
-}
-
-void PrintContestantTrainerName(u8 contestant)
-{
- PrintContestantTrainerNameWithColor(contestant, contestant + 10);
-}
-
-void PrintContestantTrainerNameWithColor(u8 contestant, u8 color)
-{
- u8 *str = gDisplayedStringBattle;
-
- str = Contest_CopyStringWithColor(str, gEmptyString_81E72B0, color);
- str[0] = EXT_CTRL_CODE_BEGIN;
- str[1] = EXT_CTRL_CODE_SIZE;
- str[2] = 4;
- str += 3;
-
- *str++ = CHAR_SLASH;
-
- if ((gIsLinkContest & 1) && gLinkPlayers[contestant].language == LANGUAGE_JAPANESE)
- {
- StringCopy(str, gLinkPlayers[contestant].name);
- Text_InitWindow8004D04(
- &gWindowTemplate_Contest_MoveDescription,
- gDisplayedStringBattle,
- 592 + gContestantTurnOrder[contestant] * 22,
- 251 + gUnknown_083CA310[gContestantTurnOrder[contestant]][0] * 8,
- gUnknown_083CA310[gContestantTurnOrder[contestant]][1] * 8,
- 1);
- }
- else
- {
- StringCopy(str, gContestMons[contestant].trainerName);
- Text_InitWindowAndPrintText(
- &gWindowTemplate_Contest_MoveDescription,
- gDisplayedStringBattle,
- 592 + gContestantTurnOrder[contestant] * 22,
- gUnknown_083CA310[gContestantTurnOrder[contestant]][0],
- gUnknown_083CA310[gContestantTurnOrder[contestant]][1]);
- }
-}
-
-void PrintContestantMonName(u8 contestant)
-{
- PrintContestantMonNameWithColor(contestant, contestant + 10);
-}
-
-void PrintContestantMonNameWithColor(u8 contestant, u8 color)
-{
- u8 *str = gDisplayedStringBattle;
-
- str[0] = EXT_CTRL_CODE_BEGIN;
- str[1] = EXT_CTRL_CODE_SIZE;
- str[2] = 4;
- str += 3;
-
- str = Contest_CopyStringWithColor(str, gContestMons[contestant].nickname, color);
- *str = EOS;
-
- Text_InitWindow8004D04(
- &gWindowTemplate_Contest_MoveDescription,
- gDisplayedStringBattle,
- 512 + gContestantTurnOrder[contestant] * 20,
- 253 + gUnknown_083CA308[gContestantTurnOrder[contestant]][0] * 8,
- gUnknown_083CA308[gContestantTurnOrder[contestant]][1] * 8,
- 1);
-}
-
-u16 CalculateContestantRound1Points(u8 who, u8 contestCategory)
-{
- u8 statMain;
- u8 statSub1;
- u8 statSub2;
-
- switch (contestCategory)
- {
- case CONTEST_CATEGORY_COOL:
- statMain = gContestMons[who].cool;
- statSub1 = gContestMons[who].tough;
- statSub2 = gContestMons[who].beauty;
- break;
- case CONTEST_CATEGORY_BEAUTY:
- statMain = gContestMons[who].beauty;
- statSub1 = gContestMons[who].cool;
- statSub2 = gContestMons[who].cute;
- break;
- case CONTEST_CATEGORY_CUTE:
- statMain = gContestMons[who].cute;
- statSub1 = gContestMons[who].beauty;
- statSub2 = gContestMons[who].smart;
- break;
- case CONTEST_CATEGORY_SMART:
- statMain = gContestMons[who].smart;
- statSub1 = gContestMons[who].cute;
- statSub2 = gContestMons[who].tough;
- break;
- case CONTEST_CATEGORY_TOUGH:
- default:
- statMain = gContestMons[who].tough;
- statSub1 = gContestMons[who].smart;
- statSub2 = gContestMons[who].cool;
- break;
- }
- return statMain + (statSub1 + statSub2 + gContestMons[who].sheen) / 2;
-}
-
-void CalculateRound1Points(u8 contestCategory)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- gContestMonRound1Points[i] = CalculateContestantRound1Points(i, contestCategory);
-}
-
-u8 CreateJudgeSprite(void)
-{
- u8 spriteId;
-
- LoadCompressedObjectPic(&sSpriteSheet_Judge);
- LoadCompressedPalette(gContest2Pal, 0x110, 32);
- spriteId = CreateSprite(&sSpriteTemplate_Judge, 112, 36, 30);
- gSprites[spriteId].oam.paletteNum = 1;
- gSprites[spriteId].callback = SpriteCallbackDummy;
- return spriteId;
-}
-
-u8 CreateJudgeSpeechBubbleSprite(void)
-{
- u8 spriteId;
-
- LoadCompressedObjectPic(&sSpriteSheet_JudgeSymbols);
- LoadCompressedObjectPalette(&sSpritePalette_JudgeSymbols);
- spriteId = CreateSprite(&sSpriteTemplate_JudgeSpeechBubble, 96, 10, 29);
- gSprites[spriteId].invisible = TRUE;
- gSprites[spriteId].data[0] = gSprites[spriteId].oam.tileNum;
- return spriteId;
-}
-
-u8 unref_sub_80AE908(void)
-{
- u16 species = gContestMons[gContestPlayerMonIndex].species;
- u8 spriteId;
-
- DecompressPicFromTable_2(
- &gMonFrontPicTable[species],
- gMonFrontPicCoords[species].coords,
- gMonFrontPicCoords[species].y_offset,
- (void *)EWRAM,
- gMonSpriteGfx_Sprite_ptr[1],
- species);
- LoadCompressedPalette(gMonPaletteTable[species].data, 0x110, 32);
- GetMonSpriteTemplate_803C56C(gContestMons[gContestPlayerMonIndex].species, 1);
- spriteId = CreateSprite(
- &gUnknown_02024E8C,
- 112, 80 + (8 - gMonFrontPicCoords[gContestMons[gContestPlayerMonIndex].species].coords) * 4,
- 30);
- gSprites[spriteId].oam.paletteNum = 1;
- gSprites[spriteId].callback = SpriteCallbackDummy;
- gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7C18;
- StartSpriteAffineAnim(&gSprites[spriteId], 0);
- return spriteId;
-}
-
-u8 CreateContestantSprite(u16 species, u32 otId, u32 personality)
-{
- const u8 *lzPaletteData;
- u8 spriteId;
-
- species = SanitizeSpecies(species);
- HandleLoadSpecialPokePic(
- &gMonBackPicTable[species],
- gMonBackPicCoords[species].coords,
- gMonBackPicCoords[species].y_offset,
- EWRAM,
- gMonSpriteGfx_Sprite_ptr[0],
- species,
- 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);
- gSprites[spriteId].oam.paletteNum = 2;
- gSprites[spriteId].oam.priority = 2;
- gSprites[spriteId].subpriority = GetBattlerSubpriority(2);
- gSprites[spriteId].callback = SpriteCallbackDummy;
- gSprites[spriteId].data[0] = gSprites[spriteId].oam.paletteNum;
- gSprites[spriteId].data[2] = species;
- if (IsSpeciesNotUnown(species))
- gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7C18;
- else
- gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7BEC;
- StartSpriteAffineAnim(&gSprites[spriteId], 0);
- return spriteId;
-}
-
-bool8 IsSpeciesNotUnown(u16 species)
-{
- if (species == SPECIES_UNOWN)
- return FALSE;
- else
- return TRUE;
-}
-
-void SwapMoveDescAndContestTilemaps(void)
-{
- __copy_tilemap((void *)(VRAM + 0xC000));
- __copy_tilemap((void *)(VRAM + 0xE000));
-}
-
-void __copy_tilemap(void *a)
-{
- DmaCopy16Defvars(3, a, (u8 *)a + 0x500, 0x280);
-}
-
-u16 GetMoveEffectSymbolTileOffset(u16 move, u8 b)
-{
- u16 var;
-
- switch (gContestEffects[gContestMoves[move].effect].effectType)
- {
- case 0:
- case 1:
- case 8:
- var = 0x9082;
- break;
- case 2:
- case 3:
- var = 0x9088;
- break;
- default:
- var = 0x9086;
- break;
- }
- var += 0x9000 + (b << 12);
- return var;
-}
-
-void PrintContestMoveDescription(u16 a)
-{
- u8 category;
- u16 categoryTile;
- s32 i;
- u8 numHearts;
-
- Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 0, 11, 31, 16, 34);
-
- category = gContestMoves[a].contestCategory;
- if (category == CONTEST_CATEGORY_COOL)
- categoryTile = 0x4040;
- else if (category == CONTEST_CATEGORY_BEAUTY)
- categoryTile = 0x4045;
- else if (category == CONTEST_CATEGORY_CUTE)
- categoryTile = 0x404A;
- else if (category == CONTEST_CATEGORY_SMART)
- categoryTile = 0x406A;
- else
- categoryTile = 0x408A;
-
- for (i = 0; i < 5; i++)
- {
- *(u16 *)(VRAM + 0xC7D6 + i * 2) = categoryTile;
- *(u16 *)(VRAM + 0xC816 + i * 2) = categoryTile + 16;
- categoryTile++;
- }
-
- if (gContestEffects[gContestMoves[a].effect].appeal == 0xFF)
- numHearts = 0;
- else
- numHearts = gContestEffects[gContestMoves[a].effect].appeal / 10;
- if (numHearts > 8)
- numHearts = 8;
- for (i = 0; i < 8; i++)
- {
- if (i < numHearts) // Empty hearts
- *(u16 *)(VRAM + 0xC7EA + i * 2) = 0x5012;
- else // Filled-in hearts
- *(u16 *)(VRAM + 0xC7EA + i * 2) = 0x5035;
- }
-
- if (gContestEffects[gContestMoves[a].effect].jam == 0xFF)
- numHearts = 0;
- else
- numHearts = gContestEffects[gContestMoves[a].effect].jam / 10;
- if (numHearts > 8)
- numHearts = 8;
- for (i = 0; i < 8; i++)
- {
- if (i < numHearts) // Empty hearts
- *(u16 *)(VRAM + 0xC82A + i * 2) = 0x5014;
- else // Filled-in hearts
- *(u16 *)(VRAM + 0xC82A + i * 2) = 0x5036;
- }
-
- Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gContestEffectStrings[gContestMoves[a].effect], 868, 11, 35);
- Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gText_Slash, 866, 16, 31);
-}
-
-void sub_80AED58(void)
-{
- Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 0, 11, 35, 28, 40);
-}
-
-// unused
-void DrawMoveEffectSymbol(u16 move, u8 b)
-{
- u8 r5 = gContestantTurnOrder[b] * 5 + 2;
-
- if (!Contest_IsMonsTurnDisabled(b) && move != MOVE_NONE)
- {
- u16 tile = GetMoveEffectSymbolTileOffset(move, b);
-
- *(u16 *)(VRAM + 0xC028 + r5 * 64) = tile;
- *(u16 *)(VRAM + 0xC028 + r5 * 64 + 2) = tile + 1;
-
- *(u16 *)(VRAM + 0xC068 + r5 * 64) = tile + 16;
- *(u16 *)(VRAM + 0xC068 + r5 * 64 + 2) = tile + 17;
-
- }
- else
- {
- *(u16 *)(VRAM + 0xC028 + r5 * 64) = 0;
- *(u16 *)(VRAM + 0xC028 + r5 * 64 + 2) = 0;
-
- *(u16 *)(VRAM + 0xC068 + r5 * 64) = 0;
- *(u16 *)(VRAM + 0xC068 + r5 * 64 + 2) = 0;
- }
-}
-
-void DrawMoveEffectSymbols(void)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- DrawMoveEffectSymbol(sContestantStatus[i].currMove, i);
-}
-
-u16 GetStarTileOffset(u8 unused)
-{
- return 0x2034;
-}
-
-bool8 UpdateConditionStars(u8 a, u8 b)
-{
- u8 r9;
- u16 r8;
- s32 r4;
-
- if (sContestantStatus[a].conditionMod == 0)
- return FALSE;
- r9 = gContestantTurnOrder[a] * 5 + 2;
- if (sContestantStatus[a].conditionMod == 1)
- {
- r8 = GetStarTileOffset(a);
- r4 = 0;
- while (sContestantStatus[a].condition / 10 > r4)
- {
- *(u16 *)(VRAM + 0xC026 + (r9 + r4) * 64) = r8;
- r4++;
- }
- if (b != 0)
- {
- PlaySE(SE_EXP_MAX);
- sContestantStatus[a].conditionMod = 0;
- }
- }
- else // CONDITION_LOSE
- {
- r8 = 0;
- r4 = 3;
- while (sContestantStatus[a].condition / 10 < r4)
- {
- *(u16 *)(VRAM + 0xBFE6 + (r9 + r4) * 64) = r8;
- r4--;
- }
- if (b != 0)
- {
- PlaySE(SE_CONTEST_CONDITION_LOSE);
- sContestantStatus[a].conditionMod = 0;
- }
- }
- return TRUE;
-}
-
-void DrawConditionStars(void)
-{
- s32 i;
- s32 r4;
-
- for (i = 0; i < 4; i++)
- {
- u8 r8 = gContestantTurnOrder[i] * 5 + 2;
- u16 r6 = GetStarTileOffset(i);
-
- r4 = 0;
- while (r4 < sContestantStatus[i].condition / 10)
- {
- *(u16 *)(VRAM + 0xC026 + (r8 + r4) * 64) = r6;
- r4++;
- }
- r6 = 0;
- while (r4 < 3)
- {
- *(u16 *)(VRAM + 0xC026 + (r8 + r4) * 64) = r6;
- r4++;
- }
- }
-}
-
-u16 GetStatusSymbolTileOffset(u8 unused, u8 b)
-{
- u16 var = 0;
-
- switch (b)
- {
- case 0: // For resistant
- var = 0x80;
- break;
- case 1: // For nervous
- var = 0x84;
- break;
- case 2: // For turn skipped
- var = 0x86;
- break;
- case 3: // For jammed/unnerved
- var = 0x88;
- break;
- case 4: // Never used
- var = 0x82;
- break;
- }
- var += 0x9000;
- return var;
-}
-
-bool8 DrawStatusSymbol(u8 a)
-{
- bool8 r5 = TRUE;
- u16 r4 = 0;
- u8 r6 = gContestantTurnOrder[a] * 5 + 2;
-
- if (sContestantStatus[a].resistant != 0 || sContestantStatus[a].immune != 0 || sContestantStatus[a].jamSafetyCount != 0 || sContestantStatus[a].jamReduction != 0)
- r4 = GetStatusSymbolTileOffset(a, 0);
- else if (sContestantStatus[a].nervous)
- r4 = GetStatusSymbolTileOffset(a, 1);
- else if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns)
- r4 = GetStatusSymbolTileOffset(a, 2);
- else
- r5 = FALSE;
- if (r5)
- {
- *(u16 *)(VRAM + 0xC028 + r6 * 64) = r4;
- *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = r4 + 1;
- *(u16 *)(VRAM + 0xC068 + r6 * 64) = r4 + 16;
- *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = r4 + 17;
- }
- else
- {
- *(u16 *)(VRAM + 0xC028 + r6 * 64) = 0;
- *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = 0;
- *(u16 *)(VRAM + 0xC068 + r6 * 64) = 0;
- *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = 0;
- }
- return r5;
-}
-
-void DrawStatusSymbols(void)
-{
- s32 i;
-
- for (i = 0; i < 4; i++)
- DrawStatusSymbol(i);
-}
-
-void ContestClearGeneralTextWindow(void)
-{
- Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 0, 1, 15, 17, 18);
-}
-
-u16 GetChosenMove(u8 a)
-{
- if (Contest_IsMonsTurnDisabled(a))
- return 0;
- if (a == gContestPlayerMonIndex)
- {
- return gContestMons[a].moves[sContest.playerMoveChoice];
- }
- else
- {
- u8 moveChoice;
-
- ContestAI_ResetAI(a);
- moveChoice = ContestAI_GetActionToUse();
- return gContestMons[a].moves[moveChoice];
- }
-}
-
-void sub_80AF1B8(void)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- sContestantStatus[i].currMove = GetChosenMove(i);
-}
-
-void sub_80AF1E4(u8 a, u8 b)
-{
- u8 r3;
-
- if (b == 0)
- r3 = a + 10;
- else
- r3 = 14;
- if (sContestantStatus[a].currMove == MOVE_NONE)
- Contest_CopyStringWithColor(gDisplayedStringBattle, gUnknownText_MissedTurn, r3);
- else
- Contest_CopyStringWithColor(
- gDisplayedStringBattle, gMoveNames[sContestantStatus[a].currMove], r3);
- sub_80AF2A0(a);
- Text_InitWindowAndPrintText(
- &gWindowTemplate_Contest_MoveDescription,
- gDisplayedStringBattle,
- 696 + a * 20,
- gUnknown_083CA318[a][0],
- gUnknown_083CA318[a][1]);
-}
-
-void unref_sub_80AF280(u8 a)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- sub_80AF1E4(i, a);
-}
-
-void sub_80AF2A0(u8 a)
-{
- Text_FillWindowRectDefPalette(
- &gWindowTemplate_Contest_MoveDescription,
- 0,
- gUnknown_083CA318[a][0],
- gUnknown_083CA318[a][1],
- gUnknown_083CA318[a][0] + 7,
- gUnknown_083CA318[a][1] + 1);
-}
-
-void unref_sub_80AF2E0(void)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- sub_80AF2A0(i);
-}
-
-void sub_80AF2FC(void)
-{
- u8 i;
- u8 j;
- s16 arr[4];
-
- for (i = 0; i < 4; i++)
- {
- sContestantStatus[i].unk4 += sContestantStatus[i].appeal2;
- arr[i] = sContestantStatus[i].unk4;
- }
- for (i = 0; i < 3; i++)
- {
- for (j = 3; j > i; j--)
- {
- if (arr[j - 1] < arr[j])
- {
- u16 temp = arr[j];
-
- arr[j] = arr[j - 1];
- arr[j - 1] = temp;
- }
- }
- }
- for (i = 0; i < 4; i++)
- {
- for (j = 0; j < 4; j++)
- {
- if (sContestantStatus[i].unk4 == arr[j])
- {
- sContestantStatus[i].unkB_0 = j;
- break;
- }
- }
- }
- SortContestants(1);
- sub_80B159C();
-}
-
-void sub_80AF3C0(void)
-{
- s32 i;
-
- for (i = 0; i < 4; i++)
- {
- u8 attentionLevel;
-
- if (sContestantStatus[i].currMove == MOVE_NONE)
- attentionLevel = 5;
- else if (sContestantStatus[i].appeal2 <= 0)
- attentionLevel = 0;
- else if (sContestantStatus[i].appeal2 < 30)
- attentionLevel = 1;
- else if (sContestantStatus[i].appeal2 < 60)
- attentionLevel = 2;
- else if (sContestantStatus[i].appeal2 < 80)
- attentionLevel = 3;
- else
- attentionLevel = 4;
-
- sContestantStatus[i].attentionLevel = attentionLevel;
- }
-}
-
-bool8 sub_80AF404(u8 a)
-{
- if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns)
- return FALSE;
- else
- return TRUE;
-}
-
-void sub_80AF438(void)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- {
- // This is bitfield hell...
- sContestantStatus[i].appeal2 = 0;
- sContestantStatus[i].appeal1 = 0;
- sContestantStatus[i].jamSafetyCount = 0;
- if (sContestantStatus[i].numTurnsSkipped > 0)
- sContestantStatus[i].numTurnsSkipped--;
- sContestantStatus[i].jam = 0;
- sContestantStatus[i].resistant = 0;
- sContestantStatus[i].jamReduction = 0;
- sContestantStatus[i].immune = 0;
- sContestantStatus[i].moreEasilyStartled = 0;
- sContestantStatus[i].usedRepeatableMove = 0;
- sContestantStatus[i].nervous = 0;
- 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].disappointedRepeat = FALSE;
- sContestantStatus[i].turnOrderModAction = 0;
- sContestantStatus[i].appealTripleCondition = 0;
- if (sContestantStatus[i].turnSkipped)
- {
- sContestantStatus[i].numTurnsSkipped = 1;
- sContestantStatus[i].turnSkipped = 0;
- }
- if (sContestantStatus[i].exploded)
- {
- sContestantStatus[i].noMoreTurns = 1;
- sContestantStatus[i].exploded = 0;
- }
- sContestantStatus[i].overrideCategoryExcitementMod = 0;
- }
- for (i = 0; i < 4; i++)
- {
- sContestantStatus[i].prevMove = sContestantStatus[i].currMove;
- sContest.unk19220[sContest.turnNumber][i] = sContestantStatus[i].prevMove;
- sContest.unk19248[sContest.turnNumber][i] = Contest_GetMoveExcitement(sContestantStatus[i].currMove);
- sContestantStatus[i].currMove = MOVE_NONE;
- }
- shared19328.excitementFrozen = 0;
-}
-
-bool8 Contest_IsMonsTurnDisabled(u8 a)
-{
- if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns)
- return TRUE;
- else
- return FALSE;
-}
-
-bool8 unref_sub_80AF5D0(u8 a, u8 b)
-{
- u8 i;
-
- if (a != gContestPlayerMonIndex)
- return TRUE;
- for (i = 0; i < 4; i++)
- {
- if (b == 3)
- {
- sContest.unk1920A_0 = 1;
- return TRUE;
- }
- if (b == 4)
- {
- sContest.unk1920A_1 = 1;
- return TRUE;
- }
- if (sContest.unk19206[i] == b)
- return TRUE;
- if (sContest.unk19206[i] == 0xFF)
- {
- sContest.unk19206[i] = b;
- return TRUE;
- }
- }
- return FALSE;
-}
-
-void CalculateTotalPointsForContestant(u8 a)
-{
- gContestMonRound2Points[a] = GetContestantRound2Points(a);
- gContestMonTotalPoints[a] = gContestMonRound1Points[a] + gContestMonRound2Points[a];
-}
-
-void CalculateFinalScores(void)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- CalculateTotalPointsForContestant(i);
- DetermineFinalStandings();
-}
-
-s16 GetContestantRound2Points(u8 a)
-{
- return gContestMonAppealPointTotals[a] * 2;
-}
-
-void DetermineFinalStandings(void)
-{
- u16 randomOrdering[4] = {0};
- struct ContestFinalStandings standings[4];
- s32 i;
-
- // Seed random order in case of ties
- for (i = 0; i < 4; i++)
- {
- s32 j;
- randomOrdering[i] = Random();
- for (j = 0; j < i; j++)
- {
- if (randomOrdering[i] == randomOrdering[j])
- {
- i--;
- break;
- }
- }
- }
-
- for (i = 0; i < 4; i++)
- {
- standings[i].totalPoints = gContestMonTotalPoints[i];
- standings[i].round1Points = gContestMonRound1Points[i];
- standings[i].random = randomOrdering[i];
- standings[i].contestant = i;
- }
-
- // Rank contestants
- for (i = 0; i < 3; i++)
- {
- s32 j;
- for (j = 3; j > i; j--)
- {
- if (DidContestantPlaceHigher(j - 1, j, standings))
- {
- // Swap contestants in array
- struct ContestFinalStandings temp;
-
- temp.totalPoints = standings[j - 1].totalPoints;
- temp.round1Points = standings[j - 1].round1Points;
- temp.random = standings[j - 1].random;
- temp.contestant = standings[j - 1].contestant;
-
- standings[j - 1].totalPoints = standings[j].totalPoints;
- standings[j - 1].round1Points = standings[j].round1Points;
- standings[j - 1].random = standings[j].random;
- standings[j - 1].contestant = standings[j].contestant;
-
- standings[j].totalPoints = temp.totalPoints;
- standings[j].round1Points = temp.round1Points;
- standings[j].random = temp.random;
- standings[j].contestant = temp.contestant;
- }
- }
- }
-
- // Assign placements. i is the placing (0 is 1st, 1 is 2nd...)
- for (i = 0; i < 4; i++)
- gContestFinalStandings[standings[i].contestant] = i;
-}
-
-bool8 DidContestantPlaceHigher(s32 a, s32 b, struct ContestFinalStandings *c)
-{
- bool8 retVal;
-
- if (c[a].totalPoints < c[b].totalPoints)
- retVal = TRUE;
- else if (c[a].totalPoints > c[b].totalPoints)
- retVal = FALSE;
- else if (c[a].round1Points < c[b].round1Points)
- retVal = TRUE;
- else if (c[a].round1Points > c[b].round1Points)
- retVal = FALSE;
- else if (c[a].random < c[b].random)
- retVal = TRUE;
- else
- retVal = FALSE;
- return retVal;
-}
-
-void ContestPrintLinkStandby(void)
-{
- gBattle_BG0_Y = 0;
- gBattle_BG2_Y = 0;
- ContestClearGeneralTextWindow();
- Text_InitWindowAndPrintText(&gMenuWindow, gUnknownText_LinkStandbyAndWinner, 776, 1, 15);
-}
-
-u8 unref_sub_80AF89C(s16 a, s16 b, u8 c, u8 d)
-{
- u8 taskId;
- u8 r5;
- s8 r4;
- u16 r0;
-
- shared19338[d].unk2_2 = 1;
- taskId = CreateTask(sub_80AF94C, 20);
- r5 = sub_80AFB74(a);
- r4 = sub_80AFB74(a + b) - r5;
- r0 = sub_80AFB40(d);
- gTasks[taskId].data[0] = r5;
- gTasks[taskId].data[1] = r4;
- gTasks[taskId].data[2] = r0 + c;
- gTasks[taskId].data[3] = d;
- if (b < 0)
- nullsub_19(d);
- return taskId;
-}
-
-void sub_80AF94C(u8 taskId)
-{
- u8 r5 = gTasks[taskId].data[3];
-
- if (gTasks[taskId].data[1] == 0)
- {
- nullsub_19(r5);
- DestroyTask(taskId);
- shared19338[r5].unk2_2 = 0;
- }
- else if (++gTasks[taskId].data[10] > 29)
- {
- u8 r6;
-
- gTasks[taskId].data[10] = 0;
- if (gTasks[taskId].data[1] < 0)
- {
- r6 = gTasks[taskId].data[0]--;
- gTasks[taskId].data[1]++;
- PlaySE(SE_BOO);
- }
- else
- {
- r6 = ++gTasks[taskId].data[0];
- gTasks[taskId].data[1]--;
- PlaySE(SE_PIN);
- }
- if ((u16)gTasks[taskId].data[2] != 0xFFFF)
- {
- RequestSpriteCopy(
- &gTasks[taskId].data[2],
- (void *)(VRAM + 0xC000 + (147 + r6 + r5 * 160) * 2),
- 2);
- }
- else
- {
- u8 i;
-
- for (i = 0; i < 3; i++)
- {
- if (gTasks[taskId].data[i + 4] < 0)
- {
- RequestSpriteCopy(
- &gTasks[taskId].data[i + 7],
- (void *)(VRAM + 0xC000 + (147 + r6 + r5 * 160) * 2),
- 2);
- gTasks[taskId].data[i + 4]++;
- break;
- }
- }
- }
- }
-}
-
-void sub_80AFA5C(void)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- {
- DmaClear16(3, (void *)(VRAM + 0xC000 + (86 + i * 160) * 2), 16);
- DmaClear16(3, (void *)(VRAM + 0xC000 + (118 + i * 160) * 2), 16);
- }
-}
-
-void unref_sub_80AFAB8(s16 a, u8 b)
-{
- u8 r5 = sub_80AFB74(a);
- u16 r2;
- u8 i;
- u16 arr[9];
-
- if (b == 0)
- r2 = 0x50A2;
- else if (b == 1)
- r2 = 0x60A2;
- else if (b == 2)
- r2 = 0x70A2;
- else
- r2 = 0x80A2;
-
- for (i = 0; i < 9; i++)
- {
- if (i < r5)
- arr[i] = r2;
- else
- arr[i] = 0;
- }
-
- DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xC000 + (148 + b * 160) * 2), sizeof(arr));
-}
-
-u16 sub_80AFB40(u8 a)
-{
- u16 var;
-
- if (a == 0)
- var = 0x5011;
- else if (a == 1)
- var = 0x6011;
- else if (a == 2)
- var = 0x7011;
- else
- var = 0x8011;
- return var + 1;
-}
-
-s8 sub_80AFB74(s16 a)
-{
- s8 retVal = a / 10;
-
- if (retVal > 16)
- retVal = 16;
- else if (retVal < -16)
- retVal = -16;
- return retVal;
-}
-
-u8 sub_80AFBA0(s16 a, s16 b, u8 c)
-{
- u8 taskId;
- s8 r4;
- s8 r5;
-
- shared19338[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))
- gTasks[taskId].data[2] = 1;
- else
- gTasks[taskId].data[2] = -1;
- gTasks[taskId].data[3] = c;
- if (b < 0)
- nullsub_19(c);
- return taskId;
-}
-
-void sub_80AFC74(u8 taskId)
-{
- u8 r7 = gTasks[taskId].data[3];
- s16 r3 = gTasks[taskId].data[0];
- s16 r1 = gTasks[taskId].data[1];
-
- if (++gTasks[taskId].data[10] > 14)
- {
- u16 r6;
- u8 r5;
- u8 r10;
-
- gTasks[taskId].data[10] = 0;
- if (gTasks[taskId].data[1] == 0)
- {
- nullsub_19(r7);
- DestroyTask(taskId);
- shared19338[r7].unk2_2 = 0;
- return;
- }
- else if (r3 == 0)
- {
- if (r1 < 0)
- {
- r6 = sub_80AFB40(r7) + 2;
- gTasks[taskId].data[1]++;
- }
- else
- {
- r6 = sub_80AFB40(r7);
- gTasks[taskId].data[1]--;
- }
- r5 = gTasks[taskId].data[0]++;
- }
- else
- {
- if (gTasks[taskId].data[2] < 0)
- {
- if (r1 < 0)
- {
- r5 = gTasks[taskId].data[0]++;
- gTasks[taskId].data[1]++;
- r6 = sub_80AFB40(r7) + 2;
- }
- else
- {
- r5 = --gTasks[taskId].data[0];
- r6 = 0;
- gTasks[taskId].data[1]--;
- }
- }
- else
- {
- if (r1 < 0)
- {
- r5 = --gTasks[taskId].data[0];
- r6 = 0;
- gTasks[taskId].data[1]++;
- }
- else
- {
- r5 = gTasks[taskId].data[0]++;
- gTasks[taskId].data[1]--;
- r6 = sub_80AFB40(r7);
- }
- }
- }
- r10 = r5;
- if (r5 > 7)
- r5 += 24;
- // Seriously, a 2-byte CpuFill? Why?
- CpuFill16(r6, (void *)(VRAM + 0xC000 + (0x56 + r5 + gContestantTurnOrder[r7] * 160) * 2), 2);
- if (r1 > 0)
- {
- PlaySE(SE_CONTEST_HEART);
- m4aMPlayImmInit(&gMPlayInfo_SE1);
- m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, r10 * 256);
- }
- else
- {
- PlaySE(SE_BOO);
- }
- if (r5 == 0 && r6 == 0)
- gTasks[taskId].data[2] = -gTasks[taskId].data[2];
- }
-}
-
-void sub_80AFE30(void)
-{
- s32 i;
-
- LoadSpriteSheet(&gUnknown_083CA350);
- for (i = 0; i < 4; i++)
- {
- u8 y = gUnknown_083CA338[gContestantTurnOrder[i]];
-
- shared19338[i].unk0 = CreateSprite(&gSpriteTemplate_83CA3AC, 180, y, 1);
- }
-}
-
-void sub_80AFE78(u8 a)
-{
- u8 spriteId;
- s16 r5;
-
- shared19338[a].unk2_0 = 1;
- spriteId = shared19338[a].unk0;
- r5 = sContestantStatus[a].unk4 / 10 * 2;
- if (r5 > 56)
- r5 = 56;
- else if (r5 < 0)
- r5 = 0;
- gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].data[0] = a;
- gSprites[spriteId].data[1] = r5;
- if (gSprites[spriteId].data[1] > gSprites[spriteId].pos2.x)
- gSprites[spriteId].data[2] = 1;
- else
- gSprites[spriteId].data[2] = -1;
- gSprites[spriteId].callback = sub_80AFF60;
-}
-
-void sub_80AFF10(void)
-{
- s32 i;
-
- for (i = 0; i < 4; i++)
- sub_80AFE78(i);
-}
-
-bool8 sub_80AFF28(void)
-{
- s32 i;
-
- for (i = 0; i < 4; i++)
- {
- if (shared19338[i].unk2_0)
- break;
- }
- if (i == 4)
- return TRUE;
- else
- return FALSE;
-}
-
-void sub_80AFF60(struct Sprite *sprite)
-{
- if (sprite->pos2.x == sprite->data[1])
- {
- shared19338[sprite->data[0]].unk2_0 = 0;
- sprite->callback = SpriteCallbackDummy;
- }
- else
- {
- sprite->pos2.x += sprite->data[2];
- }
-}
-
-void sub_80AFFA0(void)
-{
- s32 i;
-
- for (i = 0; i < 4; i++)
- gSprites[shared19338[i].unk0].pos1.y = gUnknown_083CA338[gContestantTurnOrder[i]];
-}
-
-void sub_80AFFE0(bool8 a)
-{
- s32 i;
-
- for (i = 0; i < 4; i++)
- {
- if (gContestantTurnOrder[i] > 1)
- {
- if (!a)
- gSprites[shared19338[i].unk0].pos1.x = 180;
- else
- gSprites[shared19338[i].unk0].pos1.x = 256;
- }
- }
-}
-
-void sub_80B0034(void)
-{
- s32 i;
-
- LoadSpritePalette(&gUnknown_083CA3E4);
- for (i = 0; i < 4; i++)
- {
- LoadCompressedObjectPic(&gUnknown_083CA3C4[i]);
- shared19338[i].unk1 = CreateSprite(
- &gSpriteTemplate_83CA3F4[i],
- 204, gUnknown_083CA33C[gContestantTurnOrder[i]],
- 0);
- SetSubspriteTables(&gSprites[shared19338[i].unk1], gSubspriteTables_83CA464);
- gSprites[shared19338[i].unk1].invisible = TRUE;
- }
-}
-
-void CreateApplauseMeterSprite(void)
-{
- u8 spriteId;
-
- LoadCompressedObjectPic(&gUnknown_083CA46C);
- LoadSpritePalette(&gUnknown_083CA474);
- spriteId = CreateSprite(&gSpriteTemplate_83CA484, 30, 44, 1);
- gSprites[spriteId].invisible = TRUE;
- sContest.applauseMeterSpriteId = spriteId;
-}
-
-void nullsub_18(s8 unused)
-{
-}
-
-void unref_sub_80B011C(void)
-{
- u8 i;
-
- LoadCompressedObjectPic(&gUnknown_083CC3AC);
- for (i = 0; i < 4; i++)
- LoadCompressedObjectPalette(&gUnknown_083CC3B4[i]);
- for (i = 0; i < 4; i++)
- {
- u8 spriteId = CreateSprite(
- &gSpriteTemplate_83CC454[i],
- gUnknown_083CA330[i][0], gUnknown_083CA330[i][1],
- 5);
-
- gSprites[spriteId].invisible = TRUE;
- gSprites[spriteId].data[0] = i;
- sContest.unk1920D[i] = spriteId;
- }
-}
-
-void unref_sub_80B01B0(void)
-{
- s32 i;
-
- for (i = 0; i < 4; i++)
- gSprites[sContest.unk1920D[i]].callback = sub_80B0238;
-}
-
-bool8 unref_sub_80B01E0(void)
-{
- s32 i;
-
- for (i = 0; i < 4; i++)
- {
- if (gSprites[sContest.unk1920D[i]].callback != SpriteCallbackDummy)
- break;
- }
- if (i == 4)
- return TRUE;
- else
- return FALSE;
-}
-
-void sub_80B0238(struct Sprite *sprite)
-{
- sprite->oam.affineMode = 1;
- InitSpriteAffineAnim(sprite);
- if (sprite->invisible)
- {
- sprite->callback = sub_80B02A8;
- }
- else
- {
- StartSpriteAffineAnim(sprite, 1);
- sprite->callback = sub_80B0280;
- }
-}
-
-void sub_80B0280(struct Sprite *sprite)
-{
- if (sprite->affineAnimEnded)
- {
- sprite->invisible = TRUE;
- sprite->callback = sub_80B02A8;
- }
-}
-
-void sub_80B02A8(struct Sprite *sprite)
-{
- sprite->invisible = FALSE;
- StartSpriteAnim(sprite, sContestantStatus[sprite->data[0]].unkB_0);
- StartSpriteAffineAnim(sprite, 2);
- sprite->callback = sub_80B02F4;
- PlaySE(SE_CONTEST_PLACE);
-}
-
-void sub_80B02F4(struct Sprite *sprite)
-{
- if (sprite->affineAnimEnded)
- {
- FreeSpriteOamMatrix(sprite);
- sprite->oam.affineMode = 0;
- sprite->callback = SpriteCallbackDummy;
- }
-}
-
-void sub_80B0324(void)
-{
- u8 i;
- u8 taskId = CreateTask(sub_80B0458, 30);
-
- sContest.unk19211 = taskId;
- for (i = 0; i < 4; i++)
- gTasks[taskId].data[i * 4] = 0xFF;
-}
-
-void sub_80B0368(u8 a)
-{
- gTasks[sContest.unk19211].data[a * 4 + 0] = 0;
- gTasks[sContest.unk19211].data[a * 4 + 1] = 0;
-}
-
-void sub_80B03A8(u8 a)
-{
- u8 taskId = CreateTask(sub_80B03D8, 31);
-
- gTasks[taskId].data[0] = a;
-}
-
-void sub_80B03D8(u8 taskId)
-{
- u8 r4 = gTasks[taskId].data[0];
-
- if (gTasks[sContest.unk19211].data[r4 * 4 + 0] == 0
- || gTasks[sContest.unk19211].data[r4 * 4 + 0] == 0xFF)
- {
- 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));
- DestroyTask(taskId);
- }
-}
-
-void sub_80B0458(u8 taskId)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- {
- u8 r3 = i * 4;
-
- if (gTasks[taskId].data[r3 + 0] != 0xFF)
- {
- if (gTasks[taskId].data[r3 + 1] == 0)
- gTasks[taskId].data[r3 + 0]++;
- else
- gTasks[taskId].data[r3 + 0]--;
-
- if (gTasks[taskId].data[r3 + 0] == 16
- || gTasks[taskId].data[r3 + 0] == 0)
- gTasks[taskId].data[r3 + 1] ^= 1;
-
- BlendPalette(
- (sContest.unk19218[i] + 5) * 16 + 6,
- 2,
- gTasks[taskId].data[r3 + 0],
- RGB(31, 31, 18));
- }
- }
-}
-
-void sub_80B0518(void)
-{
- u8 i;
-
- sContest.unk19212 = CreateTask(sub_80B05FC, 30);
- for (i = 0; i < 4; i++)
- sub_80B0548(i);
-}
-
-void sub_80B0548(u8 a)
-{
- gTasks[sContest.unk19212].data[a * 4 + 0] = 0xFF;
- gTasks[sContest.unk19212].data[a * 4 + 1] = 0;
-}
-
-void sub_80B0588(void)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- sub_80B05A4(i);
-}
-
-void sub_80B05A4(u8 a)
-{
- sub_80B0548(a);
-
- // 2-byte DMA copy? Why?
-
- DmaCopy16Defvars(
- 3,
- &gPlttBufferUnfaded[16 * (5 + a) + 10],
- &gPlttBufferFaded[16 * (5 + a) + 10],
- 2);
-
- DmaCopy16Defvars(
- 3,
- &gPlttBufferUnfaded[16 * (5 + a) + 12 + a],
- &gPlttBufferFaded[16 * (5 + a) + 12 + a],
- 2);
-}
-
-void nullsub_19(int unused)
-{
-}
-
-void sub_80B05FC(u8 taskId)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- {
- u8 r3 = i * 4;
-
- if (gTasks[taskId].data[r3 + 0] != 0xFF)
- {
- if (++gTasks[taskId].data[r3 + 2] > 2)
- {
- gTasks[taskId].data[r3 + 2] = 0;
-
- if (gTasks[taskId].data[r3 + 1] == 0)
- gTasks[taskId].data[r3 + 0]++;
- else
- gTasks[taskId].data[r3 + 0]--;
-
- if (gTasks[taskId].data[r3 + 0] == 16
- || gTasks[taskId].data[r3 + 0] == 0)
- gTasks[taskId].data[r3 + 1] ^= 1;
-
- BlendPalette((i + 5) * 16 + 10, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18));
- BlendPalette((i + 5) * 16 + 12 + i, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18));
- }
- }
- }
-}
-
-u8 unref_sub_80B06E0(u8 *a)
-{
- u8 i;
- u8 taskId = CreateTask(sub_80B0748, 10);
-
- for (i = 0; i < 4; i++)
- {
- u8 r0 = i * 4;
-
- gTasks[taskId].data[r0] = a[i];
- if (a[i] != 0)
- shared19338[i].unk2_1 = 1;
- }
- return taskId;
-}
-
-#ifdef NONMATCHING
-void sub_80B0748(u8 taskId)
-{
- u8 i;
- u8 r4;
- u8 r4_2;
- u8 r1;
- u8 r7;
-
- for (i = 0; i < 4; i++)
- {
- //#define r4 r4_2
- r4 = gContestantTurnOrder[i];
- r1 = r4 * 4;
- r7 = gTasks[taskId].data[r1 + 0];
-
- if (r7 != 0)
- {
- //_080B079C
- u8 r8 = gTasks[taskId].data[r1 + 1];
- u8 r5 = gTasks[taskId].data[r1 + 2];
- u8 r6 = gTasks[taskId].data[r1 + 3];
-
- if (r7 == 1)
- {
- r6++;
- if (r6 == 1)
- {
- //_080B07D2
- r6 = 0;
- BlendPalette((r4 + 5) * 16 + 1, 3, r5, RGB(31, 31, 31));
- if (r5 == 0 && r8 == 4)
- {
- gTasks[taskId].data[r1 + 0] = 0;
- //asm("");
- }
- //_080B0800
- else
- {
- r5 += 2;
- if (r5 > 13)
- {
- r5 = 0;
- r8++;
- }
- }
- }
- //to _080B08EA
- }
- //_080B0818
- else if (r7 == 2 || r7 == 4)
- {
- r6++;
- if (r6 == 3)
- {
- r6 = 0;
- BlendPalette((r4 + 5) * 16 + 1, 3, r5, gUnknown_083CC5A4[r4]);
- if (r5 == 0 && r8 == 2)
- {
- gTasks[taskId].data[r1 + 0] = 0;
- }
- //_080B0858
- else
- {
- r5 += 1;
- if (r5 == 14)
- {
- r5 = 0;
- r8++;
- if (r7 == 4 && r8 == 1)
- {
- BlendPalette((r4 + 9) * 16 + 2, 1, 4, RGB(0, 0, 0));
- BlendPalette((r4 + 9) * 16 + 5, 1, 4, RGB(0, 0, 0));
- }
- }
- }
- }
- //to _080B08EA
- }
- //_080B0896
- else if (r7 == 3)
- {
- r6++;
- if (r6 == 12)
- {
- r6 = 0;
- BlendPalette((r4 + 5) * 16 + 1, 3, r5, RGB(0, 0, 0));
- r5 += 1;
- if (r5 == 5)
- {
- // What the hell? These aren't pointers.
- // This code would crash if run.
- DmaCopy16Defvars(3, (void *)(u32)gPlttBufferFaded[(r4 + 5) * 16 + 1],
- (void *)(u32)gPlttBufferUnfaded[(r4 + 5) * 16 + 1], 6);
- gTasks[taskId].data[r1 + 0] = 0;
- }
- }
- }
- //_080B08EA
- gTasks[taskId].data[r1 + 1] = r8;
- gTasks[taskId].data[r1 + 2] = r5;
- gTasks[taskId].data[r1 + 3] = r6;
- }
- //_080B0910
- }
- //_080B0920
-
- #define i r4_2
- for (i = 0; i < 4; i++) // r4 is i
- {
- if (gTasks[taskId].data[i * 4 + 0] != 0)
- break;
- }
- //_080B0958
- if (i == 4)
- {
- for (i = 0; i < 4; i++)
- shared19338[i].unk2_2 = 0;
- DestroyTask(taskId);
- }
- #undef i
-}
-#else
-NAKED
-void sub_80B0748(u8 taskId)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x20\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- str r0, [sp]\n\
- movs r0, 0\n\
- str r0, [sp, 0x4]\n\
- ldr r2, _080B07F4 @ =gTasks\n\
- movs r1, 0x8\n\
- adds r1, r2\n\
- mov r10, r1\n\
- ldr r3, [sp]\n\
- lsls r3, 2\n\
- str r3, [sp, 0x1C]\n\
- ldr r1, [sp]\n\
- adds r0, r3, r1\n\
- lsls r0, 3\n\
- str r0, [sp, 0xC]\n\
-_080B0774:\n\
- ldr r0, _080B07F8 @ =gContestantTurnOrder\n\
- ldr r3, [sp, 0x4]\n\
- adds r0, r3, r0\n\
- ldrb r4, [r0]\n\
- lsls r0, r4, 26\n\
- lsrs r1, r0, 24\n\
- lsls r0, r1, 1\n\
- str r0, [sp, 0x8]\n\
- ldr r3, [sp]\n\
- lsls r0, r3, 2\n\
- adds r0, r3\n\
- lsls r6, r0, 3\n\
- ldr r3, [sp, 0x8]\n\
- adds r0, r3, r6\n\
- add r0, r10\n\
- mov r9, r0\n\
- ldrb r7, [r0]\n\
- cmp r7, 0\n\
- bne _080B079C\n\
- b _080B0910\n\
-_080B079C:\n\
- adds r3, r1, 0x1\n\
- lsls r0, r3, 1\n\
- adds r0, r6\n\
- add r0, r10\n\
- ldrb r0, [r0]\n\
- mov r8, r0\n\
- adds r2, r1, 0x2\n\
- lsls r0, r2, 1\n\
- adds r0, r6\n\
- add r0, r10\n\
- ldrb r5, [r0]\n\
- adds r1, 0x3\n\
- lsls r0, r1, 1\n\
- adds r0, r6\n\
- add r0, r10\n\
- ldrb r6, [r0]\n\
- str r3, [sp, 0x10]\n\
- str r2, [sp, 0x14]\n\
- str r1, [sp, 0x18]\n\
- cmp r7, 0x1\n\
- bne _080B0818\n\
- adds r0, r6, 0x1\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- cmp r6, 0x1\n\
- beq _080B07D2\n\
- b _080B08EA\n\
-_080B07D2:\n\
- movs r6, 0\n\
- adds r0, r4, 0x5\n\
- lsls r0, 4\n\
- adds r0, 0x1\n\
- movs r1, 0x3\n\
- adds r2, r5, 0\n\
- ldr r3, _080B07FC @ =0x00007fff\n\
- bl BlendPalette\n\
- cmp r5, 0\n\
- bne _080B0800\n\
- mov r0, r8\n\
- cmp r0, 0x4\n\
- bne _080B0800\n\
- mov r1, r9\n\
- strh r6, [r1]\n\
- b _080B08EA\n\
- .align 2, 0\n\
-_080B07F4: .4byte gTasks\n\
-_080B07F8: .4byte gContestantTurnOrder\n\
-_080B07FC: .4byte 0x00007fff\n\
-_080B0800:\n\
- adds r0, r5, 0x2\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0xD\n\
- bls _080B08EA\n\
- movs r5, 0\n\
- mov r0, r8\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- b _080B08EA\n\
-_080B0818:\n\
- cmp r7, 0x2\n\
- beq _080B0820\n\
- cmp r7, 0x4\n\
- bne _080B0896\n\
-_080B0820:\n\
- adds r0, r6, 0x1\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- cmp r6, 0x3\n\
- bne _080B08EA\n\
- movs r6, 0\n\
- adds r0, r4, 0x5\n\
- lsls r0, 4\n\
- adds r0, 0x1\n\
- ldr r2, _080B0854 @ =gUnknown_083CC5A4\n\
- lsls r1, r4, 1\n\
- adds r1, r2\n\
- ldrh r3, [r1]\n\
- movs r1, 0x3\n\
- adds r2, r5, 0\n\
- bl BlendPalette\n\
- cmp r5, 0\n\
- bne _080B0858\n\
- mov r2, r8\n\
- cmp r2, 0x2\n\
- bne _080B0858\n\
- mov r3, r9\n\
- strh r6, [r3]\n\
- b _080B08EA\n\
- .align 2, 0\n\
-_080B0854: .4byte gUnknown_083CC5A4\n\
-_080B0858:\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0xE\n\
- bne _080B08EA\n\
- movs r5, 0\n\
- mov r0, r8\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- cmp r7, 0x4\n\
- bne _080B08EA\n\
- cmp r0, 0x1\n\
- bne _080B08EA\n\
- adds r4, 0x9\n\
- lsls r4, 4\n\
- adds r0, r4, 0x2\n\
- movs r1, 0x1\n\
- movs r2, 0x4\n\
- movs r3, 0\n\
- bl BlendPalette\n\
- adds r4, 0x5\n\
- adds r0, r4, 0\n\
- movs r1, 0x1\n\
- movs r2, 0x4\n\
- movs r3, 0\n\
- bl BlendPalette\n\
- b _080B08EA\n\
-_080B0896:\n\
- cmp r7, 0x3\n\
- bne _080B08EA\n\
- adds r0, r6, 0x1\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- cmp r6, 0xC\n\
- bne _080B08EA\n\
- movs r6, 0\n\
- adds r0, r4, 0x5\n\
- lsls r0, 4\n\
- adds r4, r0, 0x1\n\
- adds r0, r4, 0\n\
- movs r1, 0x3\n\
- adds r2, r5, 0\n\
- movs r3, 0\n\
- bl BlendPalette\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x5\n\
- bne _080B08EA\n\
- ldr r0, _080B0930 @ =gPlttBufferFaded\n\
- lsls r1, r4, 1\n\
- adds r0, r1, r0\n\
- ldrh r2, [r0]\n\
- ldr r0, _080B0934 @ =gPlttBufferUnfaded\n\
- adds r1, r0\n\
- ldrh r0, [r1]\n\
- ldr r1, _080B0938 @ =0x040000d4\n\
- str r2, [r1]\n\
- str r0, [r1, 0x4]\n\
- movs r0, 0x80\n\
- lsls r0, 24\n\
- orrs r7, r0\n\
- str r7, [r1, 0x8]\n\
- ldr r0, [r1, 0x8]\n\
- ldr r1, [sp, 0x8]\n\
- ldr r2, [sp, 0xC]\n\
- adds r0, r1, r2\n\
- add r0, r10\n\
- strh r6, [r0]\n\
-_080B08EA:\n\
- ldr r3, [sp, 0x10]\n\
- lsls r0, r3, 1\n\
- ldr r1, [sp, 0xC]\n\
- adds r0, r1\n\
- add r0, r10\n\
- mov r2, r8\n\
- strh r2, [r0]\n\
- ldr r3, [sp, 0x14]\n\
- lsls r0, r3, 1\n\
- adds r0, r1\n\
- add r0, r10\n\
- strh r5, [r0]\n\
- ldr r1, [sp, 0x18]\n\
- lsls r0, r1, 1\n\
- ldr r2, [sp, 0xC]\n\
- adds r0, r2\n\
- add r0, r10\n\
- strh r6, [r0]\n\
- ldr r2, _080B093C @ =gTasks\n\
-_080B0910:\n\
- ldr r0, [sp, 0x4]\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- str r0, [sp, 0x4]\n\
- cmp r0, 0x3\n\
- bhi _080B0920\n\
- b _080B0774\n\
-_080B0920:\n\
- movs r4, 0\n\
- ldr r3, [sp, 0x1C]\n\
- ldr r1, [sp]\n\
- adds r0, r3, r1\n\
- lsls r1, r0, 3\n\
- adds r2, 0x8\n\
- adds r0, r1, r2\n\
- b _080B0950\n\
- .align 2, 0\n\
-_080B0930: .4byte gPlttBufferFaded\n\
-_080B0934: .4byte gPlttBufferUnfaded\n\
-_080B0938: .4byte 0x040000d4\n\
-_080B093C: .4byte gTasks\n\
-_080B0940:\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0x3\n\
- bhi _080B0958\n\
- lsls r0, r4, 3\n\
- adds r0, r1\n\
- adds r0, r2\n\
-_080B0950:\n\
- movs r3, 0\n\
- ldrsh r0, [r0, r3]\n\
- cmp r0, 0\n\
- beq _080B0940\n\
-_080B0958:\n\
- cmp r4, 0x4\n\
- bne _080B0980\n\
- movs r4, 0\n\
- ldr r3, _080B0990 @ =gSharedMem + 0x19338\n\
- movs r5, 0x3\n\
- negs r5, r5\n\
-_080B0964:\n\
- lsls r1, r4, 2\n\
- adds r1, r3\n\
- ldrb r2, [r1, 0x2]\n\
- adds r0, r5, 0\n\
- ands r0, r2\n\
- strb r0, [r1, 0x2]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0x3\n\
- bls _080B0964\n\
- ldr r0, [sp]\n\
- bl DestroyTask\n\
-_080B0980:\n\
- add sp, 0x20\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080B0990: .4byte gSharedMem + 0x19338\n\
- .syntax divided\n");
-}
-#endif
-
-void unref_sub_80B0994(u8 a)
-{
- if (a != 0)
- sContest.unk1920A_2 = 1;
-}
-
-void sub_80B09B0(u8 a)
-{
- if (sContestantStatus[a].hasJudgesAttention)
- sub_80B0368(a);
- else
- sub_80B03A8(a);
-}
-
-extern const struct CompressedSpriteSheet gUnknown_083CC4B4[];
-extern const struct SpritePalette gUnknown_083CC4D4[];
-extern const struct SpriteTemplate gSpriteTemplate_83CC53C[];
-
-u8 sub_80B09E4(u8 a)
-{
- u8 r5 = gContestantTurnOrder[a] * 40 + 32;
- u8 r8;
- u8 r6;
- volatile u8 zero;
-
- LoadCompressedObjectPic(&gUnknown_083CC4B4[a]);
- LoadSpritePalette(&gUnknown_083CC4D4[a]);
- r8 = CreateSprite(&gSpriteTemplate_83CC53C[a], 184, r5, 29);
- r6 = CreateSprite(&gSpriteTemplate_83CC53C[a], 248, r5, 29);
- gSprites[r6].oam.tileNum += 64;
-
- CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gContestantTurnOrder[a] * 5 * 64 + 0x26), (u8 *)(VRAM + 0x10000 + gSprites[r8].oam.tileNum * 32));
- CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gContestantTurnOrder[a] * 5 * 64 + 0x36), (u8 *)(VRAM + 0x10000 + gSprites[r6].oam.tileNum * 32));
-
- DmaFill32Defvars(3, 0, (void *)(VRAM + 0x10000 + (0x28 + gSprites[r8].oam.tileNum) * 32), 0x300);
-
- // What is this?
- zero = 0;
- zero = 0;
-
- DmaFill32Defvars(3, 0, (void *)(VRAM + 0x10000 + (0x28 + gSprites[r6].oam.tileNum) * 32), 0x300);
-
- gSprites[r8].data[0] = r6;
- gSprites[r6].data[0] = r8;
- gSprites[r8].data[1] = a;
- gSprites[r6].data[1] = a;
- return r8;
-}
-
-void sub_80B0B5C(u8 spriteId)
-{
- u8 spriteId2 = gSprites[spriteId].data[0];
-
- FreeSpriteOamMatrix(&gSprites[spriteId2]);
- DestroySprite(&gSprites[spriteId2]);
- DestroySpriteAndFreeResources(&gSprites[spriteId]);
-}
-
-void sub_80B0B98(void)
-{
- REG_BLDCNT = 0x3F40;
- REG_BLDALPHA = 0x0907;
-}
-
-void sub_80B0BB4(void)
-{
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
-}
-
-void sub_80B0BC4(u8 a, bool8 b)
-{
- u8 r5;
-
- sub_80B0B98();
- shared19338[gSprites[a].data[1]].unk2_1 = 1;
- r5 = gSprites[a].data[0];
- StartSpriteAffineAnim(&gSprites[a], 1);
- StartSpriteAffineAnim(&gSprites[r5], 1);
- gSprites[a].callback = sub_80B0C5C;
- gSprites[r5].callback = SpriteCallbackDummy;
- if (b == FALSE)
- PlaySE(SE_CONTEST_MONS_TURN);
- else
- PlaySE(SE_PC_LOGIN);
-}
-
-void sub_80B0C5C(struct Sprite *sprite)
-{
- if (sprite->affineAnimEnded)
- {
- u8 r1 = sprite->data[0];
-
- if (gSprites[r1].affineAnimEnded)
- {
- sprite->invisible = TRUE;
- gSprites[r1].invisible = TRUE;
- sprite->callback = sub_80B0CB0;
- }
- }
-}
-
-void sub_80B0CB0(struct Sprite *sprite)
-{
- shared19338[sprite->data[1]].unk2_1 = 0;
- sub_80B0B5C(sprite->data[0]);
- sub_80B0BB4();
-}
-
-void sub_80B0CDC(u8 a, int unused)
-{
- shared19338[a].unk2_1 = 0;
-}
-
-void unref_sub_80B0CF4(void)
-{
- //shared18000.unk18000 ^= 1;
- gSharedMem[0x18000] ^= 1;
- //if (shared18000.unk18000 == 0)
- if (gSharedMem[0x18000] == 0)
- {
- u8 i;
-
- for (i = 0; i < 4; i++)
- {
- Text_FillWindowRectDefPalette(
- &gWindowTemplate_Contest_MoveDescription,
- 0,
- gUnknown_083CA308[i][0],
- gUnknown_083CA308[i][1],
- gUnknown_083CA310[i][0] + 5,
- gUnknown_083CA310[i][1] + 1);
- }
- sub_80AE514();
- SwapMoveDescAndContestTilemaps();
- }
- else
- {
- sub_80B0D7C();
- }
-}
-
-void sub_80B0D7C(void)
-{
- u8 r5 = 0;
- u8 sp8[8];
-
- if (gSharedMem[0x18000] != 0)
- {
- u8 i;
- s16 r2;
-
- for (i = 0; i < 4; i++)
- {
- Text_FillWindowRectDefPalette(
- &gWindowTemplate_Contest_MoveDescription,
- 0,
- gUnknown_083CA308[i][0],
- gUnknown_083CA308[i][1],
- gUnknown_083CA310[i][0] + 5,
- gUnknown_083CA310[i][1] + 1);
- }
- for (i = 0; i < 4; i++)
- {
- r2 = sContestantStatus[i].unk4;
- if (r2 < 0)
- {
- r2 = -r2;
- sp8[0] = CHAR_HYPHEN;
- r5++;
- }
- ConvertIntToDecimalStringN(sp8 + r5, r2, 0, 4);
- Text_InitWindowAndPrintText(
- &gWindowTemplate_Contest_MoveDescription,
- sp8,
- 592 + gContestantTurnOrder[i] * 22,
- gUnknown_083CA310[gContestantTurnOrder[i]][0],
- gUnknown_083CA310[gContestantTurnOrder[i]][1]);
- r5 = 0;
- }
- for (i = 0; i < 4; i++)
- {
- r2 = sContestantStatus[i].appeal2;
- if (r2 < 0)
- {
- r2 = -r2;
- sp8[0] = CHAR_HYPHEN;
- r5++;
- }
- ConvertIntToDecimalStringN(sp8 + r5, r2, 0, 4);
- Text_InitWindowAndPrintText(
- &gWindowTemplate_Contest_MoveDescription,
- sp8,
- 512 + gContestantTurnOrder[i] * 20,
- gUnknown_083CA308[gContestantTurnOrder[i]][0],
- gUnknown_083CA308[gContestantTurnOrder[i]][1]);
- r5 = 0;
- }
- SwapMoveDescAndContestTilemaps();
- }
-}
-
-void unref_sub_80B0EE8(s32 *a, s32 b)
-{
- s32 i;
- s32 j;
-
- for (i = 0; i < b - 1; i++)
- {
- for (j = b - 1; j > i; j--)
- {
- if (a[j - 1] > a[j])
- {
- s32 temp = a[j];
-
- a[j] = a[j - 1];
- a[j - 1] = temp;
- }
- }
- }
-}
-
-// something to do with contest NPC opponents, I think.
-void SortContestants(u8 a)
-{
- u8 sp0[4];
- u16 sp4[4] = {0};
- s32 i;
- s32 r2;
- s32 r4;
-
- for (i = 0; i < 4; i++)
- {
- sp4[i] = Random();
- for (r2 = 0; r2 < i; r2++)
- {
- if (sp4[i] == sp4[r2])
- {
- i--;
- break;
- }
- }
- }
-
- if (a == 0)
- {
- for (i = 0; i < 4; i++)
- {
- gContestantTurnOrder[i] = i;
- for (r4 = 0; r4 < i; r4++)
- {
- if (gContestMonRound1Points[gContestantTurnOrder[r4]] < gContestMonRound1Points[i]
- || (gContestMonRound1Points[gContestantTurnOrder[r4]] == gContestMonRound1Points[i] && sp4[gContestantTurnOrder[r4]] < sp4[i]))
- {
- for (r2 = i; r2 > r4; r2--)
- gContestantTurnOrder[r2] = gContestantTurnOrder[r2 - 1];
- gContestantTurnOrder[r4] = i;
- break;
- }
- }
- if (r4 == i)
- gContestantTurnOrder[i] = i;
- }
- memcpy(sp0, gContestantTurnOrder, sizeof(sp0));
- for (i = 0; i < 4; i++)
- gContestantTurnOrder[sp0[i]] = i;
- }
- else
- {
- memset(sp0, 0xFF, sizeof(sp0));
- for (i = 0; i < 4; i++)
- {
- u8 r2 = sContestantStatus[i].unkB_0;
-
- while (1)
- {
- u8 *ptr = &sp0[r2];
- if (*ptr == 0xFF)
- {
- *ptr = i;
- gContestantTurnOrder[i] = r2;
- break;
- }
- r2++;
- }
- }
- for (i = 0; i < 3; i++)
- {
- for (r4 = 3; r4 > i; r4--)
- {
- if (sContestantStatus[r4 - 1].unkB_0 == sContestantStatus[r4].unkB_0
- && gContestantTurnOrder[r4 - 1] < gContestantTurnOrder[r4]
- && sp4[r4 - 1] < sp4[r4])
- {
- u8 temp = gContestantTurnOrder[r4];
-
- gContestantTurnOrder[r4] = gContestantTurnOrder[r4 - 1];
- gContestantTurnOrder[r4 - 1] = temp;
- }
- }
- }
- }
-}
-
-void sub_80B1118(void)
-{
- s32 i;
-
- for (i = 0; i < 4; i++)
- {
- //LoadPalette(shared18000.unk18004[5 + i], (gContestantTurnOrder[i] + 5) * 16, 32);
- LoadPalette(shared18004 + (i + 5) * 16, (gContestantTurnOrder[i] + 5) * 16, 32);
- }
- sub_80AE514();
-}
-
-void sub_80B114C(u8 contestant)
-{
- bool8 r8;
- s32 i;
-
- sContestantStatus[contestant].appeal2 = 0;
- sContestantStatus[contestant].appeal1 = 0;
- r8 = sub_80AF404(contestant);
- if (r8)
- {
- u16 move = sContestantStatus[contestant].currMove;
- u8 effect = gContestMoves[move].effect;
- u8 rnd;
-
- sContestantStatus[contestant].moveCategory = gContestMoves[sContestantStatus[contestant].currMove].contestCategory;
- if (sContestantStatus[contestant].currMove == sContestantStatus[contestant].prevMove && sContestantStatus[contestant].currMove != MOVE_NONE)
- {
- sContestantStatus[contestant].disappointedRepeat = TRUE;
- sContestantStatus[contestant].moveRepeatCount++;
- }
- else
- {
- sContestantStatus[contestant].moveRepeatCount = 0;
- }
- sContestantStatus[contestant].appeal1 = gContestEffects[effect].appeal;
- sContestantStatus[contestant].appeal2 = gContestEffects[effect].appeal;
- shared192D0.jam = gContestEffects[effect].jam;
- shared192D0.jam2 = gContestEffects[effect].jam;
- shared192D0.contestant = contestant;
- for (i = 0; i < 4; i++)
- {
- sContestantStatus[i].jam = 0;
- shared192D0.unnervedPokes[i] = 0;
- }
- if (sContestantStatus[contestant].hasJudgesAttention && AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove) == 0)
- sContestantStatus[contestant].hasJudgesAttention = 0;
- gContestEffectFuncs[effect]();
- if (sContestantStatus[contestant].conditionMod == 1)
- sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].condition - 10;
- else if (sContestantStatus[contestant].appealTripleCondition)
- sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].condition * 3;
- else
- sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].condition;
- sContestantStatus[contestant].unk16 = 0;
- sContestantStatus[contestant].unk15_6 = 0;
- if (sub_80B214C(contestant))
- {
- u8 r2 = AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove);
-
- if (r2 != 0 && sContestantStatus[contestant].hasJudgesAttention)
- {
- sContestantStatus[contestant].unk16 = r2;
- sContestantStatus[contestant].unk15_6 = 1;
- sContestantStatus[contestant].hasJudgesAttention = 0;
- sContestantStatus[contestant].unk17 = sContestantStatus[contestant].appeal1 * sContestantStatus[contestant].unk16;
- sContestantStatus[contestant].unk15_3 = 1;
- }
- else
- {
- if (gContestMoves[sContestantStatus[contestant].currMove].comboStarterId != 0)
- {
- sContestantStatus[contestant].hasJudgesAttention = 1;
- sContestantStatus[contestant].unk15_6 = 1;
- }
- else
- {
- sContestantStatus[contestant].hasJudgesAttention = 0;
- }
- }
- }
- if (sContestantStatus[contestant].disappointedRepeat)
- sContestantStatus[contestant].unk18 = (sContestantStatus[contestant].moveRepeatCount + 1) * 10;
- if (sContestantStatus[contestant].nervous)
- {
- sContestantStatus[contestant].hasJudgesAttention = 0;
- sContestantStatus[contestant].appeal2 = 0;
- sContestantStatus[contestant].appeal1 = 0;
- }
- shared19328.bits_0 = Contest_GetMoveExcitement(sContestantStatus[contestant].currMove);
- if (sContestantStatus[contestant].overrideCategoryExcitementMod)
- shared19328.bits_0 = 1;
- if (shared19328.bits_0 > 0)
- {
- if (sContest.applauseLevel + shared19328.bits_0 > 4)
- shared19328.unk2 = 60;
- else
- shared19328.unk2 = 10;
- }
- else
- {
- shared19328.unk2 = 0;
- }
-
- rnd = Random() % 3;
- for (i = 0; i < 4; i++)
- {
- if (i != contestant)
- {
- if (rnd == 0)
- break;
- rnd--;
- }
- }
- sContestantStatus[contestant].unk1B = i;
- }
-}
-
-void SetContestantEffectStringID(u8 a, u8 b)
-{
- sContestantStatus[a].effectStringId = b;
-}
-
-void SetContestantEffectStringID2(u8 a, u8 b)
-{
- sContestantStatus[a].effectStringId2 = b;
-}
-
-void SetStartledString(u8 contestant, u8 jam)
-{
- if (jam >= 60)
- SetContestantEffectStringID(contestant, CONTEST_STRING_TRIPPED_OVER);
- else if (jam >= 40)
- SetContestantEffectStringID(contestant, CONTEST_STRING_LEAPT_UP);
- else if (jam >= 30)
- SetContestantEffectStringID(contestant, CONTEST_STRING_UTTER_CRY);
- else if (jam >= 20)
- SetContestantEffectStringID(contestant, CONTEST_STRING_TURNED_BACK);
- else if (jam >= 10)
- SetContestantEffectStringID(contestant, CONTEST_STRING_LOOKED_DOWN);
-}
-
-void sub_80B146C(u8 contestant, u8 stringId)
-{
- StringCopy(gStringVar1, gContestMons[contestant].nickname);
- StringCopy(gStringVar2, gMoveNames[sContestantStatus[contestant].currMove]);
- if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_COOL)
- StringCopy(gStringVar3, gText_Contest_Shyness);
- else if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_BEAUTY)
- StringCopy(gStringVar3, gText_Contest_Anxiety);
- else if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_CUTE)
- StringCopy(gStringVar3, gText_Contest_Laziness);
- else if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_SMART)
- StringCopy(gStringVar3, gText_Contest_Hesitancy);
- else
- StringCopy(gStringVar3, gText_Contest_Fear);
- StringExpandPlaceholders(gStringVar4, gUnknown_083CC188[stringId]);
- ContestClearGeneralTextWindow();
- Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
-}
-
-void MakeContestantNervous(u8 p)
-{
- sContestantStatus[p].nervous = 1;
- sContestantStatus[p].currMove = MOVE_NONE;
-}
-
-// Determines turn order?
-void sub_80B159C(void)
-{
- u8 r12 = 0;
- s32 i;
- s32 j;
- u8 sp0[4];
- u8 sp4[4];
-
- for (i = 0; i < 4; i++)
- {
- sp0[i] = gContestantTurnOrder[i];
- sp4[i] = 0;
- }
-
- for (i = 0; i < 4; i++)
- {
- for (j = 0; j < 4; j++)
- {
- if (sContestantStatus[j].nextTurnOrder == i)
- {
- sp0[j] = i;
- sp4[j] = 1;
- break;
- }
- }
- if (j == 4)
- {
- for (j = 0; j < 4; j++)
- {
- if (sp4[j] == 0 && sContestantStatus[j].nextTurnOrder == 0xFF)
- {
- r12 = j;
- j++;
- break;
- }
- }
- for (; j < 4; j++)
- {
- if (sp4[j] == 0 && sContestantStatus[j].nextTurnOrder == 0xFF
- && gContestantTurnOrder[r12] > gContestantTurnOrder[j])
- r12 = j;
- }
- sp0[r12] = i;
- sp4[r12] = 1;
- }
- }
-
- for (i = 0; i < 4; i++)
- {
- shared192D0.turnOrder[i] = sp0[i];
- sContestantStatus[i].nextTurnOrder = 0xFF;
- sContestantStatus[i].turnOrderMod = 0;
- gContestantTurnOrder[i] = sp0[i];
- }
-}
-
-void sub_80B16D0(struct Sprite *sprite)
-{
- if (sprite->data[1]++ > 84)
- {
- sprite->data[1] = 0;
- sprite->invisible = TRUE;
- sprite->callback = SpriteCallbackDummy;
- sContest.unk1920A_4 = 0;
- }
-}
-
-void sub_80B1710(u8 a)
-{
- u8 spriteId = sContest.unk19216;
-
- switch (a)
- {
- case 0:
- case 1:
- gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0];
- PlaySE(SE_FAILURE);
- break;
- case 2:
- gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 4;
- PlaySE(SE_SUCCESS);
- break;
- case 3:
- gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 8;
- PlaySE(SE_SUCCESS);
- break;
- case 4:
- gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12;
- PlaySE(SE_WARP_IN);
- break;
- case 5: // exactly the same as case 4
- gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12;
- PlaySE(SE_WARP_IN);
- break;
- case 6:
- gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 16;
- PlaySE(SE_WARP_IN);
- break;
- case 8:
- gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 24;
- PlaySE(SE_M_HEAL_BELL);
- break;
- case 7:
- default:
- gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 20;
- PlaySE(SE_WARP_IN);
- break;
- }
- gSprites[spriteId].data[1] = 0;
- gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].callback = sub_80B16D0;
- sContest.unk1920A_4 = 1;
-}
-
-void sub_80B1928(void)
-{
- s32 i;
-
- for (i = 0; i < 5; i++)
- {
- const u8 *src;
-
- if (i < sContest.applauseLevel)
- src = gContestApplauseMeterGfx + 64;
- else
- src = gContestApplauseMeterGfx;
- CpuCopy32(src, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 17 + i) * 32), 32);
- CpuCopy32(src + 32, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 25 + i) * 32), 32);
- if (sContest.applauseLevel > 4)
- sub_80B1A2C();
- }
-}
-
-void unref_sub_80B19D0(void)
-{
- u8 str[20];
- StringCopy(str, gUnknown_083CC2EC);
- Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, str, 680, 0, 0);
-}
-
-s8 Contest_GetMoveExcitement(u16 move)
-{
- return gContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory];
-}
-
-// Launches crowd movement task, maybe
-u8 sub_80B1A2C(void)
-{
- u8 taskId = CreateTask(c3_08130B10, 10);
-
- gTasks[taskId].data[1] = 1;
- gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x0ABE2);
- return taskId;
-}
-
-void c3_08130B10(u8 taskId)
-{
- if (++gTasks[taskId].data[0] == 1)
- {
- gTasks[taskId].data[0] = 0;
- if (gTasks[taskId].data[3] == 0)
- gTasks[taskId].data[4]++;
- else
- gTasks[taskId].data[4]--;
- BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, gTasks[taskId].data[4], RGB(31, 31, 31));
- if (gTasks[taskId].data[4] == 0 || gTasks[taskId].data[4] == 16)
- {
- gTasks[taskId].data[3] ^= 1;
- if (sContest.applauseLevel < 5)
- {
- BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, 0, RGB(31, 0, 0));
- DestroyTask(taskId);
- }
- }
- }
-}
-
-void sub_80B1B14(void)
-{
- CreateTask(sub_80B1B68, 10);
- gSprites[sContest.applauseMeterSpriteId].pos2.x = -70;
- gSprites[sContest.applauseMeterSpriteId].invisible = FALSE;
- sContest.unk1920A_6 = 1;
-}
-
-void sub_80B1B68(u8 taskId)
-{
- struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId];
-
- gTasks[taskId].data[10] += 1664;
- sprite->pos2.x += gTasks[taskId].data[10] >> 8;
- gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF;
- if (sprite->pos2.x > 0)
- sprite->pos2.x = 0;
- if (sprite->pos2.x == 0)
- {
- sContest.unk1920A_6 = 0;
- DestroyTask(taskId);
- }
-}
-
-void sub_80B1BDC(void)
-{
- if (gSprites[sContest.applauseMeterSpriteId].invisible == TRUE)
- {
- sContest.unk1920A_6 = 0;
- }
- else
- {
- CreateTask(sub_80B1C34, 10);
- gSprites[sContest.applauseMeterSpriteId].pos2.x = 0;
- sContest.unk1920A_6 = 1;
- }
-}
-
-void sub_80B1C34(u8 taskId)
-{
- struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId];
-
- gTasks[taskId].data[10] += 1664;
- sprite->pos2.x -= gTasks[taskId].data[10] >> 8;
- gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF;
- if (sprite->pos2.x < -70)
- sprite->pos2.x = -70;
- if (sprite->pos2.x == -70)
- {
- sprite->invisible = TRUE;
- sContest.unk1920A_6 = 0;
- DestroyTask(taskId);
- }
-}
-
-void sub_80B1CBC(s8 a)
-{
- u8 taskId = CreateTask(sub_80B1CFC, 5);
-
- gTasks[taskId].data[0] = a;
- sContest.unk1920A_5 = 1;
-}
-
-void sub_80B1CFC(u8 taskId)
-{
- switch (gTasks[taskId].data[10])
- {
- case 0:
- sub_80B1B14();
- gTasks[taskId].data[10]++;
- break;
- case 1:
- if (!sContest.unk1920A_6)
- {
- nullsub_18(gTasks[taskId].data[0]);
- gTasks[taskId].data[10]++;
- }
- break;
- case 2:
- if (gTasks[taskId].data[11]++ > 20)
- {
- gTasks[taskId].data[11] = 0;
- sub_80B1928();
- sContest.unk1920A_5 = 0;
- DestroyTask(taskId);
- }
- break;
- }
-}
-
-void unref_sub_80B1D84(void)
-{
- gSprites[sContest.applauseMeterSpriteId].pos2.x = 0;
- gSprites[sContest.applauseMeterSpriteId].invisible = FALSE;
-}
-
-void unref_sub_80B1DB8(void)
-{
- gSprites[sContest.applauseMeterSpriteId].invisible = TRUE;
-}
-
-void sub_80B1DDC(void)
-{
- CreateTask(sub_80B1DFC, 15);
- sContest.unk1920A_7 = 1;
-}
-
-void sub_80B1DFC(u8 taskId)
-{
- if (gTasks[taskId].data[10]++ > 6)
- {
- register struct Task *task asm("r0");
- register u32 r4 asm("r4") = taskId * 4;
-
- gTasks[taskId].data[10] = 0;
- if (gTasks[taskId].data[11] == 0)
- {
- DmaCopy32Defvars(3, shared16800, (void *)(VRAM + 0x2000), 0x1000);
- }
- else
- {
- DmaCopy32Defvars(3, shared15800, (void *)(VRAM + 0x2000), 0x1000);
- gTasks[taskId].data[12]++;
- }
-
- // Why won't this match the normal way?
- asm("add %0, %1, #0\n\t"
- "add %0, %3\n\t"
- "lsl %0, #3\n\t"
- "add %0, %2\n\t"
- : "=r"(task):"r"(r4),"r"(gTasks),"r"(taskId));
-
- //gTasks[taskId].data[11] ^= 1;
- task->data[11] ^= 1;
-
- //if (gTasks[taskId].data[12] == 9)
- if (task->data[12] == 9)
- {
- sContest.unk1920A_7 = 0;
- DestroyTask(taskId);
- }
- }
-}
-
-#define tBlendColor data[0]
-#define tBlendCoeff data[1]
-
-void sub_80B1EA8(s8 a, s8 b)
-{
- u8 taskId = CreateTask(sub_80B1F4C, 10);
- u16 blendColor;
- u8 blendCoeff;
- u8 r3;
-
- if (a > 0)
- {
- blendColor = RGB(30, 27, 8);
- if (b > 0)
- {
- blendCoeff = 0;
- r3 = sContest.applauseLevel * 3;
- }
- else
- {
- blendCoeff = sContest.applauseLevel * 3;
- r3 = 0;
- }
- }
- else
- {
- blendColor = 0;
- if (b > 0)
- {
- blendCoeff = 0;
- r3 = 12;
- }
- else
- {
- blendCoeff = 12;
- r3 = 0;
- }
- }
- gTasks[taskId].tBlendColor = blendColor;
- gTasks[taskId].tBlendCoeff = blendCoeff;
- gTasks[taskId].data[2] = b;
- gTasks[taskId].data[3] = r3;
- sContest.unk1920B_0 = 0;
-}
-
-void sub_80B1F4C(u8 taskId)
-{
- if (gTasks[taskId].data[10]++ >= 0)
- {
- gTasks[taskId].data[10] = 0;
- if (gTasks[taskId].data[2] > 0)
- gTasks[taskId].tBlendCoeff++;
- else
- gTasks[taskId].tBlendCoeff--;
- BlendPalette(17, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor);
- BlendPalette(26, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor);
- if (gTasks[taskId].tBlendCoeff == gTasks[taskId].data[3])
- {
- DestroyTask(taskId);
- sContest.unk1920B_0 = 0;
- }
- }
-}
-
-#undef tBlendColor
-#undef tBlendCoeff
-
-void sub_80B1FD0(bool8 a)
-{
- s32 i;
-
- for (i = 0; i < 4; i++)
- {
- if (sContestantStatus[i].turnOrderMod != 0 && a)
- {
- CpuCopy32(
- GetTurnOrderNumberGfx(i),
- (void *)(VRAM + 0x10000 + (gSprites[shared19338[i].unk1].oam.tileNum + 5) * 32),
- 64);
- gSprites[shared19338[i].unk1].pos1.y = gUnknown_083CA33C[gContestantTurnOrder[i]];
- gSprites[shared19338[i].unk1].invisible = FALSE;
- }
- else
- {
- gSprites[shared19338[i].unk1].invisible = TRUE;
- }
- }
-}
-
-const u8 *GetTurnOrderNumberGfx(u8 contestant)
-{
- if (sContestantStatus[contestant].turnOrderMod != 1)
- return gContestNextTurnRandomGfx;
- else
- return gContestNextTurnNumbersGfx + sContestantStatus[contestant].nextTurnOrder * 64;
-}
-
-void sub_80B20C4(void)
-{
- s32 i;
-
- for (i = 0; i < 4; i++)
- {
- if (shared192D0.unnervedPokes[i] != 0 && !Contest_IsMonsTurnDisabled(i))
- {
- u8 r4 = gContestantTurnOrder[i] * 5 + 2;
- u16 r0 = GetStatusSymbolTileOffset(i, 3);
-
- *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x28) = r0;
- *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x2A) = r0 + 1;
- *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x28) = r0 + 16;
- *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x2A) = r0 + 17;
- PlaySE(SE_CONTEST_ICON_CHANGE);
- }
- }
-}
-
-bool8 sub_80B214C(u8 a)
-{
- if (sContestantStatus[a].disappointedRepeat || sContestantStatus[a].nervous)
- return FALSE;
- else
- return TRUE;
-}
-
-void sub_80B2184(void)
-{
- s32 i;
-
- ((vBgCnt *)&REG_BG1CNT)->priority = 0;
- ((vBgCnt *)&REG_BG1CNT)->screenSize = 1;
- ((vBgCnt *)&REG_BG1CNT)->areaOverflowMode = 0;
-
- gBattle_BG1_X = DISPLAY_WIDTH;
- gBattle_BG1_Y = DISPLAY_HEIGHT;
- REG_BG1HOFS = DISPLAY_WIDTH;
- REG_BG1VOFS = DISPLAY_HEIGHT;
-
- DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000);
- LZDecompressVram(gUnknown_08D17C3C, (void *)(VRAM + 0xF000));
-
- ((vBgCnt *)&REG_BG1CNT)->charBaseBlock = 0;
-
- for (i = 0; i < 4; i++)
- {
- gSprites[shared19338[i].unk0].oam.priority = 1;
- gSprites[shared19338[i].unk1].oam.priority = 1;
- }
-
- ((vBgCnt *)&REG_BG2CNT)->priority = 1;
- ((vBgCnt *)&REG_BG0CNT)->priority = 1;
- ((vBgCnt *)&REG_BG1CNT)->screenSize = 2;
-}
-
-void sub_80B2280(void)
-{
- s32 i;
-
- DmaClearLarge32(3, (void *)(VRAM + 0x8000), 0x2000, 0x1000);
- DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000);
-
- gBattle_BG1_X = 0;
- gBattle_BG1_Y = 0;
-
- ((vBgCnt *)&REG_BG1CNT)->priority = 1;
- ((vBgCnt *)&REG_BG1CNT)->screenSize = 0;
- ((vBgCnt *)&REG_BG1CNT)->areaOverflowMode = 0;
- ((vBgCnt *)&REG_BG1CNT)->charBaseBlock = 2;
-
- for (i = 0; i < 4; i++)
- {
- gSprites[shared19338[i].unk0].oam.priority = 0;
- gSprites[shared19338[i].unk1].oam.priority = 0;
- }
-}
-
-void sub_80B237C(u8 taskId)
-{
- gBattle_BG1_X = 0;
- gBattle_BG1_Y = DISPLAY_HEIGHT;
- PlaySE12WithPanning(SE_CONTEST_CURTAIN_FALL, 0);
- gTasks[taskId].func = sub_80B23BC;
-}
-
-void sub_80B23BC(u8 taskId)
-{
- if ((s16)(gBattle_BG1_Y -= 7) < 0)
- gBattle_BG1_Y = 0;
- if (gBattle_BG1_Y == 0) // Why cast?
- {
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80B2400;
- }
-}
-
-void sub_80B2400(u8 taskId)
-{
- s32 i;
-
- switch (gTasks[taskId].data[0])
- {
- case 0:
- for (i = 0; i < 4; i++)
- sContest.unk19218[i] = gContestantTurnOrder[i];
- sub_80AFA5C();
- sub_80B0588();
- DrawConditionStars();
- sub_80B1118();
- sub_80B1FD0(TRUE);
- sub_80AFFA0();
- gTasks[taskId].data[0] = 1;
- break;
- case 1:
- if (gIsLinkContest & 1)
- {
- u8 taskId2;
-
- sContest.unk1920B_2 = 1;
- if (sub_80AE074())
- sub_80AF438();
- taskId2 = CreateTask(sub_80C8C80, 0);
- SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC);
- ContestPrintLinkStandby();
- gTasks[taskId].data[0] = 2;
- }
- else
- {
- sub_80AF438();
- gTasks[taskId].data[0] = 3;
- }
- break;
- case 2:
- if (!sContest.unk1920B_2)
- gTasks[taskId].data[0] = 3;
- break;
- case 3:
- DrawStatusSymbols();
- SwapMoveDescAndContestTilemaps();
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80B253C;
- break;
- }
-}
-
-void sub_80B2508(u8 taskId)
-{
- if ((s16)(gBattle_BG1_Y += 7) > DISPLAY_HEIGHT)
- gTasks[taskId].func = sub_80ADCDC;
-}
-
-void sub_80B253C(u8 taskId)
-{
- if (gTasks[taskId].data[2] < 10)
- {
- gTasks[taskId].data[2]++;
- }
- else
- {
- if (gTasks[taskId].data[1] == 0)
- {
- if (gTasks[taskId].data[0] == 16)
- gTasks[taskId].data[1]++;
- else
- gTasks[taskId].data[0]++;
- }
- else
- {
- if (gTasks[taskId].data[0] == 0)
- {
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80B25A4;
- }
- else
- {
- gTasks[taskId].data[0]--;
- }
- }
- }
-}
-
-void sub_80B25A4(u8 taskId)
-{
- if (gTasks[taskId].data[2] < 10)
- {
- gTasks[taskId].data[2]++;
- }
- else
- {
- gTasks[taskId].data[2] = 0;
- PlaySE12WithPanning(SE_CONTEST_CURTAIN_RISE, 0);
- gTasks[taskId].func = sub_80B2508;
- }
-}
-
-void sub_80B25E4(u8 a)
-{
- s32 i;
- u8 taskId;
-
- for (i = 0; i < 4; i++)
- {
- gSprites[shared19338[i].unk0].oam.matrixNum = AllocOamMatrix();
- gSprites[shared19338[i].unk0].oam.affineMode = 1;
- StartSpriteAffineAnim(&gSprites[shared19338[i].unk0], a);
- if (a == 2)
- {
- AnimateSprite(&gSprites[shared19338[i].unk0]);
- gSprites[shared19338[i].unk0].invisible = FALSE;
- }
- }
- taskId = CreateTask(sub_80B26C8, 5);
- gTasks[taskId].data[0] = a;
- sContest.unk1920B_1 = 1;
-}
-
-void sub_80B26C8(u8 taskId)
-{
- s32 i;
-
- if (gSprites[shared19338[0].unk0].affineAnimEnded)
- {
- if ((u8)gTasks[taskId].data[0] == 1)
- {
- for (i = 0; i < 4; i++)
- gSprites[shared19338[i].unk0].invisible = TRUE;
- }
- for (i = 0; i < 4; i++)
- FreeSpriteOamMatrix(&gSprites[shared19338[i].unk0]);
- sContest.unk1920B_1 = 0;
- DestroyTask(taskId);
- }
-}
-
-u16 SanitizeMove(u16 move)
-{
- if (move >= NUM_MOVES)
- move = MOVE_POUND;
- return move;
-}
-
-u16 SanitizeSpecies(u16 species)
-{
- if (species >= NUM_SPECIES)
- species = SPECIES_NONE;
- return species;
-}
-
-void sub_80B2790(u8 a)
-{
- s32 i;
- u16 move = SanitizeMove(sContestantStatus[a].currMove);
- u16 species = SanitizeSpecies(gContestMons[a].species);
- u8 r5_2;
-
- memset(&shared19348, 0, sizeof(shared19348));
- ClearBattleAnimationVars();
- for (i = 0; i < 4; i++)
- gBattleMonForms[i] = 0;
- switch (move)
- {
- case MOVE_CURSE:
- if (gBaseStats[species].type1 == TYPE_GHOST || gBaseStats[species].type2 == TYPE_GHOST)
- gAnimMoveTurn = 0;
- else
- gAnimMoveTurn = 1;
- 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;
- break;
- case MOVE_RETURN:
- gAnimFriendship = 0xFF;
- break;
- case MOVE_FRUSTRATION:
- gAnimFriendship = 0;
- break;
- case MOVE_SOLAR_BEAM:
- case MOVE_RAZOR_WIND:
- case MOVE_SKULL_BASH:
- case MOVE_SKY_ATTACK:
- if (sContest.unk1925E == 0)
- {
- sContest.unk1925E = 2;
- gAnimMoveTurn = 0;
- }
- else
- {
- gAnimMoveTurn = 1;
- }
- break;
- }
- sub_80B2968();
-}
-
-void sub_80B28CC(int unused)
-{
- memset(&shared19348, 0, sizeof(shared19348));
- if (sContest.unk1925E != 0)
- sContest.unk1925E--;
-}
-
-void sub_80B28F0(u8 a)
-{
- shared19348.unk5 = a;
- shared19348.unk0 = SanitizeSpecies(gContestMons[a].species);
- shared19348.unk8 = gContestMons[a].personality;
- shared19348.unkC = gContestMons[a].otId;
-}
-
-void sub_80B292C(void)
-{
- gBattlerSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
- InitSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]]);
- sub_80B2968();
-}
-
-void sub_80B2968(void)
-{
- struct Sprite *sprite = &gSprites[gBattlerSpriteIds[3]];
-
- sprite->pos2.x = 0;
- sprite->pos2.y = 0;
- sprite->pos1.x = GetBattlerSpriteCoord(3, 0);
- sprite->pos1.y = GetBattlerSpriteCoord(3, 1);
- sprite->invisible = TRUE;
-}
-
-void SelectContestMoveBankTarget(u16 move)
-{
- switch (gBattleMoves[move].target)
- {
- case TARGET_UNK2:
- case TARGET_USER:
- gBattlerTarget = 2;
- break;
- case TARGET_SELECTED_POKEMON:
- case TARGET_RANDOM:
- case TARGET_BOTH_ENEMIES:
- case TARGET_ALL_EXCEPT_USER:
- default:
- gBattlerTarget = 3;
- break;
- }
-}
-
-bool8 Contest_SaveWinner(u8 a)
-{
- s32 i;
- u8 r7 = Random() % 3;
-
- for (i = 0; i < 3; i++)
- {
- if (gContestFinalStandings[i] == 0)
- break;
- }
- if (a == 0xFF && i != gContestPlayerMonIndex)
- return FALSE;
- switch (gSpecialVar_ContestCategory)
- {
- case CONTEST_CATEGORY_COOL:
- r7 += 0;
- break;
- case CONTEST_CATEGORY_BEAUTY:
- r7 += 3;
- break;
- case CONTEST_CATEGORY_CUTE:
- r7 += 6;
- break;
- case CONTEST_CATEGORY_SMART:
- r7 += 9;
- break;
- case CONTEST_CATEGORY_TOUGH:
- r7 += 12;
- break;
- }
- if (a != 0xFE)
- {
- u8 r4 = GetContestWinnerSaveIdx(a, 1);
-
- 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;
- else
- gSaveBlock1.contestWinners[r4].contestCategory = r7;
- }
- else
- {
- shared15DE0.personality = gContestMons[i].personality;
- shared15DE0.otId = gContestMons[i].otId;
- shared15DE0.species = gContestMons[i].species;
- StringCopy(shared15DE0.nickname, gContestMons[i].nickname);
- if (gIsLinkContest & 1)
- StringCopy(shared15DE0.trainerName, gLinkPlayers[i].name);
- else
- StringCopy(shared15DE0.trainerName, gContestMons[i].trainerName);
- shared15DE0.contestCategory = r7;
- }
- return TRUE;
-}
-
-u8 GetContestWinnerSaveIdx(u8 a, u8 b)
-{
- s32 i;
-
- switch (a)
- {
- case 0:
- case 1:
- return a;
- case 2:
- if (b != 0)
- {
- for (i = 4; i >= 3; i--)
- memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner));
- }
- return 2;
- case 3:
- if (b != 0)
- {
- for (i = 7; i >= 6; i--)
- memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner));
- }
- return 5;
- default:
- switch (gSpecialVar_ContestCategory)
- {
- case CONTEST_CATEGORY_COOL:
- return 8;
- case CONTEST_CATEGORY_BEAUTY:
- return 9;
- case CONTEST_CATEGORY_CUTE:
- return 10;
- case CONTEST_CATEGORY_SMART:
- return 11;
- case CONTEST_CATEGORY_TOUGH:
- default:
- return 12;
- }
- }
-}
-
-void Contest_ResetWinners(void)
-{
- s32 i;
-
- for (i = 0; i < 8; i++)
- gSaveBlock1.contestWinners[i] = gUnknown_083CC5D0[i];
-}
+// File boundary
diff --git a/src/contest_2.c b/src/contest_2.c
new file mode 100644
index 000000000..e86de000e
--- /dev/null
+++ b/src/contest_2.c
@@ -0,0 +1,3576 @@
+#include "global.h"
+#include "contest.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "blend_palette.h"
+#include "constants/event_objects.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/songs.h"
+#include "constants/species.h"
+#include "contest_ai.h"
+#include "contest_effect.h"
+#include "data2.h"
+#include "decompress.h"
+#include "ewram.h"
+#include "graphics.h"
+#include "link.h"
+#include "m4a.h"
+#include "menu.h"
+#include "palette.h"
+#include "random.h"
+#include "rom_8077ABC.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+#include "util.h"
+
+#include "contest_internal.h"
+
+extern void sub_80C8C80(u8);
+extern void sub_80ADCDC(u8 taskId);
+
+extern struct MusicPlayerInfo gMPlayInfo_SE1;
+extern u8 gBattleMonForms[];
+extern u8 gDisplayedStringBattle[];
+extern u8 gBattlerTarget;
+extern u8 gBattlerSpriteIds[];
+extern struct Window gWindowTemplate_Contest_MoveDescription;
+
+extern struct SpriteTemplate gUnknown_02024E8C;
+extern const struct ContestPokemon gContestOpponents[60];
+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 gUnknown_083CA33C[];
+extern const struct SpriteSheet gUnknown_083CA350;
+extern const struct SpriteTemplate gSpriteTemplate_83CA3AC;
+extern const struct CompressedSpriteSheet gUnknown_083CA3C4[];
+extern const struct SpritePalette gUnknown_083CA3E4;
+extern const struct SpriteTemplate gSpriteTemplate_83CA3F4[];
+extern const struct SubspriteTable gSubspriteTables_83CA464[];
+extern const struct CompressedSpriteSheet gUnknown_083CA46C;
+extern const struct SpritePalette gUnknown_083CA474;
+extern const struct SpriteTemplate gSpriteTemplate_83CA484;
+extern const struct SpriteTemplate sSpriteTemplate_Judge;
+extern const struct CompressedSpriteSheet sSpriteSheet_Judge;
+extern const struct CompressedSpriteSheet sSpriteSheet_JudgeSymbols;
+extern const struct CompressedSpritePalette sSpritePalette_JudgeSymbols;
+extern const struct SpriteTemplate sSpriteTemplate_JudgeSpeechBubble;
+extern const struct CompressedSpriteSheet gUnknown_083CC3AC;
+extern const struct CompressedSpritePalette gUnknown_083CC3B4[];
+extern const struct SpriteTemplate gSpriteTemplate_83CC454[];
+extern const u8 *const gUnknown_083CC188[];
+extern const u8 gText_Contest_Shyness[];
+extern const u8 gText_Contest_Anxiety[];
+extern const u8 gText_Contest_Laziness[];
+extern const u8 gText_Contest_Hesitancy[];
+extern const u8 gText_Contest_Fear[];
+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 u8 gUnknownText_MissedTurn[];
+extern const u8 gUnknownText_LinkStandbyAndWinner[];
+extern void (*const gContestEffectFuncs[])(void);
+extern const s8 gContestExcitementTable[][5];
+
+void TryPutPlayerLast(void)
+{
+ if (!(gIsLinkContest & 1))
+ gContestPlayerMonIndex = 3;
+}
+
+bool8 IsPlayerLinkLeader(void)
+{
+ if (gContestPlayerMonIndex == gContestLinkLeaderIndex)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void Contest_CreatePlayerMon(u8 partyIndex)
+{
+ u8 name[20];
+ u16 heldItem;
+ s16 cool;
+ s16 beauty;
+ s16 cute;
+ s16 smart;
+ s16 tough;
+
+ StringCopy(name, gSaveBlock2.playerName);
+ Text_StripExtCtrlCodes(name);
+ if (gIsLinkContest & 1)
+ {
+ u8 temp = name[5];
+
+ name[5] = EOS;
+ name[7] = temp;
+ }
+ memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, 8);
+ if (gSaveBlock2.playerGender == MALE)
+ gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN;
+ else
+ gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_MAY;
+ gContestMons[gContestPlayerMonIndex].flags = 0;
+ gContestMons[gContestPlayerMonIndex].unk2C[0] = 0;
+ gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES);
+ GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name);
+ StringGetEnd10(name);
+ if (gIsLinkContest & 1)
+ {
+ Text_StripExtCtrlCodes(name);
+ if (GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE)
+ {
+ name[5] = EOS;
+ name[10] = EXT_CTRL_CODE_BEGIN;
+ }
+ else
+ {
+ u8 temp = name[5];
+
+ name[5] = EOS;
+ name[10] = temp;
+ }
+ }
+ memcpy(gContestMons[gContestPlayerMonIndex].nickname, name, 11);
+ gContestMons[gContestPlayerMonIndex].cool = GetMonData(&gPlayerParty[partyIndex], MON_DATA_COOL);
+ gContestMons[gContestPlayerMonIndex].beauty = GetMonData(&gPlayerParty[partyIndex], MON_DATA_BEAUTY);
+ gContestMons[gContestPlayerMonIndex].cute = GetMonData(&gPlayerParty[partyIndex], MON_DATA_CUTE);
+ gContestMons[gContestPlayerMonIndex].smart = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SMART);
+ gContestMons[gContestPlayerMonIndex].tough = GetMonData(&gPlayerParty[partyIndex], MON_DATA_TOUGH);
+ gContestMons[gContestPlayerMonIndex].sheen = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SHEEN);
+ gContestMons[gContestPlayerMonIndex].moves[0] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1);
+ gContestMons[gContestPlayerMonIndex].moves[1] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE2);
+ gContestMons[gContestPlayerMonIndex].moves[2] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE3);
+ gContestMons[gContestPlayerMonIndex].moves[3] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE4);
+ gContestMons[gContestPlayerMonIndex].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY);
+ gContestMons[gContestPlayerMonIndex].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID);
+
+ heldItem = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM);
+ cool = gContestMons[gContestPlayerMonIndex].cool;
+ beauty = gContestMons[gContestPlayerMonIndex].beauty;
+ cute = gContestMons[gContestPlayerMonIndex].cute;
+ smart = gContestMons[gContestPlayerMonIndex].smart;
+ tough = gContestMons[gContestPlayerMonIndex].tough;
+ if (heldItem == ITEM_RED_SCARF)
+ cool += 20;
+ else if (heldItem == ITEM_BLUE_SCARF)
+ beauty += 20;
+ else if (heldItem == ITEM_PINK_SCARF)
+ cute += 20;
+ else if (heldItem == ITEM_GREEN_SCARF)
+ smart += 20;
+ else if (heldItem == ITEM_YELLOW_SCARF)
+ tough += 20;
+ if (cool > 255)
+ cool = 255;
+ if (beauty > 255)
+ beauty = 255;
+ if (cute > 255)
+ cute = 255;
+ if (smart > 255)
+ smart = 255;
+ if (tough > 255)
+ tough = 255;
+ gContestMons[gContestPlayerMonIndex].cool = cool;
+ gContestMons[gContestPlayerMonIndex].beauty = beauty;
+ gContestMons[gContestPlayerMonIndex].cute = cute;
+ gContestMons[gContestPlayerMonIndex].smart = smart;
+ gContestMons[gContestPlayerMonIndex].tough = tough;
+}
+
+void Contest_InitAllPokemon(u8 contestType, u8 rank)
+{
+ s32 i;
+ u8 opponentsCount = 0;
+ u8 opponents[ARRAY_COUNT(gContestOpponents) + 1];
+
+ TryPutPlayerLast();
+
+ // Find all suitable opponents
+ for (i = 0; i < (s32)ARRAY_COUNT(gContestOpponents); i++)
+ {
+ if (rank == gContestOpponents[i].whichRank)
+ {
+ if (contestType == 0 && gContestOpponents[i].aiPool_Cool)
+ opponents[opponentsCount++] = i;
+ else if (contestType == 1 && gContestOpponents[i].aiPool_Beauty)
+ opponents[opponentsCount++] = i;
+ else if (contestType == 2 && gContestOpponents[i].aiPool_Cute)
+ opponents[opponentsCount++] = i;
+ else if (contestType == 3 && gContestOpponents[i].aiPool_Smart)
+ opponents[opponentsCount++] = i;
+ else if (contestType == 4 && gContestOpponents[i].aiPool_Tough)
+ opponents[opponentsCount++] = i;
+ }
+ }
+ opponents[opponentsCount] = 0xFF;
+
+ // Choose three random opponents from the list
+ for (i = 0; i < 3; i++)
+ {
+ u16 rnd = Random() % opponentsCount;
+ s32 j;
+
+ gContestMons[i] = gContestOpponents[opponents[rnd]];
+ for (j = rnd; opponents[j] != 0xFF; j++)
+ opponents[j] = opponents[j + 1];
+ opponentsCount--;
+ }
+
+#ifndef NONMATCHING
+ // Compiler, please put i in r5. Thanks.
+ asm(""::"r"(i));
+ asm(""::"r"(i));
+ asm(""::"r"(i));
+ asm(""::"r"(i));
+ asm(""::"r"(i));
+#endif
+
+ Contest_CreatePlayerMon(gContestMonPartyIndex);
+}
+
+// GetContestAvailability?
+u8 CanMonParticipateInContest(struct Pokemon *pkmn)
+{
+ u8 ribbon;
+ u8 retVal;
+
+ if (GetMonData(pkmn, MON_DATA_IS_EGG))
+ return 3;
+ if (GetMonData(pkmn, MON_DATA_HP) == 0)
+ return 4;
+ switch (gSpecialVar_ContestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ ribbon = GetMonData(pkmn, MON_DATA_COOL_RIBBON);
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ ribbon = GetMonData(pkmn, MON_DATA_BEAUTY_RIBBON);
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ ribbon = GetMonData(pkmn, MON_DATA_CUTE_RIBBON);
+ break;
+ case CONTEST_CATEGORY_SMART:
+ ribbon = GetMonData(pkmn, MON_DATA_SMART_RIBBON);
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ ribbon = GetMonData(pkmn, MON_DATA_TOUGH_RIBBON);
+ break;
+ default:
+ return 0;
+ }
+
+ // Couldn't get this to match any other way.
+ // Returns 2, 1, or 0 respectively if ribbon's rank is above, equal, or below
+ // the current contest rank.
+ if (ribbon > gSpecialVar_ContestRank)
+ retVal = 2;
+ else if (ribbon >= gSpecialVar_ContestRank)
+ retVal = 1;
+ else
+ retVal = 0;
+ return retVal;
+}
+
+void DrawContestantWindowText(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ Text_FillWindowRectDefPalette(
+ &gWindowTemplate_Contest_MoveDescription,
+ 0,
+ gUnknown_083CA308[gContestantTurnOrder[i]][0],
+ gUnknown_083CA308[gContestantTurnOrder[i]][1],
+ gUnknown_083CA310[gContestantTurnOrder[i]][0] + 5,
+ gUnknown_083CA310[gContestantTurnOrder[i]][1] + 1);
+ PrintContestantTrainerName(i);
+ PrintContestantMonName(i);
+ }
+}
+
+u8 *Contest_CopyStringWithColor(u8 *dest, const u8 *src, u8 color)
+{
+ dest = StringCopy(dest, gUnknown_083CC59C); // {HIGHLIGHT TRANSPARENT}{COLOR}$
+ *dest++ = color;
+ dest = StringCopy(dest, src);
+ return dest;
+}
+
+void PrintContestantTrainerName(u8 contestant)
+{
+ PrintContestantTrainerNameWithColor(contestant, contestant + 10);
+}
+
+void PrintContestantTrainerNameWithColor(u8 contestant, u8 color)
+{
+ u8 *str = gDisplayedStringBattle;
+
+ str = Contest_CopyStringWithColor(str, gEmptyString_81E72B0, color);
+ str[0] = EXT_CTRL_CODE_BEGIN;
+ str[1] = EXT_CTRL_CODE_SIZE;
+ str[2] = 4;
+ str += 3;
+
+ *str++ = CHAR_SLASH;
+
+ if ((gIsLinkContest & 1) && gLinkPlayers[contestant].language == LANGUAGE_JAPANESE)
+ {
+ StringCopy(str, gLinkPlayers[contestant].name);
+ Text_InitWindow8004D04(
+ &gWindowTemplate_Contest_MoveDescription,
+ gDisplayedStringBattle,
+ 592 + gContestantTurnOrder[contestant] * 22,
+ 251 + gUnknown_083CA310[gContestantTurnOrder[contestant]][0] * 8,
+ gUnknown_083CA310[gContestantTurnOrder[contestant]][1] * 8,
+ 1);
+ }
+ else
+ {
+ StringCopy(str, gContestMons[contestant].trainerName);
+ Text_InitWindowAndPrintText(
+ &gWindowTemplate_Contest_MoveDescription,
+ gDisplayedStringBattle,
+ 592 + gContestantTurnOrder[contestant] * 22,
+ gUnknown_083CA310[gContestantTurnOrder[contestant]][0],
+ gUnknown_083CA310[gContestantTurnOrder[contestant]][1]);
+ }
+}
+
+void PrintContestantMonName(u8 contestant)
+{
+ PrintContestantMonNameWithColor(contestant, contestant + 10);
+}
+
+void PrintContestantMonNameWithColor(u8 contestant, u8 color)
+{
+ u8 *str = gDisplayedStringBattle;
+
+ str[0] = EXT_CTRL_CODE_BEGIN;
+ str[1] = EXT_CTRL_CODE_SIZE;
+ str[2] = 4;
+ str += 3;
+
+ str = Contest_CopyStringWithColor(str, gContestMons[contestant].nickname, color);
+ *str = EOS;
+
+ Text_InitWindow8004D04(
+ &gWindowTemplate_Contest_MoveDescription,
+ gDisplayedStringBattle,
+ 512 + gContestantTurnOrder[contestant] * 20,
+ 253 + gUnknown_083CA308[gContestantTurnOrder[contestant]][0] * 8,
+ gUnknown_083CA308[gContestantTurnOrder[contestant]][1] * 8,
+ 1);
+}
+
+u16 CalculateContestantRound1Points(u8 who, u8 contestCategory)
+{
+ u8 statMain;
+ u8 statSub1;
+ u8 statSub2;
+
+ switch (contestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ statMain = gContestMons[who].cool;
+ statSub1 = gContestMons[who].tough;
+ statSub2 = gContestMons[who].beauty;
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ statMain = gContestMons[who].beauty;
+ statSub1 = gContestMons[who].cool;
+ statSub2 = gContestMons[who].cute;
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ statMain = gContestMons[who].cute;
+ statSub1 = gContestMons[who].beauty;
+ statSub2 = gContestMons[who].smart;
+ break;
+ case CONTEST_CATEGORY_SMART:
+ statMain = gContestMons[who].smart;
+ statSub1 = gContestMons[who].cute;
+ statSub2 = gContestMons[who].tough;
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ default:
+ statMain = gContestMons[who].tough;
+ statSub1 = gContestMons[who].smart;
+ statSub2 = gContestMons[who].cool;
+ break;
+ }
+ return statMain + (statSub1 + statSub2 + gContestMons[who].sheen) / 2;
+}
+
+void CalculateRound1Points(u8 contestCategory)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ gContestMonRound1Points[i] = CalculateContestantRound1Points(i, contestCategory);
+}
+
+u8 CreateJudgeSprite(void)
+{
+ u8 spriteId;
+
+ LoadCompressedObjectPic(&sSpriteSheet_Judge);
+ LoadCompressedPalette(gContest2Pal, 0x110, 32);
+ spriteId = CreateSprite(&sSpriteTemplate_Judge, 112, 36, 30);
+ gSprites[spriteId].oam.paletteNum = 1;
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ return spriteId;
+}
+
+u8 CreateJudgeSpeechBubbleSprite(void)
+{
+ u8 spriteId;
+
+ LoadCompressedObjectPic(&sSpriteSheet_JudgeSymbols);
+ LoadCompressedObjectPalette(&sSpritePalette_JudgeSymbols);
+ spriteId = CreateSprite(&sSpriteTemplate_JudgeSpeechBubble, 96, 10, 29);
+ gSprites[spriteId].invisible = TRUE;
+ gSprites[spriteId].data[0] = gSprites[spriteId].oam.tileNum;
+ return spriteId;
+}
+
+u8 unref_sub_80AE908(void)
+{
+ u16 species = gContestMons[gContestPlayerMonIndex].species;
+ u8 spriteId;
+
+ DecompressPicFromTable_2(
+ &gMonFrontPicTable[species],
+ gMonFrontPicCoords[species].coords,
+ gMonFrontPicCoords[species].y_offset,
+ (void *)EWRAM,
+ gMonSpriteGfx_Sprite_ptr[1],
+ species);
+ LoadCompressedPalette(gMonPaletteTable[species].data, 0x110, 32);
+ GetMonSpriteTemplate_803C56C(gContestMons[gContestPlayerMonIndex].species, 1);
+ spriteId = CreateSprite(
+ &gUnknown_02024E8C,
+ 112, 80 + (8 - gMonFrontPicCoords[gContestMons[gContestPlayerMonIndex].species].coords) * 4,
+ 30);
+ gSprites[spriteId].oam.paletteNum = 1;
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7C18;
+ StartSpriteAffineAnim(&gSprites[spriteId], 0);
+ return spriteId;
+}
+
+u8 CreateContestantSprite(u16 species, u32 otId, u32 personality)
+{
+ const u8 *lzPaletteData;
+ u8 spriteId;
+
+ species = SanitizeSpecies(species);
+ HandleLoadSpecialPokePic(
+ &gMonBackPicTable[species],
+ gMonBackPicCoords[species].coords,
+ gMonBackPicCoords[species].y_offset,
+ EWRAM,
+ gMonSpriteGfx_Sprite_ptr[0],
+ species,
+ 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);
+ gSprites[spriteId].oam.paletteNum = 2;
+ gSprites[spriteId].oam.priority = 2;
+ gSprites[spriteId].subpriority = GetBattlerSubpriority(2);
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ gSprites[spriteId].data[0] = gSprites[spriteId].oam.paletteNum;
+ gSprites[spriteId].data[2] = species;
+ if (IsSpeciesNotUnown(species))
+ gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7C18;
+ else
+ gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7BEC;
+ StartSpriteAffineAnim(&gSprites[spriteId], 0);
+ return spriteId;
+}
+
+bool8 IsSpeciesNotUnown(u16 species)
+{
+ if (species == SPECIES_UNOWN)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+void SwapMoveDescAndContestTilemaps(void)
+{
+ __copy_tilemap((void *)(VRAM + 0xC000));
+ __copy_tilemap((void *)(VRAM + 0xE000));
+}
+
+void __copy_tilemap(void *a)
+{
+ DmaCopy16Defvars(3, a, (u8 *)a + 0x500, 0x280);
+}
+
+u16 GetMoveEffectSymbolTileOffset(u16 move, u8 b)
+{
+ u16 var;
+
+ switch (gContestEffects[gContestMoves[move].effect].effectType)
+ {
+ case 0:
+ case 1:
+ case 8:
+ var = 0x9082;
+ break;
+ case 2:
+ case 3:
+ var = 0x9088;
+ break;
+ default:
+ var = 0x9086;
+ break;
+ }
+ var += 0x9000 + (b << 12);
+ return var;
+}
+
+void PrintContestMoveDescription(u16 a)
+{
+ u8 category;
+ u16 categoryTile;
+ s32 i;
+ u8 numHearts;
+
+ Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 0, 11, 31, 16, 34);
+
+ category = gContestMoves[a].contestCategory;
+ if (category == CONTEST_CATEGORY_COOL)
+ categoryTile = 0x4040;
+ else if (category == CONTEST_CATEGORY_BEAUTY)
+ categoryTile = 0x4045;
+ else if (category == CONTEST_CATEGORY_CUTE)
+ categoryTile = 0x404A;
+ else if (category == CONTEST_CATEGORY_SMART)
+ categoryTile = 0x406A;
+ else
+ categoryTile = 0x408A;
+
+ for (i = 0; i < 5; i++)
+ {
+ *(u16 *)(VRAM + 0xC7D6 + i * 2) = categoryTile;
+ *(u16 *)(VRAM + 0xC816 + i * 2) = categoryTile + 16;
+ categoryTile++;
+ }
+
+ if (gContestEffects[gContestMoves[a].effect].appeal == 0xFF)
+ numHearts = 0;
+ else
+ numHearts = gContestEffects[gContestMoves[a].effect].appeal / 10;
+ if (numHearts > 8)
+ numHearts = 8;
+ for (i = 0; i < 8; i++)
+ {
+ if (i < numHearts) // Empty hearts
+ *(u16 *)(VRAM + 0xC7EA + i * 2) = 0x5012;
+ else // Filled-in hearts
+ *(u16 *)(VRAM + 0xC7EA + i * 2) = 0x5035;
+ }
+
+ if (gContestEffects[gContestMoves[a].effect].jam == 0xFF)
+ numHearts = 0;
+ else
+ numHearts = gContestEffects[gContestMoves[a].effect].jam / 10;
+ if (numHearts > 8)
+ numHearts = 8;
+ for (i = 0; i < 8; i++)
+ {
+ if (i < numHearts) // Empty hearts
+ *(u16 *)(VRAM + 0xC82A + i * 2) = 0x5014;
+ else // Filled-in hearts
+ *(u16 *)(VRAM + 0xC82A + i * 2) = 0x5036;
+ }
+
+ Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gContestEffectStrings[gContestMoves[a].effect], 868, 11, 35);
+ Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gText_Slash, 866, 16, 31);
+}
+
+void sub_80AED58(void)
+{
+ Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 0, 11, 35, 28, 40);
+}
+
+// unused
+void DrawMoveEffectSymbol(u16 move, u8 b)
+{
+ u8 r5 = gContestantTurnOrder[b] * 5 + 2;
+
+ if (!Contest_IsMonsTurnDisabled(b) && move != MOVE_NONE)
+ {
+ u16 tile = GetMoveEffectSymbolTileOffset(move, b);
+
+ *(u16 *)(VRAM + 0xC028 + r5 * 64) = tile;
+ *(u16 *)(VRAM + 0xC028 + r5 * 64 + 2) = tile + 1;
+
+ *(u16 *)(VRAM + 0xC068 + r5 * 64) = tile + 16;
+ *(u16 *)(VRAM + 0xC068 + r5 * 64 + 2) = tile + 17;
+
+ }
+ else
+ {
+ *(u16 *)(VRAM + 0xC028 + r5 * 64) = 0;
+ *(u16 *)(VRAM + 0xC028 + r5 * 64 + 2) = 0;
+
+ *(u16 *)(VRAM + 0xC068 + r5 * 64) = 0;
+ *(u16 *)(VRAM + 0xC068 + r5 * 64 + 2) = 0;
+ }
+}
+
+void DrawMoveEffectSymbols(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ DrawMoveEffectSymbol(sContestantStatus[i].currMove, i);
+}
+
+u16 GetStarTileOffset(u8 unused)
+{
+ return 0x2034;
+}
+
+bool8 UpdateConditionStars(u8 a, u8 b)
+{
+ u8 r9;
+ u16 r8;
+ s32 r4;
+
+ if (sContestantStatus[a].conditionMod == 0)
+ return FALSE;
+ r9 = gContestantTurnOrder[a] * 5 + 2;
+ if (sContestantStatus[a].conditionMod == 1)
+ {
+ r8 = GetStarTileOffset(a);
+ r4 = 0;
+ while (sContestantStatus[a].condition / 10 > r4)
+ {
+ *(u16 *)(VRAM + 0xC026 + (r9 + r4) * 64) = r8;
+ r4++;
+ }
+ if (b != 0)
+ {
+ PlaySE(SE_EXP_MAX);
+ sContestantStatus[a].conditionMod = 0;
+ }
+ }
+ else // CONDITION_LOSE
+ {
+ r8 = 0;
+ r4 = 3;
+ while (sContestantStatus[a].condition / 10 < r4)
+ {
+ *(u16 *)(VRAM + 0xBFE6 + (r9 + r4) * 64) = r8;
+ r4--;
+ }
+ if (b != 0)
+ {
+ PlaySE(SE_CONTEST_CONDITION_LOSE);
+ sContestantStatus[a].conditionMod = 0;
+ }
+ }
+ return TRUE;
+}
+
+void DrawConditionStars(void)
+{
+ s32 i;
+ s32 r4;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 r8 = gContestantTurnOrder[i] * 5 + 2;
+ u16 r6 = GetStarTileOffset(i);
+
+ r4 = 0;
+ while (r4 < sContestantStatus[i].condition / 10)
+ {
+ *(u16 *)(VRAM + 0xC026 + (r8 + r4) * 64) = r6;
+ r4++;
+ }
+ r6 = 0;
+ while (r4 < 3)
+ {
+ *(u16 *)(VRAM + 0xC026 + (r8 + r4) * 64) = r6;
+ r4++;
+ }
+ }
+}
+
+u16 GetStatusSymbolTileOffset(u8 unused, u8 b)
+{
+ u16 var = 0;
+
+ switch (b)
+ {
+ case 0: // For resistant
+ var = 0x80;
+ break;
+ case 1: // For nervous
+ var = 0x84;
+ break;
+ case 2: // For turn skipped
+ var = 0x86;
+ break;
+ case 3: // For jammed/unnerved
+ var = 0x88;
+ break;
+ case 4: // Never used
+ var = 0x82;
+ break;
+ }
+ var += 0x9000;
+ return var;
+}
+
+bool8 DrawStatusSymbol(u8 a)
+{
+ bool8 r5 = TRUE;
+ u16 r4 = 0;
+ u8 r6 = gContestantTurnOrder[a] * 5 + 2;
+
+ if (sContestantStatus[a].resistant != 0 || sContestantStatus[a].immune != 0 || sContestantStatus[a].jamSafetyCount != 0 || sContestantStatus[a].jamReduction != 0)
+ r4 = GetStatusSymbolTileOffset(a, 0);
+ else if (sContestantStatus[a].nervous)
+ r4 = GetStatusSymbolTileOffset(a, 1);
+ else if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns)
+ r4 = GetStatusSymbolTileOffset(a, 2);
+ else
+ r5 = FALSE;
+ if (r5)
+ {
+ *(u16 *)(VRAM + 0xC028 + r6 * 64) = r4;
+ *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = r4 + 1;
+ *(u16 *)(VRAM + 0xC068 + r6 * 64) = r4 + 16;
+ *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = r4 + 17;
+ }
+ else
+ {
+ *(u16 *)(VRAM + 0xC028 + r6 * 64) = 0;
+ *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = 0;
+ *(u16 *)(VRAM + 0xC068 + r6 * 64) = 0;
+ *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = 0;
+ }
+ return r5;
+}
+
+void DrawStatusSymbols(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ DrawStatusSymbol(i);
+}
+
+void ContestClearGeneralTextWindow(void)
+{
+ Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 0, 1, 15, 17, 18);
+}
+
+u16 GetChosenMove(u8 a)
+{
+ if (Contest_IsMonsTurnDisabled(a))
+ return 0;
+ if (a == gContestPlayerMonIndex)
+ {
+ return gContestMons[a].moves[sContest.playerMoveChoice];
+ }
+ else
+ {
+ u8 moveChoice;
+
+ ContestAI_ResetAI(a);
+ moveChoice = ContestAI_GetActionToUse();
+ return gContestMons[a].moves[moveChoice];
+ }
+}
+
+void sub_80AF1B8(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ sContestantStatus[i].currMove = GetChosenMove(i);
+}
+
+void sub_80AF1E4(u8 a, u8 b)
+{
+ u8 r3;
+
+ if (b == 0)
+ r3 = a + 10;
+ else
+ r3 = 14;
+ if (sContestantStatus[a].currMove == MOVE_NONE)
+ Contest_CopyStringWithColor(gDisplayedStringBattle, gUnknownText_MissedTurn, r3);
+ else
+ Contest_CopyStringWithColor(
+ gDisplayedStringBattle, gMoveNames[sContestantStatus[a].currMove], r3);
+ sub_80AF2A0(a);
+ Text_InitWindowAndPrintText(
+ &gWindowTemplate_Contest_MoveDescription,
+ gDisplayedStringBattle,
+ 696 + a * 20,
+ gUnknown_083CA318[a][0],
+ gUnknown_083CA318[a][1]);
+}
+
+void unref_sub_80AF280(u8 a)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80AF1E4(i, a);
+}
+
+void sub_80AF2A0(u8 a)
+{
+ Text_FillWindowRectDefPalette(
+ &gWindowTemplate_Contest_MoveDescription,
+ 0,
+ gUnknown_083CA318[a][0],
+ gUnknown_083CA318[a][1],
+ gUnknown_083CA318[a][0] + 7,
+ gUnknown_083CA318[a][1] + 1);
+}
+
+void unref_sub_80AF2E0(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80AF2A0(i);
+}
+
+void sub_80AF2FC(void)
+{
+ u8 i;
+ u8 j;
+ s16 arr[4];
+
+ for (i = 0; i < 4; i++)
+ {
+ sContestantStatus[i].unk4 += sContestantStatus[i].appeal;
+ arr[i] = sContestantStatus[i].unk4;
+ }
+ for (i = 0; i < 3; i++)
+ {
+ for (j = 3; j > i; j--)
+ {
+ if (arr[j - 1] < arr[j])
+ {
+ u16 temp = arr[j];
+
+ arr[j] = arr[j - 1];
+ arr[j - 1] = temp;
+ }
+ }
+ }
+ for (i = 0; i < 4; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (sContestantStatus[i].unk4 == arr[j])
+ {
+ sContestantStatus[i].ranking = j;
+ break;
+ }
+ }
+ }
+ SortContestants(1);
+ ApplyNextTurnOrder();
+}
+
+void sub_80AF3C0(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 attentionLevel;
+
+ if (sContestantStatus[i].currMove == MOVE_NONE)
+ attentionLevel = 5;
+ else if (sContestantStatus[i].appeal <= 0)
+ attentionLevel = 0;
+ else if (sContestantStatus[i].appeal < 30)
+ attentionLevel = 1;
+ else if (sContestantStatus[i].appeal < 60)
+ attentionLevel = 2;
+ else if (sContestantStatus[i].appeal < 80)
+ attentionLevel = 3;
+ else
+ attentionLevel = 4;
+
+ sContestantStatus[i].attentionLevel = attentionLevel;
+ }
+}
+
+bool8 ContestantCanUseTurn(u8 a)
+{
+ if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+void sub_80AF438(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ // This is bitfield hell...
+ sContestantStatus[i].appeal = 0;
+ sContestantStatus[i].baseAppeal = 0;
+ sContestantStatus[i].jamSafetyCount = 0;
+ if (sContestantStatus[i].numTurnsSkipped > 0)
+ sContestantStatus[i].numTurnsSkipped--;
+ sContestantStatus[i].jam = 0;
+ sContestantStatus[i].resistant = 0;
+ sContestantStatus[i].jamReduction = 0;
+ sContestantStatus[i].immune = 0;
+ sContestantStatus[i].moreEasilyStartled = 0;
+ sContestantStatus[i].usedRepeatableMove = 0;
+ sContestantStatus[i].nervous = 0;
+ 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].disappointedRepeat = FALSE;
+ sContestantStatus[i].turnOrderModAction = 0;
+ sContestantStatus[i].appealTripleCondition = 0;
+ if (sContestantStatus[i].turnSkipped)
+ {
+ sContestantStatus[i].numTurnsSkipped = 1;
+ sContestantStatus[i].turnSkipped = 0;
+ }
+ if (sContestantStatus[i].exploded)
+ {
+ sContestantStatus[i].noMoreTurns = 1;
+ sContestantStatus[i].exploded = 0;
+ }
+ sContestantStatus[i].overrideCategoryExcitementMod = 0;
+ }
+ for (i = 0; i < 4; i++)
+ {
+ sContestantStatus[i].prevMove = sContestantStatus[i].currMove;
+ sContest.unk19220[sContest.turnNumber][i] = sContestantStatus[i].prevMove;
+ sContest.unk19248[sContest.turnNumber][i] = Contest_GetMoveExcitement(sContestantStatus[i].currMove);
+ sContestantStatus[i].currMove = MOVE_NONE;
+ }
+ eContestExcitement.excitementFrozen = 0;
+}
+
+bool8 Contest_IsMonsTurnDisabled(u8 a)
+{
+ if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 unref_sub_80AF5D0(u8 a, u8 b)
+{
+ u8 i;
+
+ if (a != gContestPlayerMonIndex)
+ return TRUE;
+ for (i = 0; i < 4; i++)
+ {
+ if (b == 3)
+ {
+ sContest.unk1920A_0 = 1;
+ return TRUE;
+ }
+ if (b == 4)
+ {
+ sContest.unk1920A_1 = 1;
+ return TRUE;
+ }
+ if (sContest.unk19206[i] == b)
+ return TRUE;
+ if (sContest.unk19206[i] == 0xFF)
+ {
+ sContest.unk19206[i] = b;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+void CalculateTotalPointsForContestant(u8 a)
+{
+ gContestMonRound2Points[a] = GetContestantRound2Points(a);
+ gContestMonTotalPoints[a] = gContestMonRound1Points[a] + gContestMonRound2Points[a];
+}
+
+void CalculateFinalScores(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ CalculateTotalPointsForContestant(i);
+ DetermineFinalStandings();
+}
+
+s16 GetContestantRound2Points(u8 a)
+{
+ return gContestMonAppealPointTotals[a] * 2;
+}
+
+void DetermineFinalStandings(void)
+{
+ u16 randomOrdering[4] = {0};
+ struct ContestFinalStandings standings[4];
+ s32 i;
+
+ // Seed random order in case of ties
+ for (i = 0; i < 4; i++)
+ {
+ s32 j;
+ randomOrdering[i] = Random();
+ for (j = 0; j < i; j++)
+ {
+ if (randomOrdering[i] == randomOrdering[j])
+ {
+ i--;
+ break;
+ }
+ }
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ standings[i].totalPoints = gContestMonTotalPoints[i];
+ standings[i].round1Points = gContestMonRound1Points[i];
+ standings[i].random = randomOrdering[i];
+ standings[i].contestant = i;
+ }
+
+ // Rank contestants
+ for (i = 0; i < 3; i++)
+ {
+ s32 j;
+ for (j = 3; j > i; j--)
+ {
+ if (DidContestantPlaceHigher(j - 1, j, standings))
+ {
+ // Swap contestants in array
+ struct ContestFinalStandings temp;
+
+ temp.totalPoints = standings[j - 1].totalPoints;
+ temp.round1Points = standings[j - 1].round1Points;
+ temp.random = standings[j - 1].random;
+ temp.contestant = standings[j - 1].contestant;
+
+ standings[j - 1].totalPoints = standings[j].totalPoints;
+ standings[j - 1].round1Points = standings[j].round1Points;
+ standings[j - 1].random = standings[j].random;
+ standings[j - 1].contestant = standings[j].contestant;
+
+ standings[j].totalPoints = temp.totalPoints;
+ standings[j].round1Points = temp.round1Points;
+ standings[j].random = temp.random;
+ standings[j].contestant = temp.contestant;
+ }
+ }
+ }
+
+ // Assign placements. i is the placing (0 is 1st, 1 is 2nd...)
+ for (i = 0; i < 4; i++)
+ gContestFinalStandings[standings[i].contestant] = i;
+}
+
+bool8 DidContestantPlaceHigher(s32 a, s32 b, struct ContestFinalStandings *c)
+{
+ bool8 retVal;
+
+ if (c[a].totalPoints < c[b].totalPoints)
+ retVal = TRUE;
+ else if (c[a].totalPoints > c[b].totalPoints)
+ retVal = FALSE;
+ else if (c[a].round1Points < c[b].round1Points)
+ retVal = TRUE;
+ else if (c[a].round1Points > c[b].round1Points)
+ retVal = FALSE;
+ else if (c[a].random < c[b].random)
+ retVal = TRUE;
+ else
+ retVal = FALSE;
+ return retVal;
+}
+
+void ContestPrintLinkStandby(void)
+{
+ gBattle_BG0_Y = 0;
+ gBattle_BG2_Y = 0;
+ ContestClearGeneralTextWindow();
+ Text_InitWindowAndPrintText(&gMenuWindow, gUnknownText_LinkStandbyAndWinner, 776, 1, 15);
+}
+
+u8 unref_sub_80AF89C(s16 a, s16 b, u8 c, u8 d)
+{
+ u8 taskId;
+ u8 r5;
+ s8 r4;
+ u16 r0;
+
+ eContestGfxState[d].unk2_2 = 1;
+ taskId = CreateTask(sub_80AF94C, 20);
+ r5 = sub_80AFB74(a);
+ r4 = sub_80AFB74(a + b) - r5;
+ r0 = sub_80AFB40(d);
+ gTasks[taskId].data[0] = r5;
+ gTasks[taskId].data[1] = r4;
+ gTasks[taskId].data[2] = r0 + c;
+ gTasks[taskId].data[3] = d;
+ if (b < 0)
+ nullsub_19(d);
+ return taskId;
+}
+
+void sub_80AF94C(u8 taskId)
+{
+ u8 r5 = gTasks[taskId].data[3];
+
+ if (gTasks[taskId].data[1] == 0)
+ {
+ nullsub_19(r5);
+ DestroyTask(taskId);
+ eContestGfxState[r5].unk2_2 = 0;
+ }
+ else if (++gTasks[taskId].data[10] > 29)
+ {
+ u8 r6;
+
+ gTasks[taskId].data[10] = 0;
+ if (gTasks[taskId].data[1] < 0)
+ {
+ r6 = gTasks[taskId].data[0]--;
+ gTasks[taskId].data[1]++;
+ PlaySE(SE_BOO);
+ }
+ else
+ {
+ r6 = ++gTasks[taskId].data[0];
+ gTasks[taskId].data[1]--;
+ PlaySE(SE_PIN);
+ }
+ if ((u16)gTasks[taskId].data[2] != 0xFFFF)
+ {
+ RequestSpriteCopy(
+ &gTasks[taskId].data[2],
+ (void *)(VRAM + 0xC000 + (147 + r6 + r5 * 160) * 2),
+ 2);
+ }
+ else
+ {
+ u8 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (gTasks[taskId].data[i + 4] < 0)
+ {
+ RequestSpriteCopy(
+ &gTasks[taskId].data[i + 7],
+ (void *)(VRAM + 0xC000 + (147 + r6 + r5 * 160) * 2),
+ 2);
+ gTasks[taskId].data[i + 4]++;
+ break;
+ }
+ }
+ }
+ }
+}
+
+void sub_80AFA5C(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ DmaClear16(3, (void *)(VRAM + 0xC000 + (86 + i * 160) * 2), 16);
+ DmaClear16(3, (void *)(VRAM + 0xC000 + (118 + i * 160) * 2), 16);
+ }
+}
+
+void unref_sub_80AFAB8(s16 a, u8 b)
+{
+ u8 r5 = sub_80AFB74(a);
+ u16 r2;
+ u8 i;
+ u16 arr[9];
+
+ if (b == 0)
+ r2 = 0x50A2;
+ else if (b == 1)
+ r2 = 0x60A2;
+ else if (b == 2)
+ r2 = 0x70A2;
+ else
+ r2 = 0x80A2;
+
+ for (i = 0; i < 9; i++)
+ {
+ if (i < r5)
+ arr[i] = r2;
+ else
+ arr[i] = 0;
+ }
+
+ DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xC000 + (148 + b * 160) * 2), sizeof(arr));
+}
+
+u16 sub_80AFB40(u8 a)
+{
+ u16 var;
+
+ if (a == 0)
+ var = 0x5011;
+ else if (a == 1)
+ var = 0x6011;
+ else if (a == 2)
+ var = 0x7011;
+ else
+ var = 0x8011;
+ return var + 1;
+}
+
+s8 sub_80AFB74(s16 a)
+{
+ s8 retVal = a / 10;
+
+ if (retVal > 16)
+ retVal = 16;
+ else if (retVal < -16)
+ retVal = -16;
+ return retVal;
+}
+
+u8 sub_80AFBA0(s16 a, s16 b, u8 c)
+{
+ 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))
+ gTasks[taskId].data[2] = 1;
+ else
+ gTasks[taskId].data[2] = -1;
+ gTasks[taskId].data[3] = c;
+ if (b < 0)
+ nullsub_19(c);
+ return taskId;
+}
+
+void sub_80AFC74(u8 taskId)
+{
+ u8 r7 = gTasks[taskId].data[3];
+ s16 r3 = gTasks[taskId].data[0];
+ s16 r1 = gTasks[taskId].data[1];
+
+ if (++gTasks[taskId].data[10] > 14)
+ {
+ u16 r6;
+ u8 r5;
+ u8 r10;
+
+ gTasks[taskId].data[10] = 0;
+ if (gTasks[taskId].data[1] == 0)
+ {
+ nullsub_19(r7);
+ DestroyTask(taskId);
+ eContestGfxState[r7].unk2_2 = 0;
+ return;
+ }
+ else if (r3 == 0)
+ {
+ if (r1 < 0)
+ {
+ r6 = sub_80AFB40(r7) + 2;
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ r6 = sub_80AFB40(r7);
+ gTasks[taskId].data[1]--;
+ }
+ r5 = gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (gTasks[taskId].data[2] < 0)
+ {
+ if (r1 < 0)
+ {
+ r5 = gTasks[taskId].data[0]++;
+ gTasks[taskId].data[1]++;
+ r6 = sub_80AFB40(r7) + 2;
+ }
+ else
+ {
+ r5 = --gTasks[taskId].data[0];
+ r6 = 0;
+ gTasks[taskId].data[1]--;
+ }
+ }
+ else
+ {
+ if (r1 < 0)
+ {
+ r5 = --gTasks[taskId].data[0];
+ r6 = 0;
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ r5 = gTasks[taskId].data[0]++;
+ gTasks[taskId].data[1]--;
+ r6 = sub_80AFB40(r7);
+ }
+ }
+ }
+ r10 = r5;
+ if (r5 > 7)
+ r5 += 24;
+ // Seriously, a 2-byte CpuFill? Why?
+ CpuFill16(r6, (void *)(VRAM + 0xC000 + (0x56 + r5 + gContestantTurnOrder[r7] * 160) * 2), 2);
+ if (r1 > 0)
+ {
+ PlaySE(SE_CONTEST_HEART);
+ m4aMPlayImmInit(&gMPlayInfo_SE1);
+ m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, r10 * 256);
+ }
+ else
+ {
+ PlaySE(SE_BOO);
+ }
+ if (r5 == 0 && r6 == 0)
+ gTasks[taskId].data[2] = -gTasks[taskId].data[2];
+ }
+}
+
+void sub_80AFE30(void)
+{
+ s32 i;
+
+ LoadSpriteSheet(&gUnknown_083CA350);
+ for (i = 0; i < 4; i++)
+ {
+ u8 y = gUnknown_083CA338[gContestantTurnOrder[i]];
+
+ eContestGfxState[i].unk0 = CreateSprite(&gSpriteTemplate_83CA3AC, 180, y, 1);
+ }
+}
+
+void sub_80AFE78(u8 a)
+{
+ u8 spriteId;
+ s16 r5;
+
+ eContestGfxState[a].unk2_0 = 1;
+ spriteId = eContestGfxState[a].unk0;
+ r5 = sContestantStatus[a].unk4 / 10 * 2;
+ if (r5 > 56)
+ r5 = 56;
+ else if (r5 < 0)
+ r5 = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gSprites[spriteId].data[0] = a;
+ gSprites[spriteId].data[1] = r5;
+ if (gSprites[spriteId].data[1] > gSprites[spriteId].pos2.x)
+ gSprites[spriteId].data[2] = 1;
+ else
+ gSprites[spriteId].data[2] = -1;
+ gSprites[spriteId].callback = sub_80AFF60;
+}
+
+void sub_80AFF10(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80AFE78(i);
+}
+
+bool8 sub_80AFF28(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (eContestGfxState[i].unk2_0)
+ break;
+ }
+ if (i == 4)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_80AFF60(struct Sprite *sprite)
+{
+ if (sprite->pos2.x == sprite->data[1])
+ {
+ eContestGfxState[sprite->data[0]].unk2_0 = 0;
+ sprite->callback = SpriteCallbackDummy;
+ }
+ else
+ {
+ sprite->pos2.x += sprite->data[2];
+ }
+}
+
+void sub_80AFFA0(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ gSprites[eContestGfxState[i].unk0].pos1.y = gUnknown_083CA338[gContestantTurnOrder[i]];
+}
+
+void sub_80AFFE0(bool8 a)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gContestantTurnOrder[i] > 1)
+ {
+ if (!a)
+ gSprites[eContestGfxState[i].unk0].pos1.x = 180;
+ else
+ gSprites[eContestGfxState[i].unk0].pos1.x = 256;
+ }
+ }
+}
+
+void sub_80B0034(void)
+{
+ s32 i;
+
+ LoadSpritePalette(&gUnknown_083CA3E4);
+ for (i = 0; i < 4; i++)
+ {
+ LoadCompressedObjectPic(&gUnknown_083CA3C4[i]);
+ eContestGfxState[i].unk1 = CreateSprite(
+ &gSpriteTemplate_83CA3F4[i],
+ 204, gUnknown_083CA33C[gContestantTurnOrder[i]],
+ 0);
+ SetSubspriteTables(&gSprites[eContestGfxState[i].unk1], gSubspriteTables_83CA464);
+ gSprites[eContestGfxState[i].unk1].invisible = TRUE;
+ }
+}
+
+void CreateApplauseMeterSprite(void)
+{
+ u8 spriteId;
+
+ LoadCompressedObjectPic(&gUnknown_083CA46C);
+ LoadSpritePalette(&gUnknown_083CA474);
+ spriteId = CreateSprite(&gSpriteTemplate_83CA484, 30, 44, 1);
+ gSprites[spriteId].invisible = TRUE;
+ sContest.applauseMeterSpriteId = spriteId;
+}
+
+void nullsub_18(s8 unused)
+{
+}
+
+void unref_sub_80B011C(void)
+{
+ u8 i;
+
+ LoadCompressedObjectPic(&gUnknown_083CC3AC);
+ for (i = 0; i < 4; i++)
+ LoadCompressedObjectPalette(&gUnknown_083CC3B4[i]);
+ for (i = 0; i < 4; i++)
+ {
+ u8 spriteId = CreateSprite(
+ &gSpriteTemplate_83CC454[i],
+ gUnknown_083CA330[i][0], gUnknown_083CA330[i][1],
+ 5);
+
+ gSprites[spriteId].invisible = TRUE;
+ gSprites[spriteId].data[0] = i;
+ sContest.unk1920D[i] = spriteId;
+ }
+}
+
+void unref_sub_80B01B0(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ gSprites[sContest.unk1920D[i]].callback = sub_80B0238;
+}
+
+bool8 unref_sub_80B01E0(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gSprites[sContest.unk1920D[i]].callback != SpriteCallbackDummy)
+ break;
+ }
+ if (i == 4)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_80B0238(struct Sprite *sprite)
+{
+ sprite->oam.affineMode = 1;
+ InitSpriteAffineAnim(sprite);
+ if (sprite->invisible)
+ {
+ sprite->callback = sub_80B02A8;
+ }
+ else
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->callback = sub_80B0280;
+ }
+}
+
+void sub_80B0280(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ sprite->invisible = TRUE;
+ sprite->callback = sub_80B02A8;
+ }
+}
+
+void sub_80B02A8(struct Sprite *sprite)
+{
+ sprite->invisible = FALSE;
+ StartSpriteAnim(sprite, sContestantStatus[sprite->data[0]].ranking);
+ StartSpriteAffineAnim(sprite, 2);
+ sprite->callback = sub_80B02F4;
+ PlaySE(SE_CONTEST_PLACE);
+}
+
+void sub_80B02F4(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ FreeSpriteOamMatrix(sprite);
+ sprite->oam.affineMode = 0;
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+void sub_80B0324(void)
+{
+ u8 i;
+ u8 taskId = CreateTask(sub_80B0458, 30);
+
+ sContest.unk19211 = taskId;
+ for (i = 0; i < 4; i++)
+ gTasks[taskId].data[i * 4] = 0xFF;
+}
+
+void sub_80B0368(u8 a)
+{
+ gTasks[sContest.unk19211].data[a * 4 + 0] = 0;
+ gTasks[sContest.unk19211].data[a * 4 + 1] = 0;
+}
+
+void sub_80B03A8(u8 a)
+{
+ u8 taskId = CreateTask(sub_80B03D8, 31);
+
+ gTasks[taskId].data[0] = a;
+}
+
+void sub_80B03D8(u8 taskId)
+{
+ u8 r4 = gTasks[taskId].data[0];
+
+ if (gTasks[sContest.unk19211].data[r4 * 4 + 0] == 0
+ || gTasks[sContest.unk19211].data[r4 * 4 + 0] == 0xFF)
+ {
+ 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));
+ DestroyTask(taskId);
+ }
+}
+
+void sub_80B0458(u8 taskId)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 r3 = i * 4;
+
+ if (gTasks[taskId].data[r3 + 0] != 0xFF)
+ {
+ if (gTasks[taskId].data[r3 + 1] == 0)
+ gTasks[taskId].data[r3 + 0]++;
+ else
+ gTasks[taskId].data[r3 + 0]--;
+
+ if (gTasks[taskId].data[r3 + 0] == 16
+ || gTasks[taskId].data[r3 + 0] == 0)
+ gTasks[taskId].data[r3 + 1] ^= 1;
+
+ BlendPalette(
+ (sContest.unk19218[i] + 5) * 16 + 6,
+ 2,
+ gTasks[taskId].data[r3 + 0],
+ RGB(31, 31, 18));
+ }
+ }
+}
+
+void sub_80B0518(void)
+{
+ u8 i;
+
+ sContest.unk19212 = CreateTask(sub_80B05FC, 30);
+ for (i = 0; i < 4; i++)
+ sub_80B0548(i);
+}
+
+void sub_80B0548(u8 a)
+{
+ gTasks[sContest.unk19212].data[a * 4 + 0] = 0xFF;
+ gTasks[sContest.unk19212].data[a * 4 + 1] = 0;
+}
+
+void sub_80B0588(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80B05A4(i);
+}
+
+void sub_80B05A4(u8 a)
+{
+ sub_80B0548(a);
+
+ // 2-byte DMA copy? Why?
+
+ DmaCopy16Defvars(
+ 3,
+ &gPlttBufferUnfaded[16 * (5 + a) + 10],
+ &gPlttBufferFaded[16 * (5 + a) + 10],
+ 2);
+
+ DmaCopy16Defvars(
+ 3,
+ &gPlttBufferUnfaded[16 * (5 + a) + 12 + a],
+ &gPlttBufferFaded[16 * (5 + a) + 12 + a],
+ 2);
+}
+
+void nullsub_19(int unused)
+{
+}
+
+void sub_80B05FC(u8 taskId)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 r3 = i * 4;
+
+ if (gTasks[taskId].data[r3 + 0] != 0xFF)
+ {
+ if (++gTasks[taskId].data[r3 + 2] > 2)
+ {
+ gTasks[taskId].data[r3 + 2] = 0;
+
+ if (gTasks[taskId].data[r3 + 1] == 0)
+ gTasks[taskId].data[r3 + 0]++;
+ else
+ gTasks[taskId].data[r3 + 0]--;
+
+ if (gTasks[taskId].data[r3 + 0] == 16
+ || gTasks[taskId].data[r3 + 0] == 0)
+ gTasks[taskId].data[r3 + 1] ^= 1;
+
+ BlendPalette((i + 5) * 16 + 10, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18));
+ BlendPalette((i + 5) * 16 + 12 + i, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18));
+ }
+ }
+ }
+}
+
+// This task is never used
+u8 CreateUnusedBlendTask(u8 *a)
+{
+ u8 i;
+ u8 taskId = CreateTask(Task_UnusedBlend, 10);
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 r0 = i * 4;
+
+ gTasks[taskId].data[r0] = a[i];
+ if (a[i] != 0)
+ eContestGfxState[i].boxBlinking = TRUE;
+ }
+ return taskId;
+}
+
+#ifdef NONMATCHING
+void Task_UnusedBlend(u8 taskId)
+{
+ u8 i;
+ u8 r4;
+ u8 r4_2;
+ u8 r1;
+ u8 r7;
+
+ for (i = 0; i < 4; i++)
+ {
+ //#define r4 r4_2
+ r4 = gContestantTurnOrder[i];
+ r1 = r4 * 4;
+ r7 = gTasks[taskId].data[r1 + 0];
+
+ if (r7 != 0)
+ {
+ //_080B079C
+ u8 r8 = gTasks[taskId].data[r1 + 1];
+ u8 r5 = gTasks[taskId].data[r1 + 2];
+ u8 r6 = gTasks[taskId].data[r1 + 3];
+
+ if (r7 == 1)
+ {
+ r6++;
+ if (r6 == 1)
+ {
+ //_080B07D2
+ r6 = 0;
+ BlendPalette((r4 + 5) * 16 + 1, 3, r5, RGB(31, 31, 31));
+ if (r5 == 0 && r8 == 4)
+ {
+ gTasks[taskId].data[r1 + 0] = 0;
+ //asm("");
+ }
+ //_080B0800
+ else
+ {
+ r5 += 2;
+ if (r5 > 13)
+ {
+ r5 = 0;
+ r8++;
+ }
+ }
+ }
+ //to _080B08EA
+ }
+ //_080B0818
+ else if (r7 == 2 || r7 == 4)
+ {
+ r6++;
+ if (r6 == 3)
+ {
+ r6 = 0;
+ BlendPalette((r4 + 5) * 16 + 1, 3, r5, gUnknown_083CC5A4[r4]);
+ if (r5 == 0 && r8 == 2)
+ {
+ gTasks[taskId].data[r1 + 0] = 0;
+ }
+ //_080B0858
+ else
+ {
+ r5 += 1;
+ if (r5 == 14)
+ {
+ r5 = 0;
+ r8++;
+ if (r7 == 4 && r8 == 1)
+ {
+ BlendPalette((r4 + 9) * 16 + 2, 1, 4, RGB(0, 0, 0));
+ BlendPalette((r4 + 9) * 16 + 5, 1, 4, RGB(0, 0, 0));
+ }
+ }
+ }
+ }
+ //to _080B08EA
+ }
+ //_080B0896
+ else if (r7 == 3)
+ {
+ r6++;
+ if (r6 == 12)
+ {
+ r6 = 0;
+ BlendPalette((r4 + 5) * 16 + 1, 3, r5, RGB(0, 0, 0));
+ r5 += 1;
+ if (r5 == 5)
+ {
+ // What the hell? These aren't pointers.
+ // This code would crash if run.
+ DmaCopy16Defvars(3, (void *)(u32)gPlttBufferFaded[(r4 + 5) * 16 + 1],
+ (void *)(u32)gPlttBufferUnfaded[(r4 + 5) * 16 + 1], 6);
+ gTasks[taskId].data[r1 + 0] = 0;
+ }
+ }
+ }
+ //_080B08EA
+ gTasks[taskId].data[r1 + 1] = r8;
+ gTasks[taskId].data[r1 + 2] = r5;
+ gTasks[taskId].data[r1 + 3] = r6;
+ }
+ //_080B0910
+ }
+ //_080B0920
+
+ #define i r4_2
+ for (i = 0; i < 4; i++) // r4 is i
+ {
+ if (gTasks[taskId].data[i * 4 + 0] != 0)
+ break;
+ }
+ //_080B0958
+ if (i == 4)
+ {
+ for (i = 0; i < 4; i++)
+ eContestGfxState[i].boxBlinking = FALSE;
+ DestroyTask(taskId);
+ }
+ #undef i
+}
+#else
+NAKED
+void Task_UnusedBlend(u8 taskId)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x20\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ str r0, [sp, 0x4]\n\
+ ldr r2, _080B07F4 @ =gTasks\n\
+ movs r1, 0x8\n\
+ adds r1, r2\n\
+ mov r10, r1\n\
+ ldr r3, [sp]\n\
+ lsls r3, 2\n\
+ str r3, [sp, 0x1C]\n\
+ ldr r1, [sp]\n\
+ adds r0, r3, r1\n\
+ lsls r0, 3\n\
+ str r0, [sp, 0xC]\n\
+_080B0774:\n\
+ ldr r0, _080B07F8 @ =gContestantTurnOrder\n\
+ ldr r3, [sp, 0x4]\n\
+ adds r0, r3, r0\n\
+ ldrb r4, [r0]\n\
+ lsls r0, r4, 26\n\
+ lsrs r1, r0, 24\n\
+ lsls r0, r1, 1\n\
+ str r0, [sp, 0x8]\n\
+ ldr r3, [sp]\n\
+ lsls r0, r3, 2\n\
+ adds r0, r3\n\
+ lsls r6, r0, 3\n\
+ ldr r3, [sp, 0x8]\n\
+ adds r0, r3, r6\n\
+ add r0, r10\n\
+ mov r9, r0\n\
+ ldrb r7, [r0]\n\
+ cmp r7, 0\n\
+ bne _080B079C\n\
+ b _080B0910\n\
+_080B079C:\n\
+ adds r3, r1, 0x1\n\
+ lsls r0, r3, 1\n\
+ adds r0, r6\n\
+ add r0, r10\n\
+ ldrb r0, [r0]\n\
+ mov r8, r0\n\
+ adds r2, r1, 0x2\n\
+ lsls r0, r2, 1\n\
+ adds r0, r6\n\
+ add r0, r10\n\
+ ldrb r5, [r0]\n\
+ adds r1, 0x3\n\
+ lsls r0, r1, 1\n\
+ adds r0, r6\n\
+ add r0, r10\n\
+ ldrb r6, [r0]\n\
+ str r3, [sp, 0x10]\n\
+ str r2, [sp, 0x14]\n\
+ str r1, [sp, 0x18]\n\
+ cmp r7, 0x1\n\
+ bne _080B0818\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ cmp r6, 0x1\n\
+ beq _080B07D2\n\
+ b _080B08EA\n\
+_080B07D2:\n\
+ movs r6, 0\n\
+ adds r0, r4, 0x5\n\
+ lsls r0, 4\n\
+ adds r0, 0x1\n\
+ movs r1, 0x3\n\
+ adds r2, r5, 0\n\
+ ldr r3, _080B07FC @ =0x00007fff\n\
+ bl BlendPalette\n\
+ cmp r5, 0\n\
+ bne _080B0800\n\
+ mov r0, r8\n\
+ cmp r0, 0x4\n\
+ bne _080B0800\n\
+ mov r1, r9\n\
+ strh r6, [r1]\n\
+ b _080B08EA\n\
+ .align 2, 0\n\
+_080B07F4: .4byte gTasks\n\
+_080B07F8: .4byte gContestantTurnOrder\n\
+_080B07FC: .4byte 0x00007fff\n\
+_080B0800:\n\
+ adds r0, r5, 0x2\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r5, 0xD\n\
+ bls _080B08EA\n\
+ movs r5, 0\n\
+ mov r0, r8\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ b _080B08EA\n\
+_080B0818:\n\
+ cmp r7, 0x2\n\
+ beq _080B0820\n\
+ cmp r7, 0x4\n\
+ bne _080B0896\n\
+_080B0820:\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ cmp r6, 0x3\n\
+ bne _080B08EA\n\
+ movs r6, 0\n\
+ adds r0, r4, 0x5\n\
+ lsls r0, 4\n\
+ adds r0, 0x1\n\
+ ldr r2, _080B0854 @ =gUnknown_083CC5A4\n\
+ lsls r1, r4, 1\n\
+ adds r1, r2\n\
+ ldrh r3, [r1]\n\
+ movs r1, 0x3\n\
+ adds r2, r5, 0\n\
+ bl BlendPalette\n\
+ cmp r5, 0\n\
+ bne _080B0858\n\
+ mov r2, r8\n\
+ cmp r2, 0x2\n\
+ bne _080B0858\n\
+ mov r3, r9\n\
+ strh r6, [r3]\n\
+ b _080B08EA\n\
+ .align 2, 0\n\
+_080B0854: .4byte gUnknown_083CC5A4\n\
+_080B0858:\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r5, 0xE\n\
+ bne _080B08EA\n\
+ movs r5, 0\n\
+ mov r0, r8\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ cmp r7, 0x4\n\
+ bne _080B08EA\n\
+ cmp r0, 0x1\n\
+ bne _080B08EA\n\
+ adds r4, 0x9\n\
+ lsls r4, 4\n\
+ adds r0, r4, 0x2\n\
+ movs r1, 0x1\n\
+ movs r2, 0x4\n\
+ movs r3, 0\n\
+ bl BlendPalette\n\
+ adds r4, 0x5\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x1\n\
+ movs r2, 0x4\n\
+ movs r3, 0\n\
+ bl BlendPalette\n\
+ b _080B08EA\n\
+_080B0896:\n\
+ cmp r7, 0x3\n\
+ bne _080B08EA\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ cmp r6, 0xC\n\
+ bne _080B08EA\n\
+ movs r6, 0\n\
+ adds r0, r4, 0x5\n\
+ lsls r0, 4\n\
+ adds r4, r0, 0x1\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x3\n\
+ adds r2, r5, 0\n\
+ movs r3, 0\n\
+ bl BlendPalette\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r5, 0x5\n\
+ bne _080B08EA\n\
+ ldr r0, _080B0930 @ =gPlttBufferFaded\n\
+ lsls r1, r4, 1\n\
+ adds r0, r1, r0\n\
+ ldrh r2, [r0]\n\
+ ldr r0, _080B0934 @ =gPlttBufferUnfaded\n\
+ adds r1, r0\n\
+ ldrh r0, [r1]\n\
+ ldr r1, _080B0938 @ =0x040000d4\n\
+ str r2, [r1]\n\
+ str r0, [r1, 0x4]\n\
+ movs r0, 0x80\n\
+ lsls r0, 24\n\
+ orrs r7, r0\n\
+ str r7, [r1, 0x8]\n\
+ ldr r0, [r1, 0x8]\n\
+ ldr r1, [sp, 0x8]\n\
+ ldr r2, [sp, 0xC]\n\
+ adds r0, r1, r2\n\
+ add r0, r10\n\
+ strh r6, [r0]\n\
+_080B08EA:\n\
+ ldr r3, [sp, 0x10]\n\
+ lsls r0, r3, 1\n\
+ ldr r1, [sp, 0xC]\n\
+ adds r0, r1\n\
+ add r0, r10\n\
+ mov r2, r8\n\
+ strh r2, [r0]\n\
+ ldr r3, [sp, 0x14]\n\
+ lsls r0, r3, 1\n\
+ adds r0, r1\n\
+ add r0, r10\n\
+ strh r5, [r0]\n\
+ ldr r1, [sp, 0x18]\n\
+ lsls r0, r1, 1\n\
+ ldr r2, [sp, 0xC]\n\
+ adds r0, r2\n\
+ add r0, r10\n\
+ strh r6, [r0]\n\
+ ldr r2, _080B093C @ =gTasks\n\
+_080B0910:\n\
+ ldr r0, [sp, 0x4]\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x4]\n\
+ cmp r0, 0x3\n\
+ bhi _080B0920\n\
+ b _080B0774\n\
+_080B0920:\n\
+ movs r4, 0\n\
+ ldr r3, [sp, 0x1C]\n\
+ ldr r1, [sp]\n\
+ adds r0, r3, r1\n\
+ lsls r1, r0, 3\n\
+ adds r2, 0x8\n\
+ adds r0, r1, r2\n\
+ b _080B0950\n\
+ .align 2, 0\n\
+_080B0930: .4byte gPlttBufferFaded\n\
+_080B0934: .4byte gPlttBufferUnfaded\n\
+_080B0938: .4byte 0x040000d4\n\
+_080B093C: .4byte gTasks\n\
+_080B0940:\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0x3\n\
+ bhi _080B0958\n\
+ lsls r0, r4, 3\n\
+ adds r0, r1\n\
+ adds r0, r2\n\
+_080B0950:\n\
+ movs r3, 0\n\
+ ldrsh r0, [r0, r3]\n\
+ cmp r0, 0\n\
+ beq _080B0940\n\
+_080B0958:\n\
+ cmp r4, 0x4\n\
+ bne _080B0980\n\
+ movs r4, 0\n\
+ ldr r3, _080B0990 @ =gSharedMem + 0x19338\n\
+ movs r5, 0x3\n\
+ negs r5, r5\n\
+_080B0964:\n\
+ lsls r1, r4, 2\n\
+ adds r1, r3\n\
+ ldrb r2, [r1, 0x2]\n\
+ adds r0, r5, 0\n\
+ ands r0, r2\n\
+ strb r0, [r1, 0x2]\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0x3\n\
+ bls _080B0964\n\
+ ldr r0, [sp]\n\
+ bl DestroyTask\n\
+_080B0980:\n\
+ add sp, 0x20\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080B0990: .4byte gSharedMem + 0x19338\n\
+ .syntax divided\n");
+}
+#endif
+
+void unref_sub_80B0994(u8 a)
+{
+ if (a != 0)
+ sContest.unk1920A_2 = 1;
+}
+
+void StartStopFlashJudgeAttentionEye(u8 a)
+{
+ if (sContestantStatus[a].hasJudgesAttention)
+ sub_80B0368(a);
+ else
+ sub_80B03A8(a);
+}
+
+extern const struct CompressedSpriteSheet gUnknown_083CC4B4[];
+extern const struct SpritePalette gUnknown_083CC4D4[];
+extern const struct SpriteTemplate gSpriteTemplate_83CC53C[];
+
+u8 CreateContestantBoxBlinkSprites(u8 a)
+{
+ u8 r5 = gContestantTurnOrder[a] * 40 + 32;
+ u8 r8;
+ u8 r6;
+ volatile u8 zero;
+
+ LoadCompressedObjectPic(&gUnknown_083CC4B4[a]);
+ LoadSpritePalette(&gUnknown_083CC4D4[a]);
+ r8 = CreateSprite(&gSpriteTemplate_83CC53C[a], 184, r5, 29);
+ r6 = CreateSprite(&gSpriteTemplate_83CC53C[a], 248, r5, 29);
+ gSprites[r6].oam.tileNum += 64;
+
+ CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gContestantTurnOrder[a] * 5 * 64 + 0x26), (u8 *)(VRAM + 0x10000 + gSprites[r8].oam.tileNum * 32));
+ CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gContestantTurnOrder[a] * 5 * 64 + 0x36), (u8 *)(VRAM + 0x10000 + gSprites[r6].oam.tileNum * 32));
+
+ DmaFill32Defvars(3, 0, (void *)(VRAM + 0x10000 + (0x28 + gSprites[r8].oam.tileNum) * 32), 0x300);
+
+ // What is this?
+ zero = 0;
+ zero = 0;
+
+ DmaFill32Defvars(3, 0, (void *)(VRAM + 0x10000 + (0x28 + gSprites[r6].oam.tileNum) * 32), 0x300);
+
+ gSprites[r8].data[0] = r6;
+ gSprites[r6].data[0] = r8;
+ gSprites[r8].data[1] = a;
+ gSprites[r6].data[1] = a;
+ return r8;
+}
+
+void DestroyContestantBoxBlinkSprites(u8 spriteId)
+{
+ u8 spriteId2 = gSprites[spriteId].data[0];
+
+ FreeSpriteOamMatrix(&gSprites[spriteId2]);
+ DestroySprite(&gSprites[spriteId2]);
+ DestroySpriteAndFreeResources(&gSprites[spriteId]);
+}
+
+void SetBlendForContestantBoxBlink(void)
+{
+ REG_BLDCNT = 0x3F40;
+ REG_BLDALPHA = 0x0907;
+}
+
+void ResetBlendForContestantBoxBlink(void)
+{
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+}
+
+void BlinkContestantBox(u8 a, bool8 b)
+{
+ u8 r5;
+
+ SetBlendForContestantBoxBlink();
+ eContestGfxState[gSprites[a].data[1]].boxBlinking = 1;
+ r5 = gSprites[a].data[0];
+ StartSpriteAffineAnim(&gSprites[a], 1);
+ StartSpriteAffineAnim(&gSprites[r5], 1);
+ gSprites[a].callback = SpriteCB_BlinkContestantBox;
+ gSprites[r5].callback = SpriteCallbackDummy;
+ if (b == FALSE)
+ PlaySE(SE_CONTEST_MONS_TURN);
+ else
+ PlaySE(SE_PC_LOGIN);
+}
+
+void SpriteCB_BlinkContestantBox(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ u8 r1 = sprite->data[0];
+
+ if (gSprites[r1].affineAnimEnded)
+ {
+ sprite->invisible = TRUE;
+ gSprites[r1].invisible = TRUE;
+ sprite->callback = SpriteCB_EndBlinkContestantBox;
+ }
+ }
+}
+
+void SpriteCB_EndBlinkContestantBox(struct Sprite *sprite)
+{
+ eContestGfxState[sprite->data[1]].boxBlinking = 0;
+ DestroyContestantBoxBlinkSprites(sprite->data[0]);
+ ResetBlendForContestantBoxBlink();
+}
+
+void sub_80B0CDC(u8 a, int unused)
+{
+ eContestGfxState[a].boxBlinking = 0;
+}
+
+void ContestDebugTogglePointTotal(void)
+{
+ eEnableContestDebugging ^= 1;
+ if (eEnableContestDebugging == 0)
+ {
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ Text_FillWindowRectDefPalette(
+ &gWindowTemplate_Contest_MoveDescription,
+ 0,
+ gUnknown_083CA308[i][0],
+ gUnknown_083CA308[i][1],
+ gUnknown_083CA310[i][0] + 5,
+ gUnknown_083CA310[i][1] + 1);
+ }
+ DrawContestantWindowText();
+ SwapMoveDescAndContestTilemaps();
+ }
+ else
+ {
+ ContestDebugDoPrint();
+ }
+}
+
+void ContestDebugDoPrint(void)
+{
+ u8 r5 = 0;
+ u8 sp8[8];
+
+ if (eEnableContestDebugging != 0)
+ {
+ u8 i;
+ s16 r2;
+
+ for (i = 0; i < 4; i++)
+ {
+ Text_FillWindowRectDefPalette(
+ &gWindowTemplate_Contest_MoveDescription,
+ 0,
+ gUnknown_083CA308[i][0],
+ gUnknown_083CA308[i][1],
+ gUnknown_083CA310[i][0] + 5,
+ gUnknown_083CA310[i][1] + 1);
+ }
+ for (i = 0; i < 4; i++)
+ {
+ r2 = sContestantStatus[i].unk4;
+ if (r2 < 0)
+ {
+ r2 = -r2;
+ sp8[0] = CHAR_HYPHEN;
+ r5++;
+ }
+ ConvertIntToDecimalStringN(sp8 + r5, r2, 0, 4);
+ Text_InitWindowAndPrintText(
+ &gWindowTemplate_Contest_MoveDescription,
+ sp8,
+ 592 + gContestantTurnOrder[i] * 22,
+ gUnknown_083CA310[gContestantTurnOrder[i]][0],
+ gUnknown_083CA310[gContestantTurnOrder[i]][1]);
+ r5 = 0;
+ }
+ for (i = 0; i < 4; i++)
+ {
+ r2 = sContestantStatus[i].appeal;
+ if (r2 < 0)
+ {
+ r2 = -r2;
+ sp8[0] = CHAR_HYPHEN;
+ r5++;
+ }
+ ConvertIntToDecimalStringN(sp8 + r5, r2, 0, 4);
+ Text_InitWindowAndPrintText(
+ &gWindowTemplate_Contest_MoveDescription,
+ sp8,
+ 512 + gContestantTurnOrder[i] * 20,
+ gUnknown_083CA308[gContestantTurnOrder[i]][0],
+ gUnknown_083CA308[gContestantTurnOrder[i]][1]);
+ r5 = 0;
+ }
+ SwapMoveDescAndContestTilemaps();
+ }
+}
+
+void unref_sub_80B0EE8(s32 *a, s32 b)
+{
+ s32 i;
+ s32 j;
+
+ for (i = 0; i < b - 1; i++)
+ {
+ for (j = b - 1; j > i; j--)
+ {
+ if (a[j - 1] > a[j])
+ {
+ s32 temp = a[j];
+
+ a[j] = a[j - 1];
+ a[j - 1] = temp;
+ }
+ }
+ }
+}
+
+// something to do with contest NPC opponents, I think.
+void SortContestants(u8 a)
+{
+ u8 sp0[4];
+ u16 sp4[4] = {0};
+ s32 i;
+ s32 r2;
+ s32 r4;
+
+ // Generate a unique random number for each contestant.
+ for (i = 0; i < 4; i++)
+ {
+ sp4[i] = Random();
+
+ // Loop through all the numbers generated so far.
+ for (r2 = 0; r2 < i; r2++)
+ {
+ if (sp4[i] == sp4[r2])
+ {
+ // This number isn't unique; try generating again.
+ i--;
+ break;
+ }
+ }
+ }
+
+ if (a == 0)
+ {
+ // Order based on the results of the Conditions round using Insertion Sort.
+ // Use the randomOrdering to break ties.
+ for (i = 0; i < 4; i++)
+ {
+ // Append this contestant to the list.
+ gContestantTurnOrder[i] = i;
+
+ // Determine where the contestant should be ordered.
+ for (r4 = 0; r4 < i; r4++)
+ {
+ if (gContestMonRound1Points[gContestantTurnOrder[r4]] < gContestMonRound1Points[i]
+ || (gContestMonRound1Points[gContestantTurnOrder[r4]] == gContestMonRound1Points[i] && sp4[gContestantTurnOrder[r4]] < sp4[i]))
+ {
+ // Shift everything larger up to make room.
+ for (r2 = i; r2 > r4; r2--)
+ gContestantTurnOrder[r2] = gContestantTurnOrder[r2 - 1];
+
+ // Insert into the new spot.
+ gContestantTurnOrder[r4] = i;
+ break;
+ }
+ }
+
+ // This is redundant.
+ // Perhaps GF switched from true insertion sort to in-place insertion sort, and forgot to
+ // remove this check?
+ if (r4 == i)
+ gContestantTurnOrder[i] = i;
+ }
+
+ // Invert gContestantTurnOrder; above, it was a list of contestant IDs. Now it's a list of turn orderings.
+ //
+ // For example, if contestant 3 had the first turn, then `gContestantTurnOrder[1] = 3`. The turn is the index,
+ // the contestant is the data. After inverting the list, `gContestantTurnOrder[3] = 1`. The contestant is the index,
+ // and the turn is the data.
+ memcpy(sp0, gContestantTurnOrder, sizeof(sp0));
+ for (i = 0; i < 4; i++)
+ gContestantTurnOrder[sp0[i]] = i;
+ }
+ else
+ {
+ // Order contestants based on their ranking.
+ // If contestants have tied ranking, fill in the next available slot.
+ //
+ // Note that ranking is calculated so that shared places still take up a ranking
+ // space. A ranking like [1, 2, 2, 3] is not possible; it would be [1, 2, 2, 4]
+ // instead.
+ memset(sp0, 0xFF, sizeof(sp0));
+ for (i = 0; i < 4; i++)
+ {
+ u8 r2 = sContestantStatus[i].ranking;
+
+ while (1)
+ {
+ u8 *ptr = &sp0[r2];
+ if (*ptr == 0xFF)
+ {
+ *ptr = i;
+ gContestantTurnOrder[i] = r2;
+ break;
+ }
+ r2++;
+ }
+ }
+
+ // Randomize the order of contestants with tied rankings using Selection Sort.
+ //
+ // Look through the array for tied ranks, and use randomOrdering to break the tie.
+ // This ensures that contestants with the same rank will be randomly ordered. This
+ // uses an in-place slection sort, which involves a lot of extra swapping.
+ for (i = 0; i < 3; i++)
+ {
+ for (r4 = 3; r4 > i; r4--)
+ {
+ if (sContestantStatus[r4 - 1].ranking == sContestantStatus[r4].ranking && gContestantTurnOrder[r4 - 1] < gContestantTurnOrder[r4]
+ && sp4[r4 - 1] < sp4[r4])
+ {
+ u8 temp = gContestantTurnOrder[r4];
+
+ gContestantTurnOrder[r4] = gContestantTurnOrder[r4 - 1];
+ gContestantTurnOrder[r4 - 1] = temp;
+ }
+ }
+ }
+ }
+}
+
+void DrawContestantWindows(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ s32 windowId = i + 5;
+ LoadPalette(
+ eContestTempSave.cachedWindowPalettes[windowId], (gContestantTurnOrder[i] + 5) * 16, 32);
+ }
+ DrawContestantWindowText();
+}
+
+void CalculateAppealMoveImpact(u8 contestant)
+{
+ bool8 r8;
+ s32 i;
+
+ sContestantStatus[contestant].appeal = 0;
+ sContestantStatus[contestant].baseAppeal = 0;
+ r8 = ContestantCanUseTurn(contestant);
+ if (r8)
+ {
+ u16 move = sContestantStatus[contestant].currMove;
+ u8 effect = gContestMoves[move].effect;
+ u8 rnd;
+
+ sContestantStatus[contestant].moveCategory = gContestMoves[sContestantStatus[contestant].currMove].contestCategory;
+ if (sContestantStatus[contestant].currMove == sContestantStatus[contestant].prevMove && sContestantStatus[contestant].currMove != MOVE_NONE)
+ {
+ sContestantStatus[contestant].disappointedRepeat = TRUE;
+ sContestantStatus[contestant].moveRepeatCount++;
+ }
+ else
+ {
+ sContestantStatus[contestant].moveRepeatCount = 0;
+ }
+ sContestantStatus[contestant].baseAppeal = gContestEffects[effect].appeal;
+ sContestantStatus[contestant].appeal = gContestEffects[effect].appeal;
+ eContestAppealResults.jam = gContestEffects[effect].jam;
+ eContestAppealResults.jam2 = gContestEffects[effect].jam;
+ eContestAppealResults.contestant = contestant;
+ for (i = 0; i < 4; i++)
+ {
+ sContestantStatus[i].jam = 0;
+ eContestAppealResults.unnervedPokes[i] = 0;
+ }
+ if (sContestantStatus[contestant].hasJudgesAttention && AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove) == 0)
+ sContestantStatus[contestant].hasJudgesAttention = 0;
+ gContestEffectFuncs[effect]();
+ if (sContestantStatus[contestant].conditionMod == 1)
+ sContestantStatus[contestant].appeal += sContestantStatus[contestant].condition - 10;
+ else if (sContestantStatus[contestant].appealTripleCondition)
+ sContestantStatus[contestant].appeal += sContestantStatus[contestant].condition * 3;
+ else
+ sContestantStatus[contestant].appeal += sContestantStatus[contestant].condition;
+ sContestantStatus[contestant].completedCombo = 0;
+ sContestantStatus[contestant].usedComboMove = 0;
+ if (IsContestantAllowedToCombo(contestant))
+ {
+ u8 completedCombo = AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove);
+
+ if (completedCombo != 0 && sContestantStatus[contestant].hasJudgesAttention)
+ {
+ sContestantStatus[contestant].completedCombo = completedCombo;
+ sContestantStatus[contestant].usedComboMove = 1;
+ sContestantStatus[contestant].hasJudgesAttention = 0;
+ sContestantStatus[contestant].comboAppealBonus = sContestantStatus[contestant].baseAppeal * sContestantStatus[contestant].completedCombo;
+ sContestantStatus[contestant].completedComboFlag = 1;
+ }
+ else
+ {
+ if (gContestMoves[sContestantStatus[contestant].currMove].comboStarterId != 0)
+ {
+ sContestantStatus[contestant].hasJudgesAttention = 1;
+ sContestantStatus[contestant].usedComboMove = 1;
+ }
+ else
+ {
+ sContestantStatus[contestant].hasJudgesAttention = 0;
+ }
+ }
+ }
+ if (sContestantStatus[contestant].disappointedRepeat)
+ sContestantStatus[contestant].unk18 = (sContestantStatus[contestant].moveRepeatCount + 1) * 10;
+ if (sContestantStatus[contestant].nervous)
+ {
+ sContestantStatus[contestant].hasJudgesAttention = 0;
+ sContestantStatus[contestant].appeal = 0;
+ sContestantStatus[contestant].baseAppeal = 0;
+ }
+ eContestExcitement.moveExcitement = Contest_GetMoveExcitement(sContestantStatus[contestant].currMove);
+ if (sContestantStatus[contestant].overrideCategoryExcitementMod)
+ eContestExcitement.moveExcitement = 1;
+ if (eContestExcitement.moveExcitement > 0)
+ {
+ if (sContest.applauseLevel + eContestExcitement.moveExcitement > 4)
+ eContestExcitement.excitementAppealBonus = 60;
+ else
+ eContestExcitement.excitementAppealBonus = 10;
+ }
+ else
+ {
+ eContestExcitement.excitementAppealBonus = 0;
+ }
+
+ rnd = Random() % 3;
+ for (i = 0; i < 4; i++)
+ {
+ if (i != contestant)
+ {
+ if (rnd == 0)
+ break;
+ rnd--;
+ }
+ }
+ sContestantStatus[contestant].unk1B = i;
+ }
+}
+
+void SetContestantEffectStringID(u8 a, u8 b)
+{
+ sContestantStatus[a].effectStringId = b;
+}
+
+void SetContestantEffectStringID2(u8 a, u8 b)
+{
+ sContestantStatus[a].effectStringId2 = b;
+}
+
+void SetStartledString(u8 contestant, u8 jam)
+{
+ if (jam >= 60)
+ SetContestantEffectStringID(contestant, CONTEST_STRING_TRIPPED_OVER);
+ else if (jam >= 40)
+ SetContestantEffectStringID(contestant, CONTEST_STRING_LEAPT_UP);
+ else if (jam >= 30)
+ SetContestantEffectStringID(contestant, CONTEST_STRING_UTTER_CRY);
+ else if (jam >= 20)
+ SetContestantEffectStringID(contestant, CONTEST_STRING_TURNED_BACK);
+ else if (jam >= 10)
+ SetContestantEffectStringID(contestant, CONTEST_STRING_LOOKED_DOWN);
+}
+
+void PrintAppealMoveResultText(u8 contestant, u8 stringId)
+{
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
+ StringCopy(gStringVar2, gMoveNames[sContestantStatus[contestant].currMove]);
+ if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_COOL)
+ StringCopy(gStringVar3, gText_Contest_Shyness);
+ else if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_BEAUTY)
+ StringCopy(gStringVar3, gText_Contest_Anxiety);
+ else if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_CUTE)
+ StringCopy(gStringVar3, gText_Contest_Laziness);
+ else if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_SMART)
+ StringCopy(gStringVar3, gText_Contest_Hesitancy);
+ else
+ StringCopy(gStringVar3, gText_Contest_Fear);
+ StringExpandPlaceholders(gStringVar4, gUnknown_083CC188[stringId]);
+ ContestClearGeneralTextWindow();
+ Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+}
+
+void MakeContestantNervous(u8 p)
+{
+ sContestantStatus[p].nervous = 1;
+ sContestantStatus[p].currMove = MOVE_NONE;
+}
+
+// This function calculates the new turn order for the next round. The
+// algorithm first checks for explicit turn assignments in the
+// ContestantStatus::nextTurnOrder field of each contestant. The remaining
+// turns are assigned such that the turn order will reverse.
+//
+// For example, if no pokemon have a defined nextTurnOrder, then the 4th
+// will become 1st, the 3rd will become 2nd, etc.
+//
+// Note: This function assumes that multiple pokemon cannot have the same
+// nextTurnOrder value.
+void ApplyNextTurnOrder(void)
+{
+ u8 nextContestant = 0;
+ s32 i;
+ s32 j;
+ u8 newTurnOrder[4];
+ bool8 isContestantOrdered[4];
+
+ for (i = 0; i < 4; i++)
+ {
+ newTurnOrder[i] = gContestantTurnOrder[i];
+ isContestantOrdered[i] = FALSE;
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (sContestantStatus[j].nextTurnOrder == i)
+ {
+ newTurnOrder[j] = i;
+ isContestantOrdered[j] = TRUE;
+ break;
+ }
+ }
+ if (j == 4)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (isContestantOrdered[j] == 0 && sContestantStatus[j].nextTurnOrder == 0xFF)
+ {
+ nextContestant = j;
+ j++;
+ break;
+ }
+ }
+ for (; j < 4; j++)
+ {
+ if (isContestantOrdered[j] == 0 && sContestantStatus[j].nextTurnOrder == 0xFF
+ && gContestantTurnOrder[nextContestant] > gContestantTurnOrder[j])
+ nextContestant = j;
+ }
+ newTurnOrder[nextContestant] = i;
+ isContestantOrdered[nextContestant] = 1;
+ }
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ eContestAppealResults.turnOrder[i] = newTurnOrder[i];
+ sContestantStatus[i].nextTurnOrder = 0xFF;
+ sContestantStatus[i].turnOrderMod = 0;
+ gContestantTurnOrder[i] = newTurnOrder[i];
+ }
+}
+
+void SpriteCB_JudgeSpeechBubble(struct Sprite *sprite)
+{
+ if (sprite->data[1]++ > 84)
+ {
+ sprite->data[1] = 0;
+ sprite->invisible = TRUE;
+ sprite->callback = SpriteCallbackDummy;
+ sContest.waitForJudgeSpeechBubble = 0;
+ }
+}
+
+void DoJudgeSpeechBubble(u8 a)
+{
+ u8 spriteId = sContest.unk19216;
+
+ switch (a)
+ {
+ case 0:
+ case 1:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0];
+ PlaySE(SE_FAILURE);
+ break;
+ case 2:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 4;
+ PlaySE(SE_SUCCESS);
+ break;
+ case 3:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 8;
+ PlaySE(SE_SUCCESS);
+ break;
+ case 4:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12;
+ PlaySE(SE_WARP_IN);
+ break;
+ case 5: // exactly the same as case 4
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12;
+ PlaySE(SE_WARP_IN);
+ break;
+ case 6:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 16;
+ PlaySE(SE_WARP_IN);
+ break;
+ case 8:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 24;
+ PlaySE(SE_M_HEAL_BELL);
+ break;
+ case 7:
+ default:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 20;
+ PlaySE(SE_WARP_IN);
+ break;
+ }
+ gSprites[spriteId].data[1] = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gSprites[spriteId].callback = SpriteCB_JudgeSpeechBubble;
+ sContest.waitForJudgeSpeechBubble = 1;
+}
+
+void UpdateApplauseMeter(void)
+{
+ s32 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ const u8 *src;
+
+ if (i < sContest.applauseLevel)
+ src = gContestApplauseMeterGfx + 64;
+ else
+ src = gContestApplauseMeterGfx;
+ CpuCopy32(src, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 17 + i) * 32), 32);
+ CpuCopy32(src + 32, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 25 + i) * 32), 32);
+ if (sContest.applauseLevel > 4)
+ StartApplauseOverflowAnimation();
+ }
+}
+
+UNUSED
+void unref_sub_80B19D0(void)
+{
+ u8 str[20];
+ StringCopy(str, gUnknown_083CC2EC);
+ Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, str, 680, 0, 0);
+}
+
+s8 Contest_GetMoveExcitement(u16 move)
+{
+ return gContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory];
+}
+
+// Launches crowd movement task, maybe
+u8 StartApplauseOverflowAnimation(void)
+{
+ u8 taskId = CreateTask(Task_ApplauseOverflowAnimation, 10);
+
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x0ABE2);
+ return taskId;
+}
+
+void Task_ApplauseOverflowAnimation(u8 taskId)
+{
+ if (++gTasks[taskId].data[0] == 1)
+ {
+ gTasks[taskId].data[0] = 0;
+ if (gTasks[taskId].data[3] == 0)
+ gTasks[taskId].data[4]++;
+ else
+ gTasks[taskId].data[4]--;
+ BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, gTasks[taskId].data[4], RGB(31, 31, 31));
+ if (gTasks[taskId].data[4] == 0 || gTasks[taskId].data[4] == 16)
+ {
+ gTasks[taskId].data[3] ^= 1;
+ if (sContest.applauseLevel < 5)
+ {
+ BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, 0, RGB(31, 0, 0));
+ DestroyTask(taskId);
+ }
+ }
+ }
+}
+
+void SlideApplauseMeterIn(void)
+{
+ CreateTask(Task_SlideApplauseMeterIn, 10);
+ gSprites[sContest.applauseMeterSpriteId].pos2.x = -70;
+ gSprites[sContest.applauseMeterSpriteId].invisible = FALSE;
+ sContest.applauseMeterIsMoving = 1;
+}
+
+void Task_SlideApplauseMeterIn(u8 taskId)
+{
+ struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId];
+
+ gTasks[taskId].data[10] += 1664;
+ sprite->pos2.x += gTasks[taskId].data[10] >> 8;
+ gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF;
+ if (sprite->pos2.x > 0)
+ sprite->pos2.x = 0;
+ if (sprite->pos2.x == 0)
+ {
+ sContest.applauseMeterIsMoving = 0;
+ DestroyTask(taskId);
+ }
+}
+
+void SlideApplauseMeterOut(void)
+{
+ if (gSprites[sContest.applauseMeterSpriteId].invisible == TRUE)
+ {
+ sContest.applauseMeterIsMoving = 0;
+ }
+ else
+ {
+ CreateTask(Task_SlideApplauseMeterOut, 10);
+ gSprites[sContest.applauseMeterSpriteId].pos2.x = 0;
+ sContest.applauseMeterIsMoving = 1;
+ }
+}
+
+void Task_SlideApplauseMeterOut(u8 taskId)
+{
+ struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId];
+
+ gTasks[taskId].data[10] += 1664;
+ sprite->pos2.x -= gTasks[taskId].data[10] >> 8;
+ gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF;
+ if (sprite->pos2.x < -70)
+ sprite->pos2.x = -70;
+ if (sprite->pos2.x == -70)
+ {
+ sprite->invisible = TRUE;
+ sContest.applauseMeterIsMoving = 0;
+ DestroyTask(taskId);
+ }
+}
+
+void ShowAndUpdateApplauseMeter(s8 a)
+{
+ u8 taskId = CreateTask(Task_ShowAndUpdateApplauseMeter, 5);
+
+ gTasks[taskId].data[0] = a;
+ sContest.isShowingApplauseMeter = 1;
+}
+
+void Task_ShowAndUpdateApplauseMeter(u8 taskId)
+{
+ switch (gTasks[taskId].data[10])
+ {
+ case 0:
+ SlideApplauseMeterIn();
+ gTasks[taskId].data[10]++;
+ break;
+ case 1:
+ if (!sContest.applauseMeterIsMoving)
+ {
+ nullsub_18(gTasks[taskId].data[0]);
+ gTasks[taskId].data[10]++;
+ }
+ break;
+ case 2:
+ if (gTasks[taskId].data[11]++ > 20)
+ {
+ gTasks[taskId].data[11] = 0;
+ UpdateApplauseMeter();
+ sContest.isShowingApplauseMeter = 0;
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+UNUSED
+void HideApplauseMeterNoAnim(void)
+{
+ gSprites[sContest.applauseMeterSpriteId].pos2.x = 0;
+ gSprites[sContest.applauseMeterSpriteId].invisible = FALSE;
+}
+
+UNUSED
+void ShowApplauseMeterNoAnim(void)
+{
+ gSprites[sContest.applauseMeterSpriteId].invisible = TRUE;
+}
+
+void AnimateAudience(void)
+{
+ CreateTask(Task_AnimateAudience, 15);
+ sContest.animatingAudience = 1;
+}
+
+void Task_AnimateAudience(u8 taskId)
+{
+ if (gTasks[taskId].data[10]++ > 6)
+ {
+#ifndef NONMATCHING
+ register struct Task *task asm("r0");
+ register u32 r4 asm("r4") = taskId * 4;
+#endif
+
+ gTasks[taskId].data[10] = 0;
+ if (gTasks[taskId].data[11] == 0)
+ {
+ DmaCopy32Defvars(3, ewram16800, (void *)(VRAM + 0x2000), 0x1000);
+ }
+ else
+ {
+ DmaCopy32Defvars(3, ewram15800, (void *)(VRAM + 0x2000), 0x1000);
+ gTasks[taskId].data[12]++;
+ }
+
+#ifdef NONMATCHING
+ gTasks[taskId].data[11] ^= 1;
+ if (gTasks[taskId].data[12] == 9)
+#else
+ // Why won't this match the normal way?
+ asm("add %0, %1, #0\n\t"
+ "add %0, %3\n\t"
+ "lsl %0, #3\n\t"
+ "add %0, %2\n\t"
+ : "=r"(task):"r"(r4),"r"(gTasks),"r"(taskId));
+
+ task->data[11] ^= 1;
+ if (task->data[12] == 9)
+#endif
+ {
+ sContest.animatingAudience = 0;
+ DestroyTask(taskId);
+ }
+ }
+}
+
+#define tBlendColor data[0]
+#define tBlendCoeff data[1]
+
+void sub_80B1EA8(s8 a, s8 b)
+{
+ u8 taskId = CreateTask(sub_80B1F4C, 10);
+ u16 blendColor;
+ u8 blendCoeff;
+ u8 r3;
+
+ if (a > 0)
+ {
+ blendColor = RGB(30, 27, 8);
+ if (b > 0)
+ {
+ blendCoeff = 0;
+ r3 = sContest.applauseLevel * 3;
+ }
+ else
+ {
+ blendCoeff = sContest.applauseLevel * 3;
+ r3 = 0;
+ }
+ }
+ else
+ {
+ blendColor = 0;
+ if (b > 0)
+ {
+ blendCoeff = 0;
+ r3 = 12;
+ }
+ else
+ {
+ blendCoeff = 12;
+ r3 = 0;
+ }
+ }
+ gTasks[taskId].tBlendColor = blendColor;
+ gTasks[taskId].tBlendCoeff = blendCoeff;
+ gTasks[taskId].data[2] = b;
+ gTasks[taskId].data[3] = r3;
+ sContest.unk1920B_0 = 0;
+}
+
+void sub_80B1F4C(u8 taskId)
+{
+ if (gTasks[taskId].data[10]++ >= 0)
+ {
+ gTasks[taskId].data[10] = 0;
+ if (gTasks[taskId].data[2] > 0)
+ gTasks[taskId].tBlendCoeff++;
+ else
+ gTasks[taskId].tBlendCoeff--;
+ BlendPalette(17, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor);
+ BlendPalette(26, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor);
+ if (gTasks[taskId].tBlendCoeff == gTasks[taskId].data[3])
+ {
+ DestroyTask(taskId);
+ sContest.unk1920B_0 = 0;
+ }
+ }
+}
+
+#undef tBlendColor
+#undef tBlendCoeff
+
+void sub_80B1FD0(bool8 a)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (sContestantStatus[i].turnOrderMod != 0 && a)
+ {
+ CpuCopy32(
+ GetTurnOrderNumberGfx(i),
+ (void *)(VRAM + 0x10000 + (gSprites[eContestGfxState[i].unk1].oam.tileNum + 5) * 32),
+ 64);
+ gSprites[eContestGfxState[i].unk1].pos1.y = gUnknown_083CA33C[gContestantTurnOrder[i]];
+ gSprites[eContestGfxState[i].unk1].invisible = FALSE;
+ }
+ else
+ {
+ gSprites[eContestGfxState[i].unk1].invisible = TRUE;
+ }
+ }
+}
+
+const u8 *GetTurnOrderNumberGfx(u8 contestant)
+{
+ if (sContestantStatus[contestant].turnOrderMod != 1)
+ return gContestNextTurnRandomGfx;
+ else
+ return gContestNextTurnNumbersGfx + sContestantStatus[contestant].nextTurnOrder * 64;
+}
+
+void sub_80B20C4(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (eContestAppealResults.unnervedPokes[i] != 0 && !Contest_IsMonsTurnDisabled(i))
+ {
+ u8 r4 = gContestantTurnOrder[i] * 5 + 2;
+ u16 r0 = GetStatusSymbolTileOffset(i, 3);
+
+ *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x28) = r0;
+ *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x2A) = r0 + 1;
+ *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x28) = r0 + 16;
+ *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x2A) = r0 + 17;
+ PlaySE(SE_CONTEST_ICON_CHANGE);
+ }
+ }
+}
+
+bool8 IsContestantAllowedToCombo(u8 a)
+{
+ if (sContestantStatus[a].disappointedRepeat || sContestantStatus[a].nervous)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+void sub_80B2184(void)
+{
+ s32 i;
+
+ ((vBgCnt *)&REG_BG1CNT)->priority = 0;
+ ((vBgCnt *)&REG_BG1CNT)->screenSize = 1;
+ ((vBgCnt *)&REG_BG1CNT)->areaOverflowMode = 0;
+
+ gBattle_BG1_X = DISPLAY_WIDTH;
+ gBattle_BG1_Y = DISPLAY_HEIGHT;
+ REG_BG1HOFS = DISPLAY_WIDTH;
+ REG_BG1VOFS = DISPLAY_HEIGHT;
+
+ DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000);
+ LZDecompressVram(gUnknown_08D17C3C, (void *)(VRAM + 0xF000));
+
+ ((vBgCnt *)&REG_BG1CNT)->charBaseBlock = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ gSprites[eContestGfxState[i].unk0].oam.priority = 1;
+ gSprites[eContestGfxState[i].unk1].oam.priority = 1;
+ }
+
+ ((vBgCnt *)&REG_BG2CNT)->priority = 1;
+ ((vBgCnt *)&REG_BG0CNT)->priority = 1;
+ ((vBgCnt *)&REG_BG1CNT)->screenSize = 2;
+}
+
+void sub_80B2280(void)
+{
+ s32 i;
+
+ DmaClearLarge32(3, (void *)(VRAM + 0x8000), 0x2000, 0x1000);
+ DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000);
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+
+ ((vBgCnt *)&REG_BG1CNT)->priority = 1;
+ ((vBgCnt *)&REG_BG1CNT)->screenSize = 0;
+ ((vBgCnt *)&REG_BG1CNT)->areaOverflowMode = 0;
+ ((vBgCnt *)&REG_BG1CNT)->charBaseBlock = 2;
+
+ for (i = 0; i < 4; i++)
+ {
+ gSprites[eContestGfxState[i].unk0].oam.priority = 0;
+ gSprites[eContestGfxState[i].unk1].oam.priority = 0;
+ }
+}
+
+void sub_80B237C(u8 taskId)
+{
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = DISPLAY_HEIGHT;
+ PlaySE12WithPanning(SE_CONTEST_CURTAIN_FALL, 0);
+ gTasks[taskId].func = sub_80B23BC;
+}
+
+void sub_80B23BC(u8 taskId)
+{
+ if ((s16)(gBattle_BG1_Y -= 7) < 0)
+ gBattle_BG1_Y = 0;
+ if (gBattle_BG1_Y == 0) // Why cast?
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_80B2400;
+ }
+}
+
+void sub_80B2400(u8 taskId)
+{
+ s32 i;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ for (i = 0; i < 4; i++)
+ sContest.unk19218[i] = gContestantTurnOrder[i];
+ sub_80AFA5C();
+ sub_80B0588();
+ DrawConditionStars();
+ DrawContestantWindows();
+ sub_80B1FD0(TRUE);
+ sub_80AFFA0();
+ gTasks[taskId].data[0] = 1;
+ break;
+ case 1:
+ if (gIsLinkContest & 1)
+ {
+ u8 taskId2;
+
+ sContest.unk1920B_2 = 1;
+ if (IsPlayerLinkLeader())
+ sub_80AF438();
+ taskId2 = CreateTask(sub_80C8C80, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC);
+ ContestPrintLinkStandby();
+ gTasks[taskId].data[0] = 2;
+ }
+ else
+ {
+ sub_80AF438();
+ gTasks[taskId].data[0] = 3;
+ }
+ break;
+ case 2:
+ if (!sContest.unk1920B_2)
+ gTasks[taskId].data[0] = 3;
+ break;
+ case 3:
+ DrawStatusSymbols();
+ SwapMoveDescAndContestTilemaps();
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80B253C;
+ break;
+ }
+}
+
+void sub_80B2508(u8 taskId)
+{
+ if ((s16)(gBattle_BG1_Y += 7) > DISPLAY_HEIGHT)
+ gTasks[taskId].func = sub_80ADCDC;
+}
+
+void sub_80B253C(u8 taskId)
+{
+ if (gTasks[taskId].data[2] < 10)
+ {
+ gTasks[taskId].data[2]++;
+ }
+ else
+ {
+ if (gTasks[taskId].data[1] == 0)
+ {
+ if (gTasks[taskId].data[0] == 16)
+ gTasks[taskId].data[1]++;
+ else
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (gTasks[taskId].data[0] == 0)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_80B25A4;
+ }
+ else
+ {
+ gTasks[taskId].data[0]--;
+ }
+ }
+ }
+}
+
+void sub_80B25A4(u8 taskId)
+{
+ if (gTasks[taskId].data[2] < 10)
+ {
+ gTasks[taskId].data[2]++;
+ }
+ else
+ {
+ gTasks[taskId].data[2] = 0;
+ PlaySE12WithPanning(SE_CONTEST_CURTAIN_RISE, 0);
+ gTasks[taskId].func = sub_80B2508;
+ }
+}
+
+void sub_80B25E4(u8 a)
+{
+ 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)
+ {
+ AnimateSprite(&gSprites[eContestGfxState[i].unk0]);
+ gSprites[eContestGfxState[i].unk0].invisible = FALSE;
+ }
+ }
+ taskId = CreateTask(sub_80B26C8, 5);
+ gTasks[taskId].data[0] = a;
+ sContest.unk1920B_1 = 1;
+}
+
+void sub_80B26C8(u8 taskId)
+{
+ s32 i;
+
+ if (gSprites[eContestGfxState[0].unk0].affineAnimEnded)
+ {
+ if ((u8)gTasks[taskId].data[0] == 1)
+ {
+ for (i = 0; i < 4; i++)
+ gSprites[eContestGfxState[i].unk0].invisible = TRUE;
+ }
+ for (i = 0; i < 4; i++)
+ FreeSpriteOamMatrix(&gSprites[eContestGfxState[i].unk0]);
+ sContest.unk1920B_1 = 0;
+ DestroyTask(taskId);
+ }
+}
+
+u16 SanitizeMove(u16 move)
+{
+ if (move >= NUM_MOVES)
+ move = MOVE_POUND;
+ return move;
+}
+
+u16 SanitizeSpecies(u16 species)
+{
+ if (species >= NUM_SPECIES)
+ species = SPECIES_NONE;
+ return species;
+}
+
+void sub_80B2790(u8 a)
+{
+ s32 i;
+ u16 move = SanitizeMove(sContestantStatus[a].currMove);
+ u16 species = SanitizeSpecies(gContestMons[a].species);
+ u8 r5_2;
+
+ memset(&shared19348, 0, sizeof(shared19348));
+ ClearBattleAnimationVars();
+ for (i = 0; i < 4; i++)
+ gBattleMonForms[i] = 0;
+ switch (move)
+ {
+ case MOVE_CURSE:
+ if (gBaseStats[species].type1 == TYPE_GHOST || gBaseStats[species].type2 == TYPE_GHOST)
+ gAnimMoveTurn = 0;
+ else
+ gAnimMoveTurn = 1;
+ 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;
+ break;
+ case MOVE_RETURN:
+ gAnimFriendship = 0xFF;
+ break;
+ case MOVE_FRUSTRATION:
+ gAnimFriendship = 0;
+ break;
+ case MOVE_SOLAR_BEAM:
+ case MOVE_RAZOR_WIND:
+ case MOVE_SKULL_BASH:
+ case MOVE_SKY_ATTACK:
+ if (sContest.unk1925E == 0)
+ {
+ sContest.unk1925E = 2;
+ gAnimMoveTurn = 0;
+ }
+ else
+ {
+ gAnimMoveTurn = 1;
+ }
+ break;
+ }
+ sub_80B2968();
+}
+
+void sub_80B28CC(int unused)
+{
+ memset(&shared19348, 0, sizeof(shared19348));
+ if (sContest.unk1925E != 0)
+ sContest.unk1925E--;
+}
+
+void sub_80B28F0(u8 a)
+{
+ shared19348.unk5 = a;
+ shared19348.unk0 = SanitizeSpecies(gContestMons[a].species);
+ shared19348.unk8 = gContestMons[a].personality;
+ shared19348.unkC = gContestMons[a].otId;
+}
+
+void sub_80B292C(void)
+{
+ gBattlerSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
+ InitSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]]);
+ sub_80B2968();
+}
+
+void sub_80B2968(void)
+{
+ struct Sprite *sprite = &gSprites[gBattlerSpriteIds[3]];
+
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->pos1.x = GetBattlerSpriteCoord(3, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(3, 1);
+ sprite->invisible = TRUE;
+}
+
+void SelectContestMoveBankTarget(u16 move)
+{
+ switch (gBattleMoves[move].target)
+ {
+ case TARGET_UNK2:
+ case TARGET_USER:
+ gBattlerTarget = 2;
+ break;
+ case TARGET_SELECTED_POKEMON:
+ case TARGET_RANDOM:
+ case TARGET_BOTH_ENEMIES:
+ case TARGET_ALL_EXCEPT_USER:
+ default:
+ gBattlerTarget = 3;
+ break;
+ }
+}
+
+bool8 Contest_SaveWinner(u8 a)
+{
+ s32 i;
+ u8 r7 = Random() % 3;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (gContestFinalStandings[i] == 0)
+ break;
+ }
+ if (a == 0xFF && i != gContestPlayerMonIndex)
+ return FALSE;
+ switch (gSpecialVar_ContestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ r7 += 0;
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ r7 += 3;
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ r7 += 6;
+ break;
+ case CONTEST_CATEGORY_SMART:
+ r7 += 9;
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ r7 += 12;
+ break;
+ }
+ if (a != 0xFE)
+ {
+ u8 r4 = GetContestWinnerSaveIdx(a, 1);
+
+ 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;
+ else
+ gSaveBlock1.contestWinners[r4].contestCategory = r7;
+ }
+ else
+ {
+ shared15DE0.personality = gContestMons[i].personality;
+ shared15DE0.otId = gContestMons[i].otId;
+ shared15DE0.species = gContestMons[i].species;
+ StringCopy(shared15DE0.nickname, gContestMons[i].nickname);
+ if (gIsLinkContest & 1)
+ StringCopy(shared15DE0.trainerName, gLinkPlayers[i].name);
+ else
+ StringCopy(shared15DE0.trainerName, gContestMons[i].trainerName);
+ shared15DE0.contestCategory = r7;
+ }
+ return TRUE;
+}
+
+u8 GetContestWinnerSaveIdx(u8 a, u8 b)
+{
+ s32 i;
+
+ switch (a)
+ {
+ case 0:
+ case 1:
+ return a;
+ case 2:
+ if (b != 0)
+ {
+ for (i = 4; i >= 3; i--)
+ memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner));
+ }
+ return 2;
+ case 3:
+ if (b != 0)
+ {
+ for (i = 7; i >= 6; i--)
+ memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner));
+ }
+ return 5;
+ default:
+ switch (gSpecialVar_ContestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ return 8;
+ case CONTEST_CATEGORY_BEAUTY:
+ return 9;
+ case CONTEST_CATEGORY_CUTE:
+ return 10;
+ case CONTEST_CATEGORY_SMART:
+ return 11;
+ case CONTEST_CATEGORY_TOUGH:
+ default:
+ return 12;
+ }
+ }
+}
+
+void Contest_ResetWinners(void)
+{
+ s32 i;
+
+ for (i = 0; i < 8; i++)
+ gSaveBlock1.contestWinners[i] = gUnknown_083CC5D0[i];
+}
+
diff --git a/src/contest_ai.c b/src/contest_ai.c
index 77bfa40b6..a922156a7 100644
--- a/src/contest_ai.c
+++ b/src/contest_ai.c
@@ -380,7 +380,7 @@ static u8 sub_8128A7C(u8 var)
int i;
for(i = 0; i < 4; i++)
- if(shared192D0.turnOrder[i] == var)
+ if(eContestAppealResults.turnOrder[i] == var)
break;
return i;
@@ -494,7 +494,7 @@ static void ContestAICmd_unk_0A(void)
static void ContestAICmd_get_user_order(void)
{
- eContestAI->scriptResult = shared192D0.turnOrder[eContestAI->unk41];
+ eContestAI->scriptResult = eContestAppealResults.turnOrder[eContestAI->unk41];
gAIScriptPtr += 1;
}
@@ -1196,7 +1196,7 @@ static void ContestAICmd_get_used_combo_starter(void)
u16 result = 0;
u8 var = sub_8128A7C(gAIScriptPtr[1]);
- if(sub_80B214C(var))
+ if(IsContestantAllowedToCombo(var))
result = gContestMoves[sContestantStatus[var].prevMove].comboStarterId ? 1 : 0;
eContestAI->scriptResult = result;
@@ -1277,7 +1277,7 @@ static void ContestAICmd_get_val_812A188(void)
{
u8 var = sub_8128A7C(gAIScriptPtr[1]);
- eContestAI->scriptResult = sContestantStatus[var].unk15_3;
+ eContestAI->scriptResult = sContestantStatus[var].completedComboFlag;
gAIScriptPtr += 2;
}
diff --git a/src/contest_effect.c b/src/contest_effect.c
index 7c52e8075..f00799b0e 100644
--- a/src/contest_effect.c
+++ b/src/contest_effect.c
@@ -81,93 +81,93 @@ static void ContestEffect_HighlyAppealing(void)
// After this move, the user is more easily startled.
static void ContestEffect_UserMoreEasilyStartled(void)
{
- sContestantStatus[shared192D0.contestant].moreEasilyStartled = TRUE;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_MORE_CONSCIOUS);
+ sContestantStatus[eContestAppealResults.contestant].moreEasilyStartled = TRUE;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MORE_CONSCIOUS);
}
// Makes a great appeal, but allows no more to the end.
static void ContestEffect_GreatAppealButNoMoreMoves(void)
{
- sContestantStatus[shared192D0.contestant].exploded = TRUE;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_NO_APPEAL);
+ sContestantStatus[eContestAppealResults.contestant].exploded = TRUE;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NO_APPEAL);
}
// Can be used repeatedly without boring the JUDGE.
static void ContestEffect_RepetitionNotBoring(void)
{
- sContestantStatus[shared192D0.contestant].usedRepeatableMove = TRUE;
- sContestantStatus[shared192D0.contestant].disappointedRepeat = FALSE;
- sContestantStatus[shared192D0.contestant].moveRepeatCount = 0;
+ sContestantStatus[eContestAppealResults.contestant].usedRepeatableMove = TRUE;
+ sContestantStatus[eContestAppealResults.contestant].disappointedRepeat = FALSE;
+ sContestantStatus[eContestAppealResults.contestant].moveRepeatCount = 0;
}
// Can avoid being startled by others once.
static void ContestEffect_AvoidStartleOnce(void)
{
- sContestantStatus[shared192D0.contestant].jamSafetyCount = 1;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_SETTLE_DOWN);
+ sContestantStatus[eContestAppealResults.contestant].jamSafetyCount = 1;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SETTLE_DOWN);
}
// Can avoid being startled by others.
static void ContestEffect_AvoidStartle(void)
{
- sContestantStatus[shared192D0.contestant].immune = TRUE;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_OBLIVIOUS_TO_OTHERS);
+ sContestantStatus[eContestAppealResults.contestant].immune = TRUE;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_OBLIVIOUS_TO_OTHERS);
}
// Can avoid being startled by others a little.
static void ContestEffect_AvoidStartleSlightly(void)
{
- sContestantStatus[shared192D0.contestant].jamReduction = 20;
- SetContestantEffectStringID(shared192D0.contestant,CONTEST_STRING_LESS_AWARE);
+ sContestantStatus[eContestAppealResults.contestant].jamReduction = 20;
+ SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_LESS_AWARE);
}
// After this move, the user is less likely to be startled.
static void ContestEffect_UserLessEasilyStartled(void)
{
- sContestantStatus[shared192D0.contestant].resistant = TRUE;
- SetContestantEffectStringID(shared192D0.contestant,CONTEST_STRING_STOPPED_CARING);
+ sContestantStatus[eContestAppealResults.contestant].resistant = TRUE;
+ SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_STOPPED_CARING);
}
// Slightly startles the POKéMON in front.
static void ContestEffect_StartleFrontMon(void)
{
u8 idx = 0;
- u8 a = shared192D0.contestant;
+ u8 a = eContestAppealResults.contestant;
- if (shared192D0.turnOrder[a] != 0) {
+ if (eContestAppealResults.turnOrder[a] != 0) {
int i;
for (i = 0; i < 4; i++)
{
- if (shared192D0.turnOrder[a] - 1 == shared192D0.turnOrder[i])
+ if (eContestAppealResults.turnOrder[a] - 1 == eContestAppealResults.turnOrder[i])
break;
}
- shared192D0.jamQueue[0] = i;
- shared192D0.jamQueue[1] = 0xFF;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
idx = WasAtLeastOneOpponentJammed();
}
if (idx == 0)
- SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2);
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Slightly startles those that have made appeals.
static void ContestEffect_StartlePrevMons(void)
{
u8 idx = 0;
- u8 a = shared192D0.contestant;
+ u8 a = eContestAppealResults.contestant;
- if (shared192D0.turnOrder[a] != 0) {
+ if (eContestAppealResults.turnOrder[a] != 0) {
int i, j;
for (i = 0, j = 0; i < 4; i++)
- if (shared192D0.turnOrder[a] > shared192D0.turnOrder[i])
- shared192D0.jamQueue[j++] = i;
- shared192D0.jamQueue[j] = 0xFF;
+ if (eContestAppealResults.turnOrder[a] > eContestAppealResults.turnOrder[i])
+ eContestAppealResults.jamQueue[j++] = i;
+ eContestAppealResults.jamQueue[j] = 0xFF;
idx = WasAtLeastOneOpponentJammed();
}
if (idx == 0)
- SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2);
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Startles the POKéMON that appealed before the user.
@@ -182,7 +182,7 @@ static void ContestEffect_StartlePrevMon2(void)
jam = 40;
else
jam = 60;
- shared192D0.jam = jam;
+ eContestAppealResults.jam = jam;
ContestEffect_StartleFrontMon();
}
@@ -190,18 +190,18 @@ static void ContestEffect_StartlePrevMon2(void)
static void ContestEffect_StartlePrevMons2(void)
{
u8 numStartled = 0;
- u8 contestant = shared192D0.contestant;
+ u8 contestant = eContestAppealResults.contestant;
- if (shared192D0.turnOrder[contestant] != 0)
+ if (eContestAppealResults.turnOrder[contestant] != 0)
{
int i;
for (i = 0; i < 4; i++)
{
- if (shared192D0.turnOrder[contestant] > shared192D0.turnOrder[i])
+ if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i])
{
- shared192D0.jamQueue[0] = i;
- shared192D0.jamQueue[1] = 0xFF;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
{
u8 rval = Random() % 10;
int jam;
@@ -218,31 +218,31 @@ static void ContestEffect_StartlePrevMons2(void)
jam = 40;
else
jam = 60;
- shared192D0.jam = jam;
+ eContestAppealResults.jam = jam;
}
if (WasAtLeastOneOpponentJammed())
numStartled++;
}
}
}
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
if (numStartled == 0)
- SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
// Shifts the JUDGE's attention from others.
static void ContestEffect_ShiftJudgeAttention(void)
{
bool32 hitAny = FALSE;
- u8 contestant = shared192D0.contestant;
+ u8 contestant = eContestAppealResults.contestant;
- if (shared192D0.turnOrder[shared192D0.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
int i;
for (i = 0; i < 4; i++)
{
- if (shared192D0.turnOrder[contestant] > shared192D0.turnOrder[i] &&
+ if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i] &&
sContestantStatus[i].hasJudgesAttention &&
CanUnnerveContestant(i))
{
@@ -253,10 +253,10 @@ static void ContestEffect_ShiftJudgeAttention(void)
}
}
}
- SetContestantEffectStringID(shared192D0.contestant,CONTEST_STRING_DAZZLE_ATTEMPT);
+ SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_DAZZLE_ATTEMPT);
if (!hitAny)
{
- SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
}
@@ -264,81 +264,81 @@ static void ContestEffect_ShiftJudgeAttention(void)
static void ContestEffect_StartleMonWithJudgesAttention(void)
{
u8 numStartled = 0;
- u8 contestant = shared192D0.contestant;
+ u8 contestant = eContestAppealResults.contestant;
- if (shared192D0.turnOrder[shared192D0.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
int i;
for (i = 0; i < 4; i++)
{
- if (shared192D0.turnOrder[contestant] > shared192D0.turnOrder[i])
+ if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i])
{
if (sContestantStatus[i].hasJudgesAttention)
- shared192D0.jam = 50;
+ eContestAppealResults.jam = 50;
else
- shared192D0.jam = 10;
- shared192D0.jamQueue[0] = i;
- shared192D0.jamQueue[1] = 0xFF;
+ eContestAppealResults.jam = 10;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
if (WasAtLeastOneOpponentJammed())
numStartled++;
}
}
}
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
if (numStartled == 0)
- SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
// Jams the others, and misses one turn of appeals.
static void ContestEffect_JamsOthersButMissOneTurn(void)
{
- sContestantStatus[shared192D0.contestant].turnSkipped = TRUE;
+ sContestantStatus[eContestAppealResults.contestant].turnSkipped = TRUE;
ContestEffect_StartlePrevMons();
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Startles POKéMON that made a same-type appeal.
static void ContestEffect_StartleMonsSameTypeAppeal(void)
{
- u16 move = sContestantStatus[shared192D0.contestant].currMove;
+ u16 move = sContestantStatus[eContestAppealResults.contestant].currMove;
JamByMoveCategory(gContestMoves[move].contestCategory);
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made COOL appeals.
static void ContestEffect_StartleMonsCoolAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_COOL);
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made BEAUTY appeals.
static void ContestEffect_StartleMonsBeautyAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_BEAUTY);
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made CUTE appeals.
static void ContestEffect_StartleMonsCuteAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_CUTE);
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made SMART appeals.
static void ContestEffect_StartleMonsSmartAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_SMART);
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made TOUGH appeals.
static void ContestEffect_StartleMonsToughAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_TOUGH);
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Makes one POKéMON after the user nervous.
@@ -346,13 +346,13 @@ static void ContestEffect_MakeFollowingMonNervous(void)
{
bool32 hitAny = FALSE;
- if (shared192D0.turnOrder[shared192D0.contestant] != 3)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 3)
{
int i;
for (i = 0; i < 4; i++)
{
- if (shared192D0.turnOrder[shared192D0.contestant] + 1 == shared192D0.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] + 1 == eContestAppealResults.turnOrder[i])
{
if (CanUnnerveContestant(i))
{
@@ -368,9 +368,9 @@ static void ContestEffect_MakeFollowingMonNervous(void)
}
}
}
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_UNNERVE_ATTEMPT);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_UNNERVE_ATTEMPT);
if (!hitAny)
- SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
// Makes all POKéMON after the user nervous.
@@ -387,7 +387,7 @@ static void ContestEffect_MakeFollowingMonsNervous(void)
memset(contestantIds, 0xFF, ARRAY_COUNT(contestantIds));
for (i = 0, numAfter = 0; i < 4; i++)
{
- if (shared192D0.turnOrder[shared192D0.contestant] < shared192D0.turnOrder[i] &&
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] < eContestAppealResults.turnOrder[i] &&
!sContestantStatus[i].nervous && !Contest_IsMonsTurnDisabled(i))
contestantIds[numAfter++] = i;
}
@@ -414,7 +414,7 @@ static void ContestEffect_MakeFollowingMonsNervous(void)
}
for (i = 0; i < 4; i++)
{
- if (sContestantStatus[i].hasJudgesAttention && sub_80B214C(i))
+ if (sContestantStatus[i].hasJudgesAttention && IsContestantAllowedToCombo(i))
oddsMod[i] = gComboStarterLookupTable[gContestMoves[sContestantStatus[i].prevMove].comboStarterId] * 10;
else
oddsMod[i] = 0;
@@ -441,12 +441,12 @@ static void ContestEffect_MakeFollowingMonsNervous(void)
SetContestantEffectStringID(contestantIds[i], CONTEST_STRING_UNAFFECTED);
numUnnerved++;
}
- shared192D0.unnervedPokes[contestantIds[i]] = 1;
+ eContestAppealResults.unnervedPokes[contestantIds[i]] = 1;
}
}
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_UNNERVE_WAITING);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_UNNERVE_WAITING);
if (numUnnerved == 0)
- SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
// Worsens the condition of those that made appeals.
@@ -457,7 +457,7 @@ static void ContestEffect_WorsenConditionOfPrevMons(void)
for (i = 0; i < 4; i++)
{
- if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i] &&
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i] &&
sContestantStatus[i].condition > 0 &&
CanUnnerveContestant(i))
{
@@ -468,9 +468,9 @@ static void ContestEffect_WorsenConditionOfPrevMons(void)
}
}
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_TAUNT_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_TAUNT_WELL);
if (numHit == 0)
- SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_IGNORED);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_IGNORED);
}
// Badly startles POKéMON in good condition.
@@ -481,42 +481,42 @@ static void ContestEffect_BadlyStartlesMonsInGoodCondition(void)
for (i = 0; i < 4; i++)
{
- if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i])
{
if (sContestantStatus[i].condition > 0)
- shared192D0.jam = 40;
+ eContestAppealResults.jam = 40;
else
- shared192D0.jam = 10;
- shared192D0.jamQueue[0] = i;
- shared192D0.jamQueue[1] = 0xFF;
+ eContestAppealResults.jam = 10;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
if (WasAtLeastOneOpponentJammed())
numHit++;
}
}
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_JAM_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_JAM_WELL);
if (numHit == 0)
- SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_IGNORED);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_IGNORED);
}
// The appeal works great if performed first.
static void ContestEffect_BetterIfFirst(void)
{
- if (gContestantTurnOrder[shared192D0.contestant] == 0)
+ if (gContestantTurnOrder[eContestAppealResults.contestant] == 0)
{
- u16 move = sContestantStatus[shared192D0.contestant].currMove;
- sContestantStatus[shared192D0.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_HUSTLE_STANDOUT);
+ u16 move = sContestantStatus[eContestAppealResults.contestant].currMove;
+ sContestantStatus[eContestAppealResults.contestant].appeal += 2 * gContestEffects[gContestMoves[move].effect].appeal;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_HUSTLE_STANDOUT);
}
}
// The appeal works great if performed last.
static void ContestEffect_BetterIfLast(void)
{
- if (gContestantTurnOrder[shared192D0.contestant] == 3)
+ if (gContestantTurnOrder[eContestAppealResults.contestant] == 3)
{
- u16 move = sContestantStatus[shared192D0.contestant].currMove;
- sContestantStatus[shared192D0.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_WORK_HARD_UNNOTICED);
+ u16 move = sContestantStatus[eContestAppealResults.contestant].currMove;
+ sContestantStatus[eContestAppealResults.contestant].appeal += 2 * gContestEffects[gContestMoves[move].effect].appeal;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_HARD_UNNOTICED);
}
}
@@ -528,19 +528,19 @@ static void ContestEffect_AppealAsGoodAsPrevOnes(void)
for (i = 0, appealSum = 0; i < 4; i++)
{
- if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i])
- appealSum += sContestantStatus[i].appeal2;
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i])
+ appealSum += sContestantStatus[i].appeal;
}
if (appealSum < 0)
appealSum = 0;
- if (shared192D0.turnOrder[shared192D0.contestant] == 0 || appealSum == 0)
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_WELL);
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] == 0 || appealSum == 0)
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_WELL);
else
{
- sContestantStatus[shared192D0.contestant].appeal2 += appealSum / 2;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_WORK_BEFORE);
+ sContestantStatus[eContestAppealResults.contestant].appeal += appealSum / 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_BEFORE);
}
- sContestantStatus[shared192D0.contestant].appeal2 = RoundTowardsZero(sContestantStatus[shared192D0.contestant].appeal2);
+ sContestantStatus[eContestAppealResults.contestant].appeal = RoundTowardsZero(sContestantStatus[eContestAppealResults.contestant].appeal);
}
// Makes the appeal as good as the one before it.
@@ -548,40 +548,40 @@ static void ContestEffect_AppealAsGoodAsPrevOne(void)
{
s16 appeal = 0;
- if (shared192D0.turnOrder[shared192D0.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
int i;
for (i = 0; i < 4; i++)
{
- if (shared192D0.turnOrder[shared192D0.contestant] - 1 == shared192D0.turnOrder[i])
- appeal = sContestantStatus[i].appeal2;
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i])
+ appeal = sContestantStatus[i].appeal;
}
}
- if (shared192D0.turnOrder[shared192D0.contestant] == 0 || appeal <= 0)
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_WELL2);
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] == 0 || appeal <= 0)
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_WELL2);
else
{
- sContestantStatus[shared192D0.contestant].appeal2 += appeal;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_WORK_PRECEDING);
+ sContestantStatus[eContestAppealResults.contestant].appeal += appeal;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_PRECEDING);
}
}
// The appeal works better the later it is performed.
static void ContestEffect_BetterWhenLater(void)
{
- u8 whichTurn = shared192D0.turnOrder[shared192D0.contestant];
+ u8 whichTurn = eContestAppealResults.turnOrder[eContestAppealResults.contestant];
if (whichTurn == 0)
- sContestantStatus[shared192D0.contestant].appeal2 = 10;
+ sContestantStatus[eContestAppealResults.contestant].appeal = 10;
else
- sContestantStatus[shared192D0.contestant].appeal2 = 20 * whichTurn;
+ sContestantStatus[eContestAppealResults.contestant].appeal = 20 * whichTurn;
if (whichTurn == 0)
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_SHOWN_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_SHOWN_WELL);
else if (whichTurn == 1)
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL);
else if (whichTurn == 2)
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL);
else
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY);
}
// The appeal's quality varies depending on its timing.
@@ -593,31 +593,31 @@ static void ContestEffect_QualityDependsOnTiming(void)
if (rval < 3)
{
appeal = 10;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL);
} else if (rval < 6)
{
appeal = 20;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2);
} else if (rval < 8)
{
appeal = 40;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2);
} else if (rval < 9)
{
appeal = 60;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_VERY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_VERY_WELL);
}
else
{
appeal = 80;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2);
}
- sContestantStatus[shared192D0.contestant].appeal2 = appeal;
+ sContestantStatus[eContestAppealResults.contestant].appeal = appeal;
}
static void ContestEffect_BetterIfSameType(void)
{
- s8 turnOrder = shared192D0.turnOrder[shared192D0.contestant];
+ s8 turnOrder = eContestAppealResults.turnOrder[eContestAppealResults.contestant];
s8 i = turnOrder - 1, j;
u16 move;
@@ -628,7 +628,7 @@ static void ContestEffect_BetterIfSameType(void)
{
for (j = 0; j < 4; j++)
{
- if (shared192D0.turnOrder[j] == i)
+ if (eContestAppealResults.turnOrder[j] == i)
break;
}
if (sContestantStatus[j].noMoreTurns || sContestantStatus[j].nervous || sContestantStatus[j].numTurnsSkipped)
@@ -642,29 +642,29 @@ static void ContestEffect_BetterIfSameType(void)
}
}
- move = sContestantStatus[shared192D0.contestant].currMove;
+ move = sContestantStatus[eContestAppealResults.contestant].currMove;
if (gContestMoves[move].contestCategory == gContestMoves[sContestantStatus[j].currMove].contestCategory)
{
- sContestantStatus[shared192D0.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_SAME_TYPE_GOOD);
+ sContestantStatus[eContestAppealResults.contestant].appeal += gContestEffects[gContestMoves[move].effect].appeal * 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SAME_TYPE_GOOD);
}
}
// Works well if different in type than the one before.
static void ContestEffect_BetterIfDiffType(void)
{
- if (shared192D0.turnOrder[shared192D0.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
- u16 move = sContestantStatus[shared192D0.contestant].currMove;
+ u16 move = sContestantStatus[eContestAppealResults.contestant].currMove;
int i;
for (i = 0; i < 4; i++)
{
- if (shared192D0.turnOrder[shared192D0.contestant] - 1 == shared192D0.turnOrder[i] &&
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i] &&
gContestMoves[move].contestCategory != gContestMoves[sContestantStatus[i].currMove].contestCategory)
{
- sContestantStatus[shared192D0.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_DIFF_TYPE_GOOD);
+ sContestantStatus[eContestAppealResults.contestant].appeal += gContestEffects[gContestMoves[move].effect].appeal * 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_DIFF_TYPE_GOOD);
break;
}
}
@@ -674,23 +674,23 @@ static void ContestEffect_BetterIfDiffType(void)
// Affected by how well the appeal in front goes.
static void ContestEffect_AffectedByPrevAppeal(void)
{
- if (shared192D0.turnOrder[shared192D0.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
int i;
for (i = 0; i < 4; i++)
{
- if (shared192D0.turnOrder[shared192D0.contestant] - 1 == shared192D0.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i])
{
- if (sContestantStatus[shared192D0.contestant].appeal2 > sContestantStatus[i].appeal2)
+ if (sContestantStatus[eContestAppealResults.contestant].appeal > sContestantStatus[i].appeal)
{
- sContestantStatus[shared192D0.contestant].appeal2 *= 2;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_STOOD_OUT_AS_MUCH);
+ sContestantStatus[eContestAppealResults.contestant].appeal *= 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_STOOD_OUT_AS_MUCH);
}
- else if (sContestantStatus[shared192D0.contestant].appeal2 < sContestantStatus[i].appeal2)
+ else if (sContestantStatus[eContestAppealResults.contestant].appeal < sContestantStatus[i].appeal)
{
- sContestantStatus[shared192D0.contestant].appeal2 = 0;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_NOT_AS_WELL);
+ sContestantStatus[eContestAppealResults.contestant].appeal = 0;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NOT_AS_WELL);
}
}
}
@@ -700,24 +700,24 @@ static void ContestEffect_AffectedByPrevAppeal(void)
// Ups the user's condition. Helps prevent nervousness.
static void ContestEffect_ImproveConditionPreventNervousness(void)
{
- if (sContestantStatus[shared192D0.contestant].condition < 30)
+ if (sContestantStatus[eContestAppealResults.contestant].condition < 30)
{
- sContestantStatus[shared192D0.contestant].condition += 10;
- sContestantStatus[shared192D0.contestant].conditionMod = 1;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_CONDITION_ROSE);
+ sContestantStatus[eContestAppealResults.contestant].condition += 10;
+ sContestantStatus[eContestAppealResults.contestant].conditionMod = 1;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_CONDITION_ROSE);
}
else
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_NO_CONDITION_IMPROVE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NO_CONDITION_IMPROVE);
}
// The appeal works well if the user's condition is good.
static void ContestEffect_BetterWithGoodCondition(void)
{
- sContestantStatus[shared192D0.contestant].appealTripleCondition = TRUE;
- if (sContestantStatus[shared192D0.contestant].condition != 0)
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_HOT_STATUS);
+ sContestantStatus[eContestAppealResults.contestant].appealTripleCondition = TRUE;
+ if (sContestantStatus[eContestAppealResults.contestant].condition != 0)
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_HOT_STATUS);
else
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL);
}
// The next appeal can be made earlier next turn.
@@ -732,13 +732,13 @@ static void ContestEffect_NextAppealEarlier(void)
for (i = 0; i < 4; i++)
turnOrder[i] = sContestantStatus[i].nextTurnOrder;
- turnOrder[shared192D0.contestant] = 0xFF;
+ turnOrder[eContestAppealResults.contestant] = 0xFF;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
- if (j != shared192D0.contestant &&
+ if (j != eContestAppealResults.contestant &&
i == turnOrder[j] &&
turnOrder[j] == sContestantStatus[j].nextTurnOrder)
{
@@ -750,15 +750,15 @@ static void ContestEffect_NextAppealEarlier(void)
break;
}
- turnOrder[shared192D0.contestant] = 0;
- sContestantStatus[shared192D0.contestant].turnOrderMod = 1;
+ turnOrder[eContestAppealResults.contestant] = 0;
+ sContestantStatus[eContestAppealResults.contestant].turnOrderMod = 1;
for (i = 0; i < 4; i++)
{
sContestantStatus[i].nextTurnOrder = turnOrder[i];
}
- sContestantStatus[shared192D0.contestant].turnOrderModAction = 1;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_MOVE_UP_LINE);
+ sContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 1;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MOVE_UP_LINE);
}
}
@@ -774,13 +774,13 @@ static void ContestEffect_NextAppealLater(void)
for (i = 0; i < 4; i++)
turnOrder[i] = sContestantStatus[i].nextTurnOrder;
- turnOrder[shared192D0.contestant] = 0xFF;
+ turnOrder[eContestAppealResults.contestant] = 0xFF;
for (i = 3; i > -1; i--)
{
for (j = 0; j < 4; j++)
{
- if (j != shared192D0.contestant &&
+ if (j != eContestAppealResults.contestant &&
i == turnOrder[j] &&
turnOrder[j] == sContestantStatus[j].nextTurnOrder)
{
@@ -792,15 +792,15 @@ static void ContestEffect_NextAppealLater(void)
break;
}
- turnOrder[shared192D0.contestant] = 3;
- sContestantStatus[shared192D0.contestant].turnOrderMod = 1;
+ turnOrder[eContestAppealResults.contestant] = 3;
+ sContestantStatus[eContestAppealResults.contestant].turnOrderMod = 1;
for (i = 0; i < 4; i++)
{
sContestantStatus[i].nextTurnOrder = turnOrder[i];
}
- sContestantStatus[shared192D0.contestant].turnOrderModAction = 2;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_MOVE_BACK_LINE);
+ sContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MOVE_BACK_LINE);
}
}
@@ -851,17 +851,17 @@ static void ContestEffect_ScrambleNextTurnOrder(void)
sContestantStatus[i].nextTurnOrder = turnOrder[i];
sContestantStatus[i].turnOrderMod = 2;
}
- sContestantStatus[shared192D0.contestant].turnOrderModAction = 3;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_SCRAMBLE_ORDER);
+ sContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 3;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SCRAMBLE_ORDER);
}
}
// An appeal that excites the audience in any CONTEST.
static void ContestEffect_ExciteAudienceInAnyContest(void)
{
- if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory != gSpecialVar_ContestCategory)
+ if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory != gSpecialVar_ContestCategory)
{
- sContestantStatus[shared192D0.contestant].overrideCategoryExcitementMod = TRUE;
+ sContestantStatus[eContestAppealResults.contestant].overrideCategoryExcitementMod = TRUE;
}
}
@@ -873,24 +873,24 @@ static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void)
for (i = 0; i < 4; i++)
{
- if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i])
{
- if (sContestantStatus[i].appeal2 > 0)
+ if (sContestantStatus[i].appeal > 0)
{
- shared192D0.jam = sContestantStatus[i].appeal2 / 2;
- shared192D0.jam = RoundUp(shared192D0.jam);
+ eContestAppealResults.jam = sContestantStatus[i].appeal / 2;
+ eContestAppealResults.jam = RoundUp(eContestAppealResults.jam);
}
else
- shared192D0.jam = 10;
- shared192D0.jamQueue[0] = i;
- shared192D0.jamQueue[1] = 0xFF;
+ eContestAppealResults.jam = 10;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
if (WasAtLeastOneOpponentJammed())
numJammed++;
}
}
if (numJammed == 0)
- SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2);
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// The appeal works best the more the crowd is excited.
@@ -901,39 +901,39 @@ static void ContestEffect_BetterWhenAudienceExcited(void)
if (sContest.applauseLevel == 0)
{
appeal = 10;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL);
}
else if (sContest.applauseLevel == 1)
{
appeal = 20;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2);
}
else if (sContest.applauseLevel == 2)
{
appeal = 30;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2);
}
else if (sContest.applauseLevel == 3)
{
appeal = 50;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_VERY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_VERY_WELL);
}
else
{
appeal = 60;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2);
}
- sContestantStatus[shared192D0.contestant].appeal2 = appeal;
+ sContestantStatus[eContestAppealResults.contestant].appeal = appeal;
}
// Temporarily stops the crowd from growing excited.
static void ContestEffect_DontExciteAudience(void)
{
- if (!shared19328.excitementFrozen)
+ if (!eContestExcitement.excitementFrozen)
{
- shared19328.excitementFrozen = TRUE;
- shared19328.excitementFreezer = shared192D0.contestant;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTRACTED_ATTENTION);
+ eContestExcitement.excitementFrozen = TRUE;
+ eContestExcitement.excitementFreezer = eContestAppealResults.contestant;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTRACTED_ATTENTION);
}
}
@@ -944,26 +944,26 @@ static void JamByMoveCategory(u8 category)
for (i = 0; i < 4; i++)
{
- if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i])
{
if (category == gContestMoves[sContestantStatus[i].currMove].contestCategory)
- shared192D0.jam = 40;
+ eContestAppealResults.jam = 40;
else
- shared192D0.jam = 10;
- shared192D0.jamQueue[0] = i;
- shared192D0.jamQueue[1] = 0xFF;
+ eContestAppealResults.jam = 10;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
if (WasAtLeastOneOpponentJammed())
numJammed++;
}
}
if (numJammed == 0)
- SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
static bool8 CanUnnerveContestant(u8 i)
{
- shared192D0.unnervedPokes[i] = 1;
+ eContestAppealResults.unnervedPokes[i] = 1;
if (sContestantStatus[i].immune)
{
SetContestantEffectStringID(i, CONTEST_STRING_AVOID_SEEING);
@@ -988,32 +988,32 @@ static bool8 WasAtLeastOneOpponentJammed(void)
s16 jamBuffer[4] = {0};
int i;
- for (i = 0; shared192D0.jamQueue[i] != 0xFF; i++)
+ for (i = 0; eContestAppealResults.jamQueue[i] != 0xFF; i++)
{
- u8 contestant = shared192D0.jamQueue[i];
+ u8 contestant = eContestAppealResults.jamQueue[i];
if (CanUnnerveContestant(contestant))
{
- shared192D0.jam2 = shared192D0.jam;
+ eContestAppealResults.jam2 = eContestAppealResults.jam;
if (sContestantStatus[contestant].moreEasilyStartled)
- shared192D0.jam2 *= 2;
+ eContestAppealResults.jam2 *= 2;
if (sContestantStatus[contestant].resistant)
{
- shared192D0.jam2 = 10;
+ eContestAppealResults.jam2 = 10;
SetContestantEffectStringID(contestant, CONTEST_STRING_LITTLE_DISTRACTED);
}
else
{
- shared192D0.jam2 -= sContestantStatus[contestant].jamReduction;
- if (shared192D0.jam2 <= 0)
+ eContestAppealResults.jam2 -= sContestantStatus[contestant].jamReduction;
+ if (eContestAppealResults.jam2 <= 0)
{
- shared192D0.jam2 = 0;
+ eContestAppealResults.jam2 = 0;
SetContestantEffectStringID(contestant, CONTEST_STRING_NOT_FAZED);
}
else
{
- JamContestant(contestant, shared192D0.jam2);
- SetStartledString(contestant, shared192D0.jam2);
- jamBuffer[contestant] = shared192D0.jam2;
+ JamContestant(contestant, eContestAppealResults.jam2);
+ SetStartledString(contestant, eContestAppealResults.jam2);
+ jamBuffer[contestant] = eContestAppealResults.jam2;
}
}
}
@@ -1029,7 +1029,7 @@ static bool8 WasAtLeastOneOpponentJammed(void)
static void JamContestant(u8 i, u8 jam)
{
- sContestantStatus[i].appeal2 -= jam;
+ sContestantStatus[i].appeal -= jam;
sContestantStatus[i].jam += jam;
}
diff --git a/src/contest_link.c b/src/contest_link.c
index 5c6cfe24e..dadbeac40 100644
--- a/src/contest_link.c
+++ b/src/contest_link.c
@@ -558,28 +558,28 @@ void sub_80C8C80(u8 taskId)
case 3:
if (IsLinkTaskFinished())
{
- SendBlockToAllOpponents(&shared192D0, sizeof shared192D0);
+ SendBlockToAllOpponents(&eContestAppealResults, sizeof eContestAppealResults);
gTasks[taskId].data[0]++;
}
break;
case 4:
if (HaveAllPlayersReceivedBlock())
{
- memcpy(&shared192D0, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof shared192D0);
+ memcpy(&eContestAppealResults, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof eContestAppealResults);
gTasks[taskId].data[0]++;
}
break;
case 6:
if (IsLinkTaskFinished())
{
- SendBlockToAllOpponents(&shared19328, sizeof shared19328);
+ SendBlockToAllOpponents(&eContestExcitement, sizeof eContestExcitement);
gTasks[taskId].data[0]++;
}
break;
case 7:
if (HaveAllPlayersReceivedBlock())
{
- memcpy(&shared19328, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof shared19328);
+ memcpy(&eContestExcitement, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof eContestExcitement);
gTasks[taskId].data[0]++;
}
break;
diff --git a/src/debug/nakamura_debug_menu.c b/src/debug/nakamura_debug_menu.c
index e8f40f08e..addedb088 100644
--- a/src/debug/nakamura_debug_menu.c
+++ b/src/debug/nakamura_debug_menu.c
@@ -851,7 +851,7 @@ static bool8 FishingPoints(void)
ConvertIntToDecimalStringN(gStringVar1, FeebasDebug_GetTrueNumberOfWaterTilesInMapThird(2), STR_CONV_MODE_RIGHT_ALIGN, 5);
Menu_PrintText(gStringVar1, 11, 7);
- FeebasSeedRng(gSaveBlock1.easyChatPairs[0].unk2);
+ FeebasSeedRng(gSaveBlock1.easyChatPairs[0].excitementAppealBonus);
nWaterTiles = FishingPoints_CountFishingTilesInMapThird(0) + FishingPoints_CountFishingTilesInMapThird(1) + FishingPoints_CountFishingTilesInMapThird(2);
nFeebas = 0;
diff --git a/src/debug/start_menu_debug.c b/src/debug/start_menu_debug.c
index edc953c7e..4f4eb5a4a 100644
--- a/src/debug/start_menu_debug.c
+++ b/src/debug/start_menu_debug.c
@@ -2590,7 +2590,7 @@ void DebugMenu_8078E68(u8 a0, u8 * a1, u32 a2)
struct GameTimeDebugMenuStruct {
u16 totalPoints;
- u16 unk2;
+ u16 excitementAppealBonus;
u8 round1Points;
u8 unk5;
};
@@ -2669,7 +2669,7 @@ void DebugMenu_8078F68(u8 taskId)
else
{
const struct GameTimeDebugMenuStruct *r2 = gUnknown_Debug_839C5F4 + data[0];
- if (DebugMenu_8077DD8(data + r2->unk5, r2->totalPoints, r2->unk2, gMain.newAndRepeatedKeys) == TRUE)
+ if (DebugMenu_8077DD8(data + r2->unk5, r2->totalPoints, r2->excitementAppealBonus, gMain.newAndRepeatedKeys) == TRUE)
DebugMenu_8078EB0(data);
}
}
diff --git a/src/debug/taya_debug_window.c b/src/debug/taya_debug_window.c
index 9a997a566..1305bd819 100644
--- a/src/debug/taya_debug_window.c
+++ b/src/debug/taya_debug_window.c
@@ -221,7 +221,7 @@ bool8 TayaDebugMenu_Trend(void)
*r4++ = CHAR_SPACE;
r4 = ConvertIntToDecimalStringN(r4, pair->unk0_7, STR_CONV_MODE_RIGHT_ALIGN, 3);
*r4++ = CHAR_SPACE;
- ConvertIntToDecimalStringN(r4, pair->unk2, STR_CONV_MODE_RIGHT_ALIGN, 5);
+ ConvertIntToDecimalStringN(r4, pair->excitementAppealBonus, STR_CONV_MODE_RIGHT_ALIGN, 5);
Menu_PrintText(sp00, 1, 2 * i + 1);
pair++;
}
diff --git a/src/debug/watanabe_debug_menu.c b/src/debug/watanabe_debug_menu.c
index f0bb0078c..405f481c5 100644
--- a/src/debug/watanabe_debug_menu.c
+++ b/src/debug/watanabe_debug_menu.c
@@ -54,7 +54,7 @@ struct WatanabeEwram17000 {
u8 unk1_0:4;
u8 unk1_4:1;
u8 unk1_5:3;
- u8 unk2;
+ u8 excitementAppealBonus;
u8 unk3;
u8 fill4[5];
u8 unk9;
@@ -75,7 +75,7 @@ struct WatanabeEwram18000 {
struct WatanabeEwram18000_2 {
u16 totalPoints;
- u8 unk2;
+ u8 excitementAppealBonus;
u8 unk3;
u8 round1Points;
u8 unk5;
@@ -1362,7 +1362,7 @@ void debug_80C4AC4(u8 taskId)
PlaySE(SE_SELECT);
gTrainerBattleOpponent = SECRET_BASE_OPPONENT;
eWatanabe17000.unk1_4 = 0;
- eWatanabe17000.unk2 = 0xAC;
+ eWatanabe17000.excitementAppealBonus = 0xAC;
eWatanabe17000.unk3 = 0xFF;
eWatanabe17000.unk9 = 0;
eWatanabe17000.unkA = 0;
@@ -2569,7 +2569,7 @@ void InitSeePokemonGraphics(void)
CreateTask(debug_80C6B00, 0);
gUnknown_Debug_2038A20 = &eWatanabe18000_2;
gUnknown_Debug_2038A20->totalPoints = 0x115;
- gUnknown_Debug_2038A20->unk2 = 0;
+ gUnknown_Debug_2038A20->excitementAppealBonus = 0;
gUnknown_Debug_2038A20->unk3 = 0;
gUnknown_Debug_2038A20->unk5 = 0;
gUnknown_Debug_2038A20->unk7 = 0;
@@ -2673,9 +2673,9 @@ void debug_80C6CB8(u8 taskId)
DecompressPicFromTable_2(gMonFrontPicTable + gUnknown_Debug_2038A20->totalPoints, gMonFrontPicCoords[gUnknown_Debug_2038A20->totalPoints].coords, gMonFrontPicCoords[gUnknown_Debug_2038A20->totalPoints].y_offset, gMonSpriteGfx_Sprite_ptr[0], gMonSpriteGfx_Sprite_ptr[1], gUnknown_Debug_2038A20->totalPoints);
LoadCompressedObjectPalette(gMonPaletteTable + gUnknown_Debug_2038A20->totalPoints);
GetMonSpriteTemplate_803C56C(gUnknown_Debug_2038A20->totalPoints, 1);
- gUnknown_Debug_2038A20->unk2 = CreateSprite(&gUnknown_02024E8C, 0x28, 0x28, 0);
- gSprites[gUnknown_Debug_2038A20->unk2].callback = debug_69;
- gSprites[gUnknown_Debug_2038A20->unk2].oam.priority = 0;
+ gUnknown_Debug_2038A20->excitementAppealBonus = CreateSprite(&gUnknown_02024E8C, 0x28, 0x28, 0);
+ gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].callback = debug_69;
+ gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.priority = 0;
DecompressPicFromTable_2(gMonBackPicTable + gUnknown_Debug_2038A20->totalPoints, gMonBackPicCoords[gUnknown_Debug_2038A20->totalPoints].coords, gMonBackPicCoords[gUnknown_Debug_2038A20->totalPoints].y_offset, gMonSpriteGfx_Sprite_ptr[0], gMonSpriteGfx_Sprite_ptr[2], gUnknown_Debug_2038A20->totalPoints);
LoadCompressedObjectPalette(gMonPaletteTable + gUnknown_Debug_2038A20->totalPoints);
@@ -2696,7 +2696,7 @@ void debug_80C6CB8(u8 taskId)
debug_80C3800(gUnknown_Debug_2038A20->totalPoints, 17, 3);
debug_80C376C(gUnknown_Debug_2038A20->totalPoints, 26, 5);
- gUnknown_Debug_2038A20->unk6 = gSprites[gUnknown_Debug_2038A20->unk2].oam.paletteNum;
+ gUnknown_Debug_2038A20->unk6 = gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.paletteNum;
CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferUnfaded + 0x80, 0x20);
CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferFaded + 0x80, 0x20);
@@ -3088,8 +3088,8 @@ NAKED void debug_80C6FA8(u8 taskId)
void debug_80C71FC(u8 taskId)
{
- FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->unk2].oam.paletteNum));
- DestroySprite(gSprites + gUnknown_Debug_2038A20->unk2);
+ FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.paletteNum));
+ DestroySprite(gSprites + gUnknown_Debug_2038A20->excitementAppealBonus);
FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->unk3].oam.paletteNum));
DestroySprite(gSprites + gUnknown_Debug_2038A20->unk3);
sub_809D510(gSprites + gUnknown_Debug_2038A20->round1Points);
@@ -3238,7 +3238,7 @@ void InitSeeTrainers(void)
CreateTask(debug_80C777C, 0);
gUnknown_Debug_2038A20 = &eWatanabe18000_2;
gUnknown_Debug_2038A20->totalPoints = 0;
- gUnknown_Debug_2038A20->unk2 = 0;
+ gUnknown_Debug_2038A20->excitementAppealBonus = 0;
gUnknown_Debug_2038A20->unk3 = 0;
gUnknown_Debug_2038A20->unk5 = 0;
gUnknown_Debug_2038A20->unk7 = 0;
@@ -3300,13 +3300,13 @@ void debug_80C7934(u8 taskId)
DecompressPicFromTable_2(gTrainerFrontPicTable + gUnknown_Debug_2038A20->totalPoints, gTrainerFrontPicCoords[gUnknown_Debug_2038A20->totalPoints].coords, gTrainerFrontPicCoords[gUnknown_Debug_2038A20->totalPoints].y_offset, gMonSpriteGfx_Sprite_ptr[0], gMonSpriteGfx_Sprite_ptr[1], gUnknown_Debug_2038A20->totalPoints);
LoadCompressedObjectPalette(gTrainerFrontPicPaletteTable + gUnknown_Debug_2038A20->totalPoints);
GetMonSpriteTemplate_803C5A0(gUnknown_Debug_2038A20->totalPoints, 1);
- gUnknown_Debug_2038A20->unk2 = CreateSprite(&gUnknown_02024E8C, 0x28, 0x28, 0);
- gSprites[gUnknown_Debug_2038A20->unk2].callback = debug_69;
- gSprites[gUnknown_Debug_2038A20->unk2].oam.priority = 0;
+ gUnknown_Debug_2038A20->excitementAppealBonus = CreateSprite(&gUnknown_02024E8C, 0x28, 0x28, 0);
+ gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].callback = debug_69;
+ gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.priority = 0;
debug_80C376C(gUnknown_Debug_2038A20->totalPoints, 26, 5);
- gUnknown_Debug_2038A20->unk6 = gSprites[gUnknown_Debug_2038A20->unk2].oam.paletteNum;
+ gUnknown_Debug_2038A20->unk6 = gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.paletteNum;
CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferUnfaded + 0x80, 0x20);
CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferFaded + 0x80, 0x20);
@@ -3679,8 +3679,8 @@ NAKED void debug_80C7B14(u8 taskId)
void debug_80C7D44(u8 taskId)
{
- FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->unk2].oam.paletteNum));
- DestroySprite(gSprites + gUnknown_Debug_2038A20->unk2);
+ FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.paletteNum));
+ DestroySprite(gSprites + gUnknown_Debug_2038A20->excitementAppealBonus);
FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->unk3].oam.paletteNum));
DestroySprite(gSprites + gUnknown_Debug_2038A20->unk3);
sub_809D510(gSprites + gUnknown_Debug_2038A20->round1Points);
diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c
index edfed2c9d..30421daba 100644
--- a/src/pokedex_cry_screen.c
+++ b/src/pokedex_cry_screen.c
@@ -234,7 +234,7 @@ u8 sub_8119E3C(struct CryRelatedStruct *cry, u8 arg1)
gUnknown_03005E98++;
break;
case 1:
- r7 = cry->unk2 << 11;
+ r7 = cry->excitementAppealBonus << 11;
r6 = (cry->paletteNo << 12) + ((unsigned)(cry->totalPoints << 18) >> 23);
for (i = 0; i < 7; i++)
{
diff --git a/src/region_map.c b/src/region_map.c
index 44f81d586..36895b056 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -1709,7 +1709,7 @@ void debug_sub_8110D84(void)
debug_sub_8110CCC();
break;
case 4:
- if (sFlyDataPtr->regionMap.unk16 != 0)
+ if (sFlyDataPtr->regionMap.completedCombo != 0)
{
m4aSongNumStart(SE_SELECT);
gSharedMem[0xA6E] = 1; // TODO: what is this?