summaryrefslogtreecommitdiff
path: root/src/contest.c
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2021-06-22 15:20:21 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2021-06-22 15:20:21 -0400
commit6e9821ca07a64ee09129038286aaba3eb1825946 (patch)
tree903b8f2baba6870cbf5099b8ef5b5480e6e2b7ef /src/contest.c
parent54cda0308707ace7055cc8ea6f4e698e6324f911 (diff)
Split contest code
Diffstat (limited to 'src/contest.c')
-rw-r--r--src/contest.c3805
1 files changed, 87 insertions, 3718 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