contest AI

This commit is contained in:
YamaArashi 2016-09-03 15:27:28 -07:00
parent 231ea2f27c
commit 6874afafe5
7 changed files with 1422 additions and 4 deletions

View File

@ -1,5 +1,5 @@
.include "asm/macros/asm.s"
.include "asm/macros/function.s" .include "asm/macros/function.s"
.include "asm/macros/event.s"
.include "asm/macros/window.s" .include "asm/macros/window.s"
.include "asm/macros/pokemon_data.s" .include "asm/macros/pokemon_data.s"
.include "asm/macros/ec.s" .include "asm/macros/ec.s"

12
asm/macros/asm.s Normal file
View File

@ -0,0 +1,12 @@
.macro inc x
.set \x, \x + 1
.endm
.macro enum_start x=0
.set __enum__, \x
.endm
.macro enum constant
.equiv \constant, __enum__
inc __enum__
.endm

View File

@ -0,0 +1,506 @@
@ Add a positive/negative value to the score of the move being evaluated.
.macro score score
.byte 0x00
.byte \score
.endm
@ turn (AKA "Appeal No.")
.macro get_turn
.byte 0x01
.endm
.macro if_turn_less_than param, addr
.byte 0x02
.byte \param
.4byte \addr
.endm
.macro if_turn_more_than param, addr
.byte 0x03
.byte \param
.4byte \addr
.endm
.macro if_turn_eq param, addr
.byte 0x04
.byte \param
.4byte \addr
.endm
.macro if_turn_not_eq param, addr
.byte 0x05
.byte \param
.4byte \addr
.endm
@ audience excitement
.macro get_excitement
.byte 0x06
.endm
.macro if_excitement_less_than param, addr
.byte 0x07
.byte \param
.4byte \addr
.endm
.macro if_excitement_more_than param, addr
.byte 0x08
.byte \param
.4byte \addr
.endm
.macro if_excitement_eq param, addr
.byte 0x09
.byte \param
.4byte \addr
.endm
.macro if_excitement_not_eq param, addr
.byte 0x0A
.byte \param
.4byte \addr
.endm
@ the order that the user goes in the current turn
.macro get_user_order
.byte 0x0B
.endm
.macro if_user_order_less_than param addr
.byte 0x0C
.byte \param
.4byte \addr
.endm
.macro if_user_order_more_than param addr
.byte 0x0D
.byte \param
.4byte \addr
.endm
.macro if_user_order_eq param addr
.byte 0x0E
.byte \param
.4byte \addr
.endm
.macro if_user_order_not_eq param addr
.byte 0x0F
.byte \param
.4byte \addr
.endm
@ user condition
.macro get_user_condition
.byte 0x10
.endm
.macro if_user_condition_less_than param, addr
.byte 0x11
.byte \param
.4byte \addr
.endm
.macro if_user_condition_more_than param, addr
.byte 0x12
.byte \param
.4byte \addr
.endm
.macro if_user_condition_eq param, addr
.byte 0x13
.byte \param
.4byte \addr
.endm
.macro if_user_condition_not_eq param, addr
.byte 0x14
.byte \param
.4byte \addr
.endm
@ 15
@ 16
@ 17
@ 18
@ 19
@ 1A
@ 1B
@ 1C
@ 1D
@ 1E
@ contest type
.macro get_contest_type
.byte 0x1F
.endm
.macro if_contest_type_eq param, addr
.byte 0x20
.byte \param
.4byte \addr
.endm
.macro if_contest_type_not_eq param, addr
.byte 0x21
.byte \param
.4byte \addr
.endm
@ move excitement (change in excitement due to move)
.macro get_move_excitement
.byte 0x22
.endm
.macro if_move_excitement_less_than param, addr
.byte 0x23
.byte \param
.4byte \addr
.endm
.macro if_move_excitement_more_than param, addr
.byte 0x24
.byte \param
.4byte \addr
.endm
.macro if_move_excitement_eq param, addr
.byte 0x25
.byte \param
.4byte \addr
.endm
.macro if_move_excitement_not_eq param, addr
.byte 0x26
.byte \param
.4byte \addr
.endm
@ move effect
.macro get_effect
.byte 0x27
.endm
.macro if_effect_eq param, addr
.byte 0x28
.byte \param
.4byte \addr
.endm
.macro if_effect_not_eq param, addr
.byte 0x29
.byte \param
.4byte \addr
.endm
@ move effect type
.macro get_effect_type
.byte 0x2A
.endm
.macro if_effect_type_eq param, addr
.byte 0x2B
.byte \param
.4byte \addr
.endm
.macro if_effect_type_not_eq param, addr
.byte 0x2C
.byte \param
.4byte \addr
.endm
@ whether the current move is the most appealing in the user's moveset
.macro check_most_appealing_move
.byte 0x2D
.endm
.macro if_most_appealing_move addr
.byte 0x2E
.4byte \addr
.endm
@ 2F
@ 30
@ 31
@ 32
@ 33
@ 34
@ 35
@ 36
@ 37
@ 38
@ 39
@ 3A
@ number of times current move has been used
.macro get_move_used_count
.byte 0x3B
.endm
.macro if_move_used_count_less_than param, addr
.byte 0x3C
.byte \param
.4byte \addr
.endm
.macro if_move_used_count_more_than param, addr
.byte 0x3D
.byte \param
.4byte \addr
.endm
.macro if_move_used_count_eq param, addr
.byte 0x3E
.byte \param
.4byte \addr
.endm
.macro if_move_used_count_not_eq param, addr
.byte 0x3F
.byte \param
.4byte \addr
.endm
@ whether the current move is a combo starter (with another move in the moveset)
.macro check_combo_starter
.byte 0x40
.endm
.macro if_combo_starter addr
.byte 0x41
.4byte \addr
.endm
.macro if_not_combo_starter addr
.byte 0x42
.4byte \addr
.endm
@ whether the current move is a combo finisher (with another move in the moveset)
.macro check_combo_finisher
.byte 0x43
.endm
.macro if_combo_finisher addr
.byte 0x44
.4byte \addr
.endm
.macro if_not_combo_finisher addr
.byte 0x45
.4byte \addr
.endm
@ whether the current move would finish a combo
.macro check_would_finish_combo
.byte 0x46
.endm
.macro if_would_finish_combo addr
.byte 0x47
.4byte \addr
.endm
.macro if_would_not_finish_combo addr
.byte 0x48
.4byte \addr
.endm
@ condition of mon (indexed by order)
.macro get_condition mon
.byte 0x49
.byte \mon
.endm
.macro if_condition_less_than mon, value, addr
.byte 0x4A
.byte \mon
.byte \value
.4byte \addr
.endm
.macro if_condition_more_than mon, value, addr
.byte 0x4B
.byte \mon
.byte \value
.4byte \addr
.endm
.macro if_condition_eq mon, value, addr
.byte 0x4C
.byte \mon
.byte \value
.4byte \addr
.endm
.macro if_condition_not_eq mon, value, addr
.byte 0x4D
.byte \mon
.byte \value
.4byte \addr
.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
.byte 0x4E
.byte \mon
.endm
.macro if_used_combo_starter_less_than mon, value, addr
.byte 0x4F
.byte \mon
.byte \value
.4byte \addr
.endm
.macro if_used_combo_starter_more_than mon, value, addr
.byte 0x50
.byte \mon
.byte \value
.4byte \addr
.endm
.macro if_used_combo_starter_eq mon, value, addr
.byte 0x51
.byte \mon
.byte \value
.4byte \addr
.endm
.macro if_used_combo_starter_not_eq mon, value, addr
.byte 0x52
.byte \mon
.byte \value
.4byte \addr
.endm
@ whether the mon can make an appeal
.macro check_can_participate mon
.byte 0x53
.byte \mon
.endm
.macro if_can_participate mon, addr
.byte 0x54
.byte \mon
.4byte \addr
.endm
.macro if_cannot_participate mon, addr
.byte 0x55
.byte \mon
.4byte \addr
.endm
@ 56
@ 57
.macro contest_58 param addr
.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 0x7D
.byte \param
.4byte \addr
.endm
@ 7E
.macro jump addr
.byte 0x7F
.4byte \addr
.endm
.macro call addr
.byte 0x80
.4byte \addr
.endm
.macro end
.byte 0x81
.endm
.macro check_user_has_exciting_move
.byte 0x82
.endm
.macro if_user_has_exciting_move addr
.byte 0x83
.4byte \addr
.endm
.macro if_user_doesnt_have_exciting_move addr
.byte 0x84
.4byte \addr
.endm
@ 85
@ 86
.macro if_effect_in_user_moveset param addr
.byte 0x87
.2byte \param
.4byte \addr
.endm

View File

@ -333481,7 +333481,7 @@ _081563CC:
bgt _08156496 bgt _08156496
cmp r0, 0 cmp r0, 0
bne _08156496 bne _08156496
ldr r1, =gUnknown_082DE350 ldr r1, =gContestAIs
ldrb r0, [r2, 0x10] ldrb r0, [r2, 0x10]
lsls r0, 2 lsls r0, 2
adds r0, r1 adds r0, r1

View File

@ -15,3 +15,4 @@
.include "constants/map_constants.s" .include "constants/map_constants.s"
.include "constants/berry_constants.s" .include "constants/berry_constants.s"
.include "constants/field_object_constants.s" .include "constants/field_object_constants.s"
.include "constants/contest_move_effects.s"

View File

@ -0,0 +1,49 @@
enum_start
enum CONTEST_EFFECT_HIGHLY_APPEALING @ 0
enum CONTEST_EFFECT_USER_MORE_EASILY_STARTLED @ 1
enum CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES @ 2
enum CONTEST_EFFECT_REPETITION_NOT_BORING @ 3
enum CONTEST_EFFECT_AVOID_STARTLE_ONCE @ 4
enum CONTEST_EFFECT_AVOID_STARTLE @ 5
enum CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY @ 6
enum CONTEST_EFFECT_USER_LESS_EASILY_STARTLED @ 7
enum CONTEST_EFFECT_STARTLE_FRONT_MON @ 8
enum CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS @ 9
enum CONTEST_EFFECT_STARTLE_PREV_MON @ 10
enum CONTEST_EFFECT_STARTLE_PREV_MONS @ 11
enum CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON @ 12
enum CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS @ 13
enum CONTEST_EFFECT_STARTLE_PREV_MON_2 @ 14
enum CONTEST_EFFECT_STARTLE_PREV_MONS_2 @ 15
enum CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION @ 16
enum CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION @ 17
enum CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN @ 18
enum CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL @ 19
enum CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL @ 20
enum CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL @ 21
enum CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL @ 22
enum CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL @ 23
enum CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL @ 24
enum CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS @ 25
enum CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS @ 26
enum CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS @ 27
enum CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION @ 28
enum CONTEST_EFFECT_BETTER_IF_FIRST @ 29
enum CONTEST_EFFECT_BETTER_IF_LAST @ 30
enum CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES @ 31
enum CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE @ 32
enum CONTEST_EFFECT_BETTER_WHEN_LATER @ 33
enum CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING @ 34
enum CONTEST_EFFECT_BETTER_IF_SAME_TYPE @ 35
enum CONTEST_EFFECT_BETTER_IF_DIFF_TYPE @ 36
enum CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL @ 37
enum CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS @ 38
enum CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION @ 39
enum CONTEST_EFFECT_NEXT_APPEAL_EARLIER @ 40
enum CONTEST_EFFECT_NEXT_APPEAL_LATER @ 41
enum CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER @ 42
enum CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER @ 43
enum CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST @ 44
enum CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS @ 45
enum CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED @ 46
enum CONTEST_EFFECT_DONT_EXCITE_AUDIENCE @ 47

View File

@ -1,8 +1,858 @@
.include "asm/macros.s" .include "asm/macros.s"
.include "asm/macros/contest_ai_script.s"
.include "constants/constants.s" .include "constants/constants.s"
.section script_data, "aw", %progbits .section script_data, "aw", %progbits
enum_start
enum MON_1
enum MON_2
enum MON_3
enum MON_4
.align 2 .align 2
gUnknown_082DE350:: @ 82DE350 gContestAIs:: @ 82DE350
.incbin "baserom.gba", 0x2de350, 0x9dc .4byte AI_CheckForBadMove
.4byte AI_CheckForCombo
.4byte AI_CheckBoring
.4byte AI_CheckExcitement
.4byte AI_CheckOrder
.4byte AI_CheckForGoodMove
.4byte AI_Erratic
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
.4byte AI_Nothing
@ Unreferenced AI routine to encourage moves that improve condition on the first
@ turn. Additionally, it checks the appeal order of the user and the effect
@ type, but the code is buggy and doesn't affect the score.
if_turn_not_eq 0, ContestUnreferenced_80
if_effect_not_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, ContestUnreferenced_80
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_turn_eq 0, ContestUnreferenced_0F_1
if_turn_eq 1, ContestUnreferenced_0F_2
if_turn_eq 2, ContestUnreferenced_0F_3
if_turn_eq 3, ContestUnreferenced_0F_4
if_turn_eq 4, ContestUnreferenced_0F_5
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:
score +10
end
end
@ Unreferenced AI routine to encourage the most appealing move.
if_most_appealing_move ContestUnreferenced_score2
end
ContestUnreferenced_score2:
score +10
end
AI_CheckBoring:
if_effect_eq CONTEST_EFFECT_REPETITION_NOT_BORING, AI_end_081DC27F
if_move_used_count_eq 1, AI_score1_081DC27F
if_move_used_count_eq 2, AI_score2_081DC27F
if_move_used_count_eq 3, AI_score3_081DC27F
if_move_used_count_eq 4, AI_score4_081DC27F
end
AI_score1_081DC27F:
score -5
end
AI_score2_081DC27F:
score -15
end
AI_score3_081DC27F:
score -20
end
AI_score4_081DC27F:
score -25
end
AI_end_081DC27F:
end
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
score +15
end
AI_contest0F_1_081DC2AB:
if_user_order_not_eq MON_1, AI_contest7D_1_081DC2AB
if_random 51, AI_end_081DC2AB
score +20
end
AI_contest7D_1_081DC2AB:
if_random 127, AI_end_081DC2AB
score -10
end
AI_contest0F_2_081DC2AB:
if_user_order_not_eq MON_1, AI_contest7D_3_081DC2AB
if_turn_eq 4, AI_score_081DC2AB
AI_contest7D_2_081DC2AB:
if_random 51, AI_end_081DC2AB
score +10
end
AI_score_081DC2AB:
score +15
end
AI_contest7D_3_081DC2AB:
if_random 127, AI_end_081DC2AB
score +10
end
AI_contest7D_4_081DC2AB:
if_random 127, AI_end_081DC2AB
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
score +30
end
AI_contest7D_5_081DC2AB:
if_random 100, AI_end_081DC2AB
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
score +30
end
AI_end_081DC2AB:
end
AI_CheckForCombo:
if_would_finish_combo AI_score_081DC348
call AI_contest3F_081DC348
call AI_contest45_081DC348
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
end
AI_contest45_081DC348:
if_not_combo_finisher AI_end_081DC348
score -10
end
AI_score_081DC348:
score +25
end
AI_contest04_1_081DC348:
if_turn_eq 4, AI_contest7D_081DC348
if_random 150, AI_end_081DC348
score +10
end
AI_contest04_2_081DC348:
if_turn_eq 4, AI_contest7D_081DC348
if_random 125, AI_end_081DC348
score +10
end
AI_contest04_3_081DC348:
if_turn_eq 4, AI_contest7D_081DC348
if_random 50, AI_end_081DC348
score +10
end
AI_contest04_4_081DC348:
if_turn_eq 4, AI_contest7D_081DC348
score +10
end
AI_contest7D_081DC348:
if_random 125, AI_end_081DC348
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:
score +20
end
ContestEffect39_score2:
if_random 125, ContestEffectEnd
score +15
end
ContestEffect39_score3:
if_random 125, ContestEffectEnd
score +5
end
ContestEffect39_score4:
score -20
end
ContestEffect40:
if_effect_in_user_moveset CONTEST_EFFECT_BETTER_IF_FIRST, ContestEffectEnd
if_random 50, ContestEffectEnd
score +20
end
ContestEffect41:
if_effect_in_user_moveset CONTEST_EFFECT_BETTER_IF_LAST, ContestEffectEnd
if_random 50, ContestEffectEnd
score +20
end
ContestEffect3:
if_user_order_not_eq MON_4, ContestEffectEnd
if_random 50, ContestEffectEnd
score +15
end
if_turn_eq 4, ContestEffect3_7D
if_random 220, ContestEffect3_score
score +10
end
ContestEffect3_7D:
if_random 20, ContestEffectEnd
score +15
end
ContestEffect3_score:
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
score +15
end
ContestEffect38_score1:
score -10
end
ContestEffect38_contest04:
if_turn_eq 4, ContestEffect38_score2
if_turn_eq 0, ContestEffect38_random
if_move_used_count_eq 1, ContestEffectEnd
if_random 125, ContestEffectEnd
score +10
end
ContestEffect38_random:
if_random 100, ContestEffectEnd
score +10
end
ContestEffect38_score2:
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_turn_not_eq 4, ContestEffectEnd
if_user_has_exciting_move ContestEffectEnd
if_excitement_less_than 1, ContestEffectEnd
score +10
end
ContestEffect47_random:
if_random 127, ContestEffectEnd
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
end
ContestEffect31_score1:
score +5
end
ContestEffect31_score2:
score +15
end
ContestEffect31_score3:
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
end
ContestEffect32_score1:
score -10
end
ContestEffect32_score2:
if_cannot_participate MON_1, ContestEffectEnd
score +5
end
ContestEffect32_score3:
if_cannot_participate MON_1, ContestEffect32_score4
score +5
jump ContestEffect32_score4
end
ContestEffect32_score4:
if_cannot_participate MON_2, ContestEffectEnd
score +5
end
ContestEffect32_score5:
if_cannot_participate MON_1, ContestEffect32_score6
score +5
jump ContestEffect32_score6
end
ContestEffect32_score6:
if_cannot_participate MON_2, ContestEffect32_score7
score +5
jump ContestEffect32_score7
end
ContestEffect32_score7:
if_cannot_participate MON_3, ContestEffectEnd
score +5
end
ContestEffect46:
if_user_order_eq MON_1, ContestEffect46_05
if_user_order_more_than MON_1, ContestEffect46_score4
end
ContestEffect46_05:
if_turn_not_eq 0, ContestEffect46_score1
if_excitement_eq 4, ContestEffect46_score2
if_excitement_eq 3, ContestEffect46_score3
end
ContestEffect46_score1:
if_random 125, ContestEffectEnd
score -15
end
ContestEffect46_score2:
if_random 125, ContestEffectEnd
score +20
end
ContestEffect46_score3:
if_random 125, ContestEffectEnd
score +15
end
ContestEffect46_score4:
if_random 178, ContestEffectEnd
score +10
end
ContestEffect27:
if_user_order_eq MON_1, ContestEffectEnd
jump ContestEffect27_55_1
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
end
ContestEffect27_score1:
if_random 125, ContestEffect27_55_2
score +5
if_user_order_more_than MON_2, ContestEffect27_55_2
end
ContestEffect27_score2:
if_random 125, ContestEffect27_55_2
score +10
if_user_order_more_than MON_2, ContestEffect27_55_2
end
ContestEffect27_score3:
if_random 125, ContestEffect27_55_2
score +15
if_user_order_more_than MON_2, ContestEffect27_55_2
end
ContestEffect27_noscore:
if_user_order_more_than MON_2, ContestEffect27_55_2
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
end
ContestEffect27_score4:
if_random 125, ContestEffect27_55_3
score +5
if_user_order_more_than MON_3, ContestEffect27_55_3
end
ContestEffect27_score5:
if_random 125, ContestEffect27_55_3
score +10
if_user_order_more_than MON_3, ContestEffect27_55_3
end
ContestEffect27_score6:
if_random 125, ContestEffect27_55_3
score +15
if_user_order_more_than MON_3, ContestEffect27_55_3
end
ContestEffect27_noscore2:
if_user_order_more_than MON_3, ContestEffect27_55_3
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
end
ContestEffect27_score7:
if_random 125, ContestEffectEnd
score +5
end
ContestEffect27_score8:
if_random 125, ContestEffectEnd
score +10
end
ContestEffect27_score9:
if_random 125, ContestEffectEnd
score +15
end
ContestEffect27_end:
end
ContestEffect16or17:
if_user_order_eq MON_1, ContestEffectEnd
jump ContestEffect16or17_55
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
score +2
contest_58 MON_1, ContestEffect16or17_0E_1
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
score +2
contest_58 MON_2, ContestEffect16or17_0E_2
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
score +2
contest_58 MON_3, ContestEffectEnd
score +8
end
ContestEffect_FollowingMonsNervous:
if_user_order_eq MON_4, ContestEffectEnd
jump ContestEffect_FollowingMonsNervous_CheckMon4
end
ContestEffect_FollowingMonsNervous_CheckMon4:
if_cannot_participate MON_4, ContestEffect_FollowingMonsNervous_CheckMon3
if_used_combo_starter_eq MON_4, FALSE, ContestEffect_FollowingMonsNervous_CheckMon3
score +5
if_random 125, ContestEffect16or17_0E_1
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
score +5
if_random 125, ContestEffect16or17_0E_2
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
score +5
if_random 125, ContestEffectEnd
score +5
end
ContestEffect18:
if_turn_eq 4, ContestEffect18_score1
jump ContestEffect18_0E
end
ContestEffect18_score1:
score +5
jump ContestEffect18_0E
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
end
ContestEffect18_score2:
score -15
end
ContestEffect18_random1:
if_random 125, ContestEffectEnd
score -10
end
ContestEffect18_random2:
if_random 125, ContestEffectEnd
score +5
end
ContestEffect18_random3:
if_random 125, ContestEffectEnd
score +15
end
ContestEffectEnd:
end
@ Randomly encourage moves in Cute, Smart, and Tough contests.
AI_Erratic:
if_contest_type_eq CONTEST_CUTE, Erratic_CuteSmartTough
if_contest_type_eq CONTEST_SMART, Erratic_CuteSmartTough
if_contest_type_eq CONTEST_TOUGH, Erratic_CuteSmartTough
end
Erratic_CuteSmartTough:
if_random 125, Erratic_NoScoreIncrease
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:
score -10
end
ContestEffect2_8_score2:
if_can_participate MON_1, ContestEffectEnd2
score -10
end
ContestEffect2_8_score3:
if_can_participate MON_2, ContestEffectEnd2
score -10
end
ContestEffect2_8_score4:
if_can_participate MON_3, ContestEffectEnd2
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
end
ContestEffect2_9_score1:
score -20
end
ContestEffect2_9_score2:
if_can_participate MON_1, ContestEffectEnd2
score -15
end
ContestEffect2_9_score3:
if_can_participate MON_1, ContestEffectEnd2
if_can_participate MON_2, ContestEffectEnd2
score -15
end
ContestEffect2_9_score4:
if_can_participate MON_1, ContestEffectEnd2
if_can_participate MON_2, ContestEffectEnd2
if_can_participate MON_3, ContestEffectEnd2
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
score -10
end
ContestEffect2_25_score1:
if_can_participate MON_2, ContestEffectEnd2
score -10
end
ContestEffect2_25_score2:
if_can_participate MON_3, ContestEffectEnd2
score -10
end
ContestEffect2_25_score3:
if_can_participate MON_4, ContestEffectEnd2
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
score -10
end
ContestEffect2_26_score1:
if_can_participate MON_2, ContestEffectEnd2
if_can_participate MON_3, ContestEffectEnd2
if_can_participate MON_4, ContestEffectEnd2
score -10
end
ContestEffect2_26_score2:
if_can_participate MON_3, ContestEffectEnd2
if_can_participate MON_4, ContestEffectEnd2
score -10
end
ContestEffect2_26_score3:
if_can_participate MON_4, ContestEffectEnd2
score -10
end
ContestEffect2_38:
if_user_condition_less_than 3, ContestEffectEnd2
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
score -10
end
ContestEffect2_4_score1:
if_can_participate MON_2, ContestEffectEnd2
if_can_participate MON_3, ContestEffectEnd2
if_can_participate MON_4, ContestEffectEnd2
score -10
end
ContestEffect2_4_score2:
if_can_participate MON_3, ContestEffectEnd2
if_can_participate MON_4, ContestEffectEnd2
score -10
end
ContestEffect2_4_score3:
if_can_participate MON_4, ContestEffectEnd2
score -10
end
ContestEffect2_2:
if_turn_eq 0, ContestEffect2_2_score1
if_turn_eq 1, ContestEffect2_2_score2
if_turn_eq 2, ContestEffect2_2_score3
if_turn_eq 3, ContestEffect2_2_score4
if_turn_eq 4, ContestEffect2_2_score5
end
ContestEffect2_2_score1:
if_random 20, ContestEffectEnd2
score -15
end
ContestEffect2_2_score2:
if_random 40, ContestEffectEnd2
score -15
end
ContestEffect2_2_score3:
if_random 60, ContestEffectEnd2
score -15
end
ContestEffect2_2_score4:
if_random 80, ContestEffectEnd2
score -15
end
ContestEffect2_2_score5:
if_random 20, ContestEffectEnd2
score +20
end
ContestEffectEnd2:
end
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
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
end
AI_score1_081DCA4C:
score +15
end
AI_score2_081DCA4C:
score -15
end
AI_random1_081DCA4C:
if_random 100, ContestEffectEnd2
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
end
AI_score3_081DCA4C:
score -5
end
AI_random2_081DCA4C:
if_random 125, ContestEffectEnd2
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
end
AI_score4_081DCA4C:
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
end
AI_score5_081DCA4C:
score +15
end
AI_score6_081DCA4C:
score -10
end
AI_random3_081DCA4C:
if_random 125, ContestEffectEnd2
score +10
end
AI_score7_081DCA4C:
score +5
end
AI_Nothing:
end