summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_anim.c8
-rw-r--r--src/battle_anim_dark.c2
-rwxr-xr-xsrc/battle_anim_effects_3.c18
-rw-r--r--src/battle_anim_mons.c30
-rw-r--r--src/battle_anim_sound_tasks.c6
-rw-r--r--src/battle_anim_utility_funcs.c6
-rw-r--r--src/battle_controller_player.c4
-rw-r--r--src/battle_dome.c2
-rw-r--r--src/battle_gfx_sfx_util.c8
-rw-r--r--src/battle_main.c14
-rw-r--r--src/battle_setup.c2
-rw-r--r--src/battle_tower.c4
-rw-r--r--src/berry_blender.c16
-rwxr-xr-xsrc/berry_crush.c30
-rw-r--r--src/cable_club.c30
-rw-r--r--src/contest.c3361
-rw-r--r--src/contest_ai.c129
-rw-r--r--src/contest_effect.c474
-rw-r--r--src/contest_link.c331
-rw-r--r--src/contest_link_util.c199
-rw-r--r--src/contest_util.c624
-rw-r--r--src/data/contest_opponents.h96
-rw-r--r--src/dodrio_berry_picking.c8
-rwxr-xr-xsrc/ereader_screen.c4
-rw-r--r--src/field_screen_effect.c6
-rw-r--r--src/field_specials.c4
-rw-r--r--src/frontier_util.c2
-rw-r--r--src/graphics.c4
-rw-r--r--src/link.c156
-rw-r--r--src/link_rfu_2.c109
-rw-r--r--src/mystery_event_menu.c4
-rw-r--r--src/mystery_gift.c4
-rw-r--r--src/overworld.c2
-rw-r--r--src/pokemon.c4
-rwxr-xr-xsrc/pokemon_jump.c2
-rw-r--r--src/post_battle_event_funcs.c2
-rw-r--r--src/record_mixing.c6
-rw-r--r--src/save.c6
-rw-r--r--src/scrcmd.c4
-rwxr-xr-xsrc/script_pokemon_util.c224
-rwxr-xr-xsrc/script_pokemon_util_80F87D8.c725
-rw-r--r--src/trade.c46
-rwxr-xr-xsrc/trainer_card.c4
-rw-r--r--src/tv.c739
-rw-r--r--src/union_room.c24
-rw-r--r--src/union_room_battle.c4
-rwxr-xr-xsrc/union_room_chat.c6
47 files changed, 3837 insertions, 3656 deletions
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 32a917cb4..874ac935b 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -1849,8 +1849,8 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
}
else
{
- for (i = 0; i < 4; i++)
- gAnimBattlerSpecies[i] = gContestResources->field_18->species;
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ gAnimBattlerSpecies[i] = gContestResources->moveAnim->species;
}
if (!isMoveAnim)
@@ -2311,7 +2311,7 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
battlerSpriteId = gBattlerSpriteIds[battlerId];
gBattle_BG1_X = -(gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x) + 0x20;
- if (IsContest() && IsSpeciesNotUnown(gContestResources->field_18->species))
+ if (IsContest() && IsSpeciesNotUnown(gContestResources->moveAnim->species))
gBattle_BG1_X--;
gBattle_BG1_Y = -(gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y) + 0x20;
@@ -2369,7 +2369,7 @@ static void sub_80A46A0(void)
struct BattleAnimBgData animBg;
u16 *ptr;
- if (IsSpeciesNotUnown(gContestResources->field_18->species))
+ if (IsSpeciesNotUnown(gContestResources->moveAnim->species))
{
sub_80A6B30(&animBg);
ptr = animBg.bgTilemap;
diff --git a/src/battle_anim_dark.c b/src/battle_anim_dark.c
index dc3e8c83c..faa5884a5 100644
--- a/src/battle_anim_dark.c
+++ b/src/battle_anim_dark.c
@@ -849,7 +849,7 @@ void AnimTask_MetallicShine(u8 taskId)
if (IsContest())
{
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
}
else
{
diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c
index fd68bbd37..afdc90049 100755
--- a/src/battle_anim_effects_3.c
+++ b/src/battle_anim_effects_3.c
@@ -2297,7 +2297,7 @@ void AnimTask_TransformMon(u8 taskId)
LoadBgTiles(1, animBg.bgTiles, 0x800, animBg.tilesOffset);
if (IsContest())
{
- if (IsSpeciesNotUnown(gContestResources->field_18->species) != IsSpeciesNotUnown(gContestResources->field_18->unk2))
+ if (IsSpeciesNotUnown(gContestResources->moveAnim->species) != IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies))
{
bgTilemap = (u16 *)animBg.bgTilemap;
for (i = 0; i < 8; i++)
@@ -2319,7 +2319,7 @@ void AnimTask_TransformMon(u8 taskId)
}
}
- if (IsSpeciesNotUnown(gContestResources->field_18->unk2))
+ if (IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies))
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0;
else
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF694;
@@ -3196,10 +3196,10 @@ void AnimTask_RolePlaySilhouette(u8 taskId)
GetAnimBattlerSpriteId(ANIM_ATTACKER);
if (IsContest())
{
- isBackPic = 1;
- personality = gContestResources->field_18->unk10;
- otId = gContestResources->field_18->unkC;
- species = gContestResources->field_18->unk2;
+ isBackPic = TRUE;
+ personality = gContestResources->moveAnim->targetPersonality;
+ otId = gContestResources->moveAnim->otId;
+ species = gContestResources->moveAnim->targetSpecies;
xOffset = 20;
priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
}
@@ -5031,9 +5031,9 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId)
case 1:
if (IsContest())
{
- personality = gContestResources->field_18->unk8;
- otId = gContestResources->field_18->unkC;
- species = gContestResources->field_18->species;
+ personality = gContestResources->moveAnim->personality;
+ otId = gContestResources->moveAnim->otId;
+ species = gContestResources->moveAnim->species;
subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
isBackPic = 0;
x = -32;
diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c
index e5a866999..d9993ab95 100644
--- a/src/battle_anim_mons.c
+++ b/src/battle_anim_mons.c
@@ -141,10 +141,10 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
default:
if (IsContest())
{
- if (gContestResources->field_18->unk4_0)
- species = gContestResources->field_18->unk2;
+ if (gContestResources->moveAnim->hasTargetAnim)
+ species = gContestResources->moveAnim->targetSpecies;
else
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
}
else
{
@@ -189,10 +189,10 @@ u8 GetBattlerYDelta(u8 battlerId, u16 species)
{
if (IsContest())
{
- if (gContestResources->field_18->unk4_0)
- personality = gContestResources->field_18->unk10;
+ if (gContestResources->moveAnim->hasTargetAnim)
+ personality = gContestResources->moveAnim->targetPersonality;
else
- personality = gContestResources->field_18->unk8;
+ personality = gContestResources->moveAnim->personality;
}
else
{
@@ -306,10 +306,10 @@ u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType)
{
if (IsContest())
{
- if (gContestResources->field_18->unk4_0)
- species = gContestResources->field_18->unk2;
+ if (gContestResources->moveAnim->hasTargetAnim)
+ species = gContestResources->moveAnim->targetSpecies;
else
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
}
else
{
@@ -1851,7 +1851,7 @@ static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId)
{
if (IsContest())
{
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
return gMonBackPicCoords[species].y_offset;
}
else
@@ -2103,15 +2103,15 @@ s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr)
if (IsContest())
{
- if (gContestResources->field_18->unk4_0)
+ if (gContestResources->moveAnim->hasTargetAnim)
{
- species = gContestResources->field_18->unk2;
- personality = gContestResources->field_18->unk10;
+ species = gContestResources->moveAnim->targetSpecies;
+ personality = gContestResources->moveAnim->targetPersonality;
}
else
{
- species = gContestResources->field_18->species;
- personality = gContestResources->field_18->unk8;
+ species = gContestResources->moveAnim->species;
+ personality = gContestResources->moveAnim->personality;
}
if (species == SPECIES_UNOWN)
{
diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c
index 8efc987b8..71c81235a 100644
--- a/src/battle_anim_sound_tasks.c
+++ b/src/battle_anim_sound_tasks.c
@@ -134,7 +134,7 @@ void SoundTask_PlayCryHighPitch(u8 taskId)
if (IsContest())
{
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
else
DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task.
}
@@ -180,7 +180,7 @@ void SoundTask_PlayDoubleCry(u8 taskId)
if (IsContest())
{
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
else
DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task.
}
@@ -284,7 +284,7 @@ void SoundTask_PlayCryWithEcho(u8 taskId)
pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
if (IsContest())
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
else
species = gAnimBattlerSpecies[gBattleAnimAttacker];
diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c
index bca669cc2..ab2f42264 100644
--- a/src/battle_anim_utility_funcs.c
+++ b/src/battle_anim_utility_funcs.c
@@ -318,7 +318,7 @@ void AnimTask_DrawFallingWhiteLinesOnAttacker(u8 taskId)
if (IsContest())
{
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
}
else
{
@@ -440,7 +440,7 @@ static void sub_8116F04(u8 taskId)
if (IsContest())
{
- sAnimStatsChangeData->species = gContestResources->field_18->species;
+ sAnimStatsChangeData->species = gContestResources->moveAnim->species;
}
else
{
@@ -810,7 +810,7 @@ void sub_8117854(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5,
if (IsContest())
{
- species = gContestResources->field_18->species;
+ species = gContestResources->moveAnim->species;
}
else
{
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 1dd0914e4..08ce9f09c 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -886,9 +886,9 @@ void sub_80587B0(void)
if (IsLinkTaskFinished())
{
if (gWirelessCommType == 0)
- sub_800AC34();
+ SetCloseLinkCallback();
else
- sub_800ADF8();
+ SetLinkStandbyCallback();
gBattlerControllerFuncs[gActiveBattler] = sub_80586F8;
}
diff --git a/src/battle_dome.c b/src/battle_dome.c
index 151bfc927..3654d2ccf 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -29,7 +29,7 @@
#include "international_string_util.h"
#include "trainer_pokemon_sprites.h"
#include "scanline_effect.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "script_pokemon_util.h"
#include "graphics.h"
#include "constants/battle_dome.h"
#include "constants/frontier_util.h"
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index 54fc88f24..50a5f8ad5 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -916,14 +916,14 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform
if (IsContest())
{
position = 0;
- targetSpecies = gContestResources->field_18->unk2;
- personalityValue = gContestResources->field_18->unk8;
- otId = gContestResources->field_18->unkC;
+ targetSpecies = gContestResources->moveAnim->targetSpecies;
+ personalityValue = gContestResources->moveAnim->personality;
+ otId = gContestResources->moveAnim->otId;
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[targetSpecies],
gMonSpritesGfxPtr->sprites[0],
targetSpecies,
- gContestResources->field_18->unk10);
+ gContestResources->moveAnim->targetPersonality);
}
else
{
diff --git a/src/battle_main.c b/src/battle_main.c
index b8ebda9e4..0ea19dfaa 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -1484,9 +1484,9 @@ static void CB2_PreInitMultiBattle(void)
{
gBattleCommunication[MULTIUSE_STATE]++;
if (gWirelessCommType)
- sub_800ADF8();
+ SetLinkStandbyCallback();
else
- sub_800AC34();
+ SetCloseLinkCallback();
}
break;
case 3:
@@ -2368,7 +2368,7 @@ static void sub_8038F34(void)
case 6:
if (IsLinkTaskFinished() == TRUE)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
BattlePutTextOnWindow(gText_LinkStandby3, 0);
gBattleCommunication[MULTIUSE_STATE]++;
}
@@ -2382,7 +2382,7 @@ static void sub_8038F34(void)
break;
case 8:
if (!gWirelessCommType)
- sub_800AC34();
+ SetCloseLinkCallback();
gBattleCommunication[MULTIUSE_STATE]++;
break;
case 9:
@@ -2556,7 +2556,7 @@ static void sub_803939C(void)
HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
if (gMain.field_439_x4)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
BattlePutTextOnWindow(gText_LinkStandby3, 0);
}
gBattleCommunication[MULTIUSE_STATE]++;
@@ -2566,7 +2566,7 @@ static void sub_803939C(void)
if (--gBattleCommunication[1] == 0)
{
if (gMain.field_439_x4 && !gWirelessCommType)
- sub_800AC34();
+ SetCloseLinkCallback();
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -2605,7 +2605,7 @@ static void sub_803939C(void)
{
if (gMain.field_439_x4)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
BattlePutTextOnWindow(gText_LinkStandby3, 0);
}
gBattleCommunication[MULTIUSE_STATE]++;
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 36fce2081..0c0ef72d3 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -12,7 +12,7 @@
#include "fieldmap.h"
#include "random.h"
#include "starter_choose.h"
-#include "script_pokemon_80F8.h"
+#include "script_pokemon_util.h"
#include "palette.h"
#include "window.h"
#include "event_object_movement.h"
diff --git a/src/battle_tower.c b/src/battle_tower.c
index 8fcea1123..09c9f0416 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -2627,7 +2627,7 @@ static void LoadLinkMultiOpponentsData(void)
}
break;
case 4:
- sub_800AC34();
+ SetCloseLinkCallback();
gSpecialVar_Result = 5;
break;
case 5:
@@ -2644,7 +2644,7 @@ static void LoadLinkMultiOpponentsData(void)
static void sub_8164DCC(void)
{
if (gWirelessCommType != 0)
- sub_800AC34();
+ SetCloseLinkCallback();
}
static void SetMultiPartnerGfx(void)
diff --git a/src/berry_blender.c b/src/berry_blender.c
index de3cc6275..8d6f3a8fd 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -1230,7 +1230,7 @@ static void sub_8080018(void)
sBerryBlenderData->field_114 = 0;
Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
memcpy(gBlockSendBuffer, &sBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry));
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->framesToWait = 0;
break;
case 9:
@@ -1238,7 +1238,7 @@ static void sub_8080018(void)
{
ResetBlockReceivedFlags();
if (GetMultiplayerId() == 0)
- sub_800A4D8(4);
+ SendBlockRequest(4);
sBerryBlenderData->mainState++;
}
break;
@@ -1332,7 +1332,7 @@ static void sub_8080018(void)
sBerryBlenderData->mainState++;
break;
case 19:
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->mainState++;
break;
case 20:
@@ -2587,7 +2587,7 @@ static bool8 LinkPlayAgainHandleSaving(void)
switch (sBerryBlenderData->field_1A0)
{
case 0:
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->field_1A0 = 1;
sBerryBlenderData->framesToWait = 0;
break;
@@ -2606,7 +2606,7 @@ static bool8 LinkPlayAgainHandleSaving(void)
case 3:
if (++sBerryBlenderData->framesToWait == 10)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->field_1A0++;
}
break;
@@ -2682,7 +2682,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
break;
case 5:
Blender_PrintText(&sBerryBlenderData->textState, gText_SavingDontTurnOff2, 0);
- sub_800ADF8();
+ SetLinkStandbyCallback();
sBerryBlenderData->gameEndState++;
break;
case 6:
@@ -2702,7 +2702,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
break;
case 8:
sBerryBlenderData->gameEndState++;
- sub_800ADF8();
+ SetLinkStandbyCallback();
break;
case 9:
if (IsLinkTaskFinished())
@@ -2732,7 +2732,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
case 11:
if (++sBerryBlenderData->framesToWait > 30)
{
- sub_800AC34();
+ SetCloseLinkCallback();
sBerryBlenderData->gameEndState++;
}
break;
diff --git a/src/berry_crush.c b/src/berry_crush.c
index ff544a01d..654a3b4e3 100755
--- a/src/berry_crush.c
+++ b/src/berry_crush.c
@@ -1125,7 +1125,7 @@ int sub_802130C(void)
switch (var0->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
@@ -2027,7 +2027,7 @@ static u32 sub_8022CB0(struct BerryCrushGame *r4, u8 *r5)
r4->unkC = 3;
return 0;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
++r4->unkC;
return 0;
case 2:
@@ -2110,7 +2110,7 @@ static u32 sub_8022E5C(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
switch (r4->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (IsLinkTaskFinished())
@@ -2167,7 +2167,7 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2)
sub_8022BEC(3, 1, NULL);
return 0;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 2:
if (!IsLinkTaskFinished())
@@ -2213,7 +2213,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
{
case 0:
sub_80214A8(r4, &r4->unk138);
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
@@ -2233,7 +2233,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
return 0;
r4->unk138.unk38[r4->unk138.unk0] = NULL;
++r4->unk138.unk0;
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 4:
if (!IsLinkTaskFinished())
@@ -2247,7 +2247,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
break;
case 5:
sub_80216A8(r4, &r4->unk138);
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 6:
if (!IsLinkTaskFinished())
@@ -2295,7 +2295,7 @@ static u32 sub_80231B8(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
SetGpuReg(REG_OFFSET_BG3VOFS, 0);
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 3:
if (!IsLinkTaskFinished())
@@ -2323,7 +2323,7 @@ static u32 sub_80232EC(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
return 0;
// fallthrough
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 3:
if (!IsLinkTaskFinished())
@@ -2703,7 +2703,7 @@ static u32 sub_8023A30(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
case 4:
if (!sub_80218D4(r4, &r4->unk138))
return 0;
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
r4->unk10 = 0;
break;
case 5:
@@ -2737,7 +2737,7 @@ static u32 sub_8023BC0(struct BerryCrushGame *r5, u8 *r6)
case 2:
if (!sub_80218D4(r5, &r5->unk138))
return 0;
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
r5->unk10 = 0;
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
@@ -3005,7 +3005,7 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4)
r5->unkC = 0;
return 0;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 2:
if (!IsLinkTaskFinished())
@@ -3084,7 +3084,7 @@ static u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
switch (r4->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
@@ -3184,12 +3184,12 @@ static u32 sub_8024508(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1
switch (r5->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
return 0;
- sub_800AC34();
+ SetCloseLinkCallback();
break;
case 2:
if (gReceivedRemoteLinkPlayers != 0)
diff --git a/src/cable_club.c b/src/cable_club.c
index 15e468390..982bd9fd3 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -20,7 +20,7 @@
#include "union_room.h"
#include "mevent2.h"
#include "script.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "script_pokemon_util.h"
#include "sound.h"
#include "start_menu.h"
#include "string_util.h"
@@ -203,7 +203,7 @@ static void sub_80B2600(u8 taskId)
gTasks[taskId].data[0]++;
if (gTasks[taskId].data[0] == 10)
{
- sub_800A4D8(2);
+ SendBlockRequest(2);
DestroyTask(taskId);
}
}
@@ -357,7 +357,7 @@ static void Task_LinkupExchangeDataWithLeader(u8 taskId)
if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS
|| gSpecialVar_Result == LINKUP_WRONG_NUM_PLAYERS)
{
- sub_800AC34();
+ SetCloseLinkCallback();
HideFieldMessageBox();
gTasks[taskId].func = Task_StopLinkup;
}
@@ -392,7 +392,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
{
if (!Link_AnyPartnersPlayingRubyOrSapphire())
{
- sub_800AC34();
+ SetCloseLinkCallback();
HideFieldMessageBox();
gTasks[taskId].func = Task_StopLinkup;
}
@@ -405,7 +405,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
}
else if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS)
{
- sub_800AC34();
+ SetCloseLinkCallback();
HideFieldMessageBox();
gTasks[taskId].func = Task_StopLinkup;
}
@@ -426,7 +426,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
card->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES, NULL);
card->monSpecies[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL);
gTasks[taskId].func = Task_LinkupAwaitTrainerCardData;
- sub_800A4D8(2);
+ SendBlockRequest(2);
}
}
@@ -481,7 +481,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId)
{
// Unsuccessful battle tower linkup
*linkupStatus = LINKUP_FAILED_BATTLE_TOWER;
- sub_800AC34();
+ SetCloseLinkCallback();
gTasks[taskId].func = Task_StopLinkup;
}
else
@@ -503,7 +503,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId)
else
{
// Unsuccessful linkup
- sub_800AC34();
+ SetCloseLinkCallback();
gTasks[taskId].func = Task_StopLinkup;
}
}
@@ -686,7 +686,7 @@ static void Task_ValidateMixingGameLanguage(u8 taskId)
if (mixingForeignGames)
{
gSpecialVar_Result = LINKUP_FOREIGN_GAME;
- sub_800AD10();
+ SetCloseLinkCallbackHandleJP();
gTasks[taskId].tState = 1;
return;
}
@@ -856,7 +856,7 @@ static void Task_StartWiredCableClubBattle(u8 taskId)
task->tState++;
break;
case 3:
- sub_800AC34();
+ SetCloseLinkCallback();
task->tState++;
break;
case 4:
@@ -919,7 +919,7 @@ static void Task_StartWirelessCableClubBattle(u8 taskId)
tState = 5;
break;
case 5:
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState = 6;
break;
case 6:
@@ -974,7 +974,7 @@ static void CB2_ReturnFromUnionRoomBattle(void)
}
else
{
- sub_800AC34();
+ SetCloseLinkCallback();
gMain.state = 1;
}
break;
@@ -1113,7 +1113,7 @@ static void Task_StartWiredTrade(u8 taskId)
gSelectedTradeMonPositions[TRADE_PLAYER] = 0;
gSelectedTradeMonPositions[TRADE_PARTNER] = 0;
m4aMPlayAllStop();
- sub_800AC34();
+ SetCloseLinkCallback();
task->tState++;
break;
case 3:
@@ -1146,7 +1146,7 @@ static void Task_StartWirelessTrade(u8 taskId)
gSelectedTradeMonPositions[TRADE_PLAYER] = 0;
gSelectedTradeMonPositions[TRADE_PARTNER] = 0;
m4aMPlayAllStop();
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState++;
break;
case 3:
@@ -1264,7 +1264,7 @@ static void sub_80B3AAC(u8 taskId)
// Unused
static void sub_80B3AD0(u8 taskId)
{
- sub_800AC34();
+ SetCloseLinkCallback();
gTasks[taskId].func = sub_80B3AAC;
}
diff --git a/src/contest.c b/src/contest.c
index 0b56569cb..a015c5bab 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -2,14 +2,10 @@
#include "gpu_regs.h"
#include "bg.h"
#include "malloc.h"
-#include "constants/items.h"
-#include "constants/event_objects.h"
-#include "constants/moves.h"
-#include "constants/songs.h"
-#include "constants/species.h"
#include "battle.h"
#include "battle_anim.h"
#include "contest.h"
+#include "contest_link.h"
#include "data.h"
#include "decompress.h"
#include "graphics.h"
@@ -38,95 +34,73 @@
#include "strings.h"
#include "contest_effect.h"
#include "contest_link.h"
-#include "script_pokemon_util_80F87D8.h"
#include "international_string_util.h"
#include "data.h"
-#include "constants/rgb.h"
#include "contest_ai.h"
-
-#define APPLAUSE_METER_GFX_TAG 0xABE2
-
-// An index into a palette where the text color for each contestant is stored.
-// Contestant 0 will use palette color 10, contestant 1 will use color 11, etc.
-#define CONTESTANT_TEXT_COLOR_START 10
-
-enum
-{
-// The "{Pokemon Name} / {Trainer Name}" windows.
- CONTEST_WINDOW_CONTESTANT0_NAME,
- CONTEST_WINDOW_CONTESTANT1_NAME,
- CONTEST_WINDOW_CONTESTANT2_NAME,
- CONTEST_WINDOW_CONTESTANT3_NAME,
- CONTEST_WINDOW_GENERAL_TEXT,
- // The available moves, from top to bottom
- CONTEST_WINDOW_MOVE0,
- CONTEST_WINDOW_MOVE1,
- CONTEST_WINDOW_MOVE2,
- CONTEST_WINDOW_MOVE3,
- // The small "/" character between the move category and the
- // appeal/jam display
- CONTEST_WINDOW_SLASH,
- CONTEST_WINDOW_MOVE_DESCRIPTION
-};
-
-#define MOVE_WINDOWS_START CONTEST_WINDOW_MOVE0
+#include "constants/event_objects.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+#include "constants/species.h"
+#include "constants/tv.h"
// This file's functions.
-static void sub_80D782C(void);
-static void sub_80D7C7C(u8 taskId);
-static void sub_80D7CB4(u8 taskId);
-static void sub_80D7DAC(u8 taskId);
-static void sub_80D7DC8(u8 taskId);
-static void sub_80D7DE8(u8 taskId);
+static void LoadContestPalettes(void);
+static void Task_StartContestWaitFade(u8 taskId);
+static void Task_TryStartLinkContest(u8 taskId);
+static void Task_CommunicateMonIdxs(u8 taskId);
+static void Task_EndCommunicateMonIdxs(u8 taskId);
+static void Task_ReadyStartLinkContest(u8 taskId);
static bool8 SetupContestGraphics(u8 *stateVar);
-static void sub_80D80C8(u8 taskId);
-static void sub_80D8108(u8 taskId);
-static void vblank_cb_battle(void);
+static void Task_WaitToRaiseCurtainAtStart(u8 taskId);
+static void Task_RaiseCurtainAtStart(u8 taskId);
+static void VBlankCB_Contest(void);
static void CB2_ContestMain(void);
-static void sub_80D833C(u8 taskId);
-static void sub_80D8424(u8 taskId);
-static void sub_80D8610(u8 taskId);
-static void sub_80D8490(u8 taskId);
-static void sub_80D880C(s8);
-static void sub_80D883C(s8);
-static void sub_80D8894(u8 taskId);
-static void sub_80D892C(u8 taskId);
-static void sub_80D895C(u8 taskId);
-static void sub_80D8A04(u8 taskId);
-static void sub_80D8A50(u8 taskId);
-static void sub_80D8A88(u8 taskId);
-static void sub_80D8B38(u8 taskId);
-static void sub_80DA110(u8);
-static void sub_80DA134(struct Sprite *);
-static void sub_80DA164(struct Sprite *);
-static void sub_80DA198(u8);
-static void sub_80DA25C(u8);
-static void sub_80DA28C(u8);
-static void sub_80DA31C(u8);
+static void Task_DisplayAppealNumberText(u8 taskId);
+static void Task_TryShowMoveSelectScreen(u8 taskId);
+static void Task_ShowMoveSelectScreen(u8 taskId);
+static void Task_HandleMoveSelectInput(u8 taskId);
+static void DrawMoveSelectArrow(s8);
+static void EraseMoveSelectArrow(s8);
+static void Task_SelectedMove(u8 taskId);
+static void Task_EndCommunicateMoveSelections(u8 taskId);
+static void Task_HideMoveSelectScreen(u8 taskId);
+static void Task_HideApplauseMeterForAppealStart(u8 taskId);
+static void Task_WaitHideApplauseMeterForAppealStart(u8 taskId);
+static void Task_AppealSetup(u8 taskId);
+static void Task_DoAppeals(u8 taskId);
+static void Task_EndWaitForLink(u8);
+static void SpriteCB_MonSlideIn(struct Sprite *);
+static void SpriteCB_MonSlideOut(struct Sprite *);
+static void Task_FinishRoundOfAppeals(u8);
+static void Task_ReadyUpdateHeartSliders(u8);
+static void Task_UpdateHeartSliders(u8);
+static void Task_WaitForHeartSliders(u8);
static void sub_80DA348(u8);
-static void sub_80DA38C(u8);
-static void sub_80DA3CC(u8);
-static void sub_80DA464(u8);
-static void sub_80DA49C(u8);
-static void sub_80DA4CC(u8);
-static void sub_80DA51C(u8);
-static void sub_80DA5B4(u8);
-static void sub_80DA5E8(u8);
-static void sub_80DA6B4(u8);
-static void sub_80DA700(u8);
-static void sub_80DA740(u8);
-static void sub_80DA7A0(u8);
-static void sub_80DA7EC(u8);
-static void sub_80DA830(u8);
-static void sub_80DA874(void);
-static bool8 sub_80DA8A4(void);
+static void Task_WaitPrintRoundResult(u8);
+static void Task_PrintRoundResultText(u8);
+static void Task_ReUpdateHeartSliders(u8);
+static void Task_WaitForHeartSlidersAgain(u8);
+static void Task_DropCurtainAtRoundEnd(u8);
+static void Task_TryStartNextRoundOfAppeals(u8);
+static void Task_StartNewRoundOfAppeals(u8);
+static void Task_EndAppeals(u8);
+static void Task_WaitForOutOfTimeMsg(u8);
+static void Task_DropCurtainAtAppealsEnd(u8);
+static void Task_TryCommunicateFinalStandings(u8);
+static void Task_CommunicateFinalStandings(u8);
+static void Task_EndCommunicateFinalStandings(u8);
+static void Task_ContestReturnToField(u8);
+static void FieldCB_ContestReturnToField(void);
+static bool8 IsPlayerLinkLeader(void);
static void PrintContestantTrainerName(u8);
static void PrintContestantTrainerNameWithColor(u8 a0, u8 a1);
static void PrintContestantMonName(u8);
static void PrintContestantMonNameWithColor(u8, u8);
-static u8 sub_80DB0C4(void);
-static u8 sub_80DB120(void);
-static u8 sub_80DB174(u16, u32, u32, u32);
+static u8 CreateJudgeSprite(void);
+static u8 CreateJudgeSpeechBubbleSprite(void);
+static u8 CreateContestantSprite(u16, u32, u32, u32);
static void PrintContestMoveDescription(u16);
static u16 SanitizeSpecies(u16);
static void ContestClearGeneralTextWindow(void);
@@ -134,95 +108,234 @@ static u16 GetChosenMove(u8);
static void GetAllChosenMoves(void);
static void ContestPrintLinkStandby(void);
static void FillContestantWindowBgs(void);
-static void sub_80DC2BC(void);
-static void sub_80DC490(bool8);
-static void sub_80DC4F0(void);
+static void CreateSliderHeartSprites(void);
+static void SetBottomSliderHeartsInvisibility(bool8);
+static void CreateNextTurnSprites(void);
static void CreateApplauseMeterSprite(void);
-static void sub_80DC5E8(void);
-static void sub_80DC7EC(void);
+static void CreateJudgeAttentionEyeTask(void);
+static void CreateUnusedBlendTask(void);
static void ContestDebugDoPrint(void);
static void DrawContestantWindows(void);
static void ApplyNextTurnOrder(void);
-static void StartMoveApplauseMeterOnscreen(void);
-static void TryMoveApplauseMeterOffscreen(void);
-static void sub_80DE224(void);
-static void sub_80DE350(void);
-static void sub_80DE424(u8);
-static void sub_80DE69C(u8);
-static void sub_80DEA20(void);
+static void SlideApplauseMeterIn(void);
+static void SlideApplauseMeterOut(void);
+static void SetBgForCurtainDrop(void);
+static void UpdateContestantBoxOrder(void);
+static void Task_StartDropCurtainAtRoundEnd(u8);
+static void AnimateSliderHearts(u8);
+static void CreateInvisibleBattleTargetSprite(void);
static void Contest_StartTextPrinter(const u8 *, u32);
static void ContestBG_FillBoxWithIncrementingTile(u8, u16, u8, u8, u8, u8, u8, s16);
static bool32 Contest_RunTextPrinters(void);
static void Contest_SetBgCopyFlags(u32 flagIndex);
static void CalculateFinalScores(void);
-static void sub_80DD080(u8);
-static void sub_80DE9DC(u8);
-static void sub_80DCBE8(u8, u8);
-static u8 sub_80DC9EC(u8);
+static void CalculateAppealMoveImpact(u8);
+static void SetMoveAnimAttackerData(u8);
+static void BlinkContestantBox(u8, u8);
+static u8 CreateContestantBoxBlinkSprites(u8);
static u16 SanitizeMove(u16);
-static void sub_80DE864(u8);
-static void SelectContestMoveBankTarget(u16);
-static void sub_80DE9B0(u8);
-static void sub_80DC674(u8);
-static void sub_80DE12C(void);
-static void sub_80DD45C(u8, u8);
-static void sub_80DD720(u8);
-static void sub_80DE008(bool8);
-static u8 sub_80DC028(s16, s16, u8);
-static bool8 sub_80DB5B8(u8, u8);
-static bool8 sub_80DB798(u8);
-static void sub_80DB884(void);
-static void sub_80DC9B4(u8);
-static void sub_80DDED0(s8, s8);
+static void SetMoveSpecificAnimData(u8);
+static void SetMoveTargetPosition(u16);
+static void ClearMoveAnimData(u8);
+static void StopFlashJudgeAttentionEye(u8);
+static void DrawUnnervedSymbols(void);
+static void PrintAppealMoveResultText(u8, u8);
+static void DoJudgeSpeechBubble(u8);
+static void ShowHideNextTurnGfx(bool8);
+static u8 UpdateAppealHearts(s16, s16, u8);
+static bool8 UpdateConditionStars(u8, u8);
+static bool8 DrawStatusSymbol(u8);
+static void DrawStatusSymbols(void);
+static void StartStopFlashJudgeAttentionEye(u8);
+static void BlendAudienceBackground(s8, s8);
static void ShowAndUpdateApplauseMeter(s8 unused);
-static void sub_80DDE0C(void);
+static void AnimateAudience(void);
static void UpdateApplauseMeter(void);
static void RankContestants(void);
-static void sub_80DBA18(void);
-static void sub_80DC3AC(void);
-static bool8 sub_80DC3C4(void);
+static void SetAttentionLevels(void);
+static void UpdateHeartSliders(void);
+static bool8 SlidersDoneUpdating(void);
static void ContestBG_FillBoxWithTile(u8, u16, u8, u8, u8, u8, u8);
static void Contest_PrintTextToBg0WindowStd(u32, const u8 *);
static s16 GetContestantRound2Points(u8);
static void DetermineFinalStandings(void);
-static bool8 sub_80DBF30(s32, s32, struct UnknownContestStruct6 *);
-static void sub_80DC0F4(u8);
-static void sub_80DC408(struct Sprite *);
-static void sub_80DC728(u8);
-static void sub_80DC6A4(u8);
-static void sub_80DC8D0(u8);
-static void sub_80DC81C(u8);
-static void sub_80DC87C(u8);
-static void sub_80DCC84(struct Sprite *);
-static void sub_80DCCD8(struct Sprite *sprite);
+static bool8 DidContestantPlaceHigher(s32, s32, struct ContestFinalStandings *);
+static void Task_UpdateAppealHearts(u8);
+static void SpriteCB_UpdateHeartSlider(struct Sprite *);
+static void Task_FlashJudgeAttentionEye(u8);
+static void Task_StopFlashJudgeAttentionEye(u8);
+static void Task_UnusedBlend(u8);
+static void InitUnusedBlendTaskData(u8);
+static void UpdateBlendTaskContestantData(u8);
+static void SpriteCB_BlinkContestantBox(struct Sprite *);
+static void SpriteCB_EndBlinkContestantBox(struct Sprite *sprite);
static u8 StartApplauseOverflowAnimation(void);
static void Task_ApplauseOverflowAnimation(u8);
-static void Task_MoveApplauseMeterOnscreen(u8);
-static void Task_MoveApplauseMeterOffscreen(u8);
+static void Task_SlideApplauseMeterIn(u8);
+static void Task_SlideApplauseMeterOut(u8);
static void Task_ShowAndUpdateApplauseMeter(u8);
-static void sub_80DDE30(u8);
-static void sub_80DDF80(u8);
+static void Task_AnimateAudience(u8);
+static void Task_BlendAudienceBackground(u8);
static const u8 *GetTurnOrderNumberGfx(u8);
-static void sub_80DE464(u8);
-static void sub_80DE4A8(u8);
-static void sub_80DE5F4(u8);
-static void sub_80DE65C(u8);
-static void sub_80DE794(u8);
-static void sub_80DEA5C(void);
-static void sub_80DF250(void);
-static void sub_80DF4F8(void);
-static void sub_80DF080(u8);
+static void Task_UpdateCurtainDropAtRoundEnd(u8);
+static void Task_ResetForNextRound(u8);
+static void Task_WaitRaiseCurtainAtRoundEnd(u8);
+static void Task_StartRaiseCurtainAtRoundEnd(u8);
+static void Task_WaitForSliderHeartAnim(u8);
+static void SetBattleTargetSpritePosition(void);
+static void CalculateContestLiveUpdateData(void);
+static void SetConestLiveUpdateTVData(void);
+static void SetContestLiveUpdateFlags(u8);
static void ContestDebugPrintBitStrings(void);
-static void sub_80DF9D4(u8 *);
-static void sub_80DF9E0(u8 *, s32);
+static void StripPlayerNameForLinkContest(u8 *);
+static void StripMonNameForLinkContest(u8 *, s32);
static void SwapMoveDescAndContestTilemaps(void);
+// An index into a palette where the text color for each contestant is stored.
+// Contestant 0 will use palette color 10, contestant 1 will use color 11, etc.
+#define CONTESTANT_TEXT_COLOR_START 10
+
+enum {
+// The "{Pokemon Name} / {Trainer Name}" windows.
+ WIN_CONTESTANT0_NAME,
+ WIN_CONTESTANT1_NAME,
+ WIN_CONTESTANT2_NAME,
+ WIN_CONTESTANT3_NAME,
+ WIN_GENERAL_TEXT,
+ // The available moves, from top to bottom
+ WIN_MOVE0,
+ WIN_MOVE1,
+ WIN_MOVE2,
+ WIN_MOVE3,
+ // The small "/" character between the move category and the
+ // appeal/jam display
+ WIN_SLASH,
+ WIN_MOVE_DESCRIPTION
+};
+
+enum {
+ JUDGE_SYMBOL_SWIRL,
+ JUDGE_SYMBOL_SWIRL_UNUSED,
+ JUDGE_SYMBOL_ONE_EXCLAMATION,
+ JUDGE_SYMBOL_TWO_EXCLAMATIONS,
+ JUDGE_SYMBOL_NUMBER_ONE_UNUSED,
+ JUDGE_SYMBOL_NUMBER_ONE,
+ JUDGE_SYMBOL_NUMBER_FOUR,
+ JUDGE_SYMBOL_QUESTION_MARK,
+ JUDGE_SYMBOL_STAR,
+};
+
+enum {
+ STAT_SYMBOL_CIRCLE,
+ STAT_SYMBOL_WAVE,
+ STAT_SYMBOL_X,
+ STAT_SYMBOL_SWIRL,
+ STAT_SYMBOL_SQUARE,
+};
+
+enum {
+ CONTEST_DEBUG_MODE_OFF,
+ CONTEST_DEBUG_MODE_PRINT_POINT_TOTAL,
+ CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS,
+ CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS
+};
+
+#define MOVE_WINDOWS_START WIN_MOVE0
+
+#define TAG_CONTEST_SYMBOLS_PAL 0xABE0
+#define TAG_JUDGE_SYMBOLS_GFX 0xABE0
+#define TAG_FACES_GFX 0xABE1
+#define TAG_APPLAUSE_METER 0xABE2
+
+#define TAG_SLIDER_HEART 0x4E20
+#define TAG_JUDGE 0x4E21
+#define TAG_NEXT_TURN_PAL 0x4E22
+#define TAG_NEXT_TURN_1_GFX 0x4E22
+#define TAG_NEXT_TURN_2_GFX 0x4E23
+#define TAG_NEXT_TURN_3_GFX 0x4E24
+#define TAG_NEXT_TURN_4_GFX 0x4E25
+
+#define TAG_BLINK_EFFECT_CONTESTANT0 0x80E8
+#define TAG_BLINK_EFFECT_CONTESTANT1 0x80E9
+#define TAG_BLINK_EFFECT_CONTESTANT2 0x80EA
+#define TAG_BLINK_EFFECT_CONTESTANT3 0x80EB
+
+enum {
+ SLIDER_HEART_ANIM_NORMAL,
+ SLIDER_HEART_ANIM_DISAPPEAR,
+ SLIDER_HEART_ANIM_APPEAR,
+};
+
+// States for Task_DoAppeals
+enum {
+ APPEALSTATE_START_TURN,
+ APPEALSTATE_WAIT_LINK,
+ APPEALSTATE_CHECK_SKIP_TURN,
+ APPEALSTATE_SLIDE_MON_IN,
+ APPEALSTATE_WAIT_SLIDE_MON,
+ APPEALSTATE_PRINT_USED_MOVE_MSG,
+ APPEALSTATE_WAIT_USED_MOVE_MSG,
+ APPEALSTATE_MOVE_ANIM,
+ APPEALSTATE_WAIT_MOVE_ANIM,
+ APPEALSTATE_MOVE_ANIM_MULTITURN,
+ APPEALSTATE_SLIDE_MON_OUT,
+ APPEALSTATE_FREE_MON_SPRITE,
+ APPEALSTATE_UPDATE_MOVE_USERS_HEARTS,
+ APPEALSTATE_WAIT_MOVE_USERS_HEARTS,
+ APPEALSTATE_PRINT_COMBO_MSG,
+ APPEALSTATE_TRY_UPDATE_HEARTS_FROM_COMBO,
+ APPEALSTATE_WAIT_HEARTS_FROM_COMBO,
+ APPEALSTATE_CHECK_REPEATED_MOVE,
+ APPEALSTATE_WAIT_HEARTS_FROM_REPEAT,
+ APPEALSTATE_UPDATE_HEARTS_FROM_REPEAT,
+ APPEALSTATE_START_TURN_END_DELAY,
+ APPEALSTATE_TURN_END_DELAY,
+ APPEALSTATE_START_NEXT_TURN,
+ APPEALSTATE_TRY_PRINT_MOVE_RESULT,
+ APPEALSTATE_WAIT_MOVE_RESULT_MSG,
+ APPEALSTATE_UPDATE_OPPONENTS,
+ APPEALSTATE_UPDATE_OPPONENT,
+ APPEALSTATE_WAIT_OPPONENT_RESPONSE_MSG,
+ APPEALSTATE_UPDATE_OPPONENT_HEARTS,
+ APPEALSTATE_WAIT_OPPONENT_HEARTS,
+ APPEALSTATE_UPDATE_OPPONENT_STATUS,
+ APPEALSTATE_PRINT_SKIP_TURN_MSG,
+ APPEALSTATE_WAIT_SKIP_TURN_MSG,
+ APPEALSTATE_PRINT_TOO_NERVOUS_MSG,
+ APPEALSTATE_WAIT_TOO_NERVOUS_MSG,
+ APPEALSTATE_TRY_JUDGE_STAR,
+ APPEALSTATE_WAIT_JUDGE_STAR,
+ APPEALSTATE_UPDATE_MOVE_USERS_STARS,
+ APPEALSTATE_WAIT_MOVE_USERS_STARS,
+ APPEALSTATE_UPDATE_OPPONENT_STARS,
+ APPEALSTATE_WAIT_OPPONENT_STARS,
+ APPEALSTATE_UPDATE_CROWD,
+ APPEALSTATE_42, // Unused state
+ APPEALSTATE_WAIT_EXCITEMENT_HEARTS,
+ APPEALSTATE_44, // Unused state
+ APPEALSTATE_WAIT_JUDGE_COMBO,
+ APPEALSTATE_WAIT_JUDGE_REPEATED_MOVE,
+ APPEALSTATE_TRY_SHOW_NEXT_TURN_GFX,
+ APPEALSTATE_CHECK_TURN_ORDER_MOD,
+ APPEALSTATE_WAIT_JUDGE_TURN_ORDER,
+ APPEALSTATE_UPDATE_MOVE_USERS_STATUS,
+ APPEALSTATE_TRY_PRINT_SKIP_NEXT_TURN_MSG,
+ APPEALSTATE_WAIT_SKIP_NEXT_TURN_MSG,
+ APPEALSTATE_DO_CROWD_UNEXCITED,
+ APPEALSTATE_DO_CROWD_EXCITED,
+ APPEALSTATE_SLIDE_APPLAUSE_OUT,
+ APPEALSTATE_WAIT_SLIDE_APPLAUSE,
+ APPEALSTATE_PRINT_CROWD_WATCHES_MSG,
+ APPEALSTATE_PRINT_MON_MOVE_IGNORED_MSG,
+ APPEALSTATE_WAIT_MON_MOVE_IGNORED_MSG,
+};
+
// EWRAM vars.
EWRAM_DATA struct ContestPokemon gContestMons[CONTESTANT_COUNT] = {0};
-EWRAM_DATA s16 gContestMonConditions[CONTESTANT_COUNT] = {0};
-EWRAM_DATA s16 gContestMonTotalPoints[CONTESTANT_COUNT] = {0};
-EWRAM_DATA s16 gUnknown_02039F10[CONTESTANT_COUNT] = {0};
-EWRAM_DATA s16 gContestMonRound2Points[CONTESTANT_COUNT] = {0};
+EWRAM_DATA s16 gContestMonRound1Points[CONTESTANT_COUNT] = {0}; // "Round 1" points are based on condition
+EWRAM_DATA s16 gContestMonTotalPoints[CONTESTANT_COUNT] = {0}; // Round 1 points + Round 2 points
+EWRAM_DATA s16 gContestMonAppealPointTotals[CONTESTANT_COUNT] = {0};
+EWRAM_DATA s16 gContestMonRound2Points[CONTESTANT_COUNT] = {0}; // "Round 2" points are just appeal points * 2
EWRAM_DATA u8 gContestFinalStandings[CONTESTANT_COUNT] = {0};
EWRAM_DATA u8 gContestMonPartyIndex = 0;
EWRAM_DATA u8 gContestPlayerMonIndex = 0;
@@ -230,7 +343,7 @@ EWRAM_DATA u8 gContestantTurnOrder[CONTESTANT_COUNT] = {0};
EWRAM_DATA u8 gLinkContestFlags = 0;
// Bit 0: Is a link contest
// Bit 1: Link contest uses wireless adapter
-EWRAM_DATA u8 gUnknown_02039F2B = 0;
+EWRAM_DATA u8 gContestLinkLeaderIndex = 0;
EWRAM_DATA u16 gSpecialVar_ContestCategory = 0;
EWRAM_DATA u16 gSpecialVar_ContestRank = 0;
EWRAM_DATA u8 gNumLinkContestPlayers = 0;
@@ -249,24 +362,25 @@ extern const u8 gText_BDot[];
extern const u8 gText_CDot[];
extern void (*const gContestEffectFuncs[])(void);
-static const u8 gUnknown_08587A6C[] =
+static const u8 sSliderHeartYPositions[CONTESTANT_COUNT] =
{
- 0x24, 0x4C, 0x74, 0x9C
+ 36, 76, 116, 156
};
-static const u8 gUnknown_08587A70[] =
+// The "Next Turn" sprites cover up the slider, so the y positions are the same as above
+static const u8 sNextTurnSpriteYPositions[CONTESTANT_COUNT] =
{
- 0x24, 0x4C, 0x74, 0x9C
+ 36, 76, 116, 156
};
-static const struct SpriteSheet gUnknown_08587A74 =
+static const struct SpriteSheet sSpriteSheet_SliderHeart =
{
- .data = gTiles_8C19450,
+ .data = gContestSliderHeart_Gfx,
.size = 0x20,
- .tag = 0x4E20
+ .tag = TAG_SLIDER_HEART
};
-static const struct OamData gOamData_8587A7C =
+static const struct OamData sOam_SliderHeart =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -283,75 +397,75 @@ static const struct OamData gOamData_8587A7C =
.affineParam = 0
};
-static const union AffineAnimCmd gSpriteAffineAnim_8587A84[] =
+static const union AffineAnimCmd sAffineAnim_SliderHeart_Normal[] =
{
- AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gSpriteAffineAnim_8587A94[] =
+static const union AffineAnimCmd sAffineAnim_SliderHeart_SpinDisappear[] =
{
- AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, -20, 20),
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(-10, -10, -20, 20),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd gSpriteAffineAnim_8587AAC[] =
+static const union AffineAnimCmd sAffineAnim_SliderHeart_SpinAppear[] =
{
- AFFINEANIMCMD_FRAME(0x38, 0x38, 0, 0),
+ AFFINEANIMCMD_FRAME(56, 56, 0, 0),
AFFINEANIMCMD_FRAME(10, 10, 20, 20),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd* const gSpriteAffineAnimTable_8587AC4[] =
+static const union AffineAnimCmd* const sAffineAnims_SliderHeart[] =
{
- gSpriteAffineAnim_8587A84,
- gSpriteAffineAnim_8587A94,
- gSpriteAffineAnim_8587AAC
+ [SLIDER_HEART_ANIM_NORMAL] = sAffineAnim_SliderHeart_Normal,
+ [SLIDER_HEART_ANIM_DISAPPEAR] = sAffineAnim_SliderHeart_SpinDisappear,
+ [SLIDER_HEART_ANIM_APPEAR] = sAffineAnim_SliderHeart_SpinAppear
};
-static const struct SpriteTemplate gSpriteTemplate_8587AD0 =
+static const struct SpriteTemplate sSpriteTemplate_SliderHeart =
{
- .tileTag = 0x4E20,
- .paletteTag = 0xABE0,
- .oam = &gOamData_8587A7C,
+ .tileTag = TAG_SLIDER_HEART,
+ .paletteTag = TAG_CONTEST_SYMBOLS_PAL,
+ .oam = &sOam_SliderHeart,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_8587AC4,
+ .affineAnims = sAffineAnims_SliderHeart,
.callback = SpriteCallbackDummy
};
-static const struct CompressedSpriteSheet gUnknown_08587AE8[] =
+static const struct CompressedSpriteSheet sSpriteSheet_NextTurn[CONTESTANT_COUNT] =
{
{
.data = gContestNextTurnGfx,
.size = 0x100,
- .tag = 0x4E22
+ .tag = TAG_NEXT_TURN_1_GFX
},
{
.data = gContestNextTurnGfx,
.size = 0x100,
- .tag = 0x4E23
+ .tag = TAG_NEXT_TURN_2_GFX
},
{
.data = gContestNextTurnGfx,
.size = 0x100,
- .tag = 0x4E24
+ .tag = TAG_NEXT_TURN_3_GFX
},
{
.data = gContestNextTurnGfx,
.size = 0x100,
- .tag = 0x4E25
+ .tag = TAG_NEXT_TURN_4_GFX
}
};
-static const struct SpritePalette gUnknown_08587B08 =
+static const struct SpritePalette sSpritePalette_NextTurn =
{
.data = gContestPal,
- .tag = 0x4E22
+ .tag = TAG_NEXT_TURN_PAL
};
-static const struct OamData gOamData_8587B10 =
+static const struct OamData sOam_NextTurn =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -368,39 +482,39 @@ static const struct OamData gOamData_8587B10 =
.affineParam = 0
};
-static const struct SpriteTemplate gSpriteTemplate_8587B18[] =
+static const struct SpriteTemplate sSpriteTemplates_NextTurn[CONTESTANT_COUNT] =
{
{
- .tileTag = 0x4E22,
- .paletteTag = 0x4E22,
- .oam = &gOamData_8587B10,
+ .tileTag = TAG_NEXT_TURN_1_GFX,
+ .paletteTag = TAG_NEXT_TURN_PAL,
+ .oam = &sOam_NextTurn,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
{
- .tileTag = 0x4E23,
- .paletteTag = 0x4E22,
- .oam = &gOamData_8587B10,
+ .tileTag = TAG_NEXT_TURN_2_GFX,
+ .paletteTag = TAG_NEXT_TURN_PAL,
+ .oam = &sOam_NextTurn,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
{
- .tileTag = 0x4E24,
- .paletteTag = 0x4E22,
- .oam = &gOamData_8587B10,
+ .tileTag = TAG_NEXT_TURN_3_GFX,
+ .paletteTag = TAG_NEXT_TURN_PAL,
+ .oam = &sOam_NextTurn,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
{
- .tileTag = 0x4E25,
- .paletteTag = 0x4E22,
- .oam = &gOamData_8587B10,
+ .tileTag = TAG_NEXT_TURN_4_GFX,
+ .paletteTag = TAG_NEXT_TURN_PAL,
+ .oam = &sOam_NextTurn,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -408,7 +522,7 @@ static const struct SpriteTemplate gSpriteTemplate_8587B18[] =
}
};
-const struct Subsprite gSubspriteTable_8587B78[] =
+static const struct Subsprite sSubsprites_NextTurn[] =
{
{
.x = -28,
@@ -428,22 +542,23 @@ const struct Subsprite gSubspriteTable_8587B78[] =
}
};
-const struct SubspriteTable gSubspriteTables_8587B80[] =
+static const struct SubspriteTable sSubspriteTable_NextTurn[] =
{
{
- .subspriteCount = 2,
- .subsprites = gSubspriteTable_8587B78
+ .subspriteCount = ARRAY_COUNT(sSubsprites_NextTurn),
+ .subsprites = sSubsprites_NextTurn
}
};
-const struct CompressedSpriteSheet gUnknown_08587B88 =
+// Unused
+static const struct CompressedSpriteSheet sSpriteSheet_Faces =
{
- .data = gUnknown_08C19168,
+ .data = gContestFaces_Gfx,
.size = 0x180,
- .tag = 0xABE1
+ .tag = TAG_FACES_GFX
};
-const struct OamData gOamData_8587B90 =
+static const struct OamData sOam_Faces =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -457,31 +572,32 @@ const struct OamData gOamData_8587B90 =
.paletteNum = 0,
};
-const struct SpriteTemplate gSpriteTemplate_8587B98 =
+// Unused
+static const struct SpriteTemplate sSpriteTemplate_Faces =
{
- .tileTag = 0xABE1,
- .paletteTag = 0xABE0,
- .oam = &gOamData_8587B90,
+ .tileTag = TAG_FACES_GFX,
+ .paletteTag = TAG_CONTEST_SYMBOLS_PAL,
+ .oam = &sOam_Faces,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct CompressedSpriteSheet sApplauseMeterSpriteSheet =
+static const struct CompressedSpriteSheet sSpriteSheet_ApplauseMeter =
{
.data = gContestApplauseGfx,
.size = 0x400,
- .tag = APPLAUSE_METER_GFX_TAG
+ .tag = TAG_APPLAUSE_METER
};
-static const struct SpritePalette sApplauseMeterPalette =
+static const struct SpritePalette sSpritePalette_ApplauseMeter =
{
.data = gContestPal,
- .tag = APPLAUSE_METER_GFX_TAG
+ .tag = TAG_APPLAUSE_METER
};
-static const struct OamData sApplauseMeterOamData =
+static const struct OamData sOam_ApplauseMeter =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -495,18 +611,18 @@ static const struct OamData sApplauseMeterOamData =
.paletteNum = 0,
};
-static const struct SpriteTemplate sApplauseMeterSpriteTemplate =
+static const struct SpriteTemplate sSpriteTemplate_ApplauseMeter =
{
- .tileTag = APPLAUSE_METER_GFX_TAG,
- .paletteTag = APPLAUSE_METER_GFX_TAG,
- .oam = &sApplauseMeterOamData,
+ .tileTag = TAG_APPLAUSE_METER,
+ .paletteTag = TAG_APPLAUSE_METER,
+ .oam = &sOam_ApplauseMeter,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-const struct OamData gOamData_8587BE0 =
+const struct OamData sOam_Judge =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -520,41 +636,41 @@ const struct OamData gOamData_8587BE0 =
.paletteNum = 2,
};
-const struct SpriteTemplate gSpriteTemplate_8587BE8 =
+const struct SpriteTemplate sSpriteTemplate_Judge =
{
- .tileTag = 0x4E21,
- .paletteTag = 0x4E21,
- .oam = &gOamData_8587BE0,
+ .tileTag = TAG_JUDGE,
+ .paletteTag = TAG_JUDGE,
+ .oam = &sOam_Judge,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-const struct CompressedSpriteSheet gUnknown_08587C00 =
+const struct CompressedSpriteSheet sSpriteSheet_Judge =
{
.data = gContestJudgeGfx,
.size = 0x800,
- .tag = 0x4E21
+ .tag = TAG_JUDGE
};
-const struct CompressedSpriteSheet gUnknown_08587C08 =
+static const struct CompressedSpriteSheet sSpriteSheet_JudgeSymbols =
{
.data = gContestJudgeSymbolsGfx,
.size = 0x380,
- .tag = 0xABE0
+ .tag = TAG_JUDGE_SYMBOLS_GFX
};
-const struct CompressedSpritePalette gUnknown_08587C10 =
+const struct CompressedSpritePalette sSpritePalette_JudgeSymbols =
{
.data = gContest3Pal,
- .tag = 0xABE0
+ .tag = TAG_CONTEST_SYMBOLS_PAL
};
-const struct SpriteTemplate gSpriteTemplate_8587C18 =
+const struct SpriteTemplate sSpriteTemplate_JudgeSpeechBubble =
{
- .tileTag = 0xABE0,
- .paletteTag = 0xABE0,
+ .tileTag = TAG_JUDGE_SYMBOLS_GFX,
+ .paletteTag = TAG_CONTEST_SYMBOLS_PAL,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
@@ -562,7 +678,7 @@ const struct SpriteTemplate gSpriteTemplate_8587C18 =
.callback = SpriteCallbackDummy
};
-const u16 gUnknown_08587C30[] = INCBIN_U16("graphics/unknown/unknown_587C30.gbapal");
+static const u16 sText_Pal[] = INCBIN_U16("graphics/contest/text.gbapal");
#include "data/contest_text_tables.h"
@@ -608,7 +724,7 @@ static const struct BgTemplate sContestBgTemplates[] =
static const struct WindowTemplate sContestWindowTemplates[] =
{
- [CONTEST_WINDOW_CONTESTANT0_NAME] = {
+ [WIN_CONTESTANT0_NAME] = {
.bg = 0,
.tilemapLeft = 18,
.tilemapTop = 0,
@@ -617,7 +733,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x200
},
- [CONTEST_WINDOW_CONTESTANT1_NAME] = {
+ [WIN_CONTESTANT1_NAME] = {
.bg = 0,
.tilemapLeft = 18,
.tilemapTop = 5,
@@ -626,7 +742,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x218
},
- [CONTEST_WINDOW_CONTESTANT2_NAME] = {
+ [WIN_CONTESTANT2_NAME] = {
.bg = 0,
.tilemapLeft = 18,
.tilemapTop = 10,
@@ -635,7 +751,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x230
},
- [CONTEST_WINDOW_CONTESTANT3_NAME] = {
+ [WIN_CONTESTANT3_NAME] = {
.bg = 0,
.tilemapLeft = 18,
.tilemapTop = 15,
@@ -644,7 +760,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x248
},
- [CONTEST_WINDOW_GENERAL_TEXT] = {
+ [WIN_GENERAL_TEXT] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 15,
@@ -653,7 +769,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x260
},
- [CONTEST_WINDOW_MOVE0] = {
+ [WIN_MOVE0] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 31,
@@ -662,7 +778,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x2A4
},
- [CONTEST_WINDOW_MOVE1] = {
+ [WIN_MOVE1] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 33,
@@ -671,7 +787,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x2B6
},
- [CONTEST_WINDOW_MOVE2] = {
+ [WIN_MOVE2] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 35,
@@ -680,7 +796,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x2C8
},
- [CONTEST_WINDOW_MOVE3] = {
+ [WIN_MOVE3] = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 37,
@@ -689,7 +805,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x2DA
},
- [CONTEST_WINDOW_SLASH] = {
+ [WIN_SLASH] = {
.bg = 0,
.tilemapLeft = 16,
.tilemapTop = 31,
@@ -698,7 +814,7 @@ static const struct WindowTemplate sContestWindowTemplates[] =
.paletteNum = 0xF,
.baseBlock = 0x2EC
},
- [CONTEST_WINDOW_MOVE_DESCRIPTION] = {
+ [WIN_MOVE_DESCRIPTION] = {
.bg = 0,
.tilemapLeft = 11,
.tilemapTop = 35,
@@ -712,52 +828,52 @@ static const struct WindowTemplate sContestWindowTemplates[] =
#include "data/contest_opponents.h"
-static const struct CompressedSpriteSheet sUnknown_08589904[] =
+static const struct CompressedSpriteSheet sSpriteSheets_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] =
{
{
.data = gBlankGfxCompressed,
.size = 0x1000,
- .tag = 0x80E8
+ .tag = TAG_BLINK_EFFECT_CONTESTANT0
},
{
.data = gBlankGfxCompressed,
.size = 0x1000,
- .tag = 0x80E9
+ .tag = TAG_BLINK_EFFECT_CONTESTANT1
},
{
.data = gBlankGfxCompressed,
.size = 0x1000,
- .tag = 0x80EA
+ .tag = TAG_BLINK_EFFECT_CONTESTANT2
},
{
.data = gBlankGfxCompressed,
.size = 0x1000,
- .tag = 0x80EB
+ .tag = TAG_BLINK_EFFECT_CONTESTANT3
}
};
// Yup this is super dangerous but that's how it is here
-static const struct SpritePalette sUnknown_08589924[] =
+static const struct SpritePalette sSpritePalettes_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] =
{
{
.data = (u16*)(gHeap + 0x1A0A4),
- .tag = 0x80E8
+ .tag = TAG_BLINK_EFFECT_CONTESTANT0
},
{
.data = (u16*)(gHeap + 0x1A0C4),
- .tag = 0x80E9
+ .tag = TAG_BLINK_EFFECT_CONTESTANT1
},
{
.data = (u16*)(gHeap + 0x1A0E4),
- .tag = 0x80EA
+ .tag = TAG_BLINK_EFFECT_CONTESTANT2
},
{
.data = (u16*)(gHeap + 0x1A104),
- .tag = 0x80EB
+ .tag = TAG_BLINK_EFFECT_CONTESTANT3
}
};
-const struct OamData gOamData_8589944 =
+const struct OamData sOam_ContestantsTurnBlinkEffect =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -772,13 +888,13 @@ const struct OamData gOamData_8589944 =
.affineParam = 0,
};
-const union AffineAnimCmd gSpriteAffineAnim_858994C[] =
+const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_0[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_END
};
-const union AffineAnimCmd gSpriteAffineAnim_858995C[] =
+const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_1[] =
{
AFFINEANIMCMD_FRAME(3, 3, 0, 15),
AFFINEANIMCMD_FRAME(-3, -3, 0, 15),
@@ -787,59 +903,89 @@ const union AffineAnimCmd gSpriteAffineAnim_858995C[] =
AFFINEANIMCMD_END
};
-const union AffineAnimCmd *const gSpriteAffineAnimTable_8589984[] =
+const union AffineAnimCmd *const sAffineAnims_ContestantsTurnBlinkEffect[] =
{
- gSpriteAffineAnim_858994C,
- gSpriteAffineAnim_858995C
+ sAffineAnim_ContestantsTurnBlinkEffect_0,
+ sAffineAnim_ContestantsTurnBlinkEffect_1
};
-const struct SpriteTemplate gSpriteTemplate_858998C[] =
+const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] =
{
{
- .tileTag = 0x80E8,
- .paletteTag = 0x80E8,
- .oam = &gOamData_8589944,
+ .tileTag = TAG_BLINK_EFFECT_CONTESTANT0,
+ .paletteTag = TAG_BLINK_EFFECT_CONTESTANT0,
+ .oam = &sOam_ContestantsTurnBlinkEffect,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_8589984,
+ .affineAnims = sAffineAnims_ContestantsTurnBlinkEffect,
.callback = SpriteCallbackDummy
},
{
- .tileTag = 0x80E9,
- .paletteTag = 0x80E9,
- .oam = &gOamData_8589944,
+ .tileTag = TAG_BLINK_EFFECT_CONTESTANT1,
+ .paletteTag = TAG_BLINK_EFFECT_CONTESTANT1,
+ .oam = &sOam_ContestantsTurnBlinkEffect,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_8589984,
+ .affineAnims = sAffineAnims_ContestantsTurnBlinkEffect,
.callback = SpriteCallbackDummy
},
{
- .tileTag = 0x80EA,
- .paletteTag = 0x80EA,
- .oam = &gOamData_8589944,
+ .tileTag = TAG_BLINK_EFFECT_CONTESTANT2,
+ .paletteTag = TAG_BLINK_EFFECT_CONTESTANT2,
+ .oam = &sOam_ContestantsTurnBlinkEffect,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_8589984,
+ .affineAnims = sAffineAnims_ContestantsTurnBlinkEffect,
.callback = SpriteCallbackDummy
},
{
- .tileTag = 0x80EB,
- .paletteTag = 0x80EB,
- .oam = &gOamData_8589944,
+ .tileTag = TAG_BLINK_EFFECT_CONTESTANT3,
+ .paletteTag = TAG_BLINK_EFFECT_CONTESTANT3,
+ .oam = &sOam_ContestantsTurnBlinkEffect,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_8589984,
+ .affineAnims = sAffineAnims_ContestantsTurnBlinkEffect,
.callback = SpriteCallbackDummy
}
};
-const s8 gContestExcitementTable[][5] =
+static const s8 gContestExcitementTable[CONTEST_CATEGORIES_COUNT][CONTEST_CATEGORIES_COUNT] =
{
- { 1, 0, -1, -1, 0},
- { 0, 1, 0, -1, -1},
- {-1, 0, 1, 0, -1},
- {-1, -1, 0, 1, 0},
- { 0, -1, -1, 0, 1}
+ [CONTEST_CATEGORY_COOL] = {
+ [CONTEST_CATEGORY_COOL] = +1,
+ [CONTEST_CATEGORY_BEAUTY] = 0,
+ [CONTEST_CATEGORY_CUTE] = -1,
+ [CONTEST_CATEGORY_SMART] = -1,
+ [CONTEST_CATEGORY_TOUGH] = 0
+ },
+ [CONTEST_CATEGORY_BEAUTY] = {
+ [CONTEST_CATEGORY_COOL] = 0,
+ [CONTEST_CATEGORY_BEAUTY] = +1,
+ [CONTEST_CATEGORY_CUTE] = 0,
+ [CONTEST_CATEGORY_SMART] = -1,
+ [CONTEST_CATEGORY_TOUGH] = -1
+ },
+ [CONTEST_CATEGORY_CUTE] = {
+ [CONTEST_CATEGORY_COOL] = -1,
+ [CONTEST_CATEGORY_BEAUTY] = 0,
+ [CONTEST_CATEGORY_CUTE] = +1,
+ [CONTEST_CATEGORY_SMART] = 0,
+ [CONTEST_CATEGORY_TOUGH] = -1
+ },
+ [CONTEST_CATEGORY_SMART] = {
+ [CONTEST_CATEGORY_COOL] = -1,
+ [CONTEST_CATEGORY_BEAUTY] = -1,
+ [CONTEST_CATEGORY_CUTE] = 0,
+ [CONTEST_CATEGORY_SMART] = +1,
+ [CONTEST_CATEGORY_TOUGH] = 0
+ },
+ [CONTEST_CATEGORY_TOUGH] = {
+ [CONTEST_CATEGORY_COOL] = 0,
+ [CONTEST_CATEGORY_BEAUTY] = -1,
+ [CONTEST_CATEGORY_CUTE] = -1,
+ [CONTEST_CATEGORY_SMART] = 0,
+ [CONTEST_CATEGORY_TOUGH] = +1
+ }
};
static void TaskDummy1(u8 taskId)
@@ -886,12 +1032,12 @@ void LoadContestBgAfterMoveAnim(void)
CopyToBgTilemapBuffer(3, gOldContestGfx, 0, 0);
CopyBgTilemapBufferToVram(3);
LoadCompressedPalette(gOldContestPalette, 0, 0x200);
- sub_80D782C();
+ LoadContestPalettes();
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- u32 contestantWindowId = MOVE_WINDOWS_START + i;
+ u32 contestantWindowId = 5 + i;
- LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId], 16 * (MOVE_WINDOWS_START + gContestantTurnOrder[i]), sizeof((eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId])));
+ LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId], 16 * (5 + gContestantTurnOrder[i]), sizeof((eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId])));
}
}
@@ -922,11 +1068,11 @@ static void InitContestWindows(void)
}
}
-static void sub_80D782C(void)
+static void LoadContestPalettes(void)
{
s32 i;
- LoadPalette(gUnknown_08587C30, 0xf0, 0x20);
+ LoadPalette(sText_Pal, 0xf0, 0x20);
FillPalette(RGB_BLACK, 0, 2);
for (i = 10; i < 14; i++)
LoadPalette(gPlttBufferUnfaded + 241, 240 + i, 2);
@@ -940,7 +1086,7 @@ static void InitContestResources(void)
eContest = (struct Contest){};
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- eContest.unused2[i] = 0xFF;
+ eContest.unk[i] = 0xFF;
}
for (i = 0; i < CONTESTANT_COUNT; i++)
{
@@ -952,10 +1098,10 @@ static void InitContestResources(void)
eContestantStatus[i].effectStringId = CONTEST_STRING_NONE;
eContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE;
}
- eContestResources8 = (struct UnknownContestStruct7){};
+ eContestAppealResults = (struct ContestAppealMoveResults){};
eContestAI = (struct ContestAIInfo){};
- *gContestResources->field_10 = (struct UnknownContestStruct5){};
- memset(gContestResources->field_14, 0, CONTESTANT_COUNT * sizeof(struct UnknownContestStruct4));
+ *gContestResources->excitement = (struct ContestExcitement){};
+ memset(eContestGfxState, 0, CONTESTANT_COUNT * sizeof(struct ContestGraphicsState));
if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK))
SortContestants(FALSE);
@@ -968,7 +1114,7 @@ static void InitContestResources(void)
// Calling this here while all the nextTurnOrder values are 0xFF will actually
// just reverse the turn order.
ApplyNextTurnOrder();
- memset(gContestResources->field_1c, 0, sizeof(*gContestResources->field_1c) * CONTESTANT_COUNT);
+ memset(gContestResources->tv, 0, sizeof(*gContestResources->tv) * CONTESTANT_COUNT);
}
static void AllocContestResources(void)
@@ -976,19 +1122,19 @@ static void AllocContestResources(void)
gContestResources = AllocZeroed(sizeof(struct ContestResources));
gContestResources->contest = AllocZeroed(sizeof(struct Contest));
gContestResources->status = AllocZeroed(sizeof(struct ContestantStatus) * CONTESTANT_COUNT);
- gContestResources->field_8 = AllocZeroed(sizeof(struct UnknownContestStruct7));
+ gContestResources->appealResults = AllocZeroed(sizeof(struct ContestAppealMoveResults));
gContestResources->aiData = AllocZeroed(sizeof(struct ContestAIInfo));
- gContestResources->field_10 = AllocZeroed(sizeof(struct UnknownContestStruct5) * CONTESTANT_COUNT);
- gContestResources->field_14 = AllocZeroed(sizeof(struct UnknownContestStruct4) * CONTESTANT_COUNT);
- gContestResources->field_18 = AllocZeroed(sizeof(struct ContestStruct_field_18));
- gContestResources->field_1c = AllocZeroed(sizeof(struct ContestResourcesField1C) * CONTESTANT_COUNT);
- gContestResources->field_20 = AllocZeroed(sizeof(struct ContestResourcesField20));
+ gContestResources->excitement = AllocZeroed(sizeof(struct ContestExcitement) * CONTESTANT_COUNT);
+ gContestResources->gfxState = AllocZeroed(sizeof(struct ContestGraphicsState) * CONTESTANT_COUNT);
+ gContestResources->moveAnim = AllocZeroed(sizeof(struct ContestMoveAnimData));
+ gContestResources->tv = AllocZeroed(sizeof(struct ContestTV) * CONTESTANT_COUNT);
+ gContestResources->unused = AllocZeroed(sizeof(struct ContestUnused));
gContestResources->contestBgTilemaps[0] = AllocZeroed(0x1000);
gContestResources->contestBgTilemaps[1] = AllocZeroed(0x1000);
gContestResources->contestBgTilemaps[2] = AllocZeroed(0x1000);
gContestResources->contestBgTilemaps[3] = AllocZeroed(0x1000);
- gContestResources->field_34 = AllocZeroed(0x800);
- gContestResources->field_38 = AllocZeroed(0x800);
+ gContestResources->boxBlinkTiles1 = AllocZeroed(0x800);
+ gContestResources->boxBlinkTiles2 = AllocZeroed(0x800);
gContestResources->field_3c = AllocZeroed(0x2000);
gUnknown_0202305C = gContestResources->field_3c;
gUnknown_02023060 = gContestResources->contestBgTilemaps[1];
@@ -998,19 +1144,19 @@ static void FreeContestResources(void)
{
FREE_AND_SET_NULL(gContestResources->contest);
FREE_AND_SET_NULL(gContestResources->status);
- FREE_AND_SET_NULL(gContestResources->field_8);
+ FREE_AND_SET_NULL(gContestResources->appealResults);
FREE_AND_SET_NULL(gContestResources->aiData);
- FREE_AND_SET_NULL(gContestResources->field_10);
- FREE_AND_SET_NULL(gContestResources->field_14);
- FREE_AND_SET_NULL(gContestResources->field_18);
- FREE_AND_SET_NULL(gContestResources->field_1c);
- FREE_AND_SET_NULL(gContestResources->field_20);
+ FREE_AND_SET_NULL(gContestResources->excitement);
+ FREE_AND_SET_NULL(gContestResources->gfxState);
+ FREE_AND_SET_NULL(gContestResources->moveAnim);
+ FREE_AND_SET_NULL(gContestResources->tv);
+ FREE_AND_SET_NULL(gContestResources->unused);
FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[0]);
FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[1]);
FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[2]);
FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[3]);
- FREE_AND_SET_NULL(gContestResources->field_34);
- FREE_AND_SET_NULL(gContestResources->field_38);
+ FREE_AND_SET_NULL(gContestResources->boxBlinkTiles1);
+ FREE_AND_SET_NULL(gContestResources->boxBlinkTiles2);
FREE_AND_SET_NULL(gContestResources->field_3c);
FREE_AND_SET_NULL(gContestResources);
gUnknown_0202305C = NULL;
@@ -1054,13 +1200,13 @@ void CB2_StartContest(void)
}
break;
case 3:
- sub_80DE224();
+ SetBgForCurtainDrop();
gBattle_BG1_X = 0;
gBattle_BG1_Y = 0;
BeginFastPaletteFade(2);
gPaletteFade.bufferTransferDisabled = FALSE;
- SetVBlankCallback(vblank_cb_battle);
- eContest.mainTaskId = CreateTask(sub_80D7C7C, 10);
+ SetVBlankCallback(VBlankCB_Contest);
+ eContest.mainTaskId = CreateTask(Task_StartContestWaitFade, 10);
SetMainCallback2(CB2_ContestMain);
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
{
@@ -1071,16 +1217,18 @@ void CB2_StartContest(void)
}
}
-static void sub_80D7C7C(u8 taskId)
+static void Task_StartContestWaitFade(u8 taskId)
{
if (!gPaletteFade.active)
{
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80D7CB4;
+ gTasks[taskId].func = Task_TryStartLinkContest;
}
}
-static void sub_80D7CB4(u8 taskId)
+// If this is a link contest try to start appeals communication
+// Otherwise skip ahead
+static void Task_TryStartLinkContest(u8 taskId)
{
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
@@ -1095,7 +1243,7 @@ static void sub_80D7CB4(u8 taskId)
case 1:
if (IsLinkTaskFinished())
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gTasks[taskId].data[0]++;
}
return;
@@ -1112,36 +1260,37 @@ static void sub_80D7CB4(u8 taskId)
gPaletteFade.bufferTransferDisabled = FALSE;
if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS))
ContestPrintLinkStandby();
- CreateTask(sub_80D7DAC, 0);
+ CreateTask(Task_CommunicateMonIdxs, 0);
gTasks[taskId].data[0] = 0;
gTasks[taskId].func = TaskDummy1;
}
}
else
{
- gTasks[taskId].func = sub_80D80C8;
+ gTasks[taskId].func = Task_WaitToRaiseCurtainAtStart;
}
}
-static void sub_80D7DAC(u8 taskId)
+static void Task_CommunicateMonIdxs(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC998, sub_80D7DC8);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, Task_EndCommunicateMonIdxs);
}
-static void sub_80D7DC8(u8 taskId)
+static void Task_EndCommunicateMonIdxs(u8 taskId)
{
gTasks[taskId].data[0] = 1;
- gTasks[taskId].func = sub_80D7DE8;
+ gTasks[taskId].func = Task_ReadyStartLinkContest;
}
-static void sub_80D7DE8(u8 taskId)
+static void Task_ReadyStartLinkContest(u8 taskId)
{
+ // data[0] always 1 here
gTasks[taskId].data[0]--;
if (gTasks[taskId].data[0] <= 0)
{
GetMultiplayerId(); // unused return value
DestroyTask(taskId);
- gTasks[eContest.mainTaskId].func = sub_80D80C8;
+ gTasks[eContest.mainTaskId].func = Task_WaitToRaiseCurtainAtStart;
gRngValue = gContestRngValue;
}
}
@@ -1164,7 +1313,7 @@ static bool8 SetupContestGraphics(u8 *stateVar)
break;
case 2:
LZDecompressVram(gContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4)));
- DmaCopyLarge32(3, (void *)(BG_SCREEN_ADDR(4)), eUnzippedContestAudienceGfx, 0x2000, 0x1000);
+ DmaCopyLarge32(3, (void *)(BG_SCREEN_ADDR(4)), eUnzippedContestAudience_Gfx, 0x2000, 0x1000);
break;
case 3:
CopyToBgTilemapBuffer(3, gOldContestGfx, 0, 0);
@@ -1179,31 +1328,33 @@ static bool8 SetupContestGraphics(u8 *stateVar)
case 5:
LoadCompressedPalette(gOldContestPalette, 0, 0x200);
CpuCopy32(gPlttBufferUnfaded + 128, tempPalette1, 16 * sizeof(u16));
- CpuCopy32(gPlttBufferUnfaded + (MOVE_WINDOWS_START + gContestPlayerMonIndex) * 16, tempPalette2, 16 * sizeof(u16));
+ CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, tempPalette2, 16 * sizeof(u16));
CpuCopy32(tempPalette2, gPlttBufferUnfaded + 128, 16 * sizeof(u16));
- CpuCopy32(tempPalette1, gPlttBufferUnfaded + (MOVE_WINDOWS_START + gContestPlayerMonIndex) * 16, 16 * sizeof(u16));
+ CpuCopy32(tempPalette1, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16));
DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.cachedWindowPalettes, sizeof(eUnknownHeap1A004.cachedWindowPalettes));
- sub_80D782C();
+ LoadContestPalettes();
break;
case 6:
DrawContestantWindows();
FillContestantWindowBgs();
SwapMoveDescAndContestTilemaps();
- eContest.unk19216 = sub_80DB120();
- sub_80DC2BC();
- sub_80DC4F0();
+ eContest.judgeSpeechBubbleSpriteId = CreateJudgeSpeechBubbleSprite();
+ CreateSliderHeartSprites();
+ CreateNextTurnSprites();
CreateApplauseMeterSprite();
- sub_80DC5E8();
- sub_80DC7EC();
+ CreateJudgeAttentionEyeTask();
+ CreateUnusedBlendTask();
gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT;
gBattlerPositions[3] = B_POSITION_PLAYER_RIGHT;
gBattleTypeFlags = 0;
- gBattlerAttacker = 2;
- gBattlerTarget = 3;
- gBattlerSpriteIds[gBattlerAttacker] = sub_80DB0C4();
- sub_80DEA20();
+ gBattlerAttacker = B_POSITION_PLAYER_RIGHT;
+ gBattlerTarget = B_POSITION_OPPONENT_RIGHT;
+ // Unclear why judge sprite is assigned here
+ // Overwritten in APPEALSTATE_SLIDE_MON_IN with the attacking contest mon
+ gBattlerSpriteIds[gBattlerAttacker] = CreateJudgeSprite();
+ CreateInvisibleBattleTargetSprite();
CopyBgTilemapBufferToVram(3);
CopyBgTilemapBufferToVram(2);
CopyBgTilemapBufferToVram(1);
@@ -1221,18 +1372,18 @@ static bool8 SetupContestGraphics(u8 *stateVar)
return FALSE;
}
-static void sub_80D80C8(u8 taskId)
+static void Task_WaitToRaiseCurtainAtStart(u8 taskId)
{
gPaletteFade.bufferTransferDisabled = FALSE;
if (!gPaletteFade.active)
{
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
- gTasks[taskId].func = sub_80D8108;
+ gTasks[taskId].func = Task_RaiseCurtainAtStart;
}
}
-static void sub_80D8108(u8 taskId)
+static void Task_RaiseCurtainAtStart(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
@@ -1250,7 +1401,7 @@ static void sub_80D8108(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 2:
- sub_80DE350();
+ UpdateContestantBoxOrder();
gTasks[taskId].data[0]++;
break;
case 3:
@@ -1261,7 +1412,7 @@ static void sub_80D8108(u8 taskId)
((struct BgCnt *)&bg2Cnt)->priority = 0;
SetGpuReg(REG_OFFSET_BG0CNT, bg0Cnt);
SetGpuReg(REG_OFFSET_BG2CNT, bg2Cnt);
- StartMoveApplauseMeterOnscreen();
+ SlideApplauseMeterIn();
gTasks[taskId].data[0]++;
break;
}
@@ -1271,7 +1422,7 @@ static void sub_80D8108(u8 taskId)
break;
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
- gTasks[taskId].func = sub_80D833C;
+ gTasks[taskId].func = Task_DisplayAppealNumberText;
break;
}
}
@@ -1293,7 +1444,7 @@ static void CB2_ContestMain(void)
sContestBgCopyFlags = 0;
}
-static void vblank_cb_battle(void)
+static void VBlankCB_Contest(void)
{
SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X);
SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y);
@@ -1313,7 +1464,7 @@ static void vblank_cb_battle(void)
ScanlineEffect_InitHBlankDmaTransfer();
}
-static void sub_80D833C(u8 taskId)
+static void Task_DisplayAppealNumberText(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
{
@@ -1321,7 +1472,7 @@ static void sub_80D833C(u8 taskId)
gBattle_BG2_Y = 0;
ContestDebugDoPrint();
DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.unk18204, PLTT_BUFFER_SIZE * 2);
- ConvertIntToDecimalStringN(gStringVar1, eContest.turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
+ ConvertIntToDecimalStringN(gStringVar1, eContest.appealNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed);
else
@@ -1336,67 +1487,70 @@ static void sub_80D833C(u8 taskId)
if (!Contest_RunTextPrinters())
{
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80D8424;
+ gTasks[taskId].func = Task_TryShowMoveSelectScreen;
}
}
}
-static void sub_80D8424(u8 taskId)
+static void Task_TryShowMoveSelectScreen(u8 taskId)
{
+ // Wait for button press to show move select screen
if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys == B_BUTTON))
{
PlaySE(SE_SELECT);
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
{
- sub_80DC490(TRUE);
- gTasks[taskId].func = sub_80D8490;
+ SetBottomSliderHeartsInvisibility(TRUE);
+ gTasks[taskId].func = Task_ShowMoveSelectScreen;
}
else
{
- gTasks[taskId].func = sub_80D8894;
+ // Skip move selection (selected move will be MOVE_NONE)
+ gTasks[taskId].func = Task_SelectedMove;
}
}
}
-static void sub_80D8490(u8 taskId)
+static void Task_ShowMoveSelectScreen(u8 taskId)
{
u8 i;
- u8 sp8[32];
+ u8 moveName[32];
- gBattle_BG0_Y = 0xA0;
- gBattle_BG2_Y = 0xA0;
+ gBattle_BG0_Y = 160;
+ gBattle_BG2_Y = 160;
for (i = 0; i < MAX_MON_MOVES; i++)
{
u16 move = gContestMons[gContestPlayerMonIndex].moves[i];
- u8 *r5 = sp8;
+ u8 *moveNameBuffer = moveName;
if (eContestantStatus[gContestPlayerMonIndex].prevMove != MOVE_NONE
- && sub_80DE1E8(gContestPlayerMonIndex)
- && AreMovesContestCombo(eContestantStatus[gContestPlayerMonIndex].prevMove, move) != 0
+ && IsContestantAllowedToCombo(gContestPlayerMonIndex)
+ && AreMovesContestCombo(eContestantStatus[gContestPlayerMonIndex].prevMove, move)
&& eContestantStatus[gContestPlayerMonIndex].hasJudgesAttention)
{
- r5 = StringCopy(sp8, gText_ColorLightShadowDarkGrey);
+ // Highlight the text because it's a combo move
+ moveNameBuffer = StringCopy(moveName, gText_ColorLightShadowDarkGrey);
}
- else if (move != 0
+ else if (move != MOVE_NONE
&& eContestantStatus[gContestPlayerMonIndex].prevMove == move
&& gContestMoves[move].effect != CONTEST_EFFECT_REPETITION_NOT_BORING)
{
- // Gray the text because it is a repeated move
- r5 = StringCopy(sp8, gText_ColorBlue);
+ // Gray the text because it's a repeated move
+ moveNameBuffer = StringCopy(moveName, gText_ColorBlue);
}
- r5 = StringCopy(r5, gMoveNames[move]);
+ moveNameBuffer = StringCopy(moveNameBuffer, gMoveNames[move]);
FillWindowPixelBuffer(i + MOVE_WINDOWS_START, PIXEL_FILL(0));
- Contest_PrintTextToBg0WindowAt(i + MOVE_WINDOWS_START, sp8, 5, 1, 7);
+ Contest_PrintTextToBg0WindowAt(i + MOVE_WINDOWS_START, moveName, 5, 1, 7);
}
- sub_80D880C(eContest.playerMoveChoice);
+ DrawMoveSelectArrow(eContest.playerMoveChoice);
PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[eContest.playerMoveChoice]);
- gTasks[taskId].func = sub_80D8610;
+ gTasks[taskId].func = Task_HandleMoveSelectInput;
}
-static void sub_80D8610(u8 taskId)
+static void Task_HandleMoveSelectInput(u8 taskId)
{
u8 numMoves = 0;
s32 i;
@@ -1410,16 +1564,17 @@ static void sub_80D8610(u8 taskId)
if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- gTasks[taskId].func = sub_80D8894;
+ gTasks[taskId].func = Task_SelectedMove;
}
else
{
switch (gMain.newAndRepeatedKeys)
{
case B_BUTTON:
+ // Cancel move selection
PlaySE(SE_SELECT);
- sub_80DC490(FALSE);
- ConvertIntToDecimalStringN(gStringVar1, eContest.turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
+ SetBottomSliderHeartsInvisibility(FALSE);
+ ConvertIntToDecimalStringN(gStringVar1, eContest.appealNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed);
else
@@ -1429,29 +1584,29 @@ static void sub_80D8610(u8 taskId)
Contest_StartTextPrinter(gStringVar4, 0);
gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0;
- gTasks[taskId].func = sub_80D8424;
+ gTasks[taskId].func = Task_TryShowMoveSelectScreen;
break;
case DPAD_LEFT:
case DPAD_RIGHT:
break;
case DPAD_UP:
- sub_80D883C(eContest.playerMoveChoice);
+ EraseMoveSelectArrow(eContest.playerMoveChoice);
if (eContest.playerMoveChoice == 0)
eContest.playerMoveChoice = numMoves - 1;
else
eContest.playerMoveChoice--;
- sub_80D880C(eContest.playerMoveChoice);
+ DrawMoveSelectArrow(eContest.playerMoveChoice);
PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[eContest.playerMoveChoice]);
if (numMoves > 1)
PlaySE(SE_SELECT);
break;
case DPAD_DOWN:
- sub_80D883C(eContest.playerMoveChoice);
+ EraseMoveSelectArrow(eContest.playerMoveChoice);
if (eContest.playerMoveChoice == numMoves - 1)
eContest.playerMoveChoice = 0;
else
eContest.playerMoveChoice++;
- sub_80D880C(eContest.playerMoveChoice);
+ DrawMoveSelectArrow(eContest.playerMoveChoice);
PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[eContest.playerMoveChoice]);
if (numMoves > 1)
PlaySE(SE_SELECT);
@@ -1460,18 +1615,18 @@ static void sub_80D8610(u8 taskId)
}
}
-static void sub_80D880C(s8 a0)
+static void DrawMoveSelectArrow(s8 moveIndex)
{
- ContestBG_FillBoxWithIncrementingTile(2, 55, 0, 31 + a0 * 2, 2, 2, 17, 1);
+ ContestBG_FillBoxWithIncrementingTile(2, 55, 0, 31 + moveIndex * 2, 2, 2, 17, 1);
}
-static void sub_80D883C(s8 a0)
+static void EraseMoveSelectArrow(s8 moveIndex)
{
- ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 31 + a0 * 2, 2, 1, 17, 1);
- ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 32 + a0 * 2, 2, 1, 17, 1);
+ ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 31 + moveIndex * 2, 2, 1, 17, 1);
+ ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 32 + moveIndex * 2, 2, 1, 17, 1);
}
-static void sub_80D8894(u8 taskId)
+static void Task_SelectedMove(u8 taskId)
{
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
@@ -1479,35 +1634,35 @@ static void sub_80D8894(u8 taskId)
u8 taskId2;
eContestantStatus[gContestPlayerMonIndex].currMove = move;
- taskId2 = CreateTask(sub_80FC9F8, 0);
- SetTaskFuncWithFollowupFunc(taskId2, sub_80FC9F8, sub_80D892C);
+ taskId2 = CreateTask(Task_LinkContest_CommunicateMoveSelections, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateMoveSelections, Task_EndCommunicateMoveSelections);
gTasks[taskId].func = TaskDummy1;
ContestPrintLinkStandby();
- sub_80DC490(FALSE);
+ SetBottomSliderHeartsInvisibility(FALSE);
}
else
{
GetAllChosenMoves();
- gTasks[taskId].func = sub_80D895C;
+ gTasks[taskId].func = Task_HideMoveSelectScreen;
}
}
-static void sub_80D892C(u8 taskId)
+static void Task_EndCommunicateMoveSelections(u8 taskId)
{
DestroyTask(taskId);
- gTasks[eContest.mainTaskId].func = sub_80D895C;
+ gTasks[eContest.mainTaskId].func = Task_HideMoveSelectScreen;
}
-static void sub_80D895C(u8 taskId)
+static void Task_HideMoveSelectScreen(u8 taskId)
{
s32 i;
ContestClearGeneralTextWindow();
gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0;
- sub_80DC490(FALSE);
+ SetBottomSliderHeartsInvisibility(FALSE);
- for (i = 0; i < CONTESTANT_COUNT; i++)
+ for (i = 0; i < MAX_MON_MOVES; i++)
{
FillWindowPixelBuffer(MOVE_WINDOWS_START + i, PIXEL_FILL(0));
PutWindowTilemap(MOVE_WINDOWS_START + i);
@@ -1519,36 +1674,40 @@ static void sub_80D895C(u8 taskId)
LoadPalette(eUnknownHeap1A004.unk18204, 0, PLTT_BUFFER_SIZE * 2);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
- gTasks[taskId].func = sub_80D8A04;
+ gTasks[taskId].func = Task_HideApplauseMeterForAppealStart;
}
-static void sub_80D8A04(u8 taskId)
+static void Task_HideApplauseMeterForAppealStart(u8 taskId)
{
if (++gTasks[taskId].data[0] > 2)
{
gTasks[taskId].data[0] = 0;
if (++gTasks[taskId].data[1] == 2)
{
- TryMoveApplauseMeterOffscreen();
- sub_80DE69C(1);
- gTasks[taskId].func = sub_80D8A50;
+ SlideApplauseMeterOut();
+ AnimateSliderHearts(SLIDER_HEART_ANIM_DISAPPEAR);
+ gTasks[taskId].func = Task_WaitHideApplauseMeterForAppealStart;
}
}
}
-static void sub_80D8A50(u8 taskId)
+static void Task_WaitHideApplauseMeterForAppealStart(u8 taskId)
{
- if (!eContest.applauseMeterIsMoving && !eContest.unk1920B_1)
- gTasks[taskId].func = sub_80D8A88;
+ if (!eContest.applauseMeterIsMoving && !eContest.sliderHeartsAnimating)
+ gTasks[taskId].func = Task_AppealSetup;
}
-static void sub_80D8A88(u8 taskId)
+#define tState data[0]
+#define tMonSpriteId data[2]
+#define tCounter data[10]
+
+static void Task_AppealSetup(u8 taskId)
{
if (++gTasks[taskId].data[0] > 19)
{
- eContest.unk19214 = 0;
- eContest.unk1921C = gRngValue;
- if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) && sub_80DA8A4())
+ eContest.turnNumber = 0;
+ eContest.unusedRng = gRngValue;
+ if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) && IsPlayerLinkLeader())
{
s32 i;
@@ -1557,498 +1716,511 @@ static void sub_80D8A88(u8 taskId)
eContestantStatus[gNumLinkContestPlayers + i].currMove = GetChosenMove(gNumLinkContestPlayers + i);
}
}
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80D8B38;
+ gTasks[taskId].tState = APPEALSTATE_START_TURN;
+ gTasks[taskId].func = Task_DoAppeals;
}
}
-static void sub_80D8B38(u8 taskId)
+static void Task_DoAppeals(u8 taskId)
{
u8 spriteId;
s32 i;
- u8 r6 = eContest.unk19215;
+ u8 contestant = eContest.currentContestant;
s8 r3;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
- case 0:
+ case APPEALSTATE_START_TURN:
ContestDebugDoPrint();
- for (i = 0; eContest.unk19214 != gContestResources->field_8->turnOrder[i]; i++)
+ for (i = 0; eContest.turnNumber != eContestAppealResults.turnOrder[i]; i++)
;
- eContest.unk19215 = i;
- r6 = eContest.unk19215;
+ eContest.currentContestant = i;
+ contestant = eContest.currentContestant;
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
u8 taskId2;
- eContest.unk1920B_2 = 1;
- if (sub_80DA8A4())
- sub_80DD080(eContest.unk19215);
- taskId2 = CreateTask(sub_80FCC88, 0);
- SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
+ eContest.waitForLink = TRUE;
+ if (IsPlayerLinkLeader())
+ CalculateAppealMoveImpact(eContest.currentContestant);
+ taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink);
ContestPrintLinkStandby();
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_LINK;
}
else
{
- sub_80DD080(eContest.unk19215);
- gTasks[taskId].data[0] = 2;
+ CalculateAppealMoveImpact(eContest.currentContestant);
+ gTasks[taskId].tState = APPEALSTATE_CHECK_SKIP_TURN;
}
return;
- case 1:
- if (!eContest.unk1920B_2)
- gTasks[taskId].data[0] = 2;
+ case APPEALSTATE_WAIT_LINK:
+ if (!eContest.waitForLink)
+ gTasks[taskId].tState = APPEALSTATE_CHECK_SKIP_TURN;
return;
- case 2:
- sub_80DF080(r6);
+ case APPEALSTATE_CHECK_SKIP_TURN:
+ SetContestLiveUpdateFlags(contestant);
ContestDebugPrintBitStrings();
- if (eContestantStatus[r6].numTurnsSkipped != 0
- || eContestantStatus[r6].noMoreTurns)
+ if (eContestantStatus[contestant].numTurnsSkipped != 0
+ || eContestantStatus[contestant].noMoreTurns)
{
- gTasks[taskId].data[0] = 31;
+ gTasks[taskId].tState = APPEALSTATE_PRINT_SKIP_TURN_MSG;
}
else
{
ContestClearGeneralTextWindow();
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 3;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_SLIDE_MON_IN;
}
return;
- case 3:
- for (i = 0; i < 4; i++)
+ case APPEALSTATE_SLIDE_MON_IN:
+ for (i = 0; i < CONTESTANT_COUNT; i++)
gBattleMonForms[i] = 0;
- memset(gContestResources->field_18, 0, sizeof(*gContestResources->field_18));
- sub_80DE9DC(eContest.unk19215);
- spriteId = sub_80DB174(
- gContestMons[eContest.unk19215].species,
- gContestMons[eContest.unk19215].otId,
- gContestMons[eContest.unk19215].personality,
- eContest.unk19215);
+ memset(gContestResources->moveAnim, 0, sizeof(*gContestResources->moveAnim));
+ SetMoveAnimAttackerData(eContest.currentContestant);
+ spriteId = CreateContestantSprite(
+ gContestMons[eContest.currentContestant].species,
+ gContestMons[eContest.currentContestant].otId,
+ gContestMons[eContest.currentContestant].personality,
+ eContest.currentContestant);
gSprites[spriteId].pos2.x = 120;
- gSprites[spriteId].callback = sub_80DA134;
- gTasks[taskId].data[2] = spriteId;
+ gSprites[spriteId].callback = SpriteCB_MonSlideIn;
+ gTasks[taskId].tMonSpriteId = spriteId;
gBattlerSpriteIds[gBattlerAttacker] = spriteId;
- sub_80DCBE8(sub_80DC9EC(eContest.unk19215), FALSE);
- gTasks[taskId].data[0] = 4;
+ BlinkContestantBox(CreateContestantBoxBlinkSprites(eContest.currentContestant), FALSE);
+ gTasks[taskId].tState = APPEALSTATE_WAIT_SLIDE_MON;
return;
- case 4:
- spriteId = gTasks[taskId].data[2];
+ case APPEALSTATE_WAIT_SLIDE_MON:
+ spriteId = gTasks[taskId].tMonSpriteId;
if (gSprites[spriteId].callback == SpriteCallbackDummy)
{
- if (!gContestResources->field_14[r6].unk2_1)
- gTasks[taskId].data[0] = 5;
+ // Once mon has slid in, also wait for box to finish blinking
+ if (!eContestGfxState[contestant].boxBlinking)
+ gTasks[taskId].tState = APPEALSTATE_PRINT_USED_MOVE_MSG;
}
return;
- case 5:
- if (eContestantStatus[r6].nervous)
+ case APPEALSTATE_PRINT_USED_MOVE_MSG:
+ if (eContestantStatus[contestant].nervous)
{
- gTasks[taskId].data[0] = 33;
+ gTasks[taskId].tState = APPEALSTATE_PRINT_TOO_NERVOUS_MSG;
}
else
{
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
- if (eContestantStatus[r6].currMove < MOVES_COUNT)
- StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
+ if (eContestantStatus[contestant].currMove < MOVES_COUNT)
+ StringCopy(gStringVar2, gMoveNames[eContestantStatus[contestant].currMove]);
else
- StringCopy(gStringVar2, sInvalidContestMoveNames[eContestantStatus[r6].moveCategory]);
+ StringCopy(gStringVar2, sInvalidContestMoveNames[eContestantStatus[contestant].moveCategory]);
StringExpandPlaceholders(gStringVar4, gText_MonAppealedWithMove);
Contest_StartTextPrinter(gStringVar4, 1);
- gTasks[taskId].data[0] = 6;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_USED_MOVE_MSG;
}
return;
- case 6:
+ case APPEALSTATE_WAIT_USED_MOVE_MSG:
if (!Contest_RunTextPrinters())
{
- eContest.unk1925E = 0;
- gTasks[taskId].data[0] = 7;
+ eContest.moveAnimTurnCount = 0;
+ gTasks[taskId].tState = APPEALSTATE_MOVE_ANIM;
}
return;
- case 7:
+ case APPEALSTATE_MOVE_ANIM:
{
- u16 move = SanitizeMove(eContestantStatus[eContest.unk19215].currMove);
-
- sub_80DE864(eContest.unk19215);
- sub_80DE9DC(eContest.unk19215);
- SelectContestMoveBankTarget(move);
+ u16 move = SanitizeMove(eContestantStatus[eContest.currentContestant].currMove);
+ SetMoveSpecificAnimData(eContest.currentContestant);
+ SetMoveAnimAttackerData(eContest.currentContestant);
+ SetMoveTargetPosition(move);
DoMoveAnim(move);
- gTasks[taskId].data[0] = 8;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_ANIM;
}
return;
- case 8:
+ case APPEALSTATE_WAIT_MOVE_ANIM:
gAnimScriptCallback();
if (!gAnimScriptActive)
{
- sub_80DE9B0(r6);
- if (eContest.unk1925E != 0)
+ ClearMoveAnimData(contestant);
+ if (eContest.moveAnimTurnCount != 0)
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 9;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_MOVE_ANIM_MULTITURN;
}
else
{
- if (!eContestantStatus[r6].hasJudgesAttention)
- sub_80DC674(r6);
- sub_80DE12C();
- gTasks[taskId].data[0] = 23;
+ if (!eContestantStatus[contestant].hasJudgesAttention)
+ StopFlashJudgeAttentionEye(contestant);
+ DrawUnnervedSymbols();
+ gTasks[taskId].tState = APPEALSTATE_TRY_PRINT_MOVE_RESULT;
}
}
return;
- case 9:
- if (gTasks[taskId].data[10]++ > 30)
+ case APPEALSTATE_MOVE_ANIM_MULTITURN:
+ if (gTasks[taskId].tCounter++ > 30)
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 7;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_MOVE_ANIM;
}
return;
- case 23:
+ case APPEALSTATE_TRY_PRINT_MOVE_RESULT:
gTasks[taskId].data[1] = 0;
- if (eContestantStatus[r6].effectStringId != CONTEST_STRING_NONE)
+ if (eContestantStatus[contestant].effectStringId != CONTEST_STRING_NONE)
{
- sub_80DD45C(r6, eContestantStatus[r6].effectStringId);
- eContestantStatus[r6].effectStringId = CONTEST_STRING_NONE;
- gTasks[taskId].data[0] = 24;
+ PrintAppealMoveResultText(contestant, eContestantStatus[contestant].effectStringId);
+ eContestantStatus[contestant].effectStringId = CONTEST_STRING_NONE;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_RESULT_MSG;
}
else
{
- if (eContestantStatus[r6].effectStringId2 != CONTEST_STRING_NONE)
+ if (eContestantStatus[contestant].effectStringId2 != CONTEST_STRING_NONE)
{
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (i != r6 && eContestantStatus[i].effectStringId != CONTEST_STRING_NONE)
+ if (i != contestant && eContestantStatus[i].effectStringId != CONTEST_STRING_NONE)
break;
}
- if (i == 4)
+ if (i == CONTESTANT_COUNT)
{
- sub_80DD45C(r6, eContestantStatus[r6].effectStringId2);
- eContestantStatus[r6].effectStringId2 = CONTEST_STRING_NONE;
- gTasks[taskId].data[0] = 24;
+ PrintAppealMoveResultText(contestant, eContestantStatus[contestant].effectStringId2);
+ eContestantStatus[contestant].effectStringId2 = CONTEST_STRING_NONE;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_RESULT_MSG;
}
else
{
- gTasks[taskId].data[0] = 48;
+ gTasks[taskId].tState = APPEALSTATE_CHECK_TURN_ORDER_MOD;
}
}
else
{
- gTasks[taskId].data[0] = 48;
+ gTasks[taskId].tState = APPEALSTATE_CHECK_TURN_ORDER_MOD;
}
}
return;
- case 24:
+ case APPEALSTATE_WAIT_MOVE_RESULT_MSG:
if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 23;
+ gTasks[taskId].tState = APPEALSTATE_TRY_PRINT_MOVE_RESULT;
return;
- case 48:
- if (eContestantStatus[r6].turnOrderModAction == 1)
+ case APPEALSTATE_CHECK_TURN_ORDER_MOD:
+ if (eContestantStatus[contestant].turnOrderModAction == 1)
{
- sub_80DD720(5);
+ DoJudgeSpeechBubble(JUDGE_SYMBOL_NUMBER_ONE);
}
- else if (eContestantStatus[r6].turnOrderModAction == 2)
+ else if (eContestantStatus[contestant].turnOrderModAction == 2)
{
- sub_80DD720(6);
+ DoJudgeSpeechBubble(JUDGE_SYMBOL_NUMBER_FOUR);
}
- else if (eContestantStatus[r6].turnOrderModAction == 3)
+ else if (eContestantStatus[contestant].turnOrderModAction == 3)
{
- sub_80DD720(7);
+ DoJudgeSpeechBubble(JUDGE_SYMBOL_QUESTION_MARK);
}
else
{
- gTasks[taskId].data[0] = 47;
+ gTasks[taskId].tState = APPEALSTATE_TRY_SHOW_NEXT_TURN_GFX;
return;
}
- gTasks[taskId].data[0] = 49;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_TURN_ORDER;
return;
- case 49:
- if (!eContest.unk1920A_4)
- gTasks[taskId].data[0] = 47;
+ case APPEALSTATE_WAIT_JUDGE_TURN_ORDER:
+ if (!eContest.waitForJudgeSpeechBubble)
+ gTasks[taskId].tState = APPEALSTATE_TRY_SHOW_NEXT_TURN_GFX;
return;
- case 47:
- sub_80DE008(TRUE);
- gTasks[taskId].data[0] = 12;
+ case APPEALSTATE_TRY_SHOW_NEXT_TURN_GFX:
+ ShowHideNextTurnGfx(TRUE);
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_MOVE_USERS_HEARTS;
return;
- case 12:
- sub_80DC028(0, eContestantStatus[r6].appeal2, r6);
- gTasks[taskId].data[0] = 13;
+ case APPEALSTATE_UPDATE_MOVE_USERS_HEARTS:
+ UpdateAppealHearts(0, eContestantStatus[contestant].appeal, contestant);
+ gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_USERS_HEARTS;
return;
- case 13:
- if (!gContestResources->field_14[eContest.unk19215].unk2_2)
- gTasks[taskId].data[0] = 35;
+ case APPEALSTATE_WAIT_MOVE_USERS_HEARTS:
+ if (!eContestGfxState[eContest.currentContestant].updatingAppealHearts)
+ gTasks[taskId].tState = APPEALSTATE_TRY_JUDGE_STAR;
return;
- case 35:
- if (eContestantStatus[r6].conditionMod == 1)
- sub_80DD720(8);
- gTasks[taskId].data[0] = 36;
+ case APPEALSTATE_TRY_JUDGE_STAR:
+ if (eContestantStatus[contestant].conditionMod == CONDITION_GAIN)
+ DoJudgeSpeechBubble(JUDGE_SYMBOL_STAR);
+ gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_STAR;
return;
- case 36:
- if (!eContest.unk1920A_4)
- gTasks[taskId].data[0] = 37;
+ case APPEALSTATE_WAIT_JUDGE_STAR:
+ if (!eContest.waitForJudgeSpeechBubble)
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_MOVE_USERS_STARS;
return;
- case 37:
- if (sub_80DB5B8(r6, 1))
+ case APPEALSTATE_UPDATE_MOVE_USERS_STARS:
+ if (UpdateConditionStars(contestant, TRUE))
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 38;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_MOVE_USERS_STARS;
}
else
{
- gTasks[taskId].data[0] = 50;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_MOVE_USERS_STATUS;
}
return;
- case 38:
- if (++gTasks[taskId].data[10] > 20)
+ case APPEALSTATE_WAIT_MOVE_USERS_STARS:
+ if (++gTasks[taskId].tCounter > 20)
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 50;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_MOVE_USERS_STATUS;
}
return;
- case 50:
- if (sub_80DB798(r6))
+ case APPEALSTATE_UPDATE_MOVE_USERS_STATUS:
+ if (DrawStatusSymbol(contestant))
PlaySE(SE_C_PASI);
- gTasks[taskId].data[0] = 25;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENTS;
return;
- case 25:
+ case APPEALSTATE_UPDATE_OPPONENTS:
gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0] = 26;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT;
return;
- case 26:
+ case APPEALSTATE_UPDATE_OPPONENT:
{
- s32 r2 = 0;
+ // Update each other contestant as a result of this move appeal
+ s32 j = 0;
- r3 = 0;
+ r3 = FALSE; // Can't get this to use local variable. Should be "needsUpdate"
for (i = gTasks[taskId].data[1]; i < CONTESTANT_COUNT; i++)
{
- r3 = 0;
- for (r2 = 0; r2 < CONTESTANT_COUNT; r2++)
+ r3 = FALSE;
+ for (j = 0; j < CONTESTANT_COUNT; j++)
{
- if (r2 != r6 && gContestantTurnOrder[r2] == i
- && eContestantStatus[r2].effectStringId != CONTEST_STRING_NONE)
+ if (j != contestant && gContestantTurnOrder[j] == i
+ && eContestantStatus[j].effectStringId != CONTEST_STRING_NONE)
{
- r3 = 1;
+ r3 = TRUE;
break;
}
}
- if (r3 != 0)
+ if (r3)
break;
}
if (r3)
{
- gTasks[taskId].data[1] = gContestantTurnOrder[r2];
- sub_80DD45C(r2, eContestantStatus[r2].effectStringId);
- eContestantStatus[r2].effectStringId = CONTEST_STRING_NONE;
- gTasks[taskId].data[0] = 27;
+ // Update contestant
+ gTasks[taskId].data[1] = gContestantTurnOrder[j];
+ PrintAppealMoveResultText(j, eContestantStatus[j].effectStringId);
+ eContestantStatus[j].effectStringId = CONTEST_STRING_NONE;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_OPPONENT_RESPONSE_MSG;
}
else
{
+ // Done updating contestants
gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 51;
- sub_80DB884();
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_TRY_PRINT_SKIP_NEXT_TURN_MSG;
+ DrawStatusSymbols();
}
}
return;
- case 27:
+ case APPEALSTATE_WAIT_OPPONENT_RESPONSE_MSG:
+ // Wait for contestants response to current appeal
+ // i.e. "Contestant managed to avert its gaze"
if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 28;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT_HEARTS;
return;
- case 28:
+ case APPEALSTATE_UPDATE_OPPONENT_HEARTS:
for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++)
;
- sub_80DC028(eContestantStatus[i].appeal2 + eContestantStatus[i].jam, -eContestantStatus[i].jam, i);
- gTasks[taskId].data[0] = 29;
+ UpdateAppealHearts(eContestantStatus[i].appeal + eContestantStatus[i].jam, -eContestantStatus[i].jam, i);
+ gTasks[taskId].tState = APPEALSTATE_WAIT_OPPONENT_HEARTS;
return;
- case 29:
+ case APPEALSTATE_WAIT_OPPONENT_HEARTS:
for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++)
;
- if (!gContestResources->field_14[i].unk2_2)
- gTasks[taskId].data[0] = 39;
+ if (!eContestGfxState[i].updatingAppealHearts)
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT_STARS;
return;
- case 39:
+ case APPEALSTATE_UPDATE_OPPONENT_STARS:
for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++)
;
- if (sub_80DB5B8(i, 1))
+ if (UpdateConditionStars(i, TRUE))
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 40;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_OPPONENT_STARS;
}
else
{
- gTasks[taskId].data[0] = 30;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT_STATUS;
}
return;
- case 40:
- if (++gTasks[taskId].data[10] > 20)
+ case APPEALSTATE_WAIT_OPPONENT_STARS:
+ if (++gTasks[taskId].tCounter > 20)
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 30;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT_STATUS;
}
return;
- case 30:
+ case APPEALSTATE_UPDATE_OPPONENT_STATUS:
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (gContestantTurnOrder[i] == gTasks[taskId].data[1])
break;
}
- if (sub_80DB798(i))
+ if (DrawStatusSymbol(i))
PlaySE(SE_C_PASI);
else
PlaySE(SE_C_SYU);
if (eContestantStatus[i].judgesAttentionWasRemoved)
{
- sub_80DC674(i);
- eContestantStatus[i].judgesAttentionWasRemoved = 0;
+ StopFlashJudgeAttentionEye(i);
+ eContestantStatus[i].judgesAttentionWasRemoved = FALSE;
}
gTasks[taskId].data[1]++;
- gTasks[taskId].data[0] = 26;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_OPPONENT;
return;
- case 51:
- if (gTasks[taskId].data[10]++ > 9)
+ case APPEALSTATE_TRY_PRINT_SKIP_NEXT_TURN_MSG:
+ if (gTasks[taskId].tCounter++ > 9)
{
- gTasks[taskId].data[10] = 0;
- if (eContestantStatus[r6].numTurnsSkipped != 0
- || eContestantStatus[r6].turnSkipped)
+ gTasks[taskId].tCounter = 0;
+ if (eContestantStatus[contestant].numTurnsSkipped != 0
+ || eContestantStatus[contestant].turnSkipped)
{
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
StringExpandPlaceholders(gStringVar4, gText_MonCantAppealNextTurn);
Contest_StartTextPrinter(gStringVar4, 1);
}
- gTasks[taskId].data[0] = 52;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_SKIP_NEXT_TURN_MSG;
}
return;
- case 52:
+ case APPEALSTATE_WAIT_SKIP_NEXT_TURN_MSG:
if (!Contest_RunTextPrinters())
{
- if (!eContestantStatus[r6].unk15_6)
- gTasks[taskId].data[0] = 17;
+ if (!eContestantStatus[contestant].usedComboMove)
+ gTasks[taskId].tState = APPEALSTATE_CHECK_REPEATED_MOVE;
else
- gTasks[taskId].data[0] = 14;
+ gTasks[taskId].tState = APPEALSTATE_PRINT_COMBO_MSG;
}
return;
- case 14:
- r3 = eContestantStatus[r6].unk16;
- if (eContestantStatus[r6].unk16 != 0)
+ case APPEALSTATE_PRINT_COMBO_MSG:
+ {
+ s8 completedCombo = eContestantStatus[contestant].completedCombo;
+ if (eContestantStatus[contestant].completedCombo)
{
+ // Finished combo
+
+ // Looks like there were originally meant to be move combos of
+ // different effectivenesses. completedCombo however is only ever 0 or 1,
+ // so in here only "Went over well" will ever be used
ContestClearGeneralTextWindow();
- if (r3 == 1)
+ if (completedCombo == 1)
Contest_StartTextPrinter(gText_AppealComboWentOverWell, TRUE);
- else if (r3 == 2)
+ else if (completedCombo == 2)
Contest_StartTextPrinter(gText_AppealComboWentOverVeryWell, TRUE);
else
Contest_StartTextPrinter(gText_AppealComboWentOverExcellently, TRUE);
- sub_80DD720(3);
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 45;
+
+ DoJudgeSpeechBubble(JUDGE_SYMBOL_TWO_EXCLAMATIONS);
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_COMBO;
}
else
{
+ // Started combo
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
StringExpandPlaceholders(gStringVar4, gText_JudgeLookedAtMonExpectantly);
Contest_StartTextPrinter(gStringVar4, 1);
- sub_80DD720(2);
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 45;
+ DoJudgeSpeechBubble(JUDGE_SYMBOL_ONE_EXCLAMATION);
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_COMBO;
}
return;
- case 45:
- if (!eContest.unk1920A_4)
+ }
+ case APPEALSTATE_WAIT_JUDGE_COMBO:
+ if (!eContest.waitForJudgeSpeechBubble)
{
- sub_80DC9B4(eContest.unk19215);
- gTasks[taskId].data[0] = 15;
+ StartStopFlashJudgeAttentionEye(eContest.currentContestant);
+ gTasks[taskId].tState = APPEALSTATE_TRY_UPDATE_HEARTS_FROM_COMBO;
}
return;
- case 15:
+ case APPEALSTATE_TRY_UPDATE_HEARTS_FROM_COMBO:
if (!Contest_RunTextPrinters())
{
- if (++gTasks[taskId].data[10] > 50)
+ if (++gTasks[taskId].tCounter > 50)
{
- if (!eContestantStatus[r6].hasJudgesAttention)
+ if (!eContestantStatus[contestant].hasJudgesAttention)
{
- sub_80DC028(
- eContestantStatus[r6].appeal2,
- eContestantStatus[r6].unk17,
- r6);
- eContestantStatus[r6].appeal2 += eContestantStatus[r6].unk17;
+ UpdateAppealHearts(
+ eContestantStatus[contestant].appeal,
+ eContestantStatus[contestant].comboAppealBonus,
+ contestant);
+ eContestantStatus[contestant].appeal += eContestantStatus[contestant].comboAppealBonus;
}
- gTasks[taskId].data[0] = 16;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_HEARTS_FROM_COMBO;
}
}
return;
- case 16:
- if (!gContestResources->field_14[r6].unk2_2)
+ case APPEALSTATE_WAIT_HEARTS_FROM_COMBO:
+ if (!eContestGfxState[contestant].updatingAppealHearts)
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 17;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_CHECK_REPEATED_MOVE;
}
return;
- case 17:
- if (eContestantStatus[r6].disappointedRepeat)
+ case APPEALSTATE_CHECK_REPEATED_MOVE:
+ if (eContestantStatus[contestant].repeatedMove)
{
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
StringExpandPlaceholders(gStringVar4, gText_RepeatedAppeal);
Contest_StartTextPrinter(gStringVar4, TRUE);
- gTasks[taskId].data[10] = 0;
- sub_80DD720(0);
- gTasks[taskId].data[0] = 46;
+ gTasks[taskId].tCounter = 0;
+ DoJudgeSpeechBubble(JUDGE_SYMBOL_SWIRL);
+ gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_REPEATED_MOVE;
}
else
{
- gTasks[taskId].data[0] = 41;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_CROWD;
}
return;
- case 46:
- if (!eContest.unk1920A_4)
- gTasks[taskId].data[0] = 19;
+ case APPEALSTATE_WAIT_JUDGE_REPEATED_MOVE:
+ if (!eContest.waitForJudgeSpeechBubble)
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_HEARTS_FROM_REPEAT;
return;
- case 19:
+ case APPEALSTATE_UPDATE_HEARTS_FROM_REPEAT:
if (!Contest_RunTextPrinters())
{
- sub_80DC028(eContestantStatus[r6].appeal2, -eContestantStatus[r6].unk18, r6);
- eContestantStatus[r6].appeal2 -= eContestantStatus[r6].unk18;
- gTasks[taskId].data[0] = 18;
+ UpdateAppealHearts(eContestantStatus[contestant].appeal, -eContestantStatus[contestant].repeatJam, contestant);
+ eContestantStatus[contestant].appeal -= eContestantStatus[contestant].repeatJam;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_HEARTS_FROM_REPEAT;
}
return;
- case 18:
+ case APPEALSTATE_WAIT_HEARTS_FROM_REPEAT:
ContestDebugDoPrint();
- if (!gContestResources->field_14[r6].unk2_2)
+ if (!eContestGfxState[contestant].updatingAppealHearts)
{
- gTasks[taskId].data[10] = 0;
+ gTasks[taskId].tCounter = 0;
ContestClearGeneralTextWindow();
- gTasks[taskId].data[0] = 41;
+ gTasks[taskId].tState = APPEALSTATE_UPDATE_CROWD;
}
return;
- case 41:
- if (gContestResources->field_10->excitementFrozen && r6 != gContestResources->field_10->excitementFreezer)
+ case APPEALSTATE_UPDATE_CROWD:
+ if (eContestExcitement.frozen && contestant != eContestExcitement.freezer)
{
- gTasks[taskId].data[0] = 57;
+ gTasks[taskId].tState = APPEALSTATE_PRINT_CROWD_WATCHES_MSG;
}
else
{
- r3 = gContestResources->field_10->bits_0;
- if (eContestantStatus[r6].overrideCategoryExcitementMod)
+ r3 = eContestExcitement.moveExcitement; // Can't get this to use local variable. Should be "moveExcitement"
+ if (eContestantStatus[contestant].overrideCategoryExcitementMod)
{
r3 = 1;
- StringCopy(gStringVar3, gMoveNames[eContestantStatus[r6].currMove]);
+ StringCopy(gStringVar3, gMoveNames[eContestantStatus[contestant].currMove]);
}
else
{
- StringCopy(gStringVar3, sContestConditions[gContestMoves[eContestantStatus[r6].currMove].contestCategory]);
- }
- if (r3 > 0)
- {
- if (eContestantStatus[r6].disappointedRepeat)
- r3 = 0;
+ StringCopy(gStringVar3, sContestConditions[gContestMoves[eContestantStatus[contestant].currMove].contestCategory]);
}
+
+ if (r3 > 0 && eContestantStatus[contestant].repeatedMove)
+ r3 = 0;
+
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
eContest.applauseLevel += r3;
if (eContest.applauseLevel < 0)
eContest.applauseLevel = 0;
if (r3 == 0)
{
- gTasks[taskId].data[0] = 55;
+ gTasks[taskId].tState = APPEALSTATE_SLIDE_APPLAUSE_OUT;
}
else
{
@@ -2059,28 +2231,28 @@ static void sub_80D8B38(u8 taskId)
else
StringExpandPlaceholders(gStringVar4, gText_MonsXGotTheCrowdGoing);
Contest_StartTextPrinter(gStringVar4, 1);
- gTasks[taskId].data[10] = 0;
+ gTasks[taskId].tCounter = 0;
gTasks[taskId].data[11] = 0;
if (r3 < 0)
- gTasks[taskId].data[0] = 53;
+ gTasks[taskId].tState = APPEALSTATE_DO_CROWD_UNEXCITED;
else
- gTasks[taskId].data[0] = 54;
+ gTasks[taskId].tState = APPEALSTATE_DO_CROWD_EXCITED;
}
}
return;
- case 53:
- switch (gTasks[taskId].data[10])
+ case APPEALSTATE_DO_CROWD_UNEXCITED:
+ switch (gTasks[taskId].tCounter)
{
case 0:
- sub_80DDED0(-1, 1);
+ BlendAudienceBackground(-1, 1);
PlayFanfare(MUS_ME_ZANNEN);
- gTasks[taskId].data[10]++;
+ gTasks[taskId].tCounter++;
break;
case 1:
- if (!eContest.unk1920B_0 && !Contest_RunTextPrinters())
+ if (!eContest.waitForAudienceBlend && !Contest_RunTextPrinters())
{
ShowAndUpdateApplauseMeter(-1);
- gTasks[taskId].data[10]++;
+ gTasks[taskId].tCounter++;
}
break;
case 2:
@@ -2089,38 +2261,38 @@ static void sub_80D8B38(u8 taskId)
if (gTasks[taskId].data[11]++ > 29)
{
gTasks[taskId].data[11] = 0;
- sub_80DDED0(-1, -1);
- gTasks[taskId].data[10]++;
+ BlendAudienceBackground(-1, -1);
+ gTasks[taskId].tCounter++;
}
}
break;
case 3:
if (!gPaletteFade.active)
{
- gTasks[taskId].data[10] = 0;
+ gTasks[taskId].tCounter = 0;
gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[0] = 43;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_EXCITEMENT_HEARTS;
}
break;
}
return;
- case 54:
- switch (gTasks[taskId].data[10])
+ case APPEALSTATE_DO_CROWD_EXCITED:
+ switch (gTasks[taskId].tCounter)
{
case 0:
if (!Contest_RunTextPrinters())
{
- sub_80DDED0(1, 1);
- gTasks[taskId].data[10]++;
+ BlendAudienceBackground(1, 1);
+ gTasks[taskId].tCounter++;
}
break;
case 1:
- if (!eContest.unk1920B_0)
+ if (!eContest.waitForAudienceBlend)
{
- sub_80DDE0C();
+ AnimateAudience();
PlaySE(SE_W227B);
ShowAndUpdateApplauseMeter(1);
- gTasks[taskId].data[10]++;
+ gTasks[taskId].tCounter++;
}
break;
case 2:
@@ -2129,83 +2301,83 @@ static void sub_80D8B38(u8 taskId)
if (gTasks[taskId].data[11]++ > 29)
{
gTasks[taskId].data[11] = 0;
- sub_80DC028(eContestantStatus[r6].appeal2, gContestResources->field_10->unk2, r6);
- eContestantStatus[r6].appeal2 += gContestResources->field_10->unk2;
- gTasks[taskId].data[10]++;
+ UpdateAppealHearts(eContestantStatus[contestant].appeal, eContestExcitement.excitementAppealBonus, contestant);
+ eContestantStatus[contestant].appeal += eContestExcitement.excitementAppealBonus;
+ gTasks[taskId].tCounter++;
}
}
break;
case 3:
- if (!gContestResources->field_14[r6].unk2_2)
+ if (!eContestGfxState[contestant].updatingAppealHearts)
{
- if (!eContest.unk1920A_7)
+ if (!eContest.animatingAudience)
{
- sub_80DDED0(1, -1);
- gTasks[taskId].data[10]++;
+ BlendAudienceBackground(1, -1);
+ gTasks[taskId].tCounter++;
}
}
break;
case 4:
if (!gPaletteFade.active)
{
- gTasks[taskId].data[10] = 0;
+ gTasks[taskId].tCounter = 0;
gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[0] = 43;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_EXCITEMENT_HEARTS;
}
break;
}
return;
- case 43:
- if (!gContestResources->field_14[r6].unk2_2)
+ case APPEALSTATE_WAIT_EXCITEMENT_HEARTS:
+ if (!eContestGfxState[contestant].updatingAppealHearts)
{
ContestClearGeneralTextWindow();
- gTasks[taskId].data[0] = 55;
+ gTasks[taskId].tState = APPEALSTATE_SLIDE_APPLAUSE_OUT;
}
return;
- case 57:
+ case APPEALSTATE_PRINT_CROWD_WATCHES_MSG:
ContestClearGeneralTextWindow();
- StringCopy(gStringVar3, gContestMons[gContestResources->field_10->excitementFreezer].nickname);
- StringCopy(gStringVar1, gContestMons[r6].nickname);
- StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]);
+ StringCopy(gStringVar3, gContestMons[eContestExcitement.freezer].nickname);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
+ StringCopy(gStringVar2, gMoveNames[eContestantStatus[contestant].currMove]);
StringExpandPlaceholders(gStringVar4, gText_CrowdContinuesToWatchMon);
Contest_StartTextPrinter(gStringVar4, TRUE);
- gTasks[taskId].data[0] = 58;
+ gTasks[taskId].tState = APPEALSTATE_PRINT_MON_MOVE_IGNORED_MSG;
return;
- case 58:
+ case APPEALSTATE_PRINT_MON_MOVE_IGNORED_MSG:
if (!Contest_RunTextPrinters())
{
ContestClearGeneralTextWindow();
StringExpandPlaceholders(gStringVar4, gText_MonsMoveIsIgnored);
Contest_StartTextPrinter(gStringVar4, TRUE);
- gTasks[taskId].data[0] = 59;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_MON_MOVE_IGNORED_MSG;
}
return;
- case 59:
+ case APPEALSTATE_WAIT_MON_MOVE_IGNORED_MSG:
if (!Contest_RunTextPrinters())
{
ContestClearGeneralTextWindow();
- gTasks[taskId].data[0] = 55;
+ gTasks[taskId].tState = APPEALSTATE_SLIDE_APPLAUSE_OUT;
}
return;
- case 33:
- if (eContestantStatus[r6].hasJudgesAttention)
- eContestantStatus[r6].hasJudgesAttention = 0;
- sub_80DC9B4(r6);
- StringCopy(gStringVar1, gContestMons[r6].nickname);
- StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]);
+ case APPEALSTATE_PRINT_TOO_NERVOUS_MSG:
+ if (eContestantStatus[contestant].hasJudgesAttention)
+ eContestantStatus[contestant].hasJudgesAttention = FALSE;
+ StartStopFlashJudgeAttentionEye(contestant);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
+ StringCopy(gStringVar2, gMoveNames[eContestantStatus[contestant].currMove]);
StringExpandPlaceholders(gStringVar4, gText_MonWasTooNervousToMove);
Contest_StartTextPrinter(gStringVar4, TRUE);
- gTasks[taskId].data[0] = 34;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_TOO_NERVOUS_MSG;
return;
- case 34:
+ case APPEALSTATE_WAIT_TOO_NERVOUS_MSG:
if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 55;
+ gTasks[taskId].tState = APPEALSTATE_SLIDE_APPLAUSE_OUT;
return;
- case 55:
- TryMoveApplauseMeterOffscreen();
- gTasks[taskId].data[0] = 56;
+ case APPEALSTATE_SLIDE_APPLAUSE_OUT:
+ SlideApplauseMeterOut();
+ gTasks[taskId].tState = APPEALSTATE_WAIT_SLIDE_APPLAUSE;
return;
- case 56:
+ case APPEALSTATE_WAIT_SLIDE_APPLAUSE:
if (!eContest.applauseMeterIsMoving)
{
if (eContest.applauseLevel > 4)
@@ -2213,68 +2385,68 @@ static void sub_80D8B38(u8 taskId)
eContest.applauseLevel = 0;
UpdateApplauseMeter();
}
- gTasks[taskId].data[0] = 10;
+ gTasks[taskId].tState = APPEALSTATE_SLIDE_MON_OUT;
}
return;
- case 10:
- spriteId = gTasks[taskId].data[2];
- gSprites[spriteId].callback = sub_80DA164;
- gTasks[taskId].data[0] = 11;
+ case APPEALSTATE_SLIDE_MON_OUT:
+ spriteId = gTasks[taskId].tMonSpriteId;
+ gSprites[spriteId].callback = SpriteCB_MonSlideOut;
+ gTasks[taskId].tState = APPEALSTATE_FREE_MON_SPRITE;
return;
- case 11:
- spriteId = gTasks[taskId].data[2];
+ case APPEALSTATE_FREE_MON_SPRITE:
+ spriteId = gTasks[taskId].tMonSpriteId;
if (gSprites[spriteId].invisible)
{
FreeSpriteOamMatrix(&gSprites[spriteId]);
DestroySprite(&gSprites[spriteId]);
- gTasks[taskId].data[0] = 20;
+ gTasks[taskId].tState = APPEALSTATE_START_TURN_END_DELAY;
}
return;
- case 20:
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 21;
+ case APPEALSTATE_START_TURN_END_DELAY:
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_TURN_END_DELAY;
return;
- case 31:
+ case APPEALSTATE_PRINT_SKIP_TURN_MSG:
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
StringExpandPlaceholders(gStringVar4, gText_MonWasWatchingOthers);
Contest_StartTextPrinter(gStringVar4, TRUE);
- gTasks[taskId].data[0] = 32;
+ gTasks[taskId].tState = APPEALSTATE_WAIT_SKIP_TURN_MSG;
return;
- case 32:
+ case APPEALSTATE_WAIT_SKIP_TURN_MSG:
if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 21;
+ gTasks[taskId].tState = APPEALSTATE_TURN_END_DELAY;
return;
- case 21:
- if (++gTasks[taskId].data[10] > 29)
+ case APPEALSTATE_TURN_END_DELAY:
+ if (++gTasks[taskId].tCounter > 29)
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 22;
+ gTasks[taskId].tCounter = 0;
+ gTasks[taskId].tState = APPEALSTATE_START_NEXT_TURN;
}
return;
- case 22:
- if (++eContest.unk19214 == 4)
+ case APPEALSTATE_START_NEXT_TURN:
+ if (++eContest.turnNumber == CONTESTANT_COUNT)
{
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80DA198;
+ gTasks[taskId].tMonSpriteId = 0;
+ gTasks[taskId].func = Task_FinishRoundOfAppeals;
}
else
{
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = APPEALSTATE_START_TURN;
}
return;
}
}
-static void sub_80DA110(u8 taskId)
+static void Task_EndWaitForLink(u8 taskId)
{
- eContest.unk1920B_2 = 0;
+ eContest.waitForLink = FALSE;
DestroyTask(taskId);
}
-static void sub_80DA134(struct Sprite *sprite)
+static void SpriteCB_MonSlideIn(struct Sprite *sprite)
{
if (sprite->pos2.x != 0)
{
@@ -2290,7 +2462,7 @@ static void sub_80DA134(struct Sprite *sprite)
}
}
-static void sub_80DA164(struct Sprite *sprite)
+static void SpriteCB_MonSlideOut(struct Sprite *sprite)
{
sprite->pos2.x -= 6;
if (sprite->pos1.x + sprite->pos2.x < -32)
@@ -2300,7 +2472,7 @@ static void sub_80DA164(struct Sprite *sprite)
}
}
-static void sub_80DA198(u8 taskId)
+static void Task_FinishRoundOfAppeals(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
@@ -2309,57 +2481,57 @@ static void sub_80DA198(u8 taskId)
{
u8 taskId2;
- eContest.unk1920B_2 = 1;
- if (sub_80DA8A4())
+ eContest.waitForLink = TRUE;
+ if (IsPlayerLinkLeader())
{
RankContestants();
- sub_80DBA18();
+ SetAttentionLevels();
}
- taskId2 = CreateTask(sub_80FCC88, 0);
- SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
+ taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink);
ContestPrintLinkStandby();
gTasks[taskId].data[0] = 1;
}
else
{
RankContestants();
- sub_80DBA18();
+ SetAttentionLevels();
gTasks[taskId].data[0] = 2;
}
break;
case 1:
- if (!eContest.unk1920B_2)
+ if (!eContest.waitForLink)
gTasks[taskId].data[0] = 2;
break;
case 2:
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80DA25C;
+ gTasks[taskId].func = Task_ReadyUpdateHeartSliders;
break;
}
}
-static void sub_80DA25C(u8 taskId)
+static void Task_ReadyUpdateHeartSliders(u8 taskId)
{
- sub_80DE008(FALSE);
+ ShowHideNextTurnGfx(FALSE);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
- gTasks[taskId].func = sub_80DA28C;
+ gTasks[taskId].func = Task_UpdateHeartSliders;
}
-static void sub_80DA28C(u8 taskId)
+static void Task_UpdateHeartSliders(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
case 0:
if (++gTasks[taskId].data[1] > 20)
{
- sub_80DE69C(2);
+ AnimateSliderHearts(SLIDER_HEART_ANIM_APPEAR);
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[0]++;
}
break;
case 1:
- if (!eContest.unk1920B_1)
+ if (!eContest.sliderHeartsAnimating)
{
if (++gTasks[taskId].data[1] > 20)
{
@@ -2369,17 +2541,17 @@ static void sub_80DA28C(u8 taskId)
}
break;
case 2:
- sub_80DC3AC();
+ UpdateHeartSliders();
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
- gTasks[taskId].func = sub_80DA31C;
+ gTasks[taskId].func = Task_WaitForHeartSliders;
break;
}
}
-static void sub_80DA31C(u8 taskId)
+static void Task_WaitForHeartSliders(u8 taskId)
{
- if (sub_80DC3C4())
+ if (SlidersDoneUpdating())
gTasks[taskId].func = sub_80DA348;
}
@@ -2388,20 +2560,20 @@ static void sub_80DA348(u8 taskId)
DmaCopy32Defvars(3, eUnknownHeap1A004.unk18204, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 2;
- gTasks[taskId].func = sub_80DA38C;
+ gTasks[taskId].func = Task_WaitPrintRoundResult;
}
-static void sub_80DA38C(u8 taskId)
+static void Task_WaitPrintRoundResult(u8 taskId)
{
if (++gTasks[taskId].data[0] > 2)
{
gTasks[taskId].data[0] = 0;
if (--gTasks[taskId].data[1] == 0)
- gTasks[taskId].func = sub_80DA3CC;
+ gTasks[taskId].func = Task_PrintRoundResultText;
}
}
-static void sub_80DA3CC(u8 taskId)
+static void Task_PrintRoundResultText(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
{
@@ -2418,44 +2590,44 @@ static void sub_80DA3CC(u8 taskId)
if (!Contest_RunTextPrinters())
{
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80DA464;
+ gTasks[taskId].func = Task_ReUpdateHeartSliders;
ContestDebugDoPrint();
}
}
}
-static void sub_80DA464(u8 taskId)
+static void Task_ReUpdateHeartSliders(u8 taskId)
{
if (gTasks[taskId].data[0]++ > 29)
{
gTasks[taskId].data[0] = 0;
- sub_80DC3AC();
- gTasks[taskId].func = sub_80DA49C;
+ UpdateHeartSliders(); // ? Sliders have already been updated
+ gTasks[taskId].func = Task_WaitForHeartSlidersAgain;
}
}
-static void sub_80DA49C(u8 taskId)
+static void Task_WaitForHeartSlidersAgain(u8 taskId)
{
- if (sub_80DC3C4())
+ if (SlidersDoneUpdating())
{
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80DA4CC;
+ gTasks[taskId].func = Task_DropCurtainAtRoundEnd;
}
}
-static void sub_80DA4CC(u8 taskId)
+static void Task_DropCurtainAtRoundEnd(u8 taskId)
{
- sub_80DE224();
- gTasks[taskId].func = sub_80DE424;
+ SetBgForCurtainDrop();
+ gTasks[taskId].func = Task_StartDropCurtainAtRoundEnd;
}
-static void sub_80DA4F4(u8 taskId)
+static void Task_UpdateContestantBoxOrder(u8 taskId)
{
- sub_80DE350();
- gTasks[taskId].func = sub_80DA51C;
+ UpdateContestantBoxOrder();
+ gTasks[taskId].func = Task_TryStartNextRoundOfAppeals;
}
-static void sub_80DA51C(u8 taskId)
+static void Task_TryStartNextRoundOfAppeals(u8 taskId)
{
vu16 sp0 = GetGpuReg(REG_OFFSET_BG0CNT);
vu16 sp2 = GetGpuReg(REG_OFFSET_BG2CNT);
@@ -2463,114 +2635,114 @@ static void sub_80DA51C(u8 taskId)
((vBgCnt *)&sp2)->priority = 0;
SetGpuReg(REG_OFFSET_BG0CNT, sp0);
SetGpuReg(REG_OFFSET_BG2CNT, sp2);
- eContest.turnNumber++;
- if (eContest.turnNumber == 5)
+ eContest.appealNumber++;
+ if (eContest.appealNumber == CONTEST_NUM_APPEALS)
{
- gTasks[taskId].func = sub_80DA5E8;
+ gTasks[taskId].func = Task_EndAppeals;
}
else
{
- StartMoveApplauseMeterOnscreen();
- gTasks[taskId].func = sub_80DA5B4;
+ SlideApplauseMeterIn();
+ gTasks[taskId].func = Task_StartNewRoundOfAppeals;
}
}
-static void sub_80DA5B4(u8 taskId)
+static void Task_StartNewRoundOfAppeals(u8 taskId)
{
if (!eContest.applauseMeterIsMoving)
- gTasks[taskId].func = sub_80D833C;
+ gTasks[taskId].func = Task_DisplayAppealNumberText;
}
-static void sub_80DA5E8(u8 taskId)
+static void Task_EndAppeals(u8 taskId)
{
s32 i;
gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0;
for (i = 0; i < CONTESTANT_COUNT; i++)
- gUnknown_02039F10[i] = eContestantStatus[i].pointTotal;
+ gContestMonAppealPointTotals[i] = eContestantStatus[i].pointTotal;
CalculateFinalScores();
ContestClearGeneralTextWindow();
if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK))
BravoTrainerPokemonProfile_BeforeInterview1(eContestantStatus[gContestPlayerMonIndex].prevMove);
else
{
- sub_80DF250();
- sub_80DF4F8();
+ CalculateContestLiveUpdateData();
+ SetConestLiveUpdateTVData();
ContestDebugPrintBitStrings();
}
gContestRngValue = gRngValue;
StringExpandPlaceholders(gStringVar4, gText_AllOutOfAppealTime);
Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80DA6B4;
+ gTasks[taskId].func = Task_WaitForOutOfTimeMsg;
}
-static void sub_80DA6B4(u8 taskId)
+static void Task_WaitForOutOfTimeMsg(u8 taskId)
{
if (!Contest_RunTextPrinters())
{
- sub_80DE224();
+ SetBgForCurtainDrop();
gBattle_BG1_X = 0;
gBattle_BG1_Y = 160;
PlaySE12WithPanning(SE_C_MAKU_D, 0);
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80DA700;
+ gTasks[taskId].func = Task_DropCurtainAtAppealsEnd;
}
}
-static void sub_80DA700(u8 taskId)
+static void Task_DropCurtainAtAppealsEnd(u8 taskId)
{
gBattle_BG1_Y -= 7;
if ((s16)gBattle_BG1_Y < 0)
gBattle_BG1_Y = 0;
if (gBattle_BG1_Y == 0)
{
- gTasks[taskId].func = sub_80DA740;
+ gTasks[taskId].func = Task_TryCommunicateFinalStandings;
gTasks[taskId].data[0] = 0;
}
}
-static void sub_80DA740(u8 taskId)
+static void Task_TryCommunicateFinalStandings(u8 taskId)
{
if (gTasks[taskId].data[0]++ >= 50)
{
gTasks[taskId].data[0] = 0;
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
- gTasks[taskId].func = sub_80DA7A0;
+ gTasks[taskId].func = Task_CommunicateFinalStandings;
}
else
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gTasks[taskId].func = sub_80DA830;
+ gTasks[taskId].func = Task_ContestReturnToField;
}
}
}
-static void sub_80DA7A0(u8 taskId)
+static void Task_CommunicateFinalStandings(u8 taskId)
{
- u8 taskId2 = CreateTask(sub_80FCACC, 0);
+ u8 taskId2 = CreateTask(Task_LinkContest_CommunicateFinalStandings, 0);
- SetTaskFuncWithFollowupFunc(taskId2, sub_80FCACC, sub_80DA7EC);
+ SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateFinalStandings, Task_EndCommunicateFinalStandings);
gTasks[taskId].func = TaskDummy1;
ContestPrintLinkStandby();
- sub_80DC490(FALSE);
+ SetBottomSliderHeartsInvisibility(FALSE);
}
-static void sub_80DA7EC(u8 taskId)
+static void Task_EndCommunicateFinalStandings(u8 taskId)
{
DestroyTask(taskId);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gTasks[eContest.mainTaskId].func = sub_80DA830;
+ gTasks[eContest.mainTaskId].func = Task_ContestReturnToField;
}
-static void sub_80DA830(u8 taskId)
+static void Task_ContestReturnToField(u8 taskId)
{
if (!gPaletteFade.active)
{
DestroyTask(taskId);
- gFieldCallback = sub_80DA874;
+ gFieldCallback = FieldCB_ContestReturnToField;
FreeAllWindowBuffers();
FreeContestResources();
FreeMonSpritesGfx();
@@ -2578,7 +2750,7 @@ static void sub_80DA830(u8 taskId)
}
}
-static void sub_80DA874(void)
+static void FieldCB_ContestReturnToField(void)
{
ScriptContext2_Disable();
EnableBothScriptContexts();
@@ -2587,17 +2759,17 @@ static void sub_80DA874(void)
static void TryPutPlayerLast(void)
{
if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK))
- gContestPlayerMonIndex = 3;
+ gContestPlayerMonIndex = CONTESTANT_COUNT - 1;
}
-static bool8 sub_80DA8A4(void)
+static bool8 IsPlayerLinkLeader(void)
{
- if (gContestPlayerMonIndex == gUnknown_02039F2B)
+ if (gContestPlayerMonIndex == gContestLinkLeaderIndex)
return TRUE;
return FALSE;
}
-void sub_80DA8C8(u8 partyIndex)
+void CreateContestMonFromParty(u8 partyIndex)
{
u8 name[20];
u16 heldItem;
@@ -2610,7 +2782,7 @@ void sub_80DA8C8(u8 partyIndex)
StringCopy(name, gSaveBlock2Ptr->playerName);
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
- sub_80DF9D4(name);
+ StripPlayerNameForLinkContest(name);
}
memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, 8);
if (gSaveBlock2Ptr->playerGender == MALE)
@@ -2618,13 +2790,13 @@ void sub_80DA8C8(u8 partyIndex)
else
gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_MAY;
gContestMons[gContestPlayerMonIndex].aiChecks = 0;
- gContestMons[gContestPlayerMonIndex].unk2C[0] = 0;
+ gContestMons[gContestPlayerMonIndex].highestRank = 0;
gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES);
GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name);
StringGetEnd10(name);
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
- sub_80DF9E0(name, GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE));
+ StripMonNameForLinkContest(name, GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE));
}
memcpy(gContestMons[gContestPlayerMonIndex].nickname, name, POKEMON_NAME_LENGTH + 1);
StringCopy(gContestMons[gContestPlayerMonIndex].nickname, name);
@@ -2674,33 +2846,33 @@ void sub_80DA8C8(u8 partyIndex)
gContestMons[gContestPlayerMonIndex].tough = tough;
}
-void sub_80DAB8C(u8 contestType, u8 rank)
+void SetContestants(u8 contestType, u8 rank)
{
s32 i;
u8 opponentsCount = 0;
u8 opponents[100];
- bool8 r7 = FALSE;
- const u8 * r3;
+ bool8 allowPostgameContestants = FALSE;
+ const u8 * filter;
TryPutPlayerLast();
if (FlagGet(FLAG_SYS_GAME_CLEAR) && !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK))
- r7 = TRUE;
+ allowPostgameContestants = TRUE;
// Find all suitable opponents
- r3 = gPostgameContestOpponentFilter;
+ filter = gPostgameContestOpponentFilter;
for (i = 0; i < ARRAY_COUNT(gContestOpponents); i++)
{
if (rank == gContestOpponents[i].whichRank)
{
- if (r7 == TRUE)
+ if (allowPostgameContestants == TRUE)
{
- if (r3[i] == 1)
+ if (filter[i] == CONTEST_FILTER_NO_POSTGAME)
continue;
}
else
{
- if (r3[i] == 2)
+ if (filter[i] == CONTEST_FILTER_ONLY_POSTGAME)
continue;
}
if (contestType == CONTEST_CATEGORY_COOL && gContestOpponents[i].aiPool_Cool)
@@ -2718,7 +2890,7 @@ void sub_80DAB8C(u8 contestType, u8 rank)
opponents[opponentsCount] = 0xFF;
// Choose three random opponents from the list
- for (i = 0; i < 3; i++)
+ for (i = 0; i < CONTESTANT_COUNT - 1; i++)
{
u16 rnd = Random() % opponentsCount;
s32 j;
@@ -2729,18 +2901,19 @@ void sub_80DAB8C(u8 contestType, u8 rank)
opponentsCount--;
}
- sub_80DA8C8(gContestMonPartyIndex);
+ CreateContestMonFromParty(gContestMonPartyIndex);
}
-void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame)
+void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame)
{
s32 i, j;
u8 opponentsCount = 0;
u8 opponents[100];
- if (gNumLinkContestPlayers == 4)
+ if (gNumLinkContestPlayers == CONTESTANT_COUNT)
return;
+ // Find all suitable AI opponents
for (i = 0; i < ARRAY_COUNT(gContestOpponents); i++)
{
if (rank != gContestOpponents[i].whichRank)
@@ -2764,13 +2937,15 @@ void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame)
opponents[opponentsCount++] = i;
}
opponents[opponentsCount] = 0xFF;
+
+ // Fill remaining contestant slots with random AI opponents from the list
for (i = 0; i < CONTESTANT_COUNT - gNumLinkContestPlayers; i++)
{
u16 rnd = GetContestRand() % opponentsCount;
gContestMons[gNumLinkContestPlayers + i] = gContestOpponents[opponents[rnd]];
- sub_80DF9D4(gContestMons[gNumLinkContestPlayers + i].trainerName);
- sub_80DF9E0(gContestMons[gNumLinkContestPlayers + i].nickname, GAME_LANGUAGE);
+ StripPlayerNameForLinkContest(gContestMons[gNumLinkContestPlayers + i].trainerName);
+ StripMonNameForLinkContest(gContestMons[gNumLinkContestPlayers + i].nickname, GAME_LANGUAGE);
for (j = rnd; opponents[j] != 0xFF; j++)
opponents[j] = opponents[j + 1];
opponentsCount--;
@@ -2870,7 +3045,7 @@ static void PrintContestantMonNameWithColor(u8 contestant, u8 color)
Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[contestant], gDisplayedStringBattle, 5, 1, 7);
}
-static u16 sub_80DAFE0(u8 who, u8 contestCategory)
+static u16 CalculateContestantRound1Points(u8 who, u8 contestCategory)
{
u8 statMain;
u8 statSub1;
@@ -2908,47 +3083,47 @@ static u16 sub_80DAFE0(u8 who, u8 contestCategory)
return statMain + (statSub1 + statSub2 + gContestMons[who].sheen) / 2;
}
-void sub_80DB09C(u8 contestCategory)
+void CalculateRound1Points(u8 contestCategory)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- gContestMonConditions[i] = sub_80DAFE0(i, contestCategory);
+ gContestMonRound1Points[i] = CalculateContestantRound1Points(i, contestCategory);
}
-static u8 sub_80DB0C4(void)
+static u8 CreateJudgeSprite(void)
{
u8 spriteId;
- LoadCompressedSpriteSheet(&gUnknown_08587C00);
+ LoadCompressedSpriteSheet(&sSpriteSheet_Judge);
LoadCompressedPalette(gContest2Pal, 0x110, 32);
- spriteId = CreateSprite(&gSpriteTemplate_8587BE8, 112, 36, 30);
+ spriteId = CreateSprite(&sSpriteTemplate_Judge, 112, 36, 30);
gSprites[spriteId].oam.paletteNum = 1;
gSprites[spriteId].callback = SpriteCallbackDummy;
return spriteId;
}
-static u8 sub_80DB120(void)
+static u8 CreateJudgeSpeechBubbleSprite(void)
{
u8 spriteId;
- LoadCompressedSpriteSheet(&gUnknown_08587C08);
- LoadCompressedSpritePalette(&gUnknown_08587C10);
- spriteId = CreateSprite(&gSpriteTemplate_8587C18, 96, 10, 29);
+ LoadCompressedSpriteSheet(&sSpriteSheet_JudgeSymbols);
+ LoadCompressedSpritePalette(&sSpritePalette_JudgeSymbols);
+ spriteId = CreateSprite(&sSpriteTemplate_JudgeSpeechBubble, 96, 10, 29);
gSprites[spriteId].invisible = TRUE;
gSprites[spriteId].data[0] = gSprites[spriteId].oam.tileNum;
return spriteId;
}
-static u8 sub_80DB174(u16 species, u32 otId, u32 personality, u32 index)
+static u8 CreateContestantSprite(u16 species, u32 otId, u32 personality, u32 index)
{
u8 spriteId;
species = SanitizeSpecies(species);
if (index == gContestPlayerMonIndex)
- HandleLoadSpecialPokePic_2(gMonBackPicTable + species, gMonSpritesGfxPtr->sprites[0], species, personality);
+ HandleLoadSpecialPokePic_2(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites[0], species, personality);
else
- HandleLoadSpecialPokePic_DontHandleDeoxys(gMonBackPicTable + species, gMonSpritesGfxPtr->sprites[0], species, personality);
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites[0], species, personality);
LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x120, 0x20);
SetMultiuseSpriteTemplateToPokemon(species, 0);
@@ -2986,27 +3161,28 @@ static void SwapMoveDescAndContestTilemaps(void)
CpuCopy16(gContestResources->contestBgTilemaps[2], gContestResources->contestBgTilemaps[2] + 0x500, 32 * 20);
}
-static u16 sub_80DB2EC(u16 a0, u8 a1)
+// Functionally unused
+static u16 GetMoveEffectSymbolTileOffset(u16 move, u8 contestant)
{
- u16 var;
+ u16 offset;
- switch (gContestEffects[gContestMoves[a0].effect].effectType)
+ switch (gContestEffects[gContestMoves[move].effect].effectType)
{
case 0:
case 1:
case 8:
- var = 0x9082;
+ offset = 0x9082;
break;
case 2:
case 3:
- var = 0x9088;
+ offset = 0x9088;
break;
default:
- var = 0x9086;
+ offset = 0x9086;
break;
}
- var += 0x9000 + (a1 << 12);
- return var;
+ offset += 0x9000 + (contestant << 12);
+ return offset;
}
static void PrintContestMoveDescription(u16 a)
@@ -3053,158 +3229,163 @@ static void PrintContestMoveDescription(u16 a)
// Empty hearts
ContestBG_FillBoxWithTile(0, 0x5014, 0x15, 0x20, numHearts, 0x01, 0x11);
- FillWindowPixelBuffer(CONTEST_WINDOW_MOVE_DESCRIPTION, PIXEL_FILL(0));
- Contest_PrintTextToBg0WindowStd(CONTEST_WINDOW_MOVE_DESCRIPTION, gContestEffectDescriptionPointers[gContestMoves[a].effect]);
- Contest_PrintTextToBg0WindowStd(CONTEST_WINDOW_SLASH, gText_Slash);
+ FillWindowPixelBuffer(WIN_MOVE_DESCRIPTION, PIXEL_FILL(0));
+ Contest_PrintTextToBg0WindowStd(WIN_MOVE_DESCRIPTION, gContestEffectDescriptionPointers[gContestMoves[a].effect]);
+ Contest_PrintTextToBg0WindowStd(WIN_SLASH, gText_Slash);
}
-static void sub_80DB4E0(u16 move, u8 b)
+static void DrawMoveEffectSymbol(u16 move, u8 contestant)
{
- u8 r7 = gContestantTurnOrder[b] * 5 + 2;
+ u8 contestantOffset = gContestantTurnOrder[contestant] * 5 + 2;
- if (!Contest_IsMonsTurnDisabled(b) && move != MOVE_NONE)
+ if (!Contest_IsMonsTurnDisabled(contestant) && move != MOVE_NONE)
{
- u16 tile = sub_80DB2EC(move, b);
+ u16 tile = GetMoveEffectSymbolTileOffset(move, contestant);
- ContestBG_FillBoxWithIncrementingTile(0, tile, 20, r7, 2, 1, 17, 1);
- ContestBG_FillBoxWithIncrementingTile(0, tile + 16, 20, r7 + 1, 2, 1, 17, 1);
+ ContestBG_FillBoxWithIncrementingTile(0, tile, 20, contestantOffset, 2, 1, 17, 1);
+ ContestBG_FillBoxWithIncrementingTile(0, tile + 16, 20, contestantOffset + 1, 2, 1, 17, 1);
}
else
{
- ContestBG_FillBoxWithTile(0, 0, 20, r7, 2, 2, 17);
+ ContestBG_FillBoxWithTile(0, 0, 20, contestantOffset, 2, 2, 17);
}
}
-static void sub_80DB584(void)
+// Unused
+static void DrawMoveEffectSymbols(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- sub_80DB4E0(eContestantStatus[i].currMove, i);
+ DrawMoveEffectSymbol(eContestantStatus[i].currMove, i);
}
-static u16 sub_80DB5B0(void)
+static u16 GetStarTileOffset(void)
{
return 0x2034;
}
-static bool8 sub_80DB5B8(u8 contestantIdx, bool8 resetMod)
+static bool8 UpdateConditionStars(u8 contestantIdx, bool8 resetMod)
{
- u8 r6;
- s32 r4;
+ u8 contestantOffset;
+ s32 numStars;
- if (eContestantStatus[contestantIdx].conditionMod == 0)
+ if (eContestantStatus[contestantIdx].conditionMod == CONDITION_NO_CHANGE)
return FALSE;
- r6 = gContestantTurnOrder[contestantIdx] * 5 + 2;
- r4 = eContestantStatus[contestantIdx].condition / 10;
- if (eContestantStatus[contestantIdx].conditionMod == 1)
+ contestantOffset = gContestantTurnOrder[contestantIdx] * 5 + 2;
+ numStars = eContestantStatus[contestantIdx].condition / 10;
+ if (eContestantStatus[contestantIdx].conditionMod == CONDITION_GAIN)
{
- ContestBG_FillBoxWithTile(0, sub_80DB5B0(), 19, r6, 1, r4, 17);
+ ContestBG_FillBoxWithTile(0, GetStarTileOffset(), 19, contestantOffset, 1, numStars, 17);
if (resetMod)
{
PlaySE(SE_EXPMAX);
- eContestantStatus[contestantIdx].conditionMod = 0;
+ eContestantStatus[contestantIdx].conditionMod = CONDITION_NO_CHANGE;
}
}
- else
+ else // CONDITION_LOSE
{
- ContestBG_FillBoxWithTile(0, 0, 19, r6 + r4, 1, 3 - r4, 17);
+ ContestBG_FillBoxWithTile(0, 0, 19, contestantOffset + numStars, 1, 3 - numStars, 17);
if (resetMod)
{
PlaySE(SE_FU_ZAKU2);
- eContestantStatus[contestantIdx].conditionMod = 0;
+ eContestantStatus[contestantIdx].conditionMod = CONDITION_NO_CHANGE;
}
}
return TRUE;
}
-static void sub_80DB69C(void)
+static void DrawConditionStars(void)
{
s32 i;
- s32 r6;
+ s32 numStars;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- u8 r4 = gContestantTurnOrder[i] * 5 + 2;
- u16 r5 = sub_80DB5B0();
+ u8 contestantOffset = gContestantTurnOrder[i] * 5 + 2;
+ u16 starOffset = GetStarTileOffset();
- r6 = eContestantStatus[i].condition / 10;
- ContestBG_FillBoxWithTile(0, r5, 19, r4, 1, r6, 17);
- ContestBG_FillBoxWithTile(0, 0, 19, r4 + r6, 1, 3 - r6, 17);
+ numStars = eContestantStatus[i].condition / 10;
+ ContestBG_FillBoxWithTile(0, starOffset, 19, contestantOffset, 1, numStars, 17);
+ ContestBG_FillBoxWithTile(0, 0, 19, contestantOffset + numStars, 1, 3 - numStars, 17);
}
}
-static u16 sub_80DB748(u8 status)
+static u16 GetStatusSymbolTileOffset(u8 status)
{
- u16 var = 0;
+ u16 offset = 0;
switch (status)
{
- case 0:
- var = 0x80;
+ case STAT_SYMBOL_CIRCLE: // For resistant
+ offset = 0x80;
break;
- case 1:
- var = 0x84;
+ case STAT_SYMBOL_WAVE: // For nervous
+ offset = 0x84;
break;
- case 2:
- var = 0x86;
+ case STAT_SYMBOL_X: // For turn skipped
+ offset = 0x86;
break;
- case 3:
- var = 0x88;
+ case STAT_SYMBOL_SWIRL: // For jammed/unnerved
+ offset = 0x88;
break;
- case 4:
- var = 0x82;
+ case STAT_SYMBOL_SQUARE: // Never used
+ offset = 0x82;
break;
}
- var += 0x9000;
- return var;
+ offset += 0x9000;
+ return offset;
}
-static bool8 sub_80DB798(u8 a)
+static bool8 DrawStatusSymbol(u8 contestant)
{
- bool8 r9 = TRUE;
- u16 r8 = 0;
- u8 r7 = gContestantTurnOrder[a] * 5 + 2;
+ bool8 statused = TRUE;
+ u16 symbolOffset = 0;
+ u8 contestantOffset = gContestantTurnOrder[contestant] * 5 + 2;
- if (eContestantStatus[a].resistant != 0 || eContestantStatus[a].immune != 0 || eContestantStatus[a].jamSafetyCount != 0 || eContestantStatus[a].jamReduction != 0)
- r8 = sub_80DB748(0);
- else if (eContestantStatus[a].nervous)
- r8 = sub_80DB748(1);
- else if (eContestantStatus[a].numTurnsSkipped != 0 || eContestantStatus[a].noMoreTurns)
- r8 = sub_80DB748(2);
+ if (eContestantStatus[contestant].resistant
+ || eContestantStatus[contestant].immune
+ || eContestantStatus[contestant].jamSafetyCount != 0
+ || eContestantStatus[contestant].jamReduction != 0)
+ symbolOffset = GetStatusSymbolTileOffset(STAT_SYMBOL_CIRCLE);
+ else if (eContestantStatus[contestant].nervous)
+ symbolOffset = GetStatusSymbolTileOffset(STAT_SYMBOL_WAVE);
+ else if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns)
+ symbolOffset = GetStatusSymbolTileOffset(STAT_SYMBOL_X);
else
- r9 = FALSE;
- if (r9)
+ statused = FALSE;
+
+ if (statused)
{
- ContestBG_FillBoxWithIncrementingTile(0, r8, 20, r7, 2, 1, 17, 1);
- ContestBG_FillBoxWithIncrementingTile(0, r8 + 16, 20, r7 + 1, 2, 1, 17, 1);
+ ContestBG_FillBoxWithIncrementingTile(0, symbolOffset, 20, contestantOffset, 2, 1, 17, 1);
+ ContestBG_FillBoxWithIncrementingTile(0, symbolOffset + 16, 20, contestantOffset + 1, 2, 1, 17, 1);
}
else
{
- ContestBG_FillBoxWithTile(0, 0, 20, r7, 2, 2, 17);
+ ContestBG_FillBoxWithTile(0, 0, 20, contestantOffset, 2, 2, 17);
}
- return r9;
+ return statused;
}
-static void sub_80DB884(void)
+static void DrawStatusSymbols(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- sub_80DB798(i);
+ DrawStatusSymbol(i);
}
static void ContestClearGeneralTextWindow(void)
{
- FillWindowPixelBuffer(CONTEST_WINDOW_GENERAL_TEXT, PIXEL_FILL(0));
- CopyWindowToVram(CONTEST_WINDOW_GENERAL_TEXT, 2);
+ FillWindowPixelBuffer(WIN_GENERAL_TEXT, PIXEL_FILL(0));
+ CopyWindowToVram(WIN_GENERAL_TEXT, 2);
Contest_SetBgCopyFlags(0);
}
static u16 GetChosenMove(u8 contestant)
{
if (Contest_IsMonsTurnDisabled(contestant))
- return 0;
+ return MOVE_NONE;
if (contestant == gContestPlayerMonIndex)
{
return gContestMons[contestant].moves[eContest.playerMoveChoice];
@@ -3235,21 +3416,19 @@ static void RankContestants(void)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- eContestantStatus[i].pointTotal += eContestantStatus[i].appeal2;
+ eContestantStatus[i].pointTotal += eContestantStatus[i].appeal;
arr[i] = eContestantStatus[i].pointTotal;
}
// Sort the point totals using bubble-sort.
- for (i = 0; i < 3; i++)
+ for (i = 0; i < CONTESTANT_COUNT - 1; i++)
{
- for (j = 3; j > i; j--)
+ for (j = CONTESTANT_COUNT - 1; j > i; j--)
{
if (arr[j - 1] < arr[j])
{
- u16 temp = arr[j];
-
- arr[j] = arr[j - 1];
- arr[j - 1] = temp;
+ u16 temp;
+ SWAP(arr[j], arr[j - 1], temp);
}
}
}
@@ -3278,7 +3457,7 @@ static void RankContestants(void)
ApplyNextTurnOrder();
}
-static void sub_80DBA18(void)
+static void SetAttentionLevels(void)
{
s32 i;
@@ -3288,13 +3467,13 @@ static void sub_80DBA18(void)
if (eContestantStatus[i].currMove == MOVE_NONE)
attentionLevel = 5;
- else if (eContestantStatus[i].appeal2 <= 0)
+ else if (eContestantStatus[i].appeal <= 0)
attentionLevel = 0;
- else if (eContestantStatus[i].appeal2 < 30)
+ else if (eContestantStatus[i].appeal < 30)
attentionLevel = 1;
- else if (eContestantStatus[i].appeal2 < 60)
+ else if (eContestantStatus[i].appeal < 60)
attentionLevel = 2;
- else if (eContestantStatus[i].appeal2 < 80)
+ else if (eContestantStatus[i].appeal < 80)
attentionLevel = 3;
else
attentionLevel = 4;
@@ -3311,14 +3490,14 @@ static bool8 ContestantCanUseTurn(u8 contestant)
return TRUE;
}
-static void sub_80DBAA0(void)
+static void ResetContestantStatuses(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- eContestantStatus[i].appeal2 = 0;
- eContestantStatus[i].appeal1 = 0;
+ eContestantStatus[i].appeal = 0;
+ eContestantStatus[i].baseAppeal = 0;
eContestantStatus[i].jamSafetyCount = 0;
if (eContestantStatus[i].numTurnsSkipped > 0)
eContestantStatus[i].numTurnsSkipped--;
@@ -3331,9 +3510,9 @@ static void sub_80DBAA0(void)
eContestantStatus[i].nervous = FALSE;
eContestantStatus[i].effectStringId = CONTEST_STRING_NONE;
eContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE;
- eContestantStatus[i].conditionMod = 0;
- eContestantStatus[i].unk15_2 = eContestantStatus[i].disappointedRepeat;
- eContestantStatus[i].disappointedRepeat = FALSE;
+ eContestantStatus[i].conditionMod = CONDITION_NO_CHANGE;
+ eContestantStatus[i].repeatedPrevMove = eContestantStatus[i].repeatedMove;
+ eContestantStatus[i].repeatedMove = FALSE;
eContestantStatus[i].turnOrderModAction = 0;
eContestantStatus[i].appealTripleCondition = 0;
if (eContestantStatus[i].turnSkipped)
@@ -3343,24 +3522,24 @@ static void sub_80DBAA0(void)
}
if (eContestantStatus[i].exploded)
{
- eContestantStatus[i].noMoreTurns = 1;
- eContestantStatus[i].exploded = 0;
+ eContestantStatus[i].noMoreTurns = TRUE;
+ eContestantStatus[i].exploded = FALSE;
}
eContestantStatus[i].overrideCategoryExcitementMod = 0;
}
for (i = 0; i < CONTESTANT_COUNT; i++)
{
eContestantStatus[i].prevMove = eContestantStatus[i].currMove;
- eContest.moveHistory[eContest.turnNumber][i] = eContestantStatus[i].currMove;
- eContest.excitementHistory[eContest.turnNumber][i] = Contest_GetMoveExcitement(eContestantStatus[i].currMove);
+ eContest.moveHistory[eContest.appealNumber][i] = eContestantStatus[i].currMove;
+ eContest.excitementHistory[eContest.appealNumber][i] = Contest_GetMoveExcitement(eContestantStatus[i].currMove);
eContestantStatus[i].currMove = MOVE_NONE;
}
- eContestResources10.excitementFrozen = 0;
+ eContestExcitement.frozen = FALSE;
}
-bool8 Contest_IsMonsTurnDisabled(u8 a)
+bool8 Contest_IsMonsTurnDisabled(u8 contestant)
{
- if (eContestantStatus[a].numTurnsSkipped != 0 || eContestantStatus[a].noMoreTurns)
+ if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns)
return TRUE;
else
return FALSE;
@@ -3369,7 +3548,7 @@ bool8 Contest_IsMonsTurnDisabled(u8 a)
static void CalculateTotalPointsForContestant(u8 contestant)
{
gContestMonRound2Points[contestant] = GetContestantRound2Points(contestant);
- gContestMonTotalPoints[contestant] = gContestMonConditions[contestant] + gContestMonRound2Points[contestant];
+ gContestMonTotalPoints[contestant] = gContestMonRound1Points[contestant] + gContestMonRound2Points[contestant];
}
static void CalculateFinalScores(void)
@@ -3383,24 +3562,23 @@ static void CalculateFinalScores(void)
static s16 GetContestantRound2Points(u8 contestant)
{
- return gUnknown_02039F10[contestant] * 2;
+ return gContestMonAppealPointTotals[contestant] * 2;
}
static void DetermineFinalStandings(void)
{
u16 randomOrdering[CONTESTANT_COUNT] = {0};
- struct UnknownContestStruct6 sp8[CONTESTANT_COUNT];
+ struct ContestFinalStandings standings[CONTESTANT_COUNT];
s32 i;
- s32 j;
+ // Seed random order in case of ties
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- s32 r2;
-
+ s32 j;
randomOrdering[i] = Random();
- for (r2 = 0; r2 < i; r2++)
+ for (j = 0; j < i; j++)
{
- if (randomOrdering[i] == randomOrdering[r2])
+ if (randomOrdering[i] == randomOrdering[j])
{
i--;
break;
@@ -3408,42 +3586,47 @@ static void DetermineFinalStandings(void)
}
}
+ // Init data for ranking contestants
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- sp8[i].unk0 = gContestMonTotalPoints[i];
- sp8[i].unk4 = gContestMonConditions[i];
- sp8[i].unk8 = randomOrdering[i];
- sp8[i].unkC = i;
+ standings[i].totalPoints = gContestMonTotalPoints[i];
+ standings[i].round1Points = gContestMonRound1Points[i];
+ standings[i].random = randomOrdering[i];
+ standings[i].contestant = i;
}
- for (i = 0; i < 3; i++)
+ // Rank contestants
+ for (i = 0; i < CONTESTANT_COUNT - 1; i++)
{
- for (j = 3; j > i; j--)
+ s32 j;
+ for (j = CONTESTANT_COUNT - 1; j > i; j--)
{
- if (sub_80DBF30(j - 1, j, sp8))
+ if (DidContestantPlaceHigher(j - 1, j, standings))
{
- struct UnknownContestStruct6 temp;
-
- temp.unk0 = sp8[j - 1].unk0;
- temp.unk4 = sp8[j - 1].unk4;
- temp.unk8 = sp8[j - 1].unk8;
- temp.unkC = sp8[j - 1].unkC;
-
- sp8[j - 1].unk0 = sp8[j].unk0;
- sp8[j - 1].unk4 = sp8[j].unk4;
- sp8[j - 1].unk8 = sp8[j].unk8;
- sp8[j - 1].unkC = sp8[j].unkC;
-
- sp8[j].unk0 = temp.unk0;
- sp8[j].unk4 = temp.unk4;
- sp8[j].unk8 = temp.unk8;
- sp8[j].unkC = temp.unkC;
+ // 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 < CONTESTANT_COUNT; i++)
- gContestFinalStandings[sp8[i].unkC] = i;
+ gContestFinalStandings[standings[i].contestant] = i;
}
void SaveLinkContestResults(void)
@@ -3457,19 +3640,22 @@ void SaveLinkContestResults(void)
}
}
-static bool8 sub_80DBF30(s32 a, s32 b, struct UnknownContestStruct6 *c)
+static bool8 DidContestantPlaceHigher(s32 a, s32 b, struct ContestFinalStandings *standings)
{
bool8 retVal;
- if (c[a].unk0 < c[b].unk0)
+ // Rank contestants first based on total points
+ if (standings[a].totalPoints < standings[b].totalPoints)
retVal = TRUE;
- else if (c[a].unk0 > c[b].unk0)
+ else if (standings[a].totalPoints > standings[b].totalPoints)
retVal = FALSE;
- else if (c[a].unk4 < c[b].unk4)
+ // If tied, rank on round 1 points
+ else if (standings[a].round1Points < standings[b].round1Points)
retVal = TRUE;
- else if (c[a].unk4 > c[b].unk4)
+ else if (standings[a].round1Points > standings[b].round1Points)
retVal = FALSE;
- else if (c[a].unk8 < c[b].unk8)
+ // If tied again, choose randomly
+ else if (standings[a].random < standings[b].random)
retVal = TRUE;
else
retVal = FALSE;
@@ -3489,200 +3675,218 @@ static void FillContestantWindowBgs(void)
int i;
for(i = 0; i < CONTESTANT_COUNT; i++)
- {
ContestBG_FillBoxWithTile(0, 0, 0x16, 2 + i * 5, 8, 2, 0x11);
- }
}
-static u16 sub_80DBFC8(u8 a)
+static u16 GetAppealHeartTileOffset(u8 contestant)
{
- u16 var;
+ u16 offset;
- if (a == 0)
- var = 0x5011;
- else if (a == 1)
- var = 0x6011;
- else if (a == 2)
- var = 0x7011;
+ if (contestant == 0)
+ offset = 0x5011;
+ else if (contestant == 1)
+ offset = 0x6011;
+ else if (contestant == 2)
+ offset = 0x7011;
else
- var = 0x8011;
- return var + 1;
+ offset = 0x8011;
+ return offset + 1;
}
-static s8 sub_80DBFFC(s16 a)
+static s8 GetNumHeartsFromAppealPoints(s16 appeal)
{
- s8 retVal = a / 10;
+ s8 hearts = appeal / 10;
- if (retVal > 16)
- retVal = 16;
- else if (retVal < -16)
- retVal = -16;
- return retVal;
+ if (hearts > 16)
+ hearts = 16;
+ else if (hearts < -16)
+ hearts = -16;
+ return hearts;
}
-static u8 sub_80DC028(s16 a, s16 b, u8 c)
+#define tNumHearts data[0]
+#define tHeartsDelta data[1]
+#define tHeartsSign data[2]
+#define tContestant data[3]
+#define tDelayTimer data[10]
+
+static u8 UpdateAppealHearts(s16 startAppeal, s16 appealDelta, u8 contestant)
{
u8 taskId;
- s8 r4;
- s8 r5;
-
- gContestResources->field_14[c].unk2_2 = 1;
- taskId = CreateTask(sub_80DC0F4, 20);
- r4 = sub_80DBFFC(a);
- r5 = sub_80DBFFC(a + b) - r4;
- sub_80DBFC8(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;
+ s8 startHearts;
+ s8 heartsDelta;
+
+ eContestGfxState[contestant].updatingAppealHearts = TRUE;
+ taskId = CreateTask(Task_UpdateAppealHearts, 20);
+ startHearts = GetNumHeartsFromAppealPoints(startAppeal);
+ heartsDelta = GetNumHeartsFromAppealPoints(startAppeal + appealDelta) - startHearts;
+ GetAppealHeartTileOffset(contestant); // unused return value
+ gTasks[taskId].tNumHearts = abs(startHearts);
+ gTasks[taskId].tHeartsDelta = heartsDelta;
+ if (startHearts > 0 || (startHearts == 0 && heartsDelta > 0))
+ gTasks[taskId].tHeartsSign = 1;
else
- gTasks[taskId].data[2] = -1;
- gTasks[taskId].data[3] = c;
+ gTasks[taskId].tHeartsSign = -1;
+ gTasks[taskId].tContestant = contestant;
return taskId;
}
-static void sub_80DC0F4(u8 taskId)
+static void Task_UpdateAppealHearts(u8 taskId)
{
- u8 r7 = gTasks[taskId].data[3];
- s16 r3 = gTasks[taskId].data[0];
- s16 r1 = gTasks[taskId].data[1];
+ u8 contestant = gTasks[taskId].tContestant;
+ s16 startHearts = gTasks[taskId].tNumHearts;
+ s16 heartsDelta = gTasks[taskId].tHeartsDelta;
- if (++gTasks[taskId].data[10] > 14)
+ if (++gTasks[taskId].tDelayTimer > 14)
{
- u16 r6;
- u8 r5;
- u8 r10;
- u8 r11;
+ u16 heartOffset;
+ u8 newNumHearts;
+ u8 pitchMod;
+ bool8 onSecondLine;
- gTasks[taskId].data[10] = 0;
- if (gTasks[taskId].data[1] == 0)
+ gTasks[taskId].tDelayTimer = 0;
+ if (gTasks[taskId].tHeartsDelta == 0)
{
+ // No more hearts to add/remove, end
DestroyTask(taskId);
- gContestResources->field_14[r7].unk2_2 = 0;
+ eContestGfxState[contestant].updatingAppealHearts = FALSE;
return;
}
- else if (r3 == 0)
+ else if (startHearts == 0)
{
- if (r1 < 0)
+ if (heartsDelta < 0)
{
- r6 = sub_80DBFC8(r7) + 2;
- gTasks[taskId].data[1]++;
+ // Losing hearts, get black heart offset
+ heartOffset = GetAppealHeartTileOffset(contestant) + 2;
+ gTasks[taskId].tHeartsDelta++;
}
else
{
- r6 = sub_80DBFC8(r7);
- gTasks[taskId].data[1]--;
+ // Gaining hearts, get red heart offset
+ heartOffset = GetAppealHeartTileOffset(contestant);
+ gTasks[taskId].tHeartsDelta--;
}
- r5 = gTasks[taskId].data[0]++;
+ newNumHearts = gTasks[taskId].tNumHearts++;
}
else
{
- if (gTasks[taskId].data[2] < 0)
+ if (gTasks[taskId].tHeartsSign < 0)
{
- if (r1 < 0)
+ // Hearts currently black (negative)
+ if (heartsDelta < 0)
{
- r5 = gTasks[taskId].data[0]++;
- gTasks[taskId].data[1]++;
- r6 = sub_80DBFC8(r7) + 2;
+ // Losing points, add black heart
+ newNumHearts = gTasks[taskId].tNumHearts++;
+ gTasks[taskId].tHeartsDelta++;
+ heartOffset = GetAppealHeartTileOffset(contestant) + 2;
}
else
{
- r5 = --gTasks[taskId].data[0];
- r6 = 0;
- gTasks[taskId].data[1]--;
+ // Gaining points, remove black heart
+ newNumHearts = --gTasks[taskId].tNumHearts;
+ heartOffset = 0;
+ gTasks[taskId].tHeartsDelta--;
}
}
else
{
- if (r1 < 0)
+ // Hearts currently red (positive)
+ if (heartsDelta < 0)
{
- r5 = --gTasks[taskId].data[0];
- r6 = 0;
- gTasks[taskId].data[1]++;
+ // Losing points, remove red heart
+ newNumHearts = --gTasks[taskId].tNumHearts;
+ heartOffset = 0;
+ gTasks[taskId].tHeartsDelta++;
}
else
{
- r5 = gTasks[taskId].data[0]++;
- gTasks[taskId].data[1]--;
- r6 = sub_80DBFC8(r7);
+ // Gaining points, add red heart
+ newNumHearts = gTasks[taskId].tNumHearts++;
+ gTasks[taskId].tHeartsDelta--;
+ heartOffset = GetAppealHeartTileOffset(contestant);
}
}
}
- r10 = r5;
- r11 = 0;
+ pitchMod = newNumHearts;
+ onSecondLine = FALSE;
- if (r5 > 7)
+ // Check if wrapping to second line of hearts
+ if (newNumHearts > 7)
{
- r11 = 1;
- r5-= 8;
+ onSecondLine = TRUE;
+ newNumHearts -= 8;
}
- ContestBG_FillBoxWithTile(0, r6, r5 + 22, gContestantTurnOrder[r7] * 5 + 2 + r11, 1, 1, 17);
- if (r1 > 0)
+ ContestBG_FillBoxWithTile(0, heartOffset, newNumHearts + 22, gContestantTurnOrder[contestant] * 5 + 2 + onSecondLine, 1, 1, 17);
+ if (heartsDelta > 0)
{
PlaySE(SE_C_GAJI);
m4aMPlayImmInit(&gMPlayInfo_SE1);
- m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, r10 * 256);
+ m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, pitchMod * 256);
}
else
{
PlaySE(SE_BOO);
}
- if (!r11 && !r5 && !r6)
- gTasks[taskId].data[2] = -gTasks[taskId].data[2];
+ if (!onSecondLine && newNumHearts == 0 && heartOffset == 0)
+ gTasks[taskId].tHeartsSign = -gTasks[taskId].tHeartsSign;
}
}
-static void sub_80DC2BC(void)
+static void CreateSliderHeartSprites(void)
{
s32 i;
- LoadSpriteSheet(&gUnknown_08587A74);
+ LoadSpriteSheet(&sSpriteSheet_SliderHeart);
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- u8 y = gUnknown_08587A6C[gContestantTurnOrder[i]];
+ u8 y = sSliderHeartYPositions[gContestantTurnOrder[i]];
- gContestResources->field_14[i].unk0 = CreateSprite(&gSpriteTemplate_8587AD0, 180, y, 1);
+ eContestGfxState[i].sliderHeartSpriteId = CreateSprite(&sSpriteTemplate_SliderHeart, 180, y, 1);
}
}
-static void sub_80DC308(u8 contestant)
+#define sContestant data[0]
+#define sTargetX data[1]
+#define sMoveX data[2]
+
+static void UpdateHeartSlider(u8 contestant)
{
u8 spriteId;
- s16 r5;
-
- gContestResources->field_14[contestant].unk2_0 = 1;
- spriteId = gContestResources->field_14[contestant].unk0;
- r5 = eContestantStatus[contestant].pointTotal / 10 * 2;
- if (r5 > 56)
- r5 = 56;
- else if (r5 < 0)
- r5 = 0;
+ s16 slideTarget;
+
+ eContestGfxState[contestant].sliderUpdating = TRUE;
+ spriteId = eContestGfxState[contestant].sliderHeartSpriteId;
+ slideTarget = eContestantStatus[contestant].pointTotal / 10 * 2;
+ if (slideTarget > 56)
+ slideTarget = 56;
+ else if (slideTarget < 0)
+ slideTarget = 0;
gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].data[0] = contestant;
- gSprites[spriteId].data[1] = r5;
- if (gSprites[spriteId].data[1] > gSprites[spriteId].pos2.x)
- gSprites[spriteId].data[2] = 1;
+ gSprites[spriteId].sContestant = contestant;
+ gSprites[spriteId].sTargetX = slideTarget;
+ if (gSprites[spriteId].sTargetX > gSprites[spriteId].pos2.x)
+ gSprites[spriteId].sMoveX = 1;
else
- gSprites[spriteId].data[2] = -1;
- gSprites[spriteId].callback = sub_80DC408;
+ gSprites[spriteId].sMoveX = -1;
+ gSprites[spriteId].callback = SpriteCB_UpdateHeartSlider;
}
-static void sub_80DC3AC(void)
+static void UpdateHeartSliders(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- sub_80DC308(i);
+ UpdateHeartSlider(i);
}
-static bool8 sub_80DC3C4(void)
+static bool8 SlidersDoneUpdating(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (gContestResources->field_14[i].unk2_0)
+ if (eContestGfxState[i].sliderUpdating)
break;
}
if (i == CONTESTANT_COUNT)
@@ -3691,57 +3895,64 @@ static bool8 sub_80DC3C4(void)
return FALSE;
}
-static void sub_80DC408(struct Sprite *sprite)
+static void SpriteCB_UpdateHeartSlider(struct Sprite *sprite)
{
- if (sprite->pos2.x == sprite->data[1])
+ if (sprite->pos2.x == sprite->sTargetX)
{
- gContestResources->field_14[sprite->data[0]].unk2_0 = 0;
+ eContestGfxState[sprite->sContestant].sliderUpdating = FALSE;
sprite->callback = SpriteCallbackDummy;
}
else
{
- sprite->pos2.x += sprite->data[2];
+ sprite->pos2.x += sprite->sMoveX;
}
}
-static void sub_80DC44C(void)
+#undef sContestant
+#undef sTargetX
+#undef sMoveX
+
+// Y positions change as the contestants change order
+static void UpdateSliderHeartSpriteYPositions(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- gSprites[gContestResources->field_14[i].unk0].pos1.y = gUnknown_08587A6C[gContestantTurnOrder[i]];
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.y = sSliderHeartYPositions[gContestantTurnOrder[i]];
}
-static void sub_80DC490(bool8 a)
+// Used to hide (or subsequently reshow) the bottom two slider hearts that get hidden by text windows by moving them offscreen
+static void SetBottomSliderHeartsInvisibility(bool8 invisible)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
+ // Skip the top two contestants sliders
if (gContestantTurnOrder[i] > 1)
{
- if (!a)
- gSprites[gContestResources->field_14[i].unk0].pos1.x = 180;
+ if (!invisible)
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.x = 180;
else
- gSprites[gContestResources->field_14[i].unk0].pos1.x = 256;
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.x = 256;
}
}
}
-static void sub_80DC4F0(void)
+static void CreateNextTurnSprites(void)
{
s32 i;
- LoadSpritePalette(&gUnknown_08587B08);
+ LoadSpritePalette(&sSpritePalette_NextTurn);
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- LoadCompressedSpriteSheet(&gUnknown_08587AE8[i]);
- gContestResources->field_14[i].unk1 = CreateSprite(&gSpriteTemplate_8587B18[i],
+ LoadCompressedSpriteSheet(&sSpriteSheet_NextTurn[i]);
+ eContestGfxState[i].nextTurnSpriteId = CreateSprite(&sSpriteTemplates_NextTurn[i],
204,
- gUnknown_08587A70[gContestantTurnOrder[i]],
+ sNextTurnSpriteYPositions[gContestantTurnOrder[i]],
0);
- SetSubspriteTables(&gSprites[gContestResources->field_14[i].unk1], gSubspriteTables_8587B80);
- gSprites[gContestResources->field_14[i].unk1].invisible = TRUE;
+ SetSubspriteTables(&gSprites[eContestGfxState[i].nextTurnSpriteId], sSubspriteTable_NextTurn);
+ gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = TRUE;
}
}
@@ -3749,189 +3960,193 @@ static void CreateApplauseMeterSprite(void)
{
u8 spriteId;
- LoadCompressedSpriteSheet(&sApplauseMeterSpriteSheet);
- LoadSpritePalette(&sApplauseMeterPalette);
- spriteId = CreateSprite(&sApplauseMeterSpriteTemplate, 30, 44, 1);
+ LoadCompressedSpriteSheet(&sSpriteSheet_ApplauseMeter);
+ LoadSpritePalette(&sSpritePalette_ApplauseMeter);
+ spriteId = CreateSprite(&sSpriteTemplate_ApplauseMeter, 30, 44, 1);
gSprites[spriteId].invisible = TRUE;
eContest.applauseMeterSpriteId = spriteId;
}
-static void sub_80DC5E8(void)
+static void CreateJudgeAttentionEyeTask(void)
{
u8 i;
- u8 taskId = CreateTask(sub_80DC728, 30);
+ u8 taskId = CreateTask(Task_FlashJudgeAttentionEye, 30);
- eContest.unk19211 = taskId;
+ eContest.judgeAttentionTaskId = taskId;
for (i = 0; i < CONTESTANT_COUNT; i++)
gTasks[taskId].data[i * 4] = 0xFF;
}
-static void sub_80DC630(u8 a)
+static void StartFlashJudgeAttentionEye(u8 contestant)
{
- gTasks[eContest.unk19211].data[a * 4 + 0] = 0;
- gTasks[eContest.unk19211].data[a * 4 + 1] = 0;
+ gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 0] = 0;
+ gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 1] = 0;
}
-static void sub_80DC674(u8 a)
+static void StopFlashJudgeAttentionEye(u8 contestant)
{
- u8 taskId = CreateTask(sub_80DC6A4, 31);
-
- gTasks[taskId].data[0] = a;
+ u8 taskId = CreateTask(Task_StopFlashJudgeAttentionEye, 31);
+ gTasks[taskId].data[0] = contestant;
}
-static void sub_80DC6A4(u8 taskId)
+static void Task_StopFlashJudgeAttentionEye(u8 taskId)
{
- u8 r4 = gTasks[taskId].data[0];
+ u8 contestant = gTasks[taskId].data[0];
- if (gTasks[eContest.unk19211].data[r4 * 4 + 0] == 0
- || gTasks[eContest.unk19211].data[r4 * 4 + 0] == 0xFF)
+ if (gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 0] == 0
+ || gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 0] == 0xFF)
{
- gTasks[eContest.unk19211].data[r4 * 4 + 0] = 0xFF;
- gTasks[eContest.unk19211].data[r4 * 4 + 1] = 0;
- BlendPalette((eContest.prevTurnOrder[r4] + MOVE_WINDOWS_START) * 16 + 6, 2, 0, RGB(31, 31, 18));
+ gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 0] = 0xFF;
+ gTasks[eContest.judgeAttentionTaskId].data[contestant * 4 + 1] = 0;
+ BlendPalette((eContest.prevTurnOrder[contestant] + 5) * 16 + 6, 2, 0, RGB(31, 31, 18));
DestroyTask(taskId);
}
}
-static void sub_80DC728(u8 taskId)
+static void Task_FlashJudgeAttentionEye(u8 taskId)
{
u8 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- u8 r3 = i * 4;
+ u8 offset = i * 4;
- if (gTasks[taskId].data[r3 + 0] != 0xFF)
+ if (gTasks[taskId].data[offset + 0] != 0xFF)
{
- if (gTasks[taskId].data[r3 + 1] == 0)
- gTasks[taskId].data[r3 + 0]++;
+ if (gTasks[taskId].data[offset + 1] == 0)
+ gTasks[taskId].data[offset + 0]++;
else
- gTasks[taskId].data[r3 + 0]--;
+ gTasks[taskId].data[offset + 0]--;
- if (gTasks[taskId].data[r3 + 0] == 16
- || gTasks[taskId].data[r3 + 0] == 0)
- gTasks[taskId].data[r3 + 1] ^= 1;
+ if (gTasks[taskId].data[offset + 0] == 16
+ || gTasks[taskId].data[offset + 0] == 0)
+ gTasks[taskId].data[offset + 1] ^= 1;
- BlendPalette(
- (eContest.prevTurnOrder[i] + MOVE_WINDOWS_START) * 16 + 6,
- 2,
- gTasks[taskId].data[r3 + 0],
- RGB(31, 31, 18));
+ BlendPalette((eContest.prevTurnOrder[i] + 5) * 16 + 6, 2, gTasks[taskId].data[offset + 0], RGB(31, 31, 18));
}
}
}
-static void sub_80DC7EC(void)
+// Note: While the below task is run for the entire Appeals portion of the contest,
+// because data[i * 4] is always 0xFF it never does anything
+// If turned on by setting that data between 0 and 16, it blends
+// an odd selection of palette colors (e.g. the text box, the appeal hearts
+// for only one contestant, the heart outlines in the move selection box, etc)
+// Given the similarities, it's possible this was an incorrect attempt
+// at something similar to what CreateJudgeAttentionEyeTask does
+static void CreateUnusedBlendTask(void)
{
s32 i;
- eContest.unk19212 = CreateTask(sub_80DC8D0, 30);
+ eContest.blendTaskId = CreateTask(Task_UnusedBlend, 30);
for (i = 0; i < CONTESTANT_COUNT; i++)
- sub_80DC81C(i);
+ InitUnusedBlendTaskData(i);
}
-static void sub_80DC81C(u8 contestant)
+static void InitUnusedBlendTaskData(u8 contestant)
{
- gTasks[eContest.unk19212].data[contestant * 4 + 0] = 0xFF;
- gTasks[eContest.unk19212].data[contestant * 4 + 1] = 0;
+ gTasks[eContest.blendTaskId].data[contestant * 4] = 0xFF;
+ gTasks[eContest.blendTaskId].data[contestant * 4 + 1] = 0;
}
-static void sub_80DC864(void)
+static void UpdateBlendTaskContestantsData(void)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- sub_80DC87C(i);
+ UpdateBlendTaskContestantData(i);
}
-static void sub_80DC87C(u8 contestant)
+static void UpdateBlendTaskContestantData(u8 contestant)
{
- u32 windowId1;
- u32 windowId2;
+ u32 palOffset1;
+ u32 palOffset2;
- sub_80DC81C(contestant);
+ InitUnusedBlendTaskData(contestant);
- windowId1 = contestant + MOVE_WINDOWS_START;
+ palOffset1 = contestant + 5;
DmaCopy16Defvars(3,
- gPlttBufferUnfaded + windowId1 * 16 + 10,
- gPlttBufferFaded + windowId1 * 16 + 10,
+ gPlttBufferUnfaded + palOffset1 * 16 + 10,
+ gPlttBufferFaded + palOffset1 * 16 + 10,
2);
- windowId2 = (contestant + MOVE_WINDOWS_START) * 16 + 12 + contestant;
+ palOffset2 = (contestant + 5) * 16 + 12 + contestant;
DmaCopy16Defvars(3,
- gPlttBufferUnfaded + windowId2,
- gPlttBufferFaded + windowId2,
+ gPlttBufferUnfaded + palOffset2,
+ gPlttBufferFaded + palOffset2,
2);
}
-static void sub_80DC8D0(u8 taskId)
+// See comments on CreateUnusedBlendTask
+static void Task_UnusedBlend(u8 taskId)
{
u8 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- u8 r3 = i * 4;
+ u8 idx = i * 4;
- if (gTasks[taskId].data[r3 + 0] != 0xFF)
+ // Below is never true
+ if (gTasks[taskId].data[idx] != 0xFF)
{
- if (++gTasks[taskId].data[r3 + 2] > 2)
+ if (++gTasks[taskId].data[idx + 2] > 2)
{
- gTasks[taskId].data[r3 + 2] = 0;
+ gTasks[taskId].data[idx + 2] = 0;
- if (gTasks[taskId].data[r3 + 1] == 0)
- gTasks[taskId].data[r3 + 0]++;
+ if (gTasks[taskId].data[idx + 1] == 0)
+ gTasks[taskId].data[idx]++;
else
- gTasks[taskId].data[r3 + 0]--;
+ gTasks[taskId].data[idx]--;
- if (gTasks[taskId].data[r3 + 0] == 16
- || gTasks[taskId].data[r3 + 0] == 0)
- gTasks[taskId].data[r3 + 1] ^= 1;
+ if (gTasks[taskId].data[idx] == 16
+ || gTasks[taskId].data[idx] == 0)
+ gTasks[taskId].data[idx + 1] ^= 1;
- BlendPalette((i + MOVE_WINDOWS_START) * 16 + 10, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18));
- BlendPalette((i + MOVE_WINDOWS_START) * 16 + 12 + i, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18));
+ BlendPalette((i + 5) * 16 + 10, 1, gTasks[taskId].data[idx + 0], RGB(31, 31, 18));
+ BlendPalette((i + 5) * 16 + 12 + i, 1, gTasks[taskId].data[idx + 0], RGB(31, 31, 18));
}
}
}
}
-static void sub_80DC9B4(u8 contestant)
+static void StartStopFlashJudgeAttentionEye(u8 contestant)
{
if (eContestantStatus[contestant].hasJudgesAttention)
- sub_80DC630(contestant);
+ StartFlashJudgeAttentionEye(contestant);
else
- sub_80DC674(contestant);
+ StopFlashJudgeAttentionEye(contestant);
}
-static u8 sub_80DC9EC(u8 contestant)
+static u8 CreateContestantBoxBlinkSprites(u8 contestant)
{
u8 spriteId1, spriteId2;
u8 x = gContestantTurnOrder[contestant] * 40 + 32;
- LoadCompressedSpriteSheet(&sUnknown_08589904[contestant]);
- LoadSpritePalette(&sUnknown_08589924[contestant]);
- spriteId1 = CreateSprite(&gSpriteTemplate_858998C[contestant], 184, x, 29);
- spriteId2 = CreateSprite(&gSpriteTemplate_858998C[contestant], 248, x, 29);
+ LoadCompressedSpriteSheet(&sSpriteSheets_ContestantsTurnBlinkEffect[contestant]);
+ LoadSpritePalette(&sSpritePalettes_ContestantsTurnBlinkEffect[contestant]);
+ spriteId1 = CreateSprite(&sSpriteTemplates_ContestantsTurnBlinkEffect[contestant], 184, x, 29);
+ spriteId2 = CreateSprite(&sSpriteTemplates_ContestantsTurnBlinkEffect[contestant], 248, x, 29);
gSprites[spriteId2].oam.tileNum += 64;
CopySpriteTiles(0,
3,
(void *)VRAM,
(u16 *)(BG_SCREEN_ADDR(28) + gContestantTurnOrder[contestant] * 5 * 64 + 0x26),
- gContestResources->field_34);
+ gContestResources->boxBlinkTiles1);
CopySpriteTiles(0,
3, (void *)VRAM,
(u16 *)(BG_SCREEN_ADDR(28) + gContestantTurnOrder[contestant] * 5 * 64 + 0x36),
- gContestResources->field_38);
+ gContestResources->boxBlinkTiles2);
- CpuFill32(0, gContestResources->field_34 + 0x500, 0x300);
- CpuFill32(0, gContestResources->field_38 + 0x500, 0x300);
+ CpuFill32(0, gContestResources->boxBlinkTiles1 + 0x500, 0x300);
+ CpuFill32(0, gContestResources->boxBlinkTiles2 + 0x500, 0x300);
- RequestDma3Copy(gContestResources->field_34,
+ RequestDma3Copy(gContestResources->boxBlinkTiles1,
(u8 *)(VRAM + 0x10000 + gSprites[spriteId1].oam.tileNum * 32),
0x800,
1);
- RequestDma3Copy(gContestResources->field_38,
+ RequestDma3Copy(gContestResources->boxBlinkTiles2,
(u8 *)(VRAM + 0x10000 + gSprites[spriteId2].oam.tileNum * 32),
0x800,
1);
@@ -3945,7 +4160,7 @@ static u8 sub_80DC9EC(u8 contestant)
return spriteId1;
}
-static void sub_80DCB78(u8 spriteId)
+static void DestroyContestantBoxBlinkSprites(u8 spriteId)
{
u8 spriteId2 = gSprites[spriteId].data[0];
@@ -3954,55 +4169,56 @@ static void sub_80DCB78(u8 spriteId)
DestroySpriteAndFreeResources(&gSprites[spriteId]);
}
-static void sub_80DCBB4(void)
+static void SetBlendForContestantBoxBlink(void)
{
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(7, 9));
}
-static void sub_80DCBD0(void)
+static void ResetBlendForContestantBoxBlink(void)
{
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
}
-static void sub_80DCBE8(u8 a, bool8 b)
+// To indicate whose turn is up
+static void BlinkContestantBox(u8 spriteId, bool8 b)
{
- u8 r5;
+ u8 spriteId2;
- sub_80DCBB4();
- gContestResources->field_14[gSprites[a].data[1]].unk2_1 = 1;
- r5 = gSprites[a].data[0];
- StartSpriteAffineAnim(&gSprites[a], 1);
- StartSpriteAffineAnim(&gSprites[r5], 1);
- gSprites[a].callback = sub_80DCC84;
- gSprites[r5].callback = SpriteCallbackDummy;
+ SetBlendForContestantBoxBlink();
+ eContestGfxState[gSprites[spriteId].data[1]].boxBlinking = TRUE;
+ spriteId2 = gSprites[spriteId].data[0];
+ StartSpriteAffineAnim(&gSprites[spriteId], 1);
+ StartSpriteAffineAnim(&gSprites[spriteId2], 1);
+ gSprites[spriteId].callback = SpriteCB_BlinkContestantBox;
+ gSprites[spriteId2].callback = SpriteCallbackDummy;
if (b == FALSE)
PlaySE(SE_C_PIKON);
else
PlaySE(SE_PC_LOGIN);
}
-static void sub_80DCC84(struct Sprite *sprite)
+static void SpriteCB_BlinkContestantBox(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
{
- u8 r1 = sprite->data[0];
+ u8 spriteId2 = sprite->data[0];
- if (gSprites[r1].affineAnimEnded)
+ if (gSprites[spriteId2].affineAnimEnded)
{
sprite->invisible = TRUE;
- gSprites[r1].invisible = TRUE;
- sprite->callback = sub_80DCCD8;
+ gSprites[spriteId2].invisible = TRUE;
+ sprite->callback = SpriteCB_EndBlinkContestantBox;
}
}
}
-static void sub_80DCCD8(struct Sprite *sprite)
+static void SpriteCB_EndBlinkContestantBox(struct Sprite *sprite)
{
- gContestResources->field_14[sprite->data[1]].unk2_1 = 0;
- sub_80DCB78(sprite->data[0]);
- sub_80DCBD0();
+ eContestGfxState[sprite->data[1]].boxBlinking = FALSE;
+ DestroyContestantBoxBlinkSprites(sprite->data[0]);
+ ResetBlendForContestantBoxBlink();
}
// Unused.
@@ -4038,8 +4254,8 @@ static void ContestDebugDoPrint(void)
{
case CONTEST_DEBUG_MODE_OFF:
break;
- case CONTEST_DEBUG_MODE_PRINT_UNK_C:
- case CONTEST_DEBUG_MODE_PRINT_UNK_D:
+ case CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS:
+ case CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS:
ContestDebugPrintBitStrings();
break;
// The only other possible value is 1, which is only set by ContestDebugTogglePointTotal.
@@ -4062,9 +4278,9 @@ static void ContestDebugDoPrint(void)
}
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- value = eContestantStatus[i].appeal2;
+ value = eContestantStatus[i].appeal;
txtPtr = text;
- if (eContestantStatus[i].appeal2 < 0)
+ if (eContestantStatus[i].appeal < 0)
{
value *= -1;
txtPtr = StringCopy(txtPtr, gText_OneDash);
@@ -4114,8 +4330,8 @@ void SortContestants(bool8 useRanking)
// Determine where the contestant should be ordered.
for (v3 = 0; v3 < i; v3++)
{
- if (gContestMonConditions[gContestantTurnOrder[v3]] < gContestMonConditions[i]
- || (gContestMonConditions[gContestantTurnOrder[v3]] == gContestMonConditions[i] && randomOrdering[gContestantTurnOrder[v3]] < randomOrdering[i]))
+ if (gContestMonRound1Points[gContestantTurnOrder[v3]] < gContestMonRound1Points[i]
+ || (gContestMonRound1Points[gContestantTurnOrder[v3]] == gContestMonRound1Points[i] && randomOrdering[gContestantTurnOrder[v3]] < randomOrdering[i]))
{
// Shift everything larger up to make room.
s32 j;
@@ -4198,24 +4414,23 @@ static void DrawContestantWindows(void)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- s32 windowId = i + MOVE_WINDOWS_START;
- LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[windowId], (gContestantTurnOrder[i] + MOVE_WINDOWS_START) * 16, sizeof(eUnknownHeap1A004.cachedWindowPalettes[0]));
+ s32 windowId = i + 5;
+ LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[windowId], (gContestantTurnOrder[i] + 5) * 16, sizeof(eUnknownHeap1A004.cachedWindowPalettes[0]));
}
DrawContestantWindowText();
}
-static void sub_80DD080(u8 contestant)
+static void CalculateAppealMoveImpact(u8 contestant)
{
u16 move;
u8 effect;
u8 rnd;
- bool8 r8;
+ bool8 canUseTurn;
s32 i;
- eContestantStatus[contestant].appeal2 = 0;
- eContestantStatus[contestant].appeal1 = 0;
- r8 = ContestantCanUseTurn(contestant);
- if (!r8)
+ eContestantStatus[contestant].appeal = 0;
+ eContestantStatus[contestant].baseAppeal = 0;
+ if (!ContestantCanUseTurn(contestant))
return;
move = eContestantStatus[contestant].currMove;
@@ -4224,93 +4439,96 @@ static void sub_80DD080(u8 contestant)
eContestantStatus[contestant].moveCategory = gContestMoves[eContestantStatus[contestant].currMove].contestCategory;
if (eContestantStatus[contestant].currMove == eContestantStatus[contestant].prevMove && eContestantStatus[contestant].currMove != MOVE_NONE)
{
- eContestantStatus[contestant].disappointedRepeat = TRUE;
+ eContestantStatus[contestant].repeatedMove = TRUE;
eContestantStatus[contestant].moveRepeatCount++;
}
else
{
eContestantStatus[contestant].moveRepeatCount = 0;
}
- eContestantStatus[contestant].appeal1 = gContestEffects[effect].appeal;
- eContestantStatus[contestant].appeal2 = eContestantStatus[contestant].appeal1;
- eContestResources8.jam = gContestEffects[effect].jam;
- eContestResources8.jam2 = eContestResources8.jam;
+ eContestantStatus[contestant].baseAppeal = gContestEffects[effect].appeal;
+ eContestantStatus[contestant].appeal = eContestantStatus[contestant].baseAppeal;
+ eContestAppealResults.jam = gContestEffects[effect].jam;
+ eContestAppealResults.jam2 = eContestAppealResults.jam;
- eContestResources8.contestant = contestant;
+ eContestAppealResults.contestant = contestant;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
eContestantStatus[i].jam = 0;
- eContestResources8.unnervedPokes[i] = 0;
+ eContestAppealResults.unnervedPokes[i] = 0;
}
if (eContestantStatus[contestant].hasJudgesAttention
&& !AreMovesContestCombo(eContestantStatus[contestant].prevMove, eContestantStatus[contestant].currMove))
- eContestantStatus[contestant].hasJudgesAttention = 0;
+ eContestantStatus[contestant].hasJudgesAttention = FALSE;
gContestEffectFuncs[effect]();
- if (eContestantStatus[contestant].conditionMod == 1)
- eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].condition - 10;
+ if (eContestantStatus[contestant].conditionMod == CONDITION_GAIN)
+ eContestantStatus[contestant].appeal += eContestantStatus[contestant].condition - 10;
else if (eContestantStatus[contestant].appealTripleCondition)
- eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].condition * 3;
+ eContestantStatus[contestant].appeal += eContestantStatus[contestant].condition * 3;
else
- eContestantStatus[contestant].appeal2 += eContestantStatus[contestant].condition;
+ eContestantStatus[contestant].appeal += eContestantStatus[contestant].condition;
- eContestantStatus[contestant].unk16 = 0;
- eContestantStatus[contestant].unk15_6 = 0;
- if (sub_80DE1E8(contestant))
+ eContestantStatus[contestant].completedCombo = FALSE;
+ eContestantStatus[contestant].usedComboMove = FALSE;
+ if (IsContestantAllowedToCombo(contestant))
{
- u8 r2 = AreMovesContestCombo(eContestantStatus[contestant].prevMove, eContestantStatus[contestant].currMove);
+ bool8 completedCombo = AreMovesContestCombo(eContestantStatus[contestant].prevMove, eContestantStatus[contestant].currMove);
- if (r2 != 0 && eContestantStatus[contestant].hasJudgesAttention)
+ if (completedCombo && eContestantStatus[contestant].hasJudgesAttention)
{
- eContestantStatus[contestant].unk16 = r2;
- eContestantStatus[contestant].unk15_6 = 1;
- eContestantStatus[contestant].hasJudgesAttention = 0;
- eContestantStatus[contestant].unk17 = eContestantStatus[contestant].appeal1 * eContestantStatus[contestant].unk16;
- eContestantStatus[contestant].unk15_3 = 1;
+ eContestantStatus[contestant].completedCombo = completedCombo;
+ eContestantStatus[contestant].usedComboMove = TRUE;
+ eContestantStatus[contestant].hasJudgesAttention = FALSE;
+ eContestantStatus[contestant].comboAppealBonus = eContestantStatus[contestant].baseAppeal * eContestantStatus[contestant].completedCombo;
+ eContestantStatus[contestant].unk15_3 = TRUE;
}
else
{
if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0)
{
- eContestantStatus[contestant].hasJudgesAttention = 1;
- eContestantStatus[contestant].unk15_6 = 1;
+ eContestantStatus[contestant].hasJudgesAttention = TRUE;
+ eContestantStatus[contestant].usedComboMove = TRUE;
}
else
{
- eContestantStatus[contestant].hasJudgesAttention = 0;
+ eContestantStatus[contestant].hasJudgesAttention = FALSE;
}
}
}
- if (eContestantStatus[contestant].disappointedRepeat)
- eContestantStatus[contestant].unk18 = (eContestantStatus[contestant].moveRepeatCount + 1) * 10;
+ if (eContestantStatus[contestant].repeatedMove)
+ eContestantStatus[contestant].repeatJam = (eContestantStatus[contestant].moveRepeatCount + 1) * 10;
if (eContestantStatus[contestant].nervous)
{
- eContestantStatus[contestant].hasJudgesAttention = 0;
- eContestantStatus[contestant].appeal2 = 0;
- eContestantStatus[contestant].appeal1 = 0;
+ eContestantStatus[contestant].hasJudgesAttention = FALSE;
+ eContestantStatus[contestant].appeal = 0;
+ eContestantStatus[contestant].baseAppeal = 0;
}
- eContestResources10.bits_0 = Contest_GetMoveExcitement(eContestantStatus[contestant].currMove);
+ eContestExcitement.moveExcitement = Contest_GetMoveExcitement(eContestantStatus[contestant].currMove);
if (eContestantStatus[contestant].overrideCategoryExcitementMod)
- eContestResources10.bits_0 = 1;
+ eContestExcitement.moveExcitement = 1;
- if (eContestResources10.bits_0 > 0)
+ if (eContestExcitement.moveExcitement > 0)
{
- if (eContest.applauseLevel + eContestResources10.bits_0 > 4)
- eContestResources10.unk2 = 60;
+ if (eContest.applauseLevel + eContestExcitement.moveExcitement > 4)
+ eContestExcitement.excitementAppealBonus = 60;
else
- eContestResources10.unk2 = 10;
+ eContestExcitement.excitementAppealBonus = 10;
}
else
{
- eContestResources10.unk2 = 0;
+ eContestExcitement.excitementAppealBonus = 0;
}
- rnd = Random() % 3;
+ // Transform and Role Play require a visible target mon
+ // so randomly choose a contestant to be the "target"
+ rnd = Random() % (CONTESTANT_COUNT - 1);
for (i = 0; i < CONTESTANT_COUNT; i++)
{
+ // Target can't be the attacker
if (i != contestant)
{
if (rnd == 0)
@@ -4318,7 +4536,7 @@ static void sub_80DD080(u8 contestant)
rnd--;
}
}
- eContestantStatus[contestant].unk1B = i;
+ eContestantStatus[contestant].contestantAnimTarget = i;
}
void SetContestantEffectStringID(u8 a, u8 b)
@@ -4345,17 +4563,17 @@ void SetStartledString(u8 contestant, u8 jam)
SetContestantEffectStringID(contestant, CONTEST_STRING_LOOKED_DOWN);
}
-static void sub_80DD45C(u8 contestant, u8 stringId)
+static void PrintAppealMoveResultText(u8 contestant, u8 stringId)
{
StringCopy(gStringVar1, gContestMons[contestant].nickname);
StringCopy(gStringVar2, gMoveNames[eContestantStatus[contestant].currMove]);
- if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory == CONTEST_CATEGORY_COOL)
+ if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_COOL)
StringCopy(gStringVar3, gText_Contest_Shyness);
- else if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory == CONTEST_CATEGORY_BEAUTY)
+ else if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_BEAUTY)
StringCopy(gStringVar3, gText_Contest_Anxiety);
- else if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory == CONTEST_CATEGORY_CUTE)
+ else if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_CUTE)
StringCopy(gStringVar3, gText_Contest_Laziness);
- else if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory == CONTEST_CATEGORY_SMART)
+ else if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_SMART)
StringCopy(gStringVar3, gText_Contest_Hesitancy);
else
StringCopy(gStringVar3, gText_Contest_Fear);
@@ -4441,60 +4659,60 @@ static void ApplyNextTurnOrder(void)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- eContestResources8.turnOrder[i] = newTurnOrder[i];
+ eContestAppealResults.turnOrder[i] = newTurnOrder[i];
eContestantStatus[i].nextTurnOrder = 0xFF;
eContestantStatus[i].turnOrderMod = 0;
gContestantTurnOrder[i] = newTurnOrder[i];
}
}
-static void sub_80DD6DC(struct Sprite *sprite)
+static void SpriteCB_JudgeSpeechBubble(struct Sprite *sprite)
{
if (sprite->data[1]++ > 84)
{
sprite->data[1] = 0;
sprite->invisible = TRUE;
sprite->callback = SpriteCallbackDummy;
- eContest.unk1920A_4 = 0;
+ eContest.waitForJudgeSpeechBubble = FALSE;
}
}
-static void sub_80DD720(u8 a)
+static void DoJudgeSpeechBubble(u8 symbolId)
{
- u8 spriteId = eContest.unk19216;
+ u8 spriteId = eContest.judgeSpeechBubbleSpriteId;
- switch (a)
+ switch (symbolId)
{
- case 0:
- case 1:
+ case JUDGE_SYMBOL_SWIRL:
+ case JUDGE_SYMBOL_SWIRL_UNUSED:
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0];
PlaySE(SE_HAZURE);
break;
- case 2:
+ case JUDGE_SYMBOL_ONE_EXCLAMATION:
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 4;
PlaySE(SE_SEIKAI);
break;
- case 3:
+ case JUDGE_SYMBOL_TWO_EXCLAMATIONS:
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 8;
PlaySE(SE_SEIKAI);
break;
- case 4:
+ case JUDGE_SYMBOL_NUMBER_ONE_UNUSED: // Identical to JUDGE_SYMBOL_NUMBER_ONE
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12;
PlaySE(SE_TK_WARPIN);
break;
- case 5: // exactly the same as case 4
+ case JUDGE_SYMBOL_NUMBER_ONE:
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12;
PlaySE(SE_TK_WARPIN);
break;
- case 6:
+ case JUDGE_SYMBOL_NUMBER_FOUR:
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 16;
PlaySE(SE_TK_WARPIN);
break;
- case 8:
+ case JUDGE_SYMBOL_STAR:
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 24;
PlaySE(SE_W215);
break;
- case 7:
+ case JUDGE_SYMBOL_QUESTION_MARK:
default:
gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 20;
PlaySE(SE_TK_WARPIN);
@@ -4502,8 +4720,8 @@ static void sub_80DD720(u8 a)
}
gSprites[spriteId].data[1] = 0;
gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].callback = sub_80DD6DC;
- eContest.unk1920A_4 = 1;
+ gSprites[spriteId].callback = SpriteCB_JudgeSpeechBubble;
+ eContest.waitForJudgeSpeechBubble = TRUE;
}
static void UpdateApplauseMeter(void)
@@ -4536,7 +4754,7 @@ static u8 StartApplauseOverflowAnimation(void)
u8 taskId = CreateTask(Task_ApplauseOverflowAnimation, 10);
gTasks[taskId].data[1] = 1;
- gTasks[taskId].data[2] = IndexOfSpritePaletteTag(APPLAUSE_METER_GFX_TAG);
+ gTasks[taskId].data[2] = IndexOfSpritePaletteTag(TAG_APPLAUSE_METER);
return taskId;
}
@@ -4570,15 +4788,15 @@ static void Task_ApplauseOverflowAnimation(u8 taskId)
}
}
-static void StartMoveApplauseMeterOnscreen(void)
+static void SlideApplauseMeterIn(void)
{
- CreateTask(Task_MoveApplauseMeterOnscreen, 10);
+ CreateTask(Task_SlideApplauseMeterIn, 10);
gSprites[eContest.applauseMeterSpriteId].pos2.x = -70;
gSprites[eContest.applauseMeterSpriteId].invisible = FALSE;
eContest.applauseMeterIsMoving = TRUE;
}
-static void Task_MoveApplauseMeterOnscreen(u8 taskId)
+static void Task_SlideApplauseMeterIn(u8 taskId)
{
struct Sprite *sprite = &gSprites[eContest.applauseMeterSpriteId];
@@ -4594,7 +4812,7 @@ static void Task_MoveApplauseMeterOnscreen(u8 taskId)
}
}
-static void TryMoveApplauseMeterOffscreen(void)
+static void SlideApplauseMeterOut(void)
{
if (gSprites[eContest.applauseMeterSpriteId].invisible == TRUE)
{
@@ -4602,13 +4820,13 @@ static void TryMoveApplauseMeterOffscreen(void)
}
else
{
- CreateTask(Task_MoveApplauseMeterOffscreen, 10);
+ CreateTask(Task_SlideApplauseMeterOut, 10);
gSprites[eContest.applauseMeterSpriteId].pos2.x = 0;
eContest.applauseMeterIsMoving = TRUE;
}
}
-static void Task_MoveApplauseMeterOffscreen(u8 taskId)
+static void Task_SlideApplauseMeterOut(u8 taskId)
{
struct Sprite *sprite = &gSprites[eContest.applauseMeterSpriteId];
@@ -4638,7 +4856,7 @@ static void Task_ShowAndUpdateApplauseMeter(u8 taskId)
switch (gTasks[taskId].data[10])
{
case 0:
- StartMoveApplauseMeterOnscreen();
+ SlideApplauseMeterIn();
gTasks[taskId].data[10]++;
break;
case 1:
@@ -4660,131 +4878,153 @@ static void Task_ShowAndUpdateApplauseMeter(u8 taskId)
}
// Unused.
-void HideApplauseMeterNoAnim(void)
+static void HideApplauseMeterNoAnim(void)
{
gSprites[eContest.applauseMeterSpriteId].pos2.x = 0;
gSprites[eContest.applauseMeterSpriteId].invisible = FALSE;
}
// Unused.
-void ShowApplauseMeterNoAnim(void)
+static void ShowApplauseMeterNoAnim(void)
{
gSprites[eContest.applauseMeterSpriteId].invisible = TRUE;
}
-static void sub_80DDE0C(void)
+#define tDelay data[10]
+#define tFrame data[11]
+#define tCycles data[12]
+
+static void AnimateAudience(void)
{
- CreateTask(sub_80DDE30, 15);
- eContest.unk1920A_7 = 1;
+ CreateTask(Task_AnimateAudience, 15);
+ eContest.animatingAudience = TRUE;
}
-static void sub_80DDE30(u8 taskId)
+static void Task_AnimateAudience(u8 taskId)
{
- if (gTasks[taskId].data[10]++ > 6)
+ if (gTasks[taskId].tDelay++ > 6)
{
- gTasks[taskId].data[10] = 0;
- if (gTasks[taskId].data[11] == 0)
+ gTasks[taskId].tDelay = 0;
+ if (gTasks[taskId].tFrame == 0)
{
- RequestDma3Copy(eUnknownHeap19000, (void *)(BG_SCREEN_ADDR(4)), 0x1000, 1);
+ RequestDma3Copy(eContestAudienceFrame2_Gfx, (void *)(BG_SCREEN_ADDR(4)), 0x1000, 1);
}
else
{
- RequestDma3Copy(eUnzippedContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4)), 0x1000, 1);
- gTasks[taskId].data[12]++;
+ RequestDma3Copy(eUnzippedContestAudience_Gfx, (void *)(BG_SCREEN_ADDR(4)), 0x1000, 1);
+ gTasks[taskId].tCycles++;
}
- gTasks[taskId].data[11] ^= 1;
+ gTasks[taskId].tFrame ^= 1;
- if (gTasks[taskId].data[12] == 9)
+ if (gTasks[taskId].tCycles == 9)
{
- eContest.unk1920A_7 = 0;
+ eContest.animatingAudience = FALSE;
DestroyTask(taskId);
}
}
}
-#define tBlendColor data[0]
-#define tBlendCoeff data[1]
+#undef tDelay
+#undef tFrame
+#undef tCycles
+
+#define tBlendColor data[0]
+#define tBlendCoeff data[1]
+#define tBlendDir data[2]
+#define tTargetBlendCoeff data[3]
+#define tBlendDelay data[10]
-static void sub_80DDED0(s8 a, s8 b)
+static void BlendAudienceBackground(s8 excitementDir, s8 blendDir)
{
- u8 taskId = CreateTask(sub_80DDF80, 10);
+ u8 taskId = CreateTask(Task_BlendAudienceBackground, 10);
u16 blendColor;
u8 blendCoeff;
- u8 r3;
+ u8 targetBlendCoeff;
- if (a > 0)
+ if (excitementDir > 0)
{
blendColor = RGB(30, 27, 8);
- if (b > 0)
+ if (blendDir > 0)
{
+ // Blend to yellow (amount depends on applause meter)
blendCoeff = 0;
- r3 = eContest.applauseLevel * 3;
+ targetBlendCoeff = eContest.applauseLevel * 3;
}
else
{
+ // Blend back to original
blendCoeff = eContest.applauseLevel * 3;
- r3 = 0;
+ targetBlendCoeff = 0;
}
}
else
{
- blendColor = 0;
- if (b > 0)
+ blendColor = RGB_BLACK;
+ if (blendDir > 0)
{
+ // Blend to black
blendCoeff = 0;
- r3 = 12;
+ targetBlendCoeff = 12;
}
else
{
+ // Black back to original
blendCoeff = 12;
- r3 = 0;
+ targetBlendCoeff = 0;
}
}
gTasks[taskId].tBlendColor = blendColor;
gTasks[taskId].tBlendCoeff = blendCoeff;
- gTasks[taskId].data[2] = b;
- gTasks[taskId].data[3] = r3;
- eContest.unk1920B_0 = 0;
+ gTasks[taskId].tBlendDir = blendDir;
+ gTasks[taskId].tTargetBlendCoeff = targetBlendCoeff;
+ // Because this isn't set to TRUE here, the main task doesn't wait for the color blend
+ // Unclear if this was intentional or not (perhaps waiting added too much delay). In any case it does nothing now
+ eContest.waitForAudienceBlend = FALSE;
+
}
-static void sub_80DDF80(u8 taskId)
+static void Task_BlendAudienceBackground(u8 taskId)
{
- if (gTasks[taskId].data[10]++ >= 0)
+ if (gTasks[taskId].tBlendDelay++ >= 0)
{
- gTasks[taskId].data[10] = 0;
- if (gTasks[taskId].data[2] > 0)
+ gTasks[taskId].tBlendDelay = 0;
+ if (gTasks[taskId].tBlendDir > 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])
+
+ if (gTasks[taskId].tBlendCoeff == gTasks[taskId].tTargetBlendCoeff)
{
DestroyTask(taskId);
- eContest.unk1920B_0 = 0;
+ eContest.waitForAudienceBlend = FALSE;
}
}
}
#undef tBlendColor
#undef tBlendCoeff
+#undef tTargetBlendCoeff
+#undef tBlendDelay
-static void sub_80DE008(bool8 a)
+static void ShowHideNextTurnGfx(bool8 show)
{
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestantStatus[i].turnOrderMod != 0 && a)
+ if (eContestantStatus[i].turnOrderMod != 0 && show)
{
- CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(VRAM + 0x10000 + (gSprites[gContestResources->field_14[i].unk1].oam.tileNum + 6) * 32), 32);
- gSprites[gContestResources->field_14[i].unk1].pos1.y = gUnknown_08587A70[gContestantTurnOrder[i]];
- gSprites[gContestResources->field_14[i].unk1].invisible = FALSE;
+ CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(VRAM + 0x10000 + (gSprites[eContestGfxState[i].nextTurnSpriteId].oam.tileNum + 6) * 32), 32);
+ gSprites[eContestGfxState[i].nextTurnSpriteId].pos1.y = sNextTurnSpriteYPositions[gContestantTurnOrder[i]];
+ gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = FALSE;
}
else
{
- gSprites[gContestResources->field_14[i].unk1].invisible = TRUE;
+ gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = TRUE;
}
}
}
@@ -4797,37 +5037,33 @@ static const u8 *GetTurnOrderNumberGfx(u8 contestant)
return gContestNextTurnNumbersGfx + eContestantStatus[contestant].nextTurnOrder * 32;
}
-static void sub_80DE12C(void)
+static void DrawUnnervedSymbols(void)
{
- s32 r7 = 0;
- u8 r10 = 2;
- u8 r8 = 1;
- u8 r9 = 0x11;
-
- for (r7 = 0; r7 < CONTESTANT_COUNT; r7++)
+ s32 i = 0;
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.unnervedPokes[r7] != 0 && !Contest_IsMonsTurnDisabled(r7))
+ if (eContestAppealResults.unnervedPokes[i] != 0 && !Contest_IsMonsTurnDisabled(i))
{
- u32 r6 = gContestantTurnOrder[r7] * 5 + 2;
- u16 var = sub_80DB748(3);
+ u32 contestantOffset = gContestantTurnOrder[i] * 5 + 2;
+ u16 symbolOffset = GetStatusSymbolTileOffset(STAT_SYMBOL_SWIRL);
- ContestBG_FillBoxWithIncrementingTile(0, var, 0x14, r6, r10, r8, r9, r8);
- var += 16;
- ContestBG_FillBoxWithIncrementingTile(0, var, 0x14, r6 + 1, r10, r8, r9, r8);
+ ContestBG_FillBoxWithIncrementingTile(0, symbolOffset, 20, contestantOffset, 2, 1, 17, 1);
+ symbolOffset += 16;
+ ContestBG_FillBoxWithIncrementingTile(0, symbolOffset, 20, contestantOffset + 1, 2, 1, 17, 1);
PlaySE(SE_C_PASI);
}
}
}
-bool8 sub_80DE1E8(u8 contestant)
+bool8 IsContestantAllowedToCombo(u8 contestant)
{
- if (eContestantStatus[contestant].disappointedRepeat || eContestantStatus[contestant].nervous)
+ if (eContestantStatus[contestant].repeatedMove || eContestantStatus[contestant].nervous)
return FALSE;
else
return TRUE;
}
-static void sub_80DE224(void)
+static void SetBgForCurtainDrop(void)
{
s32 i;
u16 bg0Cnt, bg1Cnt, bg2Cnt;
@@ -4858,14 +5094,14 @@ static void sub_80DE224(void)
CopyToBgTilemapBuffer(1, gUnknown_08C17980, 0, 0);
Contest_SetBgCopyFlags(1);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- gSprites[gContestResources->field_14[i].unk0].oam.priority = 1;
- gSprites[gContestResources->field_14[i].unk1].oam.priority = 1;
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.priority = 1;
+ gSprites[eContestGfxState[i].nextTurnSpriteId].oam.priority = 1;
}
}
-static void sub_80DE350(void)
+static void UpdateContestantBoxOrder(void)
{
s32 i;
u16 bg1Cnt;
@@ -4886,20 +5122,20 @@ static void sub_80DE350(void)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- gSprites[gContestResources->field_14[i].unk0].oam.priority = 0;
- gSprites[gContestResources->field_14[i].unk1].oam.priority = 0;
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.priority = 0;
+ gSprites[eContestGfxState[i].nextTurnSpriteId].oam.priority = 0;
}
}
-static void sub_80DE424(u8 taskId)
+static void Task_StartDropCurtainAtRoundEnd(u8 taskId)
{
gBattle_BG1_X = 0;
gBattle_BG1_Y = DISPLAY_HEIGHT;
PlaySE12WithPanning(SE_C_MAKU_D, 0);
- gTasks[taskId].func = sub_80DE464;
+ gTasks[taskId].func = Task_UpdateCurtainDropAtRoundEnd;
}
-static void sub_80DE464(u8 taskId)
+static void Task_UpdateCurtainDropAtRoundEnd(u8 taskId)
{
if ((s16)(gBattle_BG1_Y -= 7) < 0)
gBattle_BG1_Y = 0;
@@ -4908,11 +5144,11 @@ static void sub_80DE464(u8 taskId)
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80DE4A8;
+ gTasks[taskId].func = Task_ResetForNextRound;
}
}
-static void sub_80DE4A8(u8 taskId)
+static void Task_ResetForNextRound(u8 taskId)
{
s32 i;
@@ -4922,11 +5158,11 @@ static void sub_80DE4A8(u8 taskId)
for (i = 0; i < CONTESTANT_COUNT; i++)
eContest.prevTurnOrder[i] = gContestantTurnOrder[i];
FillContestantWindowBgs();
- sub_80DC864();
- sub_80DB69C();
+ UpdateBlendTaskContestantsData();
+ DrawConditionStars();
DrawContestantWindows();
- sub_80DE008(TRUE);
- sub_80DC44C();
+ ShowHideNextTurnGfx(TRUE);
+ UpdateSliderHeartSpriteYPositions();
gTasks[taskId].data[0] = 1;
break;
case 1:
@@ -4934,40 +5170,40 @@ static void sub_80DE4A8(u8 taskId)
{
u8 taskId2;
- eContest.unk1920B_2 = 1;
- if (sub_80DA8A4())
- sub_80DBAA0();
- taskId2 = CreateTask(sub_80FCC88, 0);
- SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
+ eContest.waitForLink = TRUE;
+ if (IsPlayerLinkLeader())
+ ResetContestantStatuses();
+ taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink);
ContestPrintLinkStandby();
gTasks[taskId].data[0] = 2;
}
else
{
- sub_80DBAA0();
+ ResetContestantStatuses();
gTasks[taskId].data[0] = 3;
}
break;
case 2:
- if (!eContest.unk1920B_2)
+ if (!eContest.waitForLink)
gTasks[taskId].data[0] = 3;
break;
case 3:
- sub_80DB884();
+ DrawStatusSymbols();
SwapMoveDescAndContestTilemaps();
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80DE5F4;
+ gTasks[taskId].func = Task_WaitRaiseCurtainAtRoundEnd;
break;
}
}
-static void sub_80DE5C0(u8 taskId)
+static void Task_UpdateRaiseCurtainAtRoundEnd(u8 taskId)
{
if ((s16)(gBattle_BG1_Y += 7) > DISPLAY_HEIGHT)
- gTasks[taskId].func = sub_80DA4F4;
+ gTasks[taskId].func = Task_UpdateContestantBoxOrder;
}
-static void sub_80DE5F4(u8 taskId)
+static void Task_WaitRaiseCurtainAtRoundEnd(u8 taskId)
{
if (gTasks[taskId].data[2] < 10)
{
@@ -4988,7 +5224,7 @@ static void sub_80DE5F4(u8 taskId)
{
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80DE65C;
+ gTasks[taskId].func = Task_StartRaiseCurtainAtRoundEnd;
}
else
{
@@ -4998,7 +5234,7 @@ static void sub_80DE5F4(u8 taskId)
}
}
-static void sub_80DE65C(u8 taskId)
+static void Task_StartRaiseCurtainAtRoundEnd(u8 taskId)
{
if (gTasks[taskId].data[2] < 10)
{
@@ -5008,49 +5244,53 @@ static void sub_80DE65C(u8 taskId)
{
gTasks[taskId].data[2] = 0;
PlaySE12WithPanning(SE_C_MAKU_U, 0);
- gTasks[taskId].func = sub_80DE5C0;
+ gTasks[taskId].func = Task_UpdateRaiseCurtainAtRoundEnd;
}
}
-static void sub_80DE69C(u8 a)
+#define tAnimId data[0]
+
+static void AnimateSliderHearts(u8 animId)
{
s32 i;
u8 taskId;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- gSprites[gContestResources->field_14[i].unk0].oam.matrixNum = AllocOamMatrix();
- gSprites[gContestResources->field_14[i].unk0].oam.affineMode = ST_OAM_AFFINE_NORMAL;
- StartSpriteAffineAnim(&gSprites[gContestResources->field_14[i].unk0], a);
- if (a == 2)
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.matrixNum = AllocOamMatrix();
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ StartSpriteAffineAnim(&gSprites[eContestGfxState[i].sliderHeartSpriteId], animId);
+ if (animId == SLIDER_HEART_ANIM_APPEAR)
{
- AnimateSprite(&gSprites[gContestResources->field_14[i].unk0]);
- gSprites[gContestResources->field_14[i].unk0].invisible = FALSE;
+ AnimateSprite(&gSprites[eContestGfxState[i].sliderHeartSpriteId]);
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].invisible = FALSE;
}
}
- taskId = CreateTask(sub_80DE794, 5);
- gTasks[taskId].data[0] = a;
- eContest.unk1920B_1 = 1;
+ taskId = CreateTask(Task_WaitForSliderHeartAnim, 5);
+ gTasks[taskId].tAnimId = animId;
+ eContest.sliderHeartsAnimating = TRUE;
}
-static void sub_80DE794(u8 taskId)
+static void Task_WaitForSliderHeartAnim(u8 taskId)
{
s32 i;
- if (gSprites[gContestResources->field_14[0].unk0].affineAnimEnded)
+ if (gSprites[eContestGfxState[0].sliderHeartSpriteId].affineAnimEnded)
{
- if ((u8)gTasks[taskId].data[0] == 1)
+ if ((u8)gTasks[taskId].tAnimId == SLIDER_HEART_ANIM_DISAPPEAR)
{
for (i = 0; i < CONTESTANT_COUNT; i++)
- gSprites[gContestResources->field_14[i].unk0].invisible = TRUE;
+ gSprites[eContestGfxState[i].sliderHeartSpriteId].invisible = TRUE;
}
for (i = 0; i < CONTESTANT_COUNT; i++)
- FreeSpriteOamMatrix(&gSprites[gContestResources->field_14[i].unk0]);
- eContest.unk1920B_1 = 0;
+ FreeSpriteOamMatrix(&gSprites[eContestGfxState[i].sliderHeartSpriteId]);
+ eContest.sliderHeartsAnimating = FALSE;
DestroyTask(taskId);
}
}
+#undef tAnimId
+
static u16 SanitizeMove(u16 move)
{
if (move >= MOVES_COUNT)
@@ -5065,14 +5305,14 @@ static u16 SanitizeSpecies(u16 species)
return species;
}
-static void sub_80DE864(u8 a)
+static void SetMoveSpecificAnimData(u8 contestant)
{
s32 i;
- u16 move = SanitizeMove(eContestantStatus[a].currMove);
- u16 species = SanitizeSpecies(gContestMons[a].species);
- u8 r5_2;
+ u16 move = SanitizeMove(eContestantStatus[contestant].currMove);
+ u16 species = SanitizeSpecies(gContestMons[contestant].species);
+ u8 targetContestant;
- memset(&gContestResources->field_18->species, 0, 0x14);
+ memset(&gContestResources->moveAnim->species, 0, 20);
ClearBattleAnimationVars();
for (i = 0; i < CONTESTANT_COUNT; i++)
gBattleMonForms[i] = 0;
@@ -5086,10 +5326,10 @@ static void sub_80DE864(u8 a)
break;
case MOVE_TRANSFORM:
case MOVE_ROLE_PLAY:
- r5_2 = eContestantStatus[a].unk1B;
- gContestResources->field_18->unk2 = SanitizeSpecies(gContestMons[r5_2].species);
- gContestResources->field_18->unk10 = gContestMons[r5_2].personality;
- gContestResources->field_18->unk4_0 = 1;
+ targetContestant = eContestantStatus[contestant].contestantAnimTarget;
+ gContestResources->moveAnim->targetSpecies = SanitizeSpecies(gContestMons[targetContestant].species);
+ gContestResources->moveAnim->targetPersonality = gContestMons[targetContestant].personality;
+ gContestResources->moveAnim->hasTargetAnim = TRUE;
break;
case MOVE_RETURN:
gAnimFriendship = MAX_FRIENDSHIP;
@@ -5101,9 +5341,9 @@ static void sub_80DE864(u8 a)
case MOVE_RAZOR_WIND:
case MOVE_SKULL_BASH:
case MOVE_SKY_ATTACK:
- if (eContest.unk1925E == 0)
+ if (eContest.moveAnimTurnCount == 0)
{
- eContest.unk1925E = 2;
+ eContest.moveAnimTurnCount = 2;
gAnimMoveTurn = 0;
}
else
@@ -5112,66 +5352,66 @@ static void sub_80DE864(u8 a)
}
break;
}
- sub_80DEA5C();
+ SetBattleTargetSpritePosition();
}
-static void sub_80DE9B0(u8 unused)
+static void ClearMoveAnimData(u8 contestant)
{
- memset(gContestResources->field_18, 0, sizeof(struct ContestStruct_field_18));
- if (eContest.unk1925E != 0)
- eContest.unk1925E--;
+ memset(gContestResources->moveAnim, 0, sizeof(struct ContestMoveAnimData));
+ if (eContest.moveAnimTurnCount != 0)
+ eContest.moveAnimTurnCount--;
}
-static void sub_80DE9DC(u8 contestant)
+static void SetMoveAnimAttackerData(u8 contestant)
{
- gContestResources->field_18->unk5 = contestant;
- gContestResources->field_18->species = SanitizeSpecies(gContestMons[contestant].species);
- gContestResources->field_18->unk8 = gContestMons[contestant].personality;
- gContestResources->field_18->unkC = gContestMons[contestant].otId;
+ gContestResources->moveAnim->contestant = contestant;
+ gContestResources->moveAnim->species = SanitizeSpecies(gContestMons[contestant].species);
+ gContestResources->moveAnim->personality = gContestMons[contestant].personality;
+ gContestResources->moveAnim->otId = gContestMons[contestant].otId;
}
-static void sub_80DEA20(void)
+static void CreateInvisibleBattleTargetSprite(void)
{
- gBattlerSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
+ gBattlerSpriteIds[B_POSITION_OPPONENT_RIGHT] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
InitSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]]);
- sub_80DEA5C();
+ SetBattleTargetSpritePosition();
}
-static void sub_80DEA5C(void)
+static void SetBattleTargetSpritePosition(void)
{
- struct Sprite *sprite = &gSprites[gBattlerSpriteIds[3]];
+ struct Sprite *sprite = &gSprites[gBattlerSpriteIds[B_POSITION_OPPONENT_RIGHT]];
sprite->pos2.x = 0;
sprite->pos2.y = 0;
- sprite->pos1.x = GetBattlerSpriteCoord(3, 0);
- sprite->pos1.y = GetBattlerSpriteCoord(3, 1);
+ sprite->pos1.x = GetBattlerSpriteCoord(B_POSITION_OPPONENT_RIGHT, BATTLER_COORD_X);
+ sprite->pos1.y = GetBattlerSpriteCoord(B_POSITION_OPPONENT_RIGHT, BATTLER_COORD_Y);
sprite->invisible = TRUE;
}
-static void SelectContestMoveBankTarget(u16 move)
+static void SetMoveTargetPosition(u16 move)
{
switch (gBattleMoves[move].target)
{
case MOVE_TARGET_USER_OR_SELECTED:
case MOVE_TARGET_USER:
- gBattlerTarget = 2;
+ gBattlerTarget = B_POSITION_PLAYER_RIGHT;
break;
case MOVE_TARGET_SELECTED:
case MOVE_TARGET_RANDOM:
case MOVE_TARGET_BOTH:
case MOVE_TARGET_FOES_AND_ALLY:
default:
- gBattlerTarget = 3;
+ gBattlerTarget = B_POSITION_OPPONENT_RIGHT;
break;
}
}
-static void Contest_PrintTextToBg0WindowStd(u32 a, const u8 *b)
+static void Contest_PrintTextToBg0WindowStd(u32 windowId, const u8 *b)
{
struct TextPrinterTemplate printerTemplate;
printerTemplate.currentChar = b;
- printerTemplate.windowId = a;
+ printerTemplate.windowId = windowId;
printerTemplate.fontId = 1;
printerTemplate.x = 0;
printerTemplate.y = 1;
@@ -5185,7 +5425,7 @@ static void Contest_PrintTextToBg0WindowStd(u32 a, const u8 *b)
printerTemplate.shadowColor = 8;
AddTextPrinter(&printerTemplate, 0, 0);
- PutWindowTilemap(a);
+ PutWindowTilemap(windowId);
Contest_SetBgCopyFlags(0);
}
@@ -5276,7 +5516,7 @@ void ResetContestLinkResults(void)
s32 j;
for(i = 0; i < CONTEST_CATEGORIES_COUNT; i++)
- for(j = 0; j < 4; j++)
+ for(j = 0; j < CONTESTANT_COUNT; j++)
gSaveBlock2Ptr->contestLinkResults[i][j] = 0;
}
@@ -5383,287 +5623,300 @@ void ClearContestWinnerPicsInContestHall(void)
gSaveBlock1Ptr->contestWinners[i] = gUnknown_08587FA4[i];
}
-// The functions below are probably related to Contests in TV.
-static void sub_80DF080(u8 contestant)
+static void SetContestLiveUpdateFlags(u8 contestant)
{
s32 i;
- if (!gContestResources->field_10->excitementFrozen
- && gContestResources->field_10->bits_0 > 0
- && !eContestantStatus[contestant].disappointedRepeat)
+ if (!eContestExcitement.frozen
+ && eContestExcitement.moveExcitement > 0
+ && !eContestantStatus[contestant].repeatedMove)
{
- gContestResources->field_1c[contestant].unkC |= 1;
- gContestResources->field_1c[contestant].unkE_2 = 1;
+ gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_EXCITING_APPEAL;
+ gContestResources->tv[contestant].madeExcitingAppeal = TRUE;
}
if (eContestantStatus[contestant].nervous)
- gContestResources->field_1c[contestant].unkC |= 2;
+ gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_GOT_NERVOUS;
- if (!gContestResources->field_10->excitementFrozen
- && gContestResources->field_10->bits_0 != 0
- && gContestResources->field_10->unk2 == 60)
+ if (!eContestExcitement.frozen
+ && eContestExcitement.moveExcitement != 0
+ && eContestExcitement.excitementAppealBonus == 60)
{
- gContestResources->field_1c[contestant].unkC |= 4;
+ gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_MAXED_EXCITEMENT;
}
- if (eContestantStatus[contestant].unk15_6
- && eContestantStatus[contestant].unk16 != 0)
+ if (eContestantStatus[contestant].usedComboMove
+ && eContestantStatus[contestant].completedCombo)
{
- gContestResources->field_1c[contestant].unkC |= 8;
+ gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_USED_COMBO;
}
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (i != contestant && eContestantStatus[i].jam != 0)
{
- gContestResources->field_1c[contestant].unkC |= 0x10;
- gContestResources->field_1c[i].unkC |= 0x40;
+ gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_STARTLED_OTHER;
+ gContestResources->tv[i].winnerFlags |= CONTESTLIVE_FLAG_GOT_STARTLED;
}
}
if (eContestantStatus[contestant].numTurnsSkipped != 0
|| eContestantStatus[contestant].noMoreTurns)
{
- gContestResources->field_1c[contestant].unkC |= 0x20;
+ gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_SKIPPED_TURN;
}
else if (!eContestantStatus[contestant].nervous)
{
- gContestResources->field_1c[contestant].unkC |= 0x80;
- gContestResources->field_1c[contestant].unkE_1 = 1;
- gContestResources->field_1c[contestant].unk0[eContest.turnNumber] = eContestantStatus[contestant].currMove;
+ gContestResources->tv[contestant].winnerFlags |= CONTESTLIVE_FLAG_MADE_APPEAL;
+ gContestResources->tv[contestant].madeAppeal = TRUE;
+ gContestResources->tv[contestant].appeals[eContest.appealNumber] = eContestantStatus[contestant].currMove;
}
- if (eContestantStatus[contestant].disappointedRepeat)
- gContestResources->field_1c[contestant].unkD |= 2;
+ if (eContestantStatus[contestant].repeatedMove)
+ gContestResources->tv[contestant].loserFlags |= CONTESTLIVE_FLAG_REPEATED_MOVE;
if (eContest.applauseLevel == 4
- && !gContestResources->field_10->excitementFrozen
- && gContestResources->field_10->bits_0 < 0)
+ && !eContestExcitement.frozen
+ && eContestExcitement.moveExcitement < 0)
{
- gContestResources->field_1c[contestant].unkD |= 0x20;
+ gContestResources->tv[contestant].loserFlags |= CONTESTLIVE_FLAG_MISSED_EXCITEMENT;
}
}
-static void sub_80DF250(void)
+static void CalculateContestLiveUpdateData(void)
{
- u8 r1;
+ u8 loser;
s32 i, j;
- bool32 r12, r8;
- u16 sp0[6];
- u8 spC[6];
- u16 sp14[5];
- u8 var_38;
- u8 r3;
- u8 count;
-
- r1 = 0;
- var_38 = 0;
-
+ bool32 notLastInRound1, notLastInRound2;
+ u16 appealMoves[CONTEST_NUM_APPEALS + 1];
+ u8 numMoveUses[CONTEST_NUM_APPEALS + 1];
+ u16 moveCandidates[CONTEST_NUM_APPEALS];
+ u8 winner;
+ u8 mostUses;
+ u8 numMoveCandidates;
+
+ loser = 0;
+ winner = 0;
+
+ // Get loser/winner ids
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (gContestFinalStandings[i] == 0)
- var_38 = i;
- else if (gContestFinalStandings[i] == 3)
- r1 = i;
+ winner = i;
+ else if (gContestFinalStandings[i] == CONTESTANT_COUNT - 1)
+ loser = i;
}
- gContestResources->field_1c[r1].unkD |= 1;
+ // Set flags for commenting on loser
+ gContestResources->tv[loser].loserFlags |= CONTESTLIVE_FLAG_LOST;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (i != var_38 && gContestMonTotalPoints[var_38] - gContestMonTotalPoints[i] <= 50)
- gContestResources->field_1c[i].unkD |= 4;
+ if (i != winner && gContestMonTotalPoints[winner] - gContestMonTotalPoints[i] <= 50)
+ gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_LOST_SMALL_MARGIN;
- if (!gContestResources->field_1c[i].unkE_2)
- gContestResources->field_1c[i].unkD |= 8;
+ if (!gContestResources->tv[i].madeExcitingAppeal)
+ gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_NO_EXCITEMENT;
for (j = 0; j < CONTESTANT_COUNT; j++)
{
- if (gContestMonConditions[i] < gContestMonConditions[j])
+ if (gContestMonRound1Points[i] < gContestMonRound1Points[j])
break;
}
- if (j == 4 && gContestFinalStandings[i] != 0)
- gContestResources->field_1c[i].unkD |= 0x10;
+ if (j == CONTESTANT_COUNT && gContestFinalStandings[i] != 0)
+ gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_BLEW_LEAD;
- r12 = FALSE;
- r8 = FALSE;
+ notLastInRound1 = FALSE;
+ notLastInRound2 = FALSE;
for (j = 0; j < CONTESTANT_COUNT; j++)
{
- if (gContestMonConditions[i] > gContestMonConditions[j])
- r12 = TRUE;
+ if (gContestMonRound1Points[i] > gContestMonRound1Points[j])
+ notLastInRound1 = TRUE;
if (gContestMonRound2Points[i] > gContestMonRound2Points[j])
- r8 = TRUE;
+ notLastInRound2 = TRUE;
}
- if (!r12 && !r8)
- gContestResources->field_1c[i].unkD |= 0x40;
+ if (!notLastInRound1 && !notLastInRound2)
+ gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_LAST_BOTH_ROUNDS;
- if (!gContestResources->field_1c[i].unkE_1)
- gContestResources->field_1c[i].unkD |= 0x80;
+ if (!gContestResources->tv[i].madeAppeal)
+ gContestResources->tv[i].loserFlags |= CONTESTLIVE_FLAG_NO_APPEALS;
}
- for (i = 0; i < 5; i++)
+ // Get what moves the winner used and how many times they used them
+ for (i = 0; i < CONTEST_NUM_APPEALS; i++)
{
- sp0[i] = 0;
- spC[i] = 0;
+ appealMoves[i] = MOVE_NONE;
+ numMoveUses[i] = 0;
}
- sp0[5] = 0xFFFF;
- spC[5] = 0;
+ appealMoves[CONTEST_NUM_APPEALS] = 0xFFFF;
+ numMoveUses[CONTEST_NUM_APPEALS] = 0;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < CONTEST_NUM_APPEALS; i++)
{
- if (gContestResources->field_1c[var_38].unk0[i] != 0)
+ if (gContestResources->tv[winner].appeals[i] != MOVE_NONE)
{
- for (j = 0; j < 5; j++)
+ for (j = 0; j < CONTEST_NUM_APPEALS; j++)
{
- if (gContestResources->field_1c[var_38].unk0[i] != sp0[j])
+ if (gContestResources->tv[winner].appeals[i] != appealMoves[j])
{
- if (sp0[j] == 0)
+ if (appealMoves[j] == MOVE_NONE)
{
- sp0[j] = gContestResources->field_1c[var_38].unk0[i];
- spC[j]++;
+ appealMoves[j] = gContestResources->tv[winner].appeals[i];
+ numMoveUses[j]++;
}
}
else
{
- spC[j]++;
+ numMoveUses[j]++;
}
}
}
}
- sp14[0] = sp0[0];
- r3 = spC[0];
- count = 0;
- for (i = 1; sp0[i] != 0xFFFF; i++)
+ // Choose an appeal move to comment on for the winner (most commonly used)
+ moveCandidates[0] = appealMoves[0];
+ mostUses = numMoveUses[0];
+ numMoveCandidates = 0;
+ for (i = 1; appealMoves[i] != 0xFFFF; i++)
{
- if (r3 < spC[i])
+ if (mostUses < numMoveUses[i])
{
- sp14[0] = sp0[i];
- r3 = spC[i];
- count = 1;
+ moveCandidates[0] = appealMoves[i];
+ mostUses = numMoveUses[i];
+ numMoveCandidates = 1;
}
- else if (r3 == spC[i])
+ else if (mostUses == numMoveUses[i])
{
- sp14[count] = sp0[i];
- count++;
+ moveCandidates[numMoveCandidates] = appealMoves[i];
+ numMoveCandidates++;
}
}
- gContestResources->field_1c[var_38].unkA = sp14[Random() % count];
+ gContestResources->tv[winner].move = moveCandidates[Random() % numMoveCandidates];
}
-static void sub_80DF4F8(void)
+static void SetConestLiveUpdateTVData(void)
{
s32 i;
- u32 bits;
- u8 r7;
- u8 r9, r10;
+ u32 flags;
+ u8 winner;
+ u8 round1Placing, round2Placing;
u8 count;
- u8 r5;
- u8 r2;
- u16 var;
- u8 r4;
- u8 r6;
- u8 sp0[4];
-
+ u8 randAction;
+ u8 numLoserCandidates;
+ u8 flagId;
+ u16 winnerFlag;
+ u8 loserFlag;
+ u8 loser;
+ u8 loserCandidates[CONTESTANT_COUNT - 1];
+
+ // Players mon didn't win, don't generate show
if (gContestFinalStandings[gContestPlayerMonIndex] != 0)
return;
- r7 = 0;
+ // Get winner id (unnecessary, we now know it's gContestPlayerMonIndex)
+ winner = 0;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (gContestFinalStandings[i] == 0)
- r7 = i;
+ winner = i;
}
- r9 = 0;
- r10 = 0;
+ // Get winner's placement in Round 1 and 2
+ round1Placing = 0;
+ round2Placing = 0;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (gContestMonConditions[r7] < gContestMonConditions[i])
- r9++;
- if (gContestMonRound2Points[r7] < gContestMonRound2Points[i])
- r10++;
+ if (gContestMonRound1Points[winner] < gContestMonRound1Points[i])
+ round1Placing++;
+ if (gContestMonRound2Points[winner] < gContestMonRound2Points[i])
+ round2Placing++;
}
- bits = gContestResources->field_1c[r7].unkC;
+ // Count how many TV comment-worthy actions the winner took
+ flags = gContestResources->tv[winner].winnerFlags;
count = 0;
- for (i = 0; i < 8; bits >>= 1, i++)
+ for (i = 0; i < 8; flags >>= 1, i++)
{
- if (bits & 1)
+ if (flags & 1)
count++;
}
- r5 = Random() % count;
- bits = gContestResources->field_1c[r7].unkC;
+ // Randomly choose one of these actions to comment on
+ randAction = Random() % count;
+ flags = gContestResources->tv[winner].winnerFlags;
count = 0;
- r2 = 0;
- for (i = 0; i < 8; bits >>= 1, r2++, i++)
+ flagId = 0;
+ for (i = 0; i < 8; flags >>= 1, flagId++, i++)
{
- if (!(bits & 1))
+ if (!(flags & 1))
continue;
- if (r5 == count)
+ if (randAction == count)
break;
count++;
}
+ winnerFlag = 1 << flagId;
- var = 1 << r2;
- if (r7 == 0)
+ // Pick a losing player with the highest severity of bad actions to comment on
+ if (winner == 0)
{
- sp0[0] = 1;
- r4 = gContestResources->field_1c[1].unkD;
+ loserCandidates[0] = 1;
+ loserFlag = gContestResources->tv[1].loserFlags;
i = 2;
}
else
{
- sp0[0] = 0;
- r4 = gContestResources->field_1c[0].unkD;
+ loserCandidates[0] = 0;
+ loserFlag = gContestResources->tv[0].loserFlags;
i = 1;
}
- r5 = 1;
+ numLoserCandidates = 1;
for (; i < CONTESTANT_COUNT; i++)
{
- if (i != r7)
+ if (i != winner)
{
- if (r4 < gContestResources->field_1c[i].unkD)
+ if (loserFlag < gContestResources->tv[i].loserFlags)
{
- sp0[0] = i;
- r4 = gContestResources->field_1c[i].unkD;
- r5 = 1;
+ // Losing player currently has the worst (highest) set of flags, only candidate
+ loserCandidates[0] = i;
+ loserFlag = gContestResources->tv[i].loserFlags;
+ numLoserCandidates = 1;
}
- else if (r4 == gContestResources->field_1c[i].unkD)
+ else if (loserFlag == gContestResources->tv[i].loserFlags)
{
- sp0[r5] = i;
- r5++;
+ // Tie, increment number of loser candidates
+ loserCandidates[numLoserCandidates] = i;
+ numLoserCandidates++;
}
}
}
+ loser = loserCandidates[Random() % numLoserCandidates];
- r6 = sp0[Random() % r5];
- r2 = 0x80;
- for (i = 0; i < 8; r2 >>= 1, i++)
+ // Choose the "worst" action to comment on (flag with highest value)
+ flagId = CONTESTLIVE_FLAG_NO_APPEALS;
+ for (i = 0; i < 8; flagId >>= 1, i++)
{
- r4 = gContestResources->field_1c[r6].unkD & r2;
- if (r4)
+ loserFlag = gContestResources->tv[loser].loserFlags & flagId;
+ if (loserFlag)
break;
}
- ContestLiveUpdates_BeforeInterview_1(r9);
- ContestLiveUpdates_BeforeInterview_2(r10);
- ContestLiveUpdates_BeforeInterview_3(var);
- ContestLiveUpdates_BeforeInterview_4(gContestResources->field_1c[r7].unkA);
- ContestLiveUpdates_BeforeInterview_5(r4, r6);
+ ContestLiveUpdates_Init(round1Placing);
+ ContestLiveUpdates_SetRound2Placing(round2Placing);
+ ContestLiveUpdates_SetWinnerAppealFlag(winnerFlag);
+ ContestLiveUpdates_SetWinnerMoveUsed(gContestResources->tv[winner].move);
+ ContestLiveUpdates_SetLoserData(loserFlag, loser);
}
// Unused
-void ContestDebugToggleBitfields(bool8 showUnkD)
+void ContestDebugToggleBitfields(bool8 loserFlags)
{
if (eContestDebugMode == CONTEST_DEBUG_MODE_OFF)
{
- if (!showUnkD)
- eContestDebugMode = CONTEST_DEBUG_MODE_PRINT_UNK_C;
+ if (!loserFlags)
+ eContestDebugMode = CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS;
else
- eContestDebugMode = CONTEST_DEBUG_MODE_PRINT_UNK_D;
+ eContestDebugMode = CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS;
}
else
{
@@ -5693,19 +5946,19 @@ static void ContestDebugPrintBitStrings(void)
if (!gEnableContestDebugging)
return;
- if (eContestDebugMode != CONTEST_DEBUG_MODE_PRINT_UNK_C && eContestDebugMode != CONTEST_DEBUG_MODE_PRINT_UNK_D)
+ if (eContestDebugMode != CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS && eContestDebugMode != CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS)
return;
for (i = 0; i < CONTESTANT_COUNT; i++)
FillWindowPixelBuffer(i, PIXEL_FILL(0));
- if (eContestDebugMode == CONTEST_DEBUG_MODE_PRINT_UNK_C)
+ if (eContestDebugMode == CONTEST_DEBUG_MODE_PRINT_WINNER_FLAGS)
{
for (i = 0; i < CONTESTANT_COUNT; i++)
{
txtPtr = StringCopy(text1, gText_CDot);
Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text1, 5, 1, 7);
- bits = gContestResources->field_1c[i].unkC;
+ bits = gContestResources->tv[i].winnerFlags;
for (j = 7; j > -1; j--) // Weird loop.
{
txtPtr = ConvertIntToDecimalStringN(txtPtr, bits & 1, STR_CONV_MODE_LEFT_ALIGN, 1);
@@ -5720,12 +5973,12 @@ static void ContestDebugPrintBitStrings(void)
Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[i], text1 + j, 55, 1, 7);
}
}
- else
+ else // CONTEST_DEBUG_MODE_PRINT_LOSER_FLAGS
{
for (i = 0; i < CONTESTANT_COUNT; i++)
{
StringCopy(text1, gText_BDot);
- bits = gContestResources->field_1c[i].unkD;
+ bits = gContestResources->tv[i].loserFlags;
txtPtr = &text1[2];
for (j = 7; j > -1; j--) // Weird loop.
{
@@ -5744,14 +5997,14 @@ static void ContestDebugPrintBitStrings(void)
SwapMoveDescAndContestTilemaps();
}
-static u8 sub_80DF940(u8 *nickname)
+static u8 GetMonNicknameLanguage(u8 *nickname)
{
u8 ret = GAME_LANGUAGE;
if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN)
return LANGUAGE_ENGLISH;
- if (StringLength(nickname) < 6)
+ if (StringLength(nickname) < PLAYER_NAME_LENGTH - 1)
{
while (*nickname != EOS)
{
@@ -5785,7 +6038,7 @@ static u8 sub_80DF940(u8 *nickname)
return ret;
}
-static void sub_80DF9D4(u8 *playerName)
+static void StripPlayerNameForLinkContest(u8 *playerName)
{
u8 chr = playerName[5];
@@ -5793,7 +6046,7 @@ static void sub_80DF9D4(u8 *playerName)
playerName[PLAYER_NAME_LENGTH] = chr;
}
-static void sub_80DF9E0(u8 *monName, s32 language)
+static void StripMonNameForLinkContest(u8 *monName, s32 language)
{
u8 chr;
@@ -5811,13 +6064,13 @@ static void sub_80DF9E0(u8 *monName, s32 language)
}
}
-void sub_80DFA08(struct ContestPokemon *mon, s32 language)
+void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 language)
{
u8 *name = mon->nickname;
if (language == LANGUAGE_JAPANESE)
{
- ConvertInternationalString(name, sub_80DF940(name));
+ ConvertInternationalString(name, GetMonNicknameLanguage(name));
}
else if (name[POKEMON_NAME_LENGTH] == EXT_CTRL_CODE_BEGIN)
{
diff --git a/src/contest_ai.c b/src/contest_ai.c
index 723c503ab..b5e91c314 100644
--- a/src/contest_ai.c
+++ b/src/contest_ai.c
@@ -4,16 +4,17 @@
#include "random.h"
#include "contest_ai.h"
#include "contest_effect.h"
+#include "constants/moves.h"
extern const u8 *gAIScriptPtr;
extern const u8 *gContestAIChecks[];
static void ContestAICmd_score(void);
-static void ContestAICmd_get_turn(void);
-static void ContestAICmd_if_turn_less_than(void);
-static void ContestAICmd_if_turn_more_than(void);
-static void ContestAICmd_if_turn_eq(void);
-static void ContestAICmd_if_turn_not_eq(void);
+static void ContestAICmd_get_appeal_num(void);
+static void ContestAICmd_if_appeal_num_less_than(void);
+static void ContestAICmd_if_appeal_num_more_than(void);
+static void ContestAICmd_if_appeal_num_eq(void);
+static void ContestAICmd_if_appeal_num_not_eq(void);
static void ContestAICmd_get_excitement(void);
static void ContestAICmd_if_excitement_less_than(void);
static void ContestAICmd_if_excitement_more_than(void);
@@ -150,11 +151,11 @@ typedef void (* ContestAICmdFunc)(void);
static const ContestAICmdFunc sContestAICmdTable[] =
{
ContestAICmd_score, // 0x00
- ContestAICmd_get_turn, // 0x01
- ContestAICmd_if_turn_less_than, // 0x02
- ContestAICmd_if_turn_more_than, // 0x03
- ContestAICmd_if_turn_eq, // 0x04
- ContestAICmd_if_turn_not_eq, // 0x05
+ ContestAICmd_get_appeal_num, // 0x01
+ ContestAICmd_if_appeal_num_less_than, // 0x02
+ ContestAICmd_if_appeal_num_more_than, // 0x03
+ ContestAICmd_if_appeal_num_eq, // 0x04
+ ContestAICmd_if_appeal_num_not_eq, // 0x05
ContestAICmd_get_excitement, // 0x06
ContestAICmd_if_excitement_less_than, // 0x07
ContestAICmd_if_excitement_more_than, // 0x08
@@ -288,7 +289,7 @@ static const ContestAICmdFunc sContestAICmdTable[] =
};
static void ContestAI_DoAIProcessing(void);
-static bool8 sub_81563B0(u8);
+static bool8 GetContestantIdByTurn(u8);
static void AIStackPushVar(const u8 *);
static u8 AIStackPop(void);
@@ -297,8 +298,8 @@ void ContestAI_ResetAI(u8 contestantAI)
int i;
memset(&eContestAI, 0, sizeof(struct ContestAIInfo));
- for (i = 0; i < 4; i++)
- eContestAI.unk5[i] = 100;
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ eContestAI.moveScores[i] = 100;
eContestAI.contestantId = contestantAI;
eContestAI.stackSize = 0;
@@ -321,16 +322,18 @@ u8 ContestAI_GetActionToUse(void)
while (1)
{
- u8 rval = Random() & 3;
- u8 r2 = eContestAI.unk5[rval];
+ // Randomly choose a move index. If it's the move
+ // with the highest (or tied highest) score, return
+ u8 moveIdx = Random() & (MAX_MON_MOVES - 1); // % MAX_MON_MOVES doesn't match
+ u8 score = eContestAI.moveScores[moveIdx];
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (r2 < eContestAI.unk5[i])
+ if (score < eContestAI.moveScores[i])
break;
}
- if (i == 4)
- return rval;
+ if (i == MAX_MON_MOVES)
+ return moveIdx;
}
}
@@ -345,26 +348,26 @@ static void ContestAI_DoAIProcessing(void)
case CONTESTAI_SETTING_UP:
gAIScriptPtr = gContestAIChecks[eContestAI.currentAICheck];
- if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == 0)
- eContestAI.nextMove = 0; // don't process a move that doesn't exist.
+ if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == MOVE_NONE)
+ eContestAI.nextMove = MOVE_NONE; // don't process a move that doesn't exist.
else
eContestAI.nextMove = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex];
eContestAI.aiState++;
break;
case CONTESTAI_PROCESSING:
- if (eContestAI.nextMove != 0)
+ if (eContestAI.nextMove != MOVE_NONE)
{
sContestAICmdTable[*gAIScriptPtr](); // run the command.
}
else
{
- eContestAI.unk5[eContestAI.nextMoveIndex] = 0; // don't consider a move that doesn't exist.
+ eContestAI.moveScores[eContestAI.nextMoveIndex] = 0; // don't consider a move that doesn't exist.
eContestAI.aiAction |= 1;
}
if (eContestAI.aiAction & 1)
{
eContestAI.nextMoveIndex++;
- if (eContestAI.nextMoveIndex < 4)
+ if (eContestAI.nextMoveIndex < MAX_MON_MOVES)
eContestAI.aiState = 0;
else
// aiState = CONTESTAI_FINISHED
@@ -376,12 +379,12 @@ static void ContestAI_DoAIProcessing(void)
}
}
-static u8 sub_81563B0(u8 var)
+static u8 GetContestantIdByTurn(u8 turn)
{
int i;
- for (i = 0; i < 4; i++)
- if (eContestResources8.turnOrder[i] == var)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ if (eContestAppealResults.turnOrder[i] == turn)
break;
return i;
@@ -389,27 +392,27 @@ static u8 sub_81563B0(u8 var)
static void ContestAICmd_score(void)
{
- s16 score = eContestAI.unk5[eContestAI.nextMoveIndex] + (s8)gAIScriptPtr[1];
+ s16 score = eContestAI.moveScores[eContestAI.nextMoveIndex] + (s8)gAIScriptPtr[1];
if (score > 255)
score = 255;
else if (score < 0)
score = 0;
- eContestAI.unk5[eContestAI.nextMoveIndex] = score;
+ eContestAI.moveScores[eContestAI.nextMoveIndex] = score;
gAIScriptPtr += 2;
}
-static void ContestAICmd_get_turn(void)
+static void ContestAICmd_get_appeal_num(void)
{
- eContestAI.scriptResult = eContest.turnNumber;
+ eContestAI.scriptResult = eContest.appealNumber;
gAIScriptPtr += 1;
}
-static void ContestAICmd_if_turn_less_than(void)
+static void ContestAICmd_if_appeal_num_less_than(void)
{
- ContestAICmd_get_turn();
+ ContestAICmd_get_appeal_num();
if (eContestAI.scriptResult < gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -417,9 +420,9 @@ static void ContestAICmd_if_turn_less_than(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_if_turn_more_than(void)
+static void ContestAICmd_if_appeal_num_more_than(void)
{
- ContestAICmd_get_turn();
+ ContestAICmd_get_appeal_num();
if (eContestAI.scriptResult > gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -427,9 +430,9 @@ static void ContestAICmd_if_turn_more_than(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_if_turn_eq(void)
+static void ContestAICmd_if_appeal_num_eq(void)
{
- ContestAICmd_get_turn();
+ ContestAICmd_get_appeal_num();
if (eContestAI.scriptResult == gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -437,9 +440,9 @@ static void ContestAICmd_if_turn_eq(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_if_turn_not_eq(void)
+static void ContestAICmd_if_appeal_num_not_eq(void)
{
- ContestAICmd_get_turn();
+ ContestAICmd_get_appeal_num();
if (eContestAI.scriptResult != gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -495,7 +498,7 @@ static void ContestAICmd_if_excitement_not_eq(void)
static void ContestAICmd_get_user_order(void)
{
- eContestAI.scriptResult = eContestResources8.turnOrder[eContestAI.contestantId];
+ eContestAI.scriptResult = eContestAppealResults.turnOrder[eContestAI.contestantId];
gAIScriptPtr += 1;
}
@@ -633,7 +636,7 @@ static void ContestAICmd_unk_19(void)
static void ContestAICmd_unk_1A(void)
{
- eContestAI.scriptResult = gContestMonConditions[eContestAI.contestantId];
+ eContestAI.scriptResult = gContestMonRound1Points[eContestAI.contestantId];
gAIScriptPtr += 1;
}
@@ -1146,9 +1149,9 @@ static void ContestAICmd_if_would_not_finish_combo(void)
static void ContestAICmd_get_condition(void)
{
- int var = sub_81563B0(gAIScriptPtr[1]);
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- eContestAI.scriptResult = eContestantStatus[var].condition / 10;
+ eContestAI.scriptResult = eContestantStatus[contestant].condition / 10;
gAIScriptPtr += 2;
}
@@ -1194,11 +1197,11 @@ static void ContestAICmd_if_condition_not_eq(void)
static void ContestAICmd_get_used_combo_starter(void)
{
- u16 result = 0;
- u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u16 result = FALSE;
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- if (sub_80DE1E8(var))
- result = gContestMoves[eContestantStatus[var].prevMove].comboStarterId ? 1 : 0;
+ if (IsContestantAllowedToCombo(contestant))
+ result = gContestMoves[eContestantStatus[contestant].prevMove].comboStarterId ? TRUE : FALSE;
eContestAI.scriptResult = result;
gAIScriptPtr += 2;
@@ -1246,7 +1249,7 @@ static void ContestAICmd_if_used_combo_starter_not_eq(void)
static void ContestAICmd_check_can_participate(void)
{
- if (Contest_IsMonsTurnDisabled(sub_81563B0(gAIScriptPtr[1])))
+ if (Contest_IsMonsTurnDisabled(GetContestantIdByTurn(gAIScriptPtr[1])))
eContestAI.scriptResult = FALSE;
else
eContestAI.scriptResult = TRUE;
@@ -1276,9 +1279,9 @@ static void ContestAICmd_if_cannot_participate(void)
static void ContestAICmd_get_val_812A188(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- eContestAI.scriptResult = eContestantStatus[var].unk15_3;
+ eContestAI.scriptResult = eContestantStatus[contestant].unk15_3;
gAIScriptPtr += 2;
}
@@ -1304,9 +1307,9 @@ static void ContestAICmd_contest_58(void)
static void ContestAICmd_unk_59(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- eContestAI.scriptResult = eContestantStatus[var].pointTotal - eContestantStatus[eContestAI.contestantId].pointTotal;
+ eContestAI.scriptResult = eContestantStatus[contestant].pointTotal - eContestantStatus[eContestAI.contestantId].pointTotal;
gAIScriptPtr += 2;
}
@@ -1352,9 +1355,9 @@ static void ContestAICmd_unk_5D(void)
static void ContestAICmd_unk_5E(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- eContestAI.scriptResult = gContestMonConditions[var] - gContestMonConditions[eContestAI.contestantId];
+ eContestAI.scriptResult = gContestMonRound1Points[contestant] - gContestMonRound1Points[eContestAI.contestantId];
gAIScriptPtr += 2;
}
@@ -1400,9 +1403,9 @@ static void ContestAICmd_unk_62(void)
static void ContestAICmd_unk_63(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
- u8 var2 = gAIScriptPtr[2];
- u16 move = eContest.moveHistory[var2][var];
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
+ u8 turn = gAIScriptPtr[2];
+ u16 move = eContest.moveHistory[turn][contestant];
eContestAI.scriptResult = gContestMoves[move].effect;
gAIScriptPtr += 3;
@@ -1450,9 +1453,9 @@ static void ContestAICmd_unk_67(void)
static void ContestAICmd_unk_68(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
- u8 var2 = gAIScriptPtr[2];
- s8 result = eContest.excitementHistory[var2][var];
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
+ u8 turn = gAIScriptPtr[2];
+ s8 result = eContest.excitementHistory[turn][contestant];
eContestAI.scriptResult = result;
gAIScriptPtr += 3;
@@ -1500,9 +1503,9 @@ static void ContestAICmd_unk_6C(void)
static void ContestAICmd_unk_6D(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
- u8 var2 = gAIScriptPtr[2];
- u16 move = eContest.moveHistory[var2][var];
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
+ u8 turn = gAIScriptPtr[2];
+ u16 move = eContest.moveHistory[turn][contestant];
eContestAI.scriptResult = gContestEffects[gContestMoves[move].effect].effectType;
gAIScriptPtr += 3;
diff --git a/src/contest_effect.c b/src/contest_effect.c
index d6b06c3ba..8d1bbb298 100644
--- a/src/contest_effect.c
+++ b/src/contest_effect.c
@@ -82,98 +82,98 @@ static void ContestEffect_HighlyAppealing(void)
// After this move, the user is more easily startled.
static void ContestEffect_UserMoreEasilyStartled(void)
{
- eContestantStatus[eContestResources8.contestant].moreEasilyStartled = TRUE;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_MORE_CONSCIOUS);
+ eContestantStatus[eContestAppealResults.contestant].moreEasilyStartled = TRUE;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MORE_CONSCIOUS);
}
// Makes a great appeal, but allows no more to the end.
static void ContestEffect_GreatAppealButNoMoreMoves(void)
{
- eContestantStatus[eContestResources8.contestant].exploded = TRUE;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_NO_APPEAL);
+ eContestantStatus[eContestAppealResults.contestant].exploded = TRUE;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NO_APPEAL);
}
// Can be used repeatedly without boring the JUDGE.
static void ContestEffect_RepetitionNotBoring(void)
{
- eContestantStatus[eContestResources8.contestant].usedRepeatableMove = TRUE;
- eContestantStatus[eContestResources8.contestant].disappointedRepeat = FALSE;
- eContestantStatus[eContestResources8.contestant].moveRepeatCount = 0;
+ eContestantStatus[eContestAppealResults.contestant].usedRepeatableMove = TRUE;
+ eContestantStatus[eContestAppealResults.contestant].repeatedMove = FALSE;
+ eContestantStatus[eContestAppealResults.contestant].moveRepeatCount = 0;
}
// Can avoid being startled by others once.
static void ContestEffect_AvoidStartleOnce(void)
{
- eContestantStatus[eContestResources8.contestant].jamSafetyCount = 1;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_SETTLE_DOWN);
+ eContestantStatus[eContestAppealResults.contestant].jamSafetyCount = 1;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SETTLE_DOWN);
}
// Can avoid being startled by others.
static void ContestEffect_AvoidStartle(void)
{
- eContestantStatus[eContestResources8.contestant].immune = TRUE;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_OBLIVIOUS_TO_OTHERS);
+ eContestantStatus[eContestAppealResults.contestant].immune = TRUE;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_OBLIVIOUS_TO_OTHERS);
}
// Can avoid being startled by others a little.
static void ContestEffect_AvoidStartleSlightly(void)
{
- eContestantStatus[eContestResources8.contestant].jamReduction = 20;
- SetContestantEffectStringID(eContestResources8.contestant,CONTEST_STRING_LESS_AWARE);
+ eContestantStatus[eContestAppealResults.contestant].jamReduction = 20;
+ SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_LESS_AWARE);
}
// After this move, the user is less likely to be startled.
static void ContestEffect_UserLessEasilyStartled(void)
{
- eContestantStatus[eContestResources8.contestant].resistant = TRUE;
- SetContestantEffectStringID(eContestResources8.contestant,CONTEST_STRING_STOPPED_CARING);
+ eContestantStatus[eContestAppealResults.contestant].resistant = TRUE;
+ SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_STOPPED_CARING);
}
// Slightly startles the POKéMON in front.
static void ContestEffect_StartleFrontMon(void)
{
u8 idx = 0;
- u8 a = eContestResources8.contestant;
+ u8 a = eContestAppealResults.contestant;
- if (eContestResources8.turnOrder[a] != 0) {
+ if (eContestAppealResults.turnOrder[a] != 0) {
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[a] - 1 == eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[a] - 1 == eContestAppealResults.turnOrder[i])
break;
}
- eContestResources8.jamQueue[0] = i;
- eContestResources8.jamQueue[1] = 0xFF;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
idx = WasAtLeastOneOpponentJammed();
}
if (idx == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Slightly startles those that have made appeals.
static void ContestEffect_StartlePrevMons(void)
{
u8 idx = 0;
- u8 a = eContestResources8.contestant;
+ u8 contestant = eContestAppealResults.contestant;
- if (eContestResources8.turnOrder[a] != 0)
+ if (eContestAppealResults.turnOrder[contestant] != 0)
{
int i, j;
- for (i = 0, j = 0; i < 4; i++)
+ for (i = 0, j = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[a] > eContestResources8.turnOrder[i])
- eContestResources8.jamQueue[j++] = i;
+ if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i])
+ eContestAppealResults.jamQueue[j++] = i;
}
- eContestResources8.jamQueue[j] = 0xFF;
+ eContestAppealResults.jamQueue[j] = 0xFF;
idx = WasAtLeastOneOpponentJammed();
}
if (idx == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Startles the POKéMON that appealed before the user.
@@ -189,7 +189,7 @@ static void ContestEffect_StartlePrevMon2(void)
else
jam = 60;
- eContestResources8.jam = jam;
+ eContestAppealResults.jam = jam;
ContestEffect_StartleFrontMon();
}
@@ -197,8 +197,8 @@ static void ContestEffect_StartlePrevMon2(void)
static void ContestEffect_StartlePrevMons2(void)
{
u8 numStartled = 0;
- u8 contestant = eContestResources8.contestant;
- u8 turnOrder = eContestResources8.turnOrder[contestant];
+ u8 contestant = eContestAppealResults.contestant;
+ u8 turnOrder = eContestAppealResults.turnOrder[contestant];
if (turnOrder != 0)
{
@@ -206,12 +206,12 @@ static void ContestEffect_StartlePrevMons2(void)
for (i = 0; i < 4; i++)
{
- if (eContestResources8.turnOrder[contestant] > eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i])
{
u8 rval, jam;
- eContestResources8.jamQueue[0] = i;
- eContestResources8.jamQueue[1] = 0xFF;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
rval = Random() % 10;
if (rval == 0)
@@ -227,31 +227,31 @@ static void ContestEffect_StartlePrevMons2(void)
else
jam = 60;
- eContestResources8.jam = jam;
+ eContestAppealResults.jam = jam;
if (WasAtLeastOneOpponentJammed())
numStartled++;
}
}
}
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
if (numStartled == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
// Shifts the JUDGE's attention from others.
static void ContestEffect_ShiftJudgeAttention(void)
{
bool32 hitAny = FALSE;
- u8 contestant = eContestResources8.contestant;
+ u8 contestant = eContestAppealResults.contestant;
- if (eContestResources8.turnOrder[eContestResources8.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
int i;
for (i = 0; i < 4; i++)
{
- if (eContestResources8.turnOrder[contestant] > eContestResources8.turnOrder[i] &&
+ if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i] &&
eContestantStatus[i].hasJudgesAttention &&
CanUnnerveContestant(i))
{
@@ -262,10 +262,10 @@ static void ContestEffect_ShiftJudgeAttention(void)
}
}
}
- SetContestantEffectStringID(eContestResources8.contestant,CONTEST_STRING_DAZZLE_ATTEMPT);
+ SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_DAZZLE_ATTEMPT);
if (!hitAny)
{
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
}
@@ -273,81 +273,81 @@ static void ContestEffect_ShiftJudgeAttention(void)
static void ContestEffect_StartleMonWithJudgesAttention(void)
{
u8 numStartled = 0;
- u8 contestant = eContestResources8.contestant;
+ u8 contestant = eContestAppealResults.contestant;
- if (eContestResources8.turnOrder[eContestResources8.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
int i;
for (i = 0; i < 4; i++)
{
- if (eContestResources8.turnOrder[contestant] > eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i])
{
if (eContestantStatus[i].hasJudgesAttention)
- eContestResources8.jam = 50;
+ eContestAppealResults.jam = 50;
else
- eContestResources8.jam = 10;
- eContestResources8.jamQueue[0] = i;
- eContestResources8.jamQueue[1] = 0xFF;
+ eContestAppealResults.jam = 10;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
if (WasAtLeastOneOpponentJammed())
numStartled++;
}
}
}
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
if (numStartled == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
// Jams the others, and misses one turn of appeals.
static void ContestEffect_JamsOthersButMissOneTurn(void)
{
- eContestantStatus[eContestResources8.contestant].turnSkipped = TRUE;
+ eContestantStatus[eContestAppealResults.contestant].turnSkipped = TRUE;
ContestEffect_StartlePrevMons();
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Startles POKéMON that made a same-type appeal.
static void ContestEffect_StartleMonsSameTypeAppeal(void)
{
- u16 move = eContestantStatus[eContestResources8.contestant].currMove;
+ u16 move = eContestantStatus[eContestAppealResults.contestant].currMove;
JamByMoveCategory(gContestMoves[move].contestCategory);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made COOL appeals.
static void ContestEffect_StartleMonsCoolAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_COOL);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made BEAUTY appeals.
static void ContestEffect_StartleMonsBeautyAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_BEAUTY);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made CUTE appeals.
static void ContestEffect_StartleMonsCuteAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_CUTE);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made SMART appeals.
static void ContestEffect_StartleMonsSmartAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_SMART);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Badly startles POKéMON that made TOUGH appeals.
static void ContestEffect_StartleMonsToughAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_TOUGH);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// Makes one POKéMON after the user nervous.
@@ -355,13 +355,13 @@ static void ContestEffect_MakeFollowingMonNervous(void)
{
bool32 hitAny = FALSE;
- if (eContestResources8.turnOrder[eContestResources8.contestant] != 3)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 3)
{
int i;
for (i = 0; i < 4; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] + 1 == eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] + 1 == eContestAppealResults.turnOrder[i])
{
if (CanUnnerveContestant(i))
{
@@ -377,9 +377,9 @@ static void ContestEffect_MakeFollowingMonNervous(void)
}
}
}
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_UNNERVE_ATTEMPT);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_UNNERVE_ATTEMPT);
if (!hitAny)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
// Makes all POKéMON after the user nervous.
@@ -390,13 +390,13 @@ static void ContestEffect_MakeFollowingMonsNervous(void)
u8 contestantIds[5];
int i;
int numAfter;
- s16 oddsMod[4];
- s16 odds[4];
+ s16 oddsMod[CONTESTANT_COUNT];
+ s16 odds[CONTESTANT_COUNT];
memset(contestantIds, 0xFF, ARRAY_COUNT(contestantIds));
- for (i = 0, numAfter = 0; i < 4; i++)
+ for (i = 0, numAfter = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] < eContestResources8.turnOrder[i] &&
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] < eContestAppealResults.turnOrder[i] &&
!eContestantStatus[i].nervous && !Contest_IsMonsTurnDisabled(i))
contestantIds[numAfter++] = i;
}
@@ -418,12 +418,12 @@ static void ContestEffect_MakeFollowingMonsNervous(void)
}
else
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
odds[i] = 0;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestantStatus[i].hasJudgesAttention && sub_80DE1E8(i))
+ if (eContestantStatus[i].hasJudgesAttention && IsContestantAllowedToCombo(i))
oddsMod[i] = gComboStarterLookupTable[gContestMoves[eContestantStatus[i].prevMove].comboStarterId] * 10;
else
oddsMod[i] = 0;
@@ -457,12 +457,12 @@ static void ContestEffect_MakeFollowingMonsNervous(void)
SetContestantEffectStringID(contestantIds[i], CONTEST_STRING_UNAFFECTED);
numUnnerved++;
}
- eContestResources8.unnervedPokes[contestantIds[i]] = 1;
+ eContestAppealResults.unnervedPokes[contestantIds[i]] = 1;
}
}
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_UNNERVE_WAITING);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_UNNERVE_WAITING);
if (numUnnerved == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
// Worsens the condition of those that made appeals.
@@ -471,22 +471,22 @@ static void ContestEffect_WorsenConditionOfPrevMons(void)
u8 numHit = 0;
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i] &&
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i] &&
eContestantStatus[i].condition > 0 &&
CanUnnerveContestant(i))
{
eContestantStatus[i].condition = 0;
- eContestantStatus[i].conditionMod = 2;
+ eContestantStatus[i].conditionMod = CONDITION_LOSE;
SetContestantEffectStringID(i, CONTEST_STRING_REGAINED_FORM);
numHit++;
}
}
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_TAUNT_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_TAUNT_WELL);
if (numHit == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_IGNORED);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_IGNORED);
}
// Badly startles POKéMON in good condition.
@@ -495,44 +495,44 @@ static void ContestEffect_BadlyStartlesMonsInGoodCondition(void)
u8 numHit = 0;
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i])
{
if (eContestantStatus[i].condition > 0)
- eContestResources8.jam = 40;
+ eContestAppealResults.jam = 40;
else
- eContestResources8.jam = 10;
- eContestResources8.jamQueue[0] = i;
- eContestResources8.jamQueue[1] = 0xFF;
+ eContestAppealResults.jam = 10;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
if (WasAtLeastOneOpponentJammed())
numHit++;
}
}
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_JAM_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_JAM_WELL);
if (numHit == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_IGNORED);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_IGNORED);
}
// The appeal works great if performed first.
static void ContestEffect_BetterIfFirst(void)
{
- if (gContestantTurnOrder[eContestResources8.contestant] == 0)
+ if (gContestantTurnOrder[eContestAppealResults.contestant] == 0)
{
- u16 move = eContestantStatus[eContestResources8.contestant].currMove;
- eContestantStatus[eContestResources8.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_HUSTLE_STANDOUT);
+ u16 move = eContestantStatus[eContestAppealResults.contestant].currMove;
+ eContestantStatus[eContestAppealResults.contestant].appeal += 2 * gContestEffects[gContestMoves[move].effect].appeal;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_HUSTLE_STANDOUT);
}
}
// The appeal works great if performed last.
static void ContestEffect_BetterIfLast(void)
{
- if (gContestantTurnOrder[eContestResources8.contestant] == 3)
+ if (gContestantTurnOrder[eContestAppealResults.contestant] == 3)
{
- u16 move = eContestantStatus[eContestResources8.contestant].currMove;
- eContestantStatus[eContestResources8.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_WORK_HARD_UNNOTICED);
+ u16 move = eContestantStatus[eContestAppealResults.contestant].currMove;
+ eContestantStatus[eContestAppealResults.contestant].appeal += 2 * gContestEffects[gContestMoves[move].effect].appeal;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_HARD_UNNOTICED);
}
}
@@ -542,24 +542,24 @@ static void ContestEffect_AppealAsGoodAsPrevOnes(void)
int i;
int appealSum;
- for (i = 0, appealSum = 0; i < 4; i++)
+ for (i = 0, appealSum = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i])
- appealSum += eContestantStatus[i].appeal2;
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i])
+ appealSum += eContestantStatus[i].appeal;
}
if (appealSum < 0)
appealSum = 0;
- if (eContestResources8.turnOrder[eContestResources8.contestant] == 0 || appealSum == 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] == 0 || appealSum == 0)
{
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_WELL);
}
else
{
- eContestantStatus[eContestResources8.contestant].appeal2 += appealSum / 2;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_WORK_BEFORE);
+ eContestantStatus[eContestAppealResults.contestant].appeal += appealSum / 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_BEFORE);
}
- eContestantStatus[eContestResources8.contestant].appeal2 = RoundTowardsZero(eContestantStatus[eContestResources8.contestant].appeal2);
+ eContestantStatus[eContestAppealResults.contestant].appeal = RoundTowardsZero(eContestantStatus[eContestAppealResults.contestant].appeal);
}
// Makes the appeal as good as the one before it.
@@ -567,42 +567,42 @@ static void ContestEffect_AppealAsGoodAsPrevOne(void)
{
s16 appeal = 0;
- if (eContestResources8.turnOrder[eContestResources8.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] - 1 == eContestResources8.turnOrder[i])
- appeal = eContestantStatus[i].appeal2;
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i])
+ appeal = eContestantStatus[i].appeal;
}
}
- if (eContestResources8.turnOrder[eContestResources8.contestant] == 0 || appeal <= 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] == 0 || appeal <= 0)
{
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_WELL2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_WELL2);
}
else
{
- eContestantStatus[eContestResources8.contestant].appeal2 += appeal;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_WORK_PRECEDING);
+ eContestantStatus[eContestAppealResults.contestant].appeal += appeal;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_PRECEDING);
}
}
// The appeal works better the later it is performed.
static void ContestEffect_BetterWhenLater(void)
{
- u8 whichTurn = eContestResources8.turnOrder[eContestResources8.contestant];
+ u8 whichTurn = eContestAppealResults.turnOrder[eContestAppealResults.contestant];
if (whichTurn == 0)
- eContestantStatus[eContestResources8.contestant].appeal2 = 10;
+ eContestantStatus[eContestAppealResults.contestant].appeal = 10;
else
- eContestantStatus[eContestResources8.contestant].appeal2 = 20 * whichTurn;
+ eContestantStatus[eContestAppealResults.contestant].appeal = 20 * whichTurn;
if (whichTurn == 0)
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_SHOWN_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_SHOWN_WELL);
else if (whichTurn == 1)
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL);
else if (whichTurn == 2)
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL);
else
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY);
}
// The appeal's quality varies depending on its timing.
@@ -614,31 +614,31 @@ static void ContestEffect_QualityDependsOnTiming(void)
if (rval < 3)
{
appeal = 10;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL);
} else if (rval < 6)
{
appeal = 20;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2);
} else if (rval < 8)
{
appeal = 40;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2);
} else if (rval < 9)
{
appeal = 60;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_VERY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_VERY_WELL);
}
else
{
appeal = 80;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2);
}
- eContestantStatus[eContestResources8.contestant].appeal2 = appeal;
+ eContestantStatus[eContestAppealResults.contestant].appeal = appeal;
}
static void ContestEffect_BetterIfSameType(void)
{
- s8 turnOrder = eContestResources8.turnOrder[eContestResources8.contestant];
+ s8 turnOrder = eContestAppealResults.turnOrder[eContestAppealResults.contestant];
s8 i = turnOrder - 1, j;
u16 move;
@@ -647,9 +647,9 @@ static void ContestEffect_BetterIfSameType(void)
while (1)
{
- for (j = 0; j < 4; j++)
+ for (j = 0; j < CONTESTANT_COUNT; j++)
{
- if (eContestResources8.turnOrder[j] == i)
+ if (eContestAppealResults.turnOrder[j] == i)
break;
}
if (eContestantStatus[j].noMoreTurns || eContestantStatus[j].nervous || eContestantStatus[j].numTurnsSkipped)
@@ -663,29 +663,29 @@ static void ContestEffect_BetterIfSameType(void)
}
}
- move = eContestantStatus[eContestResources8.contestant].currMove;
+ move = eContestantStatus[eContestAppealResults.contestant].currMove;
if (gContestMoves[move].contestCategory == gContestMoves[eContestantStatus[j].currMove].contestCategory)
{
- eContestantStatus[eContestResources8.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_SAME_TYPE_GOOD);
+ eContestantStatus[eContestAppealResults.contestant].appeal += gContestEffects[gContestMoves[move].effect].appeal * 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SAME_TYPE_GOOD);
}
}
// Works well if different in type than the one before.
static void ContestEffect_BetterIfDiffType(void)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
- u16 move = eContestantStatus[eContestResources8.contestant].currMove;
+ u16 move = eContestantStatus[eContestAppealResults.contestant].currMove;
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] - 1 == eContestResources8.turnOrder[i] &&
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i] &&
gContestMoves[move].contestCategory != gContestMoves[eContestantStatus[i].currMove].contestCategory)
{
- eContestantStatus[eContestResources8.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_DIFF_TYPE_GOOD);
+ eContestantStatus[eContestAppealResults.contestant].appeal += gContestEffects[gContestMoves[move].effect].appeal * 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_DIFF_TYPE_GOOD);
break;
}
}
@@ -695,23 +695,23 @@ static void ContestEffect_BetterIfDiffType(void)
// Affected by how well the appeal in front goes.
static void ContestEffect_AffectedByPrevAppeal(void)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] != 0)
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0)
{
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] - 1 == eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i])
{
- if (eContestantStatus[eContestResources8.contestant].appeal2 > eContestantStatus[i].appeal2)
+ if (eContestantStatus[eContestAppealResults.contestant].appeal > eContestantStatus[i].appeal)
{
- eContestantStatus[eContestResources8.contestant].appeal2 *= 2;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_STOOD_OUT_AS_MUCH);
+ eContestantStatus[eContestAppealResults.contestant].appeal *= 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_STOOD_OUT_AS_MUCH);
}
- else if (eContestantStatus[eContestResources8.contestant].appeal2 < eContestantStatus[i].appeal2)
+ else if (eContestantStatus[eContestAppealResults.contestant].appeal < eContestantStatus[i].appeal)
{
- eContestantStatus[eContestResources8.contestant].appeal2 = 0;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_NOT_AS_WELL);
+ eContestantStatus[eContestAppealResults.contestant].appeal = 0;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NOT_AS_WELL);
}
}
}
@@ -721,26 +721,26 @@ static void ContestEffect_AffectedByPrevAppeal(void)
// Ups the user's condition. Helps prevent nervousness.
static void ContestEffect_ImproveConditionPreventNervousness(void)
{
- if (eContestantStatus[eContestResources8.contestant].condition < 30)
+ if (eContestantStatus[eContestAppealResults.contestant].condition < 30)
{
- eContestantStatus[eContestResources8.contestant].condition += 10;
- eContestantStatus[eContestResources8.contestant].conditionMod = 1;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_CONDITION_ROSE);
+ eContestantStatus[eContestAppealResults.contestant].condition += 10;
+ eContestantStatus[eContestAppealResults.contestant].conditionMod = CONDITION_GAIN;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_CONDITION_ROSE);
}
else
{
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_NO_CONDITION_IMPROVE);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NO_CONDITION_IMPROVE);
}
}
// The appeal works well if the user's condition is good.
static void ContestEffect_BetterWithGoodCondition(void)
{
- eContestantStatus[eContestResources8.contestant].appealTripleCondition = TRUE;
- if (eContestantStatus[eContestResources8.contestant].condition != 0)
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_HOT_STATUS);
+ eContestantStatus[eContestAppealResults.contestant].appealTripleCondition = TRUE;
+ if (eContestantStatus[eContestAppealResults.contestant].condition != 0)
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_HOT_STATUS);
else
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL);
}
// The next appeal can be made earlier next turn.
@@ -748,20 +748,20 @@ static void ContestEffect_NextAppealEarlier(void)
{
s8 i;
s8 j;
- u8 turnOrder[4];
+ u8 turnOrder[CONTESTANT_COUNT];
- if (eContest.turnNumber != 4)
+ if (eContest.appealNumber != CONTEST_LAST_APPEAL)
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
turnOrder[i] = eContestantStatus[i].nextTurnOrder;
- turnOrder[eContestResources8.contestant] = 0xFF;
+ turnOrder[eContestAppealResults.contestant] = 0xFF;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- for (j = 0; j < 4; j++)
+ for (j = 0; j < CONTESTANT_COUNT; j++)
{
- if (j != eContestResources8.contestant &&
+ if (j != eContestAppealResults.contestant &&
i == turnOrder[j] &&
turnOrder[j] == eContestantStatus[j].nextTurnOrder)
{
@@ -769,19 +769,19 @@ static void ContestEffect_NextAppealEarlier(void)
break;
}
}
- if (j == 4)
+ if (j == CONTESTANT_COUNT)
break;
}
- turnOrder[eContestResources8.contestant] = 0;
- eContestantStatus[eContestResources8.contestant].turnOrderMod = 1;
+ turnOrder[eContestAppealResults.contestant] = 0;
+ eContestantStatus[eContestAppealResults.contestant].turnOrderMod = 1;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
eContestantStatus[i].nextTurnOrder = turnOrder[i];
}
- eContestantStatus[eContestResources8.contestant].turnOrderModAction = 1;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_MOVE_UP_LINE);
+ eContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 1;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MOVE_UP_LINE);
}
}
@@ -790,20 +790,20 @@ static void ContestEffect_NextAppealLater(void)
{
s8 i;
s8 j;
- u8 turnOrder[4];
+ u8 turnOrder[CONTESTANT_COUNT];
- if (eContest.turnNumber != 4)
+ if (eContest.appealNumber != CONTEST_LAST_APPEAL)
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
turnOrder[i] = eContestantStatus[i].nextTurnOrder;
- turnOrder[eContestResources8.contestant] = 0xFF;
+ turnOrder[eContestAppealResults.contestant] = 0xFF;
- for (i = 3; i > -1; i--)
+ for (i = CONTESTANT_COUNT - 1; i > -1; i--)
{
- for (j = 0; j < 4; j++)
+ for (j = 0; j < CONTESTANT_COUNT; j++)
{
- if (j != eContestResources8.contestant &&
+ if (j != eContestAppealResults.contestant &&
i == turnOrder[j] &&
turnOrder[j] == eContestantStatus[j].nextTurnOrder)
{
@@ -811,19 +811,19 @@ static void ContestEffect_NextAppealLater(void)
break;
}
}
- if (j == 4)
+ if (j == CONTESTANT_COUNT)
break;
}
- turnOrder[eContestResources8.contestant] = 3;
- eContestantStatus[eContestResources8.contestant].turnOrderMod = 1;
+ turnOrder[eContestAppealResults.contestant] = CONTESTANT_COUNT - 1;
+ eContestantStatus[eContestAppealResults.contestant].turnOrderMod = 1;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
eContestantStatus[i].nextTurnOrder = turnOrder[i];
}
- eContestantStatus[eContestResources8.contestant].turnOrderModAction = 2;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_MOVE_BACK_LINE);
+ eContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 2;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MOVE_BACK_LINE);
}
}
@@ -838,22 +838,22 @@ static void ContestEffect_ScrambleNextTurnOrder(void)
{
s8 i;
s8 j;
- u8 turnOrder[4];
- u8 unselectedContestants[4];
+ u8 turnOrder[CONTESTANT_COUNT];
+ u8 unselectedContestants[CONTESTANT_COUNT];
- if (eContest.turnNumber != 4)
+ if (eContest.appealNumber != CONTEST_LAST_APPEAL)
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
turnOrder[i] = eContestantStatus[i].nextTurnOrder;
unselectedContestants[i] = i;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- u8 rval = Random() % (4 - i);
+ u8 rval = Random() % (CONTESTANT_COUNT - i);
- for (j = 0; j < 4; j++)
+ for (j = 0; j < CONTESTANT_COUNT; j++)
{
if (unselectedContestants[j] != 0xFF)
{
@@ -869,22 +869,22 @@ static void ContestEffect_ScrambleNextTurnOrder(void)
}
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
eContestantStatus[i].nextTurnOrder = turnOrder[i];
eContestantStatus[i].turnOrderMod = 2;
}
- eContestantStatus[eContestResources8.contestant].turnOrderModAction = 3;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_SCRAMBLE_ORDER);
+ eContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 3;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SCRAMBLE_ORDER);
}
}
// An appeal that excites the audience in any CONTEST.
static void ContestEffect_ExciteAudienceInAnyContest(void)
{
- if (gContestMoves[eContestantStatus[eContestResources8.contestant].currMove].contestCategory != gSpecialVar_ContestCategory)
+ if (gContestMoves[eContestantStatus[eContestAppealResults.contestant].currMove].contestCategory != gSpecialVar_ContestCategory)
{
- eContestantStatus[eContestResources8.contestant].overrideCategoryExcitementMod = TRUE;
+ eContestantStatus[eContestAppealResults.contestant].overrideCategoryExcitementMod = TRUE;
}
}
@@ -894,26 +894,26 @@ static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void)
int i;
u8 numJammed = 0;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i])
{
- if (eContestantStatus[i].appeal2 > 0)
+ if (eContestantStatus[i].appeal > 0)
{
- eContestResources8.jam = eContestantStatus[i].appeal2 / 2;
- eContestResources8.jam = RoundUp(eContestResources8.jam);
+ eContestAppealResults.jam = eContestantStatus[i].appeal / 2;
+ eContestAppealResults.jam = RoundUp(eContestAppealResults.jam);
}
else
- eContestResources8.jam = 10;
- eContestResources8.jamQueue[0] = i;
- eContestResources8.jamQueue[1] = 0xFF;
+ eContestAppealResults.jam = 10;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
if (WasAtLeastOneOpponentJammed())
numJammed++;
}
}
if (numJammed == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
// The appeal works best the more the crowd is excited.
@@ -924,39 +924,39 @@ static void ContestEffect_BetterWhenAudienceExcited(void)
if (eContest.applauseLevel == 0)
{
appeal = 10;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL);
}
else if (eContest.applauseLevel == 1)
{
appeal = 20;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2);
}
else if (eContest.applauseLevel == 2)
{
appeal = 30;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2);
}
else if (eContest.applauseLevel == 3)
{
appeal = 50;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_VERY_WELL);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_VERY_WELL);
}
else
{
appeal = 60;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2);
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2);
}
- eContestantStatus[eContestResources8.contestant].appeal2 = appeal;
+ eContestantStatus[eContestAppealResults.contestant].appeal = appeal;
}
// Temporarily stops the crowd from growing excited.
static void ContestEffect_DontExciteAudience(void)
{
- if (!eContestResources10.excitementFrozen)
+ if (!eContestExcitement.frozen)
{
- eContestResources10.excitementFrozen = TRUE;
- eContestResources10.excitementFreezer = eContestResources8.contestant;
- SetContestantEffectStringID(eContestResources8.contestant, CONTEST_STRING_ATTRACTED_ATTENTION);
+ eContestExcitement.frozen = TRUE;
+ eContestExcitement.freezer = eContestAppealResults.contestant;
+ SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTRACTED_ATTENTION);
}
}
@@ -965,28 +965,28 @@ static void JamByMoveCategory(u8 category)
int i;
int numJammed = 0;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (eContestResources8.turnOrder[eContestResources8.contestant] > eContestResources8.turnOrder[i])
+ if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i])
{
if (category == gContestMoves[eContestantStatus[i].currMove].contestCategory)
- eContestResources8.jam = 40;
+ eContestAppealResults.jam = 40;
else
- eContestResources8.jam = 10;
- eContestResources8.jamQueue[0] = i;
- eContestResources8.jamQueue[1] = 0xFF;
+ eContestAppealResults.jam = 10;
+ eContestAppealResults.jamQueue[0] = i;
+ eContestAppealResults.jamQueue[1] = 0xFF;
if (WasAtLeastOneOpponentJammed())
numJammed++;
}
}
if (numJammed == 0)
- SetContestantEffectStringID2(eContestResources8.contestant, CONTEST_STRING_MESSED_UP2);
+ SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
static bool8 CanUnnerveContestant(u8 i)
{
- eContestResources8.unnervedPokes[i] = 1;
+ eContestAppealResults.unnervedPokes[i] = 1;
if (eContestantStatus[i].immune)
{
SetContestantEffectStringID(i, CONTEST_STRING_AVOID_SEEING);
@@ -1010,41 +1010,41 @@ static bool8 CanUnnerveContestant(u8 i)
static bool8 WasAtLeastOneOpponentJammed(void)
{
- s16 jamBuffer[4] = {0};
+ s16 jamBuffer[CONTESTANT_COUNT] = {0};
int i;
- for (i = 0; eContestResources8.jamQueue[i] != 0xFF; i++)
+ for (i = 0; eContestAppealResults.jamQueue[i] != 0xFF; i++)
{
- u8 contestant = eContestResources8.jamQueue[i];
+ u8 contestant = eContestAppealResults.jamQueue[i];
if (CanUnnerveContestant(contestant))
{
- eContestResources8.jam2 = eContestResources8.jam;
+ eContestAppealResults.jam2 = eContestAppealResults.jam;
if (eContestantStatus[contestant].moreEasilyStartled)
- eContestResources8.jam2 *= 2;
+ eContestAppealResults.jam2 *= 2;
if (eContestantStatus[contestant].resistant)
{
- eContestResources8.jam2 = 10;
+ eContestAppealResults.jam2 = 10;
SetContestantEffectStringID(contestant, CONTEST_STRING_LITTLE_DISTRACTED);
}
else
{
- eContestResources8.jam2 -= eContestantStatus[contestant].jamReduction;
- if (eContestResources8.jam2 <= 0)
+ eContestAppealResults.jam2 -= eContestantStatus[contestant].jamReduction;
+ if (eContestAppealResults.jam2 <= 0)
{
- eContestResources8.jam2 = 0;
+ eContestAppealResults.jam2 = 0;
SetContestantEffectStringID(contestant, CONTEST_STRING_NOT_FAZED);
}
else
{
- JamContestant(contestant, eContestResources8.jam2);
- SetStartledString(contestant, eContestResources8.jam2);
- jamBuffer[contestant] = eContestResources8.jam2;
+ JamContestant(contestant, eContestAppealResults.jam2);
+ SetStartledString(contestant, eContestAppealResults.jam2);
+ jamBuffer[contestant] = eContestAppealResults.jam2;
}
}
}
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (jamBuffer[i] != 0)
return TRUE;
@@ -1054,7 +1054,7 @@ static bool8 WasAtLeastOneOpponentJammed(void)
static void JamContestant(u8 i, u8 jam)
{
- eContestantStatus[i].appeal2 -= jam;
+ eContestantStatus[i].appeal -= jam;
eContestantStatus[i].jam += jam;
}
diff --git a/src/contest_link.c b/src/contest_link.c
index 692c58603..ae6975268 100644
--- a/src/contest_link.c
+++ b/src/contest_link.c
@@ -8,10 +8,18 @@
#include "task.h"
#include "contest_link.h"
-static void sub_80FC5C0(u8);
-static void sub_80FC5DC(u8);
-
-bool32 sub_80FC4F4(void *src, u16 size)
+static void Task_LinkContest_StartInitFlags(u8);
+static void Task_LinkContest_InitFlags(u8);
+
+#define tState data[0]
+#define tDelayTimer data[1]
+#define tCategories(i) data[(i) + 1]
+#define tLeaderIds(i) data[(i) + 5]
+#define tCategory data[9]
+#define tTimer data[11]
+#define tStandbyState data[12]
+
+bool32 LinkContest_SendBlock(void *src, u16 size)
{
memcpy(gDecompressionBuffer, src, size);
if (SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer, size))
@@ -20,21 +28,21 @@ bool32 sub_80FC4F4(void *src, u16 size)
return FALSE;
}
-bool8 sub_80FC530(u8 arg0)
+bool8 LinkContest_GetBlockReceived(u8 flag)
{
- u8 mask = (1 << arg0);
+ u8 mask = (1 << flag);
if (!(GetBlockReceivedStatus() & mask))
{
return FALSE;
}
else
{
- ResetBlockReceivedFlag(arg0);
+ ResetBlockReceivedFlag(flag);
return TRUE;
}
}
-bool8 sub_80FC55C(void)
+bool8 LinkContest_GetBlockReceivedFromAllPlayers(void)
{
if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
{
@@ -47,23 +55,23 @@ bool8 sub_80FC55C(void)
}
}
-void sub_80FC580(u8 taskId)
+void Task_LinkContest_Init(u8 taskId)
{
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
gBlockRecvBuffer[i][0] = 0xFF;
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80FC5C0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].func = Task_LinkContest_StartInitFlags;
}
-static void sub_80FC5C0(u8 taskId)
+static void Task_LinkContest_StartInitFlags(u8 taskId)
{
- gTasks[taskId].func = sub_80FC5DC;
+ gTasks[taskId].func = Task_LinkContest_InitFlags;
}
-static void sub_80FC5DC(u8 taskId)
+static void Task_LinkContest_InitFlags(u8 taskId)
{
int i;
@@ -76,6 +84,7 @@ static void sub_80FC5DC(u8 taskId)
if (gWirelessCommType == 1)
gLinkContestFlags = LINK_CONTEST_FLAG_IS_LINK | LINK_CONTEST_FLAG_IS_WIRELESS;
+ // Get number of players using Emerald/FRLG
for (i = 0; i < gNumLinkContestPlayers && (u32)(gLinkPlayers[i].version & 0xFF) - 1 > VERSION_RUBY - 1; i++)
;
@@ -85,22 +94,23 @@ static void sub_80FC5DC(u8 taskId)
SwitchTaskToFollowupFunc(taskId);
}
-bool32 sub_80FC670(s16 *arg0)
+bool32 LinkContest_TryLinkStandby(s16 *state)
{
+ // Skip standby for RS cabled links
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
return TRUE;
- switch (*arg0)
+ switch (*state)
{
case 0:
if (IsLinkTaskFinished())
{
- sub_800ADF8();
- (*arg0)++;
+ SetLinkStandbyCallback();
+ (*state)++;
}
return FALSE;
case 1:
- (*arg0)++;
+ (*state)++;
return FALSE;
default:
if (IsLinkTaskFinished() != TRUE)
@@ -110,438 +120,443 @@ bool32 sub_80FC670(s16 *arg0)
}
}
-void sub_80FC6BC(u8 taskId)
+void Task_LinkContest_CommunicateMonsRS(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
+ // Send players mon
if (GetMultiplayerId() == 0)
{
if (IsLinkTaskFinished())
{
memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon));
- gTasks[taskId].data[0] = 10;
+ gTasks[taskId].tState = 10;
}
}
else
{
memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon));
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tState = 1;
}
break;
case 1:
- if (sub_80FC55C())
+ // Wait for other players data
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
for (i = 0; i < gNumLinkContestPlayers; i++)
{
memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon));
- sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language);
+ StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[i].language);
}
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (++gTasks[taskId].data[11] > 300)
+ // Only if leader. Request other players data
+ if (++gTasks[taskId].tTimer > 300)
{
- sub_800A4D8(2);
- gTasks[taskId].data[0] = 1;
+ SendBlockRequest(2);
+ gTasks[taskId].tState = 1;
}
break;
default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[12] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tTimer = 0;
+ gTasks[taskId].tStandbyState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FC804(u8 taskId)
+void Task_LinkContest_CommunicateRngRS(u8 taskId)
{
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (GetMultiplayerId() == 0)
{
- if (IsLinkTaskFinished() && sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == TRUE)
- gTasks[taskId].data[0]++;
+ if (IsLinkTaskFinished() && LinkContest_SendBlock(&gRngValue, sizeof(gRngValue)) == TRUE)
+ gTasks[taskId].tState++;
}
else
{
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC530(0))
+ if (LinkContest_GetBlockReceived(0))
{
memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue));
memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue));
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FC894(u8 taskId)
+void Task_LinkContest_CommunicateCategoryRS(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
- gBlockSendBuffer[0] = gTasks[taskId].data[9];
+ gBlockSendBuffer[0] = gTasks[taskId].tCategory;
if (GetMultiplayerId() == 0)
{
if (IsLinkTaskFinished())
- gTasks[taskId].data[0] = 10;
+ gTasks[taskId].tState = 10;
}
else
{
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
for (i = 0; i < gNumLinkContestPlayers; i++)
- gTasks[taskId].data[i + 1] = gBlockRecvBuffer[i][0];
+ gTasks[taskId].tCategories(i) = gBlockRecvBuffer[i][0];
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (++gTasks[taskId].data[11] > 10)
+ if (++gTasks[taskId].tTimer > 10)
{
- sub_800A4D8(2);
- gTasks[taskId].data[0] = 1;
+ SendBlockRequest(2);
+ gTasks[taskId].tState = 1;
}
break;
default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[12] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tTimer = 0;
+ gTasks[taskId].tStandbyState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FC998(u8 taskId)
+void Task_LinkContest_CommunicateMonIdxs(u8 taskId)
{
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
- gTasks[taskId].data[0]++;
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ gTasks[taskId].tState++;
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FC9F8(u8 taskId)
+void Task_LinkContest_CommunicateMoveSelections(u8 taskId)
{
int i;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(&eContestantStatus[gContestPlayerMonIndex].currMove, sizeof(eContestantStatus[gContestPlayerMonIndex].currMove)) == TRUE)
- gTasks[taskId].data[0]++;
+ // Send player's move selection
+ if (LinkContest_SendBlock(&eContestantStatus[gContestPlayerMonIndex].currMove, sizeof(eContestantStatus[gContestPlayerMonIndex].currMove)) == TRUE)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
+ // Receive partners' move selections
for (i = 0; i < gNumLinkContestPlayers; i++)
eContestantStatus[i].currMove = gBlockRecvBuffer[i][0];
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FCACC(u8 taskId)
+void Task_LinkContest_CommunicateFinalStandings(u8 taskId)
{
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestMonTotalPoints, sizeof(gContestMonTotalPoints)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestMonTotalPoints, sizeof(gContestMonTotalPoints)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonTotalPoints));
- gTasks[taskId].data[0]++;
+ memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonTotalPoints));
+ gTasks[taskId].tState++;
}
break;
case 2:
case 5:
case 8:
case 11:
- if (gTasks[taskId].data[1]++ > 10)
+ if (gTasks[taskId].tDelayTimer++ > 10)
{
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tDelayTimer = 0;
+ gTasks[taskId].tState++;
}
break;
case 3:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gUnknown_02039F10, sizeof(gUnknown_02039F10)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestMonAppealPointTotals, sizeof(gContestMonAppealPointTotals)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 4:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gUnknown_02039F10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F10));
- gTasks[taskId].data[0]++;
+ memcpy(gContestMonAppealPointTotals, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonAppealPointTotals));
+ gTasks[taskId].tState++;
}
break;
case 6:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestMonRound2Points, sizeof(gContestMonRound2Points)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestMonRound2Points, sizeof(gContestMonRound2Points)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 7:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestMonRound2Points, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonRound2Points));
- gTasks[taskId].data[0]++;
+ memcpy(gContestMonRound2Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonRound2Points));
+ gTasks[taskId].tState++;
}
break;
case 9:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestFinalStandings));
- gTasks[taskId].data[0]++;
+ memcpy(gContestFinalStandings, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestFinalStandings));
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FCC88(u8 taskId)
+void Task_LinkContest_CommunicateAppealsState(u8 taskId)
{
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(eContestantStatus, 4 * sizeof(struct ContestantStatus)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(eContestantStatus, CONTESTANT_COUNT * sizeof(struct ContestantStatus)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(eContestantStatus, gBlockRecvBuffer[gUnknown_02039F2B], 4 * sizeof(struct ContestantStatus));
- gTasks[taskId].data[0]++;
+ memcpy(eContestantStatus, gBlockRecvBuffer[gContestLinkLeaderIndex], CONTESTANT_COUNT * sizeof(struct ContestantStatus));
+ gTasks[taskId].tState++;
}
break;
case 2:
case 5:
case 8:
case 11:
- if (gTasks[taskId].data[1]++ > 10)
+ if (gTasks[taskId].tDelayTimer++ > 10)
{
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tDelayTimer = 0;
+ gTasks[taskId].tState++;
}
break;
case 3:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestResources->field_8, sizeof(struct UnknownContestStruct7)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestResources->appealResults, sizeof(struct ContestAppealMoveResults)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 4:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestResources->field_8, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct7));
- gTasks[taskId].data[0]++;
+ memcpy(gContestResources->appealResults, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct ContestAppealMoveResults));
+ gTasks[taskId].tState++;
}
break;
case 6:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestResources->field_10, sizeof(struct UnknownContestStruct5)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestResources->excitement, sizeof(struct ContestExcitement)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 7:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestResources->field_10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct5));
- gTasks[taskId].data[0]++;
+ memcpy(gContestResources->excitement, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct ContestExcitement));
+ gTasks[taskId].tState++;
}
break;
case 9:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder));
- gTasks[taskId].data[0]++;
+ memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestantTurnOrder));
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FCE48(u8 taskId)
+void Task_LinkContest_CommunicateLeaderIdsRS(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
gBlockSendBuffer[0] = 0x6E;
if (GetMultiplayerId() == 0)
{
if (IsLinkTaskFinished())
- gTasks[taskId].data[0] = 10;
+ gTasks[taskId].tState = 10;
}
else
{
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- for (i = 0; i < 4; i++)
- gTasks[taskId].data[i + 5] = gBlockRecvBuffer[i][0];
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ gTasks[taskId].tLeaderIds(i) = gBlockRecvBuffer[i][0];
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (++gTasks[taskId].data[11] > 10)
+ if (++gTasks[taskId].tTimer > 10)
{
- sub_800A4D8(2);
- gTasks[taskId].data[0] = 1;
+ SendBlockRequest(2);
+ gTasks[taskId].tState = 1;
}
break;
default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[12] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tTimer = 0;
+ gTasks[taskId].tStandbyState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FCF40(u8 taskId)
+void Task_LinkContest_CommunicateRound1Points(u8 taskId)
{
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestMonConditions, sizeof(gContestMonConditions)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestMonRound1Points, sizeof(gContestMonRound1Points)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestMonConditions, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonConditions));
- gTasks[taskId].data[0]++;
+ memcpy(gContestMonRound1Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonRound1Points));
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[12] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tStandbyState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FCFD0(u8 taskId)
+void Task_LinkContest_CommunicateTurnOrder(u8 taskId)
{
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder));
- gTasks[taskId].data[0]++;
+ memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestantTurnOrder));
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[12] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tStandbyState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
diff --git a/src/contest_link_util.c b/src/contest_link_util.c
index 8060b6cdc..31ffb5fdb 100644
--- a/src/contest_link_util.c
+++ b/src/contest_link_util.c
@@ -1,148 +1,158 @@
#include "global.h"
#include "contest.h"
+#include "contest_link.h"
#include "event_data.h"
#include "link.h"
#include "random.h"
#include "task.h"
-static void sub_81D9F14(u8);
-static void sub_81D9F30(u8);
-static void sub_81D9F4C(u8);
-static void sub_81D9F68(u8);
-static void sub_81DA10C(u8);
-static void sub_81DA138(u8);
-static void sub_81DA160(u8);
-static void sub_81DA244(u8);
-static void sub_81DA2E8(u8);
-static void sub_81DA3B8(u8);
-static void sub_81DA488(u8);
-
-void sub_81D9DE4(u8 taskId)
+/*
+ The functions in this file handle preliminary communication
+ for Emerald-only link contests. If the link contest has an RS
+ player linked, none of these functions are used.
+
+ The equivalent functions for RS-linked contests are spread
+ between contest_link.c and contest_util.c, and are suffixed RS
+ instead of Em
+*/
+
+static void Task_LinkContest_CommunicateMonsEm(u8);
+static void Task_LinkContest_StartCommunicateRngEm(u8);
+static void Task_LinkContest_CommunicateRngEm(u8);
+static void Task_LinkContest_StartCommunicateLeaderIdsEm(u8);
+static void Task_LinkContest_CommunicateLeaderIdsEm(u8);
+static void Task_LinkContest_StartCommunicateCategoryEm(u8);
+static void Task_LinkContest_CommunicateCategoryEm(u8);
+static void Task_LinkContest_SetUpContestEm(u8);
+static void Task_LinkContest_CommunicateAIMonsEm(u8);
+static void Task_LinkContest_CalculateRound1Em(u8);
+static void Task_LinkContest_CalculateTurnOrderEm(u8);
+
+#define tCategory data[9]
+
+void Task_LinkContest_StartCommunicationEm(u8 taskId)
{
int gameCleared;
- switch (gTasks[taskId].data[9])
+ switch (gTasks[taskId].tCategory)
{
- case 0:
+ case CONTEST_CATEGORY_COOL:
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON);
break;
- case 1:
+ case CONTEST_CATEGORY_BEAUTY:
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON);
break;
- case 2:
+ case CONTEST_CATEGORY_CUTE:
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON);
break;
- case 3:
+ case CONTEST_CATEGORY_SMART:
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON);
break;
- case 4:
+ case CONTEST_CATEGORY_TOUGH:
default:
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON);
break;
}
- gContestMons[gContestPlayerMonIndex].unk2C[0] = gHighestRibbonRank;
+ gContestMons[gContestPlayerMonIndex].highestRank = gHighestRibbonRank;
gameCleared = FlagGet(FLAG_SYS_GAME_CLEAR) > 0;
- gContestMons[gContestPlayerMonIndex].unk2C[1] = gameCleared;
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA160, sub_81D9F14);
+ gContestMons[gContestPlayerMonIndex].gameCleared = gameCleared;
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonsEm, Task_LinkContest_StartCommunicateRngEm);
}
-static void sub_81D9F14(u8 taskId)
+static void Task_LinkContest_StartCommunicateRngEm(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA244, sub_81D9F30);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRngEm, Task_LinkContest_StartCommunicateLeaderIdsEm);
}
-static void sub_81D9F30(u8 taskId)
+static void Task_LinkContest_StartCommunicateLeaderIdsEm(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA2E8, sub_81D9F4C);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIdsEm, Task_LinkContest_StartCommunicateCategoryEm);
}
-static void sub_81D9F4C(u8 taskId)
+static void Task_LinkContest_StartCommunicateCategoryEm(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA3B8, sub_81D9F68);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateCategoryEm, Task_LinkContest_SetUpContestEm);
}
-static void sub_81D9F68(u8 taskId)
+static void Task_LinkContest_SetUpContestEm(u8 taskId)
{
u8 i;
u8 rank;
int gameCleared;
- u8 data1[4];
- u8 data2[4];
+ u8 categories[CONTESTANT_COUNT];
+ u8 leaderIds[CONTESTANT_COUNT];
- memset(data1, 0, sizeof(data1));
- memset(data2, 0, sizeof(data2));
+ memset(categories, 0, sizeof(categories));
+ memset(leaderIds, 0, sizeof(leaderIds));
for (i = 0; i < gNumLinkContestPlayers; i++)
- data1[i] = gTasks[taskId].data[i + 1];
+ categories[i] = gTasks[taskId].data[i + 1];
- i = 0;
- if (i < gNumLinkContestPlayers)
- {
- while (++i < gNumLinkContestPlayers)
- {
- if (data1[0] != data1[i])
- break;
- }
- }
+ // Ensure all players are doing the same category
+ for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++)
+ ;
if (i == gNumLinkContestPlayers)
- gSpecialVar_0x8004 = 0;
+ gSpecialVar_0x8004 = FALSE; // Category choices the same
else
- gSpecialVar_0x8004 = 1;
+ gSpecialVar_0x8004 = TRUE; // Category choices differ
for (i = 0; i < gNumLinkContestPlayers; i++)
- data2[i] = gTasks[taskId].data[i + 5];
+ leaderIds[i] = gTasks[taskId].data[i + 5];
- if (gNumLinkContestPlayers != 4 && GetMultiplayerId() == 0)
+ // If < 4 players and player is leader, set AI contestants based on rank and game clear
+ if (gNumLinkContestPlayers != CONTESTANT_COUNT && GetMultiplayerId() == 0)
{
- rank = gContestMons[0].unk2C[0];
+ rank = gContestMons[0].highestRank;
for (i = 1; i < gNumLinkContestPlayers; i++)
{
- if (rank < gContestMons[i].unk2C[0])
- rank = gContestMons[i].unk2C[0];
+ if (rank < gContestMons[i].highestRank)
+ rank = gContestMons[i].highestRank;
}
if (rank)
rank--;
- gameCleared = 1;
+ gameCleared = TRUE;
for (i = 0; i < gNumLinkContestPlayers; i++)
{
- if (!gContestMons[i].unk2C[1])
+ if (!gContestMons[i].gameCleared)
{
- gameCleared = 0;
+ gameCleared = FALSE;
break;
}
}
- sub_80DACBC(data1[0], rank, gameCleared);
+ SetLinkAIContestants(categories[0], rank, gameCleared);
}
- gUnknown_02039F2B = sub_80F86E0(data2);
- if (gNumLinkContestPlayers < 4)
- SetTaskFuncWithFollowupFunc(taskId, sub_81DA488, sub_81DA10C);
+ // Assign link leader. After initial communication all players will read data only from them
+ gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(leaderIds);
+
+ if (gNumLinkContestPlayers < CONTESTANT_COUNT)
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateAIMonsEm, Task_LinkContest_CalculateRound1Em);
else
- gTasks[taskId].func = sub_81DA10C;
+ gTasks[taskId].func = Task_LinkContest_CalculateRound1Em;
}
-static void sub_81DA10C(u8 taskId)
+static void Task_LinkContest_CalculateRound1Em(u8 taskId)
{
- sub_80DB09C(gSpecialVar_ContestCategory);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_81DA138);
+ CalculateRound1Points(gSpecialVar_ContestCategory);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrderEm);
}
-static void sub_81DA138(u8 taskId)
+static void Task_LinkContest_CalculateTurnOrderEm(u8 taskId)
{
SortContestants(FALSE);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection);
}
-static void sub_81DA160(u8 taskId)
+static void Task_LinkContest_CommunicateMonsEm(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
@@ -155,17 +165,17 @@ static void sub_81DA160(u8 taskId)
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(&gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)) == 1)
+ if (LinkContest_SendBlock(&gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)) == 1)
gTasks[taskId].data[0]++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
for (i = 0; i < gNumLinkContestPlayers; i++)
{
memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon));
- sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language);
+ StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[i].language);
}
gTasks[taskId].data[0]++;
@@ -174,9 +184,9 @@ static void sub_81DA160(u8 taskId)
}
}
-static void sub_81DA244(u8 taskId)
+static void Task_LinkContest_CommunicateRngEm(u8 taskId)
{
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
@@ -189,19 +199,22 @@ static void sub_81DA244(u8 taskId)
case 0:
if (GetMultiplayerId() == 0)
{
+ // Only the leader sends the RNG seed
if (!IsLinkTaskFinished())
return;
- if (sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == 1)
+ if (LinkContest_SendBlock(&gRngValue, sizeof(gRngValue)) == 1)
gTasks[taskId].data[0]++;
}
else
{
+ // Other link members skip to waiting
gTasks[taskId].data[0]++;
}
break;
case 1:
- if (sub_80FC530(0))
+ // Wait to receive RNG data
+ if (LinkContest_GetBlockReceived(0))
{
memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue));
memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue));
@@ -211,13 +224,13 @@ static void sub_81DA244(u8 taskId)
}
}
-static void sub_81DA2E8(u8 taskId)
+static void Task_LinkContest_CommunicateLeaderIdsEm(u8 taskId)
{
int i;
- u16 data[4];
- u16 var0;
+ u16 data[CONTESTANT_COUNT];
+ u16 leaderId;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
@@ -230,13 +243,13 @@ static void sub_81DA2E8(u8 taskId)
case 0:
if (IsLinkTaskFinished())
{
- var0 = 0x6E;
- if (sub_80FC4F4(&var0, sizeof(var0)) == 1)
+ leaderId = 0x6E;
+ if (LinkContest_SendBlock(&leaderId, sizeof(leaderId)) == 1)
gTasks[taskId].data[0]++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
for (i = 0; i < gNumLinkContestPlayers; i++)
{
@@ -250,13 +263,13 @@ static void sub_81DA2E8(u8 taskId)
}
}
-static void sub_81DA3B8(u8 taskId)
+static void Task_LinkContest_CommunicateCategoryEm(u8 taskId)
{
int i;
- u16 data[4];
- u16 var0;
+ u16 data[CONTESTANT_COUNT];
+ u16 category;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
@@ -269,13 +282,13 @@ static void sub_81DA3B8(u8 taskId)
case 0:
if (IsLinkTaskFinished())
{
- var0 = gTasks[taskId].data[9];
- if (sub_80FC4F4(&var0, sizeof(var0)) == 1)
+ category = gTasks[taskId].tCategory;
+ if (LinkContest_SendBlock(&category, sizeof(category)) == 1)
gTasks[taskId].data[0]++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
for (i = 0; i < gNumLinkContestPlayers; i++)
{
@@ -289,11 +302,11 @@ static void sub_81DA3B8(u8 taskId)
}
}
-static void sub_81DA488(u8 taskId)
+static void Task_LinkContest_CommunicateAIMonsEm(u8 taskId)
{
int i;
- if (!sub_80FC670(&gTasks[taskId].data[12]))
+ if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
return;
switch (gTasks[taskId].data[0])
@@ -309,7 +322,7 @@ static void sub_81DA488(u8 taskId)
if (!IsLinkTaskFinished())
return;
- if (sub_80FC4F4(&gContestMons[gNumLinkContestPlayers], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1)
+ if (LinkContest_SendBlock(&gContestMons[gNumLinkContestPlayers], (CONTESTANT_COUNT - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1)
gTasks[taskId].data[0]++;
}
else
@@ -318,11 +331,11 @@ static void sub_81DA488(u8 taskId)
}
break;
case 1:
- if (sub_80FC530(0))
+ if (LinkContest_GetBlockReceived(0))
{
- memcpy(&gContestMons[gNumLinkContestPlayers], gBlockRecvBuffer[0], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon));
- for (i = gNumLinkContestPlayers; i < 4; i++)
- sub_80DFA08(&gContestMons[i], gLinkPlayers[0].language);
+ memcpy(&gContestMons[gNumLinkContestPlayers], gBlockRecvBuffer[0], (CONTESTANT_COUNT - gNumLinkContestPlayers) * sizeof(struct ContestPokemon));
+ for (i = gNumLinkContestPlayers; i < CONTESTANT_COUNT; i++)
+ StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[0].language);
gTasks[taskId].data[0]++;
}
diff --git a/src/contest_util.c b/src/contest_util.c
index e82560a6e..00254248f 100644
--- a/src/contest_util.c
+++ b/src/contest_util.c
@@ -6,10 +6,12 @@
#include "contest.h"
#include "contest_util.h"
#include "contest_link.h"
+#include "contest_painting.h"
#include "data.h"
#include "decompress.h"
#include "dma3.h"
#include "event_data.h"
+#include "event_object_movement.h"
#include "field_specials.h"
#include "gpu_regs.h"
#include "graphics.h"
@@ -27,6 +29,7 @@
#include "save.h"
#include "scanline_effect.h"
#include "script.h"
+#include "script_menu.h"
#include "sound.h"
#include "string_util.h"
#include "strings.h"
@@ -36,6 +39,7 @@
#include "tv.h"
#include "util.h"
#include "window.h"
+#include "constants/event_objects.h"
#include "constants/field_specials.h"
#include "constants/game_stat.h"
#include "constants/rgb.h"
@@ -117,8 +121,8 @@ static void CB2_ShowContestResults(void);
static void VBlankCB_ShowContestResults(void);
static void Task_SlideContestResultsBg(u8);
static void Task_WaitForLinkPartnersBeforeResults(u8);
-static void sub_80F5F14(u8);
-static void sub_80F5F30(u8);
+static void Task_CommunicateMonIdxsForResults(u8);
+static void Task_WaitForLinkPartnerMonIdxs(u8);
static void Task_AnnouncePreliminaryResults(u8);
static void Task_FlashStarsAndHearts(u8);
static void Task_ShowPreliminaryResults(u8);
@@ -150,15 +154,22 @@ static void Task_CreateConfetti(u8);
static void SpriteCB_TextBoxSlideIn(struct Sprite *);
static void SpriteCB_TextBoxSlideOut(struct Sprite *);
static void SpriteCB_EndTextBoxSlideIn(struct Sprite *);
-static void sub_80F8508(u8);
-static void sub_80F8568(u8);
-static void sub_80F8584(u8);
-static void sub_80F85A0(u8);
-static void sub_80F85BC(u8);
-static void sub_80F86B8(u8);
-static void sub_80F878C(u8);
-static void sub_80F87B4(u8);
+static void Task_StartCommunication(u8);
+static void Task_StartCommunicateRngRS(u8);
+static void Task_StartCommunicateLeaderIdsRS(u8);
+static void Task_StartCommunicateCategoryRS(u8);
+static void Task_LinkContest_SetUpContestRS(u8);
+static void Task_LinkContest_CalculateTurnOrderRS(u8);
+static void Task_LinkContest_Disconnect(u8);
+static void Task_LinkContest_WaitDisconnect(u8);
static void SpriteCB_Confetti(struct Sprite *sprite);
+static void Task_ShowContestEntryMonPic(u8 taskId);
+static void Task_LinkContestWaitForConnection(u8 taskId);
+
+extern const u16 gObjectEventPalette8[];
+extern const u16 gObjectEventPalette17[];
+extern const u16 gObjectEventPalette33[];
+extern const u16 gObjectEventPalette34[];
static const u16 sUnknown_0858D6B0[] = INCBIN_U16("graphics/unknown/unknown_58D6B0.gbapal");
static const u8 sUnknown_0858D6D0[] = INCBIN_U8("graphics/unknown/unknown_58D6D0.4bpp");
@@ -601,7 +612,7 @@ static void Task_ShowContestResults(u8 taskId)
case 2:
if (IsLinkTaskFinished())
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gTasks[taskId].tState++;
}
return;
@@ -645,17 +656,17 @@ static void Task_WaitForLinkPartnersBeforeResults(u8 taskId)
{
if (gReceivedRemoteLinkPlayers)
{
- CreateTask(sub_80F5F14, 0);
+ CreateTask(Task_CommunicateMonIdxsForResults, 0);
gTasks[taskId].func = TaskDummy;
}
}
-static void sub_80F5F14(u8 taskId)
+static void Task_CommunicateMonIdxsForResults(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC998, sub_80F5F30);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, Task_WaitForLinkPartnerMonIdxs);
}
-static void sub_80F5F30(u8 taskId)
+static void Task_WaitForLinkPartnerMonIdxs(u8 taskId)
{
if (IsLinkTaskFinished())
{
@@ -974,7 +985,7 @@ static void Task_TryDisconnectLinkPartners(u8 taskId)
if (!gTasks[taskId].data[10])
{
ShowLinkResultsTextBox(gText_CommunicationStandby);
- sub_800AC34();
+ SetCloseLinkCallback();
gTasks[taskId].func = Task_WaitForLinkPartnersDisconnect;
}
}
@@ -1717,7 +1728,7 @@ static void LoadContestResultsTilemaps(void)
// Represented on results board as stars
static u8 GetNumPreliminaryPoints(u8 monIndex, bool8 capPoints)
{
- u32 condition = gContestMonConditions[monIndex] << 16;
+ u32 condition = gContestMonRound1Points[monIndex] << 16;
u32 numStars = condition / 0x3F;
if (numStars & 0xFFFF)
@@ -1965,7 +1976,7 @@ static void CalculateContestantsResultData(void)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- relativePoints = (gContestMonConditions[i] * 1000) / abs(highestPoints);
+ relativePoints = (gContestMonRound1Points[i] * 1000) / abs(highestPoints);
if (relativePoints % 10 > 4)
relativePoints += 10;
(*sContestResults->monResults)[i].relativePreliminaryPoints = relativePoints / 10;
@@ -2205,8 +2216,8 @@ void TryEnterContestMon(void)
// Nonzero eligibility can still be non-eligibile, if mon is fainted or egg
if (eligibility)
{
- sub_80DAB8C(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
- sub_80DB09C(gSpecialVar_ContestCategory);
+ SetContestants(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
+ CalculateRound1Points(gSpecialVar_ContestCategory);
}
gSpecialVar_Result = eligibility;
@@ -2323,7 +2334,7 @@ void GetContestMonConditionRanking(void)
for (i = 0, rank = 0; i < CONTESTANT_COUNT; i++)
{
- if (gContestMonConditions[gSpecialVar_0x8006] < gContestMonConditions[i])
+ if (gContestMonRound1Points[gSpecialVar_0x8006] < gContestMonRound1Points[i])
rank++;
}
@@ -2332,7 +2343,7 @@ void GetContestMonConditionRanking(void)
void GetContestMonCondition(void)
{
- gSpecialVar_0x8004 = gContestMonConditions[gSpecialVar_0x8006];
+ gSpecialVar_0x8004 = gContestMonRound1Points[gSpecialVar_0x8006];
}
void GetContestWinnerId(void)
@@ -2404,107 +2415,106 @@ void GetContestPlayerId(void)
gSpecialVar_0x8004 = gContestPlayerMonIndex;
}
-void ContestLinkTransfer(u8 taskId)
+void ContestLinkTransfer(u8 category)
{
u8 newTaskId;
ScriptContext2_Enable();
- newTaskId = CreateTask(sub_80FC580, 0);
- SetTaskFuncWithFollowupFunc(newTaskId, sub_80FC580, sub_80F8508);
- gTasks[newTaskId].data[9] = taskId;
+ newTaskId = CreateTask(Task_LinkContest_Init, 0);
+ SetTaskFuncWithFollowupFunc(newTaskId, Task_LinkContest_Init, Task_StartCommunication);
+ gTasks[newTaskId].data[9] = category;
}
-static void sub_80F8508(u8 taskId)
+static void Task_StartCommunication(u8 taskId)
{
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
{
- sub_80DA8C8(gContestMonPartyIndex);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC6BC, sub_80F8568);
+ CreateContestMonFromParty(gContestMonPartyIndex);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonsRS, Task_StartCommunicateRngRS);
}
else
{
- sub_80DA8C8(gContestMonPartyIndex);
- gTasks[taskId].func = sub_81D9DE4;
+ CreateContestMonFromParty(gContestMonPartyIndex);
+ gTasks[taskId].func = Task_LinkContest_StartCommunicationEm;
}
}
-static void sub_80F8568(u8 taskId)
+static void Task_StartCommunicateRngRS(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC804, sub_80F8584);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRngRS, Task_StartCommunicateLeaderIdsRS);
}
-static void sub_80F8584(u8 taskId)
+static void Task_StartCommunicateLeaderIdsRS(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCE48, sub_80F85A0);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIdsRS, Task_StartCommunicateCategoryRS);
}
-static void sub_80F85A0(u8 taskId)
+static void Task_StartCommunicateCategoryRS(u8 taskId)
{
- SetTaskFuncWithFollowupFunc(taskId, sub_80FC894, sub_80F85BC);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateCategoryRS, Task_LinkContest_SetUpContestRS);
}
-static void sub_80F85BC(u8 taskId)
+static void Task_LinkContest_SetUpContestRS(u8 taskId)
{
u8 i;
- u8 sp0[4];
- u8 sp4[4];
+ u8 categories[CONTESTANT_COUNT];
+ u8 leaderIds[CONTESTANT_COUNT];
- memset(sp0, 0, sizeof(sp0));
- memset(sp4, 0, sizeof(sp4));
+ memset(categories, 0, sizeof(categories));
+ memset(leaderIds, 0, sizeof(leaderIds));
for (i = 0; i < gNumLinkContestPlayers; i++)
- sp0[i] = gTasks[taskId].data[i + 1];
+ categories[i] = gTasks[taskId].data[i + 1];
- for (i = 0; i < gNumLinkContestPlayers;)
- {
- i++;
- if (i >= gNumLinkContestPlayers || sp0[0] != sp0[i])
- break;
- }
+ // Ensure all players are doing the same category
+ for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++)
+ ;
if (i == gNumLinkContestPlayers)
- gSpecialVar_0x8004 = 0;
+ gSpecialVar_0x8004 = FALSE; // Category choices the same
else
- gSpecialVar_0x8004 = 1;
+ gSpecialVar_0x8004 = TRUE; // Category choices differ
for (i = 0; i < gNumLinkContestPlayers; i++)
- sp4[i] = gTasks[taskId].data[i + 5];
+ leaderIds[i] = gTasks[taskId].data[i + 5];
- gUnknown_02039F2B = sub_80F86E0(sp4);
- sub_80DB09C(gSpecialVar_ContestCategory);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_80F86B8);
+ gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(leaderIds);
+ CalculateRound1Points(gSpecialVar_ContestCategory);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrderRS);
}
-static void sub_80F86B8(u8 taskId)
+static void Task_LinkContest_CalculateTurnOrderRS(u8 taskId)
{
SortContestants(FALSE);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection);
}
-u8 sub_80F86E0(u8 *arg0)
+u8 LinkContest_GetLeaderIndex(u8 *ids)
{
int i;
- u8 result = 0;
+ u8 leaderIdx = 0;
for (i = 1; i < gNumLinkContestPlayers; i++)
{
- if (arg0[result] < arg0[i])
- result = i;
+ if (ids[leaderIdx] < ids[i])
+ leaderIdx = i;
}
- return result;
+ return leaderIdx;
}
-void sub_80F8714(u8 taskId)
+void Task_LinkContest_FinalizeConnection(u8 taskId)
{
int i;
- if (gSpecialVar_0x8004 == 1)
+ if (gSpecialVar_0x8004 == TRUE)
{
+ // Link partner data doesn't agree, disconnect
if (IsLinkTaskFinished())
- gTasks[taskId].func = sub_80F878C;
+ gTasks[taskId].func = Task_LinkContest_Disconnect;
}
else
{
+ // Succesfully connected
for (i = 0; i < CONTESTANT_COUNT; i++)
StringGetEnd10(gContestMons[i].nickname);
@@ -2515,13 +2525,13 @@ void sub_80F8714(u8 taskId)
}
}
-static void sub_80F878C(u8 taskId)
+static void Task_LinkContest_Disconnect(u8 taskId)
{
- sub_800AC34();
- gTasks[taskId].func = sub_80F87B4;
+ SetCloseLinkCallback();
+ gTasks[taskId].func = Task_LinkContest_WaitDisconnect;
}
-static void sub_80F87B4(u8 taskId)
+static void Task_LinkContest_WaitDisconnect(u8 taskId)
{
if (!gReceivedRemoteLinkPlayers)
{
@@ -2530,3 +2540,479 @@ static void sub_80F87B4(u8 taskId)
EnableBothScriptContexts();
}
}
+
+void SetContestTrainerGfxIds(void)
+{
+ gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_0 - VARS_START] = gContestMons[0].trainerGfxId;
+ gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_1 - VARS_START] = gContestMons[1].trainerGfxId;
+ gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId;
+}
+
+// Unused
+void sub_80F8814(void)
+{
+ u16 var1;
+ u8 var0 = gSpecialVar_0x8005;
+ switch (var0)
+ {
+ case 0:
+ var1 = 3;
+ break;
+ case 1:
+ var1 = 4;
+ break;
+ case 2:
+ var1 = 5;
+ break;
+ default:
+ var1 = 100;
+ break;
+ }
+
+ gSpecialVar_0x8004 = var1;
+}
+
+void BufferContestTrainerAndMonNames(void)
+{
+ BufferContestantTrainerName();
+ BufferContestantMonNickname();
+ BufferContestantMonSpecies();
+}
+
+// Unused
+void DoesContestCategoryHaveWinner(void)
+{
+ int contestWinner;
+ switch (gSpecialVar_ContestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ contestWinner = 8;
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ contestWinner = 9;
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ contestWinner = 10;
+ break;
+ case CONTEST_CATEGORY_SMART:
+ contestWinner = 11;
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ default:
+ contestWinner = 12;
+ break;
+ }
+
+ if (gSaveBlock1Ptr->contestWinners[contestWinner].species == SPECIES_NONE)
+ gSpecialVar_0x8004 = FALSE;
+ else
+ gSpecialVar_0x8004 = TRUE;
+}
+
+void SaveMuseumContestPainting(void)
+{
+ sub_80DEDA8(0xFF);
+}
+
+void ShouldReadyContestArtist(void)
+{
+ if (gContestFinalStandings[gContestPlayerMonIndex] == 0
+ && gSpecialVar_ContestRank == CONTEST_RANK_MASTER
+ && gContestMonTotalPoints[gContestPlayerMonIndex] >= 800)
+ {
+ gSpecialVar_0x8004 = TRUE;
+ }
+ else
+ {
+ gSpecialVar_0x8004 = FALSE;
+ }
+}
+
+u8 CountPlayerContestPaintings(void)
+{
+ int i;
+ u8 count = 0;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (gSaveBlock1Ptr->contestWinners[8 + i].species)
+ count++;
+ }
+
+ return count;
+}
+
+// Unused
+void sub_80F8970(void)
+{
+ s16 conditions[CONTESTANT_COUNT];
+ int i, j;
+ s16 condition;
+ s8 var0;
+ u8 var2;
+ u8 r8;
+ u8 r7;
+
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ conditions[i] = gContestMonRound1Points[i];
+
+ for (i = 0; i < CONTESTANT_COUNT - 1; i++)
+ {
+ for (j = CONTESTANT_COUNT - 1; j > i; j--)
+ {
+ if (conditions[j - 1] < conditions[j])
+ {
+ int temp;
+ SWAP(conditions[j], conditions[j - 1], temp)
+ }
+ }
+ }
+
+ condition = conditions[gSpecialVar_0x8006];
+ var0 = 0;
+ r8 = 0;
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ {
+ if (conditions[i] == condition)
+ {
+ var0++;
+ if (i == gSpecialVar_0x8006)
+ r8 = var0;
+ }
+ }
+
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ {
+ if (conditions[i] == condition)
+ break;
+ }
+
+ r7 = i;
+ var2 = r8;
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ {
+ if (condition == gContestMonRound1Points[i])
+ {
+ if (var2 == 1)
+ break;
+ var2--;
+ }
+ }
+
+ StringCopy(gStringVar1, gContestMons[i].nickname);
+ StringCopy(gStringVar2, gContestMons[i].trainerName);
+ sub_81DB5AC(gStringVar2);
+
+ if (var0 == 1)
+ gSpecialVar_0x8006 = r7;
+ else if (r8 == var0)
+ gSpecialVar_0x8006 = r7;
+ else
+ gSpecialVar_0x8006 = r7 + 4;
+}
+
+static void ExitContestWinnerPainting(void)
+{
+ SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
+}
+
+void ShowContestWinnerPainting(void)
+{
+ SetMainCallback2(CB2_ContestPainting);
+ gMain.savedCallback = ExitContestWinnerPainting;
+}
+
+void SetLinkContestPlayerGfx(void)
+{
+ int i;
+
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ {
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ {
+ int version = (u8)gLinkPlayers[i].version;
+ if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
+ {
+ if (gLinkPlayers[i].gender == MALE)
+ gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_BRENDAN;
+ else
+ gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_MAY;
+ }
+ }
+
+ VarSet(VAR_OBJ_GFX_ID_0, gContestMons[0].trainerGfxId);
+ VarSet(VAR_OBJ_GFX_ID_1, gContestMons[1].trainerGfxId);
+ VarSet(VAR_OBJ_GFX_ID_2, gContestMons[2].trainerGfxId);
+ VarSet(VAR_OBJ_GFX_ID_3, gContestMons[3].trainerGfxId);
+ }
+}
+
+void LoadLinkContestPlayerPalettes(void)
+{
+ int i;
+ u8 objectEventId;
+ int version;
+ struct Sprite *sprite;
+ static const u8 sContestantLocalIds[CONTESTANT_COUNT] = { 3, 4, 5, 14 };
+
+ gReservedSpritePaletteCount = 12;
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ {
+ for (i = 0; i < gNumLinkContestPlayers; i++)
+ {
+ objectEventId = GetObjectEventIdByLocalIdAndMap(sContestantLocalIds[i], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
+ sprite = &gSprites[gObjectEvents[objectEventId].spriteId];
+ sprite->oam.paletteNum = 6 + i;
+ version = (u8)gLinkPlayers[i].version;
+ if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
+ {
+ if (gLinkPlayers[i].gender == MALE)
+ LoadPalette(gObjectEventPalette33, 0x160 + i * 0x10, 0x20);
+ else
+ LoadPalette(gObjectEventPalette34, 0x160 + i * 0x10, 0x20);
+ }
+ else
+ {
+ if (gLinkPlayers[i].gender == MALE)
+ LoadPalette(gObjectEventPalette8, 0x160 + i * 0x10, 0x20);
+ else
+ LoadPalette(gObjectEventPalette17, 0x160 + i * 0x10, 0x20);
+ }
+ }
+ }
+}
+
+bool8 GiveMonArtistRibbon(void)
+{
+ u8 hasArtistRibbon;
+
+ hasArtistRibbon = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
+ if (!hasArtistRibbon
+ && gContestFinalStandings[gContestPlayerMonIndex] == 0
+ && gSpecialVar_ContestRank == CONTEST_RANK_MASTER
+ && gContestMonTotalPoints[gContestPlayerMonIndex] >= 800)
+ {
+ hasArtistRibbon = 1;
+ SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &hasArtistRibbon);
+ if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
+ TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
+
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+bool8 IsContestDebugActive(void)
+{
+ return FALSE; // gUnknown_0203856C in pokeruby
+}
+
+void ShowContestEntryMonPic(void)
+{
+ const struct CompressedSpritePalette *palette;
+ u32 personality, otId;
+ u16 species;
+ u8 spriteId;
+ u8 taskId;
+ u8 left, top;
+
+ if (FindTaskIdByFunc(Task_ShowContestEntryMonPic) == 0xFF)
+ {
+ AllocateMonSpritesGfx();
+ left = 10;
+ top = 3;
+ species = gContestMons[gSpecialVar_0x8006].species;
+ personality = gContestMons[gSpecialVar_0x8006].personality;
+ otId = gContestMons[gSpecialVar_0x8006].otId;
+ taskId = CreateTask(Task_ShowContestEntryMonPic, 0x50);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = species;
+ if (gSpecialVar_0x8006 == gContestPlayerMonIndex)
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
+ else
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
+
+ palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
+ LoadCompressedSpritePalette(palette);
+ SetMultiuseSpriteTemplateToPokemon(species, 1);
+ gMultiuseSpriteTemplate.paletteTag = palette->tag;
+ spriteId = CreateSprite(&gMultiuseSpriteTemplate, (left + 1) * 8 + 32, (top * 8) + 40, 0);
+
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ {
+ if (!(gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER))
+ DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
+ }
+ else
+ {
+ DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
+ }
+
+ gTasks[taskId].data[2] = spriteId;
+ gTasks[taskId].data[3] = left;
+ gTasks[taskId].data[4] = top;
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ gSprites[spriteId].oam.priority = 0;
+ }
+}
+
+void HideContestEntryMonPic(void)
+{
+ u8 taskId = FindTaskIdByFunc(Task_ShowContestEntryMonPic);
+ if (taskId != 0xFF)
+ {
+ gTasks[taskId].data[0]++;
+ FreeMonSpritesGfx();
+ }
+}
+
+static void Task_ShowContestEntryMonPic(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ struct Sprite *sprite;
+
+ switch(task->data[0])
+ {
+ case 0:
+ task->data[0]++;
+ break;
+ case 1:
+ task->data[5] = CreateWindowFromRect(10, 3, 8, 8);
+ SetStandardWindowBorderStyle(task->data[5], 1);
+ task->data[0]++;
+ break;
+ case 2:
+ break;
+ case 3:
+ sprite = &gSprites[task->data[2]];
+ FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
+
+ if(sprite->oam.affineMode)
+ FreeOamMatrix(sprite->oam.matrixNum);
+
+ DestroySprite(sprite);
+ task->data[0]++;
+ break;
+ case 4:
+ ClearToTransparentAndRemoveWindow(gTasks[taskId].data[5]);
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void GetContestMultiplayerId(void)
+{
+ if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ && gNumLinkContestPlayers == CONTESTANT_COUNT
+ && !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS))
+ gSpecialVar_Result = GetMultiplayerId();
+ else
+ gSpecialVar_Result = MAX_LINK_PLAYERS;
+}
+
+void GenerateContestRand(void)
+{
+ u16 random;
+ u16 *result;
+
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ {
+ gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
+ random = gContestRngValue >> 16;
+ result = &gSpecialVar_Result;
+ }
+ else
+ {
+ result = &gSpecialVar_Result;
+ random = Random();
+ }
+ *result = random % *result;
+}
+
+u16 GetContestRand(void)
+{
+ gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
+ return gContestRngValue >> 16;
+}
+
+bool8 LinkContestWaitForConnection(void)
+{
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
+ {
+ CreateTask(Task_LinkContestWaitForConnection, 5);
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+static void Task_LinkContestWaitForConnection(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (IsLinkTaskFinished())
+ {
+ SetLinkStandbyCallback();
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ gTasks[taskId].data[0]++;
+ break;
+ default:
+ if (IsLinkTaskFinished() == 1)
+ {
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void LinkContestTryShowWirelessIndicator(void)
+{
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
+ {
+ if (gReceivedRemoteLinkPlayers)
+ {
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(8, 8);
+ }
+ }
+}
+
+void LinkContestTryHideWirelessIndicator(void)
+{
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
+ {
+ if (gReceivedRemoteLinkPlayers)
+ DestroyWirelessStatusIndicatorSprite();
+ }
+}
+
+bool8 IsContestWithRSPlayer(void)
+{
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void ClearLinkContestFlags(void)
+{
+ gLinkContestFlags = 0;
+}
+
+bool8 IsWirelessContest(void)
+{
+ if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
+ return TRUE;
+ else
+ return FALSE;
+}
diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h
index 8fa746725..53868fc84 100644
--- a/src/data/contest_opponents.h
+++ b/src/data/contest_opponents.h
@@ -203,7 +203,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 3,
.tough = 4,
.sheen = 50,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -232,7 +231,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 1,
.tough = 2,
.sheen = 60,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -261,7 +259,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 12,
.tough = 4,
.sheen = 70,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -290,7 +287,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 2,
.tough = 7,
.sheen = 80,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -319,7 +315,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 5,
.tough = 4,
.sheen = 90,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -348,7 +343,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 7,
.tough = 8,
.sheen = 100,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -377,7 +371,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 2,
.tough = 2,
.sheen = 50,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -406,7 +399,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 10,
.sheen = 60,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -435,7 +427,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 5,
.tough = 18,
.sheen = 70,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -464,7 +455,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 2,
.tough = 7,
.sheen = 80,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -493,7 +483,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 8,
.tough = 1,
.sheen = 90,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -522,7 +511,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 2,
.sheen = 100,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -551,7 +539,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 2,
.tough = 10,
.sheen = 50,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -580,7 +567,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 5,
.sheen = 60,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -609,7 +595,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 1,
.tough = 1,
.sheen = 70,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -638,7 +623,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 4,
.sheen = 50,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -667,7 +651,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 4,
.sheen = 60,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -696,7 +679,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 2,
.tough = 3,
.sheen = 70,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -725,7 +707,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 5,
.tough = 10,
.sheen = 80,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -754,7 +735,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 3,
.tough = 10,
.sheen = 90,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -783,7 +763,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 1,
.tough = 5,
.sheen = 100,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -812,7 +791,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 6,
.tough = 2,
.sheen = 90,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -841,7 +819,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 5,
.tough = 3,
.sheen = 80,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -870,7 +847,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 8,
.tough = 10,
.sheen = 70,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -899,7 +875,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 20,
.sheen = 100,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -928,7 +903,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 85,
.tough = 35,
.sheen = 110,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -957,7 +931,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 25,
.sheen = 120,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -986,7 +959,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 65,
.tough = 25,
.sheen = 130,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1015,7 +987,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 100,
.sheen = 140,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1044,7 +1015,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 35,
.tough = 35,
.sheen = 150,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1073,7 +1043,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 40,
.tough = 40,
.sheen = 100,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1102,7 +1071,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 10,
.tough = 25,
.sheen = 110,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1131,7 +1099,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 30,
.tough = 25,
.sheen = 120,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1160,7 +1127,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 40,
.tough = 30,
.sheen = 130,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1189,7 +1155,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 75,
.tough = 35,
.sheen = 140,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1218,7 +1183,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 30,
.tough = 25,
.sheen = 150,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1247,7 +1211,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 25,
.tough = 15,
.sheen = 100,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1276,7 +1239,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 60,
.tough = 20,
.sheen = 110,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1305,7 +1267,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 15,
.tough = 75,
.sheen = 120,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1334,7 +1295,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 30,
.tough = 20,
.sheen = 100,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1363,7 +1323,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 20,
.tough = 20,
.sheen = 110,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1392,7 +1351,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 20,
.tough = 20,
.sheen = 120,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1421,7 +1379,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 30,
.tough = 45,
.sheen = 130,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1450,7 +1407,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 20,
.tough = 45,
.sheen = 140,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1479,7 +1435,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 20,
.tough = 20,
.sheen = 150,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1508,7 +1463,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 25,
.tough = 25,
.sheen = 140,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1537,7 +1491,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 20,
.tough = 20,
.sheen = 130,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1566,7 +1519,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 45,
.tough = 20,
.sheen = 120,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1595,7 +1547,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 100,
.tough = 90,
.sheen = 200,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1624,7 +1575,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 35,
.tough = 70,
.sheen = 210,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1653,7 +1603,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 70,
.tough = 70,
.sheen = 220,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1682,7 +1631,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 75,
.tough = 40,
.sheen = 230,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1711,7 +1659,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 70,
.tough = 70,
.sheen = 240,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1740,7 +1687,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 80,
.tough = 100,
.sheen = 250,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1769,7 +1715,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 70,
.tough = 90,
.sheen = 200,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1798,7 +1743,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 50,
.tough = 65,
.sheen = 210,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1827,7 +1771,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 60,
.tough = 50,
.sheen = 220,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1856,7 +1799,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 45,
.tough = 70,
.sheen = 230,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1885,7 +1827,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 40,
.tough = 100,
.sheen = 240,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1914,7 +1855,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 50,
.tough = 30,
.sheen = 250,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1943,7 +1883,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 50,
.tough = 160,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -1972,7 +1911,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 70,
.tough = 50,
.sheen = 210,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2001,7 +1939,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 35,
.tough = 35,
.sheen = 220,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2030,7 +1967,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 100,
.tough = 80,
.sheen = 200,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2059,7 +1995,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 35,
.tough = 100,
.sheen = 210,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2088,7 +2023,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 50,
.tough = 100,
.sheen = 220,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2117,7 +2051,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 40,
.tough = 95,
.sheen = 230,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2146,7 +2079,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 50,
.tough = 100,
.sheen = 240,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2175,7 +2107,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 80,
.tough = 80,
.sheen = 250,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2204,7 +2135,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 40,
.tough = 110,
.sheen = 240,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2233,7 +2163,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 25,
.tough = 80,
.sheen = 230,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2262,7 +2191,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 35,
.tough = 40,
.sheen = 220,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2291,7 +2219,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 40,
.tough = 160,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2320,7 +2247,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 150,
.tough = 160,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2349,7 +2275,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 185,
.tough = 60,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2378,7 +2303,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 110,
.tough = 150,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2407,7 +2331,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 30,
.tough = 90,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2436,7 +2359,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 230,
.tough = 80,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2465,7 +2387,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 130,
.tough = 40,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2494,7 +2415,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 150,
.tough = 160,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2523,7 +2443,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 130,
.tough = 170,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2552,7 +2471,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 75,
.tough = 100,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2581,7 +2499,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 40,
.tough = 190,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2610,7 +2527,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 240,
.tough = 140,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2639,7 +2555,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 35,
.tough = 50,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2668,7 +2583,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 115,
.tough = 120,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2697,7 +2611,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 220,
.tough = 210,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2726,7 +2639,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 80,
.tough = 180,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2755,7 +2667,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 130,
.tough = 130,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2784,7 +2695,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 120,
.tough = 150,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2813,7 +2723,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 170,
.tough = 80,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2842,7 +2751,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 150,
.tough = 120,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2871,7 +2779,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 120,
.tough = 80,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2900,7 +2807,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 80,
.tough = 150,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2929,7 +2835,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 110,
.tough = 170,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
},
@@ -2958,7 +2863,6 @@ const struct ContestPokemon gContestOpponents[] =
.smart = 80,
.tough = 190,
.sheen = 255,
- .unk2C = {0},
.personality = 0,
.otId = 0xFFFF
}
diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c
index f3963ca27..41d8aa419 100644
--- a/src/dodrio_berry_picking.c
+++ b/src/dodrio_berry_picking.c
@@ -558,7 +558,7 @@ static void sub_8024BC8(u8 taskId)
case 2:
if (!sub_802A770())
{
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
gUnknown_02022C98->unk0C++;
}
break;
@@ -671,7 +671,7 @@ static void sub_8024E38(void)
gUnknown_02022C98->unk10++;
break;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
gUnknown_02022C98->unk10++;
break;
case 2:
@@ -690,7 +690,7 @@ static void sub_8024E38(void)
case 4:
if (++gUnknown_02022C98->unk30 > 5)
{
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
gUnknown_02022C98->unk10++;
}
break;
@@ -1081,7 +1081,7 @@ static void sub_8025644(void)
switch (gUnknown_02022C98->unk10)
{
case 0:
- sub_800AC34();
+ SetCloseLinkCallback();
sub_80292E0(7);
gUnknown_02022C98->unk10++;
break;
diff --git a/src/ereader_screen.c b/src/ereader_screen.c
index 26f7eb679..823e03dd4 100755
--- a/src/ereader_screen.c
+++ b/src/ereader_screen.c
@@ -192,7 +192,7 @@ static u32 sub_81D4EE4(u8 *arg0, u16 *arg1)
}
break;
case 4:
- sub_800ABF4(0);
+ SetCloseLinkCallbackAndType(0);
*arg0 = 5;
break;
case 5:
@@ -403,7 +403,7 @@ static void sub_81D5084(u8 taskId)
break;
case 15:
data->unkE = EReader_IsReceivedDataValid((struct EReaderTrainerHillSet *)gDecompressionBuffer);
- sub_800ABF4(data->unkE);
+ SetCloseLinkCallbackAndType(data->unkE);
data->unk8 = 16;
break;
case 16:
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index fd64fd8e9..92ee8cad3 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -194,7 +194,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
switch (task->data[0])
{
case 0:
- sub_800ADF8();
+ SetLinkStandbyCallback();
task->data[0]++;
break;
case 1:
@@ -227,7 +227,7 @@ void Task_ReturnToFieldRecordMixing(u8 taskId)
switch (task->data[0])
{
case 0:
- sub_800ADF8();
+ SetLinkStandbyCallback();
task->data[0]++;
break;
case 1:
@@ -625,7 +625,7 @@ static void Task_ReturnToWorldFromLinkRoom(u8 taskId)
case 1:
if (!PaletteFadeActive() && BGMusicStopped())
{
- sub_800AC34();
+ SetCloseLinkCallback();
data[0]++;
}
break;
diff --git a/src/field_specials.c b/src/field_specials.c
index 98643b26e..7c6ef37d7 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -3864,7 +3864,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
case 7:
if (IsLinkTaskFinished() == 1)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gTasks[taskId].data[0]++;
}
break;
@@ -3877,7 +3877,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
case 9:
if (gWirelessCommType == 0)
{
- sub_800AC34();
+ SetCloseLinkCallback();
}
gBattleTypeFlags = sBattleTowerMultiBattleTypeFlags;
EnableBothScriptContexts();
diff --git a/src/frontier_util.c b/src/frontier_util.c
index 668771375..c741a64fe 100644
--- a/src/frontier_util.c
+++ b/src/frontier_util.c
@@ -7,7 +7,7 @@
#include "battle_tower.h"
#include "field_specials.h"
#include "battle.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "script_pokemon_util.h"
#include "main.h"
#include "window.h"
#include "menu.h"
diff --git a/src/graphics.c b/src/graphics.c
index e0b2774d6..f43260c61 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -461,12 +461,12 @@ const u32 gContestMiscGfx[] = INCBIN_U32("graphics/contest/misc.4bpp.lz");
const u32 gContestAudienceGfx[] = INCBIN_U32("graphics/contest/audience.4bpp.lz");
-const u32 gUnknown_08C19168[] = INCBIN_U32("graphics/contest/faces.4bpp.lz");
+const u32 gContestFaces_Gfx[] = INCBIN_U32("graphics/contest/faces.4bpp.lz");
const u32 gContestJudgeSymbolsGfx[] = INCBIN_U32("graphics/contest/judge_symbols.4bpp.lz");
const u32 gContest3Pal[] = INCBIN_U32("graphics/contest/judge_symbols.gbapal.lz");
-const u8 gTiles_8C19450[] = INCBIN_U8("graphics/contest/heart.4bpp");
+const u8 gContestSliderHeart_Gfx[] = INCBIN_U8("graphics/contest/slider_heart.4bpp");
const u32 gUnknownGfx_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.4bpp.lz");
const u32 gUnknownPal_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.gbapal.lz");
diff --git a/src/link.c b/src/link.c
index e04e5e29d..62a9e4151 100644
--- a/src/link.c
+++ b/src/link.c
@@ -75,9 +75,9 @@ u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
u32 gLinkStatus;
bool8 gLinkDummy1; // Never read
bool8 gLinkDummy2; // Never read
-bool8 gUnknown_030030EC[MAX_LINK_PLAYERS];
-bool8 gUnknown_030030F0[MAX_LINK_PLAYERS];
-u16 gUnknown_030030F4;
+bool8 gReadyToExitStandby[MAX_LINK_PLAYERS];
+bool8 gReadyToCloseLink[MAX_LINK_PLAYERS];
+u16 gReadyCloseLinkType; // Never read
u8 gSuppressLinkErrorMessage;
bool8 gWirelessCommType;
bool8 gSavedLinkPlayerCount;
@@ -114,7 +114,7 @@ EWRAM_DATA struct {
u8 lastSendQueueCount;
u8 unk_06;
} sLinkErrorBuffer = {};
-static EWRAM_DATA u16 sUnknown_02022B08 = 0;
+static EWRAM_DATA u16 sReadyCloseLinkAttempts = 0; // never read
static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL;
// Static ROM declarations
@@ -135,12 +135,12 @@ static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2);
static void LinkCB_RequestPlayerDataExchange(void);
static void Task_PrintTestData(u8 taskId);
-static void sub_800AC80(void);
-static void sub_800ACAC(void);
-static void sub_800AD5C(void);
-static void sub_800AD88(void);
-static void sub_800AE30(void);
-static void sub_800AE5C(void);
+static void LinkCB_ReadyCloseLink(void);
+static void LinkCB_WaitCloseLink(void);
+static void LinkCB_ReadyCloseLinkWithJP(void);
+static void LinkCB_WaitCloseLinkWithJP(void);
+static void LinkCB_Standby(void);
+static void LinkCB_StandbyForAll(void);
static void CheckErrorStatus(void);
static void CB2_PrintErrorMessage(void);
@@ -379,7 +379,7 @@ void OpenLink(void)
sDummy1 = FALSE;
gLinkDummy2 = FALSE;
gLinkDummy1 = FALSE;
- gUnknown_030030F4 = 0;
+ gReadyCloseLinkType = 0;
CreateTask(Task_TriggerHandshake, 2);
}
else
@@ -390,8 +390,8 @@ void OpenLink(void)
for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
gRemoteLinkPlayersNotReceived[i] = TRUE;
- gUnknown_030030F0[i] = FALSE;
- gUnknown_030030EC[i] = FALSE;
+ gReadyToCloseLink[i] = FALSE;
+ gReadyToExitStandby[i] = FALSE;
}
}
@@ -467,7 +467,7 @@ static void LinkTestProcessKeyInput(void)
}
if (gMain.newKeys & SELECT_BUTTON)
{
- sub_800AC34();
+ SetCloseLinkCallback();
}
if (gLinkTestDebugValuesEnabled)
{
@@ -630,16 +630,16 @@ static void ProcessRecvCmds(u8 unused)
}
}
break;
- case LINKCMD_0x5FFF:
- gUnknown_030030F0[i] = TRUE;
+ case LINKCMD_READY_CLOSE_LINK:
+ gReadyToCloseLink[i] = TRUE;
break;
- case LINKCMD_0x2FFE:
- gUnknown_030030EC[i] = TRUE;
+ case LINKCMD_READY_EXIT_STANDBY:
+ gReadyToExitStandby[i] = TRUE;
break;
case LINKCMD_0xAAAA:
sub_800A418();
break;
- case LINKCMD_0xCCCC:
+ case LINKCMD_SEND_BLOCK_REQ:
SendBlock(0, sBlockRequests[gRecvCmds[i][1]].address, sBlockRequests[gRecvCmds[i][1]].size);
break;
case LINKCMD_SEND_HELD_KEYS_2:
@@ -657,8 +657,8 @@ static void BuildSendCmd(u16 command)
gSendCmd[0] = LINKCMD_SEND_LINK_TYPE;
gSendCmd[1] = gLinkType;
break;
- case LINKCMD_0x2FFE:
- gSendCmd[0] = LINKCMD_0x2FFE;
+ case LINKCMD_READY_EXIT_STANDBY:
+ gSendCmd[0] = LINKCMD_READY_EXIT_STANDBY;
break;
case LINKCMD_SEND_HELD_KEYS:
gSendCmd[0] = LINKCMD_SEND_HELD_KEYS;
@@ -694,13 +694,13 @@ static void BuildSendCmd(u16 command)
gSendCmd[0] = LINKCMD_0xAAAB;
gSendCmd[1] = gSpecialVar_ItemId;
break;
- case LINKCMD_0xCCCC:
- gSendCmd[0] = LINKCMD_0xCCCC;
+ case LINKCMD_SEND_BLOCK_REQ:
+ gSendCmd[0] = LINKCMD_SEND_BLOCK_REQ;
gSendCmd[1] = gBlockRequestType;
break;
- case LINKCMD_0x5FFF:
- gSendCmd[0] = LINKCMD_0x5FFF;
- gSendCmd[1] = gUnknown_030030F4;
+ case LINKCMD_READY_CLOSE_LINK:
+ gSendCmd[0] = LINKCMD_READY_CLOSE_LINK;
+ gSendCmd[1] = gReadyCloseLinkType;
break;
case LINKCMD_0x5566:
gSendCmd[0] = LINKCMD_0x5566;
@@ -1065,16 +1065,16 @@ bool8 SendBlock(u8 unused, const void *src, u16 size)
return InitBlockSend(src, size);
}
-bool8 sub_800A4D8(u8 a0)
+bool8 SendBlockRequest(u8 blockReqType)
{
if (gWirelessCommType == TRUE)
{
- return sub_8010100(a0);
+ return Rfu_SendBlockRequest(blockReqType);
}
if (gLinkCallback == NULL)
{
- gBlockRequestType = a0;
- BuildSendCmd(LINKCMD_0xCCCC);
+ gBlockRequestType = blockReqType;
+ BuildSendCmd(LINKCMD_SEND_BLOCK_REQ);
return TRUE;
}
return FALSE;
@@ -1423,70 +1423,70 @@ static u8 GetDummy2(void)
return sDummy2;
}
-void sub_800ABF4(u16 a0)
+void SetCloseLinkCallbackAndType(u16 type)
{
if (gWirelessCommType == TRUE)
{
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
}
else
{
if (gLinkCallback == NULL)
{
- gLinkCallback = sub_800AC80;
+ gLinkCallback = LinkCB_ReadyCloseLink;
gLinkDummy1 = FALSE;
- gUnknown_030030F4 = a0;
+ gReadyCloseLinkType = type;
}
}
}
-void sub_800AC34(void)
+void SetCloseLinkCallback(void)
{
if (gWirelessCommType == TRUE)
{
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
}
else
{
if (gLinkCallback != NULL)
{
- sUnknown_02022B08++;
+ sReadyCloseLinkAttempts++;
}
else
{
- gLinkCallback = sub_800AC80;
+ gLinkCallback = LinkCB_ReadyCloseLink;
gLinkDummy1 = FALSE;
- gUnknown_030030F4 = 0;
+ gReadyCloseLinkType = 0;
}
}
}
-static void sub_800AC80(void)
+static void LinkCB_ReadyCloseLink(void)
{
if (gLastRecvQueueCount == 0)
{
- BuildSendCmd(LINKCMD_0x5FFF);
- gLinkCallback = sub_800ACAC;
+ BuildSendCmd(LINKCMD_READY_CLOSE_LINK);
+ gLinkCallback = LinkCB_WaitCloseLink;
}
}
-static void sub_800ACAC(void)
+static void LinkCB_WaitCloseLink(void)
{
int i;
unsigned count;
- u8 linkPlayerCount;
- linkPlayerCount = GetLinkPlayerCount();
+ // Wait for all players to be ready
+ u8 linkPlayerCount = GetLinkPlayerCount();
count = 0;
for (i = 0; i < linkPlayerCount; i++)
{
- if (gUnknown_030030F0[i])
- {
+ if (gReadyToCloseLink[i])
count++;
- }
}
+
if (count == linkPlayerCount)
{
+ // All ready, close link
gBattleTypeFlags &= ~BATTLE_TYPE_20;
gLinkVSyncDisabled = TRUE;
CloseLink();
@@ -1495,37 +1495,38 @@ static void sub_800ACAC(void)
}
}
-void sub_800AD10(void)
+// Used instead of SetCloseLinkCallback when disconnecting from an attempt to link with a foreign game
+void SetCloseLinkCallbackHandleJP(void)
{
if (gWirelessCommType == TRUE)
{
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
}
else
{
if (gLinkCallback != NULL)
{
- sUnknown_02022B08++;
+ sReadyCloseLinkAttempts++;
}
else
{
- gLinkCallback = sub_800AD5C;
+ gLinkCallback = LinkCB_ReadyCloseLinkWithJP;
gLinkDummy1 = FALSE;
- gUnknown_030030F4 = 0;
+ gReadyCloseLinkType = 0;
}
}
}
-static void sub_800AD5C(void)
+static void LinkCB_ReadyCloseLinkWithJP(void)
{
if (gLastRecvQueueCount == 0)
{
- BuildSendCmd(LINKCMD_0x5FFF);
- gLinkCallback = sub_800AD88;
+ BuildSendCmd(LINKCMD_READY_CLOSE_LINK);
+ gLinkCallback = LinkCB_WaitCloseLinkWithJP;
}
}
-static void sub_800AD88(void)
+static void LinkCB_WaitCloseLinkWithJP(void)
{
int i;
unsigned count;
@@ -1533,19 +1534,21 @@ static void sub_800AD88(void)
linkPlayerCount = GetLinkPlayerCount();
count = 0;
+
+ // Wait for all non-foreign players to be ready
for (i = 0; i < linkPlayerCount; i++)
{
+ // Rather than communicate with the foreign game
+ // just assume they're ready to disconnect
if (gLinkPlayers[i].language == LANGUAGE_JAPANESE)
- {
count++;
- }
- else if (gUnknown_030030F0[i])
- {
+ else if (gReadyToCloseLink[i])
count++;
- }
}
+
if (count == linkPlayerCount)
{
+ // All ready, close link
gBattleTypeFlags &= ~BATTLE_TYPE_20;
gLinkVSyncDisabled = TRUE;
CloseLink();
@@ -1554,50 +1557,47 @@ static void sub_800AD88(void)
}
}
-void sub_800ADF8(void)
+void SetLinkStandbyCallback(void)
{
if (gWirelessCommType == TRUE)
{
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
}
else
{
if (gLinkCallback == NULL)
{
- gLinkCallback = sub_800AE30;
+ gLinkCallback = LinkCB_Standby;
}
gLinkDummy1 = FALSE;
}
}
-static void sub_800AE30(void)
+static void LinkCB_Standby(void)
{
if (gLastRecvQueueCount == 0)
{
- BuildSendCmd(LINKCMD_0x2FFE);
- gLinkCallback = sub_800AE5C;
+ BuildSendCmd(LINKCMD_READY_EXIT_STANDBY);
+ gLinkCallback = LinkCB_StandbyForAll;
}
}
-static void sub_800AE5C(void)
+static void LinkCB_StandbyForAll(void)
{
u8 i;
- u8 linkPlayerCount;
-
- linkPlayerCount = GetLinkPlayerCount();
+ u8 linkPlayerCount = GetLinkPlayerCount();
for (i = 0; i < linkPlayerCount; i++)
{
- if (!gUnknown_030030EC[i])
- {
+ if (!gReadyToExitStandby[i])
break;
- }
}
+
+ // If true, all players ready to exit standby
if (i == linkPlayerCount)
{
for (i = 0; i < MAX_LINK_PLAYERS; i++)
- {
- gUnknown_030030EC[i] = FALSE;
- }
+ gReadyToExitStandby[i] = FALSE;
+
gLinkCallback = NULL;
}
}
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c
index 34e9f719b..3372aa766 100644
--- a/src/link_rfu_2.c
+++ b/src/link_rfu_2.c
@@ -148,10 +148,7 @@ static const u8 sUnknown_082ED6A5[] = {
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
};
-static const struct {
- u8 *buffer;
- u32 size;
-} sUnknown_082ED6B8[] = {
+static const struct BlockRequest sBlockRequests[] = {
{ gBlockSendBuffer, 200 },
{ gBlockSendBuffer, 200 },
{ gBlockSendBuffer, 100 },
@@ -1072,15 +1069,15 @@ static void RfuHandleReceiveCommand(u8 unused)
}
}
break;
- case RFU_COMMAND_0xA100:
- Rfu_InitBlockSend(sUnknown_082ED6B8[gRecvCmds[i][1]].buffer, (u16)sUnknown_082ED6B8[gRecvCmds[i][1]].size);
+ case RFU_COMMAND_SEND_BLOCK_REQ:
+ Rfu_InitBlockSend(sBlockRequests[gRecvCmds[i][1]].address, (u16)sBlockRequests[gRecvCmds[i][1]].size);
break;
- case RFU_COMMAND_0x5F00:
- Rfu.unk_e4[i] = 1;
+ case RFU_COMMAND_READY_CLOSE_LINK:
+ Rfu.readyCloseLink[i] = TRUE;
break;
- case RFU_COMMAND_0x6600:
+ case RFU_COMMAND_READY_EXIT_STANDBY:
if (Rfu.unk_100 == gRecvCmds[i][1])
- Rfu.unk_e9[i] = 1;
+ Rfu.readyExitStandby[i] = TRUE;
break;
case RFU_COMMAND_0xED00:
if (Rfu.parentChild == MODE_CHILD)
@@ -1194,9 +1191,9 @@ static void RfuPrepareSendBuffer(u16 command)
gSendCmd[1] = Rfu.sendBlock.count;
gSendCmd[2] = Rfu.sendBlock.owner + 0x80;
break;
- case RFU_COMMAND_0xA100:
+ case RFU_COMMAND_SEND_BLOCK_REQ:
if (AreNoPlayersReceiving())
- gSendCmd[1] = Rfu.unk_5a;
+ gSendCmd[1] = Rfu.blockRequestType;
break;
case RFU_COMMAND_0x7700:
case RFU_COMMAND_0x7800:
@@ -1207,8 +1204,8 @@ static void RfuPrepareSendBuffer(u16 command)
for (i = 0; i < RFU_CHILD_MAX; i++)
buff[i] = Rfu.linkPlayerIdx[i];
break;
- case RFU_COMMAND_0x6600:
- case RFU_COMMAND_0x5F00:
+ case RFU_COMMAND_READY_EXIT_STANDBY:
+ case RFU_COMMAND_READY_CLOSE_LINK:
gSendCmd[1] = Rfu.unk_100;
break;
case RFU_COMMAND_0x4400:
@@ -1327,10 +1324,10 @@ static void SendLastBlock(void)
Rfu.callback = NULL;
}
-bool8 sub_8010100(u8 blockRequestType)
+bool8 Rfu_SendBlockRequest(u8 type)
{
- Rfu.unk_5a = blockRequestType;
- RfuPrepareSendBuffer(RFU_COMMAND_0xA100);
+ Rfu.blockRequestType = type;
+ RfuPrepareSendBuffer(RFU_COMMAND_SEND_BLOCK_REQ);
return TRUE;
}
@@ -1343,14 +1340,14 @@ static void sub_801011C(void)
Rfu.callback = NULL;
}
-static void sub_8010148(void)
+static void DisconnectRfu(void)
{
rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
rfu_waitREQComplete();
sub_801011C();
}
-static void sub_8010168(void)
+static void TryDisconnectRfu(void)
{
if (Rfu.parentChild == MODE_CHILD)
{
@@ -1358,7 +1355,7 @@ static void sub_8010168(void)
Rfu.unk_ce4 = 2;
}
else
- Rfu.callback = sub_8010148;
+ Rfu.callback = DisconnectRfu;
}
void LinkRfu_FatalError(void)
@@ -1368,131 +1365,137 @@ void LinkRfu_FatalError(void)
Rfu.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
}
-static void sub_80101CC(void)
+// RFU equivalent of LinkCB_WaitCloseLink
+static void WaitAllReadyToCloseLink(void)
{
s32 i;
u8 playerCount = Rfu.playerCount;
s32 count = 0;
+ // Wait for all players to be ready
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
- if (Rfu.unk_e4[i])
+ if (Rfu.readyCloseLink[i])
count++;
}
if (count == playerCount)
{
+ // All ready, close link
gBattleTypeFlags &= ~BATTLE_TYPE_20;
if (Rfu.parentChild == MODE_CHILD)
{
Rfu.errorState = 3;
- sub_8010168();
+ TryDisconnectRfu();
}
else
- Rfu.callback = sub_8010168;
+ Rfu.callback = TryDisconnectRfu;
}
}
-static void sub_801022C(void)
+static void SendReadyCloseLink(void)
{
if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0)
{
- RfuPrepareSendBuffer(RFU_COMMAND_0x5F00);
- Rfu.callback = sub_80101CC;
+ RfuPrepareSendBuffer(RFU_COMMAND_READY_CLOSE_LINK);
+ Rfu.callback = WaitAllReadyToCloseLink;
}
}
-static void sub_8010264(u8 taskId)
+static void Task_TryReadyCloseLink(u8 taskId)
{
if (Rfu.callback == NULL)
{
Rfu.unk_cd9 = 1;
- Rfu.callback = sub_801022C;
+ Rfu.callback = SendReadyCloseLink;
DestroyTask(taskId);
}
}
-void task_add_05_task_del_08FA224_when_no_RfuFunc(void)
+void Rfu_SetCloseLinkCallback(void)
{
- if (!FuncIsActiveTask(sub_8010264))
- CreateTask(sub_8010264, 5);
+ if (!FuncIsActiveTask(Task_TryReadyCloseLink))
+ CreateTask(Task_TryReadyCloseLink, 5);
}
-static void sub_80102B8(void)
+static void SendReadyExitStandbyUntilAllReady(void)
{
u8 playerCount;
u8 i;
if (GetMultiplayerId() != 0)
{
- if (Rfu.recvQueue.count == 0 && Rfu.unk_fe > 60)
+ if (Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60)
{
- RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
- Rfu.unk_fe = 0;
+ RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
+ Rfu.resendExitStandbyTimer = 0;
}
}
playerCount = GetLinkPlayerCount();
for (i = 0; i < playerCount; i++)
{
- if (Rfu.unk_e9[i] == 0)
+ if (!Rfu.readyExitStandby[i])
break;
}
if (i == playerCount)
{
for (i = 0; i < MAX_RFU_PLAYERS; i++)
- Rfu.unk_e9[i] = 0;
+ Rfu.readyExitStandby[i] = FALSE;
Rfu.unk_100++;
Rfu.callback = NULL;
}
- Rfu.unk_fe++;
+ Rfu.resendExitStandbyTimer++;
}
-static void sub_8010358(void)
+static void LinkLeaderReadyToExitStandby(void)
{
if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
{
- RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
- Rfu.callback = sub_80102B8;
+ RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
+ Rfu.callback = SendReadyExitStandbyUntilAllReady;
}
}
-static void sub_8010390(void)
+// RFU equivalent of LinkCB_Standby and LinkCB_StandbyForAll
+static void Rfu_LinkStandby(void)
{
u8 i;
u8 playerCount;
if (GetMultiplayerId() != 0)
{
+ // Not link leader, send exit standby when ready
if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
{
- RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
- Rfu.callback = sub_80102B8;
+ RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
+ Rfu.callback = SendReadyExitStandbyUntilAllReady;
}
}
else
{
+ // Link leader, wait for all members to send exit ready
playerCount = GetLinkPlayerCount();
for (i = 1; i < playerCount; i++)
{
- if (Rfu.unk_e9[i] == 0)
+ if (!Rfu.readyExitStandby[i])
break;
}
if (i == playerCount)
{
if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
{
- RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
- Rfu.callback = sub_8010358;
+ RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
+ Rfu.callback = LinkLeaderReadyToExitStandby;
}
}
}
}
-void sub_8010434(void)
+void Rfu_SetLinkStandbyCallback(void)
{
if (Rfu.callback == NULL)
{
- Rfu.callback = sub_8010390;
- Rfu.unk_fe = 0;
+ Rfu.callback = Rfu_LinkStandby;
+ Rfu.resendExitStandbyTimer = 0;
}
}
@@ -1724,8 +1727,8 @@ static void sub_801084C(u8 taskId)
{
if (AreNoPlayersReceiving())
{
- Rfu.unk_5a = 0;
- RfuPrepareSendBuffer(RFU_COMMAND_0xA100);
+ Rfu.blockRequestType = 0;
+ RfuPrepareSendBuffer(RFU_COMMAND_SEND_BLOCK_REQ);
gTasks[taskId].data[0]++;
}
}
diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c
index 04902dee8..032cc3340 100644
--- a/src/mystery_event_menu.c
+++ b/src/mystery_event_menu.c
@@ -208,7 +208,7 @@ static void CB2_MysteryEventMenu(void)
{
if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == EXCHANGE_DIFF_SELECTIONS)
{
- sub_800AC34();
+ SetCloseLinkCallback();
GetEventLoadMessage(gStringVar4, 1);
PrintMysteryMenuText(0, gStringVar4, 1, 2, 1);
gMain.state = 13;
@@ -249,7 +249,7 @@ static void CB2_MysteryEventMenu(void)
gMain.state++;
break;
case 10:
- sub_800AC34();
+ SetCloseLinkCallback();
gMain.state++;
break;
case 11:
diff --git a/src/mystery_gift.c b/src/mystery_gift.c
index e6b311f0a..7f1370a5e 100644
--- a/src/mystery_gift.c
+++ b/src/mystery_gift.c
@@ -1284,7 +1284,7 @@ void task00_mystery_gift(u8 taskId)
switch (mevent_client_do_exec(&data->curPromptWindowId))
{
case 6:
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
data->prevPromptWindowId = data->curPromptWindowId;
data->state = 13;
break;
@@ -1647,7 +1647,7 @@ void task00_mystery_gift(u8 taskId)
}
break;
case 33:
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_SetCloseLinkCallback();
StringCopy(gStringVar1, gLinkPlayers[1].name);
data->state = 34;
break;
diff --git a/src/overworld.c b/src/overworld.c
index 2946c7d68..2d838fc4d 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -46,7 +46,7 @@
#include "save.h"
#include "save_location.h"
#include "script.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "script_pokemon_util.h"
#include "secret_base.h"
#include "sound.h"
#include "start_menu.h"
diff --git a/src/pokemon.c b/src/pokemon.c
index 44b5e55bb..faf00a7bf 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -4499,8 +4499,8 @@ void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord)
for (j = 0; j < MAX_MON_MOVES; j++)
{
- SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * 4 + j]);
- SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * 4 + j]].pp);
+ SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * MAX_MON_MOVES + j]);
+ SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * MAX_MON_MOVES + j]].pp);
}
}
}
diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c
index 33ddee1b5..c5f4ef1a4 100755
--- a/src/pokemon_jump.c
+++ b/src/pokemon_jump.c
@@ -1463,7 +1463,7 @@ static bool32 sub_802BC60(void)
case 4:
if (!gPaletteFade.active)
{
- sub_800AC34();
+ SetCloseLinkCallback();
gUnknown_02022CFC->unkA++;
}
break;
diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c
index 07690960f..78ebe02e4 100644
--- a/src/post_battle_event_funcs.c
+++ b/src/post_battle_event_funcs.c
@@ -5,7 +5,7 @@
#include "hall_of_fame.h"
#include "load_save.h"
#include "overworld.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "script_pokemon_util.h"
#include "tv.h"
#include "constants/heal_locations.h"
#include "constants/tv.h"
diff --git a/src/record_mixing.c b/src/record_mixing.c
index ad8b5693c..1e9b0bcf7 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -501,7 +501,7 @@ static void Task_SendPacket(u8 taskId)
break;
case 1:
if (GetMultiplayerId() == 0)
- sub_800A4D8(1);
+ SendBlockRequest(1);
task->data[0]++;
break;
case 2:
@@ -973,7 +973,7 @@ static void Task_DoRecordMixing(u8 taskId)
case 4: // Wait 10 frames
if (++task->data[1] > 10)
{
- sub_800AC34();
+ SetCloseLinkCallback();
task->data[0] ++;
}
break;
@@ -1005,7 +1005,7 @@ static void Task_DoRecordMixing(u8 taskId)
}
break;
case 8:
- sub_800ADF8();
+ SetLinkStandbyCallback();
task->data[0] ++;
break;
case 9:
diff --git a/src/save.c b/src/save.c
index 09e1b7aae..3ae2f6fd5 100644
--- a/src/save.c
+++ b/src/save.c
@@ -912,7 +912,7 @@ void Task_LinkSave(u8 taskId)
tState = 1;
break;
case 1:
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState = 2;
break;
case 2:
@@ -949,7 +949,7 @@ void Task_LinkSave(u8 taskId)
case 7:
if (!tPartialSave)
ClearContinueGameWarpStatus2();
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState = 8;
break;
case 8:
@@ -960,7 +960,7 @@ void Task_LinkSave(u8 taskId)
}
break;
case 9:
- sub_800ADF8();
+ SetLinkStandbyCallback();
tState = 10;
break;
case 10:
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 643809789..d2ebcbb85 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -38,7 +38,7 @@
#include "script.h"
#include "script_menu.h"
#include "script_movement.h"
-#include "script_pokemon_80F8.h"
+#include "script_pokemon_util.h"
#include "shop.h"
#include "slot_machine.h"
#include "sound.h"
@@ -1475,7 +1475,7 @@ bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx)
if (contestWinnerId != CONTEST_WINNER_ARTIST)
SetContestWinnerForPainting(contestWinnerId);
- ShowContestWinner();
+ ShowContestWinnerPainting();
ScriptContext1_Stop();
return TRUE;
}
diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c
new file mode 100755
index 000000000..a7b5433f0
--- /dev/null
+++ b/src/script_pokemon_util.c
@@ -0,0 +1,224 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_gfx_sfx_util.h"
+#include "berry.h"
+#include "data.h"
+#include "daycare.h"
+#include "decompress.h"
+#include "event_data.h"
+#include "international_string_util.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "main.h"
+#include "menu.h"
+#include "overworld.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "pokedex.h"
+#include "pokemon.h"
+#include "random.h"
+#include "script.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "tv.h"
+#include "constants/items.h"
+#include "constants/species.h"
+#include "constants/tv.h"
+#include "constants/battle_frontier.h"
+
+static void CB2_ReturnFromChooseHalfParty(void);
+static void CB2_ReturnFromChooseBattleFrontierParty(void);
+
+void HealPlayerParty(void)
+{
+ u8 i, j;
+ u8 ppBonuses;
+ u8 arg[4];
+
+ // restore HP.
+ for(i = 0; i < gPlayerPartyCount; i++)
+ {
+ u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
+ arg[0] = maxHP;
+ arg[1] = maxHP >> 8;
+ SetMonData(&gPlayerParty[i], MON_DATA_HP, arg);
+ ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES);
+
+ // restore PP.
+ for(j = 0; j < MAX_MON_MOVES; j++)
+ {
+ arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j);
+ SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg);
+ }
+
+ // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData.
+ arg[0] = 0;
+ arg[1] = 0;
+ arg[2] = 0;
+ arg[3] = 0;
+ SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg);
+ }
+}
+
+u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3)
+{
+ u16 nationalDexNum;
+ int sentToPc;
+ u8 heldItem[2];
+ struct Pokemon mon;
+
+ CreateMon(&mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
+ heldItem[0] = item;
+ heldItem[1] = item >> 8;
+ SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem);
+ sentToPc = GiveMonToPlayer(&mon);
+ nationalDexNum = SpeciesToNationalPokedexNum(species);
+
+ switch(sentToPc)
+ {
+ case 0:
+ case 1:
+ GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
+ GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT);
+ break;
+ }
+ return sentToPc;
+}
+
+u8 ScriptGiveEgg(u16 species)
+{
+ struct Pokemon mon;
+ u8 isEgg;
+
+ CreateEgg(&mon, species, TRUE);
+ isEgg = TRUE;
+ SetMonData(&mon, MON_DATA_IS_EGG, &isEgg);
+
+ return GiveMonToPlayer(&mon);
+}
+
+void HasEnoughMonsForDoubleBattle(void)
+{
+ switch (GetMonsStateToDoubles())
+ {
+ case PLAYER_HAS_TWO_USABLE_MONS:
+ gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS;
+ break;
+ case PLAYER_HAS_ONE_MON:
+ gSpecialVar_Result = PLAYER_HAS_ONE_MON;
+ break;
+ case PLAYER_HAS_ONE_USABLE_MON:
+ gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON;
+ break;
+ }
+}
+
+static bool8 CheckPartyMonHasHeldItem(u16 item)
+{
+ int i;
+
+ for(i = 0; i < PARTY_SIZE; i++)
+ {
+ u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
+ if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 DoesPartyHaveEnigmaBerry(void)
+{
+ bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY);
+ if (hasItem == TRUE)
+ GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1);
+
+ return hasItem;
+}
+
+void CreateScriptedWildMon(u16 species, u8 level, u16 item)
+{
+ u8 heldItem[2];
+
+ ZeroEnemyPartyMons();
+ CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
+ if (item)
+ {
+ heldItem[0] = item;
+ heldItem[1] = item >> 8;
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
+ }
+}
+
+void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
+{
+ if (monIndex > PARTY_SIZE)
+ monIndex = gPlayerPartyCount - 1;
+
+ SetMonMoveSlot(&gPlayerParty[monIndex], move, slot);
+}
+
+// Note: When control returns to the event script, gSpecialVar_Result will be
+// TRUE if the party selection was successful.
+void ChooseHalfPartyForBattle(void)
+{
+ gMain.savedCallback = CB2_ReturnFromChooseHalfParty;
+ VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER);
+ InitChooseHalfPartyForBattle(0);
+}
+
+static void CB2_ReturnFromChooseHalfParty(void)
+{
+ switch (gSelectedOrderFromParty[0])
+ {
+ case 0:
+ gSpecialVar_Result = FALSE;
+ break;
+ default:
+ gSpecialVar_Result = TRUE;
+ break;
+ }
+
+ SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
+}
+
+void ChoosePartyForBattleFrontier(void)
+{
+ gMain.savedCallback = CB2_ReturnFromChooseBattleFrontierParty;
+ InitChooseHalfPartyForBattle(gSpecialVar_0x8004 + 1);
+}
+
+static void CB2_ReturnFromChooseBattleFrontierParty(void)
+{
+ switch (gSelectedOrderFromParty[0])
+ {
+ case 0:
+ gSpecialVar_Result = FALSE;
+ break;
+ default:
+ gSpecialVar_Result = TRUE;
+ break;
+ }
+
+ SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
+}
+
+void ReducePlayerPartyToSelectedMons(void)
+{
+ struct Pokemon party[MAX_FRONTIER_PARTY_SIZE];
+ int i;
+
+ CpuFill32(0, party, sizeof party);
+
+ // copy the selected pokemon according to the order.
+ for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
+ if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop
+ party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal
+
+ CpuFill32(0, gPlayerParty, sizeof gPlayerParty);
+
+ // overwrite the first 4 with the order copied to.
+ for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
+ gPlayerParty[i] = party[i];
+
+ CalculatePlayerPartyCount();
+}
diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c
deleted file mode 100755
index 70f68b879..000000000
--- a/src/script_pokemon_util_80F87D8.c
+++ /dev/null
@@ -1,725 +0,0 @@
-#include "global.h"
-#include "battle.h"
-#include "battle_gfx_sfx_util.h"
-#include "berry.h"
-#include "contest.h"
-#include "contest_util.h"
-#include "contest_painting.h"
-#include "data.h"
-#include "daycare.h"
-#include "decompress.h"
-#include "event_data.h"
-#include "event_object_movement.h"
-#include "international_string_util.h"
-#include "link.h"
-#include "link_rfu.h"
-#include "main.h"
-#include "menu.h"
-#include "overworld.h"
-#include "palette.h"
-#include "party_menu.h"
-#include "pokedex.h"
-#include "pokemon.h"
-#include "random.h"
-#include "script.h"
-#include "script_menu.h"
-#include "sprite.h"
-#include "string_util.h"
-#include "tv.h"
-#include "constants/event_objects.h"
-#include "constants/items.h"
-#include "constants/species.h"
-#include "constants/tv.h"
-#include "constants/battle_frontier.h"
-
-extern const u16 gObjectEventPalette8[];
-extern const u16 gObjectEventPalette17[];
-extern const u16 gObjectEventPalette33[];
-extern const u16 gObjectEventPalette34[];
-
-static const u8 gUnknown_0858D8EC[] = { 3, 4, 5, 14 };
-
-static void Task_ShowContestEntryMonPic(u8 taskId);
-static void Task_LinkContestWaitForConnection(u8 taskId);
-static void CB2_ReturnFromChooseHalfParty(void);
-static void CB2_ReturnFromChooseBattleFrontierParty(void);
-
-void SetContestTrainerGfxIds(void)
-{
- gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_0 - VARS_START] = gContestMons[0].trainerGfxId;
- gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_1 - VARS_START] = gContestMons[1].trainerGfxId;
- gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId;
-}
-
-// Unused
-void sub_80F8814(void)
-{
- u16 var1;
- u8 var0 = gSpecialVar_0x8005;
- switch (var0)
- {
- case 0:
- var1 = 3;
- break;
- case 1:
- var1 = 4;
- break;
- case 2:
- var1 = 5;
- break;
- default:
- var1 = 100;
- break;
- }
-
- gSpecialVar_0x8004 = var1;
-}
-
-void BufferContestTrainerAndMonNames(void)
-{
- BufferContestantTrainerName();
- BufferContestantMonNickname();
- BufferContestantMonSpecies();
-}
-
-// Unused
-void DoesContestCategoryHaveWinner(void)
-{
- int contestWinner;
- switch (gSpecialVar_ContestCategory)
- {
- case CONTEST_CATEGORY_COOL:
- contestWinner = 8;
- break;
- case CONTEST_CATEGORY_BEAUTY:
- contestWinner = 9;
- break;
- case CONTEST_CATEGORY_CUTE:
- contestWinner = 10;
- break;
- case CONTEST_CATEGORY_SMART:
- contestWinner = 11;
- break;
- case CONTEST_CATEGORY_TOUGH:
- default:
- contestWinner = 12;
- break;
- }
-
- if (gSaveBlock1Ptr->contestWinners[contestWinner].species == SPECIES_NONE)
- gSpecialVar_0x8004 = FALSE;
- else
- gSpecialVar_0x8004 = TRUE;
-}
-
-void SaveMuseumContestPainting(void)
-{
- sub_80DEDA8(0xFF);
-}
-
-void ShouldReadyContestArtist(void)
-{
- if (gContestFinalStandings[gContestPlayerMonIndex] == 0
- && gSpecialVar_ContestRank == CONTEST_RANK_MASTER
- && gContestMonTotalPoints[gContestPlayerMonIndex] >= 800)
- {
- gSpecialVar_0x8004 = TRUE;
- }
- else
- {
- gSpecialVar_0x8004 = FALSE;
- }
-}
-
-u8 CountPlayerContestPaintings(void)
-{
- int i;
- u8 count = 0;
-
- for (i = 0; i < 5; i++)
- {
- if (gSaveBlock1Ptr->contestWinners[8 + i].species)
- count++;
- }
-
- return count;
-}
-
-// Unused
-void sub_80F8970(void)
-{
- s16 conditions[CONTESTANT_COUNT];
- int i, j;
- s16 condition;
- s8 var0;
- u8 var2;
- u8 r8;
- u8 r7;
-
- for (i = 0; i < CONTESTANT_COUNT; i++)
- conditions[i] = gContestMonConditions[i];
-
- for (i = 0; i < CONTESTANT_COUNT - 1; i++)
- {
- for (j = CONTESTANT_COUNT - 1; j > i; j--)
- {
- if (conditions[j - 1] < conditions[j])
- {
- int temp;
- SWAP(conditions[j], conditions[j - 1], temp)
- }
- }
- }
-
- condition = conditions[gSpecialVar_0x8006];
- var0 = 0;
- r8 = 0;
- for (i = 0; i < CONTESTANT_COUNT; i++)
- {
- if (conditions[i] == condition)
- {
- var0++;
- if (i == gSpecialVar_0x8006)
- r8 = var0;
- }
- }
-
- for (i = 0; i < CONTESTANT_COUNT; i++)
- {
- if (conditions[i] == condition)
- break;
- }
-
- r7 = i;
- var2 = r8;
- for (i = 0; i < CONTESTANT_COUNT; i++)
- {
- if (condition == gContestMonConditions[i])
- {
- if (var2 == 1)
- break;
- var2--;
- }
- }
-
- StringCopy(gStringVar1, gContestMons[i].nickname);
- StringCopy(gStringVar2, gContestMons[i].trainerName);
- sub_81DB5AC(gStringVar2);
-
- if (var0 == 1)
- gSpecialVar_0x8006 = r7;
- else if (r8 == var0)
- gSpecialVar_0x8006 = r7;
- else
- gSpecialVar_0x8006 = r7 + 4;
-}
-
-static void ShowContestWinnerCleanup(void)
-{
- SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
-}
-
-void ShowContestWinner(void)
-{
- /*
- if(gUnknown_0203856C)
- {
- sub_80AAF30();
- gBattleStruct->unk15DDF = 1;
- gBattleStruct->unk15DDE = sub_80B2C4C(254, 0);
- Contest_SaveWinner(3);
- gUnknown_0203856C = 0;
- }
- */
-
- SetMainCallback2(CB2_ContestPainting);
- gMain.savedCallback = ShowContestWinnerCleanup;
-}
-
-void SetLinkContestPlayerGfx(void)
-{
- int i;
-
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- {
- for (i = 0; i < gNumLinkContestPlayers; i++)
- {
- int version = (u8)gLinkPlayers[i].version;
- if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
- {
- if (gLinkPlayers[i].gender == MALE)
- gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_BRENDAN;
- else
- gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_MAY;
- }
- }
-
- VarSet(VAR_OBJ_GFX_ID_0, gContestMons[0].trainerGfxId);
- VarSet(VAR_OBJ_GFX_ID_1, gContestMons[1].trainerGfxId);
- VarSet(VAR_OBJ_GFX_ID_2, gContestMons[2].trainerGfxId);
- VarSet(VAR_OBJ_GFX_ID_3, gContestMons[3].trainerGfxId);
- }
-}
-
-void LoadLinkContestPlayerPalettes(void)
-{
- int i;
- u8 objectEventId;
- int version;
- struct Sprite *sprite;
-
- gReservedSpritePaletteCount = 12;
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- {
- for (i = 0; i < gNumLinkContestPlayers; i++)
- {
- objectEventId = GetObjectEventIdByLocalIdAndMap(gUnknown_0858D8EC[i], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
- sprite = &gSprites[gObjectEvents[objectEventId].spriteId];
- sprite->oam.paletteNum = 6 + i;
- version = (u8)gLinkPlayers[i].version;
- if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
- {
- if (gLinkPlayers[i].gender == MALE)
- LoadPalette(gObjectEventPalette33, 0x160 + i * 0x10, 0x20);
- else
- LoadPalette(gObjectEventPalette34, 0x160 + i * 0x10, 0x20);
- }
- else
- {
- if (gLinkPlayers[i].gender == MALE)
- LoadPalette(gObjectEventPalette8, 0x160 + i * 0x10, 0x20);
- else
- LoadPalette(gObjectEventPalette17, 0x160 + i * 0x10, 0x20);
- }
- }
- }
-}
-
-u8 GiveMonArtistRibbon(void)
-{
- u8 hasArtistRibbon;
-
- hasArtistRibbon = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
- if (!hasArtistRibbon
- && gContestFinalStandings[gContestPlayerMonIndex] == 0
- && gSpecialVar_ContestRank == CONTEST_RANK_MASTER
- && gContestMonTotalPoints[gContestPlayerMonIndex] >= 800)
- {
- hasArtistRibbon = 1;
- SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &hasArtistRibbon);
- if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
- TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
-
- return 1;
- }
- else
- {
- return 0;
- }
-}
-
-bool8 IsContestDebugActive(void)
-{
- return FALSE; // gUnknown_0203856C in pokeruby
-}
-
-void ShowContestEntryMonPic(void)
-{
- const struct CompressedSpritePalette *palette;
- u32 personality, otId;
- u16 species;
- u8 spriteId;
- u8 taskId;
- u8 left, top;
-
- if (FindTaskIdByFunc(Task_ShowContestEntryMonPic) == 0xFF)
- {
- AllocateMonSpritesGfx();
- left = 10;
- top = 3;
- species = gContestMons[gSpecialVar_0x8006].species;
- personality = gContestMons[gSpecialVar_0x8006].personality;
- otId = gContestMons[gSpecialVar_0x8006].otId;
- taskId = CreateTask(Task_ShowContestEntryMonPic, 0x50);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = species;
- if (gSpecialVar_0x8006 == gContestPlayerMonIndex)
- HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
- else
- HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
-
- palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
- LoadCompressedSpritePalette(palette);
- SetMultiuseSpriteTemplateToPokemon(species, 1);
- gMultiuseSpriteTemplate.paletteTag = palette->tag;
- spriteId = CreateSprite(&gMultiuseSpriteTemplate, (left + 1) * 8 + 32, (top * 8) + 40, 0);
-
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- {
- if (!(gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER))
- DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
- }
- else
- {
- DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
- }
-
- gTasks[taskId].data[2] = spriteId;
- gTasks[taskId].data[3] = left;
- gTasks[taskId].data[4] = top;
- gSprites[spriteId].callback = SpriteCallbackDummy;
- gSprites[spriteId].oam.priority = 0;
- }
-}
-
-void HideContestEntryMonPic(void)
-{
- u8 taskId = FindTaskIdByFunc(Task_ShowContestEntryMonPic);
- if (taskId != 0xFF)
- {
- gTasks[taskId].data[0]++;
- FreeMonSpritesGfx();
- }
-}
-
-static void Task_ShowContestEntryMonPic(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
- struct Sprite *sprite;
-
- switch(task->data[0])
- {
- case 0:
- task->data[0]++;
- break;
- case 1:
- task->data[5] = CreateWindowFromRect(10, 3, 8, 8);
- SetStandardWindowBorderStyle(task->data[5], 1);
- task->data[0]++;
- break;
- case 2:
- break;
- case 3:
- sprite = &gSprites[task->data[2]];
- FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
-
- if(sprite->oam.affineMode)
- FreeOamMatrix(sprite->oam.matrixNum);
-
- DestroySprite(sprite);
- task->data[0]++;
- break;
- case 4:
- ClearToTransparentAndRemoveWindow(gTasks[taskId].data[5]);
- DestroyTask(taskId);
- break;
- }
-}
-
-void ScriptGetMultiplayerId(void)
-{
- if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- && gNumLinkContestPlayers == CONTESTANT_COUNT
- && !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS))
- gSpecialVar_Result = GetMultiplayerId();
- else
- gSpecialVar_Result = MAX_LINK_PLAYERS;
-}
-
-void ScriptRandom(void)
-{
- u16 random;
- u16 *scriptPtr;
-
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- {
- gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
- random = gContestRngValue >> 16;
- scriptPtr = &gSpecialVar_Result;
- }
- else
- {
- scriptPtr = &gSpecialVar_Result;
- random = Random();
- }
- *scriptPtr = random % *scriptPtr;
-}
-
-u16 GetContestRand(void)
-{
- gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
- return gContestRngValue >> 16;
-}
-
-bool8 LinkContestWaitForConnection(void)
-{
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
- {
- CreateTask(Task_LinkContestWaitForConnection, 5);
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-}
-
-static void Task_LinkContestWaitForConnection(u8 taskId)
-{
- switch (gTasks[taskId].data[0])
- {
- case 0:
- if (IsLinkTaskFinished())
- {
- sub_800ADF8();
- gTasks[taskId].data[0]++;
- }
- break;
- case 1:
- gTasks[taskId].data[0]++;
- break;
- default:
- if (IsLinkTaskFinished() == 1)
- {
- EnableBothScriptContexts();
- DestroyTask(taskId);
- }
- break;
- }
-}
-
-void LinkContestTryShowWirelessIndicator(void)
-{
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
- {
- if (gReceivedRemoteLinkPlayers)
- {
- LoadWirelessStatusIndicatorSpriteGfx();
- CreateWirelessStatusIndicatorSprite(8, 8);
- }
- }
-}
-
-void LinkContestTryHideWirelessIndicator(void)
-{
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
- {
- if (gReceivedRemoteLinkPlayers)
- DestroyWirelessStatusIndicatorSprite();
- }
-}
-
-bool8 IsContestWithRSPlayer(void)
-{
- if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
- return TRUE;
- else
- return FALSE;
-}
-
-void ClearLinkContestFlags(void)
-{
- gLinkContestFlags = 0;
-}
-
-bool8 IsWirelessContest(void)
-{
- if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
- return TRUE;
- else
- return FALSE;
-}
-
-void HealPlayerParty(void)
-{
- u8 i, j;
- u8 ppBonuses;
- u8 arg[4];
-
- // restore HP.
- for(i = 0; i < gPlayerPartyCount; i++)
- {
- u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
- arg[0] = maxHP;
- arg[1] = maxHP >> 8;
- SetMonData(&gPlayerParty[i], MON_DATA_HP, arg);
- ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES);
-
- // restore PP.
- for(j = 0; j < MAX_MON_MOVES; j++)
- {
- arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j);
- SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg);
- }
-
- // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData.
- arg[0] = 0;
- arg[1] = 0;
- arg[2] = 0;
- arg[3] = 0;
- SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg);
- }
-}
-
-u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3)
-{
- u16 nationalDexNum;
- int sentToPc;
- u8 heldItem[2];
- struct Pokemon mon;
-
- CreateMon(&mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
- heldItem[0] = item;
- heldItem[1] = item >> 8;
- SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem);
- sentToPc = GiveMonToPlayer(&mon);
- nationalDexNum = SpeciesToNationalPokedexNum(species);
-
- switch(sentToPc)
- {
- case 0:
- case 1:
- GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
- GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT);
- break;
- }
- return sentToPc;
-}
-
-u8 ScriptGiveEgg(u16 species)
-{
- struct Pokemon mon;
- u8 isEgg;
-
- CreateEgg(&mon, species, TRUE);
- isEgg = TRUE;
- SetMonData(&mon, MON_DATA_IS_EGG, &isEgg);
-
- return GiveMonToPlayer(&mon);
-}
-
-void HasEnoughMonsForDoubleBattle(void)
-{
- switch (GetMonsStateToDoubles())
- {
- case PLAYER_HAS_TWO_USABLE_MONS:
- gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS;
- break;
- case PLAYER_HAS_ONE_MON:
- gSpecialVar_Result = PLAYER_HAS_ONE_MON;
- break;
- case PLAYER_HAS_ONE_USABLE_MON:
- gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON;
- break;
- }
-}
-
-static bool8 CheckPartyMonHasHeldItem(u16 item)
-{
- int i;
-
- for(i = 0; i < PARTY_SIZE; i++)
- {
- u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
- if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item)
- return TRUE;
- }
- return FALSE;
-}
-
-bool8 DoesPartyHaveEnigmaBerry(void)
-{
- bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY);
- if (hasItem == TRUE)
- GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1);
-
- return hasItem;
-}
-
-void CreateScriptedWildMon(u16 species, u8 level, u16 item)
-{
- u8 heldItem[2];
-
- ZeroEnemyPartyMons();
- CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
- if (item)
- {
- heldItem[0] = item;
- heldItem[1] = item >> 8;
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
- }
-}
-
-void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
-{
- if (monIndex > PARTY_SIZE)
- monIndex = gPlayerPartyCount - 1;
-
- SetMonMoveSlot(&gPlayerParty[monIndex], move, slot);
-}
-
-// Note: When control returns to the event script, gSpecialVar_Result will be
-// TRUE if the party selection was successful.
-void ChooseHalfPartyForBattle(void)
-{
- gMain.savedCallback = CB2_ReturnFromChooseHalfParty;
- VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER);
- InitChooseHalfPartyForBattle(0);
-}
-
-static void CB2_ReturnFromChooseHalfParty(void)
-{
- switch (gSelectedOrderFromParty[0])
- {
- case 0:
- gSpecialVar_Result = FALSE;
- break;
- default:
- gSpecialVar_Result = TRUE;
- break;
- }
-
- SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
-}
-
-void ChoosePartyForBattleFrontier(void)
-{
- gMain.savedCallback = CB2_ReturnFromChooseBattleFrontierParty;
- InitChooseHalfPartyForBattle(gSpecialVar_0x8004 + 1);
-}
-
-static void CB2_ReturnFromChooseBattleFrontierParty(void)
-{
- switch (gSelectedOrderFromParty[0])
- {
- case 0:
- gSpecialVar_Result = FALSE;
- break;
- default:
- gSpecialVar_Result = TRUE;
- break;
- }
-
- SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
-}
-
-void ReducePlayerPartyToSelectedMons(void)
-{
- struct Pokemon party[MAX_FRONTIER_PARTY_SIZE];
- int i;
-
- CpuFill32(0, party, sizeof party);
-
- // copy the selected pokemon according to the order.
- for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
- if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop
- party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal
-
- CpuFill32(0, gPlayerParty, sizeof gPlayerParty);
-
- // overwrite the first 4 with the order copied to.
- for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
- gPlayerParty[i] = party[i];
-
- CalculatePlayerPartyCount();
-}
diff --git a/src/trade.c b/src/trade.c
index 3a0f07ac6..17967733a 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -246,9 +246,9 @@ static bool8 SendLinkData(const void *linkData, u32 size)
}
}
-static void sub_80771AC(u8 a0)
+static void RequestLinkData(u8 type)
{
- sub_800A4D8(a0);
+ SendBlockRequest(type);
}
static bool32 sub_80771BC(void)
@@ -295,9 +295,9 @@ static bool32 IsWirelessTrade(void)
return FALSE;
}
-static void sub_8077288(u8 unused)
+static void SetTradeLinkStandbyCallback(u8 unused)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
}
static bool32 _IsLinkTaskFinished(void)
@@ -445,7 +445,7 @@ static void CB2_CreateTradeMenu(void)
if (gWirelessCommType)
{
sub_801048C(TRUE);
- sub_800ADF8();
+ SetLinkStandbyCallback();
}
}
break;
@@ -825,7 +825,7 @@ static void LinkTradeWaitForFade(void)
}
else
{
- sub_800ABF4(32);
+ SetCloseLinkCallbackAndType(32);
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE;
}
}
@@ -983,7 +983,7 @@ static bool8 BufferTradeParties(void)
case 3:
if (id == 0)
{
- sub_80771AC(1);
+ RequestLinkData(1);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1002,7 +1002,7 @@ static bool8 BufferTradeParties(void)
case 7:
if (id == 0)
{
- sub_80771AC(1);
+ RequestLinkData(1);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1021,7 +1021,7 @@ static bool8 BufferTradeParties(void)
case 11:
if (id == 0)
{
- sub_80771AC(1);
+ RequestLinkData(1);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1040,7 +1040,7 @@ static bool8 BufferTradeParties(void)
case 15:
if (id == 0)
{
- sub_80771AC(3);
+ RequestLinkData(3);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1059,7 +1059,7 @@ static bool8 BufferTradeParties(void)
case 19:
if (id == 0)
{
- sub_80771AC(4);
+ RequestLinkData(4);
}
sTradeMenuData->bufferPartyState++;
break;
@@ -1652,11 +1652,11 @@ static void CancelTrade_1(void)
{
if (gWirelessCommType)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
}
else
{
- sub_800ABF4(12);
+ SetCloseLinkCallbackAndType(12);
}
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_2;
@@ -1692,7 +1692,7 @@ static void LinkTradeWaitForQueue(void)
{
if (!sub_801048C(FALSE) && GetNumQueuedActions() == 0)
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE;
}
}
@@ -4566,7 +4566,7 @@ static void CB2_SaveAndEndTrade(void)
DrawTextOnTradeWindow(0, gStringVar4, 0);
break;
case 1:
- sub_8077288(0);
+ SetTradeLinkStandbyCallback(0);
gMain.state = 100;
sTradeData->timer = 0;
break;
@@ -4644,7 +4644,7 @@ static void CB2_SaveAndEndTrade(void)
case 41:
if (sTradeData->timer == 0)
{
- sub_8077288(1);
+ SetTradeLinkStandbyCallback(1);
gMain.state = 42;
}
else
@@ -4663,7 +4663,7 @@ static void CB2_SaveAndEndTrade(void)
if (++sTradeData->timer > 60)
{
gMain.state++;
- sub_8077288(2);
+ SetTradeLinkStandbyCallback(2);
}
break;
case 6:
@@ -4685,11 +4685,11 @@ static void CB2_SaveAndEndTrade(void)
{
if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu)
{
- sub_8077288(3);
+ SetTradeLinkStandbyCallback(3);
}
else
{
- sub_800AC34();
+ SetCloseLinkCallback();
}
gMain.state++;
}
@@ -4902,7 +4902,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
DrawTextOnTradeWindow(0, gStringVar4, 0);
break;
case 1:
- sub_8077288(0);
+ SetTradeLinkStandbyCallback(0);
gMain.state = 2;
sTradeData->timer = 0;
break;
@@ -4950,7 +4950,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
case 7:
if (sTradeData->timer == 0)
{
- sub_8077288(1);
+ SetTradeLinkStandbyCallback(1);
gMain.state = 8;
}
else
@@ -4969,7 +4969,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
if (++sTradeData->timer > 60)
{
gMain.state++;
- sub_8077288(2);
+ SetTradeLinkStandbyCallback(2);
}
break;
case 10:
@@ -4983,7 +4983,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
case 11:
if (!gPaletteFade.active && IsBGMStopped() == TRUE)
{
- sub_8077288(3);
+ SetTradeLinkStandbyCallback(3);
gMain.state = 12;
}
break;
diff --git a/src/trainer_card.c b/src/trainer_card.c
index d625bc13e..c374fad07 100755
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -25,7 +25,7 @@
#include "graphics.h"
#include "pokemon_icon.h"
#include "trainer_pokemon_sprites.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "contest_util.h"
#include "constants/songs.h"
#include "constants/game_stat.h"
#include "constants/battle_frontier.h"
@@ -497,7 +497,7 @@ static void Task_TrainerCard(u8 taskId)
}
break;
case STATE_WAIT_LINK_PARTNER:
- sub_800AC34();
+ SetCloseLinkCallback();
DrawDialogueFrame(0, 1);
AddTextPrinterParameterized(0, 1, gText_WaitingTrainerFinishReading, 0, 1, 255, 0);
CopyWindowToVram(0, 3);
diff --git a/src/tv.c b/src/tv.c
index 0444912f0..37c29ed2e 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -387,39 +387,39 @@ static const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = {
};
static const u8 *const sTVContestLiveUpdatesTextGroup[] = {
- gTVContestLiveUpdatesText00,
- gTVContestLiveUpdatesText01,
- gTVContestLiveUpdatesText02,
- gTVContestLiveUpdatesText03,
- gTVContestLiveUpdatesText04,
- gTVContestLiveUpdatesText05,
- gTVContestLiveUpdatesText06,
- gTVContestLiveUpdatesText07,
- gTVContestLiveUpdatesText08,
- gTVContestLiveUpdatesText09,
- gTVContestLiveUpdatesText10,
- gTVContestLiveUpdatesText11,
- gTVContestLiveUpdatesText12,
- gTVContestLiveUpdatesText13,
- gTVContestLiveUpdatesText14,
- gTVContestLiveUpdatesText15,
- gTVContestLiveUpdatesText16,
- gTVContestLiveUpdatesText17,
- gTVContestLiveUpdatesText18,
- gTVContestLiveUpdatesText19,
- gTVContestLiveUpdatesText20,
- gTVContestLiveUpdatesText21,
- gTVContestLiveUpdatesText22,
- gTVContestLiveUpdatesText23,
- gTVContestLiveUpdatesText24,
- gTVContestLiveUpdatesText25,
- gTVContestLiveUpdatesText26,
- gTVContestLiveUpdatesText27,
- gTVContestLiveUpdatesText28,
- gTVContestLiveUpdatesText29,
- gTVContestLiveUpdatesText30,
- gTVContestLiveUpdatesText31,
- gTVContestLiveUpdatesText32
+ [CONTESTLIVE_STATE_INTRO] = ContestLiveUpdates_Text_Intro,
+ [CONTESTLIVE_STATE_WON_BOTH_ROUNDS] = ContestLiveUpdates_Text_WonBothRounds,
+ [CONTESTLIVE_STATE_BETTER_ROUND2] = ContestLiveUpdates_Text_BetterRound2,
+ [CONTESTLIVE_STATE_EQUAL_ROUNDS] = ContestLiveUpdates_Text_EqualRounds,
+ [CONTESTLIVE_STATE_BETTER_ROUND1] = ContestLiveUpdates_Text_BetterRound1,
+ [CONTESTLIVE_STATE_GOT_NERVOUS] = ContestLiveUpdates_Text_GotNervous,
+ [CONTESTLIVE_STATE_STARTLED_OTHER] = ContestLiveUpdates_Text_StartledFoes,
+ [CONTESTLIVE_STATE_USED_COMBO] = ContestLiveUpdates_Text_UsedCombo,
+ [CONTESTLIVE_STATE_EXCITING_APPEAL] = ContestLiveUpdates_Text_ExcitingAppeal,
+ [CONTESTLIVE_STATE_COOL] = ContestLiveUpdates_Text_WasCool,
+ [CONTESTLIVE_STATE_BEAUTIFUL] = ContestLiveUpdates_Text_WasBeautiful,
+ [CONTESTLIVE_STATE_CUTE] = ContestLiveUpdates_Text_WasCute,
+ [CONTESTLIVE_STATE_SMART] = ContestLiveUpdates_Text_WasSmart,
+ [CONTESTLIVE_STATE_TOUGH] = ContestLiveUpdates_Text_WasTough,
+ [CONTESTLIVE_STATE_VERY_EXCITING_APPEAL] = ContestLiveUpdates_Text_VeryExcitingAppeal,
+ [CONTESTLIVE_STATE_VERY_COOL] = ContestLiveUpdates_Text_VeryCool,
+ [CONTESTLIVE_STATE_VERY_BEAUTIFUL] = ContestLiveUpdates_Text_VeryBeautiful,
+ [CONTESTLIVE_STATE_VERY_CUTE] = ContestLiveUpdates_Text_VeryCute,
+ [CONTESTLIVE_STATE_VERY_SMART] = ContestLiveUpdates_Text_VerySmart,
+ [CONTESTLIVE_STATE_VERY_TOUGH] = ContestLiveUpdates_Text_VeryTough,
+ [CONTESTLIVE_STATE_TOOK_BREAK] = ContestLiveUpdates_Text_TookBreak,
+ [CONTESTLIVE_STATE_GOT_STARTLED] = ContestLiveUpdates_Text_GotStartled,
+ [CONTESTLIVE_STATE_USED_MOVE] = ContestLiveUpdates_Text_MoveWonderful,
+ [CONTESTLIVE_STATE_TALK_ABOUT_LOSER] = ContestLiveUpdates_Text_TalkAboutAnotherMon,
+ [CONTESTLIVE_STATE_NO_APPEALS] = ContestLiveUpdates_Text_FailedToAppeal,
+ [CONTESTLIVE_STATE_LAST_BOTH] = ContestLiveUpdates_Text_LastInBothRounds,
+ [CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH] = ContestLiveUpdates_Text_NotExcitingEnough,
+ [CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN] = ContestLiveUpdates_Text_LostAfterWinningRound1,
+ [CONTESTLIVE_STATE_NO_EXCITING_APPEALS] = ContestLiveUpdates_Text_NeverExciting,
+ [CONTESTLIVE_STATE_LOST_SMALL_MARGIN] = ContestLiveUpdates_Text_LostBySmallMargin,
+ [CONTESTLIVE_STATE_REPEATED_APPEALS] = ContestLiveUpdates_Text_RepeatedAppeals,
+ [CONTESTLIVE_STATE_LOST] = ContestLiveUpdates_Text_ValiantEffortButLost,
+ [CONTESTLIVE_STATE_OUTRO] = ContestLiveUpdates_Text_Outro
};
static const u8 *const sTVPokemonBattleUpdateTextGroup[] = {
@@ -1268,19 +1268,19 @@ static void InterviewAfter_ContestLiveUpdates(void)
show2 = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show2->contestLiveUpdates.kind = TVSHOW_CONTEST_LIVE_UPDATES;
show2->contestLiveUpdates.active = TRUE;
- StringCopy(show2->contestLiveUpdates.playerName, gSaveBlock2Ptr->playerName);
+ StringCopy(show2->contestLiveUpdates.winningTrainerName, gSaveBlock2Ptr->playerName); // Show only begins running if player won, so always load players name
show2->contestLiveUpdates.category = gSpecialVar_ContestCategory;
- show2->contestLiveUpdates.species = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL);
- show2->contestLiveUpdates.winningSpecies = show->contestLiveUpdates.winningSpecies;
- show2->contestLiveUpdates.appealFlags2 = show->contestLiveUpdates.appealFlags2;
- show2->contestLiveUpdates.round1Rank = show->contestLiveUpdates.round1Rank;
- show2->contestLiveUpdates.round2Rank = show->contestLiveUpdates.round2Rank;
+ show2->contestLiveUpdates.winningSpecies = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL);
+ show2->contestLiveUpdates.losingSpecies = show->contestLiveUpdates.losingSpecies;
+ show2->contestLiveUpdates.loserAppealFlag = show->contestLiveUpdates.loserAppealFlag;
+ show2->contestLiveUpdates.round1Placing = show->contestLiveUpdates.round1Placing;
+ show2->contestLiveUpdates.round2Placing = show->contestLiveUpdates.round2Placing;
show2->contestLiveUpdates.move = show->contestLiveUpdates.move;
- show2->contestLiveUpdates.appealFlags1 = show->contestLiveUpdates.appealFlags1;
- StringCopy(show2->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerName);
+ show2->contestLiveUpdates.winnerAppealFlag = show->contestLiveUpdates.winnerAppealFlag;
+ StringCopy(show2->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerName);
tv_store_id_2x(show2);
- show2->contestLiveUpdates.language = gGameLanguage;
- show2->contestLiveUpdates.winningTrainerLanguage = show->contestLiveUpdates.winningTrainerLanguage;
+ show2->contestLiveUpdates.winningTrainerLanguage = gGameLanguage;
+ show2->contestLiveUpdates.losingTrainerLanguage = show->contestLiveUpdates.losingTrainerLanguage;
DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, LAST_TVSHOW_IDX);
}
}
@@ -1399,7 +1399,7 @@ void PutFanClubSpecialOnTheAir(void)
}
}
-void ContestLiveUpdates_BeforeInterview_1(u8 a0)
+void ContestLiveUpdates_Init(u8 round1Placing)
{
TVShow *show;
@@ -1408,12 +1408,12 @@ void ContestLiveUpdates_BeforeInterview_1(u8 a0)
if (sCurTVShowSlot != -1)
{
show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
- show->contestLiveUpdates.round1Rank = a0;
+ show->contestLiveUpdates.round1Placing = round1Placing;
show->contestLiveUpdates.kind = TVSHOW_CONTEST_LIVE_UPDATES;
}
}
-void ContestLiveUpdates_BeforeInterview_2(u8 a0)
+void ContestLiveUpdates_SetRound2Placing(u8 round2Placing)
{
TVShow *show;
@@ -1421,11 +1421,11 @@ void ContestLiveUpdates_BeforeInterview_2(u8 a0)
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
- show->contestLiveUpdates.round2Rank = a0;
+ show->contestLiveUpdates.round2Placing = round2Placing;
}
}
-void ContestLiveUpdates_BeforeInterview_3(u8 a0)
+void ContestLiveUpdates_SetWinnerAppealFlag(u8 flag)
{
TVShow *show;
@@ -1433,11 +1433,11 @@ void ContestLiveUpdates_BeforeInterview_3(u8 a0)
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
- show->contestLiveUpdates.appealFlags1 = a0;
+ show->contestLiveUpdates.winnerAppealFlag = flag;
}
}
-void ContestLiveUpdates_BeforeInterview_4(u16 a0)
+void ContestLiveUpdates_SetWinnerMoveUsed(u16 move)
{
TVShow *show;
@@ -1445,11 +1445,11 @@ void ContestLiveUpdates_BeforeInterview_4(u16 a0)
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
- show->contestLiveUpdates.move = a0;
+ show->contestLiveUpdates.move = move;
}
}
-void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1)
+void ContestLiveUpdates_SetLoserData(u8 flag, u8 loser)
{
TVShow *show;
@@ -1457,21 +1457,21 @@ void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1)
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
- show->contestLiveUpdates.winningSpecies = gContestMons[a1].species;
- StringCopy(show->contestLiveUpdates.winningTrainerName, gContestMons[a1].trainerName);
- StripExtCtrlCodes(show->contestLiveUpdates.winningTrainerName);
- show->contestLiveUpdates.appealFlags2 = a0;
- if (a1 + 1 > gNumLinkContestPlayers)
+ show->contestLiveUpdates.losingSpecies = gContestMons[loser].species;
+ StringCopy(show->contestLiveUpdates.losingTrainerName, gContestMons[loser].trainerName);
+ StripExtCtrlCodes(show->contestLiveUpdates.losingTrainerName);
+ show->contestLiveUpdates.loserAppealFlag = flag;
+ if (loser + 1 > gNumLinkContestPlayers)
{
- show->contestLiveUpdates.winningTrainerLanguage = gLinkPlayers[0].language;
+ show->contestLiveUpdates.losingTrainerLanguage = gLinkPlayers[0].language;
}
- else if (gGameLanguage == LANGUAGE_JAPANESE || gLinkPlayers[a1].language == LANGUAGE_JAPANESE)
+ else if (gGameLanguage == LANGUAGE_JAPANESE || gLinkPlayers[loser].language == LANGUAGE_JAPANESE)
{
- show->contestLiveUpdates.winningTrainerLanguage = LANGUAGE_JAPANESE;
+ show->contestLiveUpdates.losingTrainerLanguage = LANGUAGE_JAPANESE;
}
else
{
- show->contestLiveUpdates.winningTrainerLanguage = gLinkPlayers[a1].language;
+ show->contestLiveUpdates.losingTrainerLanguage = gLinkPlayers[loser].language;
}
}
}
@@ -3804,10 +3804,10 @@ static void sub_80F0708(void) // FIXME: register allocation shenanigans
switch (gSaveBlock1Ptr->tvShows[i].common.kind)
{
case TVSHOW_CONTEST_LIVE_UPDATES:
- j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.species;
- sub_80F0B24(j, i);
j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.winningSpecies;
sub_80F0B24(j, i);
+ j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.losingSpecies;
+ sub_80F0B24(j, i);
break;
case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
break;
@@ -4301,8 +4301,8 @@ static void sub_80F12A4(TVShow *shows)
curShow->bravoTrainerTower.pokemonNameLanguage = TV_GetStringLanguage(curShow->bravoTrainerTower.pokemonName);
break;
case TVSHOW_CONTEST_LIVE_UPDATES:
- curShow->contestLiveUpdates.language = TV_GetStringLanguage(curShow->contestLiveUpdates.playerName);
curShow->contestLiveUpdates.winningTrainerLanguage = TV_GetStringLanguage(curShow->contestLiveUpdates.winningTrainerName);
+ curShow->contestLiveUpdates.losingTrainerLanguage = TV_GetStringLanguage(curShow->contestLiveUpdates.losingTrainerName);
break;
case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
curShow->threeCheers.language = TV_GetStringLanguage(curShow->threeCheers.playerName);
@@ -5167,6 +5167,12 @@ static void DoTVShowPokemonNewsMassOutbreak(void)
ShowFieldMessage(sTVMassOutbreakTextGroup[sTVShowState]);
}
+// TV Show that plays after a Link Contest.
+// First talks about the winner and something they did, then about a losing player and something they did
+// The show is only generated when the player wins, but can be record mixed to other games
+// Each state buffers any needed data for a message to print from sTVContestLiveUpdatesTextGroup
+// Many cases in this function are identical, and its size can be reduced a good deal by collapsing them
+// Can't get this to match while collapsing them though
static void DoTVShowPokemonContestLiveUpdates(void)
{
TVShow *show;
@@ -5177,339 +5183,338 @@ static void DoTVShowPokemonContestLiveUpdates(void)
state = sTVShowState;
switch (state)
{
- case 0:
- BufferContestName(gStringVar1, show->contestLiveUpdates.category);
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
- if (show->contestLiveUpdates.round1Rank == show->contestLiveUpdates.round2Rank)
- {
- if (show->contestLiveUpdates.round1Rank == 0)
- {
- sTVShowState = 1;
- }
- else
- {
- sTVShowState = 3;
- }
- }
- else if (show->contestLiveUpdates.round1Rank > show->contestLiveUpdates.round2Rank)
+ case CONTESTLIVE_STATE_INTRO:
+ BufferContestName(gStringVar1, show->contestLiveUpdates.category);
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
+ if (show->contestLiveUpdates.round1Placing == show->contestLiveUpdates.round2Placing)
+ {
+ if (show->contestLiveUpdates.round1Placing == 0)
{
- sTVShowState = 2;
+ sTVShowState = CONTESTLIVE_STATE_WON_BOTH_ROUNDS;
}
else
{
- sTVShowState = 4;
+ sTVShowState = CONTESTLIVE_STATE_EQUAL_ROUNDS;
}
+ }
+ else if (show->contestLiveUpdates.round1Placing > show->contestLiveUpdates.round2Placing)
+ {
+ sTVShowState = CONTESTLIVE_STATE_BETTER_ROUND2;
+ }
+ else
+ {
+ sTVShowState = CONTESTLIVE_STATE_BETTER_ROUND1;
+ }
+ break;
+ case CONTESTLIVE_STATE_WON_BOTH_ROUNDS:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ switch (show->contestLiveUpdates.winnerAppealFlag)
+ {
+ case CONTESTLIVE_FLAG_EXCITING_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
break;
- case 1:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- switch (show->contestLiveUpdates.appealFlags1)
- {
- case 0x01:
- sTVShowState = 8;
- break;
- case 0x02:
- sTVShowState = 5;
- break;
- case 0x04:
- sTVShowState = 14;
- break;
- case 0x08:
- sTVShowState = 7;
- break;
- case 0x10:
- sTVShowState = 6;
- break;
- case 0x20:
- sTVShowState = 20;
- break;
- case 0x40:
- sTVShowState = 21;
- break;
- case 0x80:
- sTVShowState = 22;
- break;
- }
+ case CONTESTLIVE_FLAG_GOT_NERVOUS:
+ sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
break;
- case 2:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- switch (show->contestLiveUpdates.appealFlags1)
- {
- case 0x01:
- sTVShowState = 8;
- break;
- case 0x02:
- sTVShowState = 5;
- break;
- case 0x04:
- sTVShowState = 14;
- break;
- case 0x08:
- sTVShowState = 7;
- break;
- case 0x10:
- sTVShowState = 6;
- break;
- case 0x20:
- sTVShowState = 20;
- break;
- case 0x40:
- sTVShowState = 21;
- break;
- case 0x80:
- sTVShowState = 22;
- break;
- }
+ case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
+ sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
break;
- case 3:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
- switch (show->contestLiveUpdates.appealFlags1)
- {
- case 0x01:
- sTVShowState = 8;
- break;
- case 0x02:
- sTVShowState = 5;
- break;
- case 0x04:
- sTVShowState = 14;
- break;
- case 0x08:
- sTVShowState = 7;
- break;
- case 0x10:
- sTVShowState = 6;
- break;
- case 0x20:
- sTVShowState = 20;
- break;
- case 0x40:
- sTVShowState = 21;
- break;
- case 0x80:
- sTVShowState = 22;
- break;
- }
+ case CONTESTLIVE_FLAG_USED_COMBO:
+ sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
break;
- case 4:
- switch (show->contestLiveUpdates.category)
- {
- case 0:
- StringCopy(gStringVar1, gText_Cool);
- break;
- case 1:
- StringCopy(gStringVar1, gText_Beauty);
- break;
- case 2:
- StringCopy(gStringVar1, gText_Cute);
- break;
- case 3:
- StringCopy(gStringVar1, gText_Smart);
- break;
- case 4:
- StringCopy(gStringVar1, gText_Tough);
- break;
- }
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- switch (show->contestLiveUpdates.appealFlags1)
- {
- case 0x01:
- sTVShowState = 8;
- break;
- case 0x02:
- sTVShowState = 5;
- break;
- case 0x04:
- sTVShowState = 14;
- break;
- case 0x08:
- sTVShowState = 7;
- break;
- case 0x10:
- sTVShowState = 6;
- break;
- case 0x20:
- sTVShowState = 20;
- break;
- case 0x40:
- sTVShowState = 21;
- break;
- case 0x80:
- sTVShowState = 22;
- break;
- }
+ case CONTESTLIVE_FLAG_STARTLED_OTHER:
+ sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
break;
- case 5:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_SKIPPED_TURN:
+ sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
break;
- case 6:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_GOT_STARTLED:
+ sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
break;
- case 7:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_MADE_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
break;
- case 8:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- switch (show->contestLiveUpdates.category)
- {
- case 0:
- sTVShowState = 9;
- break;
- case 1:
- sTVShowState = 10;
- break;
- case 2:
- sTVShowState = 11;
- break;
- case 3:
- sTVShowState = 12;
- break;
- case 4:
- sTVShowState = 13;
- break;
- }
+ }
+ break;
+ case CONTESTLIVE_STATE_BETTER_ROUND2:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ switch (show->contestLiveUpdates.winnerAppealFlag)
+ {
+ case CONTESTLIVE_FLAG_EXCITING_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
break;
- case 9:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_GOT_NERVOUS:
+ sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
break;
- case 10:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
+ sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
break;
- case 11:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_USED_COMBO:
+ sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
break;
- case 12:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_STARTLED_OTHER:
+ sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
break;
- case 13:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_SKIPPED_TURN:
+ sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
break;
- case 14:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- switch (show->contestLiveUpdates.category)
- {
- case 0:
- sTVShowState = 15;
- break;
- case 1:
- sTVShowState = 16;
- break;
- case 2:
- sTVShowState = 17;
- break;
- case 3:
- sTVShowState = 18;
- break;
- case 4:
- sTVShowState = 19;
- break;
- }
+ case CONTESTLIVE_FLAG_GOT_STARTLED:
+ sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
break;
- case 15:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_MADE_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
break;
- case 16:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ }
+ break;
+ case CONTESTLIVE_STATE_EQUAL_ROUNDS:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
+ switch (show->contestLiveUpdates.winnerAppealFlag)
+ {
+ case CONTESTLIVE_FLAG_EXCITING_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
break;
- case 17:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
+ case CONTESTLIVE_FLAG_GOT_NERVOUS:
+ sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
break;
- case 18:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
- break;
- case 19:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
- break;
- case 20:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
- break;
- case 21:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- sTVShowState = 23;
- break;
- case 22:
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- StringCopy(gStringVar3, gMoveNames[show->contestLiveUpdates.move]);
- sTVShowState = 23;
- break;
- case 23:
- StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.species]);
- TVShowConvertInternationalString(gStringVar2, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
- StringCopy(gStringVar3, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
- switch (show->contestLiveUpdates.appealFlags2)
- {
- case 0x01:
- sTVShowState = 31;
- break;
- case 0x02:
- sTVShowState = 30;
- break;
- case 0x04:
- sTVShowState = 29;
- break;
- case 0x08:
- sTVShowState = 28;
- break;
- case 0x10:
- sTVShowState = 27;
- break;
- case 0x20:
- sTVShowState = 26;
- break;
- case 0x40:
- sTVShowState = 25;
- break;
- case 0x80:
- sTVShowState = 24;
- break;
- }
+ case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
+ sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
break;
- case 24:
- StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
- sTVShowState = 32;
+ case CONTESTLIVE_FLAG_USED_COMBO:
+ sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
break;
- case 25:
- TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
- sTVShowState = 32;
+ case CONTESTLIVE_FLAG_STARTLED_OTHER:
+ sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
break;
- case 28:
- sTVShowState = 32;
+ case CONTESTLIVE_FLAG_SKIPPED_TURN:
+ sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
break;
- case 29:
- TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
- sTVShowState = 32;
+ case CONTESTLIVE_FLAG_GOT_STARTLED:
+ sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
break;
- case 26:
- case 27:
- case 30:
- case 31:
- TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
- sTVShowState = 32;
+ case CONTESTLIVE_FLAG_MADE_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
break;
- case 32:
-
- TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
- StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
- TVShowDone();
+ }
+ break;
+ case CONTESTLIVE_STATE_BETTER_ROUND1:
+ switch (show->contestLiveUpdates.category)
+ {
+ case CONTEST_CATEGORY_COOL:
+ StringCopy(gStringVar1, gText_Cool);
break;
+ case CONTEST_CATEGORY_BEAUTY:
+ StringCopy(gStringVar1, gText_Beauty);
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ StringCopy(gStringVar1, gText_Cute);
+ break;
+ case CONTEST_CATEGORY_SMART:
+ StringCopy(gStringVar1, gText_Smart);
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ StringCopy(gStringVar1, gText_Tough);
+ break;
+ }
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ switch (show->contestLiveUpdates.winnerAppealFlag)
+ {
+ case CONTESTLIVE_FLAG_EXCITING_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
+ break;
+ case CONTESTLIVE_FLAG_GOT_NERVOUS:
+ sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
+ break;
+ case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
+ sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
+ break;
+ case CONTESTLIVE_FLAG_USED_COMBO:
+ sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
+ break;
+ case CONTESTLIVE_FLAG_STARTLED_OTHER:
+ sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
+ break;
+ case CONTESTLIVE_FLAG_SKIPPED_TURN:
+ sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
+ break;
+ case CONTESTLIVE_FLAG_GOT_STARTLED:
+ sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
+ break;
+ case CONTESTLIVE_FLAG_MADE_APPEAL:
+ sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
+ break;
+ }
+ break;
+ case CONTESTLIVE_STATE_GOT_NERVOUS:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_STARTLED_OTHER:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_USED_COMBO:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_EXCITING_APPEAL:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ switch (show->contestLiveUpdates.category)
+ {
+ case CONTEST_CATEGORY_COOL:
+ sTVShowState = CONTESTLIVE_STATE_COOL;
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ sTVShowState = CONTESTLIVE_STATE_BEAUTIFUL;
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ sTVShowState = CONTESTLIVE_STATE_CUTE;
+ break;
+ case CONTEST_CATEGORY_SMART:
+ sTVShowState = CONTESTLIVE_STATE_SMART;
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ sTVShowState = CONTESTLIVE_STATE_TOUGH;
+ break;
+ }
+ break;
+ case CONTESTLIVE_STATE_COOL:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_BEAUTIFUL:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_CUTE:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_SMART:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_TOUGH:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_VERY_EXCITING_APPEAL:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ switch (show->contestLiveUpdates.category)
+ {
+ case CONTEST_CATEGORY_COOL:
+ sTVShowState = CONTESTLIVE_STATE_VERY_COOL;
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ sTVShowState = CONTESTLIVE_STATE_VERY_BEAUTIFUL;
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ sTVShowState = CONTESTLIVE_STATE_VERY_CUTE;
+ break;
+ case CONTEST_CATEGORY_SMART:
+ sTVShowState = CONTESTLIVE_STATE_VERY_SMART;
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ sTVShowState = CONTESTLIVE_STATE_VERY_TOUGH;
+ break;
+ }
+ break;
+ case CONTESTLIVE_STATE_VERY_COOL:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_VERY_BEAUTIFUL:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_VERY_CUTE:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_VERY_SMART:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_VERY_TOUGH:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_TOOK_BREAK:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_GOT_STARTLED:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_USED_MOVE:
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ StringCopy(gStringVar3, gMoveNames[show->contestLiveUpdates.move]);
+ sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
+ break;
+ case CONTESTLIVE_STATE_TALK_ABOUT_LOSER:
+ StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ TVShowConvertInternationalString(gStringVar2, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
+ StringCopy(gStringVar3, gSpeciesNames[show->contestLiveUpdates.losingSpecies]);
+ switch (show->contestLiveUpdates.loserAppealFlag)
+ {
+ case CONTESTLIVE_FLAG_LOST:
+ sTVShowState = CONTESTLIVE_STATE_LOST;
+ break;
+ case CONTESTLIVE_FLAG_REPEATED_MOVE:
+ sTVShowState = CONTESTLIVE_STATE_REPEATED_APPEALS;
+ break;
+ case CONTESTLIVE_FLAG_LOST_SMALL_MARGIN:
+ sTVShowState = CONTESTLIVE_STATE_LOST_SMALL_MARGIN;
+ break;
+ case CONTESTLIVE_FLAG_NO_EXCITEMENT:
+ sTVShowState = CONTESTLIVE_STATE_NO_EXCITING_APPEALS;
+ break;
+ case CONTESTLIVE_FLAG_BLEW_LEAD:
+ sTVShowState = CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN;
+ break;
+ case CONTESTLIVE_FLAG_MISSED_EXCITEMENT:
+ sTVShowState = CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH;
+ break;
+ case CONTESTLIVE_FLAG_LAST_BOTH_ROUNDS:
+ sTVShowState = CONTESTLIVE_STATE_LAST_BOTH;
+ break;
+ case CONTESTLIVE_FLAG_NO_APPEALS:
+ sTVShowState = CONTESTLIVE_STATE_NO_APPEALS;
+ break;
+ }
+ break;
+ case CONTESTLIVE_STATE_NO_APPEALS:
+ StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.losingSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_OUTRO;
+ break;
+ case CONTESTLIVE_STATE_LAST_BOTH:
+ TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.losingSpecies]);
+ sTVShowState = CONTESTLIVE_STATE_OUTRO;
+ break;
+ case CONTESTLIVE_STATE_NO_EXCITING_APPEALS:
+ sTVShowState = CONTESTLIVE_STATE_OUTRO;
+ break;
+ case CONTESTLIVE_STATE_LOST_SMALL_MARGIN:
+ TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
+ sTVShowState = CONTESTLIVE_STATE_OUTRO;
+ break;
+ case CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH:
+ case CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN:
+ case CONTESTLIVE_STATE_REPEATED_APPEALS:
+ case CONTESTLIVE_STATE_LOST:
+ TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
+ sTVShowState = CONTESTLIVE_STATE_OUTRO;
+ break;
+ case CONTESTLIVE_STATE_OUTRO:
+ TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
+ StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVContestLiveUpdatesTextGroup[state]);
}
diff --git a/src/union_room.c b/src/union_room.c
index 1ef8cd4cb..639420d71 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -32,7 +32,7 @@
#include "random.h"
#include "save_location.h"
#include "script.h"
-#include "script_pokemon_util_80F87D8.h"
+#include "script_pokemon_util.h"
#include "sound.h"
#include "start_menu.h"
#include "string_util.h"
@@ -1483,7 +1483,7 @@ static void Task_ExchangeCards(u8 taskId)
{
case 0:
if (GetMultiplayerId() == 0)
- sub_800A4D8(2);
+ SendBlockRequest(2);
gTasks[taskId].data[0]++;
break;
case 1:
@@ -1759,7 +1759,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId)
}
else
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
data[0] = 3;
}
}
@@ -1795,7 +1795,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId)
DestroyTask(taskId);
break;
case 7:
- sub_800AC34();
+ SetCloseLinkCallback();
data[0] = 8;
break;
case 8:
@@ -2018,7 +2018,7 @@ static void Task_MEvent_Leader(u8 taskId)
Free(data->field_8);
Free(data->field_0);
Free(data->field_4);
- sub_800ADF8();
+ SetLinkStandbyCallback();
data->state++;
break;
case 17:
@@ -2188,7 +2188,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId)
break;
case 11:
data->state++;
- sub_800ADF8();
+ SetLinkStandbyCallback();
break;
case 12:
if (IsLinkTaskFinished())
@@ -2367,7 +2367,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId)
break;
case 13:
data->state++;
- sub_800ADF8();
+ SetLinkStandbyCallback();
break;
case 14:
if (IsLinkTaskFinished())
@@ -2714,7 +2714,7 @@ static void Task_RunUnionRoom(u8 taskId)
}
break;
case UR_STATE_REQUEST_DECLINED:
- sub_800AC34();
+ SetCloseLinkCallback();
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
break;
case UR_STATE_SEND_TRADE_REQUST:
@@ -2763,7 +2763,7 @@ static void Task_RunUnionRoom(u8 taskId)
if (PrintOnTextbox(&uroom->textState, gStringVar4))
{
uroom->state = UR_STATE_WAIT_FINISH_READING_CARD;
- sub_800ADF8();
+ SetLinkStandbyCallback();
uroom->partnerYesNoResponse = 0;
uroom->recvActivityRequest[0] = 0;
}
@@ -2940,7 +2940,7 @@ static void Task_RunUnionRoom(u8 taskId)
}
break;
case UR_STATE_DECLINE_ACTIVITY_REQUEST:
- sub_800AC34();
+ SetCloseLinkCallback();
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
break;
case UR_STATE_CANCEL_REQUEST_PRINT_MSG:
@@ -2962,7 +2962,7 @@ static void Task_RunUnionRoom(u8 taskId)
ScheduleFieldMessageWithFollowupState(UR_STATE_START_ACTIVITY_LINK, gStringVar4);
break;
case UR_STATE_START_ACTIVITY_LINK:
- sub_800ADF8();
+ SetLinkStandbyCallback();
uroom->state = UR_STATE_START_ACTIVITY_WAIT_FOR_LINK;
break;
case UR_STATE_START_ACTIVITY_WAIT_FOR_LINK:
@@ -3231,7 +3231,7 @@ static bool32 UnionRoom_HandleContactFromOtherPlayer(struct WirelessLink_URoom *
else if (id == 2) // No activity
{
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
- sub_800AC34();
+ SetCloseLinkCallback();
return FALSE;
}
}
diff --git a/src/union_room_battle.c b/src/union_room_battle.c
index 4b2aa0bb1..b9ddd74a7 100644
--- a/src/union_room_battle.c
+++ b/src/union_room_battle.c
@@ -174,7 +174,7 @@ void CB2_UnionRoomBattle(void)
}
else
{
- sub_800AC34();
+ SetCloseLinkCallback();
if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | IN_UNION_ROOM))
{
gMain.state = 6;
@@ -190,7 +190,7 @@ void CB2_UnionRoomBattle(void)
case 50:
if (!UpdatePaletteFade())
{
- sub_800ADF8();
+ SetLinkStandbyCallback();
gMain.state++;
}
break;
diff --git a/src/union_room_chat.c b/src/union_room_chat.c
index c656063a2..fd2a95791 100755
--- a/src/union_room_chat.c
+++ b/src/union_room_chat.c
@@ -1267,7 +1267,7 @@ static void Chat_Exit(void)
case 5:
if (IsLinkTaskFinished() && !sub_8011A9C())
{
- sub_800AC34();
+ SetCloseLinkCallback();
sChat->exitDelayTimer = 0;
sChat->funcState++;
}
@@ -1302,7 +1302,7 @@ static void Chat_Drop(void)
case 1:
if (!IsDisplaySubtaskActive(0) && IsLinkTaskFinished() && !sub_8011A9C())
{
- sub_800AC34();
+ SetCloseLinkCallback();
sChat->exitDelayTimer = 0;
sChat->funcState++;
}
@@ -1348,7 +1348,7 @@ static void Chat_Disbanded(void)
case 2:
if (IsDisplaySubtaskActive(0) != TRUE && IsLinkTaskFinished() && !sub_8011A9C())
{
- sub_800AC34();
+ SetCloseLinkCallback();
sChat->exitDelayTimer = 0;
sChat->funcState++;
}