pokeemerald/data/contest_ai_scripts.s

921 lines
32 KiB
ArmAsm

#include "config.h"
#include "constants/global.h"
#include "constants/contest.h"
.include "asm/macros.inc"
.include "asm/macros/contest_ai_script.inc"
.include "constants/constants.inc"
.section script_data, "aw", %progbits
enum_start
enum MON_1
enum MON_2
enum MON_3
enum MON_4
.align 2
gContestAI_ScriptsTable::
.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_CheckGoodMove @ CONTEST_AI_CHECK_GOOD_MOVE
.4byte AI_Erratic @ CONTEST_AI_ERRATIC
.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
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
@ Unused
AI_PreferMostAppealingMove:
if_most_appealing_move AI_PreferMostAppealingMove_Encourage
end
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_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_1stRepeat:
score -5
end
AI_CheckBoring_2ndRepeat:
score -15
end
AI_CheckBoring_3rdRepeat:
score -20
end
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_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_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_CheckExcitement_Negative_1AwayFromMax_Not1stUp:
if_random_less_than 127, AI_CheckExcitement_End
score -10
end
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_CheckExcitement_Negative_2AwayFromMax_LastAppeal:
score +15
end
AI_CheckExcitement_Negative_2AwayFromMax_Not1stUp:
if_random_less_than 127, AI_CheckExcitement_End
score +10
end
AI_CheckExcitement_Neutral:
if_random_less_than 127, AI_CheckExcitement_End
score +10
end
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_CheckExcitement_Positive_Not1stUpForMax:
if_random_less_than 100, AI_CheckExcitement_End
score +10
end
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_CheckExcitement_End:
end
@ 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_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_CheckCombo_CheckFinisherWithoutStarter:
if_not_combo_finisher AI_CheckCombo_End
score -10
end
AI_CheckCombo_WouldFinish:
score +25
end
AI_CheckCombo_Starter1stUp:
if_last_appeal AI_CheckCombo_StarterOnLastAppeal
if_random_less_than 150, AI_CheckCombo_End
score +10
end
AI_CheckCombo_Starter2ndUp:
if_last_appeal AI_CheckCombo_StarterOnLastAppeal
if_random_less_than 125, AI_CheckCombo_End
score +10
end
AI_CheckCombo_Starter3rdUp:
if_last_appeal AI_CheckCombo_StarterOnLastAppeal
if_random_less_than 50, AI_CheckCombo_End
score +10
end
AI_CheckCombo_StarterLast:
if_last_appeal AI_CheckCombo_StarterOnLastAppeal
score +10
end
AI_CheckCombo_StarterOnLastAppeal:
if_random_less_than 125, AI_CheckCombo_End
score -15
end
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
AI_CGM_BetterWithGoodCondition_2:
if_random_less_than 125, AI_CGM_End
score +15
end
AI_CGM_BetterWithGoodCondition_1:
if_random_less_than 125, AI_CGM_End
score +5
end
AI_CGM_BetterWithGoodCondition_0:
score -20
end
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
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
AI_CGM_RepetitionNotBoring:
if_user_order_not_eq MON_4, AI_CGM_End
if_random_less_than 50, AI_CGM_End
score +15
end
AI_CGM_Unused:
if_last_appeal AI_CGM_Unused_LastAppeal
if_random_less_than 220, AI_CGM_Unused_Discourage
score +10
end
AI_CGM_Unused_LastAppeal:
if_random_less_than 20, AI_CGM_End
score +15
end
AI_CGM_Unused_Discourage:
score -20
end
@ 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
AI_CGM_ImproveCondition_AtMax:
score -10
end
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
AI_CGM_ImproveCondition_FirstAppeal:
if_random_less_than 100, AI_CGM_End
score +10
end
AI_CGM_ImproveCondition_LastAppeal:
score -10
end
@ 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
AI_CGM_DontExciteAudience_EarlyTurn:
if_random_less_than 127, AI_CGM_End
score +10
end
@ 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
AI_CGM_AppealAsGoodAsPrevOnes_2ndUp:
score +5
end
AI_CGM_AppealAsGoodAsPrevOnes_3rdUp:
score +15
end
AI_CGM_AppealAsGoodAsPrevOnes_Last:
score +20
end
@ 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
AI_CGM_AppealAsGoodAsPrevOne_1stUp:
score -10
end
AI_CGM_AppealAsGoodAsPrevOne_2ndUp:
if_cannot_participate MON_1, AI_CGM_End
score +5
end
AI_CGM_AppealAsGoodAsPrevOne_3rdUp:
if_cannot_participate MON_1, AI_CGM_AppealAsGoodAsPrevOne_3rdUp_CheckMon2
score +5
goto AI_CGM_AppealAsGoodAsPrevOne_3rdUp_CheckMon2
end
AI_CGM_AppealAsGoodAsPrevOne_3rdUp_CheckMon2:
if_cannot_participate MON_2, AI_CGM_End
score +5
end
AI_CGM_AppealAsGoodAsPrevOne_Last:
if_cannot_participate MON_1, AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon2
score +5
goto AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon2
end
AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon2:
if_cannot_participate MON_2, AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon3
score +5
goto AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon3
end
AI_CGM_AppealAsGoodAsPrevOne_Last_CheckMon3:
if_cannot_participate MON_3, AI_CGM_End
score +5
end
@ 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
AI_CGM_BetterWhenAudienceExcited_1stUp:
@ BUG: Should be if_appeal_num_eq 0
@ 1st up on 1st appeal excitement will always be 0
#ifdef BUGFIX
if_appeal_num_eq 0, AI_CGM_BetterWhenAudienceExcited_1stAppeal
#else
if_appeal_num_not_eq 0, AI_CGM_BetterWhenAudienceExcited_1stAppeal
#endif
if_excitement_eq 4, AI_CGM_BetterWhenAudienceExcited_1AwayFromMax
if_excitement_eq 3, AI_CGM_BetterWhenAudienceExcited_2AwayFromMax
end
AI_CGM_BetterWhenAudienceExcited_1stAppeal:
if_random_less_than 125, AI_CGM_End
score -15
end
AI_CGM_BetterWhenAudienceExcited_1AwayFromMax:
if_random_less_than 125, AI_CGM_End
score +20
end
AI_CGM_BetterWhenAudienceExcited_2AwayFromMax:
if_random_less_than 125, AI_CGM_End
score +15
end
AI_CGM_BetterWhenAudienceExcited_Not1stUp:
if_random_less_than 178, AI_CGM_End
score +10
end
@ 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
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
AI_CGM_WorsenConditionOfPrevMons_Mon1Has1Star:
if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon2
score +5
if_user_order_more_than MON_2, AI_CGM_WorsenConditionOfPrevMons_CheckMon2
end
AI_CGM_WorsenConditionOfPrevMons_Mon1Has2Stars:
if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon2
score +10
if_user_order_more_than MON_2, AI_CGM_WorsenConditionOfPrevMons_CheckMon2
end
AI_CGM_WorsenConditionOfPrevMons_Mon1Has3Stars:
if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon2
score +15
if_user_order_more_than MON_2, AI_CGM_WorsenConditionOfPrevMons_CheckMon2
end
AI_CGM_WorsenConditionOfPrevMons_TryCheckMon2:
if_user_order_more_than MON_2, AI_CGM_WorsenConditionOfPrevMons_CheckMon2
end
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
AI_CGM_WorsenConditionOfPrevMons_Mon2Has1Star:
if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon3
score +5
if_user_order_more_than MON_3, AI_CGM_WorsenConditionOfPrevMons_CheckMon3
end
AI_CGM_WorsenConditionOfPrevMons_Mon2Has2Stars:
if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon3
score +10
if_user_order_more_than MON_3, AI_CGM_WorsenConditionOfPrevMons_CheckMon3
end
AI_CGM_WorsenConditionOfPrevMons_Mon2Has3Stars:
if_random_less_than 125, AI_CGM_WorsenConditionOfPrevMons_CheckMon3
score +15
if_user_order_more_than MON_3, AI_CGM_WorsenConditionOfPrevMons_CheckMon3
end
AI_CGM_WorsenConditionOfPrevMons_TryCheckMon3:
if_user_order_more_than MON_3, AI_CGM_WorsenConditionOfPrevMons_CheckMon3
end
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
AI_CGM_WorsenConditionOfPrevMons_Mon3Has1Star:
if_random_less_than 125, AI_CGM_End
score +5
end
AI_CGM_WorsenConditionOfPrevMons_Mon3Has2Stars:
if_random_less_than 125, AI_CGM_End
score +10
end
AI_CGM_WorsenConditionOfPrevMons_Mon3Has3Stars:
if_random_less_than 125, AI_CGM_End
score +15
end
AI_CGM_WorsenConditionOfPrevMons_end:
end
@ 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
AI_CGM_TargetMonWithJudgesAttention_CheckMon1:
if_cannot_participate MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
#ifdef BUGFIX
if_not_used_combo_starter MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
#else
if_used_combo_starter MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
#endif
if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
score +2
if_not_completed_combo MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
score +8
end
AI_CGM_TargetMonWithJudgesAttention_CheckMon2:
if_user_order_eq MON_2, AI_CGM_End
if_cannot_participate MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
#ifdef BUGFIX
if_not_used_combo_starter MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
#else
if_used_combo_starter MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
#endif
if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
score +2
if_not_completed_combo MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
score +8
end
AI_CGM_TargetMonWithJudgesAttention_CheckMon3:
if_user_order_eq MON_3, AI_CGM_End
if_cannot_participate MON_3, AI_CGM_End
#ifdef BUGFIX
if_not_used_combo_starter MON_3, AI_CGM_End
#else
if_used_combo_starter MON_3, AI_CGM_End
#endif
if_random_less_than 125, AI_CGM_End
score +2
if_not_completed_combo MON_3, AI_CGM_End
score +8
end
@ 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
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_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
score +5
end
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_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
score +5
end
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_less_than 125, AI_CGM_End
score +5
end
@ 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
AI_CGM_JamsOthersButMissOneTurn_LastAppeal:
score +5
goto AI_CGM_JamsOthersButMissOneTurn_TurnOrder
end
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
AI_CGM_JamsOthersButMissOneTurn_1stUp:
score -15
end
AI_CGM_JamsOthersButMissOneTurn_2ndUp:
if_random_less_than 125, AI_CGM_End
score -10
end
AI_CGM_JamsOthersButMissOneTurn_3rdUp:
if_random_less_than 125, AI_CGM_End
score +5
end
AI_CGM_JamsOthersButMissOneTurn_Last:
if_random_less_than 125, AI_CGM_End
score +15
end
AI_CGM_End:
end
@ Randomly encourage moves in Cute, Smart, and Tough contests.
AI_Erratic:
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
AI_Erratic_CuteSmartTough:
if_random_less_than 125, AI_Erratic_End
score +10
end
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
AI_CBM_DependsOnPrevMon_2ndUp:
if_can_participate MON_1, AI_CBM_End
score -10
end
AI_CBM_DependsOnPrevMon_3rdUp:
if_can_participate MON_2, AI_CBM_End
score -10
end
AI_CBM_DependsOnPrevMon_Last:
if_can_participate MON_3, AI_CBM_End
score -10
end
@ 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
AI_CBM_DependsOnPrevMons_1stUp:
score -20
end
AI_CBM_DependsOnPrevMons_2ndUp:
if_can_participate MON_1, AI_CBM_End
score -15
end
AI_CBM_DependsOnPrevMons_3rdUp:
if_can_participate MON_1, AI_CBM_End
if_can_participate MON_2, AI_CBM_End
score -15
end
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
@ 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
AI_CBM_DependsOnNextMon_1stUp:
if_can_participate MON_2, AI_CBM_End
score -10
end
AI_CBM_DependsOnNextMon_2ndUp:
if_can_participate MON_3, AI_CBM_End
score -10
end
AI_CBM_DependsOnNextMon_3rdUp:
if_can_participate MON_4, AI_CBM_End
score -10
end
@ 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
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
AI_CBM_DependsOnNextMons_2ndUp:
if_can_participate MON_3, AI_CBM_End
if_can_participate MON_4, AI_CBM_End
score -10
end
AI_CBM_DependsOnNextMons_3rdUp:
if_can_participate MON_4, AI_CBM_End
score -10
end
@ If at max condition, discourage move
AI_CBM_ImproveCondition:
if_user_condition_less_than 3, AI_CBM_End
score -20
end
@ 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
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
AI_CBM_AvoidStartle_2ndUp:
if_can_participate MON_3, AI_CBM_End
if_can_participate MON_4, AI_CBM_End
score -10
end
AI_CBM_AvoidStartle_3rdUp:
if_can_participate MON_4, AI_CBM_End
score -10
end
@ 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
AI_CBM_NoMoreMoves_1stAppeal:
if_random_less_than 20, AI_CBM_End
score -15
end
AI_CBM_NoMoreMoves_2ndAppeal:
if_random_less_than 40, AI_CBM_End
score -15
end
AI_CBM_NoMoreMoves_3rdAppeal:
if_random_less_than 60, AI_CBM_End
score -15
end
AI_CBM_NoMoreMoves_4thAppeal:
if_random_less_than 80, AI_CBM_End
score -15
end
AI_CBM_NoMoreMoves_LastAppeal:
if_random_less_than 20, AI_CBM_End
score +20
end
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_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_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_CheckOrder_1stUp_Encourage:
score +15
end
AI_CheckOrder_1stUp_Discourage:
score -15
end
AI_CheckOrder_1stUp_RandomEncourage:
if_random_less_than 100, AI_CBM_End
score +10
end
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_CheckOrder_2ndUp_Discourage:
score -5
end
AI_CheckOrder_2ndUp_RandomEncourage:
if_random_less_than 125, AI_CBM_End
score +10
end
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_CheckOrder_3rdUp_Encourage:
score +5
end
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_CheckOrder_Last_StronglyEncourage:
score +15
end
AI_CheckOrder_Last_Discourage:
score -10
end
AI_CheckOrder_Last_RandomEncourage:
if_random_less_than 125, AI_CBM_End
score +10
end
AI_CheckOrder_Last_Encourage:
score +5
end
AI_Nothing:
end