summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/macros/contest_ai_script.inc22
-rw-r--r--constants/constants.inc2
-rw-r--r--constants/contest_constants.inc68
-rw-r--r--constants/contest_move_effects.inc49
-rw-r--r--data/contest_ai_scripts.s70
-rw-r--r--include/constants/contest.h150
-rw-r--r--include/contest.h136
-rw-r--r--include/contest_link.h6
-rw-r--r--src/contest.c376
-rw-r--r--src/contest_ai.c46
-rw-r--r--src/contest_effect.c6
-rw-r--r--src/contest_link.c18
-rw-r--r--src/contest_link_util.c21
-rw-r--r--src/contest_util.c14
-rw-r--r--src/data/contest_opponents.h36
-rwxr-xr-xsrc/script_pokemon_util_80F87D8.c4
16 files changed, 478 insertions, 546 deletions
diff --git a/asm/macros/contest_ai_script.inc b/asm/macros/contest_ai_script.inc
index 05d70e351..763c3d1c4 100644
--- a/asm/macros/contest_ai_script.inc
+++ b/asm/macros/contest_ai_script.inc
@@ -5,36 +5,42 @@
.byte \score
.endm
-@ turn (AKA "Appeal No.")
-
- .macro get_turn
+ .macro get_appeal_num
.byte 0x01
.endm
- .macro if_turn_less_than param, addr
+ .macro if_appeal_num_less_than param, addr
.byte 0x02
.byte \param
.4byte \addr
.endm
- .macro if_turn_more_than param, addr
+ .macro if_appeal_num_more_than param, addr
.byte 0x03
.byte \param
.4byte \addr
.endm
- .macro if_turn_eq param, addr
+ .macro if_appeal_num_eq param, addr
.byte 0x04
.byte \param
.4byte \addr
.endm
- .macro if_turn_not_eq param, addr
+ .macro if_appeal_num_not_eq param, addr
.byte 0x05
.byte \param
.4byte \addr
.endm
+ .macro if_last_appeal addr:req
+ if_appeal_num_eq CONTEST_LAST_APPEAL, \addr
+ .endm
+
+ .macro if_not_last_appeal addr:req
+ if_appeal_num_not_eq CONTEST_LAST_APPEAL, \addr
+ .endm
+
@ audience excitement
.macro get_excitement
@@ -65,7 +71,7 @@
.4byte \addr
.endm
-@ the order that the user goes in the current turn
+@ the order that the user goes in the current appeal
.macro get_user_order
.byte 0x0B
diff --git a/constants/constants.inc b/constants/constants.inc
index a58bf92a2..e7561f429 100644
--- a/constants/constants.inc
+++ b/constants/constants.inc
@@ -1,4 +1,2 @@
.include "constants/gba_constants.inc"
.include "constants/global.inc"
- .include "constants/contest_constants.inc"
- .include "constants/contest_move_effects.inc"
diff --git a/constants/contest_constants.inc b/constants/contest_constants.inc
deleted file mode 100644
index e971764d6..000000000
--- a/constants/contest_constants.inc
+++ /dev/null
@@ -1,68 +0,0 @@
- .set CONTEST_COOL, 0x00
- .set CONTEST_BEAUTY, 0x01
- .set CONTEST_CUTE, 0x02
- .set CONTEST_SMART, 0x03
- .set CONTEST_TOUGH, 0x04
-
- .set COMBO_STARTER_RAIN_DANCE, 0x01
- .set COMBO_STARTER_RAGE, 0x02
- .set COMBO_STARTER_FOCUS_ENERGY, 0x03
- .set COMBO_STARTER_HYPNOSIS, 0x04
- .set COMBO_STARTER_ENDURE, 0x05
- .set COMBO_STARTER_HORN_ATTACK, 0x06
- .set COMBO_STARTER_SWORDS_DANCE, 0x07
- .set COMBO_STARTER_STOCKPILE, 0x08
- .set COMBO_STARTER_SUNNY_DAY, 0x09
- .set COMBO_STARTER_REST, 0x0A
- .set COMBO_STARTER_VICE_GRIP, 0x0B
- .set COMBO_STARTER_DEFENSE_CURL, 0x0C
- .set COMBO_STARTER_CHARGE, 0x0D
- .set COMBO_STARTER_ROCK_THROW, 0x0E
- .set COMBO_STARTER_YAWN, 0x0F
- .set COMBO_STARTER_SCARY_FACE, 0x10
- .set COMBO_STARTER_POWDER_SNOW, 0x11
- .set COMBO_STARTER_LOCK_ON, 0x12
- .set COMBO_STARTER_SOFT_BOILED, 0x13
- .set COMBO_STARTER_MEAN_LOOK, 0x14
- .set COMBO_STARTER_SCRATCH, 0x15
- .set COMBO_STARTER_GROWTH, 0x16
- .set COMBO_STARTER_HAIL, 0x17
- .set COMBO_STARTER_SANDSTORM, 0x18
- .set COMBO_STARTER_BELLY_DRUM, 0x19
- .set COMBO_STARTER_MIND_READER, 0x1A
- .set COMBO_STARTER_DRAGON_BREATH, 0x1B
- .set COMBO_STARTER_DRAGON_RAGE, 0x1C
- .set COMBO_STARTER_DRAGON_DANCE, 0x1D
- .set COMBO_STARTER_SURF, 0x1E
- .set COMBO_STARTER_DIVE, 0x1F
- .set COMBO_STARTER_STRING_SHOT, 0x20
- .set COMBO_STARTER_LEER, 0x21
- .set COMBO_STARTER_TAUNT, 0x22
- .set COMBO_STARTER_CHARM, 0x23
- .set COMBO_STARTER_HARDEN, 0x24
- .set COMBO_STARTER_SING, 0x25
- .set COMBO_STARTER_EARTHQUAKE, 0x26
- .set COMBO_STARTER_DOUBLE_TEAM, 0x27
- .set COMBO_STARTER_CURSE, 0x28
- .set COMBO_STARTER_SWEET_SCENT, 0x29
- .set COMBO_STARTER_SLUDGE, 0x2A
- .set COMBO_STARTER_SLUDGE_BOMB, 0x2B
- .set COMBO_STARTER_THUNDER_PUNCH, 0x2C
- .set COMBO_STARTER_FIRE_PUNCH, 0x2D
- .set COMBO_STARTER_ICE_PUNCH, 0x2E
- .set COMBO_STARTER_PECK, 0x2F
- .set COMBO_STARTER_METAL_SOUND, 0x30
- .set COMBO_STARTER_MUD_SPORT, 0x31
- .set COMBO_STARTER_WATER_SPORT, 0x32
- .set COMBO_STARTER_BONE_CLUB, 0x33
- .set COMBO_STARTER_BONEMERANG, 0x34
- .set COMBO_STARTER_BONE_RUSH, 0x35
- .set COMBO_STARTER_SAND_ATTACK, 0x36
- .set COMBO_STARTER_MUD_SLAP, 0x37
- .set COMBO_STARTER_FAKE_OUT, 0x38
- .set COMBO_STARTER_PSYCHIC, 0x39
- .set COMBO_STARTER_KINESIS, 0x3A
- .set COMBO_STARTER_CONFUSION, 0x3B
- .set COMBO_STARTER_POUND, 0x3C
- .set COMBO_STARTER_SMOG, 0x3D
- .set COMBO_STARTER_CALM_MIND, 0x3E
diff --git a/constants/contest_move_effects.inc b/constants/contest_move_effects.inc
deleted file mode 100644
index b19e05004..000000000
--- a/constants/contest_move_effects.inc
+++ /dev/null
@@ -1,49 +0,0 @@
- enum_start
- enum CONTEST_EFFECT_HIGHLY_APPEALING @ 0
- enum CONTEST_EFFECT_USER_MORE_EASILY_STARTLED @ 1
- enum CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES @ 2
- enum CONTEST_EFFECT_REPETITION_NOT_BORING @ 3
- enum CONTEST_EFFECT_AVOID_STARTLE_ONCE @ 4
- enum CONTEST_EFFECT_AVOID_STARTLE @ 5
- enum CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY @ 6
- enum CONTEST_EFFECT_USER_LESS_EASILY_STARTLED @ 7
- enum CONTEST_EFFECT_STARTLE_FRONT_MON @ 8
- enum CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS @ 9
- enum CONTEST_EFFECT_STARTLE_PREV_MON @ 10
- enum CONTEST_EFFECT_STARTLE_PREV_MONS @ 11
- enum CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON @ 12
- enum CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS @ 13
- enum CONTEST_EFFECT_STARTLE_PREV_MON_2 @ 14
- enum CONTEST_EFFECT_STARTLE_PREV_MONS_2 @ 15
- enum CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION @ 16
- enum CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION @ 17
- enum CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN @ 18
- enum CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL @ 19
- enum CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL @ 20
- enum CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL @ 21
- enum CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL @ 22
- enum CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL @ 23
- enum CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL @ 24
- enum CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS @ 25
- enum CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS @ 26
- enum CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS @ 27
- enum CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION @ 28
- enum CONTEST_EFFECT_BETTER_IF_FIRST @ 29
- enum CONTEST_EFFECT_BETTER_IF_LAST @ 30
- enum CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES @ 31
- enum CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE @ 32
- enum CONTEST_EFFECT_BETTER_WHEN_LATER @ 33
- enum CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING @ 34
- enum CONTEST_EFFECT_BETTER_IF_SAME_TYPE @ 35
- enum CONTEST_EFFECT_BETTER_IF_DIFF_TYPE @ 36
- enum CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL @ 37
- enum CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS @ 38
- enum CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION @ 39
- enum CONTEST_EFFECT_NEXT_APPEAL_EARLIER @ 40
- enum CONTEST_EFFECT_NEXT_APPEAL_LATER @ 41
- enum CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER @ 42
- enum CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER @ 43
- enum CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST @ 44
- enum CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS @ 45
- enum CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED @ 46
- enum CONTEST_EFFECT_DONT_EXCITE_AUDIENCE @ 47
diff --git a/data/contest_ai_scripts.s b/data/contest_ai_scripts.s
index 252c39a3a..4938a8c93 100644
--- a/data/contest_ai_scripts.s
+++ b/data/contest_ai_scripts.s
@@ -1,9 +1,13 @@
+#include "constants/global.h"
+#include "constants/contest.h"
.include "asm/macros.inc"
.include "asm/macros/contest_ai_script.inc"
.include "constants/constants.inc"
.section script_data, "aw", %progbits
+@ TODO
+
enum_start
enum MON_1
enum MON_2
@@ -12,13 +16,13 @@
.align 2
gContestAIChecks:: @ 82DE350
- .4byte AI_CheckForBadMove // 0x00000001
- .4byte AI_CheckForCombo // 0x00000002
- .4byte AI_CheckBoring // 0x00000004
- .4byte AI_CheckExcitement // 0x00000008
- .4byte AI_CheckOrder // 0x00000010
- .4byte AI_CheckForGoodMove // 0x00000020
- .4byte AI_Erratic // 0x00000040
+ .4byte AI_CheckForBadMove @ CONTEST_AI_CHECK_BAD_MOVE
+ .4byte AI_CheckForCombo @ CONTEST_AI_CHECK_COMBO
+ .4byte AI_CheckBoring @ CONTEST_AI_CHECK_BORING
+ .4byte AI_CheckExcitement @ CONTEST_AI_CHECK_EXCITEMENT
+ .4byte AI_CheckOrder @ CONTEST_AI_CHECK_ORDER
+ .4byte AI_CheckForGoodMove @ CONTEST_AI_CHECK_GOOD_MOVE
+ .4byte AI_Erratic @ CONTEST_AI_ERRATIC
.4byte AI_Nothing // 0x00000080
.4byte AI_Nothing // 0x00000100
.4byte AI_Nothing // 0x00000200
@@ -47,9 +51,9 @@ gContestAIChecks:: @ 82DE350
@ Unreferenced AI routine to encourage moves that improve condition on the first
-@ turn. Additionally, it checks the appeal order of the user and the effect
+@ appeal. Additionally, it checks the turn order of the user and the effect
@ type, but the code is buggy and doesnt affect the score.
- if_turn_not_eq 0, ContestUnreferenced_80
+ if_appeal_num_not_eq 0, ContestUnreferenced_80
if_effect_not_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, ContestUnreferenced_80
score +10
ContestUnreferenced_80:
@@ -64,11 +68,11 @@ ContestUnreferenced_end:
end
@ Unreferenced AI routine that doesnt make much sense.
- if_turn_eq 0, ContestUnreferenced_0F_1
- if_turn_eq 1, ContestUnreferenced_0F_2
- if_turn_eq 2, ContestUnreferenced_0F_3
- if_turn_eq 3, ContestUnreferenced_0F_4
- if_turn_eq 4, ContestUnreferenced_0F_5
+ if_appeal_num_eq 0, ContestUnreferenced_0F_1
+ if_appeal_num_eq 1, ContestUnreferenced_0F_2
+ if_appeal_num_eq 2, ContestUnreferenced_0F_3
+ if_appeal_num_eq 3, ContestUnreferenced_0F_4
+ if_last_appeal ContestUnreferenced_0F_5
end
ContestUnreferenced_0F_1:
if_user_order_not_eq MON_1, ContestUnreferenced_2B_1
@@ -166,7 +170,7 @@ AI_contest7D_1_081DC2AB:
end
AI_contest0F_2_081DC2AB:
if_user_order_not_eq MON_1, AI_contest7D_3_081DC2AB
- if_turn_eq 4, AI_score_081DC2AB
+ if_last_appeal AI_score_081DC2AB
AI_contest7D_2_081DC2AB:
if_random 51, AI_end_081DC2AB
score +10
@@ -222,22 +226,22 @@ AI_score_081DC348:
score +25
end
AI_contest04_1_081DC348:
- if_turn_eq 4, AI_contest7D_081DC348
+ if_last_appeal AI_contest7D_081DC348
if_random 150, AI_end_081DC348
score +10
end
AI_contest04_2_081DC348:
- if_turn_eq 4, AI_contest7D_081DC348
+ if_last_appeal AI_contest7D_081DC348
if_random 125, AI_end_081DC348
score +10
end
AI_contest04_3_081DC348:
- if_turn_eq 4, AI_contest7D_081DC348
+ if_last_appeal AI_contest7D_081DC348
if_random 50, AI_end_081DC348
score +10
end
AI_contest04_4_081DC348:
- if_turn_eq 4, AI_contest7D_081DC348
+ if_last_appeal AI_contest7D_081DC348
score +10
end
AI_contest7D_081DC348:
@@ -302,7 +306,7 @@ ContestEffect3:
if_random 50, ContestEffectEnd
score +15
end
- if_turn_eq 4, ContestEffect3_7D
+ if_last_appeal ContestEffect3_7D
if_random 220, ContestEffect3_score
score +10
end
@@ -324,8 +328,8 @@ ContestEffect38_score1:
score -10
end
ContestEffect38_contest04:
- if_turn_eq 4, ContestEffect38_score2
- if_turn_eq 0, ContestEffect38_random
+ if_last_appeal ContestEffect38_score2
+ if_appeal_num_eq 0, ContestEffect38_random
if_move_used_count_eq 1, ContestEffectEnd
if_random 125, ContestEffectEnd
score +10
@@ -342,7 +346,7 @@ ContestEffect47:
if_move_used_count_eq 1, ContestEffectEnd
if_user_order_eq MON_1, ContestEffect47_random
if_user_order_eq MON_2, ContestEffect47_random
- if_turn_not_eq 4, ContestEffectEnd
+ if_not_last_appeal ContestEffectEnd
if_user_has_exciting_move ContestEffectEnd
if_excitement_less_than 1, ContestEffectEnd
score +10
@@ -409,7 +413,7 @@ ContestEffect46:
if_user_order_more_than MON_1, ContestEffect46_score4
end
ContestEffect46_05:
- if_turn_not_eq 0, ContestEffect46_score1
+ if_appeal_num_not_eq 0, ContestEffect46_score1
if_excitement_eq 4, ContestEffect46_score2
if_excitement_eq 3, ContestEffect46_score3
end
@@ -566,7 +570,7 @@ ContestEffect_FollowingMonsNervous_CheckMon2:
end
ContestEffect18:
- if_turn_eq 4, ContestEffect18_score1
+ if_last_appeal ContestEffect18_score1
jump ContestEffect18_0E
end
ContestEffect18_score1:
@@ -600,9 +604,9 @@ ContestEffectEnd:
@ Randomly encourage moves in Cute, Smart, and Tough contests.
AI_Erratic:
- if_contest_type_eq CONTEST_CUTE, Erratic_CuteSmartTough
- if_contest_type_eq CONTEST_SMART, Erratic_CuteSmartTough
- if_contest_type_eq CONTEST_TOUGH, Erratic_CuteSmartTough
+ if_contest_type_eq CONTEST_CATEGORY_CUTE, Erratic_CuteSmartTough
+ if_contest_type_eq CONTEST_CATEGORY_SMART, Erratic_CuteSmartTough
+ if_contest_type_eq CONTEST_CATEGORY_TOUGH, Erratic_CuteSmartTough
end
Erratic_CuteSmartTough:
if_random 125, Erratic_NoScoreIncrease
@@ -763,11 +767,11 @@ ContestEffect2_4_score3:
end
ContestEffect2_2:
- if_turn_eq 0, ContestEffect2_2_score1
- if_turn_eq 1, ContestEffect2_2_score2
- if_turn_eq 2, ContestEffect2_2_score3
- if_turn_eq 3, ContestEffect2_2_score4
- if_turn_eq 4, ContestEffect2_2_score5
+ if_appeal_num_eq 0, ContestEffect2_2_score1
+ if_appeal_num_eq 1, ContestEffect2_2_score2
+ if_appeal_num_eq 2, ContestEffect2_2_score3
+ if_appeal_num_eq 3, ContestEffect2_2_score4
+ if_last_appeal ContestEffect2_2_score5
end
ContestEffect2_2_score1:
if_random 20, ContestEffectEnd2
diff --git a/include/constants/contest.h b/include/constants/contest.h
index 5eabb5f46..a10354169 100644
--- a/include/constants/contest.h
+++ b/include/constants/contest.h
@@ -2,7 +2,8 @@
#define GUARD_CONSTANTS_CONTEST_H
#define APPLAUSE_METER_SIZE 5
-#define CONTEST_TURN_COUNT 5
+#define CONTEST_NUM_APPEALS 5
+#define CONTEST_LAST_APPEAL (CONTEST_NUM_APPEALS - 1)
#define LINK_CONTEST_FLAG_IS_LINK (1 << 0)
#define LINK_CONTEST_FLAG_IS_WIRELESS (1 << 1)
@@ -44,4 +45,151 @@
#define CANT_ENTER_CONTEST_EGG 3
#define CANT_ENTER_CONTEST_FAINTED 4
+#define CONTEST_AI_CHECK_BAD_MOVE (1 << 0)
+#define CONTEST_AI_CHECK_COMBO (1 << 1)
+#define CONTEST_AI_CHECK_BORING (1 << 2)
+#define CONTEST_AI_CHECK_EXCITEMENT (1 << 3)
+#define CONTEST_AI_CHECK_ORDER (1 << 4)
+#define CONTEST_AI_CHECK_GOOD_MOVE (1 << 5)
+#define CONTEST_AI_ERRATIC (1 << 6)
+#define CONTEST_AI_DUMMY_1 (1 << 7)
+#define CONTEST_AI_DUMMY_2 (1 << 8)
+#define CONTEST_AI_DUMMY_3 (1 << 9)
+#define CONTEST_AI_DUMMY_4 (1 << 10)
+#define CONTEST_AI_DUMMY_5 (1 << 11)
+#define CONTEST_AI_DUMMY_6 (1 << 12)
+#define CONTEST_AI_DUMMY_7 (1 << 13)
+#define CONTEST_AI_DUMMY_8 (1 << 14)
+#define CONTEST_AI_DUMMY_9 (1 << 15)
+#define CONTEST_AI_DUMMY_10 (1 << 16)
+#define CONTEST_AI_DUMMY_11 (1 << 17)
+#define CONTEST_AI_DUMMY_12 (1 << 18)
+#define CONTEST_AI_DUMMY_13 (1 << 19)
+#define CONTEST_AI_DUMMY_14 (1 << 20)
+#define CONTEST_AI_DUMMY_15 (1 << 21)
+#define CONTEST_AI_DUMMY_16 (1 << 22)
+#define CONTEST_AI_DUMMY_17 (1 << 23)
+#define CONTEST_AI_DUMMY_18 (1 << 24)
+#define CONTEST_AI_DUMMY_19 (1 << 25)
+#define CONTEST_AI_DUMMY_20 (1 << 26)
+#define CONTEST_AI_DUMMY_21 (1 << 27)
+#define CONTEST_AI_DUMMY_22 (1 << 28)
+#define CONTEST_AI_DUMMY_23 (1 << 29)
+#define CONTEST_AI_DUMMY_24 (1 << 30)
+#define CONTEST_AI_DUMMY_25 (1 << 31)
+#define CONTEST_AI_ALL (CONTEST_AI_CHECK_BAD_MOVE | CONTEST_AI_CHECK_COMBO | CONTEST_AI_CHECK_BORING | CONTEST_AI_CHECK_EXCITEMENT | CONTEST_AI_CHECK_ORDER | CONTEST_AI_CHECK_GOOD_MOVE | CONTEST_AI_ERRATIC)
+#define CONTEST_AI_DUMMIES_1 (CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5)
+
+#define CONTEST_EFFECT_HIGHLY_APPEALING 0
+#define CONTEST_EFFECT_USER_MORE_EASILY_STARTLED 1
+#define CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES 2
+#define CONTEST_EFFECT_REPETITION_NOT_BORING 3
+#define CONTEST_EFFECT_AVOID_STARTLE_ONCE 4
+#define CONTEST_EFFECT_AVOID_STARTLE 5
+#define CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY 6
+#define CONTEST_EFFECT_USER_LESS_EASILY_STARTLED 7
+#define CONTEST_EFFECT_STARTLE_FRONT_MON 8
+#define CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS 9
+#define CONTEST_EFFECT_STARTLE_PREV_MON 10
+#define CONTEST_EFFECT_STARTLE_PREV_MONS 11
+#define CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON 12
+#define CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS 13
+#define CONTEST_EFFECT_STARTLE_PREV_MON_2 14
+#define CONTEST_EFFECT_STARTLE_PREV_MONS_2 15
+#define CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION 16
+#define CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION 17
+#define CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN 18
+#define CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL 19
+#define CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL 20
+#define CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL 21
+#define CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL 22
+#define CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL 23
+#define CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL 24
+#define CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS 25
+#define CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS 26
+#define CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS 27
+#define CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION 28
+#define CONTEST_EFFECT_BETTER_IF_FIRST 29
+#define CONTEST_EFFECT_BETTER_IF_LAST 30
+#define CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES 31
+#define CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE 32
+#define CONTEST_EFFECT_BETTER_WHEN_LATER 33
+#define CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING 34
+#define CONTEST_EFFECT_BETTER_IF_SAME_TYPE 35
+#define CONTEST_EFFECT_BETTER_IF_DIFF_TYPE 36
+#define CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL 37
+#define CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS 38
+#define CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION 39
+#define CONTEST_EFFECT_NEXT_APPEAL_EARLIER 40
+#define CONTEST_EFFECT_NEXT_APPEAL_LATER 41
+#define CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER 42
+#define CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER 43
+#define CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST 44
+#define CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS 45
+#define CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED 46
+#define CONTEST_EFFECT_DONT_EXCITE_AUDIENCE 47
+
+#define COMBO_STARTER_RAIN_DANCE 1
+#define COMBO_STARTER_RAGE 2
+#define COMBO_STARTER_FOCUS_ENERGY 3
+#define COMBO_STARTER_HYPNOSIS 4
+#define COMBO_STARTER_ENDURE 5
+#define COMBO_STARTER_HORN_ATTACK 6
+#define COMBO_STARTER_SWORDS_DANCE 7
+#define COMBO_STARTER_STOCKPILE 8
+#define COMBO_STARTER_SUNNY_DAY 9
+#define COMBO_STARTER_REST 10
+#define COMBO_STARTER_VICE_GRIP 11
+#define COMBO_STARTER_DEFENSE_CURL 12
+#define COMBO_STARTER_CHARGE 13
+#define COMBO_STARTER_ROCK_THROW 14
+#define COMBO_STARTER_YAWN 15
+#define COMBO_STARTER_SCARY_FACE 16
+#define COMBO_STARTER_POWDER_SNOW 17
+#define COMBO_STARTER_LOCK_ON 18
+#define COMBO_STARTER_SOFT_BOILED 19
+#define COMBO_STARTER_MEAN_LOOK 20
+#define COMBO_STARTER_SCRATCH 21
+#define COMBO_STARTER_GROWTH 22
+#define COMBO_STARTER_HAIL 23
+#define COMBO_STARTER_SANDSTORM 24
+#define COMBO_STARTER_BELLY_DRUM 25
+#define COMBO_STARTER_MIND_READER 26
+#define COMBO_STARTER_DRAGON_BREATH 27
+#define COMBO_STARTER_DRAGON_RAGE 28
+#define COMBO_STARTER_DRAGON_DANCE 29
+#define COMBO_STARTER_SURF 30
+#define COMBO_STARTER_DIVE 31
+#define COMBO_STARTER_STRING_SHOT 32
+#define COMBO_STARTER_LEER 33
+#define COMBO_STARTER_TAUNT 34
+#define COMBO_STARTER_CHARM 35
+#define COMBO_STARTER_HARDEN 36
+#define COMBO_STARTER_SING 37
+#define COMBO_STARTER_EARTHQUAKE 38
+#define COMBO_STARTER_DOUBLE_TEAM 39
+#define COMBO_STARTER_CURSE 40
+#define COMBO_STARTER_SWEET_SCENT 41
+#define COMBO_STARTER_SLUDGE 42
+#define COMBO_STARTER_SLUDGE_BOMB 43
+#define COMBO_STARTER_THUNDER_PUNCH 44
+#define COMBO_STARTER_FIRE_PUNCH 45
+#define COMBO_STARTER_ICE_PUNCH 46
+#define COMBO_STARTER_PECK 47
+#define COMBO_STARTER_METAL_SOUND 48
+#define COMBO_STARTER_MUD_SPORT 49
+#define COMBO_STARTER_WATER_SPORT 50
+#define COMBO_STARTER_BONE_CLUB 51
+#define COMBO_STARTER_BONEMERANG 52
+#define COMBO_STARTER_BONE_RUSH 53
+#define COMBO_STARTER_SAND_ATTACK 54
+#define COMBO_STARTER_MUD_SLAP 55
+#define COMBO_STARTER_FAKE_OUT 56
+#define COMBO_STARTER_PSYCHIC 57
+#define COMBO_STARTER_KINESIS 58
+#define COMBO_STARTER_CONFUSION 59
+#define COMBO_STARTER_POUND 60
+#define COMBO_STARTER_SMOG 61
+#define COMBO_STARTER_CALM_MIND 62
+
#endif // GUARD_CONSTANTS_CONTEST_H
diff --git a/include/contest.h b/include/contest.h
index b6818f996..1cad71705 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -17,124 +17,6 @@ enum
enum
{
- CONTEST_EFFECT_HIGHLY_APPEALING,
- CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
- CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
- CONTEST_EFFECT_REPETITION_NOT_BORING,
- CONTEST_EFFECT_AVOID_STARTLE_ONCE,
- CONTEST_EFFECT_AVOID_STARTLE,
- CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY,
- CONTEST_EFFECT_USER_LESS_EASILY_STARTLED,
- CONTEST_EFFECT_STARTLE_FRONT_MON,
- CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS,
- CONTEST_EFFECT_STARTLE_PREV_MON,
- CONTEST_EFFECT_STARTLE_PREV_MONS,
- CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
- CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
- CONTEST_EFFECT_STARTLE_PREV_MON_2,
- CONTEST_EFFECT_STARTLE_PREV_MONS_2,
- CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
- CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
- CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
- CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
- CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL,
- CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL,
- CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL,
- CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL,
- CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL,
- CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS,
- CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
- CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
- CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION,
- CONTEST_EFFECT_BETTER_IF_FIRST,
- CONTEST_EFFECT_BETTER_IF_LAST,
- CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
- CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
- CONTEST_EFFECT_BETTER_WHEN_LATER,
- CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING,
- CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
- CONTEST_EFFECT_BETTER_IF_DIFF_TYPE,
- CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
- CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
- CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION,
- CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
- CONTEST_EFFECT_NEXT_APPEAL_LATER,
- CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER,
- CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
- CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST,
- CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
- CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
- CONTEST_EFFECT_DONT_EXCITE_AUDIENCE
-};
-
-enum
-{
- COMBO_STARTER_RAIN_DANCE = 1,
- COMBO_STARTER_RAGE,
- COMBO_STARTER_FOCUS_ENERGY,
- COMBO_STARTER_HYPNOSIS,
- COMBO_STARTER_ENDURE,
- COMBO_STARTER_HORN_ATTACK,
- COMBO_STARTER_SWORDS_DANCE,
- COMBO_STARTER_STOCKPILE,
- COMBO_STARTER_SUNNY_DAY,
- COMBO_STARTER_REST,
- COMBO_STARTER_VICE_GRIP,
- COMBO_STARTER_DEFENSE_CURL,
- COMBO_STARTER_CHARGE,
- COMBO_STARTER_ROCK_THROW,
- COMBO_STARTER_YAWN,
- COMBO_STARTER_SCARY_FACE,
- COMBO_STARTER_POWDER_SNOW,
- COMBO_STARTER_LOCK_ON,
- COMBO_STARTER_SOFT_BOILED,
- COMBO_STARTER_MEAN_LOOK,
- COMBO_STARTER_SCRATCH,
- COMBO_STARTER_GROWTH,
- COMBO_STARTER_HAIL,
- COMBO_STARTER_SANDSTORM,
- COMBO_STARTER_BELLY_DRUM,
- COMBO_STARTER_MIND_READER,
- COMBO_STARTER_DRAGON_BREATH,
- COMBO_STARTER_DRAGON_RAGE,
- COMBO_STARTER_DRAGON_DANCE,
- COMBO_STARTER_SURF,
- COMBO_STARTER_DIVE,
- COMBO_STARTER_STRING_SHOT,
- COMBO_STARTER_LEER,
- COMBO_STARTER_TAUNT,
- COMBO_STARTER_CHARM,
- COMBO_STARTER_HARDEN,
- COMBO_STARTER_SING,
- COMBO_STARTER_EARTHQUAKE,
- COMBO_STARTER_DOUBLE_TEAM,
- COMBO_STARTER_CURSE,
- COMBO_STARTER_SWEET_SCENT,
- COMBO_STARTER_SLUDGE,
- COMBO_STARTER_SLUDGE_BOMB,
- COMBO_STARTER_THUNDER_PUNCH,
- COMBO_STARTER_FIRE_PUNCH,
- COMBO_STARTER_ICE_PUNCH,
- COMBO_STARTER_PECK,
- COMBO_STARTER_METAL_SOUND,
- COMBO_STARTER_MUD_SPORT,
- COMBO_STARTER_WATER_SPORT,
- COMBO_STARTER_BONE_CLUB,
- COMBO_STARTER_BONEMERANG,
- COMBO_STARTER_BONE_RUSH,
- COMBO_STARTER_SAND_ATTACK,
- COMBO_STARTER_MUD_SLAP,
- COMBO_STARTER_FAKE_OUT,
- COMBO_STARTER_PSYCHIC,
- COMBO_STARTER_KINESIS,
- COMBO_STARTER_CONFUSION,
- COMBO_STARTER_POUND,
- COMBO_STARTER_SMOG,
- COMBO_STARTER_CALM_MIND
-};
-
-enum
-{
CONTEST_STRING_MORE_CONSCIOUS,
CONTEST_STRING_NO_APPEAL,
CONTEST_STRING_SETTLE_DOWN,
@@ -255,7 +137,7 @@ struct ContestStruct_field_18
struct Contest
{
u8 playerMoveChoice;
- u8 turnNumber;
+ u8 appealNumber;
u8 unused2[CONTESTANT_COUNT];
bool16 unk1920A_0:1; // Task active flags?
bool16 unk1920A_1:1;
@@ -273,14 +155,14 @@ struct Contest
u8 unk19211;
u8 unk19212;
u8 filler19213;
- u8 unk19214;
- u8 unk19215;
+ u8 turnNumber;
+ u8 currentContestant;
u8 unk19216; // sprite ID
s8 applauseLevel;
u8 prevTurnOrder[CONTESTANT_COUNT];
u32 unk1921C; // saved RNG value?
- u16 moveHistory[CONTEST_TURN_COUNT][CONTESTANT_COUNT];
- u8 excitementHistory[CONTEST_TURN_COUNT][CONTESTANT_COUNT];
+ u16 moveHistory[CONTEST_NUM_APPEALS][CONTESTANT_COUNT];
+ u8 excitementHistory[CONTEST_NUM_APPEALS][CONTESTANT_COUNT];
u8 applauseMeterSpriteId;
u8 contestSetupState;
u8 unk1925E;
@@ -431,9 +313,9 @@ struct ContestResources
#define eUnknownHeap1A004 (*(struct Shared1A004 *)(gHeap + 0x1a004))
extern struct ContestPokemon gContestMons[CONTESTANT_COUNT];
-extern s16 gContestMonConditions[CONTESTANT_COUNT];
+extern s16 gContestMonRound1Points[CONTESTANT_COUNT];
extern s16 gContestMonTotalPoints[CONTESTANT_COUNT];
-extern s16 gUnknown_02039F10[CONTESTANT_COUNT];
+extern s16 gContestMonAppealPointTotals[CONTESTANT_COUNT];
extern s16 gContestMonRound2Points[CONTESTANT_COUNT];
extern u8 gContestFinalStandings[CONTESTANT_COUNT];
extern u8 gContestMonPartyIndex;
@@ -457,8 +339,8 @@ void ResetLinkContestBoolean(void);
void LoadContestBgAfterMoveAnim(void);
void CB2_StartContest(void);
void CreateContestMonFromParty(u8 partyIndex);
-void sub_80DAB8C(u8 contestType, u8 rank);
-void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame);
+void SetContestants(u8 contestType, u8 rank);
+void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame);
u8 GetContestEntryEligibility(struct Pokemon *pkmn);
void sub_80DB09C(u8 contestCategory);
bool8 IsSpeciesNotUnown(u16 species);
diff --git a/include/contest_link.h b/include/contest_link.h
index e52ebc426..52b7ee330 100644
--- a/include/contest_link.h
+++ b/include/contest_link.h
@@ -3,7 +3,7 @@
void sub_80FCC88(u8);
void sub_80FCC88(u8);
-void sub_80FCACC(u8);
+void Task_LinkContest_CommunicateFinalStandings(u8);
void sub_80FC580(u8);
void sub_80FC6BC(u8);
void sub_80FC804(u8);
@@ -11,8 +11,8 @@ void sub_80FCE48(u8);
void sub_80FC894(u8);
void Task_LinkContest_CommunicateMonIdxs(u8 taskId);
void sub_81D9DE4(u8 taskId);
-void sub_80FCF40(u8);
-void sub_80FCFD0(u8);
+void Task_LinkContest_CommunicateRound1Points(u8);
+void Task_LinkContest_CommunicateTurnOrder(u8);
void sub_80F8714(u8);
bool32 sub_80FC670(s16 *);
bool32 LinkContest_SendBlock(void *, u16);
diff --git a/src/contest.c b/src/contest.c
index 76650da18..b90f89498 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -64,13 +64,13 @@ static void Task_ShowMoveSelectScreen(u8 taskId);
static void Task_HandleMoveSelectInput(u8 taskId);
static void DrawMoveSelectArrow(s8);
static void EraseMoveSelectArrow(s8);
-static void Task_SelectMove(u8 taskId);
+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 sub_80D8A88(u8 taskId);
-static void sub_80D8B38(u8 taskId);
+static void Task_DoAppeals(u8 taskId);
static void sub_80DA110(u8);
static void sub_80DA134(struct Sprite *);
static void sub_80DA164(struct Sprite *);
@@ -86,14 +86,14 @@ 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 void Task_EndAppeals(u8);
+static void Task_WaitForOutOfTimeMsg(u8);
+static void Task_CoverAppealPanelForEnd(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 sub_80DA8A4(void);
static void PrintContestantTrainerName(u8);
static void PrintContestantTrainerNameWithColor(u8 a0, u8 a1);
@@ -101,7 +101,7 @@ 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 CreateContestantSprite(u16, u32, u32, u32);
static void PrintContestMoveDescription(u16);
static u16 SanitizeSpecies(u16);
static void ContestClearGeneralTextWindow(void);
@@ -153,7 +153,7 @@ static void ShowAndUpdateApplauseMeter(s8 unused);
static void sub_80DDE0C(void);
static void UpdateApplauseMeter(void);
static void RankContestants(void);
-static void sub_80DBA18(void);
+static void SetAttentionLevels(void);
static void UpdateHeartSliders(void);
static bool8 SlidersDoneUpdating(void);
static void ContestBG_FillBoxWithTile(u8, u16, u8, u8, u8, u8, u8);
@@ -217,6 +217,9 @@ enum
#define MOVE_WINDOWS_START CONTEST_WINDOW_MOVE0
+#define TAG_CONTEST_SYMBOLS_PAL 0xABE0
+
+#define TAG_JUDGE_SYMBOLS_GFX 0xABE0
#define TAG_FACES_GFX 0xABE1
#define TAG_APPLAUSE_METER 0xABE2
@@ -236,10 +239,10 @@ enum {
// 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;
@@ -331,7 +334,7 @@ static const union AffineAnimCmd* const sAffineAnims_SliderHeart[] =
static const struct SpriteTemplate sSpriteTemplate_SliderHeart =
{
.tileTag = TAG_SLIDER_HEART,
- .paletteTag = 0xABE0,
+ .paletteTag = TAG_CONTEST_SYMBOLS_PAL,
.oam = &sOam_SliderHeart,
.anims = gDummySpriteAnimTable,
.images = NULL,
@@ -454,14 +457,15 @@ static const struct SubspriteTable sSubspriteTable_NextTurn[] =
}
};
-const struct CompressedSpriteSheet gUnknown_08587B88 =
+// Unused
+static const struct CompressedSpriteSheet sSpriteSheet_Faces =
{
.data = gContestFaces_Gfx,
.size = 0x180,
.tag = TAG_FACES_GFX
};
-const struct OamData gOamData_8587B90 =
+static const struct OamData sOam_Faces =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -475,11 +479,12 @@ const struct OamData gOamData_8587B90 =
.paletteNum = 0,
};
-const struct SpriteTemplate gSpriteTemplate_8587B98 =
+// Unused
+static const struct SpriteTemplate sSpriteTemplate_Faces =
{
.tileTag = TAG_FACES_GFX,
- .paletteTag = 0xABE0,
- .oam = &gOamData_8587B90,
+ .paletteTag = TAG_CONTEST_SYMBOLS_PAL,
+ .oam = &sOam_Faces,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -556,23 +561,23 @@ const struct CompressedSpriteSheet gUnknown_08587C00 =
.tag = 0x4E21
};
-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 =
{
.data = gContest3Pal,
- .tag = 0xABE0
+ .tag = TAG_CONTEST_SYMBOLS_PAL
};
const struct SpriteTemplate gSpriteTemplate_8587C18 =
{
- .tileTag = 0xABE0,
- .paletteTag = 0xABE0,
+ .tileTag = TAG_JUDGE_SYMBOLS_GFX,
+ .paletteTag = TAG_CONTEST_SYMBOLS_PAL,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
@@ -1340,7 +1345,7 @@ static void Task_DisplayAppealNumberText(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
@@ -1374,7 +1379,7 @@ static void Task_TryShowMoveSelectScreen(u8 taskId)
else
{
// Skip move selection (selected move will be MOVE_NONE)
- gTasks[taskId].func = Task_SelectMove;
+ gTasks[taskId].func = Task_SelectedMove;
}
}
}
@@ -1431,7 +1436,7 @@ static void Task_HandleMoveSelectInput(u8 taskId)
if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- gTasks[taskId].func = Task_SelectMove;
+ gTasks[taskId].func = Task_SelectedMove;
}
else
{
@@ -1441,7 +1446,7 @@ static void Task_HandleMoveSelectInput(u8 taskId)
// Cancel move selection
PlaySE(SE_SELECT);
SetBottomSliderHeartsInvisibility(FALSE);
- 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
@@ -1493,7 +1498,7 @@ static void EraseMoveSelectArrow(s8 moveIndex)
ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 32 + moveIndex * 2, 2, 1, 17, 1);
}
-static void Task_SelectMove(u8 taskId)
+static void Task_SelectedMove(u8 taskId)
{
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
@@ -1568,7 +1573,7 @@ static void sub_80D8A88(u8 taskId)
{
if (++gTasks[taskId].data[0] > 19)
{
- eContest.unk19214 = 0;
+ eContest.turnNumber = 0;
eContest.unk1921C = gRngValue;
if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) && sub_80DA8A4())
{
@@ -1580,46 +1585,48 @@ static void sub_80D8A88(u8 taskId)
}
}
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80D8B38;
+ gTasks[taskId].func = Task_DoAppeals;
}
}
-static void sub_80D8B38(u8 taskId)
+#define tState data[0]
+
+static void Task_DoAppeals(u8 taskId)
{
u8 spriteId;
s32 i;
- u8 r6 = eContest.unk19215;
+ u8 r6 = eContest.currentContestant;
s8 r3;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
ContestDebugDoPrint();
- for (i = 0; eContest.unk19214 != gContestResources->field_8->turnOrder[i]; i++)
+ for (i = 0; eContest.turnNumber != gContestResources->field_8->turnOrder[i]; i++)
;
- eContest.unk19215 = i;
- r6 = eContest.unk19215;
+ eContest.currentContestant = i;
+ r6 = eContest.currentContestant;
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
u8 taskId2;
eContest.unk1920B_2 = 1;
if (sub_80DA8A4())
- sub_80DD080(eContest.unk19215);
+ sub_80DD080(eContest.currentContestant);
taskId2 = CreateTask(sub_80FCC88, 0);
SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
ContestPrintLinkStandby();
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tState = 1;
}
else
{
- sub_80DD080(eContest.unk19215);
- gTasks[taskId].data[0] = 2;
+ sub_80DD080(eContest.currentContestant);
+ gTasks[taskId].tState = 2;
}
return;
case 1:
if (!eContest.unk1920B_2)
- gTasks[taskId].data[0] = 2;
+ gTasks[taskId].tState = 2;
return;
case 2:
sub_80DF080(r6);
@@ -1627,44 +1634,44 @@ static void sub_80D8B38(u8 taskId)
if (eContestantStatus[r6].numTurnsSkipped != 0
|| eContestantStatus[r6].noMoreTurns)
{
- gTasks[taskId].data[0] = 31;
+ gTasks[taskId].tState = 31;
}
else
{
ContestClearGeneralTextWindow();
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 3;
+ gTasks[taskId].tState = 3;
}
return;
case 3:
- for (i = 0; i < 4; i++)
+ 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);
+ sub_80DE9DC(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;
gBattlerSpriteIds[gBattlerAttacker] = spriteId;
- sub_80DCBE8(sub_80DC9EC(eContest.unk19215), FALSE);
- gTasks[taskId].data[0] = 4;
+ sub_80DCBE8(sub_80DC9EC(eContest.currentContestant), FALSE);
+ gTasks[taskId].tState = 4;
return;
case 4:
spriteId = gTasks[taskId].data[2];
if (gSprites[spriteId].callback == SpriteCallbackDummy)
{
if (!gContestResources->field_14[r6].unk2_1)
- gTasks[taskId].data[0] = 5;
+ gTasks[taskId].tState = 5;
}
return;
case 5:
if (eContestantStatus[r6].nervous)
{
- gTasks[taskId].data[0] = 33;
+ gTasks[taskId].tState = 33;
}
else
{
@@ -1676,25 +1683,25 @@ static void sub_80D8B38(u8 taskId)
StringCopy(gStringVar2, sInvalidContestMoveNames[eContestantStatus[r6].moveCategory]);
StringExpandPlaceholders(gStringVar4, gText_MonAppealedWithMove);
Contest_StartTextPrinter(gStringVar4, 1);
- gTasks[taskId].data[0] = 6;
+ gTasks[taskId].tState = 6;
}
return;
case 6:
if (!Contest_RunTextPrinters())
{
eContest.unk1925E = 0;
- gTasks[taskId].data[0] = 7;
+ gTasks[taskId].tState = 7;
}
return;
case 7:
{
- u16 move = SanitizeMove(eContestantStatus[eContest.unk19215].currMove);
+ u16 move = SanitizeMove(eContestantStatus[eContest.currentContestant].currMove);
- sub_80DE864(eContest.unk19215);
- sub_80DE9DC(eContest.unk19215);
+ sub_80DE864(eContest.currentContestant);
+ sub_80DE9DC(eContest.currentContestant);
SelectContestMoveBankTarget(move);
DoMoveAnim(move);
- gTasks[taskId].data[0] = 8;
+ gTasks[taskId].tState = 8;
}
return;
case 8:
@@ -1705,14 +1712,14 @@ static void sub_80D8B38(u8 taskId)
if (eContest.unk1925E != 0)
{
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 9;
+ gTasks[taskId].tState = 9;
}
else
{
if (!eContestantStatus[r6].hasJudgesAttention)
sub_80DC674(r6);
sub_80DE12C();
- gTasks[taskId].data[0] = 23;
+ gTasks[taskId].tState = 23;
}
}
return;
@@ -1720,7 +1727,7 @@ static void sub_80D8B38(u8 taskId)
if (gTasks[taskId].data[10]++ > 30)
{
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 7;
+ gTasks[taskId].tState = 7;
}
return;
case 23:
@@ -1729,7 +1736,7 @@ static void sub_80D8B38(u8 taskId)
{
sub_80DD45C(r6, eContestantStatus[r6].effectStringId);
eContestantStatus[r6].effectStringId = CONTEST_STRING_NONE;
- gTasks[taskId].data[0] = 24;
+ gTasks[taskId].tState = 24;
}
else
{
@@ -1744,22 +1751,22 @@ static void sub_80D8B38(u8 taskId)
{
sub_80DD45C(r6, eContestantStatus[r6].effectStringId2);
eContestantStatus[r6].effectStringId2 = CONTEST_STRING_NONE;
- gTasks[taskId].data[0] = 24;
+ gTasks[taskId].tState = 24;
}
else
{
- gTasks[taskId].data[0] = 48;
+ gTasks[taskId].tState = 48;
}
}
else
{
- gTasks[taskId].data[0] = 48;
+ gTasks[taskId].tState = 48;
}
}
return;
case 24:
if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 23;
+ gTasks[taskId].tState = 23;
return;
case 48:
if (eContestantStatus[r6].turnOrderModAction == 1)
@@ -1776,62 +1783,62 @@ static void sub_80D8B38(u8 taskId)
}
else
{
- gTasks[taskId].data[0] = 47;
+ gTasks[taskId].tState = 47;
return;
}
- gTasks[taskId].data[0] = 49;
+ gTasks[taskId].tState = 49;
return;
case 49:
if (!eContest.unk1920A_4)
- gTasks[taskId].data[0] = 47;
+ gTasks[taskId].tState = 47;
return;
case 47:
sub_80DE008(TRUE);
- gTasks[taskId].data[0] = 12;
+ gTasks[taskId].tState = 12;
return;
case 12:
sub_80DC028(0, eContestantStatus[r6].appeal2, r6);
- gTasks[taskId].data[0] = 13;
+ gTasks[taskId].tState = 13;
return;
case 13:
- if (!gContestResources->field_14[eContest.unk19215].unk2_2)
- gTasks[taskId].data[0] = 35;
+ if (!gContestResources->field_14[eContest.currentContestant].unk2_2)
+ gTasks[taskId].tState = 35;
return;
case 35:
if (eContestantStatus[r6].conditionMod == 1)
sub_80DD720(8);
- gTasks[taskId].data[0] = 36;
+ gTasks[taskId].tState = 36;
return;
case 36:
if (!eContest.unk1920A_4)
- gTasks[taskId].data[0] = 37;
+ gTasks[taskId].tState = 37;
return;
case 37:
if (sub_80DB5B8(r6, 1))
{
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 38;
+ gTasks[taskId].tState = 38;
}
else
{
- gTasks[taskId].data[0] = 50;
+ gTasks[taskId].tState = 50;
}
return;
case 38:
if (++gTasks[taskId].data[10] > 20)
{
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 50;
+ gTasks[taskId].tState = 50;
}
return;
case 50:
if (sub_80DB798(r6))
PlaySE(SE_C_PASI);
- gTasks[taskId].data[0] = 25;
+ gTasks[taskId].tState = 25;
return;
case 25:
gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0] = 26;
+ gTasks[taskId].tState = 26;
return;
case 26:
{
@@ -1858,32 +1865,32 @@ static void sub_80D8B38(u8 taskId)
gTasks[taskId].data[1] = gContestantTurnOrder[r2];
sub_80DD45C(r2, eContestantStatus[r2].effectStringId);
eContestantStatus[r2].effectStringId = CONTEST_STRING_NONE;
- gTasks[taskId].data[0] = 27;
+ gTasks[taskId].tState = 27;
}
else
{
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 51;
+ gTasks[taskId].tState = 51;
sub_80DB884();
}
}
return;
case 27:
if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 28;
+ gTasks[taskId].tState = 28;
return;
case 28:
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;
+ gTasks[taskId].tState = 29;
return;
case 29:
for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++)
;
if (!gContestResources->field_14[i].unk2_2)
- gTasks[taskId].data[0] = 39;
+ gTasks[taskId].tState = 39;
return;
case 39:
for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++)
@@ -1891,18 +1898,18 @@ static void sub_80D8B38(u8 taskId)
if (sub_80DB5B8(i, 1))
{
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 40;
+ gTasks[taskId].tState = 40;
}
else
{
- gTasks[taskId].data[0] = 30;
+ gTasks[taskId].tState = 30;
}
return;
case 40:
if (++gTasks[taskId].data[10] > 20)
{
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 30;
+ gTasks[taskId].tState = 30;
}
return;
case 30:
@@ -1921,7 +1928,7 @@ static void sub_80D8B38(u8 taskId)
eContestantStatus[i].judgesAttentionWasRemoved = 0;
}
gTasks[taskId].data[1]++;
- gTasks[taskId].data[0] = 26;
+ gTasks[taskId].tState = 26;
return;
case 51:
if (gTasks[taskId].data[10]++ > 9)
@@ -1935,16 +1942,16 @@ static void sub_80D8B38(u8 taskId)
StringExpandPlaceholders(gStringVar4, gText_MonCantAppealNextTurn);
Contest_StartTextPrinter(gStringVar4, 1);
}
- gTasks[taskId].data[0] = 52;
+ gTasks[taskId].tState = 52;
}
return;
case 52:
if (!Contest_RunTextPrinters())
{
if (!eContestantStatus[r6].unk15_6)
- gTasks[taskId].data[0] = 17;
+ gTasks[taskId].tState = 17;
else
- gTasks[taskId].data[0] = 14;
+ gTasks[taskId].tState = 14;
}
return;
case 14:
@@ -1960,7 +1967,7 @@ static void sub_80D8B38(u8 taskId)
Contest_StartTextPrinter(gText_AppealComboWentOverExcellently, TRUE);
sub_80DD720(3);
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 45;
+ gTasks[taskId].tState = 45;
}
else
{
@@ -1970,14 +1977,14 @@ static void sub_80D8B38(u8 taskId)
Contest_StartTextPrinter(gStringVar4, 1);
sub_80DD720(2);
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 45;
+ gTasks[taskId].tState = 45;
}
return;
case 45:
if (!eContest.unk1920A_4)
{
- sub_80DC9B4(eContest.unk19215);
- gTasks[taskId].data[0] = 15;
+ sub_80DC9B4(eContest.currentContestant);
+ gTasks[taskId].tState = 15;
}
return;
case 15:
@@ -1993,7 +2000,7 @@ static void sub_80D8B38(u8 taskId)
r6);
eContestantStatus[r6].appeal2 += eContestantStatus[r6].unk17;
}
- gTasks[taskId].data[0] = 16;
+ gTasks[taskId].tState = 16;
}
}
return;
@@ -2001,7 +2008,7 @@ static void sub_80D8B38(u8 taskId)
if (!gContestResources->field_14[r6].unk2_2)
{
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 17;
+ gTasks[taskId].tState = 17;
}
return;
case 17:
@@ -2013,23 +2020,23 @@ static void sub_80D8B38(u8 taskId)
Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].data[10] = 0;
sub_80DD720(0);
- gTasks[taskId].data[0] = 46;
+ gTasks[taskId].tState = 46;
}
else
{
- gTasks[taskId].data[0] = 41;
+ gTasks[taskId].tState = 41;
}
return;
case 46:
if (!eContest.unk1920A_4)
- gTasks[taskId].data[0] = 19;
+ gTasks[taskId].tState = 19;
return;
case 19:
if (!Contest_RunTextPrinters())
{
sub_80DC028(eContestantStatus[r6].appeal2, -eContestantStatus[r6].unk18, r6);
eContestantStatus[r6].appeal2 -= eContestantStatus[r6].unk18;
- gTasks[taskId].data[0] = 18;
+ gTasks[taskId].tState = 18;
}
return;
case 18:
@@ -2038,13 +2045,13 @@ static void sub_80D8B38(u8 taskId)
{
gTasks[taskId].data[10] = 0;
ContestClearGeneralTextWindow();
- gTasks[taskId].data[0] = 41;
+ gTasks[taskId].tState = 41;
}
return;
case 41:
if (gContestResources->field_10->excitementFrozen && r6 != gContestResources->field_10->excitementFreezer)
{
- gTasks[taskId].data[0] = 57;
+ gTasks[taskId].tState = 57;
}
else
{
@@ -2070,7 +2077,7 @@ static void sub_80D8B38(u8 taskId)
eContest.applauseLevel = 0;
if (r3 == 0)
{
- gTasks[taskId].data[0] = 55;
+ gTasks[taskId].tState = 55;
}
else
{
@@ -2084,9 +2091,9 @@ static void sub_80D8B38(u8 taskId)
gTasks[taskId].data[10] = 0;
gTasks[taskId].data[11] = 0;
if (r3 < 0)
- gTasks[taskId].data[0] = 53;
+ gTasks[taskId].tState = 53;
else
- gTasks[taskId].data[0] = 54;
+ gTasks[taskId].tState = 54;
}
}
return;
@@ -2121,7 +2128,7 @@ static void sub_80D8B38(u8 taskId)
{
gTasks[taskId].data[10] = 0;
gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[0] = 43;
+ gTasks[taskId].tState = 43;
}
break;
}
@@ -2172,7 +2179,7 @@ static void sub_80D8B38(u8 taskId)
{
gTasks[taskId].data[10] = 0;
gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[0] = 43;
+ gTasks[taskId].tState = 43;
}
break;
}
@@ -2181,7 +2188,7 @@ static void sub_80D8B38(u8 taskId)
if (!gContestResources->field_14[r6].unk2_2)
{
ContestClearGeneralTextWindow();
- gTasks[taskId].data[0] = 55;
+ gTasks[taskId].tState = 55;
}
return;
case 57:
@@ -2191,7 +2198,7 @@ static void sub_80D8B38(u8 taskId)
StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]);
StringExpandPlaceholders(gStringVar4, gText_CrowdContinuesToWatchMon);
Contest_StartTextPrinter(gStringVar4, TRUE);
- gTasks[taskId].data[0] = 58;
+ gTasks[taskId].tState = 58;
return;
case 58:
if (!Contest_RunTextPrinters())
@@ -2199,14 +2206,14 @@ static void sub_80D8B38(u8 taskId)
ContestClearGeneralTextWindow();
StringExpandPlaceholders(gStringVar4, gText_MonsMoveIsIgnored);
Contest_StartTextPrinter(gStringVar4, TRUE);
- gTasks[taskId].data[0] = 59;
+ gTasks[taskId].tState = 59;
}
return;
case 59:
if (!Contest_RunTextPrinters())
{
ContestClearGeneralTextWindow();
- gTasks[taskId].data[0] = 55;
+ gTasks[taskId].tState = 55;
}
return;
case 33:
@@ -2217,15 +2224,15 @@ static void sub_80D8B38(u8 taskId)
StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]);
StringExpandPlaceholders(gStringVar4, gText_MonWasTooNervousToMove);
Contest_StartTextPrinter(gStringVar4, TRUE);
- gTasks[taskId].data[0] = 34;
+ gTasks[taskId].tState = 34;
return;
case 34:
if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 55;
+ gTasks[taskId].tState = 55;
return;
case 55:
TryMoveApplauseMeterOffscreen();
- gTasks[taskId].data[0] = 56;
+ gTasks[taskId].tState = 56;
return;
case 56:
if (!eContest.applauseMeterIsMoving)
@@ -2235,13 +2242,13 @@ static void sub_80D8B38(u8 taskId)
eContest.applauseLevel = 0;
UpdateApplauseMeter();
}
- gTasks[taskId].data[0] = 10;
+ gTasks[taskId].tState = 10;
}
return;
case 10:
spriteId = gTasks[taskId].data[2];
gSprites[spriteId].callback = sub_80DA164;
- gTasks[taskId].data[0] = 11;
+ gTasks[taskId].tState = 11;
return;
case 11:
spriteId = gTasks[taskId].data[2];
@@ -2249,42 +2256,42 @@ static void sub_80D8B38(u8 taskId)
{
FreeSpriteOamMatrix(&gSprites[spriteId]);
DestroySprite(&gSprites[spriteId]);
- gTasks[taskId].data[0] = 20;
+ gTasks[taskId].tState = 20;
}
return;
case 20:
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 21;
+ gTasks[taskId].tState = 21;
return;
case 31:
ContestClearGeneralTextWindow();
StringCopy(gStringVar1, gContestMons[r6].nickname);
StringExpandPlaceholders(gStringVar4, gText_MonWasWatchingOthers);
Contest_StartTextPrinter(gStringVar4, TRUE);
- gTasks[taskId].data[0] = 32;
+ gTasks[taskId].tState = 32;
return;
case 32:
if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 21;
+ gTasks[taskId].tState = 21;
return;
case 21:
if (++gTasks[taskId].data[10] > 29)
{
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 22;
+ gTasks[taskId].tState = 22;
}
return;
case 22:
- if (++eContest.unk19214 == 4)
+ 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;
}
else
{
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
}
return;
}
@@ -2335,7 +2342,7 @@ static void sub_80DA198(u8 taskId)
if (sub_80DA8A4())
{
RankContestants();
- sub_80DBA18();
+ SetAttentionLevels();
}
taskId2 = CreateTask(sub_80FCC88, 0);
SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
@@ -2345,7 +2352,7 @@ static void sub_80DA198(u8 taskId)
else
{
RankContestants();
- sub_80DBA18();
+ SetAttentionLevels();
gTasks[taskId].data[0] = 2;
}
break;
@@ -2485,10 +2492,10 @@ 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
{
@@ -2503,14 +2510,14 @@ static void sub_80DA5B4(u8 taskId)
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))
@@ -2525,10 +2532,10 @@ static void sub_80DA5E8(u8 taskId)
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())
{
@@ -2537,62 +2544,62 @@ static void sub_80DA6B4(u8 taskId)
gBattle_BG1_Y = 160;
PlaySE12WithPanning(SE_C_MAKU_D, 0);
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80DA700;
+ gTasks[taskId].func = Task_CoverAppealPanelForEnd;
}
}
-static void sub_80DA700(u8 taskId)
+static void Task_CoverAppealPanelForEnd(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();
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();
@@ -2600,7 +2607,7 @@ static void sub_80DA830(u8 taskId)
}
}
-static void sub_80DA874(void)
+static void FieldCB_ContestReturnToField(void)
{
ScriptContext2_Disable();
EnableBothScriptContexts();
@@ -2696,33 +2703,33 @@ void CreateContestMonFromParty(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)
@@ -2740,7 +2747,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;
@@ -2754,15 +2761,16 @@ void sub_80DAB8C(u8 contestType, u8 rank)
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)
@@ -2786,6 +2794,8 @@ 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;
@@ -2935,7 +2945,7 @@ void sub_80DB09C(u8 contestCategory)
s32 i;
for (i = 0; i < CONTESTANT_COUNT; i++)
- gContestMonConditions[i] = sub_80DAFE0(i, contestCategory);
+ gContestMonRound1Points[i] = sub_80DAFE0(i, contestCategory);
}
static u8 sub_80DB0C4(void)
@@ -2954,7 +2964,7 @@ static u8 sub_80DB120(void)
{
u8 spriteId;
- LoadCompressedSpriteSheet(&gUnknown_08587C08);
+ LoadCompressedSpriteSheet(&sSpriteSheet_JudgeSymbols);
LoadCompressedSpritePalette(&gUnknown_08587C10);
spriteId = CreateSprite(&gSpriteTemplate_8587C18, 96, 10, 29);
gSprites[spriteId].invisible = TRUE;
@@ -2962,7 +2972,7 @@ static u8 sub_80DB120(void)
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);
@@ -3300,7 +3310,7 @@ static void RankContestants(void)
ApplyNextTurnOrder();
}
-static void sub_80DBA18(void)
+static void SetAttentionLevels(void)
{
s32 i;
@@ -3373,16 +3383,16 @@ static void sub_80DBAA0(void)
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;
}
-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;
@@ -3391,7 +3401,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)
@@ -3405,7 +3415,7 @@ static void CalculateFinalScores(void)
static s16 GetContestantRound2Points(u8 contestant)
{
- return gUnknown_02039F10[contestant] * 2;
+ return gContestMonAppealPointTotals[contestant] * 2;
}
static void DetermineFinalStandings(void)
@@ -3433,7 +3443,7 @@ static void DetermineFinalStandings(void)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
sp8[i].unk0 = gContestMonTotalPoints[i];
- sp8[i].unk4 = gContestMonConditions[i];
+ sp8[i].unk4 = gContestMonRound1Points[i];
sp8[i].unk8 = randomOrdering[i];
sp8[i].unkC = i;
}
@@ -4147,8 +4157,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;
@@ -5463,7 +5473,7 @@ static void sub_80DF080(u8 contestant)
{
gContestResources->field_1c[contestant].unkC |= 0x80;
gContestResources->field_1c[contestant].unkE_1 = 1;
- gContestResources->field_1c[contestant].unk0[eContest.turnNumber] = eContestantStatus[contestant].currMove;
+ gContestResources->field_1c[contestant].unk0[eContest.appealNumber] = eContestantStatus[contestant].currMove;
}
if (eContestantStatus[contestant].repeatedMove)
@@ -5511,7 +5521,7 @@ static void sub_80DF250(void)
for (j = 0; j < CONTESTANT_COUNT; j++)
{
- if (gContestMonConditions[i] < gContestMonConditions[j])
+ if (gContestMonRound1Points[i] < gContestMonRound1Points[j])
break;
}
if (j == 4 && gContestFinalStandings[i] != 0)
@@ -5521,7 +5531,7 @@ static void sub_80DF250(void)
r8 = FALSE;
for (j = 0; j < CONTESTANT_COUNT; j++)
{
- if (gContestMonConditions[i] > gContestMonConditions[j])
+ if (gContestMonRound1Points[i] > gContestMonRound1Points[j])
r12 = TRUE;
if (gContestMonRound2Points[i] > gContestMonRound2Points[j])
r8 = TRUE;
@@ -5612,7 +5622,7 @@ static void sub_80DF4F8(void)
r10 = 0;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (gContestMonConditions[r7] < gContestMonConditions[i])
+ if (gContestMonRound1Points[r7] < gContestMonRound1Points[i])
r9++;
if (gContestMonRound2Points[r7] < gContestMonRound2Points[i])
r10++;
diff --git a/src/contest_ai.c b/src/contest_ai.c
index e2afb2890..7585cac69 100644
--- a/src/contest_ai.c
+++ b/src/contest_ai.c
@@ -10,11 +10,11 @@ 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);
@@ -151,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
@@ -324,7 +324,7 @@ u8 ContestAI_GetActionToUse(void)
{
// 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); // % 4 doesn't match
+ u8 moveIdx = Random() & (MAX_MON_MOVES - 1); // % MAX_MON_MOVES doesn't match
u8 score = eContestAI.moveScores[moveIdx];
int i;
for (i = 0; i < MAX_MON_MOVES; i++)
@@ -404,15 +404,15 @@ static void ContestAICmd_score(void)
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);
@@ -420,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);
@@ -430,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);
@@ -440,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);
@@ -636,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;
}
@@ -1357,7 +1357,7 @@ static void ContestAICmd_unk_5E(void)
{
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- eContestAI.scriptResult = gContestMonConditions[contestant] - gContestMonConditions[eContestAI.contestantId];
+ eContestAI.scriptResult = gContestMonRound1Points[contestant] - gContestMonRound1Points[eContestAI.contestantId];
gAIScriptPtr += 2;
}
diff --git a/src/contest_effect.c b/src/contest_effect.c
index 1d3c81776..809aecbed 100644
--- a/src/contest_effect.c
+++ b/src/contest_effect.c
@@ -750,7 +750,7 @@ static void ContestEffect_NextAppealEarlier(void)
s8 j;
u8 turnOrder[CONTESTANT_COUNT];
- if (eContest.turnNumber != 4)
+ if (eContest.appealNumber != CONTEST_LAST_APPEAL)
{
for (i = 0; i < CONTESTANT_COUNT; i++)
turnOrder[i] = eContestantStatus[i].nextTurnOrder;
@@ -792,7 +792,7 @@ static void ContestEffect_NextAppealLater(void)
s8 j;
u8 turnOrder[CONTESTANT_COUNT];
- if (eContest.turnNumber != 4)
+ if (eContest.appealNumber != CONTEST_LAST_APPEAL)
{
for (i = 0; i < CONTESTANT_COUNT; i++)
turnOrder[i] = eContestantStatus[i].nextTurnOrder;
@@ -841,7 +841,7 @@ static void ContestEffect_ScrambleNextTurnOrder(void)
u8 turnOrder[CONTESTANT_COUNT];
u8 unselectedContestants[CONTESTANT_COUNT];
- if (eContest.turnNumber != 4)
+ if (eContest.appealNumber != CONTEST_LAST_APPEAL)
{
for (i = 0; i < CONTESTANT_COUNT; i++)
{
diff --git a/src/contest_link.c b/src/contest_link.c
index 9241102e7..172a2b2ba 100644
--- a/src/contest_link.c
+++ b/src/contest_link.c
@@ -297,7 +297,7 @@ void Task_LinkContest_CommunicateMoveSelections(u8 taskId)
}
}
-void sub_80FCACC(u8 taskId)
+void Task_LinkContest_CommunicateFinalStandings(u8 taskId)
{
switch (gTasks[taskId].tState)
{
@@ -328,14 +328,14 @@ void sub_80FCACC(u8 taskId)
case 3:
if (IsLinkTaskFinished())
{
- if (LinkContest_SendBlock(gUnknown_02039F10, sizeof(gUnknown_02039F10)) == 1)
+ if (LinkContest_SendBlock(gContestMonAppealPointTotals, sizeof(gContestMonAppealPointTotals)) == 1)
gTasks[taskId].tState++;
}
break;
case 4:
if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gUnknown_02039F10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F10));
+ memcpy(gContestMonAppealPointTotals, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonAppealPointTotals));
gTasks[taskId].tState++;
}
break;
@@ -381,14 +381,14 @@ void sub_80FCC88(u8 taskId)
case 0:
if (IsLinkTaskFinished())
{
- if (LinkContest_SendBlock(eContestantStatus, 4 * sizeof(struct ContestantStatus)) == 1)
+ if (LinkContest_SendBlock(eContestantStatus, CONTESTANT_COUNT * sizeof(struct ContestantStatus)) == 1)
gTasks[taskId].tState++;
}
break;
case 1:
if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(eContestantStatus, gBlockRecvBuffer[gUnknown_02039F2B], 4 * sizeof(struct ContestantStatus));
+ memcpy(eContestantStatus, gBlockRecvBuffer[gUnknown_02039F2B], CONTESTANT_COUNT * sizeof(struct ContestantStatus));
gTasks[taskId].tState++;
}
break;
@@ -497,7 +497,7 @@ void sub_80FCE48(u8 taskId)
}
}
-void sub_80FCF40(u8 taskId)
+void Task_LinkContest_CommunicateRound1Points(u8 taskId)
{
if (!sub_80FC670(&gTasks[taskId].data[12]))
return;
@@ -507,14 +507,14 @@ void sub_80FCF40(u8 taskId)
case 0:
if (IsLinkTaskFinished())
{
- if (LinkContest_SendBlock(gContestMonConditions, sizeof(gContestMonConditions)) == 1)
+ if (LinkContest_SendBlock(gContestMonRound1Points, sizeof(gContestMonRound1Points)) == 1)
gTasks[taskId].tState++;
}
break;
case 1:
if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- memcpy(gContestMonConditions, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonConditions));
+ memcpy(gContestMonRound1Points, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonRound1Points));
gTasks[taskId].tState++;
}
break;
@@ -526,7 +526,7 @@ void sub_80FCF40(u8 taskId)
}
}
-void sub_80FCFD0(u8 taskId)
+void Task_LinkContest_CommunicateTurnOrder(u8 taskId)
{
if (!sub_80FC670(&gTasks[taskId].data[12]))
return;
diff --git a/src/contest_link_util.c b/src/contest_link_util.c
index 221374112..02c94f0ba 100644
--- a/src/contest_link_util.c
+++ b/src/contest_link_util.c
@@ -70,29 +70,30 @@ static void sub_81D9F68(u8 taskId)
u8 i;
u8 rank;
int gameCleared;
- u8 data1[4];
- u8 data2[4];
+ u8 contestCategories[CONTESTANT_COUNT];
+ u8 data2[CONTESTANT_COUNT];
- memset(data1, 0, sizeof(data1));
+ memset(contestCategories, 0, sizeof(contestCategories));
memset(data2, 0, sizeof(data2));
for (i = 0; i < gNumLinkContestPlayers; i++)
- data1[i] = gTasks[taskId].data[i + 1];
+ contestCategories[i] = gTasks[taskId].data[i + 1];
+ // Ensure all players are doing the same category
i = 0;
if (i < gNumLinkContestPlayers)
{
while (++i < gNumLinkContestPlayers)
{
- if (data1[0] != data1[i])
+ if (contestCategories[0] != contestCategories[i])
break;
}
}
if (i == gNumLinkContestPlayers)
- gSpecialVar_0x8004 = 0;
+ gSpecialVar_0x8004 = FALSE;
else
- gSpecialVar_0x8004 = 1;
+ gSpecialVar_0x8004 = TRUE;
for (i = 0; i < gNumLinkContestPlayers; i++)
data2[i] = gTasks[taskId].data[i + 5];
@@ -119,7 +120,7 @@ static void sub_81D9F68(u8 taskId)
}
}
- sub_80DACBC(data1[0], rank, gameCleared);
+ SetLinkAIContestants(contestCategories[0], rank, gameCleared);
}
gUnknown_02039F2B = sub_80F86E0(data2);
@@ -132,13 +133,13 @@ static void sub_81D9F68(u8 taskId)
static void sub_81DA10C(u8 taskId)
{
sub_80DB09C(gSpecialVar_ContestCategory);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_81DA138);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, sub_81DA138);
}
static void sub_81DA138(u8 taskId)
{
SortContestants(FALSE);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, sub_80F8714);
}
static void sub_81DA160(u8 taskId)
diff --git a/src/contest_util.c b/src/contest_util.c
index 6ad67ee50..1fd3e0482 100644
--- a/src/contest_util.c
+++ b/src/contest_util.c
@@ -1718,7 +1718,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)
@@ -1966,7 +1966,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;
@@ -2206,7 +2206,7 @@ void TryEnterContestMon(void)
// Nonzero eligibility can still be non-eligibile, if mon is fainted or egg
if (eligibility)
{
- sub_80DAB8C(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
+ SetContestants(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
sub_80DB09C(gSpecialVar_ContestCategory);
}
@@ -2324,7 +2324,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++;
}
@@ -2333,7 +2333,7 @@ void GetContestMonConditionRanking(void)
void GetContestMonCondition(void)
{
- gSpecialVar_0x8004 = gContestMonConditions[gSpecialVar_0x8006];
+ gSpecialVar_0x8004 = gContestMonRound1Points[gSpecialVar_0x8006];
}
void GetContestWinnerId(void)
@@ -2472,13 +2472,13 @@ static void sub_80F85BC(u8 taskId)
gUnknown_02039F2B = sub_80F86E0(sp4);
sub_80DB09C(gSpecialVar_ContestCategory);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_80F86B8);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, sub_80F86B8);
}
static void sub_80F86B8(u8 taskId)
{
SortContestants(FALSE);
- SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714);
+ SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, sub_80F8714);
}
u8 sub_80F86E0(u8 *arg0)
diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h
index 53868fc84..e77223d95 100644
--- a/src/data/contest_opponents.h
+++ b/src/data/contest_opponents.h
@@ -183,7 +183,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("POOCHY"),
.trainerName = _("JIMMY"),
.trainerGfxId = OBJ_EVENT_GFX_BOY_1,
- .aiChecks = 0xC000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -211,7 +211,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MUSILLE"),
.trainerName = _("EDITH"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_1,
- .aiChecks = 0x82000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -239,7 +239,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DUSTER"),
.trainerName = _("EVAN"),
.trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY,
- .aiChecks = 0x21000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -603,7 +603,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BULBY"),
.trainerName = _("AGATHA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_2,
- .aiChecks = 0xC000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -631,7 +631,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("FUTTERBE"),
.trainerName = _("BEAU"),
.trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC,
- .aiChecks = 0x82000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -659,7 +659,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("PIDEOT"),
.trainerName = _("KAY"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_5,
- .aiChecks = 0x21000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -883,7 +883,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DUODO"),
.trainerName = _("BOBBY"),
.trainerGfxId = OBJ_EVENT_GFX_RUNNING_TRIATHLETE_M,
- .aiChecks = 0x82000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1275,7 +1275,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BROWLO"),
.trainerName = _("LUKE"),
.trainerGfxId = OBJ_EVENT_GFX_FAT_MAN,
- .aiChecks = 0xC000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1303,7 +1303,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("FETCHIN"),
.trainerName = _("RAUL"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_5,
- .aiChecks = 0x82000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -1331,7 +1331,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SEELEY"),
.trainerName = _("JADA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_2,
- .aiChecks = 0x21000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1555,7 +1555,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SHIFTY"),
.trainerName = _("CLAUDIA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_1,
- .aiChecks = 0x82000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1947,7 +1947,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("EGGSOR"),
.trainerName = _("GRACIE"),
.trainerGfxId = OBJ_EVENT_GFX_PICNICKER,
- .aiChecks = 0xC000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1975,7 +1975,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CUBIN"),
.trainerName = _("COLTIN"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_4,
- .aiChecks = 0x82000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2003,7 +2003,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("HITMON"),
.trainerName = _("ELLIE"),
.trainerGfxId = OBJ_EVENT_GFX_EXPERT_F,
- .aiChecks = 0x21000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2227,7 +2227,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LOUDERD"),
.trainerName = _("RALPH"),
.trainerGfxId = OBJ_EVENT_GFX_EXPERT_M,
- .aiChecks = 0x82000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2619,7 +2619,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GAREN"),
.trainerName = _("CAMILE"),
.trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC,
- .aiChecks = 0xC000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5 | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2647,7 +2647,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GONPOR"),
.trainerName = _("MARTIN"),
.trainerGfxId = OBJ_EVENT_GFX_SCIENTIST_1,
- .aiChecks = 0x82000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2675,7 +2675,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DRITE"),
.trainerName = _("SERGIO"),
.trainerGfxId = OBJ_EVENT_GFX_BOY_1,
- .aiChecks = 0x21000FFF,
+ .aiChecks = CONTEST_AI_ALL | CONTEST_AI_DUMMIES_1 | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c
index a6ab1693b..89029210b 100755
--- a/src/script_pokemon_util_80F87D8.c
+++ b/src/script_pokemon_util_80F87D8.c
@@ -158,7 +158,7 @@ void sub_80F8970(void)
u8 r7;
for (i = 0; i < CONTESTANT_COUNT; i++)
- conditions[i] = gContestMonConditions[i];
+ conditions[i] = gContestMonRound1Points[i];
for (i = 0; i < CONTESTANT_COUNT - 1; i++)
{
@@ -195,7 +195,7 @@ void sub_80F8970(void)
var2 = r8;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (condition == gContestMonConditions[i])
+ if (condition == gContestMonRound1Points[i])
{
if (var2 == 1)
break;