summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2020-08-21 15:16:37 -0400
committerGitHub <noreply@github.com>2020-08-21 15:16:37 -0400
commitd2c7a862c7535bc9f44254fa0230e09e8598324a (patch)
treee3543ae3061d358f077fca7a9e82ef2be3c3e85e
parentcd895e497d68bf9adbaa067dc411cc99a3bd1a4b (diff)
parentfbb70b372743fca1c9323e0011a498e672d4707b (diff)
Merge pull request #1147 from GriffinRichards/doc-contestai
Document contest AI
-rw-r--r--asm/macros/contest_ai_script.inc809
-rw-r--r--data/contest_ai_scripts.s1131
-rw-r--r--include/constants/contest.h41
-rw-r--r--include/contest.h10
-rw-r--r--src/contest.c12
-rw-r--r--src/contest_ai.c738
-rw-r--r--src/contest_effect.c5
-rw-r--r--src/data/contest_moves.h96
-rw-r--r--src/data/contest_opponents.h231
9 files changed, 1785 insertions, 1288 deletions
diff --git a/asm/macros/contest_ai_script.inc b/asm/macros/contest_ai_script.inc
index 763c3d1c4..9ab7184c3 100644
--- a/asm/macros/contest_ai_script.inc
+++ b/asm/macros/contest_ai_script.inc
@@ -1,6 +1,8 @@
+@ A large number of the Contest AI commands go unused, so their corresponding macros in this file are similarly unused
+
@ Add a positive/negative value to the score of the move being evaluated.
- .macro score score
+ .macro score score:req
.byte 0x00
.byte \score
.endm
@@ -9,36 +11,36 @@
.byte 0x01
.endm
- .macro if_appeal_num_less_than param, addr
+ .macro if_appeal_num_less_than num:req, destination:req
.byte 0x02
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_appeal_num_more_than param, addr
+ .macro if_appeal_num_more_than num:req, destination:req
.byte 0x03
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_appeal_num_eq param, addr
+ .macro if_appeal_num_eq num:req, destination:req
.byte 0x04
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_appeal_num_not_eq param, addr
+ .macro if_appeal_num_not_eq num:req, destination:req
.byte 0x05
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_last_appeal addr:req
- if_appeal_num_eq CONTEST_LAST_APPEAL, \addr
+ .macro if_last_appeal destination:req
+ if_appeal_num_eq CONTEST_LAST_APPEAL, \destination
.endm
- .macro if_not_last_appeal addr:req
- if_appeal_num_not_eq CONTEST_LAST_APPEAL, \addr
+ .macro if_not_last_appeal destination:req
+ if_appeal_num_not_eq CONTEST_LAST_APPEAL, \destination
.endm
@ audience excitement
@@ -47,28 +49,28 @@
.byte 0x06
.endm
- .macro if_excitement_less_than param, addr
+ .macro if_excitement_less_than num:req, destination:req
.byte 0x07
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_excitement_more_than param, addr
+ .macro if_excitement_more_than num:req, destination:req
.byte 0x08
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_excitement_eq param, addr
+ .macro if_excitement_eq num:req, destination:req
.byte 0x09
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_excitement_not_eq param, addr
+ .macro if_excitement_not_eq num:req, destination:req
.byte 0x0A
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
@ the order that the user goes in the current appeal
@@ -77,28 +79,28 @@
.byte 0x0B
.endm
- .macro if_user_order_less_than param addr
+ .macro if_user_order_less_than num:req, destination:req
.byte 0x0C
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_user_order_more_than param addr
+ .macro if_user_order_more_than num:req, destination:req
.byte 0x0D
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_user_order_eq param addr
+ .macro if_user_order_eq num:req, destination:req
.byte 0x0E
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_user_order_not_eq param addr
+ .macro if_user_order_not_eq num:req, destination:req
.byte 0x0F
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
@ user condition
@@ -107,40 +109,89 @@
.byte 0x10
.endm
- .macro if_user_condition_less_than param, addr
+ .macro if_user_condition_less_than num:req, destination:req
.byte 0x11
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_user_condition_more_than param, addr
+ .macro if_user_condition_more_than num:req, destination:req
.byte 0x12
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_user_condition_eq param, addr
+ .macro if_user_condition_eq num:req, destination:req
.byte 0x13
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_user_condition_not_eq param, addr
+ .macro if_user_condition_not_eq num:req, destination:req
.byte 0x14
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
+ .endm
+
+@ appeal points
+
+ .macro get_point_total
+ .byte 0x15
+ .endm
+
+ .macro if_points_less_than num:req, destination:req
+ .byte 0x16
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_points_more_than num:req, destination:req
+ .byte 0x17
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_points_eq num:req, destination:req
+ .byte 0x18
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_points_not_eq num:req, destination:req
+ .byte 0x19
+ .byte \num
+ .4byte \destination
+ .endm
+
+@ preliminary (pre-appeal) judging points
+
+ .macro get_preliminary_points
+ .byte 0x1A
+ .endm
+
+ .macro if_preliminary_points_less_than num:req, destination:req
+ .byte 0x1B
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_preliminary_points_more_than num:req, destination:req
+ .byte 0x1C
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_preliminary_points_eq num:req, destination:req
+ .byte 0x1D
+ .byte \num
+ .4byte \destination
.endm
-@ 15
-@ 16
-@ 17
-@ 18
-@ 19
-@ 1A
-@ 1B
-@ 1C
-@ 1D
-@ 1E
+ .macro if_preliminary_points_not_eq num:req, destination:req
+ .byte 0x1E
+ .byte \num
+ .4byte \destination
+ .endm
@ contest type
@@ -148,16 +199,16 @@
.byte 0x1F
.endm
- .macro if_contest_type_eq param, addr
+ .macro if_contest_type_eq type:req, destination:req
.byte 0x20
- .byte \param
- .4byte \addr
+ .byte \type
+ .4byte \destination
.endm
- .macro if_contest_type_not_eq param, addr
+ .macro if_contest_type_not_eq type:req, destination:req
.byte 0x21
- .byte \param
- .4byte \addr
+ .byte \type
+ .4byte \destination
.endm
@ move excitement (change in excitement due to move)
@@ -166,28 +217,28 @@
.byte 0x22
.endm
- .macro if_move_excitement_less_than param, addr
+ .macro if_move_excitement_less_than num:req, destination:req
.byte 0x23
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_move_excitement_more_than param, addr
+ .macro if_move_excitement_more_than num:req, destination:req
.byte 0x24
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_move_excitement_eq param, addr
+ .macro if_move_excitement_eq num:req, destination:req
.byte 0x25
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_move_excitement_not_eq param, addr
+ .macro if_move_excitement_not_eq num:req, destination:req
.byte 0x26
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
@ move effect
@@ -196,16 +247,16 @@
.byte 0x27
.endm
- .macro if_effect_eq param, addr
+ .macro if_effect_eq effect:req, destination:req
.byte 0x28
- .byte \param
- .4byte \addr
+ .byte \effect
+ .4byte \destination
.endm
- .macro if_effect_not_eq param, addr
+ .macro if_effect_not_eq effect:req, destination:req
.byte 0x29
- .byte \param
- .4byte \addr
+ .byte \effect
+ .4byte \destination
.endm
@ move effect type
@@ -214,16 +265,16 @@
.byte 0x2A
.endm
- .macro if_effect_type_eq param, addr
+ .macro if_effect_type_eq type:req, destination:req
.byte 0x2B
- .byte \param
- .4byte \addr
+ .byte \type
+ .4byte \destination
.endm
- .macro if_effect_type_not_eq param, addr
+ .macro if_effect_type_not_eq type:req, destination:req
.byte 0x2C
- .byte \param
- .4byte \addr
+ .byte \type
+ .4byte \destination
.endm
@ whether the current move is the most appealing in the user's moveset
@@ -232,23 +283,81 @@
.byte 0x2D
.endm
- .macro if_most_appealing_move addr
+ .macro if_most_appealing_move destination:req
.byte 0x2E
- .4byte \addr
- .endm
-
-@ 2F
-@ 30
-@ 31
-@ 32
-@ 33
-@ 34
-@ 35
-@ 36
-@ 37
-@ 38
-@ 39
-@ 3A
+ .4byte \destination
+ .endm
+
+@ whether the current move is the most jamming in the user's moveset
+
+ .macro check_most_jamming_move
+ .byte 0x2F
+ .endm
+
+ .macro if_most_jamming_move destination:req
+ .byte 0x30
+ .4bye \destination
+ .endm
+
+@ number of hearts the current move's appeal would provide
+
+ .macro get_num_move_hearts
+ .byte 0x31
+ .endm
+
+ .macro if_num_move_hearts_less_than num:req, destination:req
+ .byte 0x32
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_num_move_hearts_more_than num:req, destination:req
+ .byte 0x33
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_num_move_hearts_eq num:req, destination:req
+ .byte 0x34
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_num_move_hearts_not_eq num:req, destination:req
+ .byte 0x35
+ .byte \num
+ .4byte \destination
+ .endm
+
+@ number of hearts the current move's jam would remove
+
+ .macro get_num_move_jam_hearts
+ .byte 0x36
+ .endm
+
+ .macro if_num_move_jam_hearts_less_than num:req, destination:req
+ .byte 0x37
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_num_move_jam_hearts_more_than num:req, destination:req
+ .byte 0x38
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_num_move_jam_hearts_eq num:req, destination:req
+ .byte 0x39
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_num_move_jam_hearts_not_eq num:req, destination:req
+ .byte 0x3A
+ .byte \num
+ .4byte \destination
+ .endm
@ number of times current move has been used
@@ -256,28 +365,28 @@
.byte 0x3B
.endm
- .macro if_move_used_count_less_than param, addr
+ .macro if_move_used_count_less_than num:req, destination:req
.byte 0x3C
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_move_used_count_more_than param, addr
+ .macro if_move_used_count_more_than num:req, destination:req
.byte 0x3D
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_move_used_count_eq param, addr
+ .macro if_move_used_count_eq num:req, destination:req
.byte 0x3E
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_move_used_count_not_eq param, addr
+ .macro if_move_used_count_not_eq num:req, destination:req
.byte 0x3F
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
@ whether the current move is a combo starter (with another move in the moveset)
@@ -286,14 +395,14 @@
.byte 0x40
.endm
- .macro if_combo_starter addr
+ .macro if_combo_starter destination:req
.byte 0x41
- .4byte \addr
+ .4byte \destination
.endm
- .macro if_not_combo_starter addr
+ .macro if_not_combo_starter destination:req
.byte 0x42
- .4byte \addr
+ .4byte \destination
.endm
@ whether the current move is a combo finisher (with another move in the moveset)
@@ -302,14 +411,14 @@
.byte 0x43
.endm
- .macro if_combo_finisher addr
+ .macro if_combo_finisher destination:req
.byte 0x44
- .4byte \addr
+ .4byte \destination
.endm
- .macro if_not_combo_finisher addr
+ .macro if_not_combo_finisher destination:req
.byte 0x45
- .4byte \addr
+ .4byte \destination
.endm
@ whether the current move would finish a combo
@@ -318,170 +427,411 @@
.byte 0x46
.endm
- .macro if_would_finish_combo addr
+ .macro if_would_finish_combo destination:req
.byte 0x47
- .4byte \addr
+ .4byte \destination
.endm
- .macro if_would_not_finish_combo addr
+ .macro if_would_not_finish_combo destination:req
.byte 0x48
- .4byte \addr
+ .4byte \destination
.endm
@ condition of mon (indexed by order)
- .macro get_condition mon
+ .macro get_condition mon:req
.byte 0x49
.byte \mon
.endm
- .macro if_condition_less_than mon, value, addr
+ .macro if_condition_less_than mon:req, num:req destination:req
.byte 0x4A
.byte \mon
- .byte \value
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_condition_more_than mon, value, addr
+ .macro if_condition_more_than mon:req, num:req, destination:req
.byte 0x4B
.byte \mon
- .byte \value
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_condition_eq mon, value, addr
+ .macro if_condition_eq mon:req, num:req, destination:req
.byte 0x4C
.byte \mon
- .byte \value
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_condition_not_eq mon, value, addr
+ .macro if_condition_not_eq mon:req, num:req, destination:req
.byte 0x4D
.byte \mon
- .byte \value
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
@ whether the mon used a combo starter move
@ Even though this value is always 1 or 0 (i.e. TRUE/FALSE),
@ there are less-than and greater-than comparison operations for some reason.
- .macro get_used_combo_starter mon
+ .macro get_used_combo_starter mon:req
.byte 0x4E
.byte \mon
.endm
- .macro if_used_combo_starter_less_than mon, value, addr
+ .macro if_used_combo_starter_less_than mon:req, num:req, destination:req
.byte 0x4F
.byte \mon
- .byte \value
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_used_combo_starter_more_than mon, value, addr
+ .macro if_used_combo_starter_more_than mon:req, num:req, destination:req
.byte 0x50
.byte \mon
- .byte \value
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_used_combo_starter_eq mon, value, addr
+ .macro if_used_combo_starter_eq mon:req, num:req, destination:req
.byte 0x51
.byte \mon
- .byte \value
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
- .macro if_used_combo_starter_not_eq mon, value, addr
+ .macro if_used_combo_starter_not_eq mon:req, num:req, destination:req
.byte 0x52
.byte \mon
- .byte \value
- .4byte \addr
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_used_combo_starter mon:req, destination:req
+ if_used_combo_starter_eq \mon, TRUE, \destination
+ .endm
+
+ .macro if_not_used_combo_starter mon:req, destination:req
+ if_used_combo_starter_eq \mon, FALSE, \destination
.endm
@ whether the mon can make an appeal
- .macro check_can_participate mon
+ .macro check_can_participate mon:req
.byte 0x53
.byte \mon
.endm
- .macro if_can_participate mon, addr
+ .macro if_can_participate mon:req, destination:req
.byte 0x54
.byte \mon
- .4byte \addr
+ .4byte \destination
.endm
- .macro if_cannot_participate mon, addr
+ .macro if_cannot_participate mon:req, destination:req
.byte 0x55
.byte \mon
- .4byte \addr
+ .4byte \destination
+ .endm
+
+@ whether the mon just completed a combo
+
+ .macro get_completed_combo mon:req
+ .byte 0x56
+ .byte \mon
+ .4byte \destination
.endm
-@ 56
-@ 57
+ .macro if_completed_combo mon:req, destination:req
+ .byte 0x57
+ .byte \mon
+ .4byte \destination
+ .endm
- .macro contest_58 param addr
+ .macro if_not_completed_combo mon:req destination:req
.byte 0x58
- .byte \param
- .4byte \addr
- .endm
-
-@ 59
-@ 5A
-@ 5B
-@ 5C
-@ 5D
-@ 5E
-@ 5F
-@ 60
-@ 61
-@ 62
-@ 63
-@ 64
-@ 65
-@ 66
-@ 67
-@ 68
-@ 69
-@ 6A
-@ 6B
-@ 6C
-@ 6D
-@ 6E
-@ 6F
-@ 70
-@ 71
-@ 72
-@ 73
-@ 74
-@ 75
-@ 76
-@ 77
-@ 78
-@ 79
-@ 7A
-@ 7B
-@ 7C
-
- .macro if_random param addr
+ .byte \mon
+ .4byte \destination
+ .endm
+
+@ comparing appeal points to another mon
+
+ .macro get_points_diff mon:req
+ .byte 0x59
+ .byte \mon
+ .endm
+
+ .macro if_points_more_than_mon mon:req, destination:req
+ .byte 0x5A
+ .byte \mon
+ .4byte \destination
+ .endm
+
+ .macro if_points_less_than_mon mon:req, destination:req
+ .byte 0x5B
+ .byte \mon
+ .4byte \destination
+ .endm
+
+ .macro if_points_eq_mon mon:req, destination:req
+ .byte 0x5C
+ .byte \mon
+ .4byte \destination
+ .endm
+
+ .macro if_points_not_eq_mon mon:req, destination:req
+ .byte 0x5D
+ .byte \mon
+ .4byte \destination
+ .endm
+
+@ comparing preliminary judging points to another mon
+
+ .macro get_preliminary_points_diff mon:req
+ .byte 0x5E
+ .byte \mon
+ .endm
+
+ .macro if_preliminary_points_more_than_mon mon:req, destination:req
+ .byte 0x5F
+ .byte \mon
+ .4byte \destination
+ .endm
+
+ .macro if_preliminary_points_less_than_mon mon:req, destination:req
+ .byte 0x60
+ .byte \mon
+ .4byte \destination
+ .endm
+
+ .macro if_preliminary_points_eq_mon mon:req, destination:req
+ .byte 0x61
+ .byte \mon
+ .4byte \destination
+ .endm
+
+ .macro if_preliminary_points_not_eq_mon mon:req, destination:req
+ .byte 0x62
+ .byte \mon
+ .4byte \destination
+ .endm
+
+@ checking move history for move effect
+
+ .macro get_used_moves_effect mon:req, round:req
+ .byte 0x63
+ .byte \mon
+ .byte \round
+ .endm
+
+ .macro if_used_moves_effect_less_than mon:req, round:req, effect:req, destination:req
+ .byte 0x64
+ .byte \mon
+ .byte \round
+ .byte \effect
+ .4byte \destination
+ .endm
+
+ .macro if_used_moves_effect_more_than mon:req, round:req, effect:req, destination:req
+ .byte 0x65
+ .byte \mon
+ .byte \round
+ .byte \effect
+ .4byte \destination
+ .endm
+
+ .macro if_used_moves_effect_eq mon:req, round:req, effect:req, destination:req
+ .byte 0x66
+ .byte \mon
+ .byte \round
+ .byte \effect
+ .4byte \destination
+ .endm
+
+ .macro if_used_moves_effect_not_eq mon:req, round:req, effect:req, destination:req
+ .byte 0x67
+ .byte \mon
+ .byte \round
+ .byte \effect
+ .4byte \destination
+ .endm
+
+@ checking move history for excitement
+
+ .macro get_used_moves_excitement mon:req, round:req
+ .byte 0x68
+ .byte \mon
+ .byte \round
+ .endm
+
+ .macro if_used_moves_excitement_less_than mon:req, round:req, num:req, destination:req
+ .byte 0x69
+ .byte \mon
+ .byte \round
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_used_moves_excitement_more_than mon:req, round:req, num:req, destination:req
+ .byte 0x6A
+ .byte \mon
+ .byte \round
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_used_moves_excitement_eq mon:req, round:req, num:req, destination:req
+ .byte 0x6B
+ .byte \mon
+ .byte \round
+ .byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_used_moves_excitement_not_eq mon:req, round:req, num:req, destination:req
+ .byte 0x6C
+ .byte \mon
+ .byte \round
+ .byte \num
+ .4byte \destination
+ .endm
+
+@ checking move history for effect type
+
+ .macro get_used_moves_effect_type mon:req, round:req
+ .byte 0x6D
+ .byte \mon
+ .byte \round
+ .endm
+
+ .macro if_used_moves_effect_type_eq mon:req, round:req, type:req, destination:req
+ .byte 0x6E
+ .byte \mon
+ .byte \round
+ .byte \type
+ .4byte \destination
+ .endm
+
+ .macro if_used_moves_effect_type_not_eq mon:req, round:req, type:req, destination:req
+ .byte 0x6F
+ .byte \mon
+ .byte \round
+ .byte \type
+ .4byte \destination
+ .endm
+
+@ generic commands
+
+ .macro save_result varId:req
+ .byte 0x70
+ .byte \varId
+ .endm
+
+ .macro setvar varId:req, num:req
+ .byte 0x71
+ .byte \varId
+ .2byte \num
+ .endm
+
+ .macro add varId:req, num:req
+ .byte 0x72
+ .byte \varId
+ .2byte \num
+ .endm
+
+ .macro addvar varId1:req, varId2:req
+ .byte 0x73
+ .byte \varId1
+ .byte \varId2
+ .endm
+
+ @ Duplicate of above
+ .macro addvar_duplicate varId1:req, varId2:req
+ .byte 0x74
+ .byte \varId1
+ .byte \varId2
+ .endm
+
+ .macro if_less_than varId:req, num:req, destination:req
+ .byte 0x75
+ .byte \varId
+ .2byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_greater_than varId:req, num:req, destination:req
+ .byte 0x76
+ .byte \varId
+ .2byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_eq varId:req, num:req, destination:req
+ .byte 0x77
+ .byte \varId
+ .2byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_not_eq varId:req, num:req, destination:req
+ .byte 0x78
+ .byte \varId
+ .2byte \num
+ .4byte \destination
+ .endm
+
+ .macro if_less_than_var varId1:req, varId2:req, destination:req
+ .byte 0x79
+ .byte \varId1
+ .byte \varId2
+ .4byte \destination
+ .endm
+
+ .macro if_greater_than_var varId1:req, varId2:req, destination:req
+ .byte 0x7A
+ .byte \varId1
+ .byte \varId2
+ .4byte \destination
+ .endm
+
+ .macro if_eq_var varId1:req, varId2:req, destination:req
+ .byte 0x7B
+ .byte \varId1
+ .byte \varId2
+ .4byte \destination
+ .endm
+
+ .macro if_not_eq_var varId1:req, varId2:req, destination:req
+ .byte 0x7C
+ .byte \varId1
+ .byte \varId2
+ .4byte \destination
+ .endm
+
+ @ NOTE: The random commands are broken (see ContestAICmd_if_random_less_than)
+ .macro if_random_less_than num:req, destination:req
.byte 0x7D
- .byte \param
- .4byte \addr
+ .byte \num
+ .4byte \destination
.endm
-@ 7E
+ .macro if_random_greater_than num:req, destination:req
+ .byte 0x7E
+ .byte \num
+ .4byte \destination
+ .endm
- .macro jump addr
+ .macro goto destination:req
.byte 0x7F
- .4byte \addr
+ .4byte \destination
.endm
- .macro call addr
+ .macro call destination:req
.byte 0x80
- .4byte \addr
+ .4byte \destination
.endm
.macro end
@@ -492,21 +842,30 @@
.byte 0x82
.endm
- .macro if_user_has_exciting_move addr
+ .macro if_user_has_exciting_move destination:req
.byte 0x83
- .4byte \addr
+ .4byte \destination
.endm
- .macro if_user_doesnt_have_exciting_move addr
+ .macro if_user_doesnt_have_exciting_move destination:req
.byte 0x84
- .4byte \addr
+ .4byte \destination
.endm
-@ 85
-@ 86
+ @ This is used incorrectly to check for an effect; see ContestAICmd_check_user_has_move
+ .macro check_user_has_move move:req
+ .byte 0x85
+ .2byte \move
+ .endm
+
+ .macro if_user_has_move move:req, destination:req
+ .byte 0x86
+ .2byte \move
+ .4byte \destination
+ .endm
- .macro if_effect_in_user_moveset param addr
+ .macro if_user_doesnt_have_move move:req, destination:req
.byte 0x87
- .2byte \param
- .4byte \addr
+ .2byte \move
+ .4byte \destination
.endm
diff --git a/data/contest_ai_scripts.s b/data/contest_ai_scripts.s
index 4a0bed817..e47ccb4c8 100644
--- a/data/contest_ai_scripts.s
+++ b/data/contest_ai_scripts.s
@@ -13,848 +13,889 @@
enum MON_4
.align 2
-gContestAIChecks:: @ 82DE350
- .4byte AI_CheckForBadMove @ CONTEST_AI_CHECK_BAD_MOVE
- .4byte AI_CheckForCombo @ CONTEST_AI_CHECK_COMBO
+gContestAI_ScriptsTable:: @ 82DE350
+ .4byte AI_CheckBadMove @ CONTEST_AI_CHECK_BAD_MOVE
+ .4byte AI_CheckCombo @ 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_CheckGoodMove @ CONTEST_AI_CHECK_GOOD_MOVE
.4byte AI_Erratic @ CONTEST_AI_ERRATIC
- .4byte AI_Nothing // 0x00000080
- .4byte AI_Nothing // 0x00000100
- .4byte AI_Nothing // 0x00000200
- .4byte AI_Nothing // 0x00000400
- .4byte AI_Nothing // 0x00000800
- .4byte AI_Nothing // 0x00001000
- .4byte AI_Nothing // 0x00002000
- .4byte AI_Nothing // 0x00004000
- .4byte AI_Nothing // 0x00008000
- .4byte AI_Nothing // 0x00010000
- .4byte AI_Nothing // 0x00020000
- .4byte AI_Nothing // 0x00040000
- .4byte AI_Nothing // 0x00080000
- .4byte AI_Nothing // 0x00100000
- .4byte AI_Nothing // 0x00200000
- .4byte AI_Nothing // 0x00400000
- .4byte AI_Nothing // 0x00800000
- .4byte AI_Nothing // 0x01000000
- .4byte AI_Nothing // 0x02000000
- .4byte AI_Nothing // 0x04000000
- .4byte AI_Nothing // 0x08000000
- .4byte AI_Nothing // 0x10000000
- .4byte AI_Nothing // 0x20000000
- .4byte AI_Nothing // 0x40000000
- .4byte AI_Nothing // 0x80000000
-
-
-@ Unreferenced AI routine to encourage moves that improve condition on the first
-@ appeal. Additionally, it checks the turn order of the user and the effect
-@ type, but the code is buggy and doesn't affect the score.
- if_appeal_num_not_eq 0, ContestUnreferenced_80
- if_effect_not_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, ContestUnreferenced_80
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_1
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_2
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_3
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_4
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_5
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_6
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_7
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_8
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_9
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_10
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_11
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_12
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_13
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_14
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_15
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_16
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_17
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_18
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_19
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_20
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_21
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_22
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_23
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_24
+ .4byte AI_Nothing @ CONTEST_AI_DUMMY_25
+
+
+@ Unused. Encourages improving condition on the 1st appeal, or startling mons if the users turn is later
+AI_CheckTiming:
+ if_appeal_num_not_eq 0, AI_CheckTiming_SkipCondition
+ if_effect_not_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, AI_CheckTiming_SkipCondition
score +10
-ContestUnreferenced_80:
- call ContestUnreferenced_0D
- end
-ContestUnreferenced_0D:
- if_user_order_more_than MON_2, ContestUnreferenced_end
- if_effect_type_not_eq 2, ContestUnreferenced_end
- if_effect_type_not_eq 3, ContestUnreferenced_end
- score +10 @ unreachable
-ContestUnreferenced_end:
- end
-
-@ Unreferenced AI routine that doesn't make much sense.
- 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
- if_user_order_not_eq MON_2, ContestUnreferenced_2B_2
- if_user_order_not_eq MON_3, ContestUnreferenced_2B_1
- if_user_order_not_eq MON_4, ContestUnreferenced_2B_1
- end
-ContestUnreferenced_2B_1:
- if_effect_type_eq 1, ContestUnreferenced_score
- end
-ContestUnreferenced_2B_2:
- if_effect_type_eq 1, ContestUnreferenced_score
- end
- if_effect_type_eq 1, ContestUnreferenced_score
- end
-ContestUnreferenced_0F_2:
- if_user_order_not_eq MON_1, ContestUnreferenced_2B_1
- if_user_order_not_eq MON_2, ContestUnreferenced_2B_1
- if_user_order_not_eq MON_3, ContestUnreferenced_2B_1
- if_user_order_not_eq MON_4, ContestUnreferenced_2B_1
- end
-ContestUnreferenced_0F_3:
- if_user_order_not_eq MON_1, ContestUnreferenced_2B_1
- if_user_order_not_eq MON_2, ContestUnreferenced_2B_1
- if_user_order_not_eq MON_3, ContestUnreferenced_2B_1
- if_user_order_not_eq MON_4, ContestUnreferenced_2B_1
- end
-ContestUnreferenced_0F_4:
- if_user_order_not_eq MON_1, ContestUnreferenced_2B_1
- if_user_order_not_eq MON_2, ContestUnreferenced_2B_1
- if_user_order_not_eq MON_3, ContestUnreferenced_2B_1
- if_user_order_not_eq MON_4, ContestUnreferenced_2B_1
- end
-ContestUnreferenced_0F_5:
- if_user_order_not_eq MON_1, ContestUnreferenced_2B_1
- if_user_order_not_eq MON_2, ContestUnreferenced_2B_1
- if_user_order_not_eq MON_3, ContestUnreferenced_2B_1
- if_user_order_not_eq MON_4, ContestUnreferenced_2B_1
- end
-ContestUnreferenced_score:
+AI_CheckTiming_SkipCondition:
+ call AI_CheckTiming_TryStartle
+ end
+AI_CheckTiming_TryStartle:
+ if_user_order_more_than MON_2, AI_CheckTiming_End
+ if_effect_type_not_eq CONTEST_EFFECT_TYPE_STARTLE_MON, AI_CheckTiming_End
+ if_effect_type_not_eq CONTEST_EFFECT_TYPE_STARTLE_MONS, AI_CheckTiming_End
+ score +10
+AI_CheckTiming_End:
+ end
+
+@ Unused, doesnt make much sense
+@ Encourages using an avoid being startled move
+@ The various appeal and turn checks are pointless, it will always encourage these moves
+AI_AvoidStartle:
+ if_appeal_num_eq 0, AI_AvoidStartle_1stAppeal
+ if_appeal_num_eq 1, AI_AvoidStartle_2ndAppeal
+ if_appeal_num_eq 2, AI_AvoidStartle_3rdAppeal
+ if_appeal_num_eq 3, AI_AvoidStartle_4thAppeal
+ if_last_appeal AI_AvoidStartle_LastAppeal
+ end
+AI_AvoidStartle_1stAppeal:
+ if_user_order_not_eq MON_1, AI_AvoidStartle_EncourageIfAvoidMove
+ if_user_order_not_eq MON_2, AI_AvoidStartle_EncourageIfAvoidMove2
+ if_user_order_not_eq MON_3, AI_AvoidStartle_EncourageIfAvoidMove
+ if_user_order_not_eq MON_4, AI_AvoidStartle_EncourageIfAvoidMove
+ end
+AI_AvoidStartle_EncourageIfAvoidMove:
+ if_effect_type_eq CONTEST_EFFECT_TYPE_AVOID_STARTLE, AI_AvoidStartle_Encourage
+ end
+AI_AvoidStartle_EncourageIfAvoidMove2:
+ if_effect_type_eq CONTEST_EFFECT_TYPE_AVOID_STARTLE, AI_AvoidStartle_Encourage
+ end
+AI_AvoidStartle_EncourageIfAvoidMove3:
+ if_effect_type_eq CONTEST_EFFECT_TYPE_AVOID_STARTLE, AI_AvoidStartle_Encourage
+ end
+AI_AvoidStartle_2ndAppeal:
+ if_user_order_not_eq MON_1, AI_AvoidStartle_EncourageIfAvoidMove
+ if_user_order_not_eq MON_2, AI_AvoidStartle_EncourageIfAvoidMove
+ if_user_order_not_eq MON_3, AI_AvoidStartle_EncourageIfAvoidMove
+ if_user_order_not_eq MON_4, AI_AvoidStartle_EncourageIfAvoidMove
+ end
+AI_AvoidStartle_3rdAppeal:
+ if_user_order_not_eq MON_1, AI_AvoidStartle_EncourageIfAvoidMove
+ if_user_order_not_eq MON_2, AI_AvoidStartle_EncourageIfAvoidMove
+ if_user_order_not_eq MON_3, AI_AvoidStartle_EncourageIfAvoidMove
+ if_user_order_not_eq MON_4, AI_AvoidStartle_EncourageIfAvoidMove
+ end
+AI_AvoidStartle_4thAppeal:
+ if_user_order_not_eq MON_1, AI_AvoidStartle_EncourageIfAvoidMove
+ if_user_order_not_eq MON_2, AI_AvoidStartle_EncourageIfAvoidMove
+ if_user_order_not_eq MON_3, AI_AvoidStartle_EncourageIfAvoidMove
+ if_user_order_not_eq MON_4, AI_AvoidStartle_EncourageIfAvoidMove
+ end
+AI_AvoidStartle_LastAppeal:
+ if_user_order_not_eq MON_1, AI_AvoidStartle_EncourageIfAvoidMove
+ if_user_order_not_eq MON_2, AI_AvoidStartle_EncourageIfAvoidMove
+ if_user_order_not_eq MON_3, AI_AvoidStartle_EncourageIfAvoidMove
+ if_user_order_not_eq MON_4, AI_AvoidStartle_EncourageIfAvoidMove
+ end
+AI_AvoidStartle_Encourage:
score +10
end
-
+AI_AvoidStartle_End:
end
-@ Unreferenced AI routine to encourage the most appealing move.
- if_most_appealing_move ContestUnreferenced_score2
+@ Unused
+AI_PreferMostAppealingMove:
+ if_most_appealing_move AI_PreferMostAppealingMove_Encourage
end
-ContestUnreferenced_score2:
+AI_PreferMostAppealingMove_Encourage:
score +10
end
+@ Discourages using the same move multiple times if it would get boring
AI_CheckBoring:
if_effect_eq CONTEST_EFFECT_REPETITION_NOT_BORING, AI_CheckBoring_NotBoring
- if_move_used_count_eq 1, AI_CheckBoring_FirstRepeat
- if_move_used_count_eq 2, AI_CheckBoring_SecondRepeat
- if_move_used_count_eq 3, AI_CheckBoring_ThirdRepeat
- if_move_used_count_eq 4, AI_CheckBoring_FourthRepeat
+ if_move_used_count_eq 1, AI_CheckBoring_1stRepeat
+ if_move_used_count_eq 2, AI_CheckBoring_2ndRepeat
+ if_move_used_count_eq 3, AI_CheckBoring_3rdRepeat
+ if_move_used_count_eq 4, AI_CheckBoring_4thRepeat
@ No repeats
end
-AI_CheckBoring_FirstRepeat:
+AI_CheckBoring_1stRepeat:
score -5
end
-AI_CheckBoring_SecondRepeat:
+AI_CheckBoring_2ndRepeat:
score -15
end
-AI_CheckBoring_ThirdRepeat:
+AI_CheckBoring_3rdRepeat:
score -20
end
-AI_CheckBoring_FourthRepeat:
+AI_CheckBoring_4thRepeat:
score -25
end
AI_CheckBoring_NotBoring:
end
+@ Strongly encourages using an exciting move if user is in a position to receive the max excitement bonus
+@ Encourages using exciting moves in general
+@ If the user doesnt have a good exciting move to use, then encourage lowering excitement to prevent
+@ opponents from benefitting from the excitement
AI_CheckExcitement:
- if_move_excitement_less_than 0, AI_contest09_081DC2AB
- if_move_excitement_eq 0, AI_contest7D_4_081DC2AB
- if_move_excitement_eq 1, AI_contest3D_081DC2AB
- end
-AI_contest09_081DC2AB:
- if_excitement_eq 4, AI_contest0F_1_081DC2AB
- if_excitement_eq 3, AI_contest0F_2_081DC2AB
- if_user_has_exciting_move AI_end_081DC2AB
+ if_move_excitement_less_than 0, AI_CheckExcitement_Negative
+ if_move_excitement_eq 0, AI_CheckExcitement_Neutral
+ if_move_excitement_eq 1, AI_CheckExcitement_Positive
+ end
+AI_CheckExcitement_Negative:
+ if_excitement_eq 4, AI_CheckExcitement_Negative_1AwayFromMax
+ if_excitement_eq 3, AI_CheckExcitement_Negative_2AwayFromMax
+ if_user_has_exciting_move AI_CheckExcitement_End
score +15
end
-AI_contest0F_1_081DC2AB:
- if_user_order_not_eq MON_1, AI_contest7D_1_081DC2AB
- if_random 51, AI_end_081DC2AB
+AI_CheckExcitement_Negative_1AwayFromMax:
+ if_user_order_not_eq MON_1, AI_CheckExcitement_Negative_1AwayFromMax_Not1stUp
+ if_random_less_than 51, AI_CheckExcitement_End
score +20
end
-AI_contest7D_1_081DC2AB:
- if_random 127, AI_end_081DC2AB
+AI_CheckExcitement_Negative_1AwayFromMax_Not1stUp:
+ if_random_less_than 127, AI_CheckExcitement_End
score -10
end
-AI_contest0F_2_081DC2AB:
- if_user_order_not_eq MON_1, AI_contest7D_3_081DC2AB
- if_last_appeal AI_score_081DC2AB
-AI_contest7D_2_081DC2AB:
- if_random 51, AI_end_081DC2AB
+AI_CheckExcitement_Negative_2AwayFromMax:
+ if_user_order_not_eq MON_1, AI_CheckExcitement_Negative_2AwayFromMax_Not1stUp
+ if_last_appeal AI_CheckExcitement_Negative_2AwayFromMax_LastAppeal
+ if_random_less_than 51, AI_CheckExcitement_End
score +10
end
-AI_score_081DC2AB:
+AI_CheckExcitement_Negative_2AwayFromMax_LastAppeal:
score +15
end
-AI_contest7D_3_081DC2AB:
- if_random 127, AI_end_081DC2AB
+AI_CheckExcitement_Negative_2AwayFromMax_Not1stUp:
+ if_random_less_than 127, AI_CheckExcitement_End
score +10
end
-AI_contest7D_4_081DC2AB:
- if_random 127, AI_end_081DC2AB
+AI_CheckExcitement_Neutral:
+ if_random_less_than 127, AI_CheckExcitement_End
score +10
end
-AI_contest3D_081DC2AB:
- if_move_used_count_more_than 0, AI_contest29_081DC2AB
- if_user_order_not_eq MON_1, AI_contest7D_5_081DC2AB
- if_excitement_not_eq 4, AI_contest7D_5_081DC2AB
+AI_CheckExcitement_Positive:
+ if_move_used_count_more_than 0, AI_CheckExcitement_Positive_Repeat
+ if_user_order_not_eq MON_1, AI_CheckExcitement_Positive_Not1stUpForMax
+ if_excitement_not_eq 4, AI_CheckExcitement_Positive_Not1stUpForMax
score +30
end
-AI_contest7D_5_081DC2AB:
- if_random 100, AI_end_081DC2AB
+AI_CheckExcitement_Positive_Not1stUpForMax:
+ if_random_less_than 100, AI_CheckExcitement_End
score +10
end
-AI_contest29_081DC2AB:
- if_effect_not_eq CONTEST_EFFECT_REPETITION_NOT_BORING, AI_end_081DC2AB
- if_user_order_not_eq MON_1, AI_contest7D_5_081DC2AB
- if_excitement_not_eq 4, AI_contest7D_5_081DC2AB
+AI_CheckExcitement_Positive_Repeat:
+ if_effect_not_eq CONTEST_EFFECT_REPETITION_NOT_BORING, AI_CheckExcitement_End
+ if_user_order_not_eq MON_1, AI_CheckExcitement_Positive_Not1stUpForMax
+ if_excitement_not_eq 4, AI_CheckExcitement_Positive_Not1stUpForMax
score +30
end
-AI_end_081DC2AB:
+AI_CheckExcitement_End:
end
-AI_CheckForCombo:
- if_would_finish_combo AI_score_081DC348
- call AI_contest3F_081DC348
- call AI_contest45_081DC348
+@ Strongly encourages using a move if it would finish a combo
+@ Encourages using a move if it would start a combo, esp if the user goes earlier
+@ Discourages starting a combo in the last round
+@ Discourages using a combo finisher when its combo starter hasnt been used yet
+AI_CheckCombo:
+ if_would_finish_combo AI_CheckCombo_WouldFinish
+ call AI_CheckCombo_CheckStarter
+ call AI_CheckCombo_CheckFinisherWithoutStarter
end
-AI_contest3F_081DC348:
- if_move_used_count_not_eq 0, AI_end_081DC348
- if_not_combo_starter AI_end_081DC348
- if_user_order_eq MON_1, AI_contest04_1_081DC348
- if_user_order_eq MON_2, AI_contest04_2_081DC348
- if_user_order_eq MON_3, AI_contest04_3_081DC348
- if_user_order_eq MON_4, AI_contest04_4_081DC348
+AI_CheckCombo_CheckStarter:
+ if_move_used_count_not_eq 0, AI_CheckCombo_End
+ if_not_combo_starter AI_CheckCombo_End
+ if_user_order_eq MON_1, AI_CheckCombo_Starter1stUp
+ if_user_order_eq MON_2, AI_CheckCombo_Starter2ndUp
+ if_user_order_eq MON_3, AI_CheckCombo_Starter3rdUp
+ if_user_order_eq MON_4, AI_CheckCombo_StarterLast
end
-AI_contest45_081DC348:
- if_not_combo_finisher AI_end_081DC348
+AI_CheckCombo_CheckFinisherWithoutStarter:
+ if_not_combo_finisher AI_CheckCombo_End
score -10
end
-AI_score_081DC348:
+AI_CheckCombo_WouldFinish:
score +25
end
-AI_contest04_1_081DC348:
- if_last_appeal AI_contest7D_081DC348
- if_random 150, AI_end_081DC348
+AI_CheckCombo_Starter1stUp:
+ if_last_appeal AI_CheckCombo_StarterOnLastAppeal
+ if_random_less_than 150, AI_CheckCombo_End
score +10
end
-AI_contest04_2_081DC348:
- if_last_appeal AI_contest7D_081DC348
- if_random 125, AI_end_081DC348
+AI_CheckCombo_Starter2ndUp:
+ if_last_appeal AI_CheckCombo_StarterOnLastAppeal
+ if_random_less_than 125, AI_CheckCombo_End
score +10
end
-AI_contest04_3_081DC348:
- if_last_appeal AI_contest7D_081DC348
- if_random 50, AI_end_081DC348
+AI_CheckCombo_Starter3rdUp:
+ if_last_appeal AI_CheckCombo_StarterOnLastAppeal
+ if_random_less_than 50, AI_CheckCombo_End
score +10
end
-AI_contest04_4_081DC348:
- if_last_appeal AI_contest7D_081DC348
+AI_CheckCombo_StarterLast:
+ if_last_appeal AI_CheckCombo_StarterOnLastAppeal
score +10
end
-AI_contest7D_081DC348:
- if_random 125, AI_end_081DC348
+AI_CheckCombo_StarterOnLastAppeal:
+ if_random_less_than 125, AI_CheckCombo_End
score -15
end
-AI_end_081DC348:
- end
-
-AI_CheckForGoodMove:
- if_effect_eq CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, ContestEffect39
- if_effect_eq CONTEST_EFFECT_NEXT_APPEAL_EARLIER, ContestEffect40
- if_effect_eq CONTEST_EFFECT_NEXT_APPEAL_LATER, ContestEffect41
- if_effect_eq CONTEST_EFFECT_REPETITION_NOT_BORING, ContestEffect3
- if_effect_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, ContestEffect38
- if_effect_eq CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, ContestEffect47
- if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, ContestEffect31
- if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, ContestEffect32
- if_effect_eq CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, ContestEffect46
- if_effect_eq CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, ContestEffect27
- if_effect_eq CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, ContestEffect16or17
- if_effect_eq CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, ContestEffect16or17
- if_effect_eq CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, ContestEffect_FollowingMonsNervous
- if_effect_eq CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, ContestEffect18
- end
-
-ContestEffect39:
- if_user_condition_eq 3, ContestEffect39_score1
- if_user_condition_eq 2, ContestEffect39_score2
- if_user_condition_eq 1, ContestEffect39_score3
- if_user_condition_eq 0, ContestEffect39_score4
- end
-ContestEffect39_score1:
+AI_CheckCombo_End:
+ end
+
+@ Checks if move should be encouraged based on its effect
+AI_CheckGoodMove:
+ if_effect_eq CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, AI_CGM_BetterWithGoodCondition
+ if_effect_eq CONTEST_EFFECT_NEXT_APPEAL_EARLIER, AI_CGM_NextAppealEarlier
+ if_effect_eq CONTEST_EFFECT_NEXT_APPEAL_LATER, AI_CGM_NextAppealLater
+ if_effect_eq CONTEST_EFFECT_REPETITION_NOT_BORING, AI_CGM_RepetitionNotBoring
+ if_effect_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, AI_CGM_ImproveCondition
+ if_effect_eq CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, AI_CGM_DontExciteAudience
+ if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, AI_CGM_AppealAsGoodAsPrevOnes
+ if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, AI_CGM_AppealAsGoodAsPrevOne
+ if_effect_eq CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, AI_CGM_BetterWhenAudienceExcited
+ if_effect_eq CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, AI_CGM_WorsenConditionOfPrevMons
+ if_effect_eq CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, AI_CGM_TargetMonWithJudgesAttention
+ if_effect_eq CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, AI_CGM_TargetMonWithJudgesAttention
+ if_effect_eq CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, AI_CGM_MakeFollowingMonsNervous
+ if_effect_eq CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, AI_CGM_JamsOthersButMissOneTurn
+ end
+
+AI_CGM_BetterWithGoodCondition:
+ if_user_condition_eq 3, AI_CGM_BetterWithGoodCondition_3
+ if_user_condition_eq 2, AI_CGM_BetterWithGoodCondition_2
+ if_user_condition_eq 1, AI_CGM_BetterWithGoodCondition_1
+ if_user_condition_eq 0, AI_CGM_BetterWithGoodCondition_0
+ end
+AI_CGM_BetterWithGoodCondition_3:
score +20
end
-ContestEffect39_score2:
- if_random 125, ContestEffectEnd
+AI_CGM_BetterWithGoodCondition_2:
+ if_random_less_than 125, AI_CGM_End
score +15
end
-ContestEffect39_score3:
- if_random 125, ContestEffectEnd
+AI_CGM_BetterWithGoodCondition_1:
+ if_random_less_than 125, AI_CGM_End
score +5
end
-ContestEffect39_score4:
+AI_CGM_BetterWithGoodCondition_0:
score -20
end
-ContestEffect40:
- if_effect_in_user_moveset CONTEST_EFFECT_BETTER_IF_FIRST, ContestEffectEnd
- if_random 50, ContestEffectEnd
+AI_CGM_NextAppealEarlier:
+ if_user_doesnt_have_move CONTEST_EFFECT_BETTER_IF_FIRST, AI_CGM_End
+ if_random_less_than 50, AI_CGM_End
score +20
end
-ContestEffect41:
- if_effect_in_user_moveset CONTEST_EFFECT_BETTER_IF_LAST, ContestEffectEnd
- if_random 50, ContestEffectEnd
+AI_CGM_NextAppealLater:
+ if_user_doesnt_have_move CONTEST_EFFECT_BETTER_IF_LAST, AI_CGM_End
+ if_random_less_than 50, AI_CGM_End
score +20
end
-ContestEffect3:
- if_user_order_not_eq MON_4, ContestEffectEnd
- if_random 50, ContestEffectEnd
+AI_CGM_RepetitionNotBoring:
+ if_user_order_not_eq MON_4, AI_CGM_End
+ if_random_less_than 50, AI_CGM_End
score +15
end
- if_last_appeal ContestEffect3_7D
- if_random 220, ContestEffect3_score
+
+AI_CGM_Unused:
+ if_last_appeal AI_CGM_Unused_LastAppeal
+ if_random_less_than 220, AI_CGM_Unused_Discourage
score +10
end
-ContestEffect3_7D:
- if_random 20, ContestEffectEnd
+AI_CGM_Unused_LastAppeal:
+ if_random_less_than 20, AI_CGM_End
score +15
end
-ContestEffect3_score:
+AI_CGM_Unused_Discourage:
score -20
end
-ContestEffect38:
- if_effect_in_user_moveset CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, ContestEffect38_contest04
- if_user_condition_eq 3, ContestEffect38_score1
- if_random 50, ContestEffectEnd
+@ Enourages improving condition, esp if user has moves better with good condition or on 1st appeal
+@ Discourages improving condition if at max condition, or if last appeal
+AI_CGM_ImproveCondition:
+ if_user_doesnt_have_move CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, AI_CGM_ImproveCondition_CheckAppealNum
+ if_user_condition_eq 3, AI_CGM_ImproveCondition_AtMax
+ if_random_less_than 50, AI_CGM_End
score +15
end
-ContestEffect38_score1:
+AI_CGM_ImproveCondition_AtMax:
score -10
end
-ContestEffect38_contest04:
- if_last_appeal ContestEffect38_score2
- if_appeal_num_eq 0, ContestEffect38_random
- if_move_used_count_eq 1, ContestEffectEnd
- if_random 125, ContestEffectEnd
+AI_CGM_ImproveCondition_CheckAppealNum:
+ if_last_appeal AI_CGM_ImproveCondition_LastAppeal
+ if_appeal_num_eq 0, AI_CGM_ImproveCondition_FirstAppeal
+ if_move_used_count_eq 1, AI_CGM_End
+ if_random_less_than 125, AI_CGM_End
score +10
end
-ContestEffect38_random:
- if_random 100, ContestEffectEnd
+AI_CGM_ImproveCondition_FirstAppeal:
+ if_random_less_than 100, AI_CGM_End
score +10
end
-ContestEffect38_score2:
+AI_CGM_ImproveCondition_LastAppeal:
score -10
end
-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_not_last_appeal ContestEffectEnd
- if_user_has_exciting_move ContestEffectEnd
- if_excitement_less_than 1, ContestEffectEnd
+@ Encourage stopping audience excitement early in the appeal, or last appeal if no better options
+AI_CGM_DontExciteAudience:
+ if_move_used_count_eq 1, AI_CGM_End
+ if_user_order_eq MON_1, AI_CGM_DontExciteAudience_EarlyTurn
+ if_user_order_eq MON_2, AI_CGM_DontExciteAudience_EarlyTurn
+ if_not_last_appeal AI_CGM_End
+ if_user_has_exciting_move AI_CGM_End
+ if_excitement_less_than 1, AI_CGM_End
score +10
end
-ContestEffect47_random:
- if_random 127, ContestEffectEnd
+AI_CGM_DontExciteAudience_EarlyTurn:
+ if_random_less_than 127, AI_CGM_End
score +10
end
-ContestEffect31:
- if_user_order_eq MON_2, ContestEffect31_score1
- if_user_order_eq MON_3, ContestEffect31_score2
- if_user_order_eq MON_4, ContestEffect31_score3
+@ Encourages move the later the user goes
+AI_CGM_AppealAsGoodAsPrevOnes:
+ if_user_order_eq MON_2, AI_CGM_AppealAsGoodAsPrevOnes_2ndUp
+ if_user_order_eq MON_3, AI_CGM_AppealAsGoodAsPrevOnes_3rdUp
+ if_user_order_eq MON_4, AI_CGM_AppealAsGoodAsPrevOnes_Last
end
-ContestEffect31_score1:
+AI_CGM_AppealAsGoodAsPrevOnes_2ndUp:
score +5
end
-ContestEffect31_score2:
+AI_CGM_AppealAsGoodAsPrevOnes_3rdUp:
score +15
end
-ContestEffect31_score3:
+AI_CGM_AppealAsGoodAsPrevOnes_Last:
score +20
end
-ContestEffect32:
- if_user_order_eq MON_1, ContestEffect32_score1
- if_user_order_eq MON_2, ContestEffect32_score2
- if_user_order_eq MON_3, ContestEffect32_score3
- if_user_order_eq MON_4, ContestEffect32_score5
+@ Encourages move more for each opponent who will have a turn before the user
+AI_CGM_AppealAsGoodAsPrevOne:
+ if_user_order_eq MON_1, AI_CGM_AppealAsGoodAsPrevOne_1stUp
+ if_user_order_eq MON_2, AI_CGM_AppealAsGoodAsPrevOne_2ndUp
+ if_user_order_eq MON_3, AI_CGM_AppealAsGoodAsPrevOne_3rdUp
+ if_user_order_eq MON_4, AI_CGM_AppealAsGoodAsPrevOne_Last
end
-ContestEffect32_score1:
+AI_CGM_AppealAsGoodAsPrevOne_1stUp:
score -10
end
-ContestEffect32_score2:
- if_cannot_participate MON_1, ContestEffectEnd
+AI_CGM_AppealAsGoodAsPrevOne_2ndUp:
+ if_cannot_participate MON_1, AI_CGM_End
score +5
end
-ContestEffect32_score3:
- if_cannot_participate MON_1, ContestEffect32_score4
+AI_CGM_AppealAsGoodAsPrevOne_3rdUp:
+ if_cannot_participate MON_1, AI_CGM_AppealAsGoodAsPrevOne_3rdUp_CheckMon2
score +5
- jump ContestEffect32_score4
+ goto AI_CGM_AppealAsGoodAsPrevOne_3rdUp_CheckMon2
end
-ContestEffect32_score4:
- if_cannot_participate MON_2, ContestEffectEnd
+AI_CGM_AppealAsGoodAsPrevOne_3rdUp_CheckMon2:
+ if_cannot_participate MON_2, AI_CGM_End
score +5
end
-ContestEffect32_score5:
- if_cannot_participate MON_1, ContestEffect32_score6
+AI_CGM_AppealAsGoodAsPrevOne_Last:
+ if_cannot_participate MON_1, AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon2
score +5
- jump ContestEffect32_score6
+ goto AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon2
end
-ContestEffect32_score6:
- if_cannot_participate MON_2, ContestEffect32_score7
+AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon2:
+ if_cannot_participate MON_2, AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon3
score +5
- jump ContestEffect32_score7
+ goto AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon3
end
-ContestEffect32_score7:
- if_cannot_participate MON_3, ContestEffectEnd
+AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon3:
+ if_cannot_participate MON_3, AI_CGM_End
score +5
end
-ContestEffect46:
- if_user_order_eq MON_1, ContestEffect46_05
- if_user_order_more_than MON_1, ContestEffect46_score4
+@ Encourage move if audience is close to full exictement and user goes first
+@ See bug note, only does this on 1st appeal (when it will never happen)
+AI_CGM_BetterWhenAudienceExcited:
+ if_user_order_eq MON_1, AI_CGM_BetterWhenAudienceExcited_1stUp
+ if_user_order_more_than MON_1, AI_CGM_BetterWhenAudienceExcited_Not1stUp
end
-ContestEffect46_05:
- if_appeal_num_not_eq 0, ContestEffect46_score1
- if_excitement_eq 4, ContestEffect46_score2
- if_excitement_eq 3, ContestEffect46_score3
+AI_CGM_BetterWhenAudienceExcited_1stUp:
+ @ BUG: Should be if_appeal_num_eq 0
+ @ 1st up on 1st appeal excitement will always be 0
+ if_appeal_num_not_eq 0, AI_CGM_BetterWhenAudienceExcited_Not1stAppeal
+ if_excitement_eq 4, AI_CGM_BetterWhenAudienceExcited_1AwayFromMax
+ if_excitement_eq 3, AI_CGM_BetterWhenAudienceExcited_2AwayFromMax
end
-ContestEffect46_score1:
- if_random 125, ContestEffectEnd
+AI_CGM_BetterWhenAudienceExcited_Not1stAppeal:
+ if_random_less_than 125, AI_CGM_End
score -15
end
-ContestEffect46_score2:
- if_random 125, ContestEffectEnd
+AI_CGM_BetterWhenAudienceExcited_1AwayFromMax:
+ if_random_less_than 125, AI_CGM_End
score +20
end
-ContestEffect46_score3:
- if_random 125, ContestEffectEnd
+AI_CGM_BetterWhenAudienceExcited_2AwayFromMax:
+ if_random_less_than 125, AI_CGM_End
score +15
end
-ContestEffect46_score4:
- if_random 178, ContestEffectEnd
+AI_CGM_BetterWhenAudienceExcited_Not1stUp:
+ if_random_less_than 178, AI_CGM_End
score +10
end
-ContestEffect27:
- if_user_order_eq MON_1, ContestEffectEnd
- jump ContestEffect27_55_1
+@ Encourage move more for each condition star the prev mons have
+AI_CGM_WorsenConditionOfPrevMons:
+ if_user_order_eq MON_1, AI_CGM_End
+ goto AI_CGM_WorsenConditionOfPrevMons_CheckMon1
end
-ContestEffect27_55_1:
- if_cannot_participate MON_1, ContestEffect27_noscore
- if_condition_eq MON_1, 0, ContestEffect27_noscore
- if_condition_eq MON_1, 1, ContestEffect27_score1
- if_condition_eq MON_1, 2, ContestEffect27_score2
- if_condition_eq MON_1, 3, ContestEffect27_score3
+AI_CGM_WorsenConditionOfPrevMons_CheckMon1:
+ if_cannot_participate MON_1, AI_CGM_WorsenConditionOfPrevMons_TryCheckMon2
+ if_condition_eq MON_1, 0, AI_CGM_WorsenConditionOfPrevMons_TryCheckMon2
+ if_condition_eq MON_1, 1, AI_CGM_WorsenConditionOfPrevMons_Mon1Has1Star
+ if_condition_eq MON_1, 2, AI_CGM_WorsenConditionOfPrevMons_Mon1Has2Stars
+ if_condition_eq MON_1, 3, AI_CGM_WorsenConditionOfPrevMons_Mon1Has3Stars
end
-ContestEffect27_score1:
- if_random 125, ContestEffect27_55_2
+AI_CGM_WorsenConditionOfPrevMons_Mon1Has1Star:
+ if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon2
score +5
- if_user_order_more_than MON_2, ContestEffect27_55_2
+ if_user_order_more_than MON_2, AI_CGM_WorsenConditionOfPrevMons_CheckMon2
end
-ContestEffect27_score2:
- if_random 125, ContestEffect27_55_2
+AI_CGM_WorsenConditionOfPrevMons_Mon1Has2Stars:
+ if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon2
score +10
- if_user_order_more_than MON_2, ContestEffect27_55_2
+ if_user_order_more_than MON_2, AI_CGM_WorsenConditionOfPrevMons_CheckMon2
end
-ContestEffect27_score3:
- if_random 125, ContestEffect27_55_2
+AI_CGM_WorsenConditionOfPrevMons_Mon1Has3Stars:
+ if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon2
score +15
- if_user_order_more_than MON_2, ContestEffect27_55_2
+ if_user_order_more_than MON_2, AI_CGM_WorsenConditionOfPrevMons_CheckMon2
end
-ContestEffect27_noscore:
- if_user_order_more_than MON_2, ContestEffect27_55_2
+AI_CGM_WorsenConditionOfPrevMons_TryCheckMon2:
+ if_user_order_more_than MON_2, AI_CGM_WorsenConditionOfPrevMons_CheckMon2
end
-ContestEffect27_55_2:
- if_cannot_participate MON_2, ContestEffect27_noscore2
- if_condition_eq MON_2, 0, ContestEffect27_noscore2
- if_condition_eq MON_2, 1, ContestEffect27_score4
- if_condition_eq MON_2, 2, ContestEffect27_score5
- if_condition_eq MON_2, 3, ContestEffect27_score6
+AI_CGM_WorsenConditionOfPrevMons_CheckMon2:
+ if_cannot_participate MON_2, AI_CGM_WorsenConditionOfPrevMons_TryCheckMon3
+ if_condition_eq MON_2, 0, AI_CGM_WorsenConditionOfPrevMons_TryCheckMon3
+ if_condition_eq MON_2, 1, AI_CGM_WorsenConditionOfPrevMons_Mon2Has1Star
+ if_condition_eq MON_2, 2, AI_CGM_WorsenConditionOfPrevMons_Mon2Has2Stars
+ if_condition_eq MON_2, 3, AI_CGM_WorsenConditionOfPrevMons_Mon2Has3Stars
end
-ContestEffect27_score4:
- if_random 125, ContestEffect27_55_3
+AI_CGM_WorsenConditionOfPrevMons_Mon2Has1Star:
+ if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon3
score +5
- if_user_order_more_than MON_3, ContestEffect27_55_3
+ if_user_order_more_than MON_3, AI_CGM_WorsenConditionOfPrevMons_CheckMon3
end
-ContestEffect27_score5:
- if_random 125, ContestEffect27_55_3
+AI_CGM_WorsenConditionOfPrevMons_Mon2Has2Stars:
+ if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon3
score +10
- if_user_order_more_than MON_3, ContestEffect27_55_3
+ if_user_order_more_than MON_3, AI_CGM_WorsenConditionOfPrevMons_CheckMon3
end
-ContestEffect27_score6:
- if_random 125, ContestEffect27_55_3
+AI_CGM_WorsenConditionOfPrevMons_Mon2Has3Stars:
+ if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon3
score +15
- if_user_order_more_than MON_3, ContestEffect27_55_3
+ if_user_order_more_than MON_3, AI_CGM_WorsenConditionOfPrevMons_CheckMon3
end
-ContestEffect27_noscore2:
- if_user_order_more_than MON_3, ContestEffect27_55_3
+AI_CGM_WorsenConditionOfPrevMons_TryCheckMon3:
+ if_user_order_more_than MON_3, AI_CGM_WorsenConditionOfPrevMons_CheckMon3
end
-ContestEffect27_55_3:
- if_cannot_participate MON_3, ContestEffect27_end
- if_condition_eq MON_3, 0, ContestEffect27_end
- if_condition_eq MON_3, 1, ContestEffect27_score7
- if_condition_eq MON_3, 2, ContestEffect27_score8
- if_condition_eq MON_3, 3, ContestEffect27_score9
+AI_CGM_WorsenConditionOfPrevMons_CheckMon3:
+ if_cannot_participate MON_3, AI_CGM_WorsenConditionOfPrevMons_end
+ if_condition_eq MON_3, 0, AI_CGM_WorsenConditionOfPrevMons_end
+ if_condition_eq MON_3, 1, AI_CGM_WorsenConditionOfPrevMons_Mon3Has1Star
+ if_condition_eq MON_3, 2, AI_CGM_WorsenConditionOfPrevMons_Mon3Has2Stars
+ if_condition_eq MON_3, 3, AI_CGM_WorsenConditionOfPrevMons_Mon3Has3Stars
end
-ContestEffect27_score7:
- if_random 125, ContestEffectEnd
+AI_CGM_WorsenConditionOfPrevMons_Mon3Has1Star:
+ if_random_less_than 125, AI_CGM_End
score +5
end
-ContestEffect27_score8:
- if_random 125, ContestEffectEnd
+AI_CGM_WorsenConditionOfPrevMons_Mon3Has2Stars:
+ if_random_less_than 125, AI_CGM_End
score +10
end
-ContestEffect27_score9:
- if_random 125, ContestEffectEnd
+AI_CGM_WorsenConditionOfPrevMons_Mon3Has3Stars:
+ if_random_less_than 125, AI_CGM_End
score +15
end
-ContestEffect27_end:
+AI_CGM_WorsenConditionOfPrevMons_end:
end
-ContestEffect16or17:
- if_user_order_eq MON_1, ContestEffectEnd
- jump ContestEffect16or17_55
+@ Encourage if a prev mon has started a combo, esp if they havent completed it yet
+@ BUG: Incorrectly uses if_used_combo_starter below, instead of if_not_used_combo_starter
+@ As a result it encourages move if a prev mon has not begun a combo
+AI_CGM_TargetMonWithJudgesAttention:
+ if_user_order_eq MON_1, AI_CGM_End
+ goto AI_CGM_TargetMonWithJudgesAttention_CheckMon1
end
-ContestEffect16or17_55:
- if_cannot_participate MON_1, ContestEffect16or17_0E_1
- if_used_combo_starter_eq MON_1, TRUE, ContestEffect16or17_0E_1
- if_random 125, ContestEffect16or17_0E_1
+AI_CGM_TargetMonWithJudgesAttention_CheckMon1:
+ if_cannot_participate MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
+ if_used_combo_starter MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
+ if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
score +2
- contest_58 MON_1, ContestEffect16or17_0E_1
+ if_not_completed_combo MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
score +8
end
-ContestEffect16or17_0E_1:
- if_user_order_eq MON_2, ContestEffectEnd
- if_cannot_participate MON_2, ContestEffect16or17_0E_2
- if_used_combo_starter_eq MON_2, TRUE, ContestEffect16or17_0E_2
- if_random 125, ContestEffect16or17_0E_2
+AI_CGM_TargetMonWithJudgesAttention_CheckMon2:
+ if_user_order_eq MON_2, AI_CGM_End
+ if_cannot_participate MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
+ if_used_combo_starter MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
+ if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
score +2
- contest_58 MON_2, ContestEffect16or17_0E_2
+ if_not_completed_combo MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
score +8
end
-ContestEffect16or17_0E_2:
- if_user_order_eq MON_3, ContestEffectEnd
- if_cannot_participate MON_3, ContestEffectEnd
- if_used_combo_starter_eq MON_3, TRUE, ContestEffectEnd
- if_random 125, ContestEffectEnd
+AI_CGM_TargetMonWithJudgesAttention_CheckMon3:
+ if_user_order_eq MON_3, AI_CGM_End
+ if_cannot_participate MON_3, AI_CGM_End
+ if_used_combo_starter MON_3, AI_CGM_End
+ if_random_less_than 125, AI_CGM_End
score +2
- contest_58 MON_3, ContestEffectEnd
+ if_not_completed_combo MON_3, AI_CGM_End
score +8
end
-ContestEffect_FollowingMonsNervous:
- if_user_order_eq MON_4, ContestEffectEnd
- jump ContestEffect_FollowingMonsNervous_CheckMon4
+@ Encourage making mons nervous that have started a combo and can appeal after the user
+AI_CGM_MakeFollowingMonsNervous:
+ if_user_order_eq MON_4, AI_CGM_End
+ goto AI_CGM_MakeFollowingMonsNervous_CheckMon4
end
-ContestEffect_FollowingMonsNervous_CheckMon4:
- if_cannot_participate MON_4, ContestEffect_FollowingMonsNervous_CheckMon3
- if_used_combo_starter_eq MON_4, FALSE, ContestEffect_FollowingMonsNervous_CheckMon3
+AI_CGM_MakeFollowingMonsNervous_CheckMon4:
+ if_cannot_participate MON_4, AI_CGM_MakeFollowingMonsNervous_CheckMon3
+ if_not_used_combo_starter MON_4, AI_CGM_MakeFollowingMonsNervous_CheckMon3
score +5
- if_random 125, ContestEffect16or17_0E_1
+ if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
score +5
end
-ContestEffect_FollowingMonsNervous_CheckMon3:
- if_user_order_eq MON_3, ContestEffectEnd
- if_cannot_participate MON_3, ContestEffect_FollowingMonsNervous_CheckMon2
- if_used_combo_starter_eq MON_3, FALSE, ContestEffect_FollowingMonsNervous_CheckMon2
+AI_CGM_MakeFollowingMonsNervous_CheckMon3:
+ if_user_order_eq MON_3, AI_CGM_End
+ if_cannot_participate MON_3, AI_CGM_MakeFollowingMonsNervous_CheckMon2
+ if_not_used_combo_starter MON_3, AI_CGM_MakeFollowingMonsNervous_CheckMon2
score +5
- if_random 125, ContestEffect16or17_0E_2
+ if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
score +5
end
-ContestEffect_FollowingMonsNervous_CheckMon2:
- if_user_order_eq MON_2, ContestEffectEnd
- if_cannot_participate MON_2, ContestEffectEnd
- if_used_combo_starter_eq MON_2, FALSE, ContestEffectEnd
+AI_CGM_MakeFollowingMonsNervous_CheckMon2:
+ if_user_order_eq MON_2, AI_CGM_End
+ if_cannot_participate MON_2, AI_CGM_End
+ if_not_used_combo_starter MON_2, AI_CGM_End
score +5
- if_random 125, ContestEffectEnd
+ if_random_less_than 125, AI_CGM_End
score +5
end
-ContestEffect18:
- if_last_appeal ContestEffect18_score1
- jump ContestEffect18_0E
+@ Encourages move if users turn is later, or if its the last appeal
+AI_CGM_JamsOthersButMissOneTurn:
+ if_last_appeal AI_CGM_JamsOthersButMissOneTurn_LastAppeal
+ goto AI_CGM_JamsOthersButMissOneTurn_TurnOrder
end
-ContestEffect18_score1:
+AI_CGM_JamsOthersButMissOneTurn_LastAppeal:
score +5
- jump ContestEffect18_0E
+ goto AI_CGM_JamsOthersButMissOneTurn_TurnOrder
end
-ContestEffect18_0E:
- if_user_order_eq MON_1, ContestEffect18_score2
- if_user_order_eq MON_2, ContestEffect18_random1
- if_user_order_eq MON_3, ContestEffect18_random2
- if_user_order_eq MON_4, ContestEffect18_random3
+AI_CGM_JamsOthersButMissOneTurn_TurnOrder:
+ if_user_order_eq MON_1, AI_CGM_JamsOthersButMissOneTurn_1stUp
+ if_user_order_eq MON_2, AI_CGM_JamsOthersButMissOneTurn_2ndUp
+ if_user_order_eq MON_3, AI_CGM_JamsOthersButMissOneTurn_3rdUp
+ if_user_order_eq MON_4, AI_CGM_JamsOthersButMissOneTurn_Last
end
-ContestEffect18_score2:
+AI_CGM_JamsOthersButMissOneTurn_1stUp:
score -15
end
-ContestEffect18_random1:
- if_random 125, ContestEffectEnd
+AI_CGM_JamsOthersButMissOneTurn_2ndUp:
+ if_random_less_than 125, AI_CGM_End
score -10
end
-ContestEffect18_random2:
- if_random 125, ContestEffectEnd
+AI_CGM_JamsOthersButMissOneTurn_3rdUp:
+ if_random_less_than 125, AI_CGM_End
score +5
end
-ContestEffect18_random3:
- if_random 125, ContestEffectEnd
+AI_CGM_JamsOthersButMissOneTurn_Last:
+ if_random_less_than 125, AI_CGM_End
score +15
end
-ContestEffectEnd:
+AI_CGM_End:
end
@ Randomly encourage moves in Cute, Smart, and Tough contests.
AI_Erratic:
- 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
+ if_contest_type_eq CONTEST_CATEGORY_CUTE, AI_Erratic_CuteSmartTough
+ if_contest_type_eq CONTEST_CATEGORY_SMART, AI_Erratic_CuteSmartTough
+ if_contest_type_eq CONTEST_CATEGORY_TOUGH, AI_Erratic_CuteSmartTough
end
-Erratic_CuteSmartTough:
- if_random 125, Erratic_NoScoreIncrease
+AI_Erratic_CuteSmartTough:
+ if_random_less_than 125, AI_Erratic_End
score +10
end
-Erratic_NoScoreIncrease:
- end
-
-AI_CheckForBadMove:
- if_effect_eq CONTEST_EFFECT_STARTLE_FRONT_MON, ContestEffect2_8
- if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MON, ContestEffect2_8
- if_effect_eq CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, ContestEffect2_8
- if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MON_2, ContestEffect2_8
- if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, ContestEffect2_8
- if_effect_eq CONTEST_EFFECT_BETTER_IF_SAME_TYPE, ContestEffect2_8
- if_effect_eq CONTEST_EFFECT_BETTER_IF_DIFF_TYPE, ContestEffect2_8
- if_effect_eq CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, ContestEffect2_8
- if_effect_eq CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MONS, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MONS_2, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, ContestEffect2_9
- if_effect_eq CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS, ContestEffect2_25
- if_effect_eq CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, ContestEffect2_26
- if_effect_eq CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, ContestEffect2_26
- if_effect_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, ContestEffect2_38
- if_effect_eq CONTEST_EFFECT_AVOID_STARTLE_ONCE, ContestEffect2_4
- if_effect_eq CONTEST_EFFECT_AVOID_STARTLE, ContestEffect2_4
- if_effect_eq CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY, ContestEffect2_4
- if_effect_eq CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, ContestEffect2_2
- end
-
-ContestEffect2_8:
- if_user_order_eq MON_1, ContestEffect2_8_score1
- if_user_order_eq MON_2, ContestEffect2_8_score2
- if_user_order_eq MON_3, ContestEffect2_8_score3
- if_user_order_eq MON_4, ContestEffect2_8_score4
- end
-ContestEffect2_8_score1:
+AI_Erratic_End:
+ end
+
+@ Checks if move should be discouraged based on its effect
+AI_CheckBadMove:
+ if_effect_eq CONTEST_EFFECT_STARTLE_FRONT_MON, AI_CBM_DependsOnPrevMon
+ if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MON, AI_CBM_DependsOnPrevMon
+ if_effect_eq CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, AI_CBM_DependsOnPrevMon
+ if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MON_2, AI_CBM_DependsOnPrevMon
+ if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, AI_CBM_DependsOnPrevMon
+ if_effect_eq CONTEST_EFFECT_BETTER_IF_SAME_TYPE, AI_CBM_DependsOnPrevMon
+ if_effect_eq CONTEST_EFFECT_BETTER_IF_DIFF_TYPE, AI_CBM_DependsOnPrevMon
+ if_effect_eq CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, AI_CBM_DependsOnPrevMon
+ if_effect_eq CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MONS, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_STARTLE_PREV_MONS_2, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, AI_CBM_DependsOnPrevMons
+ if_effect_eq CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS, AI_CBM_DependsOnNextMon
+ if_effect_eq CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, AI_CBM_DependsOnNextMons
+ if_effect_eq CONTEST_EFFECT_DONT_EXCITE_AUDIENCE, AI_CBM_DependsOnNextMons
+ if_effect_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, AI_CBM_ImproveCondition
+ if_effect_eq CONTEST_EFFECT_AVOID_STARTLE_ONCE, AI_CBM_AvoidStartle
+ if_effect_eq CONTEST_EFFECT_AVOID_STARTLE, AI_CBM_AvoidStartle
+ if_effect_eq CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY, AI_CBM_AvoidStartle
+ if_effect_eq CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, AI_CBM_NoMoreMoves
+ end
+
+@ If previous mon is skipping turn (or user is first), discourage move
+AI_CBM_DependsOnPrevMon:
+ if_user_order_eq MON_1, AI_CBM_DependsOnPrevMon_1stUp
+ if_user_order_eq MON_2, AI_CBM_DependsOnPrevMon_2ndUp
+ if_user_order_eq MON_3, AI_CBM_DependsOnPrevMon_3rdUp
+ if_user_order_eq MON_4, AI_CBM_DependsOnPrevMon_Last
+ end
+AI_CBM_DependsOnPrevMon_1stUp:
score -10
end
-ContestEffect2_8_score2:
- if_can_participate MON_1, ContestEffectEnd2
+AI_CBM_DependsOnPrevMon_2ndUp:
+ if_can_participate MON_1, AI_CBM_End
score -10
end
-ContestEffect2_8_score3:
- if_can_participate MON_2, ContestEffectEnd2
+AI_CBM_DependsOnPrevMon_3rdUp:
+ if_can_participate MON_2, AI_CBM_End
score -10
end
-ContestEffect2_8_score4:
- if_can_participate MON_3, ContestEffectEnd2
+AI_CBM_DependsOnPrevMon_Last:
+ if_can_participate MON_3, AI_CBM_End
score -10
end
-ContestEffect2_9:
- if_user_order_eq MON_1, ContestEffect2_9_score1
- if_user_order_eq MON_2, ContestEffect2_9_score2
- if_user_order_eq MON_3, ContestEffect2_9_score3
- if_user_order_eq MON_4, ContestEffect2_9_score4
+@ If previous mons are all skipping turns (or user is first), discourage move
+AI_CBM_DependsOnPrevMons:
+ if_user_order_eq MON_1, AI_CBM_DependsOnPrevMons_1stUp
+ if_user_order_eq MON_2, AI_CBM_DependsOnPrevMons_2ndUp
+ if_user_order_eq MON_3, AI_CBM_DependsOnPrevMons_3rdUp
+ if_user_order_eq MON_4, AI_CBM_DependsOnPrevMons_Last
end
-ContestEffect2_9_score1:
+AI_CBM_DependsOnPrevMons_1stUp:
score -20
end
-ContestEffect2_9_score2:
- if_can_participate MON_1, ContestEffectEnd2
+AI_CBM_DependsOnPrevMons_2ndUp:
+ if_can_participate MON_1, AI_CBM_End
score -15
end
-ContestEffect2_9_score3:
- if_can_participate MON_1, ContestEffectEnd2
- if_can_participate MON_2, ContestEffectEnd2
+AI_CBM_DependsOnPrevMons_3rdUp:
+ if_can_participate MON_1, AI_CBM_End
+ if_can_participate MON_2, AI_CBM_End
score -15
end
-ContestEffect2_9_score4:
- if_can_participate MON_1, ContestEffectEnd2
- if_can_participate MON_2, ContestEffectEnd2
- if_can_participate MON_3, ContestEffectEnd2
+AI_CBM_DependsOnPrevMons_Last:
+ if_can_participate MON_1, AI_CBM_End
+ if_can_participate MON_2, AI_CBM_End
+ if_can_participate MON_3, AI_CBM_End
score -15
end
-ContestEffect2_25:
- if_user_order_eq MON_1, ContestEffect2_25_score1
- if_user_order_eq MON_2, ContestEffect2_25_score2
- if_user_order_eq MON_3, ContestEffect2_25_score3
+@ If next mon is skipping turn (or user is last), discourage move
+AI_CBM_DependsOnNextMon:
+ if_user_order_eq MON_1, AI_CBM_DependsOnNextMon_1stUp
+ if_user_order_eq MON_2, AI_CBM_DependsOnNextMon_2ndUp
+ if_user_order_eq MON_3, AI_CBM_DependsOnNextMon_3rdUp
score -10
end
-ContestEffect2_25_score1:
- if_can_participate MON_2, ContestEffectEnd2
+AI_CBM_DependsOnNextMon_1stUp:
+ if_can_participate MON_2, AI_CBM_End
score -10
end
-ContestEffect2_25_score2:
- if_can_participate MON_3, ContestEffectEnd2
+AI_CBM_DependsOnNextMon_2ndUp:
+ if_can_participate MON_3, AI_CBM_End
score -10
end
-ContestEffect2_25_score3:
- if_can_participate MON_4, ContestEffectEnd2
+AI_CBM_DependsOnNextMon_3rdUp:
+ if_can_participate MON_4, AI_CBM_End
score -10
end
-ContestEffect2_26:
- if_user_order_eq MON_1, ContestEffect2_26_score1
- if_user_order_eq MON_2, ContestEffect2_26_score2
- if_user_order_eq MON_3, ContestEffect2_26_score3
+@ If next mons are all skipping turns (or user is last), discourage move
+AI_CBM_DependsOnNextMons:
+ if_user_order_eq MON_1, AI_CBM_DependsOnNextMons_1stUp
+ if_user_order_eq MON_2, AI_CBM_DependsOnNextMons_2ndUp
+ if_user_order_eq MON_3, AI_CBM_DependsOnNextMons_3rdUp
score -10
end
-ContestEffect2_26_score1:
- if_can_participate MON_2, ContestEffectEnd2
- if_can_participate MON_3, ContestEffectEnd2
- if_can_participate MON_4, ContestEffectEnd2
+AI_CBM_DependsOnNextMons_1stUp:
+ if_can_participate MON_2, AI_CBM_End
+ if_can_participate MON_3, AI_CBM_End
+ if_can_participate MON_4, AI_CBM_End
score -10
end
-ContestEffect2_26_score2:
- if_can_participate MON_3, ContestEffectEnd2
- if_can_participate MON_4, ContestEffectEnd2
+AI_CBM_DependsOnNextMons_2ndUp:
+ if_can_participate MON_3, AI_CBM_End
+ if_can_participate MON_4, AI_CBM_End
score -10
end
-ContestEffect2_26_score3:
- if_can_participate MON_4, ContestEffectEnd2
+AI_CBM_DependsOnNextMons_3rdUp:
+ if_can_participate MON_4, AI_CBM_End
score -10
end
-ContestEffect2_38:
- if_user_condition_less_than 3, ContestEffectEnd2
+@ If at max condition, discourage move
+AI_CBM_ImproveCondition:
+ if_user_condition_less_than 3, AI_CBM_End
score -20
end
-ContestEffect2_4:
- if_user_order_eq MON_1, ContestEffect2_4_score1
- if_user_order_eq MON_2, ContestEffect2_4_score2
- if_user_order_eq MON_3, ContestEffect2_4_score3
+@ If there are no upcoming mons who can make an appeal (or if user is last), discourage move
+@ Identical to AI_CBM_DependsOnNextMons
+AI_CBM_AvoidStartle:
+ if_user_order_eq MON_1, AI_CBM_AvoidStartle_1stUp
+ if_user_order_eq MON_2, AI_CBM_AvoidStartle_2ndUp
+ if_user_order_eq MON_3, AI_CBM_AvoidStartle_3rdUp
score -10
end
-ContestEffect2_4_score1:
- if_can_participate MON_2, ContestEffectEnd2
- if_can_participate MON_3, ContestEffectEnd2
- if_can_participate MON_4, ContestEffectEnd2
+AI_CBM_AvoidStartle_1stUp:
+ if_can_participate MON_2, AI_CBM_End
+ if_can_participate MON_3, AI_CBM_End
+ if_can_participate MON_4, AI_CBM_End
score -10
end
-ContestEffect2_4_score2:
- if_can_participate MON_3, ContestEffectEnd2
- if_can_participate MON_4, ContestEffectEnd2
+AI_CBM_AvoidStartle_2ndUp:
+ if_can_participate MON_3, AI_CBM_End
+ if_can_participate MON_4, AI_CBM_End
score -10
end
-ContestEffect2_4_score3:
- if_can_participate MON_4, ContestEffectEnd2
+AI_CBM_AvoidStartle_3rdUp:
+ if_can_participate MON_4, AI_CBM_End
score -10
end
-ContestEffect2_2:
- 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
+@ Very good if its the last appeal, otherwise discourage move
+AI_CBM_NoMoreMoves:
+ if_appeal_num_eq 0, AI_CBM_NoMoreMoves_1stAppeal
+ if_appeal_num_eq 1, AI_CBM_NoMoreMoves_2ndAppeal
+ if_appeal_num_eq 2, AI_CBM_NoMoreMoves_3rdAppeal
+ if_appeal_num_eq 3, AI_CBM_NoMoreMoves_4thAppeal
+ if_last_appeal AI_CBM_NoMoreMoves_LastAppeal
end
-ContestEffect2_2_score1:
- if_random 20, ContestEffectEnd2
+AI_CBM_NoMoreMoves_1stAppeal:
+ if_random_less_than 20, AI_CBM_End
score -15
end
-ContestEffect2_2_score2:
- if_random 40, ContestEffectEnd2
+AI_CBM_NoMoreMoves_2ndAppeal:
+ if_random_less_than 40, AI_CBM_End
score -15
end
-ContestEffect2_2_score3:
- if_random 60, ContestEffectEnd2
+AI_CBM_NoMoreMoves_3rdAppeal:
+ if_random_less_than 60, AI_CBM_End
score -15
end
-ContestEffect2_2_score4:
- if_random 80, ContestEffectEnd2
+AI_CBM_NoMoreMoves_4thAppeal:
+ if_random_less_than 80, AI_CBM_End
score -15
end
-ContestEffect2_2_score5:
- if_random 20, ContestEffectEnd2
+AI_CBM_NoMoreMoves_LastAppeal:
+ if_random_less_than 20, AI_CBM_End
score +20
end
-ContestEffectEnd2:
+AI_CBM_End:
end
+@ Encourages/discourages move affected by the move order
+@ e.g. use BETTER_IF_FIRST moves if user is first, dont use AVOID_STARTLE moves if last
AI_CheckOrder:
- if_user_order_eq MON_1, AI_effectcheck1_081DCA4C
- if_user_order_eq MON_2, AI_effectcheck2_081DCA4C
- if_user_order_eq MON_3, AI_effectcheck3_081DCA4C
- if_user_order_eq MON_4, AI_effectcheck4_081DCA4C
+ if_user_order_eq MON_1, AI_CheckOrder_1stUp
+ if_user_order_eq MON_2, AI_CheckOrder_2ndUp
+ if_user_order_eq MON_3, AI_CheckOrder_3rdUp
+ if_user_order_eq MON_4, AI_CheckOrder_Last
end
-AI_effectcheck1_081DCA4C:
- if_effect_eq CONTEST_EFFECT_BETTER_IF_FIRST, AI_score1_081DCA4C
- if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_score2_081DCA4C
- if_effect_type_eq 1, AI_random1_081DCA4C
+AI_CheckOrder_1stUp:
+ if_effect_eq CONTEST_EFFECT_BETTER_IF_FIRST, AI_CheckOrder_1stUp_Encourage
+ if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_CheckOrder_1stUp_Discourage
+ if_effect_type_eq CONTEST_EFFECT_TYPE_AVOID_STARTLE, AI_CheckOrder_1stUp_RandomEncourage
end
-AI_score1_081DCA4C:
+AI_CheckOrder_1stUp_Encourage:
score +15
end
-AI_score2_081DCA4C:
+AI_CheckOrder_1stUp_Discourage:
score -15
end
-AI_random1_081DCA4C:
- if_random 100, ContestEffectEnd2
+AI_CheckOrder_1stUp_RandomEncourage:
+ if_random_less_than 100, AI_CBM_End
score +10
end
-AI_effectcheck2_081DCA4C:
- if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_score3_081DCA4C
- if_effect_type_eq 1, AI_random2_081DCA4C
+AI_CheckOrder_2ndUp:
+ if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_CheckOrder_2ndUp_Discourage
+ if_effect_type_eq CONTEST_EFFECT_TYPE_AVOID_STARTLE, AI_CheckOrder_2ndUp_RandomEncourage
end
-AI_score3_081DCA4C:
+AI_CheckOrder_2ndUp_Discourage:
score -5
end
-AI_random2_081DCA4C:
- if_random 125, ContestEffectEnd2
+AI_CheckOrder_2ndUp_RandomEncourage:
+ if_random_less_than 125, AI_CBM_End
score +10
end
-AI_effectcheck3_081DCA4C:
- if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_score4_081DCA4C
- if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, AI_score4_081DCA4C
- if_effect_eq CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, AI_score4_081DCA4C
+AI_CheckOrder_3rdUp:
+ if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_CheckOrder_3rdUp_Encourage
+ if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, AI_CheckOrder_3rdUp_Encourage
+ if_effect_eq CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, AI_CheckOrder_3rdUp_Encourage
end
-AI_score4_081DCA4C:
+AI_CheckOrder_3rdUp_Encourage:
score +5
end
-AI_effectcheck4_081DCA4C:
- if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_score5_081DCA4C
- if_effect_eq CONTEST_EFFECT_BETTER_IF_LAST, AI_score5_081DCA4C
- if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, AI_score5_081DCA4C
- if_effect_eq CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, AI_score5_081DCA4C
- if_effect_eq CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, AI_score7_081DCA4C
- if_effect_type_eq 1, AI_score6_081DCA4C
- if_effect_type_eq 3, AI_random3_081DCA4C
+AI_CheckOrder_Last:
+ if_effect_eq CONTEST_EFFECT_BETTER_WHEN_LATER, AI_CheckOrder_Last_StronglyEncourage
+ if_effect_eq CONTEST_EFFECT_BETTER_IF_LAST, AI_CheckOrder_Last_StronglyEncourage
+ if_effect_eq CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, AI_CheckOrder_Last_StronglyEncourage
+ if_effect_eq CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, AI_CheckOrder_Last_StronglyEncourage
+ if_effect_eq CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, AI_CheckOrder_Last_Encourage
+ if_effect_type_eq CONTEST_EFFECT_TYPE_AVOID_STARTLE, AI_CheckOrder_Last_Discourage
+ if_effect_type_eq CONTEST_EFFECT_TYPE_STARTLE_MONS, AI_CheckOrder_Last_RandomEncourage
end
-AI_score5_081DCA4C:
+AI_CheckOrder_Last_StronglyEncourage:
score +15
end
-AI_score6_081DCA4C:
+AI_CheckOrder_Last_Discourage:
score -10
end
-AI_random3_081DCA4C:
- if_random 125, ContestEffectEnd2
+AI_CheckOrder_Last_RandomEncourage:
+ if_random_less_than 125, AI_CBM_End
score +10
end
-AI_score7_081DCA4C:
+AI_CheckOrder_Last_Encourage:
score +5
end
diff --git a/include/constants/contest.h b/include/constants/contest.h
index 5ec4c4f69..9eb6b26e4 100644
--- a/include/constants/contest.h
+++ b/include/constants/contest.h
@@ -52,6 +52,37 @@
#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)
+
+// The below scripts are used by every AI contest opponent
+// It includes every non-dummy script
+#define CONTEST_AI_COMMON (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 | \
+ 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
@@ -102,6 +133,16 @@
#define CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED 46
#define CONTEST_EFFECT_DONT_EXCITE_AUDIENCE 47
+// Each of the above effects is grouped into one of these effect type categories
+// Only a few of these get checked by the AI, the rest go unused
+#define CONTEST_EFFECT_TYPE_APPEAL 0
+#define CONTEST_EFFECT_TYPE_AVOID_STARTLE 1
+#define CONTEST_EFFECT_TYPE_STARTLE_MON 2
+#define CONTEST_EFFECT_TYPE_STARTLE_MONS 3
+#define CONTEST_EFFECT_TYPE_WORSEN 4
+#define CONTEST_EFFECT_TYPE_SPECIAL_APPEAL 5
+#define CONTEST_EFFECT_TYPE_TURN_ORDER 6
+
#define COMBO_STARTER_RAIN_DANCE 1
#define COMBO_STARTER_RAGE 2
#define COMBO_STARTER_FOCUS_ENERGY 3
diff --git a/include/contest.h b/include/contest.h
index d008b8fce..1dd4340bd 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -90,7 +90,7 @@ struct ContestPokemon
u8 nickname[POKEMON_NAME_LENGTH + 1];
u8 trainerName[PLAYER_NAME_LENGTH + 1];
u8 trainerGfxId;
- u32 aiChecks;
+ u32 aiFlags;
u8 whichRank:2;
u8 aiPool_Cool:1;
u8 aiPool_Beauty:1;
@@ -201,7 +201,7 @@ struct ContestantStatus
bool8 repeatedMove:1;
bool8 unused2:1;
bool8 repeatedPrevMove:1; // never read
- bool8 unk15_3:1;
+ bool8 completedComboFlag:1;
bool8 hasJudgesAttention:1;
bool8 judgesAttentionWasRemoved:1;
bool8 usedComboMove:1;
@@ -231,10 +231,10 @@ struct ContestAIInfo
/*0x05*/ u8 moveScores[MAX_MON_MOVES];
/*0x09*/ u8 aiAction;
/*0x0A*/ u8 filler[6];
- /*0x10*/ u8 currentAICheck;
- /*0x14*/ u32 aiChecks;
+ /*0x10*/ u8 currentAIFlag;
+ /*0x14*/ u32 aiFlags;
/*0x18*/ s16 scriptResult;
- /*0x1A*/ s16 scriptArr[3];
+ /*0x1A*/ s16 vars[3];
/*0x20*/ const u8 *stack[8];
/*0x40*/ u8 stackSize;
/*0x41*/ u8 contestantId;
diff --git a/src/contest.c b/src/contest.c
index a015c5bab..af9e734fa 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -2789,7 +2789,7 @@ void CreateContestMonFromParty(u8 partyIndex)
gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN;
else
gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_MAY;
- gContestMons[gContestPlayerMonIndex].aiChecks = 0;
+ gContestMons[gContestPlayerMonIndex].aiFlags = 0;
gContestMons[gContestPlayerMonIndex].highestRank = 0;
gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES);
GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name);
@@ -3490,7 +3490,7 @@ static bool8 ContestantCanUseTurn(u8 contestant)
return TRUE;
}
-static void ResetContestantStatuses(void)
+static void SetContestantStatusesForNextRound(void)
{
s32 i;
@@ -4483,7 +4483,7 @@ static void CalculateAppealMoveImpact(u8 contestant)
eContestantStatus[contestant].usedComboMove = TRUE;
eContestantStatus[contestant].hasJudgesAttention = FALSE;
eContestantStatus[contestant].comboAppealBonus = eContestantStatus[contestant].baseAppeal * eContestantStatus[contestant].completedCombo;
- eContestantStatus[contestant].unk15_3 = TRUE;
+ eContestantStatus[contestant].completedComboFlag = TRUE; // Redundant with completedCombo, used by AI
}
else
{
@@ -5172,7 +5172,7 @@ static void Task_ResetForNextRound(u8 taskId)
eContest.waitForLink = TRUE;
if (IsPlayerLinkLeader())
- ResetContestantStatuses();
+ SetContestantStatusesForNextRound();
taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0);
SetTaskFuncWithFollowupFunc(taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink);
ContestPrintLinkStandby();
@@ -5180,7 +5180,7 @@ static void Task_ResetForNextRound(u8 taskId)
}
else
{
- ResetContestantStatuses();
+ SetContestantStatusesForNextRound();
gTasks[taskId].data[0] = 3;
}
break;
@@ -5620,7 +5620,7 @@ void ClearContestWinnerPicsInContestHall(void)
s32 i;
for (i = 0; i < 8; i++)
- gSaveBlock1Ptr->contestWinners[i] = gUnknown_08587FA4[i];
+ gSaveBlock1Ptr->contestWinners[i] = gDefaultContestWinners[i];
}
static void SetContestLiveUpdateFlags(u8 contestant)
diff --git a/src/contest_ai.c b/src/contest_ai.c
index b5e91c314..2f048718f 100644
--- a/src/contest_ai.c
+++ b/src/contest_ai.c
@@ -7,7 +7,7 @@
#include "constants/moves.h"
extern const u8 *gAIScriptPtr;
-extern const u8 *gContestAIChecks[];
+extern const u8 *gContestAI_ScriptsTable[];
static void ContestAICmd_score(void);
static void ContestAICmd_get_appeal_num(void);
@@ -30,22 +30,22 @@ static void ContestAICmd_if_user_condition_less_than(void);
static void ContestAICmd_if_user_condition_more_than(void);
static void ContestAICmd_if_user_condition_eq(void);
static void ContestAICmd_if_user_condition_not_eq(void);
-static void ContestAICmd_unk_15(void);
-static void ContestAICmd_unk_16(void);
-static void ContestAICmd_unk_17(void);
-static void ContestAICmd_unk_18(void);
-static void ContestAICmd_unk_19(void);
-static void ContestAICmd_unk_1A(void);
-static void ContestAICmd_unk_1B(void);
-static void ContestAICmd_unk_1C(void);
-static void ContestAICmd_unk_1D(void);
-static void ContestAICmd_unk_1E(void);
+static void ContestAICmd_get_points(void);
+static void ContestAICmd_if_points_less_than(void);
+static void ContestAICmd_if_points_more_than(void);
+static void ContestAICmd_if_points_eq(void);
+static void ContestAICmd_if_points_not_eq(void);
+static void ContestAICmd_get_preliminary_points(void);
+static void ContestAICmd_if_preliminary_points_less_than(void);
+static void ContestAICmd_if_preliminary_points_more_than(void);
+static void ContestAICmd_if_preliminary_points_eq(void);
+static void ContestAICmd_if_preliminary_points_not_eq(void);
static void ContestAICmd_get_contest_type(void);
static void ContestAICmd_if_contest_type_eq(void);
static void ContestAICmd_if_contest_type_not_eq(void);
static void ContestAICmd_get_move_excitement(void);
static void ContestAICmd_if_move_excitement_less_than(void);
-static void ContestAICmd_if_move_excitement_greater_than(void);
+static void ContestAICmd_if_move_excitement_more_than(void);
static void ContestAICmd_if_move_excitement_eq(void);
static void ContestAICmd_if_move_excitement_not_eq(void);
static void ContestAICmd_get_move_effect(void);
@@ -56,18 +56,18 @@ static void ContestAICmd_if_move_effect_type_eq(void);
static void ContestAICmd_if_move_effect_type_not_eq(void);
static void ContestAICmd_check_most_appealing_move(void);
static void ContestAICmd_if_most_appealing_move(void);
-static void ContestAICmd_unk_2F(void);
-static void ContestAICmd_unk_30(void);
-static void ContestAICmd_unk_31(void);
-static void ContestAICmd_unk_32(void);
-static void ContestAICmd_unk_33(void);
-static void ContestAICmd_unk_34(void);
-static void ContestAICmd_unk_35(void);
-static void ContestAICmd_unk_36(void);
-static void ContestAICmd_unk_37(void);
-static void ContestAICmd_unk_38(void);
-static void ContestAICmd_unk_39(void);
-static void ContestAICmd_unk_3A(void);
+static void ContestAICmd_check_most_jamming_move(void);
+static void ContestAICmd_if_most_jamming_move(void);
+static void ContestAICmd_get_num_move_hearts(void);
+static void ContestAICmd_if_num_move_hearts_less_than(void);
+static void ContestAICmd_if_num_move_hearts_more_than(void);
+static void ContestAICmd_if_num_move_hearts_eq(void);
+static void ContestAICmd_if_num_move_hearts_not_eq(void);
+static void ContestAICmd_get_num_move_jam_hearts(void);
+static void ContestAICmd_if_num_move_jam_hearts_less_than(void);
+static void ContestAICmd_if_num_move_jam_hearts_more_than(void);
+static void ContestAICmd_if_num_move_jam_hearts_eq(void);
+static void ContestAICmd_if_num_move_jam_hearts_not_eq(void);
static void ContestAICmd_get_move_used_count(void);
static void ContestAICmd_if_most_used_count_less_than(void);
static void ContestAICmd_if_most_used_count_more_than(void);
@@ -95,197 +95,197 @@ static void ContestAICmd_if_used_combo_starter_not_eq(void);
static void ContestAICmd_check_can_participate(void);
static void ContestAICmd_if_can_participate(void);
static void ContestAICmd_if_cannot_participate(void);
-static void ContestAICmd_get_val_812A188(void);
-static void ContestAICmd_unk_57(void);
-static void ContestAICmd_contest_58(void);
-static void ContestAICmd_unk_59(void);
-static void ContestAICmd_unk_5A(void);
-static void ContestAICmd_unk_5B(void);
-static void ContestAICmd_unk_5C(void);
-static void ContestAICmd_unk_5D(void);
-static void ContestAICmd_unk_5E(void);
-static void ContestAICmd_unk_5F(void);
-static void ContestAICmd_unk_60(void);
-static void ContestAICmd_unk_61(void);
-static void ContestAICmd_unk_62(void);
-static void ContestAICmd_unk_63(void);
-static void ContestAICmd_unk_64(void);
-static void ContestAICmd_unk_65(void);
-static void ContestAICmd_unk_66(void);
-static void ContestAICmd_unk_67(void);
-static void ContestAICmd_unk_68(void);
-static void ContestAICmd_unk_69(void);
-static void ContestAICmd_unk_6A(void);
-static void ContestAICmd_unk_6B(void);
-static void ContestAICmd_unk_6C(void);
-static void ContestAICmd_unk_6D(void);
-static void ContestAICmd_unk_6E(void);
-static void ContestAICmd_unk_6F(void);
-static void ContestAICmd_unk_70(void);
-static void ContestAICmd_unk_71(void);
-static void ContestAICmd_unk_72(void);
-static void ContestAICmd_unk_73(void);
-static void ContestAICmd_unk_74(void);
-static void ContestAICmd_unk_75(void);
-static void ContestAICmd_unk_76(void);
-static void ContestAICmd_unk_77(void);
-static void ContestAICmd_unk_78(void);
-static void ContestAICmd_unk_79(void);
-static void ContestAICmd_unk_7A(void);
-static void ContestAICmd_unk_7B(void);
-static void ContestAICmd_unk_7C(void);
-static void ContestAICmd_if_random(void);
-static void ContestAICmd_unk_7E(void);
-static void ContestAICmd_jump(void);
+static void ContestAICmd_get_completed_combo(void);
+static void ContestAICmd_if_completed_combo(void);
+static void ContestAICmd_if_not_completed_combo(void);
+static void ContestAICmd_get_points_diff(void);
+static void ContestAICmd_if_points_more_than_mon(void);
+static void ContestAICmd_if_points_less_than_mon(void);
+static void ContestAICmd_if_points_eq_mon(void);
+static void ContestAICmd_if_points_not_eq_mon(void);
+static void ContestAICmd_get_preliminary_points_diff(void);
+static void ContestAICmd_if_preliminary_points_more_than_mon(void);
+static void ContestAICmd_if_preliminary_points_less_than_mon(void);
+static void ContestAICmd_if_preliminary_points_eq_mon(void);
+static void ContestAICmd_if_preliminary_points_not_eq_mon(void);
+static void ContestAICmd_get_used_moves_effect(void);
+static void ContestAICmd_if_used_moves_effect_less_than(void);
+static void ContestAICmd_if_used_moves_effect_more_than(void);
+static void ContestAICmd_if_used_moves_effect_eq(void);
+static void ContestAICmd_if_used_moves_effect_not_eq(void);
+static void ContestAICmd_get_used_moves_excitement(void);
+static void ContestAICmd_if_used_moves_excitement_less_than(void);
+static void ContestAICmd_if_used_moves_excitement_more_than(void);
+static void ContestAICmd_if_used_moves_excitement_eq(void);
+static void ContestAICmd_if_used_moves_excitement_not_eq(void);
+static void ContestAICmd_get_used_moves_effect_type(void);
+static void ContestAICmd_if_used_moves_effect_type_eq(void);
+static void ContestAICmd_if_used_moves_effect_type_not_eq(void);
+static void ContestAICmd_save_result(void);
+static void ContestAICmd_setvar(void);
+static void ContestAICmd_add(void);
+static void ContestAICmd_addvar(void);
+static void ContestAICmd_addvar_duplicate(void);
+static void ContestAICmd_if_less_than(void);
+static void ContestAICmd_if_greater_than(void);
+static void ContestAICmd_if_eq(void);
+static void ContestAICmd_if_not_eq(void);
+static void ContestAICmd_if_less_than_var(void);
+static void ContestAICmd_if_greater_than_var(void);
+static void ContestAICmd_if_eq_var(void);
+static void ContestAICmd_if_not_eq_var(void);
+static void ContestAICmd_if_random_less_than(void);
+static void ContestAICmd_if_random_greater_than(void);
+static void ContestAICmd_goto(void);
static void ContestAICmd_call(void);
static void ContestAICmd_end(void);
static void ContestAICmd_check_user_has_exciting_move(void);
static void ContestAICmd_if_user_has_exciting_move(void);
static void ContestAICmd_if_user_doesnt_have_exciting_move(void);
-static void ContestAICmd_unk_85(void);
-static void ContestAICmd_unk_86(void);
-static void ContestAICmd_if_effect_in_user_moveset(void);
+static void ContestAICmd_check_user_has_move(void);
+static void ContestAICmd_if_user_has_move(void);
+static void ContestAICmd_if_user_doesnt_have_move(void);
typedef void (* ContestAICmdFunc)(void);
static const ContestAICmdFunc sContestAICmdTable[] =
{
- ContestAICmd_score, // 0x00
- 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
- ContestAICmd_if_excitement_eq, // 0x09
- ContestAICmd_if_excitement_not_eq, // 0x0A
- ContestAICmd_get_user_order, // 0x0B
- ContestAICmd_if_user_order_less_than, // 0x0C
- ContestAICmd_if_user_order_more_than, // 0x0D
- ContestAICmd_if_user_order_eq, // 0x0E
- ContestAICmd_if_user_order_not_eq, // 0x0F
- ContestAICmd_get_user_condition, // 0x10
- ContestAICmd_if_user_condition_less_than, // 0x11
- ContestAICmd_if_user_condition_more_than, // 0x12
- ContestAICmd_if_user_condition_eq, // 0x13
- ContestAICmd_if_user_condition_not_eq, // 0x14
- ContestAICmd_unk_15, // 0x15
- ContestAICmd_unk_16, // 0x16
- ContestAICmd_unk_17, // 0x17
- ContestAICmd_unk_18, // 0x18
- ContestAICmd_unk_19, // 0x19
- ContestAICmd_unk_1A, // 0x1A
- ContestAICmd_unk_1B, // 0x1B
- ContestAICmd_unk_1C, // 0x1C
- ContestAICmd_unk_1D, // 0x1D
- ContestAICmd_unk_1E, // 0x1E
- ContestAICmd_get_contest_type, // 0x1F
- ContestAICmd_if_contest_type_eq, // 0x20
- ContestAICmd_if_contest_type_not_eq, // 0x21
- ContestAICmd_get_move_excitement, // 0x22
- ContestAICmd_if_move_excitement_less_than, // 0x23
- ContestAICmd_if_move_excitement_greater_than, // 0x24
- ContestAICmd_if_move_excitement_eq, // 0x25
- ContestAICmd_if_move_excitement_not_eq, // 0x26
- ContestAICmd_get_move_effect, // 0x27
- ContestAICmd_if_move_effect_eq, // 0x28
- ContestAICmd_if_move_effect_not_eq, // 0x29
- ContestAICmd_get_move_effect_type, // 0x2A
- ContestAICmd_if_move_effect_type_eq, // 0x2B
- ContestAICmd_if_move_effect_type_not_eq, // 0x2C
- ContestAICmd_check_most_appealing_move, // 0x2D
- ContestAICmd_if_most_appealing_move, // 0x2E
- ContestAICmd_unk_2F, // 0x2F
- ContestAICmd_unk_30, // 0x30
- ContestAICmd_unk_31, // 0x31
- ContestAICmd_unk_32, // 0x32
- ContestAICmd_unk_33, // 0x33
- ContestAICmd_unk_34, // 0x34
- ContestAICmd_unk_35, // 0x35
- ContestAICmd_unk_36, // 0x36
- ContestAICmd_unk_37, // 0x37
- ContestAICmd_unk_38, // 0x38
- ContestAICmd_unk_39, // 0x39
- ContestAICmd_unk_3A, // 0x3A
- ContestAICmd_get_move_used_count, // 0x3B
- ContestAICmd_if_most_used_count_less_than, // 0x3C
- ContestAICmd_if_most_used_count_more_than, // 0x3D
- ContestAICmd_if_most_used_count_eq, // 0x3E
- ContestAICmd_if_most_used_count_not_eq, // 0x3F
- ContestAICmd_check_combo_starter, // 0x40
- ContestAICmd_if_combo_starter, // 0x41
- ContestAICmd_if_not_combo_starter, // 0x42
- ContestAICmd_check_combo_finisher, // 0x43
- ContestAICmd_if_combo_finisher, // 0x44
- ContestAICmd_if_not_combo_finisher, // 0x45
- ContestAICmd_check_would_finish_combo, // 0x46
- ContestAICmd_if_would_finish_combo, // 0x47
- ContestAICmd_if_would_not_finish_combo, // 0x48
- ContestAICmd_get_condition, // 0x49
- ContestAICmd_if_condition_less_than, // 0x4A
- ContestAICmd_if_condition_more_than, // 0x4B
- ContestAICmd_if_condition_eq, // 0x4C
- ContestAICmd_if_condition_not_eq, // 0x4D
- ContestAICmd_get_used_combo_starter, // 0x4E
- ContestAICmd_if_used_combo_starter_less_than, // 0x4F
- ContestAICmd_if_used_combo_starter_more_than, // 0x50
- ContestAICmd_if_used_combo_starter_eq, // 0x51
- ContestAICmd_if_used_combo_starter_not_eq, // 0x52
- ContestAICmd_check_can_participate, // 0x53
- ContestAICmd_if_can_participate, // 0x54
- ContestAICmd_if_cannot_participate, // 0x55
- ContestAICmd_get_val_812A188, // 0x56
- ContestAICmd_unk_57, // 0x57
- ContestAICmd_contest_58, // 0x58
- ContestAICmd_unk_59, // 0x59
- ContestAICmd_unk_5A, // 0x5A
- ContestAICmd_unk_5B, // 0x5B
- ContestAICmd_unk_5C, // 0x5C
- ContestAICmd_unk_5D, // 0x5D
- ContestAICmd_unk_5E, // 0x5E
- ContestAICmd_unk_5F, // 0x5F
- ContestAICmd_unk_60, // 0x60
- ContestAICmd_unk_61, // 0x61
- ContestAICmd_unk_62, // 0x62
- ContestAICmd_unk_63, // 0x63
- ContestAICmd_unk_64, // 0x64
- ContestAICmd_unk_65, // 0x65
- ContestAICmd_unk_66, // 0x66
- ContestAICmd_unk_67, // 0x67
- ContestAICmd_unk_68, // 0x68
- ContestAICmd_unk_69, // 0x69
- ContestAICmd_unk_6A, // 0x6A
- ContestAICmd_unk_6B, // 0x6B
- ContestAICmd_unk_6C, // 0x6C
- ContestAICmd_unk_6D, // 0x6D
- ContestAICmd_unk_6E, // 0x6E
- ContestAICmd_unk_6F, // 0x6F
- ContestAICmd_unk_70, // 0x70
- ContestAICmd_unk_71, // 0x71
- ContestAICmd_unk_72, // 0x72
- ContestAICmd_unk_73, // 0x73
- ContestAICmd_unk_74, // 0x74
- ContestAICmd_unk_75, // 0x75
- ContestAICmd_unk_76, // 0x76
- ContestAICmd_unk_77, // 0x77
- ContestAICmd_unk_78, // 0x78
- ContestAICmd_unk_79, // 0x79
- ContestAICmd_unk_7A, // 0x7A
- ContestAICmd_unk_7B, // 0x7B
- ContestAICmd_unk_7C, // 0x7C
- ContestAICmd_if_random, // 0x7D
- ContestAICmd_unk_7E, // 0x7E
- ContestAICmd_jump, // 0x7F
- ContestAICmd_call, // 0x80
- ContestAICmd_end, // 0x81
- ContestAICmd_check_user_has_exciting_move, // 0x82
- ContestAICmd_if_user_has_exciting_move, // 0x83
- ContestAICmd_if_user_doesnt_have_exciting_move, // 0x84
- ContestAICmd_unk_85, // 0x85
- ContestAICmd_unk_86, // 0x86
- ContestAICmd_if_effect_in_user_moveset, // 0x87
+ ContestAICmd_score, // 0x00
+ 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
+ ContestAICmd_if_excitement_eq, // 0x09
+ ContestAICmd_if_excitement_not_eq, // 0x0A
+ ContestAICmd_get_user_order, // 0x0B
+ ContestAICmd_if_user_order_less_than, // 0x0C
+ ContestAICmd_if_user_order_more_than, // 0x0D
+ ContestAICmd_if_user_order_eq, // 0x0E
+ ContestAICmd_if_user_order_not_eq, // 0x0F
+ ContestAICmd_get_user_condition, // 0x10
+ ContestAICmd_if_user_condition_less_than, // 0x11
+ ContestAICmd_if_user_condition_more_than, // 0x12
+ ContestAICmd_if_user_condition_eq, // 0x13
+ ContestAICmd_if_user_condition_not_eq, // 0x14
+ ContestAICmd_get_points, // 0x15
+ ContestAICmd_if_points_less_than, // 0x16
+ ContestAICmd_if_points_more_than, // 0x17
+ ContestAICmd_if_points_eq, // 0x18
+ ContestAICmd_if_points_not_eq, // 0x19
+ ContestAICmd_get_preliminary_points, // 0x1A
+ ContestAICmd_if_preliminary_points_less_than, // 0x1B
+ ContestAICmd_if_preliminary_points_more_than, // 0x1C
+ ContestAICmd_if_preliminary_points_eq, // 0x1D
+ ContestAICmd_if_preliminary_points_not_eq, // 0x1E
+ ContestAICmd_get_contest_type, // 0x1F
+ ContestAICmd_if_contest_type_eq, // 0x20
+ ContestAICmd_if_contest_type_not_eq, // 0x21
+ ContestAICmd_get_move_excitement, // 0x22
+ ContestAICmd_if_move_excitement_less_than, // 0x23
+ ContestAICmd_if_move_excitement_more_than, // 0x24
+ ContestAICmd_if_move_excitement_eq, // 0x25
+ ContestAICmd_if_move_excitement_not_eq, // 0x26
+ ContestAICmd_get_move_effect, // 0x27
+ ContestAICmd_if_move_effect_eq, // 0x28
+ ContestAICmd_if_move_effect_not_eq, // 0x29
+ ContestAICmd_get_move_effect_type, // 0x2A
+ ContestAICmd_if_move_effect_type_eq, // 0x2B
+ ContestAICmd_if_move_effect_type_not_eq, // 0x2C
+ ContestAICmd_check_most_appealing_move, // 0x2D
+ ContestAICmd_if_most_appealing_move, // 0x2E
+ ContestAICmd_check_most_jamming_move, // 0x2F
+ ContestAICmd_if_most_jamming_move, // 0x30
+ ContestAICmd_get_num_move_hearts, // 0x31
+ ContestAICmd_if_num_move_hearts_less_than, // 0x32
+ ContestAICmd_if_num_move_hearts_more_than, // 0x33
+ ContestAICmd_if_num_move_hearts_eq, // 0x34
+ ContestAICmd_if_num_move_hearts_not_eq, // 0x35
+ ContestAICmd_get_num_move_jam_hearts, // 0x36
+ ContestAICmd_if_num_move_jam_hearts_less_than, // 0x37
+ ContestAICmd_if_num_move_jam_hearts_more_than, // 0x38
+ ContestAICmd_if_num_move_jam_hearts_eq, // 0x39
+ ContestAICmd_if_num_move_jam_hearts_not_eq, // 0x3A
+ ContestAICmd_get_move_used_count, // 0x3B
+ ContestAICmd_if_most_used_count_less_than, // 0x3C
+ ContestAICmd_if_most_used_count_more_than, // 0x3D
+ ContestAICmd_if_most_used_count_eq, // 0x3E
+ ContestAICmd_if_most_used_count_not_eq, // 0x3F
+ ContestAICmd_check_combo_starter, // 0x40
+ ContestAICmd_if_combo_starter, // 0x41
+ ContestAICmd_if_not_combo_starter, // 0x42
+ ContestAICmd_check_combo_finisher, // 0x43
+ ContestAICmd_if_combo_finisher, // 0x44
+ ContestAICmd_if_not_combo_finisher, // 0x45
+ ContestAICmd_check_would_finish_combo, // 0x46
+ ContestAICmd_if_would_finish_combo, // 0x47
+ ContestAICmd_if_would_not_finish_combo, // 0x48
+ ContestAICmd_get_condition, // 0x49
+ ContestAICmd_if_condition_less_than, // 0x4A
+ ContestAICmd_if_condition_more_than, // 0x4B
+ ContestAICmd_if_condition_eq, // 0x4C
+ ContestAICmd_if_condition_not_eq, // 0x4D
+ ContestAICmd_get_used_combo_starter, // 0x4E
+ ContestAICmd_if_used_combo_starter_less_than, // 0x4F
+ ContestAICmd_if_used_combo_starter_more_than, // 0x50
+ ContestAICmd_if_used_combo_starter_eq, // 0x51
+ ContestAICmd_if_used_combo_starter_not_eq, // 0x52
+ ContestAICmd_check_can_participate, // 0x53
+ ContestAICmd_if_can_participate, // 0x54
+ ContestAICmd_if_cannot_participate, // 0x55
+ ContestAICmd_get_completed_combo, // 0x56
+ ContestAICmd_if_completed_combo, // 0x57
+ ContestAICmd_if_not_completed_combo, // 0x58
+ ContestAICmd_get_points_diff, // 0x59
+ ContestAICmd_if_points_more_than_mon, // 0x5A
+ ContestAICmd_if_points_less_than_mon, // 0x5B
+ ContestAICmd_if_points_eq_mon, // 0x5C
+ ContestAICmd_if_points_not_eq_mon, // 0x5D
+ ContestAICmd_get_preliminary_points_diff, // 0x5E
+ ContestAICmd_if_preliminary_points_more_than_mon, // 0x5F
+ ContestAICmd_if_preliminary_points_less_than_mon, // 0x60
+ ContestAICmd_if_preliminary_points_eq_mon, // 0x61
+ ContestAICmd_if_preliminary_points_not_eq_mon, // 0x62
+ ContestAICmd_get_used_moves_effect, // 0x63
+ ContestAICmd_if_used_moves_effect_less_than, // 0x64
+ ContestAICmd_if_used_moves_effect_more_than, // 0x65
+ ContestAICmd_if_used_moves_effect_eq, // 0x66
+ ContestAICmd_if_used_moves_effect_not_eq, // 0x67
+ ContestAICmd_get_used_moves_excitement, // 0x68
+ ContestAICmd_if_used_moves_excitement_less_than, // 0x69
+ ContestAICmd_if_used_moves_excitement_more_than, // 0x6A
+ ContestAICmd_if_used_moves_excitement_eq, // 0x6B
+ ContestAICmd_if_used_moves_excitement_not_eq, // 0x6C
+ ContestAICmd_get_used_moves_effect_type, // 0x6D
+ ContestAICmd_if_used_moves_effect_type_eq, // 0x6E
+ ContestAICmd_if_used_moves_effect_type_not_eq, // 0x6F
+ ContestAICmd_save_result, // 0x70
+ ContestAICmd_setvar, // 0x71
+ ContestAICmd_add, // 0x72
+ ContestAICmd_addvar, // 0x73
+ ContestAICmd_addvar_duplicate, // 0x74
+ ContestAICmd_if_less_than, // 0x75
+ ContestAICmd_if_greater_than, // 0x76
+ ContestAICmd_if_eq, // 0x77
+ ContestAICmd_if_not_eq, // 0x78
+ ContestAICmd_if_less_than_var, // 0x79
+ ContestAICmd_if_greater_than_var, // 0x7A
+ ContestAICmd_if_eq_var, // 0x7B
+ ContestAICmd_if_not_eq_var, // 0x7C
+ ContestAICmd_if_random_less_than, // 0x7D
+ ContestAICmd_if_random_greater_than, // 0x7E
+ ContestAICmd_goto, // 0x7F
+ ContestAICmd_call, // 0x80
+ ContestAICmd_end, // 0x81
+ ContestAICmd_check_user_has_exciting_move, // 0x82
+ ContestAICmd_if_user_has_exciting_move, // 0x83
+ ContestAICmd_if_user_doesnt_have_exciting_move, // 0x84
+ ContestAICmd_check_user_has_move, // 0x85
+ ContestAICmd_if_user_has_move, // 0x86
+ ContestAICmd_if_user_doesnt_have_move, // 0x87
};
static void ContestAI_DoAIProcessing(void);
@@ -303,20 +303,20 @@ void ContestAI_ResetAI(u8 contestantAI)
eContestAI.contestantId = contestantAI;
eContestAI.stackSize = 0;
- eContestAI.aiChecks = gContestMons[eContestAI.contestantId].aiChecks;
+ eContestAI.aiFlags = gContestMons[eContestAI.contestantId].aiFlags;
}
u8 ContestAI_GetActionToUse(void)
{
- while (eContestAI.aiChecks != 0)
+ while (eContestAI.aiFlags != 0)
{
- if (eContestAI.aiChecks & 1)
+ if (eContestAI.aiFlags & 1)
{
eContestAI.aiState = CONTESTAI_SETTING_UP;
ContestAI_DoAIProcessing();
}
- eContestAI.aiChecks >>= 1;
- eContestAI.currentAICheck++;
+ eContestAI.aiFlags >>= 1;
+ eContestAI.currentAIFlag++;
eContestAI.nextMoveIndex = 0;
}
@@ -346,7 +346,7 @@ static void ContestAI_DoAIProcessing(void)
case CONTESTAI_DO_NOT_PROCESS:
break;
case CONTESTAI_SETTING_UP:
- gAIScriptPtr = gContestAIChecks[eContestAI.currentAICheck];
+ gAIScriptPtr = gContestAI_ScriptsTable[eContestAI.currentAIFlag];
if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == MOVE_NONE)
eContestAI.nextMove = MOVE_NONE; // don't process a move that doesn't exist.
@@ -588,15 +588,15 @@ static void ContestAICmd_if_user_condition_not_eq(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_15(void)
+static void ContestAICmd_get_points(void)
{
eContestAI.scriptResult = eContestantStatus[eContestAI.contestantId].pointTotal;
gAIScriptPtr += 1;
}
-static void ContestAICmd_unk_16(void)
+static void ContestAICmd_if_points_less_than(void)
{
- ContestAICmd_unk_15();
+ ContestAICmd_get_points();
if (eContestAI.scriptResult < (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -604,9 +604,9 @@ static void ContestAICmd_unk_16(void)
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_17(void)
+static void ContestAICmd_if_points_more_than(void)
{
- ContestAICmd_unk_15();
+ ContestAICmd_get_points();
if (eContestAI.scriptResult > (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -614,9 +614,9 @@ static void ContestAICmd_unk_17(void)
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_18(void)
+static void ContestAICmd_if_points_eq(void)
{
- ContestAICmd_unk_15();
+ ContestAICmd_get_points();
if (eContestAI.scriptResult == (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -624,9 +624,9 @@ static void ContestAICmd_unk_18(void)
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_19(void)
+static void ContestAICmd_if_points_not_eq(void)
{
- ContestAICmd_unk_15();
+ ContestAICmd_get_points();
if (eContestAI.scriptResult != (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -634,15 +634,15 @@ static void ContestAICmd_unk_19(void)
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_1A(void)
+static void ContestAICmd_get_preliminary_points(void)
{
eContestAI.scriptResult = gContestMonRound1Points[eContestAI.contestantId];
gAIScriptPtr += 1;
}
-static void ContestAICmd_unk_1B(void)
+static void ContestAICmd_if_preliminary_points_less_than(void)
{
- ContestAICmd_unk_1A();
+ ContestAICmd_get_preliminary_points();
if (eContestAI.scriptResult < (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -650,9 +650,9 @@ static void ContestAICmd_unk_1B(void)
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_1C(void)
+static void ContestAICmd_if_preliminary_points_more_than(void)
{
- ContestAICmd_unk_1A();
+ ContestAICmd_get_preliminary_points();
if (eContestAI.scriptResult > (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -660,9 +660,9 @@ static void ContestAICmd_unk_1C(void)
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_1D(void)
+static void ContestAICmd_if_preliminary_points_eq(void)
{
- ContestAICmd_unk_1A();
+ ContestAICmd_get_preliminary_points();
if (eContestAI.scriptResult == (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -670,9 +670,9 @@ static void ContestAICmd_unk_1D(void)
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_1E(void)
+static void ContestAICmd_if_preliminary_points_not_eq(void)
{
- ContestAICmd_unk_1A();
+ ContestAICmd_get_preliminary_points();
if (eContestAI.scriptResult != (s16)T1_READ_16(gAIScriptPtr + 0))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -722,7 +722,7 @@ static void ContestAICmd_if_move_excitement_less_than(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_if_move_excitement_greater_than(void)
+static void ContestAICmd_if_move_excitement_more_than(void)
{
ContestAICmd_get_move_excitement();
@@ -839,7 +839,7 @@ static void ContestAICmd_if_most_appealing_move(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_2F(void)
+static void ContestAICmd_check_most_jamming_move(void)
{
int i;
u16 move = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex];
@@ -848,7 +848,7 @@ static void ContestAICmd_unk_2F(void)
for (i = 0; i < MAX_MON_MOVES; i++)
{
u16 newMove = gContestMons[eContestAI.contestantId].moves[i];
- if (newMove != 0 && jam < gContestEffects[gContestMoves[newMove].effect].jam)
+ if (newMove != MOVE_NONE && jam < gContestEffects[gContestMoves[newMove].effect].jam)
break;
}
@@ -860,9 +860,9 @@ static void ContestAICmd_unk_2F(void)
gAIScriptPtr += 1;
}
-static void ContestAICmd_unk_30(void)
+static void ContestAICmd_if_most_jamming_move(void)
{
- ContestAICmd_unk_2F();
+ ContestAICmd_check_most_jamming_move();
if (eContestAI.scriptResult != FALSE)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -870,7 +870,7 @@ static void ContestAICmd_unk_30(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_31(void)
+static void ContestAICmd_get_num_move_hearts(void)
{
u16 move = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex];
@@ -878,9 +878,9 @@ static void ContestAICmd_unk_31(void)
gAIScriptPtr += 1;
}
-static void ContestAICmd_unk_32(void)
+static void ContestAICmd_if_num_move_hearts_less_than(void)
{
- ContestAICmd_unk_31();
+ ContestAICmd_get_num_move_hearts();
if (eContestAI.scriptResult < gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -888,9 +888,9 @@ static void ContestAICmd_unk_32(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_33(void)
+static void ContestAICmd_if_num_move_hearts_more_than(void)
{
- ContestAICmd_unk_31();
+ ContestAICmd_get_num_move_hearts();
if (eContestAI.scriptResult > gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -898,9 +898,9 @@ static void ContestAICmd_unk_33(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_34(void)
+static void ContestAICmd_if_num_move_hearts_eq(void)
{
- ContestAICmd_unk_31();
+ ContestAICmd_get_num_move_hearts();
if (eContestAI.scriptResult == gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -908,9 +908,9 @@ static void ContestAICmd_unk_34(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_35(void)
+static void ContestAICmd_if_num_move_hearts_not_eq(void)
{
- ContestAICmd_unk_31();
+ ContestAICmd_get_num_move_hearts();
if (eContestAI.scriptResult != gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -918,7 +918,7 @@ static void ContestAICmd_unk_35(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_36(void)
+static void ContestAICmd_get_num_move_jam_hearts(void)
{
u16 move = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex];
@@ -926,9 +926,9 @@ static void ContestAICmd_unk_36(void)
gAIScriptPtr += 1;
}
-static void ContestAICmd_unk_37(void)
+static void ContestAICmd_if_num_move_jam_hearts_less_than(void)
{
- ContestAICmd_unk_36();
+ ContestAICmd_get_num_move_jam_hearts();
if (eContestAI.scriptResult < gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -936,9 +936,9 @@ static void ContestAICmd_unk_37(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_38(void)
+static void ContestAICmd_if_num_move_jam_hearts_more_than(void)
{
- ContestAICmd_unk_36();
+ ContestAICmd_get_num_move_jam_hearts();
if (eContestAI.scriptResult > gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -946,9 +946,9 @@ static void ContestAICmd_unk_38(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_39(void)
+static void ContestAICmd_if_num_move_jam_hearts_eq(void)
{
- ContestAICmd_unk_36();
+ ContestAICmd_get_num_move_jam_hearts();
if (eContestAI.scriptResult == gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -956,9 +956,9 @@ static void ContestAICmd_unk_39(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_3A(void)
+static void ContestAICmd_if_num_move_jam_hearts_not_eq(void)
{
- ContestAICmd_unk_36();
+ ContestAICmd_get_num_move_jam_hearts();
if (eContestAI.scriptResult != gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1050,7 +1050,7 @@ static void ContestAICmd_if_combo_starter(void)
{
ContestAICmd_check_combo_starter();
- if (eContestAI.scriptResult != 0)
+ if (eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1060,7 +1060,7 @@ static void ContestAICmd_if_not_combo_starter(void)
{
ContestAICmd_check_combo_starter();
- if (eContestAI.scriptResult == 0)
+ if (!eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1096,7 +1096,7 @@ static void ContestAICmd_if_combo_finisher(void)
{
ContestAICmd_check_combo_finisher();
- if (eContestAI.scriptResult != 0)
+ if (eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1106,7 +1106,7 @@ static void ContestAICmd_if_not_combo_finisher(void)
{
ContestAICmd_check_combo_finisher();
- if (eContestAI.scriptResult == 0)
+ if (!eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1131,7 +1131,7 @@ static void ContestAICmd_if_would_finish_combo(void)
{
ContestAICmd_check_would_finish_combo();
- if (eContestAI.scriptResult != 0)
+ if (eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1141,7 +1141,7 @@ static void ContestAICmd_if_would_not_finish_combo(void)
{
ContestAICmd_check_would_finish_combo();
- if (eContestAI.scriptResult == 0)
+ if (!eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1261,7 +1261,7 @@ static void ContestAICmd_if_can_participate(void)
{
ContestAICmd_check_can_participate();
- if (eContestAI.scriptResult != 0)
+ if (eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1271,41 +1271,41 @@ static void ContestAICmd_if_cannot_participate(void)
{
ContestAICmd_check_can_participate();
- if (eContestAI.scriptResult == 0)
+ if (!eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
}
-static void ContestAICmd_get_val_812A188(void)
+static void ContestAICmd_get_completed_combo(void)
{
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- eContestAI.scriptResult = eContestantStatus[contestant].unk15_3;
+ eContestAI.scriptResult = eContestantStatus[contestant].completedComboFlag;
gAIScriptPtr += 2;
}
-static void ContestAICmd_unk_57(void)
+static void ContestAICmd_if_completed_combo(void)
{
- ContestAICmd_get_val_812A188();
+ ContestAICmd_get_completed_combo();
- if (eContestAI.scriptResult != 0)
+ if (eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
}
-static void ContestAICmd_contest_58(void)
+static void ContestAICmd_if_not_completed_combo(void)
{
- ContestAICmd_get_val_812A188();
+ ContestAICmd_get_completed_combo();
- if (eContestAI.scriptResult == 0)
+ if (!eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_59(void)
+static void ContestAICmd_get_points_diff(void)
{
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
@@ -1313,9 +1313,9 @@ static void ContestAICmd_unk_59(void)
gAIScriptPtr += 2;
}
-static void ContestAICmd_unk_5A(void)
+static void ContestAICmd_if_points_more_than_mon(void)
{
- ContestAICmd_unk_59();
+ ContestAICmd_get_points_diff();
if (eContestAI.scriptResult < 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1323,9 +1323,9 @@ static void ContestAICmd_unk_5A(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_5B(void)
+static void ContestAICmd_if_points_less_than_mon(void)
{
- ContestAICmd_unk_59();
+ ContestAICmd_get_points_diff();
if (eContestAI.scriptResult > 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1333,9 +1333,9 @@ static void ContestAICmd_unk_5B(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_5C(void)
+static void ContestAICmd_if_points_eq_mon(void)
{
- ContestAICmd_unk_59();
+ ContestAICmd_get_points_diff();
if (eContestAI.scriptResult == 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1343,9 +1343,9 @@ static void ContestAICmd_unk_5C(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_5D(void)
+static void ContestAICmd_if_points_not_eq_mon(void)
{
- ContestAICmd_unk_59();
+ ContestAICmd_get_points_diff();
if (eContestAI.scriptResult != 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1353,7 +1353,7 @@ static void ContestAICmd_unk_5D(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_5E(void)
+static void ContestAICmd_get_preliminary_points_diff(void)
{
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
@@ -1361,9 +1361,9 @@ static void ContestAICmd_unk_5E(void)
gAIScriptPtr += 2;
}
-static void ContestAICmd_unk_5F(void)
+static void ContestAICmd_if_preliminary_points_more_than_mon(void)
{
- ContestAICmd_unk_5E();
+ ContestAICmd_get_preliminary_points_diff();
if (eContestAI.scriptResult < 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1371,9 +1371,9 @@ static void ContestAICmd_unk_5F(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_60(void)
+static void ContestAICmd_if_preliminary_points_less_than_mon(void)
{
- ContestAICmd_unk_5E();
+ ContestAICmd_get_preliminary_points_diff();
if (eContestAI.scriptResult > 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1381,9 +1381,9 @@ static void ContestAICmd_unk_60(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_61(void)
+static void ContestAICmd_if_preliminary_points_eq_mon(void)
{
- ContestAICmd_unk_5E();
+ ContestAICmd_get_preliminary_points_diff();
if (eContestAI.scriptResult == 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1391,9 +1391,9 @@ static void ContestAICmd_unk_61(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_62(void)
+static void ContestAICmd_if_preliminary_points_not_eq_mon(void)
{
- ContestAICmd_unk_5E();
+ ContestAICmd_get_preliminary_points_diff();
if (eContestAI.scriptResult != 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
@@ -1401,19 +1401,19 @@ static void ContestAICmd_unk_62(void)
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_63(void)
+static void ContestAICmd_get_used_moves_effect(void)
{
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- u8 turn = gAIScriptPtr[2];
- u16 move = eContest.moveHistory[turn][contestant];
+ u8 round = gAIScriptPtr[2];
+ u16 move = eContest.moveHistory[round][contestant];
eContestAI.scriptResult = gContestMoves[move].effect;
gAIScriptPtr += 3;
}
-static void ContestAICmd_unk_64(void)
+static void ContestAICmd_if_used_moves_effect_less_than(void)
{
- ContestAICmd_unk_63();
+ ContestAICmd_get_used_moves_effect();
if (eContestAI.scriptResult < gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1421,9 +1421,9 @@ static void ContestAICmd_unk_64(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_65(void)
+static void ContestAICmd_if_used_moves_effect_more_than(void)
{
- ContestAICmd_unk_63();
+ ContestAICmd_get_used_moves_effect();
if (eContestAI.scriptResult > gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1431,9 +1431,9 @@ static void ContestAICmd_unk_65(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_66(void)
+static void ContestAICmd_if_used_moves_effect_eq(void)
{
- ContestAICmd_unk_63();
+ ContestAICmd_get_used_moves_effect();
if (eContestAI.scriptResult == gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1441,9 +1441,9 @@ static void ContestAICmd_unk_66(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_67(void)
+static void ContestAICmd_if_used_moves_effect_not_eq(void)
{
- ContestAICmd_unk_63();
+ ContestAICmd_get_used_moves_effect();
if (eContestAI.scriptResult != gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1451,19 +1451,19 @@ static void ContestAICmd_unk_67(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_68(void)
+static void ContestAICmd_get_used_moves_excitement(void)
{
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- u8 turn = gAIScriptPtr[2];
- s8 result = eContest.excitementHistory[turn][contestant];
+ u8 round = gAIScriptPtr[2];
+ s8 result = eContest.excitementHistory[round][contestant];
eContestAI.scriptResult = result;
gAIScriptPtr += 3;
}
-static void ContestAICmd_unk_69(void)
+static void ContestAICmd_if_used_moves_excitement_less_than(void)
{
- ContestAICmd_unk_68();
+ ContestAICmd_get_used_moves_excitement();
if (eContestAI.scriptResult < gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1471,9 +1471,9 @@ static void ContestAICmd_unk_69(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_6A(void)
+static void ContestAICmd_if_used_moves_excitement_more_than(void)
{
- ContestAICmd_unk_68();
+ ContestAICmd_get_used_moves_excitement();
if (eContestAI.scriptResult > gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1481,9 +1481,9 @@ static void ContestAICmd_unk_6A(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_6B(void)
+static void ContestAICmd_if_used_moves_excitement_eq(void)
{
- ContestAICmd_unk_68();
+ ContestAICmd_get_used_moves_excitement();
if (eContestAI.scriptResult == gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1491,9 +1491,9 @@ static void ContestAICmd_unk_6B(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_6C(void)
+static void ContestAICmd_if_used_moves_excitement_not_eq(void)
{
- ContestAICmd_unk_68();
+ ContestAICmd_get_used_moves_excitement();
if (eContestAI.scriptResult != gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1501,19 +1501,19 @@ static void ContestAICmd_unk_6C(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_6D(void)
+static void ContestAICmd_get_used_moves_effect_type(void)
{
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- u8 turn = gAIScriptPtr[2];
- u16 move = eContest.moveHistory[turn][contestant];
+ u8 round = gAIScriptPtr[2];
+ u16 move = eContest.moveHistory[round][contestant];
eContestAI.scriptResult = gContestEffects[gContestMoves[move].effect].effectType;
gAIScriptPtr += 3;
}
-static void ContestAICmd_unk_6E(void)
+static void ContestAICmd_if_used_moves_effect_type_eq(void)
{
- ContestAICmd_unk_6D();
+ ContestAICmd_get_used_moves_effect_type();
if (eContestAI.scriptResult == gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1521,9 +1521,9 @@ static void ContestAICmd_unk_6E(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_6F(void)
+static void ContestAICmd_if_used_moves_effect_type_not_eq(void)
{
- ContestAICmd_unk_6D();
+ ContestAICmd_get_used_moves_effect_type();
if (eContestAI.scriptResult != gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1531,119 +1531,129 @@ static void ContestAICmd_unk_6F(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_unk_70(void)
+static void ContestAICmd_save_result(void)
{
- eContestAI.scriptArr[gAIScriptPtr[1]] = eContestAI.scriptResult;
+ eContestAI.vars[gAIScriptPtr[1]] = eContestAI.scriptResult;
gAIScriptPtr += 2;
}
-static void ContestAICmd_unk_71(void)
+static void ContestAICmd_setvar(void)
{
- eContestAI.scriptArr[gAIScriptPtr[1]] = T1_READ_16(gAIScriptPtr + 2);
+ eContestAI.vars[gAIScriptPtr[1]] = T1_READ_16(gAIScriptPtr + 2);
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_72(void)
+static void ContestAICmd_add(void)
{
// wtf? shouldn't T1_READ_16 work here? why the signed 8 load by gAIScriptPtr[2]?
- eContestAI.scriptArr[gAIScriptPtr[1]] += ((s8)gAIScriptPtr[2] | gAIScriptPtr[3] << 8);
+ eContestAI.vars[gAIScriptPtr[1]] += ((s8)gAIScriptPtr[2] | gAIScriptPtr[3] << 8);
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_73(void)
+static void ContestAICmd_addvar(void)
{
- eContestAI.scriptArr[gAIScriptPtr[1]] += eContestAI.scriptArr[gAIScriptPtr[2]];
+ eContestAI.vars[gAIScriptPtr[1]] += eContestAI.vars[gAIScriptPtr[2]];
gAIScriptPtr += 3;
}
-static void ContestAICmd_unk_74(void)
+static void ContestAICmd_addvar_duplicate(void)
{
- eContestAI.scriptArr[gAIScriptPtr[1]] += eContestAI.scriptArr[gAIScriptPtr[2]];
+ eContestAI.vars[gAIScriptPtr[1]] += eContestAI.vars[gAIScriptPtr[2]];
gAIScriptPtr += 3;
}
-static void ContestAICmd_unk_75(void)
+static void ContestAICmd_if_less_than(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] < T1_READ_16(gAIScriptPtr + 2))
+ if (eContestAI.vars[gAIScriptPtr[1]] < T1_READ_16(gAIScriptPtr + 2))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
-static void ContestAICmd_unk_76(void)
+static void ContestAICmd_if_greater_than(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] > T1_READ_16(gAIScriptPtr + 2))
+ if (eContestAI.vars[gAIScriptPtr[1]] > T1_READ_16(gAIScriptPtr + 2))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
-static void ContestAICmd_unk_77(void)
+static void ContestAICmd_if_eq(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] == T1_READ_16(gAIScriptPtr + 2))
+ if (eContestAI.vars[gAIScriptPtr[1]] == T1_READ_16(gAIScriptPtr + 2))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
-static void ContestAICmd_unk_78(void)
+static void ContestAICmd_if_not_eq(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] != T1_READ_16(gAIScriptPtr + 2))
+ if (eContestAI.vars[gAIScriptPtr[1]] != T1_READ_16(gAIScriptPtr + 2))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
-static void ContestAICmd_unk_79(void)
+static void ContestAICmd_if_less_than_var(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] < (eContestAI.scriptArr[gAIScriptPtr[2]]))
+ if (eContestAI.vars[gAIScriptPtr[1]] < (eContestAI.vars[gAIScriptPtr[2]]))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
-static void ContestAICmd_unk_7A(void)
+static void ContestAICmd_if_greater_than_var(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] > (eContestAI.scriptArr[gAIScriptPtr[2]]))
+ if (eContestAI.vars[gAIScriptPtr[1]] > (eContestAI.vars[gAIScriptPtr[2]]))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
-static void ContestAICmd_unk_7B(void)
+static void ContestAICmd_if_eq_var(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] == (eContestAI.scriptArr[gAIScriptPtr[2]]))
+ if (eContestAI.vars[gAIScriptPtr[1]] == (eContestAI.vars[gAIScriptPtr[2]]))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
-static void ContestAICmd_unk_7C(void)
+static void ContestAICmd_if_not_eq_var(void)
{
- if (eContestAI.scriptArr[gAIScriptPtr[1]] != (eContestAI.scriptArr[gAIScriptPtr[2]]))
+ if (eContestAI.vars[gAIScriptPtr[1]] != (eContestAI.vars[gAIScriptPtr[2]]))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
-static void ContestAICmd_if_random(void)
+// UB: Should just be comparing to gAIScriptPtr[1] in the functions below
+// The values passed via gAIScriptPtr[1] range from 0-255
+// and vars is an s16[3], so this goes way out of bounds
+static void ContestAICmd_if_random_less_than(void)
{
- if ((Random() & 0xFF) < eContestAI.scriptArr[gAIScriptPtr[1]])
+#ifndef UBFIX
+ if ((Random() & 0xFF) < eContestAI.vars[gAIScriptPtr[1]])
+#else
+ if ((Random() & 0xFF) < gAIScriptPtr[1])
+#endif
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
-static void ContestAICmd_unk_7E(void)
+static void ContestAICmd_if_random_greater_than(void)
{
- if ((Random() & 0xFF) > eContestAI.scriptArr[gAIScriptPtr[1]])
+#ifndef UBFIX
+ if (((Random()) & 0xFF) > eContestAI.vars[gAIScriptPtr[1]])
+#else
+ if (((Random()) & 0xFF) > gAIScriptPtr[1])
+#endif
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
-// jump
-static void ContestAICmd_jump(void)
+static void ContestAICmd_goto(void)
{
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
}
@@ -1704,7 +1714,7 @@ static void ContestAICmd_if_user_has_exciting_move(void)
{
ContestAICmd_check_user_has_exciting_move();
- if (eContestAI.scriptResult != 0)
+ if (eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
@@ -1714,47 +1724,53 @@ static void ContestAICmd_if_user_doesnt_have_exciting_move(void)
{
ContestAICmd_check_user_has_exciting_move();
- if (eContestAI.scriptResult == 0)
+ if (!eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
}
-static void ContestAICmd_unk_85(void)
+// BUG: This is checking if the user has a specific move, but when it's used in the AI script
+// they're checking for an effect. Checking for a specific effect would make more sense,
+// but given that effects are normally read as a single byte and this reads 2 bytes, it
+// seems reading a move was intended and the AI script is using it incorrectly.
+// In any case, to fix it to correctly check for effects replace the u16 move assignment with
+// u16 move = gContestMoves[gContestMons[eContestAI.contestantId].moves[i]].effect;
+static void ContestAICmd_check_user_has_move(void)
{
- int result = 0;
+ int hasMove = FALSE;
int i;
- u16 arg = T1_READ_16(gAIScriptPtr + 1);
+ u16 targetMove = T1_READ_16(gAIScriptPtr + 1);
for (i = 0; i < MAX_MON_MOVES; i++)
{
u16 move = gContestMons[eContestAI.contestantId].moves[i];
- if (move == arg)
+ if (move == targetMove)
{
- result = 1;
+ hasMove = TRUE;
break;
}
}
- eContestAI.scriptResult = result;
+ eContestAI.scriptResult = hasMove;
gAIScriptPtr += 3;
}
-static void ContestAICmd_unk_86(void)
+static void ContestAICmd_if_user_has_move(void)
{
- ContestAICmd_unk_85();
+ ContestAICmd_check_user_has_move();
- if (eContestAI.scriptResult != 0)
+ if (eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
}
-static void ContestAICmd_if_effect_in_user_moveset(void)
+static void ContestAICmd_if_user_doesnt_have_move(void)
{
- ContestAICmd_unk_85();
+ ContestAICmd_check_user_has_move();
- if (eContestAI.scriptResult == 0)
+ if (!eContestAI.scriptResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
else
gAIScriptPtr += 4;
diff --git a/src/contest_effect.c b/src/contest_effect.c
index 8d1bbb298..1fe21daab 100644
--- a/src/contest_effect.c
+++ b/src/contest_effect.c
@@ -68,7 +68,10 @@ bool8 AreMovesContestCombo(u16 lastMove, u16 nextMove)
if (lastMoveComboStarterId == 0)
return FALSE;
- else if (lastMoveComboStarterId == nextMoveComboMoves[0] || lastMoveComboStarterId == nextMoveComboMoves[1] || lastMoveComboStarterId == nextMoveComboMoves[2] || lastMoveComboStarterId == nextMoveComboMoves[3])
+ else if (lastMoveComboStarterId == nextMoveComboMoves[0]
+ || lastMoveComboStarterId == nextMoveComboMoves[1]
+ || lastMoveComboStarterId == nextMoveComboMoves[2]
+ || lastMoveComboStarterId == nextMoveComboMoves[3])
return gComboStarterLookupTable[lastMoveComboStarterId];
else
return FALSE;
diff --git a/src/data/contest_moves.h b/src/data/contest_moves.h
index 5460ac806..658528210 100644
--- a/src/data/contest_moves.h
+++ b/src/data/contest_moves.h
@@ -2838,289 +2838,289 @@ const struct ContestEffect gContestEffects[] =
{
[CONTEST_EFFECT_HIGHLY_APPEALING] =
{
- .effectType = 0,
+ .effectType = CONTEST_EFFECT_TYPE_APPEAL,
.appeal = 40,
.jam = 0,
},
[CONTEST_EFFECT_USER_MORE_EASILY_STARTLED] =
{
- .effectType = 0,
+ .effectType = CONTEST_EFFECT_TYPE_APPEAL,
.appeal = 60,
.jam = 0,
},
[CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES] =
{
- .effectType = 0,
+ .effectType = CONTEST_EFFECT_TYPE_APPEAL,
.appeal = 80,
.jam = 0,
},
[CONTEST_EFFECT_REPETITION_NOT_BORING] =
{
- .effectType = 0,
+ .effectType = CONTEST_EFFECT_TYPE_APPEAL,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_AVOID_STARTLE_ONCE] =
{
- .effectType = 1,
+ .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE,
.appeal = 20,
.jam = 0,
},
[CONTEST_EFFECT_AVOID_STARTLE] =
{
- .effectType = 1,
+ .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY] =
{
- .effectType = 1,
+ .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_USER_LESS_EASILY_STARTLED] =
{
- .effectType = 1,
+ .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_STARTLE_FRONT_MON] =
{
- .effectType = 2,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON,
.appeal = 30,
.jam = 20,
},
[CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 30,
.jam = 10,
},
[CONTEST_EFFECT_STARTLE_PREV_MON] =
{
- .effectType = 2,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON,
.appeal = 20,
.jam = 30,
},
[CONTEST_EFFECT_STARTLE_PREV_MONS] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 20,
},
[CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON] =
{
- .effectType = 2,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON,
.appeal = 10,
.jam = 40,
},
[CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 10,
.jam = 30,
},
[CONTEST_EFFECT_STARTLE_PREV_MON_2] =
{
- .effectType = 2,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON,
.appeal = 30,
.jam = 20,
},
[CONTEST_EFFECT_STARTLE_PREV_MONS_2] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 30,
.jam = 10,
},
[CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION] =
{
- .effectType = 4,
+ .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 40,
.jam = 40,
},
[CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS] =
{
- .effectType = 4,
+ .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 20,
.jam = 0,
},
[CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS] =
{
- .effectType = 4,
+ .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 20,
.jam = 0,
},
[CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS] =
{
- .effectType = 4,
+ .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 30,
.jam = 10,
},
[CONTEST_EFFECT_BETTER_IF_FIRST] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 20,
.jam = 0,
},
[CONTEST_EFFECT_BETTER_IF_LAST] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 20,
.jam = 0,
},
[CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_BETTER_WHEN_LATER] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_BETTER_IF_SAME_TYPE] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 20,
.jam = 0,
},
[CONTEST_EFFECT_BETTER_IF_DIFF_TYPE] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 20,
.jam = 0,
},
[CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_NEXT_APPEAL_EARLIER] =
{
- .effectType = 6,
+ .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_NEXT_APPEAL_LATER] =
{
- .effectType = 6,
+ .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER] =
{
- .effectType = 6,
+ .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER] =
{
- .effectType = 6,
+ .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER,
.appeal = 30,
.jam = 0,
},
[CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS] =
{
- .effectType = 3,
+ .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20,
.jam = 10,
},
[CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED] =
{
- .effectType = 5,
+ .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10,
.jam = 0,
},
[CONTEST_EFFECT_DONT_EXCITE_AUDIENCE] =
{
- .effectType = 4,
+ .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 30,
.jam = 0,
},
diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h
index 53868fc84..6de931ef2 100644
--- a/src/data/contest_opponents.h
+++ b/src/data/contest_opponents.h
@@ -100,7 +100,44 @@
#define CONTEST_OPPONENT_TREY 94
#define CONTEST_OPPONENT_LANE 95
-const struct ContestWinner gUnknown_08587FA4[] =
+// All contest opponents have a common set of AI flags (which contains all of the actually
+// useful AI scripts, as well as some dummys) and a random combination of 2-3 dummy flags.
+// Seems that like the battle AI they had more plans for this than what ended up in the final game
+#define CONTEST_AI_SET_1 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21)
+#define CONTEST_AI_SET_2 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_3 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23)
+#define CONTEST_AI_SET_4 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_17 | CONTEST_AI_DUMMY_23)
+#define CONTEST_AI_SET_5 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_16 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_6 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_22)
+#define CONTEST_AI_SET_7 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_23)
+#define CONTEST_AI_SET_8 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_13 | CONTEST_AI_DUMMY_21)
+#define CONTEST_AI_SET_9 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_24)
+#define CONTEST_AI_SET_A (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_11 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_B (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_10 | CONTEST_AI_DUMMY_21)
+#define CONTEST_AI_SET_C (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_9 | CONTEST_AI_DUMMY_21)
+#define CONTEST_AI_SET_D (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_8 | CONTEST_AI_DUMMY_22 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_E (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_24)
+#define CONTEST_AI_SET_F (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_6 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_10 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_23)
+#define CONTEST_AI_SET_11 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_12 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_17 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_13 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_16 | CONTEST_AI_DUMMY_22)
+#define CONTEST_AI_SET_14 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_21)
+#define CONTEST_AI_SET_15 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_22)
+#define CONTEST_AI_SET_16 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_13 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_17 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_23 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_18 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_10 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_19 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_9 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_1A (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_8 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_1B (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_21)
+#define CONTEST_AI_SET_1C (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_6 | CONTEST_AI_DUMMY_21)
+#define CONTEST_AI_SET_1D (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_1E (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_1F (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_20 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_25)
+#define CONTEST_AI_SET_21 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_25)
+
+const struct ContestWinner gDefaultContestWinners[] =
{
{
.personality = 0,
@@ -183,7 +220,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("POOCHY"),
.trainerName = _("JIMMY"),
.trainerGfxId = OBJ_EVENT_GFX_BOY_1,
- .aiChecks = 0xC000FFF,
+ .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -211,7 +248,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MUSILLE"),
.trainerName = _("EDITH"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_1,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -239,7 +276,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DUSTER"),
.trainerName = _("EVAN"),
.trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY,
- .aiChecks = 0x21000FFF,
+ .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -267,7 +304,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DOTS"),
.trainerName = _("KELSEY"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_1,
- .aiChecks = 0x20800FFF,
+ .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -295,7 +332,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TATAY"),
.trainerName = _("MADISON"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
- .aiChecks = 0x80400FFF,
+ .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -323,7 +360,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("NINDA"),
.trainerName = _("RAYMOND"),
.trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT,
- .aiChecks = 0x10200FFF,
+ .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -351,7 +388,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SMISH"),
.trainerName = _("GRANT"),
.trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER,
- .aiChecks = 0x20100FFF,
+ .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -379,7 +416,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SLEAL"),
.trainerName = _("PAIGE"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_4,
- .aiChecks = 0x8080FFF,
+ .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -407,7 +444,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SLOKTH"),
.trainerName = _("ALEC"),
.trainerGfxId = OBJ_EVENT_GFX_CAMPER,
- .aiChecks = 0x40040FFF,
+ .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -435,7 +472,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("WHIRIS"),
.trainerName = _("SYDNEY"),
.trainerGfxId = OBJ_EVENT_GFX_LASS,
- .aiChecks = 0x80020FFF,
+ .aiFlags = CONTEST_AI_SET_A,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -463,7 +500,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MAHITA"),
.trainerName = _("MORRIS"),
.trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M,
- .aiChecks = 0x8010FFF,
+ .aiFlags = CONTEST_AI_SET_B,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -491,7 +528,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RONAR"),
.trainerName = _("MARIAH"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_2,
- .aiChecks = 0x8008FFF,
+ .aiFlags = CONTEST_AI_SET_C,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -519,7 +556,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BATRO"),
.trainerName = _("RUSSELL"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_3,
- .aiChecks = 0x90004FFF,
+ .aiFlags = CONTEST_AI_SET_D,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -547,7 +584,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GULIN"),
.trainerName = _("MELANIE"),
.trainerGfxId = OBJ_EVENT_GFX_TWIN,
- .aiChecks = 0x40002FFF,
+ .aiFlags = CONTEST_AI_SET_E,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -575,7 +612,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RIKELEC"),
.trainerName = _("CHANCE"),
.trainerGfxId = OBJ_EVENT_GFX_RICH_BOY,
- .aiChecks = 0x80001FFF,
+ .aiFlags = CONTEST_AI_SET_F,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -603,7 +640,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BULBY"),
.trainerName = _("AGATHA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_2,
- .aiChecks = 0xC000FFF,
+ .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -631,7 +668,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("FUTTERBE"),
.trainerName = _("BEAU"),
.trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -659,7 +696,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("PIDEOT"),
.trainerName = _("KAY"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_5,
- .aiChecks = 0x21000FFF,
+ .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -687,7 +724,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DIGLE"),
.trainerName = _("CALE"),
.trainerGfxId = OBJ_EVENT_GFX_HIKER,
- .aiChecks = 0x20800FFF,
+ .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -715,7 +752,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("WAGIL"),
.trainerName = _("CAITLIN"),
.trainerGfxId = OBJ_EVENT_GFX_TUBER_F,
- .aiChecks = 0x80400FFF,
+ .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -743,7 +780,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TOTDIL"),
.trainerName = _("COLBY"),
.trainerGfxId = OBJ_EVENT_GFX_NINJA_BOY,
- .aiChecks = 0x10200FFF,
+ .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -771,7 +808,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BALEDY"),
.trainerName = _("KYLIE"),
.trainerGfxId = OBJ_EVENT_GFX_BEAUTY,
- .aiChecks = 0x20100FFF,
+ .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -799,7 +836,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BIRDLY"),
.trainerName = _("LIAM"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_5,
- .aiChecks = 0x8080FFF,
+ .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -827,7 +864,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TARVITAR"),
.trainerName = _("MILO"),
.trainerGfxId = OBJ_EVENT_GFX_MANIAC,
- .aiChecks = 0x40040FFF,
+ .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -855,7 +892,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RELIA"),
.trainerName = _("KARINA"),
.trainerGfxId = OBJ_EVENT_GFX_PICNICKER,
- .aiChecks = 0x24000FFF,
+ .aiFlags = CONTEST_AI_SET_10,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -883,7 +920,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DUODO"),
.trainerName = _("BOBBY"),
.trainerGfxId = OBJ_EVENT_GFX_RUNNING_TRIATHLETE_M,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -911,7 +948,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("PINCHIN"),
.trainerName = _("CLAIRE"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_1,
- .aiChecks = 0x81000FFF,
+ .aiFlags = CONTEST_AI_SET_11,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -939,7 +976,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("NACAC"),
.trainerName = _("WILLIE"),
.trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY,
- .aiChecks = 0x80800FFF,
+ .aiFlags = CONTEST_AI_SET_12,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -967,7 +1004,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SHRAND"),
.trainerName = _("CASSIDY"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
- .aiChecks = 0x10400FFF,
+ .aiFlags = CONTEST_AI_SET_13,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -995,7 +1032,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TOYBAL"),
.trainerName = _("MORGAN"),
.trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT,
- .aiChecks = 0x8200FFF,
+ .aiFlags = CONTEST_AI_SET_14,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1023,7 +1060,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CHAMCHAM"),
.trainerName = _("SUMMER"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_4,
- .aiChecks = 0x10100FFF,
+ .aiFlags = CONTEST_AI_SET_15,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1051,7 +1088,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SPININ"),
.trainerName = _("MILES"),
.trainerGfxId = OBJ_EVENT_GFX_CAMPER,
- .aiChecks = 0x80080FFF,
+ .aiFlags = CONTEST_AI_SET_16,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1079,7 +1116,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SWABY"),
.trainerName = _("AUDREY"),
.trainerGfxId = OBJ_EVENT_GFX_LASS,
- .aiChecks = 0xA0040FFF,
+ .aiFlags = CONTEST_AI_SET_17,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1107,7 +1144,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("POINKER"),
.trainerName = _("AVERY"),
.trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M,
- .aiChecks = 0x80020FFF,
+ .aiFlags = CONTEST_AI_SET_A,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1135,7 +1172,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KECON"),
.trainerName = _("ARIANA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_2,
- .aiChecks = 0x80010FFF,
+ .aiFlags = CONTEST_AI_SET_18,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1163,7 +1200,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GOLDEN"),
.trainerName = _("ASHTON"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_3,
- .aiChecks = 0x80008FFF,
+ .aiFlags = CONTEST_AI_SET_19,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1191,7 +1228,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BOBOACH"),
.trainerName = _("SANDRA"),
.trainerGfxId = OBJ_EVENT_GFX_TWIN,
- .aiChecks = 0x80004FFF,
+ .aiFlags = CONTEST_AI_SET_1A,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1219,7 +1256,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CORPY"),
.trainerName = _("CARSON"),
.trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER,
- .aiChecks = 0x8002FFF,
+ .aiFlags = CONTEST_AI_SET_1B,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1247,7 +1284,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TADO"),
.trainerName = _("KATRINA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_1,
- .aiChecks = 0x8001FFF,
+ .aiFlags = CONTEST_AI_SET_1C,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1275,7 +1312,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BROWLO"),
.trainerName = _("LUKE"),
.trainerGfxId = OBJ_EVENT_GFX_FAT_MAN,
- .aiChecks = 0xC000FFF,
+ .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1303,7 +1340,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("FETCHIN"),
.trainerName = _("RAUL"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_5,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -1331,7 +1368,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SEELEY"),
.trainerName = _("JADA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_2,
- .aiChecks = 0x21000FFF,
+ .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1359,7 +1396,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DROWZIN"),
.trainerName = _("ZEEK"),
.trainerGfxId = OBJ_EVENT_GFX_PSYCHIC_M,
- .aiChecks = 0x20800FFF,
+ .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1387,7 +1424,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("HITEMON"),
.trainerName = _("DIEGO"),
.trainerGfxId = OBJ_EVENT_GFX_EXPERT_M,
- .aiChecks = 0x80400FFF,
+ .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -1415,7 +1452,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BLISS"),
.trainerName = _("ALIYAH"),
.trainerGfxId = OBJ_EVENT_GFX_TEALA,
- .aiChecks = 0x10200FFF,
+ .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1443,7 +1480,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KIDLEK"),
.trainerName = _("NATALIA"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
- .aiChecks = 0x20100FFF,
+ .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -1471,7 +1508,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SNUBBINS"),
.trainerName = _("DEVIN"),
.trainerGfxId = OBJ_EVENT_GFX_GENTLEMAN,
- .aiChecks = 0x8080FFF,
+ .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1499,7 +1536,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DREAVIS"),
.trainerName = _("TYLOR"),
.trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC,
- .aiChecks = 0x40040FFF,
+ .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1527,7 +1564,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LAIRN"),
.trainerName = _("RONNIE"),
.trainerGfxId = OBJ_EVENT_GFX_HIKER,
- .aiChecks = 0x84000FFF,
+ .aiFlags = CONTEST_AI_SET_1D,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1555,7 +1592,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SHIFTY"),
.trainerName = _("CLAUDIA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_1,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1583,7 +1620,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("NINAS"),
.trainerName = _("ELIAS"),
.trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY,
- .aiChecks = 0x81000FFF,
+ .aiFlags = CONTEST_AI_SET_11,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1611,7 +1648,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("WELOW"),
.trainerName = _("JADE"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
- .aiChecks = 0x80800FFF,
+ .aiFlags = CONTEST_AI_SET_12,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1639,7 +1676,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("YENA"),
.trainerName = _("FRANCIS"),
.trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT,
- .aiChecks = 0x80400FFF,
+ .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1667,7 +1704,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TIFLY"),
.trainerName = _("ALISHA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_4,
- .aiChecks = 0x80200FFF,
+ .aiFlags = CONTEST_AI_SET_1E,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1695,7 +1732,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KINGSEA"),
.trainerName = _("SAUL"),
.trainerGfxId = OBJ_EVENT_GFX_CAMPER,
- .aiChecks = 0x80100FFF,
+ .aiFlags = CONTEST_AI_SET_1F,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -1723,7 +1760,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CASTER"),
.trainerName = _("FELICIA"),
.trainerGfxId = OBJ_EVENT_GFX_LASS,
- .aiChecks = 0x80080FFF,
+ .aiFlags = CONTEST_AI_SET_16,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1751,7 +1788,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CHOKEM"),
.trainerName = _("EMILIO"),
.trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M,
- .aiChecks = 0x80040FFF,
+ .aiFlags = CONTEST_AI_SET_20,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -1779,7 +1816,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LOMBE"),
.trainerName = _("KARLA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_2,
- .aiChecks = 0x80020FFF,
+ .aiFlags = CONTEST_AI_SET_A,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1807,7 +1844,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("VIPES"),
.trainerName = _("DARRYL"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_3,
- .aiChecks = 0x80010FFF,
+ .aiFlags = CONTEST_AI_SET_18,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1835,7 +1872,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MERAIL"),
.trainerName = _("SELENA"),
.trainerGfxId = OBJ_EVENT_GFX_EXPERT_F,
- .aiChecks = 0x80008FFF,
+ .aiFlags = CONTEST_AI_SET_19,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1863,7 +1900,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KARPAG"),
.trainerName = _("NOEL"),
.trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER,
- .aiChecks = 0x80004FFF,
+ .aiFlags = CONTEST_AI_SET_1A,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1891,7 +1928,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LUNONE"),
.trainerName = _("LACEY"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_1,
- .aiChecks = 0x80002FFF,
+ .aiFlags = CONTEST_AI_SET_21,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -1919,7 +1956,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("ABSO"),
.trainerName = _("CORBIN"),
.trainerGfxId = OBJ_EVENT_GFX_MANIAC,
- .aiChecks = 0x80001FFF,
+ .aiFlags = CONTEST_AI_SET_F,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -1947,7 +1984,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("EGGSOR"),
.trainerName = _("GRACIE"),
.trainerGfxId = OBJ_EVENT_GFX_PICNICKER,
- .aiChecks = 0xC000FFF,
+ .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -1975,7 +2012,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CUBIN"),
.trainerName = _("COLTIN"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_4,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2003,7 +2040,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("HITMON"),
.trainerName = _("ELLIE"),
.trainerGfxId = OBJ_EVENT_GFX_EXPERT_F,
- .aiChecks = 0x21000FFF,
+ .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2031,7 +2068,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SURTLE"),
.trainerName = _("MARCUS"),
.trainerGfxId = OBJ_EVENT_GFX_SAILOR,
- .aiChecks = 0x20800FFF,
+ .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2059,7 +2096,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KHANKAN"),
.trainerName = _("KIARA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_3,
- .aiChecks = 0x80400FFF,
+ .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2087,7 +2124,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("PINOC"),
.trainerName = _("BRYCE"),
.trainerGfxId = OBJ_EVENT_GFX_BUG_CATCHER,
- .aiChecks = 0x10200FFF,
+ .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -2115,7 +2152,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DILTOT"),
.trainerName = _("JAMIE"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_5,
- .aiChecks = 0x20100FFF,
+ .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2143,7 +2180,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DOOMOND"),
.trainerName = _("JORGE"),
.trainerGfxId = OBJ_EVENT_GFX_GENTLEMAN,
- .aiChecks = 0x8080FFF,
+ .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2171,7 +2208,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MILKAN"),
.trainerName = _("DEVON"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_M,
- .aiChecks = 0x40040FFF,
+ .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -2199,7 +2236,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RADOS"),
.trainerName = _("JUSTINA"),
.trainerGfxId = OBJ_EVENT_GFX_PICNICKER,
- .aiChecks = 0x84000FFF,
+ .aiFlags = CONTEST_AI_SET_1D,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2227,7 +2264,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LOUDERD"),
.trainerName = _("RALPH"),
.trainerGfxId = OBJ_EVENT_GFX_EXPERT_M,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2255,7 +2292,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SITTY"),
.trainerName = _("ROSA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_1,
- .aiChecks = 0x81000FFF,
+ .aiFlags = CONTEST_AI_SET_11,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -2283,7 +2320,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SLING"),
.trainerName = _("KEATON"),
.trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY,
- .aiChecks = 0x80800FFF,
+ .aiFlags = CONTEST_AI_SET_12,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2311,7 +2348,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TARIA"),
.trainerName = _("MAYRA"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
- .aiChecks = 0x80400FFF,
+ .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2339,7 +2376,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LIRKI"),
.trainerName = _("LAMAR"),
.trainerGfxId = OBJ_EVENT_GFX_RICH_BOY,
- .aiChecks = 0x80200FFF,
+ .aiFlags = CONTEST_AI_SET_1E,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2367,7 +2404,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BLOSSOM"),
.trainerName = _("AUBREY"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_4,
- .aiChecks = 0x80100FFF,
+ .aiFlags = CONTEST_AI_SET_1F,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -2395,7 +2432,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("EYESAB"),
.trainerName = _("NIGEL"),
.trainerGfxId = OBJ_EVENT_GFX_CAMPER,
- .aiChecks = 0x80080FFF,
+ .aiFlags = CONTEST_AI_SET_16,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2423,7 +2460,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("UTAN"),
.trainerName = _("CAMILLE"),
.trainerGfxId = OBJ_EVENT_GFX_LASS,
- .aiChecks = 0x80040FFF,
+ .aiFlags = CONTEST_AI_SET_20,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2451,7 +2488,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("PEDOS"),
.trainerName = _("DEON"),
.trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M,
- .aiChecks = 0x80020FFF,
+ .aiFlags = CONTEST_AI_SET_A,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2479,7 +2516,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LUVIS"),
.trainerName = _("JANELLE"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_2,
- .aiChecks = 0x80010FFF,
+ .aiFlags = CONTEST_AI_SET_18,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2507,7 +2544,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("HEROSS"),
.trainerName = _("HEATH"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_3,
- .aiChecks = 0x80008FFF,
+ .aiFlags = CONTEST_AI_SET_19,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2535,7 +2572,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RODLECT"),
.trainerName = _("SASHA"),
.trainerGfxId = OBJ_EVENT_GFX_TWIN,
- .aiChecks = 0x80004FFF,
+ .aiFlags = CONTEST_AI_SET_1A,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2563,7 +2600,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CHUPY"),
.trainerName = _("FRANKIE"),
.trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER,
- .aiChecks = 0x80002FFF,
+ .aiFlags = CONTEST_AI_SET_21,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -2591,7 +2628,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("WOBET"),
.trainerName = _("HELEN"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_1,
- .aiChecks = 0x80001FFF,
+ .aiFlags = CONTEST_AI_SET_F,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2619,7 +2656,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GAREN"),
.trainerName = _("CAMILE"),
.trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC,
- .aiChecks = 0xC000FFF,
+ .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2647,7 +2684,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GONPOR"),
.trainerName = _("MARTIN"),
.trainerGfxId = OBJ_EVENT_GFX_SCIENTIST_1,
- .aiChecks = 0x82000FFF,
+ .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2675,7 +2712,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DRITE"),
.trainerName = _("SERGIO"),
.trainerGfxId = OBJ_EVENT_GFX_BOY_1,
- .aiChecks = 0x21000FFF,
+ .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,
@@ -2703,7 +2740,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MEOWY"),
.trainerName = _("KAILEY"),
.trainerGfxId = OBJ_EVENT_GFX_TWIN,
- .aiChecks = 0x20800FFF,
+ .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2731,7 +2768,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("NYX"),
.trainerName = _("PERLA"),
.trainerGfxId = OBJ_EVENT_GFX_BEAUTY,
- .aiChecks = 0x80400FFF,
+ .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE,
@@ -2759,7 +2796,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GEPITO"),
.trainerName = _("CLARA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_2,
- .aiChecks = 0x10200FFF,
+ .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2787,7 +2824,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SPEON"),
.trainerName = _("JAKOB"),
.trainerGfxId = OBJ_EVENT_GFX_PSYCHIC_M,
- .aiChecks = 0x20100FFF,
+ .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE,
@@ -2815,7 +2852,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SLOWGO"),
.trainerName = _("TREY"),
.trainerGfxId = OBJ_EVENT_GFX_SAILOR,
- .aiChecks = 0x8080FFF,
+ .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE,
@@ -2843,7 +2880,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("URSING"),
.trainerName = _("LANE"),
.trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT,
- .aiChecks = 0x40040FFF,
+ .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE,