Changed AI's random move choice after scores are calculated

This commit is contained in:
Maruno17
2022-08-27 20:37:05 +01:00
parent 265897f9e1
commit fbbddc8c2b
10 changed files with 1361 additions and 98 deletions

View File

@@ -9,12 +9,9 @@ class Battle::AI
choices = [] choices = []
# TODO: Split this into two, the first part being the calculation of all # TODO: Split this into two, the first part being the calculation of all
# predicted damages and the second part being the score calculations # predicted damages and the second part being the score calculations
# (which are based on the predicted damages). Note that this requires # (which are based on the predicted damages). Multi-target moves could
# saving each of the scoresAndTargets entries in here rather than in # be fiddly since damages should be calculated for each target but
# def pbRegisterMoveTrainer, and only at the very end are they # they're all related.
# whittled down to one per move which are chosen from. Multi-target
# moves could be fiddly since damages should be calculated for each
# target but they're all related.
battler.eachMoveWithIndex do |_m, i| battler.eachMoveWithIndex do |_m, i|
next if !@battle.pbCanChooseMove?(battler.index, i, false) next if !@battle.pbCanChooseMove?(battler.index, i, false)
if @user.wild? if @user.wild?
@@ -73,17 +70,11 @@ class Battle::AI
choices.push([idxMove, totalScore, -1]) if totalScore > 0 choices.push([idxMove, totalScore, -1]) if totalScore > 0
else else
# If move affects one battler and you have to choose which one # If move affects one battler and you have to choose which one
scoresAndTargets = []
@battle.allBattlers.each do |b| @battle.allBattlers.each do |b|
next if !@battle.pbMoveCanTarget?(battler.index, b.index, target_data) next if !@battle.pbMoveCanTarget?(battler.index, b.index, target_data)
next if target_data.targets_foe && !battler.opposes?(b) next if target_data.targets_foe && !battler.opposes?(b)
score = pbGetMoveScore(move, b) score = pbGetMoveScore(move, b)
scoresAndTargets.push([score, b.index]) if score > 0 choices.push([idxMove, score, b.index]) if score > 0
end
if scoresAndTargets.length > 0
# Get the one best target for the move
scoresAndTargets.sort! { |a, b| b[0] <=> a[0] }
choices.push([idxMove, scoresAndTargets[0][0], scoresAndTargets[0][1]])
end end
end end
end end
@@ -466,7 +457,7 @@ class Battle::AI
"UserTargetSwapBaseSpeed", "UserTargetSwapBaseSpeed",
"RedirectAllMovesToTarget", "RedirectAllMovesToTarget",
"TargetUsesItsLastUsedMoveAgain" "TargetUsesItsLastUsedMoveAgain"
return 5 return 55
when "RaiseUserAttack1", when "RaiseUserAttack1",
"RaiseUserDefense1", "RaiseUserDefense1",
"RaiseUserDefense1CurlUpUser", "RaiseUserDefense1CurlUpUser",
@@ -490,7 +481,7 @@ class Battle::AI
"LowerTargetAtkSpAtk1", "LowerTargetAtkSpAtk1",
"LowerTargetSpAtk1", "LowerTargetSpAtk1",
"TargetNextFireMoveDamagesTarget" "TargetNextFireMoveDamagesTarget"
return 10 return 60
when "SleepTarget", when "SleepTarget",
"SleepTargetIfUserDarkrai", "SleepTargetIfUserDarkrai",
"SleepTargetChangeUserMeloettaForm", "SleepTargetChangeUserMeloettaForm",
@@ -527,7 +518,7 @@ class Battle::AI
"LowerTargetAtkSpAtk1SwitchOutUser", "LowerTargetAtkSpAtk1SwitchOutUser",
"RaisePlusMinusUserAndAlliesAtkSpAtk1", "RaisePlusMinusUserAndAlliesAtkSpAtk1",
"HealTargetDependingOnGrassyTerrain" "HealTargetDependingOnGrassyTerrain"
return 15 return 65
when "SleepTarget", when "SleepTarget",
"SleepTargetChangeUserMeloettaForm", "SleepTargetChangeUserMeloettaForm",
"SleepTargetNextTurn", "SleepTargetNextTurn",
@@ -553,7 +544,7 @@ class Battle::AI
"TargetMovesBecomeElectric", "TargetMovesBecomeElectric",
"NormalMovesBecomeElectric", "NormalMovesBecomeElectric",
"PoisonTargetLowerTargetSpeed1" "PoisonTargetLowerTargetSpeed1"
return 20 return 70
when "BadPoisonTarget", when "BadPoisonTarget",
"ParalyzeTarget", "ParalyzeTarget",
"BurnTarget", "BurnTarget",
@@ -585,7 +576,7 @@ class Battle::AI
"InvertTargetStatStages", "InvertTargetStatStages",
"HealUserByTargetAttackLowerTargetAttack1", "HealUserByTargetAttackLowerTargetAttack1",
"HealUserDependingOnSandstorm" "HealUserDependingOnSandstorm"
return 25 return 75
when "ParalyzeTarget", when "ParalyzeTarget",
"ParalyzeTargetIfNotTypeImmune", "ParalyzeTargetIfNotTypeImmune",
"RaiseUserAtkDef1", "RaiseUserAtkDef1",
@@ -606,7 +597,7 @@ class Battle::AI
"StartMistyTerrain", "StartMistyTerrain",
"StartPsychicTerrain", "StartPsychicTerrain",
"CureTargetStatusHealUserHalfOfTotalHP" "CureTargetStatusHealUserHalfOfTotalHP"
return 30 return 80
when "CureUserPartyStatus", when "CureUserPartyStatus",
"RaiseUserAttack2", "RaiseUserAttack2",
"RaiseUserSpAtk2", "RaiseUserSpAtk2",
@@ -617,18 +608,18 @@ class Battle::AI
"ProtectUserSideFromDamagingMovesIfUserFirstTurn", "ProtectUserSideFromDamagingMovesIfUserFirstTurn",
"ProtectUserFromDamagingMovesKingsShield", "ProtectUserFromDamagingMovesKingsShield",
"ProtectUserBanefulBunker" "ProtectUserBanefulBunker"
return 35 return 85
when "RaiseUserAtkSpd1", when "RaiseUserAtkSpd1",
"RaiseUserSpAtkSpDefSpd1", "RaiseUserSpAtkSpDefSpd1",
"LowerUserDefSpDef1RaiseUserAtkSpAtkSpd2", "LowerUserDefSpDef1RaiseUserAtkSpAtkSpd2",
"RaiseUserAtk1Spd2", "RaiseUserAtk1Spd2",
"TwoTurnAttackRaiseUserSpAtkSpDefSpd2" "TwoTurnAttackRaiseUserSpAtkSpDefSpd2"
return 40 return 90
when "SleepTarget", when "SleepTarget",
"SleepTargetChangeUserMeloettaForm", "SleepTargetChangeUserMeloettaForm",
"AddStickyWebToFoeSide", "AddStickyWebToFoeSide",
"StartWeakenDamageAgainstUserSideIfHail" "StartWeakenDamageAgainstUserSideIfHail"
return 60 return 100
end end
# "DoesNothingUnusableInGravity", # "DoesNothingUnusableInGravity",
# "StartUserSideImmunityToInflictedStatus", # "StartUserSideImmunityToInflictedStatus",
@@ -644,7 +635,7 @@ class Battle::AI
# "TargetActsNext", # "TargetActsNext",
# "TargetActsLast", # "TargetActsLast",
# "ProtectUserSideFromStatusMoves" # "ProtectUserSideFromStatusMoves"
return 0 return 100
end end
#============================================================================= #=============================================================================
@@ -654,48 +645,33 @@ class Battle::AI
def pbChooseMove(choices) def pbChooseMove(choices)
user_battler = @user.battler user_battler = @user.battler
# Figure out useful information about the choices # If there are no calculated choices, pick one at random
totalScore = 0 if choices.length == 0
maxScore = 0 user_battler.eachMoveWithIndex do |_m, i|
choices.each do |c| next if !@battle.pbCanChooseMove?(user_battler.index, i, false)
totalScore += c[1] choices.push([i, 100, -1]) # Move index, score, target
maxScore = c[1] if maxScore < c[1]
end end
if choices.length == 0 # No moves are physically possible to use; use Struggle
# Find any preferred moves and just choose from them @battle.pbAutoChooseMove(user_battler.index)
if @trainer.high_skill? && maxScore > 100 PBDebug.log("[AI] #{user_battler.pbThis} (#{user_battler.index}) will auto-use a move or Struggle")
stDev = pbStdDev(choices)
if stDev >= 40 && pbAIRandom(100) < 90
preferredMoves = []
choices.each do |c|
next if c[1] < 200 && c[1] < maxScore * 0.8
preferredMoves.push(c)
preferredMoves.push(c) if c[1] == maxScore # Doubly prefer the best move
end
if preferredMoves.length > 0
m = preferredMoves[pbAIRandom(preferredMoves.length)]
PBDebug.log("[AI] #{user_battler.pbThis} (#{user_battler.index}) prefers #{user_battler.moves[m[0]].name}")
@battle.pbRegisterMove(user_battler.index, m[0], false)
@battle.pbRegisterTarget(user_battler.index, m[2]) if m[2] >= 0
return return
end end
PBDebug.log("[AI] #{user_battler.pbThis} (#{user_battler.index}) doesn't want to use any moves; picking one at random")
end end
end
# Figure out useful information about the choices
max_score = 0
choices.each { |c| max_score = c[1] if max_score < c[1] }
# Decide whether all choices are bad, and if so, try switching instead # Decide whether all choices are bad, and if so, try switching instead
if @trainer.high_skill? && @user.can_switch_lax? if @trainer.high_skill? && @user.can_switch_lax?
badMoves = false badMoves = false
if (maxScore <= 20 && user_battler.turnCount > 2) || if (max_score <= 20 && user_battler.turnCount > 2) ||
(maxScore <= 40 && user_battler.turnCount > 5) (max_score <= 40 && user_battler.turnCount > 5)
badMoves = true if pbAIRandom(100) < 80 badMoves = true if pbAIRandom(100) < 80
end end
if !badMoves && totalScore < 100 && user_battler.turnCount > 1 if !badMoves && max_score < 60 && user_battler.turnCount > 1
badMoves = true badMoves = choices.none? { |c| user_battler.moves[c[0]].damagingMove? }
choices.each do |c|
next if !user_battler.moves[c[0]].damagingMove?
badMoves = false
break
end
badMoves = false if badMoves && pbAIRandom(100) < 10 badMoves = false if badMoves && pbAIRandom(100) < 10
end end
if badMoves && pbEnemyShouldWithdrawEx?(true) if badMoves && pbEnemyShouldWithdrawEx?(true)
@@ -706,20 +682,13 @@ class Battle::AI
end end
end end
# If there are no calculated choices, pick one at random # Calculate a minimum score threshold and reduce all move scores by it
if choices.length == 0 threshold = (max_score * 0.85).floor
PBDebug.log("[AI] #{user_battler.pbThis} (#{user_battler.index}) doesn't want to use any moves; picking one at random") choices.each { |c| c[1] = [c[1] - threshold, 0].max }
user_battler.eachMoveWithIndex do |_m, i| total_score = choices.sum { |c| c[1] }
next if !@battle.pbCanChooseMove?(user_battler.index, i, false)
choices.push([i, 100, -1]) # Move index, score, target
end
if choices.length == 0 # No moves are physically possible to use; use Struggle
@battle.pbAutoChooseMove(user_battler.index)
end
end
# Randomly choose a move from the choices and register it # Pick a move randomly from choices weighted by their scores
randNum = pbAIRandom(totalScore) randNum = pbAIRandom(total_score)
choices.each do |c| choices.each do |c|
randNum -= c[1] randNum -= c[1]
next if randNum >= 0 next if randNum >= 0
@@ -727,6 +696,7 @@ class Battle::AI
@battle.pbRegisterTarget(user_battler.index, c[2]) if c[2] >= 0 @battle.pbRegisterTarget(user_battler.index, c[2]) if c[2] >= 0
break break
end end
# Log the result # Log the result
if @battle.choices[user_battler.index][2] if @battle.choices[user_battler.index][2]
PBDebug.log("[AI] #{user_battler.pbThis} (#{user_battler.index}) will use #{@battle.choices[user_battler.index][2].name}") PBDebug.log("[AI] #{user_battler.pbThis} (#{user_battler.index}) will use #{@battle.choices[user_battler.index][2].name}")

View File

@@ -3,8 +3,14 @@
#=============================================================================== #===============================================================================
# Struggle # Struggle
#===============================================================================
#
#===============================================================================
# None # None
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("DoesNothingCongratulations", Battle::AI::Handlers::MoveEffectScore.add("DoesNothingCongratulations",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next 0 if ai.trainer.high_skill? next 0 if ai.trainer.high_skill?
@@ -12,6 +18,9 @@ Battle::AI::Handlers::MoveEffectScore.add("DoesNothingCongratulations",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("DoesNothingFailsIfNoAlly", Battle::AI::Handlers::MoveFailureCheck.add("DoesNothingFailsIfNoAlly",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.battler.allAllies.length == 0 next true if user.battler.allAllies.length == 0
@@ -20,18 +29,35 @@ Battle::AI::Handlers::MoveFailureCheck.add("DoesNothingFailsIfNoAlly",
Battle::AI::Handlers::MoveEffectScore.copy("DoesNothingCongratulations", Battle::AI::Handlers::MoveEffectScore.copy("DoesNothingCongratulations",
"DoesNothingFailsIfNoAlly") "DoesNothingFailsIfNoAlly")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("DoesNothingCongratulations",
"DoesNothingUnusableInGravity")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("DoesNothingCongratulations", Battle::AI::Handlers::MoveEffectScore.copy("DoesNothingCongratulations",
"DoesNothingUnusableInGravity",
"DoubleMoneyGainedFromBattle") "DoubleMoneyGainedFromBattle")
#===============================================================================
#
#===============================================================================
# AddMoneyGainedFromBattle # AddMoneyGainedFromBattle
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("FailsIfNotUserFirstTurn", Battle::AI::Handlers::MoveFailureCheck.add("FailsIfNotUserFirstTurn",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.turnCount > 0 next true if user.turnCount > 0
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("FailsIfUserHasUnusedMove", Battle::AI::Handlers::MoveFailureCheck.add("FailsIfUserHasUnusedMove",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
has_another_move = false has_another_move = false
@@ -47,12 +73,18 @@ Battle::AI::Handlers::MoveFailureCheck.add("FailsIfUserHasUnusedMove",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("FailsIfUserNotConsumedBerry", Battle::AI::Handlers::MoveFailureCheck.add("FailsIfUserNotConsumedBerry",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.battler.belched? next true if !user.battler.belched?
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("FailsIfTargetHasNoItem", Battle::AI::Handlers::MoveFailureCheck.add("FailsIfTargetHasNoItem",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.item || !target.item_active? next true if !target.item || !target.item_active?
@@ -64,6 +96,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FailsIfTargetHasNoItem",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("FailsUnlessTargetSharesTypeWithUser", Battle::AI::Handlers::MoveFailureCheck.add("FailsUnlessTargetSharesTypeWithUser",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
user_types = user.battler.pbTypes(true) user_types = user.battler.pbTypes(true)
@@ -72,6 +107,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("FailsUnlessTargetSharesTypeWithUser"
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("FailsIfUserDamagedThisTurn", Battle::AI::Handlers::MoveEffectScore.add("FailsIfUserDamagedThisTurn",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
score += 50 if target.effects[PBEffects::HyperBeam] > 0 score += 50 if target.effects[PBEffects::HyperBeam] > 0
@@ -81,14 +119,23 @@ Battle::AI::Handlers::MoveEffectScore.add("FailsIfUserDamagedThisTurn",
} }
) )
#===============================================================================
#
#===============================================================================
# FailsIfTargetActed # FailsIfTargetActed
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("CrashDamageIfFailsUnusableInGravity", Battle::AI::Handlers::MoveEffectScore.add("CrashDamageIfFailsUnusableInGravity",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + 10 * (user.stages[:ACCURACY] - target.stages[:EVASION]) next score + 10 * (user.stages[:ACCURACY] - target.stages[:EVASION])
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartSunWeather", Battle::AI::Handlers::MoveFailureCheck.add("StartSunWeather",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if [:HarshSun, :HeavyRain, :StrongWinds, next true if [:HarshSun, :HeavyRain, :StrongWinds,
@@ -110,6 +157,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartSunWeather",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("StartSunWeather", Battle::AI::Handlers::MoveFailureCheck.copy("StartSunWeather",
"StartRainWeather") "StartRainWeather")
Battle::AI::Handlers::MoveEffectScore.add("StartRainWeather", Battle::AI::Handlers::MoveEffectScore.add("StartRainWeather",
@@ -127,6 +177,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartRainWeather",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("StartSunWeather", Battle::AI::Handlers::MoveFailureCheck.copy("StartSunWeather",
"StartSandstormWeather") "StartSandstormWeather")
Battle::AI::Handlers::MoveEffectScore.add("StartSandstormWeather", Battle::AI::Handlers::MoveEffectScore.add("StartSandstormWeather",
@@ -138,6 +191,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartSandstormWeather",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("StartSunWeather", Battle::AI::Handlers::MoveFailureCheck.copy("StartSunWeather",
"StartHailWeather") "StartHailWeather")
Battle::AI::Handlers::MoveEffectScore.add("StartHailWeather", Battle::AI::Handlers::MoveEffectScore.add("StartHailWeather",
@@ -149,36 +205,54 @@ Battle::AI::Handlers::MoveEffectScore.add("StartHailWeather",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartElectricTerrain", Battle::AI::Handlers::MoveFailureCheck.add("StartElectricTerrain",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if battle.field.terrain == :Electric next true if battle.field.terrain == :Electric
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartGrassyTerrain", Battle::AI::Handlers::MoveFailureCheck.add("StartGrassyTerrain",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if battle.field.terrain == :Grassy next true if battle.field.terrain == :Grassy
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartMistyTerrain", Battle::AI::Handlers::MoveFailureCheck.add("StartMistyTerrain",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if battle.field.terrain == :Misty next true if battle.field.terrain == :Misty
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartPsychicTerrain", Battle::AI::Handlers::MoveFailureCheck.add("StartPsychicTerrain",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if battle.field.terrain == :Psychic next true if battle.field.terrain == :Psychic
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RemoveTerrain", Battle::AI::Handlers::MoveFailureCheck.add("RemoveTerrain",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if battle.field.terrain == :None next true if battle.field.terrain == :None
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("AddSpikesToFoeSide", Battle::AI::Handlers::MoveFailureCheck.add("AddSpikesToFoeSide",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.pbOpposingSide.effects[PBEffects::Spikes] >= 3 next true if user.pbOpposingSide.effects[PBEffects::Spikes] >= 3
@@ -196,6 +270,9 @@ Battle::AI::Handlers::MoveEffectScore.add("AddSpikesToFoeSide",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("AddToxicSpikesToFoeSide", Battle::AI::Handlers::MoveFailureCheck.add("AddToxicSpikesToFoeSide",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.pbOpposingSide.effects[PBEffects::ToxicSpikes] >= 2 next true if user.pbOpposingSide.effects[PBEffects::ToxicSpikes] >= 2
@@ -213,6 +290,9 @@ Battle::AI::Handlers::MoveEffectScore.add("AddToxicSpikesToFoeSide",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("AddStealthRocksToFoeSide", Battle::AI::Handlers::MoveFailureCheck.add("AddStealthRocksToFoeSide",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.pbOpposingSide.effects[PBEffects::StealthRock] next true if user.pbOpposingSide.effects[PBEffects::StealthRock]
@@ -228,12 +308,18 @@ Battle::AI::Handlers::MoveEffectScore.add("AddStealthRocksToFoeSide",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("AddStickyWebToFoeSide", Battle::AI::Handlers::MoveFailureCheck.add("AddStickyWebToFoeSide",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.pbOpposingSide.effects[PBEffects::StickyWeb] next true if user.pbOpposingSide.effects[PBEffects::StickyWeb]
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SwapSideEffects", Battle::AI::Handlers::MoveFailureCheck.add("SwapSideEffects",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
has_effect = false has_effect = false
@@ -277,6 +363,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SwapSideEffects",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("UserMakeSubstitute", Battle::AI::Handlers::MoveFailureCheck.add("UserMakeSubstitute",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.effects[PBEffects::Substitute] > 0 next true if user.effects[PBEffects::Substitute] > 0
@@ -284,6 +373,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("UserMakeSubstitute",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("RemoveUserBindingAndEntryHazards", Battle::AI::Handlers::MoveEffectScore.add("RemoveUserBindingAndEntryHazards",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
score += 30 if user.effects[PBEffects::Trapping] > 0 score += 30 if user.effects[PBEffects::Trapping] > 0
@@ -297,6 +389,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RemoveUserBindingAndEntryHazards",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("AttackTwoTurnsLater", Battle::AI::Handlers::MoveFailureCheck.add("AttackTwoTurnsLater",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if battle.positions[target.index].effects[PBEffects::FutureSightCounter] > 0 next true if battle.positions[target.index].effects[PBEffects::FutureSightCounter] > 0
@@ -311,6 +406,9 @@ Battle::AI::Handlers::MoveEffectScore.add("AttackTwoTurnsLater",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("UserSwapsPositionsWithAlly", Battle::AI::Handlers::MoveFailureCheck.add("UserSwapsPositionsWithAlly",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
num_targets = 0 num_targets = 0
@@ -324,6 +422,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("UserSwapsPositionsWithAlly",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("BurnAttackerBeforeUserActs", Battle::AI::Handlers::MoveEffectScore.add("BurnAttackerBeforeUserActs",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + 20 # Because of possible burning next score + 20 # Because of possible burning

View File

@@ -40,6 +40,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAttack1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAttack1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAttack1",
"RaiseUserAttack2") "RaiseUserAttack2")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAttack2", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAttack2",
@@ -78,17 +81,29 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAttack2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAttack2", Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAttack2",
"RaiseUserAttack2IfTargetFaints") "RaiseUserAttack2IfTargetFaints")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAttack2", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAttack2",
"RaiseUserAttack3") "RaiseUserAttack3")
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAttack2", Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAttack2",
"RaiseUserAttack3") "RaiseUserAttack3")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAttack2IfTargetFaints", Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAttack2IfTargetFaints",
"RaiseUserAttack3IfTargetFaints") "RaiseUserAttack3IfTargetFaints")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("MaxUserAttackLoseHalfOfTotalHP", Battle::AI::Handlers::MoveFailureCheck.add("MaxUserAttackLoseHalfOfTotalHP",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.hp <= [user.totalhp / 2, 1].max next true if user.hp <= [user.totalhp / 2, 1].max
@@ -115,6 +130,9 @@ Battle::AI::Handlers::MoveEffectScore.add("MaxUserAttackLoseHalfOfTotalHP",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAttack1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAttack1",
"RaiseUserDefense1") "RaiseUserDefense1")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense1", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense1",
@@ -127,11 +145,17 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserDefense1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserDefense1",
"RaiseUserDefense1CurlUpUser") "RaiseUserDefense1CurlUpUser")
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserDefense1", Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserDefense1",
"RaiseUserDefense1CurlUpUser") "RaiseUserDefense1CurlUpUser")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserDefense1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserDefense1",
"RaiseUserDefense2") "RaiseUserDefense2")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense2", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense2",
@@ -147,6 +171,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserDefense1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserDefense1",
"RaiseUserDefense3") "RaiseUserDefense3")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense3", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense3",
@@ -162,6 +189,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense3",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAttack1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAttack1",
"RaiseUserSpAtk1") "RaiseUserSpAtk1")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk1", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk1",
@@ -197,6 +227,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpAtk1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpAtk1",
"RaiseUserSpAtk2") "RaiseUserSpAtk2")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk2", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk2",
@@ -234,6 +267,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpAtk1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpAtk1",
"RaiseUserSpAtk3") "RaiseUserSpAtk3")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk3", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk3",
@@ -271,6 +307,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk3",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserDefense1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserDefense1",
"RaiseUserSpDef1") "RaiseUserSpDef1")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpDef1", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpDef1",
@@ -286,6 +325,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpDef1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpDef1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpDef1",
"RaiseUserSpDef1PowerUpElectricMove") "RaiseUserSpDef1PowerUpElectricMove")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpDef1PowerUpElectricMove", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpDef1PowerUpElectricMove",
@@ -306,13 +348,25 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpDef1PowerUpElectricMove",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpDef1",
"RaiseUserSpDef2")
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserSpDef1",
"RaiseUserSpDef2")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpDef1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpDef1",
"RaiseUserSpDef2",
"RaiseUserSpDef3") "RaiseUserSpDef3")
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserSpDef1", Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserSpDef1",
"RaiseUserSpDef2",
"RaiseUserSpDef3") "RaiseUserSpDef3")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpDef1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpDef1",
"RaiseUserSpeed1") "RaiseUserSpeed1")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpeed1", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpeed1",
@@ -331,6 +385,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpeed1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpeed1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpeed1",
"RaiseUserSpeed2") "RaiseUserSpeed2")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpeed2", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpeed2",
@@ -351,13 +408,25 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpeed2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpeed2",
"RaiseUserSpeed2LowerUserWeight")
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserSpeed2",
"RaiseUserSpeed2LowerUserWeight")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpeed2", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpeed2",
"RaiseUserSpeed2LowerUserWeight",
"RaiseUserSpeed3") "RaiseUserSpeed3")
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserSpeed2", Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserSpeed2",
"RaiseUserSpeed2LowerUserWeight",
"RaiseUserSpeed3") "RaiseUserSpeed3")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpeed1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpeed1",
"RaiseUserAccuracy1") "RaiseUserAccuracy1")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAccuracy1", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAccuracy1",
@@ -373,13 +442,25 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAccuracy1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAccuracy1",
"RaiseUserAccuracy2")
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAccuracy1",
"RaiseUserAccuracy2")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAccuracy1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAccuracy1",
"RaiseUserAccuracy2",
"RaiseUserAccuracy3") "RaiseUserAccuracy3")
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAccuracy1", Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAccuracy1",
"RaiseUserAccuracy2",
"RaiseUserAccuracy3") "RaiseUserAccuracy3")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAccuracy1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAccuracy1",
"RaiseUserEvasion1") "RaiseUserEvasion1")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserEvasion1", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserEvasion1",
@@ -393,6 +474,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserEvasion1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserEvasion1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserEvasion1",
"RaiseUserEvasion2") "RaiseUserEvasion2")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserEvasion2", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserEvasion2",
@@ -408,13 +492,25 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserEvasion2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserEvasion2",
"RaiseUserEvasion2MinimizeUser")
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserEvasion2",
"RaiseUserEvasion2MinimizeUser")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserEvasion2", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserEvasion2",
"RaiseUserEvasion2MinimizeUser",
"RaiseUserEvasion3") "RaiseUserEvasion3")
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserEvasion2", Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserEvasion2",
"RaiseUserEvasion2MinimizeUser",
"RaiseUserEvasion3") "RaiseUserEvasion3")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaiseUserCriticalHitRate2", Battle::AI::Handlers::MoveFailureCheck.add("RaiseUserCriticalHitRate2",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.effects[PBEffects::FocusEnergy] >= 2 next true if user.effects[PBEffects::FocusEnergy] >= 2
@@ -428,6 +524,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserCriticalHitRate2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaiseUserAtkDef1", Battle::AI::Handlers::MoveFailureCheck.add("RaiseUserAtkDef1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
if move.statusMove? if move.statusMove?
@@ -462,6 +561,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkDef1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkDef1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkDef1",
"RaiseUserAtkDefAcc1") "RaiseUserAtkDefAcc1")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkDefAcc1", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkDefAcc1",
@@ -486,6 +588,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkDefAcc1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkDef1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkDef1",
"RaiseUserAtkSpAtk1") "RaiseUserAtkSpAtk1")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkSpAtk1", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkSpAtk1",
@@ -512,11 +617,17 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkSpAtk1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
"RaiseUserAtkSpAtk1Or2InSun") "RaiseUserAtkSpAtk1Or2InSun")
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAtkSpAtk1", Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAtkSpAtk1",
"RaiseUserAtkSpAtk1Or2InSun") "RaiseUserAtkSpAtk1Or2InSun")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("LowerUserDefSpDef1RaiseUserAtkSpAtkSpd2", Battle::AI::Handlers::MoveFailureCheck.add("LowerUserDefSpDef1RaiseUserAtkSpAtkSpd2",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
will_fail = true will_fail = true
@@ -553,6 +664,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefSpDef1RaiseUserAtkSpAtkSp
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
"RaiseUserAtkSpd1") "RaiseUserAtkSpd1")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkSpd1", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkSpd1",
@@ -582,6 +696,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkSpd1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
"RaiseUserAtk1Spd2") "RaiseUserAtk1Spd2")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtk1Spd2", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtk1Spd2",
@@ -610,6 +727,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtk1Spd2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
"RaiseUserAtkAcc1") "RaiseUserAtkAcc1")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkAcc1", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkAcc1",
@@ -633,6 +753,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkAcc1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
"RaiseUserDefSpDef1") "RaiseUserDefSpDef1")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefSpDef1", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefSpDef1",
@@ -643,6 +766,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefSpDef1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
"RaiseUserSpAtkSpDef1") "RaiseUserSpAtkSpDef1")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtkSpDef1", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtkSpDef1",
@@ -667,6 +793,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtkSpDef1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
"RaiseUserSpAtkSpDefSpd1") "RaiseUserSpAtkSpDefSpd1")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtkSpDefSpd1", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtkSpDefSpd1",
@@ -697,6 +826,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtkSpDefSpd1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1", Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
"RaiseUserMainStats1") "RaiseUserMainStats1")
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserMainStats1", Battle::AI::Handlers::MoveEffectScore.add("RaiseUserMainStats1",
@@ -715,6 +847,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserMainStats1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaiseUserMainStats1LoseThirdOfTotalHP", Battle::AI::Handlers::MoveFailureCheck.add("RaiseUserMainStats1LoseThirdOfTotalHP",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.hp <= [user.totalhp / 3, 1].max next true if user.hp <= [user.totalhp / 3, 1].max
@@ -740,6 +875,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserMainStats1LoseThirdOfTotalHP
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaiseUserMainStats1TrapUserInBattle", Battle::AI::Handlers::MoveFailureCheck.add("RaiseUserMainStats1TrapUserInBattle",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.effects[PBEffects::NoRetreat] next true if user.effects[PBEffects::NoRetreat]
@@ -768,57 +906,93 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserMainStats1TrapUserInBattle",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("StartRaiseUserAtk1WhenDamaged", Battle::AI::Handlers::MoveEffectScore.add("StartRaiseUserAtk1WhenDamaged",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + 25 if user.effects[PBEffects::Rage] next score + 25 if user.effects[PBEffects::Rage]
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("LowerUserAttack1", Battle::AI::Handlers::MoveEffectScore.add("LowerUserAttack1",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + user.stages[:ATTACK] * 10 next score + user.stages[:ATTACK] * 10
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("LowerUserAttack1", Battle::AI::Handlers::MoveEffectScore.copy("LowerUserAttack1",
"LowerUserAttack2") "LowerUserAttack2")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefense1", Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefense1",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + user.stages[:DEFENSE] * 10 next score + user.stages[:DEFENSE] * 10
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("LowerUserDefense1", Battle::AI::Handlers::MoveEffectScore.copy("LowerUserDefense1",
"LowerUserDefense2") "LowerUserDefense2")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("LowerUserSpAtk1", Battle::AI::Handlers::MoveEffectScore.add("LowerUserSpAtk1",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + user.stages[:SPECIAL_ATTACK] * 10 next score + user.stages[:SPECIAL_ATTACK] * 10
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("LowerUserSpAtk1", Battle::AI::Handlers::MoveEffectScore.copy("LowerUserSpAtk1",
"LowerUserSpAtk2") "LowerUserSpAtk2")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("LowerUserSpDef1", Battle::AI::Handlers::MoveEffectScore.add("LowerUserSpDef1",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + user.stages[:SPECIAL_DEFENSE] * 10 next score + user.stages[:SPECIAL_DEFENSE] * 10
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("LowerUserSpDef1", Battle::AI::Handlers::MoveEffectScore.copy("LowerUserSpDef1",
"LowerUserSpDef2") "LowerUserSpDef2")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("LowerUserSpeed1", Battle::AI::Handlers::MoveEffectScore.add("LowerUserSpeed1",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + user.stages[:SPECIAL_DEFENSE] * 10 next score + user.stages[:SPECIAL_DEFENSE] * 10
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("LowerUserSpeed1", Battle::AI::Handlers::MoveEffectScore.copy("LowerUserSpeed1",
"LowerUserSpeed2") "LowerUserSpeed2")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("LowerUserAtkDef1", Battle::AI::Handlers::MoveEffectScore.add("LowerUserAtkDef1",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
avg = user.stages[:ATTACK] * 10 avg = user.stages[:ATTACK] * 10
@@ -827,6 +1001,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerUserAtkDef1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefSpDef1", Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefSpDef1",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
avg = user.stages[:DEFENSE] * 10 avg = user.stages[:DEFENSE] * 10
@@ -835,6 +1012,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefSpDef1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefSpDefSpd1", Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefSpDefSpd1",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
avg = user.stages[:DEFENSE] * 10 avg = user.stages[:DEFENSE] * 10
@@ -844,6 +1024,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefSpDefSpd1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetAttack1", Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetAttack1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if move.statusMove? && next true if move.statusMove? &&
@@ -851,6 +1034,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetAttack1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetAttack2ConfuseTarget", Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetAttack2ConfuseTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battler.pbCanRaiseStatStage?(:ATTACK, user.battler, move.move) && next true if !target.battler.pbCanRaiseStatStage?(:ATTACK, user.battler, move.move) &&
@@ -864,6 +1050,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseTargetAttack2ConfuseTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetSpAtk1ConfuseTarget", Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetSpAtk1ConfuseTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battler.pbCanRaiseStatStage?(:SPECIAL_ATTACK, user.battler, move.move) && next true if !target.battler.pbCanRaiseStatStage?(:SPECIAL_ATTACK, user.battler, move.move) &&
@@ -877,6 +1066,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseTargetSpAtk1ConfuseTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetSpDef1", Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetSpDef1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battler.pbCanRaiseStatStage?(:SPECIAL_DEFENSE, user.battler, move.move) next true if !target.battler.pbCanRaiseStatStage?(:SPECIAL_DEFENSE, user.battler, move.move)
@@ -888,6 +1080,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseTargetSpDef1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetRandomStat2", Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetRandomStat2",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
will_fail = true will_fail = true
@@ -909,6 +1104,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseTargetRandomStat2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetAtkSpAtk2", Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetAtkSpAtk2",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battler.pbCanRaiseStatStage?(:ATTACK, user.battler, move.move) && next true if !target.battler.pbCanRaiseStatStage?(:ATTACK, user.battler, move.move) &&
@@ -925,6 +1123,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseTargetAtkSpAtk2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetAttack1", Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetAttack1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if move.statusMove? && next true if move.statusMove? &&
@@ -964,6 +1165,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAttack1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack1",
"LowerTargetAttack1BypassSubstitute") "LowerTargetAttack1BypassSubstitute")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAttack1BypassSubstitute", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAttack1BypassSubstitute",
@@ -986,6 +1190,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAttack1BypassSubstitute",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack1",
"LowerTargetAttack2") "LowerTargetAttack2")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAttack2", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAttack2",
@@ -1023,11 +1230,17 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAttack2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack2", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack2",
"LowerTargetAttack3") "LowerTargetAttack3")
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetAttack2", Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetAttack2",
"LowerTargetAttack3") "LowerTargetAttack3")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack1",
"LowerTargetDefense1") "LowerTargetDefense1")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetDefense1", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetDefense1",
@@ -1041,6 +1254,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetDefense1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetDefense1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetDefense1",
"LowerTargetDefense1PowersUpInGravity") "LowerTargetDefense1PowersUpInGravity")
Battle::AI::Handlers::MoveBasePower.add("LowerTargetDefense1PowersUpInGravity", Battle::AI::Handlers::MoveBasePower.add("LowerTargetDefense1PowersUpInGravity",
@@ -1059,6 +1275,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetDefense1PowersUpInGravity"
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetDefense1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetDefense1",
"LowerTargetDefense2") "LowerTargetDefense2")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetDefense2", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetDefense2",
@@ -1074,11 +1293,17 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetDefense2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetDefense2", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetDefense2",
"LowerTargetDefense3") "LowerTargetDefense3")
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetDefense2", Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetDefense2",
"LowerTargetDefense3") "LowerTargetDefense3")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack1",
"LowerTargetSpAtk1") "LowerTargetSpAtk1")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk1", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk1",
@@ -1114,6 +1339,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpAtk1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpAtk1",
"LowerTargetSpAtk2") "LowerTargetSpAtk2")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk2", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk2",
@@ -1124,6 +1352,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetSpAtk2IfCanAttract", Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetSpAtk2IfCanAttract",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if move.statusMove? && next true if move.statusMove? &&
@@ -1167,6 +1398,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk2IfCanAttract",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpAtk1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpAtk1",
"LowerTargetSpAtk3") "LowerTargetSpAtk3")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk3", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk3",
@@ -1177,6 +1411,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk3",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetDefense1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetDefense1",
"LowerTargetSpDef1") "LowerTargetSpDef1")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpDef1", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpDef1",
@@ -1190,6 +1427,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpDef1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpDef1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpDef1",
"LowerTargetSpDef2") "LowerTargetSpDef2")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpDef2", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpDef2",
@@ -1205,11 +1445,17 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpDef2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpDef2", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpDef2",
"LowerTargetSpDef3") "LowerTargetSpDef3")
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetSpDef2", Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetSpDef2",
"LowerTargetSpDef3") "LowerTargetSpDef3")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpDef1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpDef1",
"LowerTargetSpeed1") "LowerTargetSpeed1")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpeed1", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpeed1",
@@ -1228,6 +1474,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpeed1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpeed1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpeed1",
"LowerTargetSpeed1WeakerInGrassyTerrain") "LowerTargetSpeed1WeakerInGrassyTerrain")
Battle::AI::Handlers::MoveBasePower.add("LowerTargetSpeed1WeakerInGrassyTerrain", Battle::AI::Handlers::MoveBasePower.add("LowerTargetSpeed1WeakerInGrassyTerrain",
@@ -1238,6 +1487,9 @@ Battle::AI::Handlers::MoveBasePower.add("LowerTargetSpeed1WeakerInGrassyTerrain"
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetSpeed1", Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetSpeed1",
"LowerTargetSpeed1WeakerInGrassyTerrain") "LowerTargetSpeed1WeakerInGrassyTerrain")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetSpeed1MakeTargetWeakerToFire", Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetSpeed1MakeTargetWeakerToFire",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next false if !target.effects[PBEffects::TarShot] next false if !target.effects[PBEffects::TarShot]
@@ -1258,6 +1510,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpeed1MakeTargetWeakerToFi
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpeed1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpeed1",
"LowerTargetSpeed2") "LowerTargetSpeed2")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpeed2", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpeed2",
@@ -1278,11 +1533,17 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpeed2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpeed2", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpeed2",
"LowerTargetSpeed3") "LowerTargetSpeed3")
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetSpeed2", Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetSpeed2",
"LowerTargetSpeed3") "LowerTargetSpeed3")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpeed1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpeed1",
"LowerTargetAccuracy1") "LowerTargetAccuracy1")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAccuracy1", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAccuracy1",
@@ -1296,13 +1557,25 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAccuracy1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAccuracy1",
"LowerTargetAccuracy2")
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetAccuracy1",
"LowerTargetAccuracy2")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAccuracy1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAccuracy1",
"LowerTargetAccuracy2",
"LowerTargetAccuracy3") "LowerTargetAccuracy3")
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetAccuracy1", Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetAccuracy1",
"LowerTargetAccuracy2",
"LowerTargetAccuracy3") "LowerTargetAccuracy3")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAccuracy1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAccuracy1",
"LowerTargetEvasion1") "LowerTargetEvasion1")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetEvasion1", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetEvasion1",
@@ -1316,6 +1589,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetEvasion1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetEvasion1RemoveSideEffects", Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetEvasion1RemoveSideEffects",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
target_side = target.pbOwnSide target_side = target.pbOwnSide
@@ -1358,6 +1634,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetEvasion1RemoveSideEffects"
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetEvasion1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetEvasion1",
"LowerTargetEvasion2") "LowerTargetEvasion2")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetEvasion2", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetEvasion2",
@@ -1371,11 +1650,17 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetEvasion2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetEvasion2", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetEvasion2",
"LowerTargetEvasion3") "LowerTargetEvasion3")
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetEvasion2", Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetEvasion2",
"LowerTargetEvasion3") "LowerTargetEvasion3")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetAtkDef1", Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetAtkDef1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
will_fail = true will_fail = true
@@ -1395,6 +1680,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAtkDef1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAtkDef1", Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAtkDef1",
"LowerTargetAtkSpAtk1") "LowerTargetAtkSpAtk1")
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAtkSpAtk1", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAtkSpAtk1",
@@ -1405,6 +1693,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAtkSpAtk1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("LowerPoisonedTargetAtkSpAtkSpd1", Battle::AI::Handlers::MoveFailureCheck.add("LowerPoisonedTargetAtkSpAtkSpd1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battler.poisoned? next true if !target.battler.poisoned?
@@ -1426,6 +1717,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerPoisonedTargetAtkSpAtkSpd1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaiseAlliesAtkDef1", Battle::AI::Handlers::MoveFailureCheck.add("RaiseAlliesAtkDef1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
will_fail = true will_fail = true
@@ -1454,6 +1748,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseAlliesAtkDef1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaisePlusMinusUserAndAlliesAtkSpAtk1", Battle::AI::Handlers::MoveFailureCheck.add("RaisePlusMinusUserAndAlliesAtkSpAtk1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
will_fail = true will_fail = true
@@ -1480,6 +1777,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaisePlusMinusUserAndAlliesAtkSpAtk1"
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaisePlusMinusUserAndAlliesAtkSpAtk1", Battle::AI::Handlers::MoveFailureCheck.add("RaisePlusMinusUserAndAlliesAtkSpAtk1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
will_fail = true will_fail = true
@@ -1506,6 +1806,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaisePlusMinusUserAndAlliesDefSpDef1"
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaiseGroundedGrassBattlersAtkSpAtk1", Battle::AI::Handlers::MoveFailureCheck.add("RaiseGroundedGrassBattlersAtkSpAtk1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
will_fail = true will_fail = true
@@ -1533,6 +1836,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseGroundedGrassBattlersAtkSpAtk1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RaiseGrassBattlersDef1", Battle::AI::Handlers::MoveFailureCheck.add("RaiseGrassBattlersDef1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
will_fail = true will_fail = true
@@ -1558,6 +1864,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseGrassBattlersDef1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapAtkSpAtkStages", Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapAtkSpAtkStages",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if ai.trainer.medium_skill? if ai.trainer.medium_skill?
@@ -1578,6 +1887,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapAtkSpAtkStages",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapDefSpDefStages", Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapDefSpDefStages",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if ai.trainer.medium_skill? if ai.trainer.medium_skill?
@@ -1598,6 +1910,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapDefSpDefStages",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapStatStages", Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapStatStages",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if ai.trainer.medium_skill? if ai.trainer.medium_skill?
@@ -1615,6 +1930,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapStatStages",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserCopyTargetStatStages", Battle::AI::Handlers::MoveEffectScore.add("UserCopyTargetStatStages",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if ai.trainer.medium_skill? if ai.trainer.medium_skill?
@@ -1632,7 +1950,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserCopyTargetStatStages",
} }
) )
#===============================================================================
# TODO: Account for stat theft before damage calculation. # TODO: Account for stat theft before damage calculation.
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserStealTargetPositiveStatStages", Battle::AI::Handlers::MoveEffectScore.add("UserStealTargetPositiveStatStages",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
numStages = 0 numStages = 0
@@ -1644,6 +1964,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserStealTargetPositiveStatStages",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("InvertTargetStatStages", Battle::AI::Handlers::MoveFailureCheck.add("InvertTargetStatStages",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battler.hasAlteredStatStages? next true if !target.battler.hasAlteredStatStages?
@@ -1662,6 +1985,9 @@ Battle::AI::Handlers::MoveEffectScore.add("InvertTargetStatStages",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("ResetTargetStatStages", Battle::AI::Handlers::MoveEffectScore.add("ResetTargetStatStages",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next 0 if target.effects[PBEffects::Substitute] > 0 next 0 if target.effects[PBEffects::Substitute] > 0
@@ -1677,6 +2003,9 @@ Battle::AI::Handlers::MoveEffectScore.add("ResetTargetStatStages",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("ResetAllBattlersStatStages", Battle::AI::Handlers::MoveFailureCheck.add("ResetAllBattlersStatStages",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if battle.allBattlers.none? { |b| b.hasAlteredStatStages? } next true if battle.allBattlers.none? { |b| b.hasAlteredStatStages? }
@@ -1700,12 +2029,18 @@ Battle::AI::Handlers::MoveEffectScore.add("ResetAllBattlersStatStages",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartUserSideImmunityToStatStageLowering", Battle::AI::Handlers::MoveFailureCheck.add("StartUserSideImmunityToStatStageLowering",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.pbOwnSide.effects[PBEffects::Mist] > 0 next true if user.pbOwnSide.effects[PBEffects::Mist] > 0
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserSwapBaseAtkDef", Battle::AI::Handlers::MoveEffectScore.add("UserSwapBaseAtkDef",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if ai.trainer.medium_skill? if ai.trainer.medium_skill?
@@ -1726,6 +2061,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserSwapBaseAtkDef",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapBaseSpeed", Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapBaseSpeed",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if ai.trainer.medium_skill? if ai.trainer.medium_skill?
@@ -1739,6 +2077,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapBaseSpeed",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageBaseAtkSpAtk", Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageBaseAtkSpAtk",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if ai.trainer.medium_skill? if ai.trainer.medium_skill?
@@ -1760,6 +2101,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageBaseAtkSpAtk",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageBaseDefSpDef", Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageBaseDefSpDef",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if ai.trainer.medium_skill? if ai.trainer.medium_skill?
@@ -1781,6 +2125,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageBaseDefSpDef",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageHP", Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageHP",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if target.effects[PBEffects::Substitute] > 0 if target.effects[PBEffects::Substitute] > 0
@@ -1794,10 +2141,16 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageHP",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartUserSideDoubleSpeed", Battle::AI::Handlers::MoveFailureCheck.add("StartUserSideDoubleSpeed",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.pbOwnSide.effects[PBEffects::Tailwind] > 0 next true if user.pbOwnSide.effects[PBEffects::Tailwind] > 0
} }
) )
#===============================================================================
#
#===============================================================================
# StartSwapAllBattlersBaseDefensiveStats # StartSwapAllBattlersBaseDefensiveStats

View File

@@ -23,6 +23,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SleepTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SleepTargetIfUserDarkrai", Battle::AI::Handlers::MoveFailureCheck.add("SleepTargetIfUserDarkrai",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.battler.isSpecies?(:DARKRAI) && user.effects[PBEffects::TransformSpecies] != :DARKRAI next true if !user.battler.isSpecies?(:DARKRAI) && user.effects[PBEffects::TransformSpecies] != :DARKRAI
@@ -32,9 +35,15 @@ Battle::AI::Handlers::MoveFailureCheck.add("SleepTargetIfUserDarkrai",
Battle::AI::Handlers::MoveEffectScore.copy("SleepTarget", Battle::AI::Handlers::MoveEffectScore.copy("SleepTarget",
"SleepTargetIfUserDarkrai") "SleepTargetIfUserDarkrai")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("SleepTarget", Battle::AI::Handlers::MoveEffectScore.copy("SleepTarget",
"SleepTargetChangeUserMeloettaForm") "SleepTargetChangeUserMeloettaForm")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SleepTargetNextTurn", Battle::AI::Handlers::MoveFailureCheck.add("SleepTargetNextTurn",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.effects[PBEffects::Yawn] > 0 next true if target.effects[PBEffects::Yawn] > 0
@@ -55,6 +64,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SleepTargetNextTurn",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("PoisonTarget", Battle::AI::Handlers::MoveFailureCheck.add("PoisonTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if move.statusMove? && !target.pbCanPoison?(user.battler, false, move.move) next true if move.statusMove? && !target.pbCanPoison?(user.battler, false, move.move)
@@ -77,6 +89,9 @@ Battle::AI::Handlers::MoveEffectScore.add("PoisonTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("PoisonTargetLowerTargetSpeed1", Battle::AI::Handlers::MoveFailureCheck.add("PoisonTargetLowerTargetSpeed1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.pbCanPoison?(user.battler, false, move.move) && next true if !target.pbCanPoison?(user.battler, false, move.move) &&
@@ -110,6 +125,9 @@ Battle::AI::Handlers::MoveEffectScore.add("PoisonTargetLowerTargetSpeed1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("PoisonTarget", Battle::AI::Handlers::MoveFailureCheck.copy("PoisonTarget",
"BadPoisonTarget") "BadPoisonTarget")
Battle::AI::Handlers::MoveEffectScore.add("BadPoisonTarget", Battle::AI::Handlers::MoveEffectScore.add("BadPoisonTarget",
@@ -129,6 +147,9 @@ Battle::AI::Handlers::MoveEffectScore.add("BadPoisonTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("ParalyzeTarget", Battle::AI::Handlers::MoveFailureCheck.add("ParalyzeTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if move.statusMove? && !target.pbCanParalyze?(user.battler, false, move.move) next true if move.statusMove? && !target.pbCanParalyze?(user.battler, false, move.move)
@@ -151,6 +172,9 @@ Battle::AI::Handlers::MoveEffectScore.add("ParalyzeTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("ParalyzeTargetIfNotTypeImmune", Battle::AI::Handlers::MoveFailureCheck.add("ParalyzeTargetIfNotTypeImmune",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
eff = target.effectiveness_of_type_against_battler(move.rough_type, user) eff = target.effectiveness_of_type_against_battler(move.rough_type, user)
@@ -161,10 +185,16 @@ Battle::AI::Handlers::MoveFailureCheck.add("ParalyzeTargetIfNotTypeImmune",
Battle::AI::Handlers::MoveEffectScore.copy("ParalyzeTarget", Battle::AI::Handlers::MoveEffectScore.copy("ParalyzeTarget",
"ParalyzeTargetIfNotTypeImmune") "ParalyzeTargetIfNotTypeImmune")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("ParalyzeTarget", Battle::AI::Handlers::MoveEffectScore.copy("ParalyzeTarget",
"ParalyzeTargetAlwaysHitsInRainHitsTargetInSky", "ParalyzeTargetAlwaysHitsInRainHitsTargetInSky",
"ParalyzeFlinchTarget") "ParalyzeFlinchTarget")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("BurnTarget", Battle::AI::Handlers::MoveFailureCheck.add("BurnTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if move.statusMove? && !target.pbCanBurn?(user.battler, false, move.move) next true if move.statusMove? && !target.pbCanBurn?(user.battler, false, move.move)
@@ -178,10 +208,21 @@ Battle::AI::Handlers::MoveEffectScore.add("BurnTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("BurnTarget",
"BurnTargetIfTargetStatsRaisedThisTurn")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("BurnTarget", Battle::AI::Handlers::MoveEffectScore.copy("BurnTarget",
"BurnTargetIfTargetStatsRaisedThisTurn",
"BurnFlinchTarget") "BurnFlinchTarget")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("FreezeTarget", Battle::AI::Handlers::MoveFailureCheck.add("FreezeTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if move.statusMove? && !target.pbCanFreeze?(user.battler, false, move.move) next true if move.statusMove? && !target.pbCanFreeze?(user.battler, false, move.move)
@@ -195,6 +236,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FreezeTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("FreezeTargetSuperEffectiveAgainstWater", Battle::AI::Handlers::MoveEffectScore.add("FreezeTargetSuperEffectiveAgainstWater",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if target.battler.pbCanFreeze?(user.battler, false) if target.battler.pbCanFreeze?(user.battler, false)
@@ -205,6 +249,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FreezeTargetSuperEffectiveAgainstWate
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("FreezeTargetAlwaysHitsInHail", Battle::AI::Handlers::MoveEffectScore.add("FreezeTargetAlwaysHitsInHail",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if target.battler.pbCanFreeze?(user.battler, false) if target.battler.pbCanFreeze?(user.battler, false)
@@ -217,15 +264,24 @@ Battle::AI::Handlers::MoveEffectScore.add("FreezeTargetAlwaysHitsInHail",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("FreezeTargetAlwaysHitsInHail", Battle::AI::Handlers::MoveEffectScore.copy("FreezeTargetAlwaysHitsInHail",
"FreezeFlinchTarget") "FreezeFlinchTarget")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("ParalyzeBurnOrFreezeTarget", Battle::AI::Handlers::MoveEffectScore.add("ParalyzeBurnOrFreezeTarget",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + 30 if target.status == :NONE next score + 30 if target.status == :NONE
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("GiveUserStatusToTarget", Battle::AI::Handlers::MoveFailureCheck.add("GiveUserStatusToTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.status == :NONE next true if user.status == :NONE
@@ -238,6 +294,9 @@ Battle::AI::Handlers::MoveEffectScore.add("GiveUserStatusToTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("CureUserBurnPoisonParalysis", Battle::AI::Handlers::MoveFailureCheck.add("CureUserBurnPoisonParalysis",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if ![:BURN, :POISON, :PARALYSIS].include?(user.status) next true if ![:BURN, :POISON, :PARALYSIS].include?(user.status)
@@ -263,6 +322,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CureUserBurnPoisonParalysis",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("CureUserPartyStatus", Battle::AI::Handlers::MoveFailureCheck.add("CureUserPartyStatus",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
has_effect = battle.allSameSideBattlers(user.battler).any? { |b| b.status != :NONE } has_effect = battle.allSameSideBattlers(user.battler).any? { |b| b.status != :NONE }
@@ -283,6 +345,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CureUserPartyStatus",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("CureTargetBurn", Battle::AI::Handlers::MoveEffectScore.add("CureTargetBurn",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if target.opposes?(user) if target.opposes?(user)
@@ -294,6 +359,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CureTargetBurn",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartUserSideImmunityToInflictedStatus", Battle::AI::Handlers::MoveFailureCheck.add("StartUserSideImmunityToInflictedStatus",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.pbOwnSide.effects[PBEffects::Safeguard] > 0 next true if user.pbOwnSide.effects[PBEffects::Safeguard] > 0
@@ -310,6 +378,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartUserSideImmunityToInflictedStatu
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("FlinchTarget", Battle::AI::Handlers::MoveEffectScore.add("FlinchTarget",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + 30 if !target.has_active_ability?(:INNERFOCUS) && next score + 30 if !target.has_active_ability?(:INNERFOCUS) &&
@@ -317,6 +388,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FlinchTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("FlinchTargetFailsIfUserNotAsleep", Battle::AI::Handlers::MoveFailureCheck.add("FlinchTargetFailsIfUserNotAsleep",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.asleep? next true if !user.asleep?
@@ -331,6 +405,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FlinchTargetFailsIfUserNotAsleep",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("FlinchTargetFailsIfNotUserFirstTurn", Battle::AI::Handlers::MoveFailureCheck.add("FlinchTargetFailsIfNotUserFirstTurn",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.turnCount > 0 next true if user.turnCount > 0
@@ -343,6 +420,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FlinchTargetFailsIfNotUserFirstTurn",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("FlinchTargetDoublePowerIfTargetInSky", Battle::AI::Handlers::MoveBasePower.add("FlinchTargetDoublePowerIfTargetInSky",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbBaseDamage(power, user.battler, target.battler) next move.pbBaseDamage(power, user.battler, target.battler)
@@ -356,6 +436,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FlinchTargetDoublePowerIfTargetInSky"
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("ConfuseTarget", Battle::AI::Handlers::MoveFailureCheck.add("ConfuseTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if move.statusMove? && !target.battler.pbCanConfuse?(user.battler, false, move.move) next true if move.statusMove? && !target.battler.pbCanConfuse?(user.battler, false, move.move)
@@ -367,9 +450,15 @@ Battle::AI::Handlers::MoveEffectScore.add("ConfuseTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.copy("ConfuseTarget", Battle::AI::Handlers::MoveEffectScore.copy("ConfuseTarget",
"ConfuseTargetAlwaysHitsInRainHitsTargetInSky") "ConfuseTargetAlwaysHitsInRainHitsTargetInSky")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("AttractTarget", Battle::AI::Handlers::MoveFailureCheck.add("AttractTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if move.statusMove? && !target.battler.pbCanAttract?(user.battler, false) next true if move.statusMove? && !target.battler.pbCanAttract?(user.battler, false)
@@ -386,6 +475,9 @@ Battle::AI::Handlers::MoveEffectScore.add("AttractTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesBasedOnEnvironment", Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesBasedOnEnvironment",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.battler.canChangeType? next true if !user.battler.canChangeType?
@@ -430,6 +522,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesBasedOnEnvironment",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToResistLastAttack", Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToResistLastAttack",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.battler.canChangeType? next true if !user.battler.canChangeType?
@@ -446,6 +541,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToResistLastAttack",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToTargetTypes", Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToTargetTypes",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.battler.canChangeType? next true if !user.battler.canChangeType?
@@ -455,6 +553,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToTargetTypes",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToUserMoveType", Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToUserMoveType",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.battler.canChangeType? next true if !user.battler.canChangeType?
@@ -470,6 +571,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToUserMoveType",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SetTargetTypesToPsychic", Battle::AI::Handlers::MoveFailureCheck.add("SetTargetTypesToPsychic",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battler.canChangeType? next true if !target.battler.canChangeType?
@@ -478,6 +582,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetTargetTypesToPsychic",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SetTargetTypesToWater", Battle::AI::Handlers::MoveFailureCheck.add("SetTargetTypesToWater",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battler.canChangeType? next true if !target.battler.canChangeType?
@@ -485,6 +592,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetTargetTypesToWater",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("AddGhostTypeToTarget", Battle::AI::Handlers::MoveFailureCheck.add("AddGhostTypeToTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battler.canChangeType? next true if !target.battler.canChangeType?
@@ -492,6 +602,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("AddGhostTypeToTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("AddGrassTypeToTarget", Battle::AI::Handlers::MoveFailureCheck.add("AddGrassTypeToTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battler.canChangeType? next true if !target.battler.canChangeType?
@@ -499,12 +612,18 @@ Battle::AI::Handlers::MoveFailureCheck.add("AddGrassTypeToTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("UserLosesFireType", Battle::AI::Handlers::MoveFailureCheck.add("UserLosesFireType",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.has_type?(:FIRE) next true if !user.has_type?(:FIRE)
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SetTargetAbilityToSimple", Battle::AI::Handlers::MoveFailureCheck.add("SetTargetAbilityToSimple",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !GameData::Ability.exists?(:SIMPLE) next true if !GameData::Ability.exists?(:SIMPLE)
@@ -513,6 +632,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetTargetAbilityToSimple",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SetTargetAbilityToInsomnia", Battle::AI::Handlers::MoveFailureCheck.add("SetTargetAbilityToInsomnia",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !GameData::Ability.exists?(:INSOMNIA) next true if !GameData::Ability.exists?(:INSOMNIA)
@@ -521,6 +643,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetTargetAbilityToInsomnia",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SetUserAbilityToTargetAbility", Battle::AI::Handlers::MoveFailureCheck.add("SetUserAbilityToTargetAbility",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.battle.unstoppableAbility? next true if user.battle.unstoppableAbility?
@@ -539,6 +664,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SetUserAbilityToTargetAbility",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SetTargetAbilityToUserAbility", Battle::AI::Handlers::MoveFailureCheck.add("SetTargetAbilityToUserAbility",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.ability || user.ability_id == target.ability_id next true if !user.ability || user.ability_id == target.ability_id
@@ -557,6 +685,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SetTargetAbilityToUserAbility",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("UserTargetSwapAbilities", Battle::AI::Handlers::MoveFailureCheck.add("UserTargetSwapAbilities",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.ability || !target.ability next true if !user.ability || !target.ability
@@ -577,6 +708,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapAbilities",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("NegateTargetAbility", Battle::AI::Handlers::MoveFailureCheck.add("NegateTargetAbility",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.unstoppableAbility? || next true if target.unstoppableAbility? ||
@@ -584,6 +718,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("NegateTargetAbility",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("NegateTargetAbilityIfTargetActed", Battle::AI::Handlers::MoveEffectScore.add("NegateTargetAbilityIfTargetActed",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if ai.trainer.medium_skill? if ai.trainer.medium_skill?
@@ -595,8 +732,14 @@ Battle::AI::Handlers::MoveEffectScore.add("NegateTargetAbilityIfTargetActed",
} }
) )
#===============================================================================
#
#===============================================================================
# IgnoreTargetAbility # IgnoreTargetAbility
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartUserAirborne", Battle::AI::Handlers::MoveFailureCheck.add("StartUserAirborne",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.effects[PBEffects::Ingrain] || next true if user.effects[PBEffects::Ingrain] ||
@@ -605,6 +748,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("StartUserAirborne",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartTargetAirborneAndAlwaysHitByMoves", Battle::AI::Handlers::MoveFailureCheck.add("StartTargetAirborneAndAlwaysHitByMoves",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.effects[PBEffects::Ingrain] || next true if target.effects[PBEffects::Ingrain] ||
@@ -618,8 +764,14 @@ Battle::AI::Handlers::MoveFailureCheck.add("StartTargetAirborneAndAlwaysHitByMov
} }
) )
#===============================================================================
#
#===============================================================================
# HitsTargetInSky # HitsTargetInSky
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("HitsTargetInSkyGroundsTarget", Battle::AI::Handlers::MoveEffectScore.add("HitsTargetInSkyGroundsTarget",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if ai.trainer.medium_skill? if ai.trainer.medium_skill?
@@ -635,6 +787,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HitsTargetInSkyGroundsTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartGravity", Battle::AI::Handlers::MoveFailureCheck.add("StartGravity",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if battle.field.effects[PBEffects::Gravity] > 0 next true if battle.field.effects[PBEffects::Gravity] > 0
@@ -664,6 +819,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartGravity",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("TransformUserIntoTarget", Battle::AI::Handlers::MoveFailureCheck.add("TransformUserIntoTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.effects[PBEffects::Transform] next true if user.effects[PBEffects::Transform]

View File

@@ -17,6 +17,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FixedDamage20",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("FixedDamage40", Battle::AI::Handlers::MoveBasePower.add("FixedDamage40",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbFixedDamage(user.battler, target.battler) next move.pbFixedDamage(user.battler, target.battler)
@@ -28,6 +31,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FixedDamage40",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("FixedDamageHalfTargetHP", Battle::AI::Handlers::MoveBasePower.add("FixedDamageHalfTargetHP",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbFixedDamage(user.battler, target.battler) next move.pbFixedDamage(user.battler, target.battler)
@@ -40,6 +46,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FixedDamageHalfTargetHP",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("FixedDamageUserLevel", Battle::AI::Handlers::MoveBasePower.add("FixedDamageUserLevel",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbFixedDamage(user.battler, target.battler) next move.pbFixedDamage(user.battler, target.battler)
@@ -51,6 +60,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FixedDamageUserLevel",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("FixedDamageUserLevelRandom", Battle::AI::Handlers::MoveBasePower.add("FixedDamageUserLevelRandom",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next user.level # Average power next user.level # Average power
@@ -62,6 +74,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FixedDamageUserLevelRandom",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetHPToUserHP", Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetHPToUserHP",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.hp >= target.hp next true if user.hp >= target.hp
@@ -74,15 +89,13 @@ Battle::AI::Handlers::MoveBasePower.add("LowerTargetHPToUserHP",
) )
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetHPToUserHP", Battle::AI::Handlers::MoveEffectScore.add("LowerTargetHPToUserHP",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if user.hp >= target.hp next score + 50 if user.hp < target.hp / 2
score -= 90
elsif user.hp < target.hp / 2
score += 50
end
next score
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("OHKO", Battle::AI::Handlers::MoveFailureCheck.add("OHKO",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.level > user.level next true if target.level > user.level
@@ -95,6 +108,9 @@ Battle::AI::Handlers::MoveBasePower.add("OHKO",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("OHKOIce", Battle::AI::Handlers::MoveFailureCheck.add("OHKOIce",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.level > user.level next true if target.level > user.level
@@ -107,11 +123,17 @@ Battle::AI::Handlers::MoveBasePower.copy("OHKO",
Battle::AI::Handlers::MoveEffectScore.copy("OHKO", Battle::AI::Handlers::MoveEffectScore.copy("OHKO",
"OHKOIce") "OHKOIce")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("OHKO", Battle::AI::Handlers::MoveBasePower.copy("OHKO",
"OHKOHitsUndergroundTarget") "OHKOHitsUndergroundTarget")
Battle::AI::Handlers::MoveEffectScore.copy("OHKO", Battle::AI::Handlers::MoveEffectScore.copy("OHKO",
"OHKOHitsUndergroundTarget") "OHKOHitsUndergroundTarget")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("DamageTargetAlly", Battle::AI::Handlers::MoveEffectScore.add("DamageTargetAlly",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
target.battler.allAllies.each do |b| target.battler.allAllies.each do |b|
@@ -122,22 +144,66 @@ Battle::AI::Handlers::MoveEffectScore.add("DamageTargetAlly",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithUserHP", Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithUserHP",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbBaseDamage(power, user.battler, target.battler) next move.pbBaseDamage(power, user.battler, target.battler)
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("PowerHigherWithUserHP",
"PowerLowerWithUserHP")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("PowerHigherWithUserHP",
"PowerHigherWithTargetHP")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("PowerHigherWithUserHP",
"PowerHigherWithUserHappiness")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("PowerHigherWithUserHP",
"PowerLowerWithUserHappiness")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("PowerHigherWithUserHP",
"PowerHigherWithUserPositiveStatStages")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("PowerHigherWithUserHP",
"PowerHigherWithTargetPositiveStatStages")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("PowerHigherWithUserHP",
"PowerHigherWithUserFasterThanTarget")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("PowerHigherWithUserHP", Battle::AI::Handlers::MoveBasePower.copy("PowerHigherWithUserHP",
"PowerLowerWithUserHP",
"PowerHigherWithTargetHP",
"PowerHigherWithUserHappiness",
"PowerLowerWithUserHappiness",
"PowerHigherWithUserPositiveStatStages",
"PowerHigherWithTargetPositiveStatStages",
"PowerHigherWithUserFasterThanTarget",
"PowerHigherWithTargetFasterThanUser") "PowerHigherWithTargetFasterThanUser")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithLessPP", Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithLessPP",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next 0 if move.move.pp == 0 && move.move.totalpp > 0 next 0 if move.move.pp == 0 && move.move.totalpp > 0
@@ -147,27 +213,42 @@ Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithLessPP",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithTargetWeight", Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithTargetWeight",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbBaseDamage(power, user.battler, target.battler) next move.pbBaseDamage(power, user.battler, target.battler)
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("PowerHigherWithTargetWeight", Battle::AI::Handlers::MoveBasePower.copy("PowerHigherWithTargetWeight",
"PowerHigherWithUserHeavierThanTarget") "PowerHigherWithUserHeavierThanTarget")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithConsecutiveUse", Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithConsecutiveUse",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next power << user.effects[PBEffects::FuryCutter] next power << user.effects[PBEffects::FuryCutter]
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithConsecutiveUseOnUserSide", Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithConsecutiveUseOnUserSide",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next power * (user.pbOwnSide.effects[PBEffects::EchoedVoiceCounter] + 1) next power * (user.pbOwnSide.effects[PBEffects::EchoedVoiceCounter] + 1)
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("RandomPowerDoublePowerIfTargetUnderground", Battle::AI::Handlers::MoveBasePower.add("RandomPowerDoublePowerIfTargetUnderground",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
power = 71 # Average damage power = 71 # Average damage
@@ -175,15 +256,24 @@ Battle::AI::Handlers::MoveBasePower.add("RandomPowerDoublePowerIfTargetUndergrou
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetHPLessThanHalf", Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetHPLessThanHalf",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbBaseDamage(power, user.battler, target.battler) next move.pbBaseDamage(power, user.battler, target.battler)
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetHPLessThanHalf", Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetHPLessThanHalf",
"DoublePowerIfUserPoisonedBurnedParalyzed") "DoublePowerIfUserPoisonedBurnedParalyzed")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetHPLessThanHalf", Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetHPLessThanHalf",
"DoublePowerIfTargetAsleepCureTarget") "DoublePowerIfTargetAsleepCureTarget")
Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetAsleepCureTarget", Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetAsleepCureTarget",
@@ -193,12 +283,18 @@ Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetAsleepCureTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetPoisoned", Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetPoisoned",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbBaseDamage(power, user.battler, target.battler) next move.pbBaseDamage(power, user.battler, target.battler)
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetPoisoned", Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetPoisoned",
"DoublePowerIfTargetParalyzedCureTarget") "DoublePowerIfTargetParalyzedCureTarget")
Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetParalyzedCureTarget", Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetParalyzedCureTarget",
@@ -207,62 +303,111 @@ Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetParalyzedCureTarge
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetStatusProblem", Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetStatusProblem",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbBaseDamage(power, user.battler, target.battler) next move.pbBaseDamage(power, user.battler, target.battler)
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfUserHasNoItem", Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfUserHasNoItem",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next power * 2 if !user.item || user.has_active_item?(:FLYINGGEM) next power * 2 if !user.item || user.has_active_item?(:FLYINGGEM)
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetUnderwater", Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetUnderwater",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbModifyDamage(power, user.battler, target.battler) next move.pbModifyDamage(power, user.battler, target.battler)
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetUnderwater", Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetUnderwater",
"DoublePowerIfTargetUnderground") "DoublePowerIfTargetUnderground")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetInSky", Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetInSky",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbBaseDamage(power, user.battler, target.battler) next move.pbBaseDamage(power, user.battler, target.battler)
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetInSky",
"DoublePowerInElectricTerrain")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetInSky",
"DoublePowerIfUserLastMoveFailed")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetInSky", Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetInSky",
"DoublePowerInElectricTerrain",
"DoublePowerIfUserLastMoveFailed",
"DoublePowerIfAllyFaintedLastTurn") "DoublePowerIfAllyFaintedLastTurn")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfUserLostHPThisTurn", Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfUserLostHPThisTurn",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + 30 if target.faster_than?(user) next score + 30 if target.faster_than?(user)
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetLostHPThisTurn", Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetLostHPThisTurn",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + 20 if battle.pbOpposingBattlerCount(user.battler) > 1 next score + 20 if battle.pbOpposingBattlerCount(user.battler) > 1
} }
) )
#===============================================================================
#
#===============================================================================
# DoublePowerIfUserStatsLoweredThisTurn # DoublePowerIfUserStatsLoweredThisTurn
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetActed", Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetActed",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + 30 if target.faster_than?(user) next score + 30 if target.faster_than?(user)
} }
) )
#===============================================================================
#
#===============================================================================
# DoublePowerIfTargetNotActed # DoublePowerIfTargetNotActed
#===============================================================================
#
#===============================================================================
# AlwaysCriticalHit # AlwaysCriticalHit
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("EnsureNextCriticalHit", Battle::AI::Handlers::MoveEffectScore.add("EnsureNextCriticalHit",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if user.effects[PBEffects::LaserFocus] > 0 if user.effects[PBEffects::LaserFocus] > 0
@@ -274,18 +419,27 @@ Battle::AI::Handlers::MoveEffectScore.add("EnsureNextCriticalHit",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("EnsureNextCriticalHit", Battle::AI::Handlers::MoveEffectScore.add("EnsureNextCriticalHit",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next 0 if user.pbOwnSide.effects[PBEffects::LuckyChant] > 0 next 0 if user.pbOwnSide.effects[PBEffects::LuckyChant] > 0
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartPreventCriticalHitsAgainstUserSide", Battle::AI::Handlers::MoveFailureCheck.add("StartPreventCriticalHitsAgainstUserSide",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.pbOwnSide.effects[PBEffects::LuckyChant] > 0 next true if user.pbOwnSide.effects[PBEffects::LuckyChant] > 0
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("CannotMakeTargetFaint", Battle::AI::Handlers::MoveFailureCheck.add("CannotMakeTargetFaint",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.hp == 1 next true if target.hp == 1
@@ -303,6 +457,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CannotMakeTargetFaint",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserEnduresFaintingThisTurn", Battle::AI::Handlers::MoveEffectScore.add("UserEnduresFaintingThisTurn",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
score -= 25 if user.hp > user.totalhp / 2 score -= 25 if user.hp > user.totalhp / 2
@@ -316,6 +473,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserEnduresFaintingThisTurn",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenElectricMoves", Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenElectricMoves",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
if Settings::MECHANICS_GENERATION >= 6 if Settings::MECHANICS_GENERATION >= 6
@@ -331,6 +491,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartWeakenElectricMoves",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenFireMoves", Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenFireMoves",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
if Settings::MECHANICS_GENERATION >= 6 if Settings::MECHANICS_GENERATION >= 6
@@ -346,18 +509,27 @@ Battle::AI::Handlers::MoveEffectScore.add("StartWeakenFireMoves",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenPhysicalDamageAgainstUserSide", Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenPhysicalDamageAgainstUserSide",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.pbOwnSide.effects[PBEffects::Reflect] > 0 next true if user.pbOwnSide.effects[PBEffects::Reflect] > 0
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenSpecialDamageAgainstUserSide", Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenSpecialDamageAgainstUserSide",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.pbOwnSide.effects[PBEffects::LightScreen] > 0 next true if user.pbOwnSide.effects[PBEffects::LightScreen] > 0
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenDamageAgainstUserSideIfHail", Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenDamageAgainstUserSideIfHail",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.pbOwnSide.effects[PBEffects::AuroraVeil] > 0 next true if user.pbOwnSide.effects[PBEffects::AuroraVeil] > 0
@@ -370,6 +542,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartWeakenDamageAgainstUserSideIfHai
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("RemoveScreens", Battle::AI::Handlers::MoveEffectScore.add("RemoveScreens",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
score += 20 if user.pbOpposingSide.effects[PBEffects::AuroraVeil] > 0 score += 20 if user.pbOpposingSide.effects[PBEffects::AuroraVeil] > 0
@@ -379,6 +554,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RemoveScreens",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("ProtectUser", Battle::AI::Handlers::MoveEffectScore.add("ProtectUser",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if user.effects[PBEffects::ProtectRate] > 1 || if user.effects[PBEffects::ProtectRate] > 1 ||
@@ -395,6 +573,9 @@ Battle::AI::Handlers::MoveEffectScore.add("ProtectUser",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("ProtectUserBanefulBunker", Battle::AI::Handlers::MoveEffectScore.add("ProtectUserBanefulBunker",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if user.effects[PBEffects::ProtectRate] > 1 || if user.effects[PBEffects::ProtectRate] > 1 ||
@@ -412,6 +593,9 @@ Battle::AI::Handlers::MoveEffectScore.add("ProtectUserBanefulBunker",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromDamagingMovesKingsShield", Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromDamagingMovesKingsShield",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if user.effects[PBEffects::ProtectRate] > 1 || if user.effects[PBEffects::ProtectRate] > 1 ||
@@ -428,6 +612,9 @@ Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromDamagingMovesKingsShie
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromDamagingMovesObstruct", Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromDamagingMovesObstruct",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if user.effects[PBEffects::ProtectRate] > 1 || if user.effects[PBEffects::ProtectRate] > 1 ||
@@ -444,6 +631,9 @@ Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromDamagingMovesObstruct"
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromTargetingMovesSpikyShield", Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromTargetingMovesSpikyShield",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if user.effects[PBEffects::ProtectRate] > 1 || if user.effects[PBEffects::ProtectRate] > 1 ||
@@ -460,6 +650,9 @@ Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromTargetingMovesSpikyShi
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("ProtectUserSideFromDamagingMovesIfUserFirstTurn", Battle::AI::Handlers::MoveFailureCheck.add("ProtectUserSideFromDamagingMovesIfUserFirstTurn",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.turnCount > 0 next true if user.turnCount > 0
@@ -471,20 +664,38 @@ Battle::AI::Handlers::MoveEffectScore.add("ProtectUserSideFromDamagingMovesIfUse
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("ProtectUserSideFromStatusMoves", Battle::AI::Handlers::MoveFailureCheck.add("ProtectUserSideFromStatusMoves",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.pbOwnSide.effects[PBEffects::CraftyShield] next true if user.pbOwnSide.effects[PBEffects::CraftyShield]
} }
) )
#===============================================================================
#
#===============================================================================
# ProtectUserSideFromPriorityMoves # ProtectUserSideFromPriorityMoves
#===============================================================================
#
#===============================================================================
# ProtectUserSideFromMultiTargetDamagingMoves # ProtectUserSideFromMultiTargetDamagingMoves
#===============================================================================
#
#===============================================================================
# RemoveProtections # RemoveProtections
#===============================================================================
#
#===============================================================================
# RemoveProtectionsBypassSubstitute # RemoveProtectionsBypassSubstitute
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("HoopaRemoveProtectionsBypassSubstituteLowerUserDef1", Battle::AI::Handlers::MoveFailureCheck.add("HoopaRemoveProtectionsBypassSubstituteLowerUserDef1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.battler.isSpecies?(:HOOPA) || user.battler.form != 1 next true if !user.battler.isSpecies?(:HOOPA) || user.battler.form != 1
@@ -496,12 +707,18 @@ Battle::AI::Handlers::MoveEffectScore.add("HoopaRemoveProtectionsBypassSubstitut
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("RecoilQuarterOfDamageDealt", Battle::AI::Handlers::MoveEffectScore.add("RecoilQuarterOfDamageDealt",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score - 25 next score - 25
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("RecoilThirdOfDamageDealtParalyzeTarget", Battle::AI::Handlers::MoveEffectScore.add("RecoilThirdOfDamageDealtParalyzeTarget",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
score -= 30 score -= 30
@@ -522,6 +739,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RecoilThirdOfDamageDealtParalyzeTarge
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("RecoilThirdOfDamageDealtBurnTarget", Battle::AI::Handlers::MoveEffectScore.add("RecoilThirdOfDamageDealtBurnTarget",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
score -= 30 score -= 30
@@ -533,12 +753,18 @@ Battle::AI::Handlers::MoveEffectScore.add("RecoilThirdOfDamageDealtBurnTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("RecoilHalfOfDamageDealt", Battle::AI::Handlers::MoveEffectScore.add("RecoilHalfOfDamageDealt",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score - 40 next score - 40
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("EffectivenessIncludesFlyingType", Battle::AI::Handlers::MoveBasePower.add("EffectivenessIncludesFlyingType",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
if GameData::Type.exists?(:FLYING) if GameData::Type.exists?(:FLYING)
@@ -557,26 +783,47 @@ Battle::AI::Handlers::MoveBasePower.add("EffectivenessIncludesFlyingType",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("CategoryDependsOnHigherDamagePoisonTarget", Battle::AI::Handlers::MoveEffectScore.add("CategoryDependsOnHigherDamagePoisonTarget",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + 5 if target.battler.pbCanPoison?(user.battler, false) next score + 5 if target.battler.pbCanPoison?(user.battler, false)
} }
) )
#===============================================================================
#
#===============================================================================
# CategoryDependsOnHigherDamageIgnoreTargetAbility # CategoryDependsOnHigherDamageIgnoreTargetAbility
#===============================================================================
#
#===============================================================================
# UseUserBaseDefenseInsteadOfUserBaseAttack # UseUserBaseDefenseInsteadOfUserBaseAttack
#===============================================================================
#
#===============================================================================
# UseTargetAttackInsteadOfUserAttack # UseTargetAttackInsteadOfUserAttack
#===============================================================================
#
#===============================================================================
# UseTargetDefenseInsteadOfTargetSpDef # UseTargetDefenseInsteadOfTargetSpDef
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("EnsureNextMoveAlwaysHits", Battle::AI::Handlers::MoveEffectScore.add("EnsureNextMoveAlwaysHits",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score - 50 if user.effects[PBEffects::LockOn] > 0 next score - 50 if user.effects[PBEffects::LockOn] > 0
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("StartNegateTargetEvasionStatStageAndGhostImmunity", Battle::AI::Handlers::MoveEffectScore.add("StartNegateTargetEvasionStatStageAndGhostImmunity",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if target.effects[PBEffects::Foresight] if target.effects[PBEffects::Foresight]
@@ -590,6 +837,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartNegateTargetEvasionStatStageAndG
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("StartNegateTargetEvasionStatStageAndDarkImmunity", Battle::AI::Handlers::MoveEffectScore.add("StartNegateTargetEvasionStatStageAndDarkImmunity",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if target.effects[PBEffects::MiracleEye] if target.effects[PBEffects::MiracleEye]
@@ -603,16 +853,28 @@ Battle::AI::Handlers::MoveEffectScore.add("StartNegateTargetEvasionStatStageAndD
} }
) )
#===============================================================================
#
#===============================================================================
# IgnoreTargetDefSpDefEvaStatStages # IgnoreTargetDefSpDefEvaStatStages
#===============================================================================
#
#===============================================================================
# TypeIsUserFirstType # TypeIsUserFirstType
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("TypeDependsOnUserIVs", Battle::AI::Handlers::MoveBasePower.add("TypeDependsOnUserIVs",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbBaseDamage(power, user.battler, target.battler) next move.pbBaseDamage(power, user.battler, target.battler)
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("TypeAndPowerDependOnUserBerry", Battle::AI::Handlers::MoveFailureCheck.add("TypeAndPowerDependOnUserBerry",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
item = user.item item = user.item
@@ -628,12 +890,24 @@ Battle::AI::Handlers::MoveBasePower.add("TypeAndPowerDependOnUserBerry",
} }
) )
#===============================================================================
#
#===============================================================================
# TypeDependsOnUserPlate # TypeDependsOnUserPlate
#===============================================================================
#
#===============================================================================
# TypeDependsOnUserMemory # TypeDependsOnUserMemory
#===============================================================================
#
#===============================================================================
# TypeDependsOnUserDrive # TypeDependsOnUserDrive
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("TypeDependsOnUserMorpekoFormRaiseUserSpeed1", Battle::AI::Handlers::MoveFailureCheck.add("TypeDependsOnUserMorpekoFormRaiseUserSpeed1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.battler.isSpecies?(:MORPEKO) && user.effects[PBEffects::TransformSpecies] != :MORPEKO next true if !user.battler.isSpecies?(:MORPEKO) && user.effects[PBEffects::TransformSpecies] != :MORPEKO
@@ -645,12 +919,18 @@ Battle::AI::Handlers::MoveEffectScore.add("TypeDependsOnUserMorpekoFormRaiseUser
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("TypeAndPowerDependOnWeather", Battle::AI::Handlers::MoveBasePower.add("TypeAndPowerDependOnWeather",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbBaseDamage(power, user.battler, target.battler) next move.pbBaseDamage(power, user.battler, target.battler)
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("TypeAndPowerDependOnWeather", Battle::AI::Handlers::MoveBasePower.copy("TypeAndPowerDependOnWeather",
"TypeAndPowerDependOnTerrain") "TypeAndPowerDependOnTerrain")
Battle::AI::Handlers::MoveEffectScore.add("TypeAndPowerDependOnTerrain", Battle::AI::Handlers::MoveEffectScore.add("TypeAndPowerDependOnTerrain",
@@ -659,10 +939,16 @@ Battle::AI::Handlers::MoveEffectScore.add("TypeAndPowerDependOnTerrain",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("TargetMovesBecomeElectric", Battle::AI::Handlers::MoveEffectScore.add("TargetMovesBecomeElectric",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next 0 if user.faster_than?(target) next 0 if user.faster_than?(target)
} }
) )
#===============================================================================
#
#===============================================================================
# NormalMovesBecomeElectric # NormalMovesBecomeElectric

View File

@@ -1,13 +1,15 @@
#=============================================================================== #===============================================================================
# #
#=============================================================================== #===============================================================================
Battle::AI::Handlers::MoveBasePower.add("HitTwoTimes", Battle::AI::Handlers::MoveBasePower.add("HitTwoTimes",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next power * move.pbNumHits(user.battler, [target.battler]) next power * move.pbNumHits(user.battler, [target.battler])
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("HitTwoTimes", Battle::AI::Handlers::MoveBasePower.copy("HitTwoTimes",
"HitTwoTimesPoisonTarget") "HitTwoTimesPoisonTarget")
Battle::AI::Handlers::MoveEffectScore.add("HitTwoTimesPoisonTarget", Battle::AI::Handlers::MoveEffectScore.add("HitTwoTimesPoisonTarget",
@@ -28,6 +30,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HitTwoTimesPoisonTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.copy("HitTwoTimes", Battle::AI::Handlers::MoveBasePower.copy("HitTwoTimes",
"HitTwoTimesFlinchTarget") "HitTwoTimesFlinchTarget")
Battle::AI::Handlers::MoveEffectScore.add("HitTwoTimesFlinchTarget", Battle::AI::Handlers::MoveEffectScore.add("HitTwoTimesFlinchTarget",
@@ -36,18 +41,27 @@ Battle::AI::Handlers::MoveEffectScore.add("HitTwoTimesFlinchTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("HitTwoTimesTargetThenTargetAlly", Battle::AI::Handlers::MoveBasePower.add("HitTwoTimesTargetThenTargetAlly",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next power * 2 next power * 2
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("HitThreeTimesPowersUpWithEachHit", Battle::AI::Handlers::MoveBasePower.add("HitThreeTimesPowersUpWithEachHit",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next power * 6 # Hits do x1, x2, x3 ret in turn, for x6 in total next power * 6 # Hits do x1, x2, x3 ret in turn, for x6 in total
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("HitThreeTimesAlwaysCriticalHit", Battle::AI::Handlers::MoveBasePower.add("HitThreeTimesAlwaysCriticalHit",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next power * move.pbNumHits(user.battler, [target.battler]) next power * move.pbNumHits(user.battler, [target.battler])
@@ -62,6 +76,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HitThreeTimesAlwaysCriticalHit",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("HitTwoToFiveTimes", Battle::AI::Handlers::MoveBasePower.add("HitTwoToFiveTimes",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next power * 5 if user.has_active_ability?(:SKILLLINK) next power * 5 if user.has_active_ability?(:SKILLLINK)
@@ -69,6 +86,9 @@ Battle::AI::Handlers::MoveBasePower.add("HitTwoToFiveTimes",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("HitTwoToFiveTimesOrThreeForAshGreninja", Battle::AI::Handlers::MoveBasePower.add("HitTwoToFiveTimesOrThreeForAshGreninja",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
if user.battler.isSpecies?(:GRENINJA) && user.battler.form == 2 if user.battler.isSpecies?(:GRENINJA) && user.battler.form == 2
@@ -79,6 +99,9 @@ Battle::AI::Handlers::MoveBasePower.add("HitTwoToFiveTimesOrThreeForAshGreninja"
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("HitTwoToFiveTimesRaiseUserSpd1LowerUserDef1", Battle::AI::Handlers::MoveBasePower.add("HitTwoToFiveTimesRaiseUserSpd1LowerUserDef1",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next power * 5 if user.has_active_ability?(:SKILLLINK) next power * 5 if user.has_active_ability?(:SKILLLINK)
@@ -99,6 +122,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HitTwoToFiveTimesRaiseUserSpd1LowerUs
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("HitOncePerUserTeamMember", Battle::AI::Handlers::MoveFailureCheck.add("HitOncePerUserTeamMember",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
will_fail = true will_fail = true
@@ -120,16 +146,28 @@ Battle::AI::Handlers::MoveBasePower.add("HitOncePerUserTeamMember",
} }
) )
#===============================================================================
#
#===============================================================================
# AttackAndSkipNextTurn # AttackAndSkipNextTurn
#===============================================================================
#
#===============================================================================
# TwoTurnAttack # TwoTurnAttack
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("TwoTurnAttackOneTurnInSun", Battle::AI::Handlers::MoveBasePower.add("TwoTurnAttackOneTurnInSun",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbBaseDamageMultiplier(power, user.battler, target.battler) next move.pbBaseDamageMultiplier(power, user.battler, target.battler)
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackParalyzeTarget", Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackParalyzeTarget",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if target.battler.pbCanParalyze?(user.battler, false) if target.battler.pbCanParalyze?(user.battler, false)
@@ -151,6 +189,9 @@ Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackParalyzeTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackBurnTarget", Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackBurnTarget",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next 0 if !target.battler.pbCanBurn?(user.battler, false) next 0 if !target.battler.pbCanBurn?(user.battler, false)
@@ -160,6 +201,9 @@ Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackBurnTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackFlinchTarget", Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackFlinchTarget",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
score += 20 if user.effects[PBEffects::FocusEnergy] > 0 score += 20 if user.effects[PBEffects::FocusEnergy] > 0
@@ -169,6 +213,9 @@ Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackFlinchTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("TwoTurnAttackRaiseUserSpAtkSpDefSpd2", Battle::AI::Handlers::MoveFailureCheck.add("TwoTurnAttackRaiseUserSpAtkSpDefSpd2",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.battler.pbCanRaiseStatStage?(:SPECIAL_ATTACK, user.battler, move.move) && next true if !user.battler.pbCanRaiseStatStage?(:SPECIAL_ATTACK, user.battler, move.move) &&
@@ -209,6 +256,9 @@ Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackRaiseUserSpAtkSpDefSpd2"
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackChargeRaiseUserDefense1", Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackChargeRaiseUserDefense1",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if move.statusMove? if move.statusMove?
@@ -224,6 +274,9 @@ Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackChargeRaiseUserDefense1"
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackChargeRaiseUserSpAtk1", Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackChargeRaiseUserSpAtk1",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
aspeed = user.rough_stat(:SPEED) aspeed = user.rough_stat(:SPEED)
@@ -238,14 +291,29 @@ Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackChargeRaiseUserSpAtk1",
} }
) )
#===============================================================================
#
#===============================================================================
# TwoTurnAttackInvulnerableUnderground # TwoTurnAttackInvulnerableUnderground
#===============================================================================
#
#===============================================================================
# TwoTurnAttackInvulnerableUnderwater # TwoTurnAttackInvulnerableUnderwater
#===============================================================================
#
#===============================================================================
# TwoTurnAttackInvulnerableInSky # TwoTurnAttackInvulnerableInSky
#===============================================================================
#
#===============================================================================
# TwoTurnAttackInvulnerableInSkyParalyzeTarget # TwoTurnAttackInvulnerableInSkyParalyzeTarget
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("TwoTurnAttackInvulnerableInSkyTargetCannotAct", Battle::AI::Handlers::MoveFailureCheck.add("TwoTurnAttackInvulnerableInSkyTargetCannotAct",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.opposes?(user) next true if !target.opposes?(user)
@@ -255,18 +323,33 @@ Battle::AI::Handlers::MoveFailureCheck.add("TwoTurnAttackInvulnerableInSkyTarget
} }
) )
#===============================================================================
#
#===============================================================================
# TwoTurnAttackInvulnerableRemoveProtections # TwoTurnAttackInvulnerableRemoveProtections
#===============================================================================
#
#===============================================================================
# MultiTurnAttackPreventSleeping # MultiTurnAttackPreventSleeping
#===============================================================================
#
#===============================================================================
# MultiTurnAttackConfuseUserAtEnd # MultiTurnAttackConfuseUserAtEnd
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("MultiTurnAttackPowersUpEachTurn", Battle::AI::Handlers::MoveBasePower.add("MultiTurnAttackPowersUpEachTurn",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next power * 2 if user.effects[PBEffects::DefenseCurl] next power * 2 if user.effects[PBEffects::DefenseCurl]
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("MultiTurnAttackBideThenReturnDoubleDamage", Battle::AI::Handlers::MoveBasePower.add("MultiTurnAttackBideThenReturnDoubleDamage",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next 40 # Representative value next 40 # Representative value

View File

@@ -17,6 +17,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserFullyAndFallAsleep",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("HealUserHalfOfTotalHP", Battle::AI::Handlers::MoveFailureCheck.add("HealUserHalfOfTotalHP",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.battler.canHeal? next true if !user.battler.canHeal?
@@ -30,6 +33,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserHalfOfTotalHP",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("HealUserHalfOfTotalHP", Battle::AI::Handlers::MoveFailureCheck.copy("HealUserHalfOfTotalHP",
"HealUserDependingOnWeather") "HealUserDependingOnWeather")
Battle::AI::Handlers::MoveEffectScore.add("HealUserDependingOnWeather", Battle::AI::Handlers::MoveEffectScore.add("HealUserDependingOnWeather",
@@ -47,6 +53,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserDependingOnWeather",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("HealUserHalfOfTotalHP", Battle::AI::Handlers::MoveFailureCheck.copy("HealUserHalfOfTotalHP",
"HealUserDependingOnSandstorm") "HealUserDependingOnSandstorm")
Battle::AI::Handlers::MoveEffectScore.add("HealUserDependingOnSandstorm", Battle::AI::Handlers::MoveEffectScore.add("HealUserDependingOnSandstorm",
@@ -58,6 +67,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserDependingOnSandstorm",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("HealUserHalfOfTotalHP", Battle::AI::Handlers::MoveFailureCheck.copy("HealUserHalfOfTotalHP",
"HealUserHalfOfTotalHPLoseFlyingTypeThisTurn") "HealUserHalfOfTotalHPLoseFlyingTypeThisTurn")
Battle::AI::Handlers::MoveEffectScore.add("HealUserHalfOfTotalHPLoseFlyingTypeThisTurn", Battle::AI::Handlers::MoveEffectScore.add("HealUserHalfOfTotalHPLoseFlyingTypeThisTurn",
@@ -68,6 +80,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserHalfOfTotalHPLoseFlyingTypeTh
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("CureTargetStatusHealUserHalfOfTotalHP", Battle::AI::Handlers::MoveFailureCheck.add("CureTargetStatusHealUserHalfOfTotalHP",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.battler.canHeal? next true if !user.battler.canHeal?
@@ -82,6 +97,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CureTargetStatusHealUserHalfOfTotalHP
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("HealUserByTargetAttackLowerTargetAttack1", Battle::AI::Handlers::MoveFailureCheck.add("HealUserByTargetAttackLowerTargetAttack1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
if target.has_active_ability?(:CONTRARY) if target.has_active_ability?(:CONTRARY)
@@ -114,6 +132,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserByTargetAttackLowerTargetAtta
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("HealUserByHalfOfDamageDone", Battle::AI::Handlers::MoveEffectScore.add("HealUserByHalfOfDamageDone",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if target.has_active_ability?(:LIQUIDOOZE) if target.has_active_ability?(:LIQUIDOOZE)
@@ -125,6 +146,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserByHalfOfDamageDone",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("HealUserByHalfOfDamageDoneIfTargetAsleep", Battle::AI::Handlers::MoveFailureCheck.add("HealUserByHalfOfDamageDoneIfTargetAsleep",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battler.asleep? next true if !target.battler.asleep?
@@ -141,6 +165,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserByHalfOfDamageDoneIfTargetAsl
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("HealUserByThreeQuartersOfDamageDone", Battle::AI::Handlers::MoveEffectScore.add("HealUserByThreeQuartersOfDamageDone",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if target.has_active_ability?(:LIQUIDOOZE) if target.has_active_ability?(:LIQUIDOOZE)
@@ -152,6 +179,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserByThreeQuartersOfDamageDone",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("HealUserAndAlliesQuarterOfTotalHP", Battle::AI::Handlers::MoveFailureCheck.add("HealUserAndAlliesQuarterOfTotalHP",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if battle.allSameSideBattlers(user.battler).none? { |b| b.canHeal? } next true if battle.allSameSideBattlers(user.battler).none? { |b| b.canHeal? }
@@ -171,6 +201,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserAndAlliesQuarterOfTotalHP",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("HealUserAndAlliesQuarterOfTotalHPCureStatus", Battle::AI::Handlers::MoveFailureCheck.add("HealUserAndAlliesQuarterOfTotalHPCureStatus",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if battle.allSameSideBattlers(user.battler).none? { |b| b.canHeal? || b.status != :NONE } next true if battle.allSameSideBattlers(user.battler).none? { |b| b.canHeal? || b.status != :NONE }
@@ -191,6 +224,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserAndAlliesQuarterOfTotalHPCure
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("HealTargetHalfOfTotalHP", Battle::AI::Handlers::MoveFailureCheck.add("HealTargetHalfOfTotalHP",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battler.canHeal? next true if !target.battler.canHeal?
@@ -206,6 +242,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealTargetHalfOfTotalHP",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("HealTargetHalfOfTotalHP", Battle::AI::Handlers::MoveFailureCheck.copy("HealTargetHalfOfTotalHP",
"HealTargetDependingOnGrassyTerrain") "HealTargetDependingOnGrassyTerrain")
Battle::AI::Handlers::MoveEffectScore.add("HealTargetDependingOnGrassyTerrain", Battle::AI::Handlers::MoveEffectScore.add("HealTargetDependingOnGrassyTerrain",
@@ -221,24 +260,36 @@ Battle::AI::Handlers::MoveEffectScore.add("HealTargetDependingOnGrassyTerrain",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("HealUserPositionNextTurn", Battle::AI::Handlers::MoveFailureCheck.add("HealUserPositionNextTurn",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if battle.positions[user.index].effects[PBEffects::Wish] > 0 next true if battle.positions[user.index].effects[PBEffects::Wish] > 0
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartHealUserEachTurn", Battle::AI::Handlers::MoveFailureCheck.add("StartHealUserEachTurn",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.effects[PBEffects::AquaRing] next true if user.effects[PBEffects::AquaRing]
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartHealUserEachTurnTrapUserInBattle", Battle::AI::Handlers::MoveFailureCheck.add("StartHealUserEachTurnTrapUserInBattle",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.effects[PBEffects::Ingrain] next true if user.effects[PBEffects::Ingrain]
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartDamageTargetEachTurnIfTargetAsleep", Battle::AI::Handlers::MoveFailureCheck.add("StartDamageTargetEachTurnIfTargetAsleep",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battler.asleep? || target.effects[PBEffects::Nightmare] next true if !target.battler.asleep? || target.effects[PBEffects::Nightmare]
@@ -256,6 +307,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartDamageTargetEachTurnIfTargetAsle
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartLeechSeedTarget", Battle::AI::Handlers::MoveFailureCheck.add("StartLeechSeedTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.effects[PBEffects::LeechSeed] >= 0 next true if target.effects[PBEffects::LeechSeed] >= 0
@@ -275,12 +329,18 @@ Battle::AI::Handlers::MoveEffectScore.add("StartLeechSeedTarget",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserLosesHalfOfTotalHP", Battle::AI::Handlers::MoveEffectScore.add("UserLosesHalfOfTotalHP",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next 0 if user.hp <= user.totalhp / 2 next 0 if user.hp <= user.totalhp / 2
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("UserLosesHalfOfTotalHPExplosive", Battle::AI::Handlers::MoveFailureCheck.add("UserLosesHalfOfTotalHPExplosive",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if battle.pbCheckGlobalAbility(:DAMP) next true if battle.pbCheckGlobalAbility(:DAMP)
@@ -301,6 +361,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserLosesHalfOfTotalHPExplosive",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("UserLosesHalfOfTotalHPExplosive", Battle::AI::Handlers::MoveFailureCheck.copy("UserLosesHalfOfTotalHPExplosive",
"UserFaintsExplosive") "UserFaintsExplosive")
Battle::AI::Handlers::MoveEffectScore.add("UserFaintsExplosive", Battle::AI::Handlers::MoveEffectScore.add("UserFaintsExplosive",
@@ -318,6 +381,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserFaintsExplosive",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("UserLosesHalfOfTotalHPExplosive", Battle::AI::Handlers::MoveFailureCheck.copy("UserLosesHalfOfTotalHPExplosive",
"UserFaintsPowersUpInMistyTerrainExplosive") "UserFaintsPowersUpInMistyTerrainExplosive")
Battle::AI::Handlers::MoveBasePower.add("UserFaintsPowersUpInMistyTerrainExplosive", Battle::AI::Handlers::MoveBasePower.add("UserFaintsPowersUpInMistyTerrainExplosive",
@@ -340,12 +406,18 @@ Battle::AI::Handlers::MoveEffectScore.add("UserFaintsPowersUpInMistyTerrainExplo
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("UserFaintsFixedDamageUserHP", Battle::AI::Handlers::MoveBasePower.add("UserFaintsFixedDamageUserHP",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next user.hp next user.hp
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserFaintsLowerTargetAtkSpAtk2", Battle::AI::Handlers::MoveEffectScore.add("UserFaintsLowerTargetAtkSpAtk2",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if !target.battler.pbCanLowerStatStage?(:ATTACK, user.battler) && if !target.battler.pbCanLowerStatStage?(:ATTACK, user.battler) &&
@@ -362,6 +434,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserFaintsLowerTargetAtkSpAtk2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("UserFaintsHealAndCureReplacement", Battle::AI::Handlers::MoveFailureCheck.add("UserFaintsHealAndCureReplacement",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !battle.pbCanChooseNonActive?(user.index) next true if !battle.pbCanChooseNonActive?(user.index)
@@ -373,11 +448,17 @@ Battle::AI::Handlers::MoveEffectScore.add("UserFaintsHealAndCureReplacement",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("UserFaintsHealAndCureReplacement", Battle::AI::Handlers::MoveFailureCheck.copy("UserFaintsHealAndCureReplacement",
"UserFaintsHealAndCureReplacementRestorePP") "UserFaintsHealAndCureReplacementRestorePP")
Battle::AI::Handlers::MoveEffectScore.copy("UserFaintsHealAndCureReplacement", Battle::AI::Handlers::MoveEffectScore.copy("UserFaintsHealAndCureReplacement",
"UserFaintsHealAndCureReplacementRestorePP") "UserFaintsHealAndCureReplacementRestorePP")
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartPerishCountsForAllBattlers", Battle::AI::Handlers::MoveFailureCheck.add("StartPerishCountsForAllBattlers",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next target.effects[PBEffects::PerishSong] > 0 next target.effects[PBEffects::PerishSong] > 0
@@ -392,6 +473,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartPerishCountsForAllBattlers",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("AttackerFaintsIfUserFaints", Battle::AI::Handlers::MoveFailureCheck.add("AttackerFaintsIfUserFaints",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next Settings::MECHANICS_GENERATION >= 7 && user.effects[PBEffects::DestinyBondPrevious] next Settings::MECHANICS_GENERATION >= 7 && user.effects[PBEffects::DestinyBondPrevious]
@@ -406,6 +490,9 @@ Battle::AI::Handlers::MoveEffectScore.add("AttackerFaintsIfUserFaints",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("SetAttackerMovePPTo0IfUserFaints", Battle::AI::Handlers::MoveEffectScore.add("SetAttackerMovePPTo0IfUserFaints",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
score += 50 score += 50

View File

@@ -16,6 +16,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTakesTargetItem",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("TargetTakesUserItem", Battle::AI::Handlers::MoveFailureCheck.add("TargetTakesUserItem",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.item || user.battler.unlosableItem?(user.item) next true if !user.item || user.battler.unlosableItem?(user.item)
@@ -34,6 +37,9 @@ Battle::AI::Handlers::MoveEffectScore.add("TargetTakesUserItem",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("UserTargetSwapItems", Battle::AI::Handlers::MoveFailureCheck.add("UserTargetSwapItems",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.wild? next true if user.wild?
@@ -56,6 +62,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapItems",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RestoreUserConsumedItem", Battle::AI::Handlers::MoveFailureCheck.add("RestoreUserConsumedItem",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.battler.recycleItem || user.item next true if !user.battler.recycleItem || user.item
@@ -68,6 +77,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RestoreUserConsumedItem",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("RemoveTargetItem", Battle::AI::Handlers::MoveBasePower.add("RemoveTargetItem",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbBaseDamage(power, user.battler, target.battler) next move.pbBaseDamage(power, user.battler, target.battler)
@@ -82,6 +94,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RemoveTargetItem",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("DestroyTargetBerryOrGem", Battle::AI::Handlers::MoveEffectScore.add("DestroyTargetBerryOrGem",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if target.effects[PBEffects::Substitute] == 0 if target.effects[PBEffects::Substitute] == 0
@@ -112,6 +127,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CorrodeTargetItem",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("StartTargetCannotUseItem", Battle::AI::Handlers::MoveFailureCheck.add("StartTargetCannotUseItem",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.effects[PBEffects::Embargo] > 0 next true if target.effects[PBEffects::Embargo] > 0
@@ -123,6 +141,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartTargetCannotUseItem",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("StartNegateHeldItems", Battle::AI::Handlers::MoveEffectScore.add("StartNegateHeldItems",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next 0 if battle.field.effects[PBEffects::MagicRoom] > 0 next 0 if battle.field.effects[PBEffects::MagicRoom] > 0
@@ -130,6 +151,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartNegateHeldItems",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("UserConsumeBerryRaiseDefense2", Battle::AI::Handlers::MoveFailureCheck.add("UserConsumeBerryRaiseDefense2",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
item = user.item item = user.item
@@ -160,6 +184,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserConsumeBerryRaiseDefense2",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("AllBattlersConsumeBerry", Battle::AI::Handlers::MoveFailureCheck.add("AllBattlersConsumeBerry",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.item || !target.item.is_berry? || target.battler.semiInvulnerable? next true if !target.item || !target.item.is_berry? || target.battler.semiInvulnerable?
@@ -201,6 +228,9 @@ Battle::AI::Handlers::MoveEffectScore.add("AllBattlersConsumeBerry",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserConsumeTargetBerry", Battle::AI::Handlers::MoveEffectScore.add("UserConsumeTargetBerry",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if target.effects[PBEffects::Substitute] == 0 if target.effects[PBEffects::Substitute] == 0
@@ -212,6 +242,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserConsumeTargetBerry",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("ThrowUserItemAtTarget", Battle::AI::Handlers::MoveFailureCheck.add("ThrowUserItemAtTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
item = user.item item = user.item

View File

@@ -7,12 +7,18 @@ Battle::AI::Handlers::MoveEffectScore.add("RedirectAllMovesToUser",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("RedirectAllMovesToTarget", Battle::AI::Handlers::MoveEffectScore.add("RedirectAllMovesToTarget",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next 0 if user.battler.allAllies.length == 0 next 0 if user.battler.allAllies.length == 0
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("CannotBeRedirected", Battle::AI::Handlers::MoveEffectScore.add("CannotBeRedirected",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
redirection = false redirection = false
@@ -32,12 +38,18 @@ Battle::AI::Handlers::MoveEffectScore.add("CannotBeRedirected",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("RandomlyDamageOrHealTarget", Battle::AI::Handlers::MoveBasePower.add("RandomlyDamageOrHealTarget",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next 50 # Average power, ish next 50 # Average power, ish
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("HealAllyOrDamageFoe", Battle::AI::Handlers::MoveFailureCheck.add("HealAllyOrDamageFoe",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.opposes?(user) && target.battler.canHeal? next true if !target.opposes?(user) && target.battler.canHeal?
@@ -53,6 +65,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealAllyOrDamageFoe",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("CurseTargetOrLowerUserSpd1RaiseUserAtkDef1", Battle::AI::Handlers::MoveFailureCheck.add("CurseTargetOrLowerUserSpd1RaiseUserAtkDef1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
if user.has_type?(:GHOST) if user.has_type?(:GHOST)
@@ -85,8 +100,14 @@ Battle::AI::Handlers::MoveEffectScore.add("CurseTargetOrLowerUserSpd1RaiseUserAt
} }
) )
#===============================================================================
#
#===============================================================================
# EffectDependsOnEnvironment # EffectDependsOnEnvironment
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("HitsAllFoesAndPowersUpInPsychicTerrain", Battle::AI::Handlers::MoveBasePower.add("HitsAllFoesAndPowersUpInPsychicTerrain",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbBaseDamage(power, user.battler, target.battler) next move.pbBaseDamage(power, user.battler, target.battler)
@@ -98,6 +119,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HitsAllFoesAndPowersUpInPsychicTerrai
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("TargetNextFireMoveDamagesTarget", Battle::AI::Handlers::MoveFailureCheck.add("TargetNextFireMoveDamagesTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.effects[PBEffects::Powder] next true if target.effects[PBEffects::Powder]
@@ -116,10 +140,19 @@ Battle::AI::Handlers::MoveEffectScore.add("TargetNextFireMoveDamagesTarget",
} }
) )
#===============================================================================
#
#===============================================================================
# DoublePowerAfterFusionFlare # DoublePowerAfterFusionFlare
#===============================================================================
#
#===============================================================================
# DoublePowerAfterFusionBolt # DoublePowerAfterFusionBolt
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("PowerUpAllyMove", Battle::AI::Handlers::MoveFailureCheck.add("PowerUpAllyMove",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.fainted? || target.effects[PBEffects::HelpingHand] next true if target.fainted? || target.effects[PBEffects::HelpingHand]
@@ -132,6 +165,9 @@ Battle::AI::Handlers::MoveEffectScore.add("PowerUpAllyMove",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("CounterPhysicalDamage", Battle::AI::Handlers::MoveBasePower.add("CounterPhysicalDamage",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next 60 # Representative value next 60 # Representative value
@@ -155,6 +191,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CounterPhysicalDamage",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("CounterSpecialDamage", Battle::AI::Handlers::MoveBasePower.add("CounterSpecialDamage",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next 60 # Representative value next 60 # Representative value
@@ -178,6 +217,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CounterSpecialDamage",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("CounterDamagePlusHalf", Battle::AI::Handlers::MoveBasePower.add("CounterDamagePlusHalf",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next 60 # Representative value next 60 # Representative value
@@ -189,6 +231,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CounterDamagePlusHalf",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("UserAddStockpileRaiseDefSpDef1", Battle::AI::Handlers::MoveFailureCheck.add("UserAddStockpileRaiseDefSpDef1",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.effects[PBEffects::Stockpile] >= 3 next true if user.effects[PBEffects::Stockpile] >= 3
@@ -208,6 +253,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserAddStockpileRaiseDefSpDef1",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("PowerDependsOnUserStockpile", Battle::AI::Handlers::MoveFailureCheck.add("PowerDependsOnUserStockpile",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.effects[PBEffects::Stockpile] == 0 next true if user.effects[PBEffects::Stockpile] == 0
@@ -219,6 +267,9 @@ Battle::AI::Handlers::MoveBasePower.add("PowerDependsOnUserStockpile",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("HealUserDependingOnUserStockpile", Battle::AI::Handlers::MoveFailureCheck.add("HealUserDependingOnUserStockpile",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.effects[PBEffects::Stockpile] == 0 next true if user.effects[PBEffects::Stockpile] == 0
@@ -236,12 +287,24 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserDependingOnUserStockpile",
} }
) )
#===============================================================================
#
#===============================================================================
# GrassPledge # GrassPledge
#===============================================================================
#
#===============================================================================
# FirePledge # FirePledge
#===============================================================================
#
#===============================================================================
# WaterPledge # WaterPledge
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("UseLastMoveUsed", Battle::AI::Handlers::MoveFailureCheck.add("UseLastMoveUsed",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !battle.lastMoveUsed next true if !battle.lastMoveUsed
@@ -249,6 +312,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("UseLastMoveUsed",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("UseLastMoveUsedByTarget", Battle::AI::Handlers::MoveFailureCheck.add("UseLastMoveUsedByTarget",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battle.lastRegularMoveUsed next true if !target.battle.lastRegularMoveUsed
@@ -261,12 +327,24 @@ Battle::AI::Handlers::MoveEffectScore.add("UseLastMoveUsedByTarget",
} }
) )
#===============================================================================
#
#===============================================================================
# UseMoveTargetIsAboutToUse # UseMoveTargetIsAboutToUse
#===============================================================================
#
#===============================================================================
# UseMoveDependingOnEnvironment # UseMoveDependingOnEnvironment
#===============================================================================
#
#===============================================================================
# UseRandomMove # UseRandomMove
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("UseRandomMoveFromUserParty", Battle::AI::Handlers::MoveFailureCheck.add("UseRandomMoveFromUserParty",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
will_fail = true will_fail = true
@@ -285,6 +363,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("UseRandomMoveFromUserParty",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("UseRandomUserMoveIfAsleep", Battle::AI::Handlers::MoveFailureCheck.add("UseRandomUserMoveIfAsleep",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !user.battler.asleep? next true if !user.battler.asleep?
@@ -304,10 +385,19 @@ Battle::AI::Handlers::MoveEffectScore.add("UseRandomUserMoveIfAsleep",
} }
) )
#===============================================================================
#
#===============================================================================
# BounceBackProblemCausingStatusMoves # BounceBackProblemCausingStatusMoves
#===============================================================================
#
#===============================================================================
# StealAndUseBeneficialStatusMove # StealAndUseBeneficialStatusMove
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("ReplaceMoveThisBattleWithTargetLastMoveUsed", Battle::AI::Handlers::MoveFailureCheck.add("ReplaceMoveThisBattleWithTargetLastMoveUsed",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.effects[PBEffects::Transform] || user.battler.pbHasMove?(move.id) next true if user.effects[PBEffects::Transform] || user.battler.pbHasMove?(move.id)
@@ -319,6 +409,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("ReplaceMoveThisBattleWithTargetLastM
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("ReplaceMoveWithTargetLastMoveUsed", Battle::AI::Handlers::MoveFailureCheck.add("ReplaceMoveWithTargetLastMoveUsed",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.effects[PBEffects::Transform] || !user.battler.pbHasMove?(move.id) next true if user.effects[PBEffects::Transform] || !user.battler.pbHasMove?(move.id)

View File

@@ -7,6 +7,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("FleeFromBattle",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SwitchOutUserStatusMove", Battle::AI::Handlers::MoveFailureCheck.add("SwitchOutUserStatusMove",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
if user.wild? if user.wild?
@@ -42,6 +45,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SwitchOutUserStatusMove",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("SwitchOutUserDamagingMove", Battle::AI::Handlers::MoveEffectScore.add("SwitchOutUserDamagingMove",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next 0 if !battle.pbCanChooseNonActive?(user.index) || next 0 if !battle.pbCanChooseNonActive?(user.index) ||
@@ -49,6 +55,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SwitchOutUserDamagingMove",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetAtkSpAtk1SwitchOutUser", Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetAtkSpAtk1SwitchOutUser",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
will_fail = true will_fail = true
@@ -69,6 +78,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAtkSpAtk1SwitchOutUser",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SwitchOutUserPassOnEffects", Battle::AI::Handlers::MoveFailureCheck.add("SwitchOutUserPassOnEffects",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !battle.pbCanChooseNonActive?(user.index) next true if !battle.pbCanChooseNonActive?(user.index)
@@ -100,6 +112,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SwitchOutUserPassOnEffects",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("SwitchOutTargetStatusMove", Battle::AI::Handlers::MoveFailureCheck.add("SwitchOutTargetStatusMove",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.has_active_ability?(:SUCTIONCUPS) || next true if target.has_active_ability?(:SUCTIONCUPS) ||
@@ -126,6 +141,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SwitchOutTargetStatusMove",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("SwitchOutTargetDamagingMove", Battle::AI::Handlers::MoveEffectScore.add("SwitchOutTargetDamagingMove",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if !target.effects[PBEffects::Ingrain] && if !target.effects[PBEffects::Ingrain] &&
@@ -138,12 +156,18 @@ Battle::AI::Handlers::MoveEffectScore.add("SwitchOutTargetDamagingMove",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("BindTarget", Battle::AI::Handlers::MoveEffectScore.add("BindTarget",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
next score + 40 if target.effects[PBEffects::Trapping] == 0 next score + 40 if target.effects[PBEffects::Trapping] == 0
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveBasePower.add("BindTargetDoublePowerIfTargetUnderwater", Battle::AI::Handlers::MoveBasePower.add("BindTargetDoublePowerIfTargetUnderwater",
proc { |power, move, user, target, ai, battle| proc { |power, move, user, target, ai, battle|
next move.pbModifyDamage(power, user.battler, target.battler) next move.pbModifyDamage(power, user.battler, target.battler)
@@ -155,6 +179,9 @@ Battle::AI::Handlers::MoveEffectScore.add("BindTargetDoublePowerIfTargetUnderwat
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("TrapTargetInBattle", Battle::AI::Handlers::MoveFailureCheck.add("TrapTargetInBattle",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
if move.statusMove? if move.statusMove?
@@ -164,6 +191,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("TrapTargetInBattle",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("TrapTargetInBattle", Battle::AI::Handlers::MoveFailureCheck.add("TrapTargetInBattle",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
if move.statusMove? if move.statusMove?
@@ -181,6 +211,9 @@ Battle::AI::Handlers::MoveEffectScore.add("TrapTargetInBattleLowerTargetDefSpDef
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("TrapUserAndTargetInBattle", Battle::AI::Handlers::MoveEffectScore.add("TrapUserAndTargetInBattle",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if target.effects[PBEffects::JawLock] < 0 if target.effects[PBEffects::JawLock] < 0
@@ -190,14 +223,23 @@ Battle::AI::Handlers::MoveEffectScore.add("TrapUserAndTargetInBattle",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("TrapAllBattlersInBattleForOneTurn", Battle::AI::Handlers::MoveFailureCheck.add("TrapAllBattlersInBattleForOneTurn",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if battle.field.effects[PBEffects::FairyLock] > 0 next true if battle.field.effects[PBEffects::FairyLock] > 0
} }
) )
#===============================================================================
#
#===============================================================================
# PursueSwitchingFoe # PursueSwitchingFoe
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UsedAfterUserTakesPhysicalDamage", Battle::AI::Handlers::MoveEffectScore.add("UsedAfterUserTakesPhysicalDamage",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if ai.trainer.medium_skill? if ai.trainer.medium_skill?
@@ -213,6 +255,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UsedAfterUserTakesPhysicalDamage",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UsedAfterAllyRoundWithDoublePower", Battle::AI::Handlers::MoveEffectScore.add("UsedAfterAllyRoundWithDoublePower",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if ai.trainer.medium_skill? if ai.trainer.medium_skill?
@@ -225,10 +270,19 @@ Battle::AI::Handlers::MoveEffectScore.add("UsedAfterAllyRoundWithDoublePower",
} }
) )
#===============================================================================
#
#===============================================================================
# TargetActsNext # TargetActsNext
#===============================================================================
#
#===============================================================================
# TargetActsLast # TargetActsLast
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("TargetUsesItsLastUsedMoveAgain", Battle::AI::Handlers::MoveFailureCheck.add("TargetUsesItsLastUsedMoveAgain",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if !target.battler.lastRegularMoveUsed || next true if !target.battler.lastRegularMoveUsed ||
@@ -250,8 +304,14 @@ Battle::AI::Handlers::MoveEffectScore.add("TargetUsesItsLastUsedMoveAgain",
} }
) )
#===============================================================================
#
#===============================================================================
# StartSlowerBattlersActFirst # StartSlowerBattlersActFirst
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("HigherPriorityInGrassyTerrain", Battle::AI::Handlers::MoveEffectScore.add("HigherPriorityInGrassyTerrain",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if ai.trainer.medium_skill? && @battle.field.terrain == :Grassy if ai.trainer.medium_skill? && @battle.field.terrain == :Grassy
@@ -261,6 +321,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HigherPriorityInGrassyTerrain",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("LowerPPOfTargetLastMoveBy3", Battle::AI::Handlers::MoveEffectScore.add("LowerPPOfTargetLastMoveBy3",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
last_move = target.battler.pbGetMoveWithID(target.battler.lastRegularMoveUsed) last_move = target.battler.pbGetMoveWithID(target.battler.lastRegularMoveUsed)
@@ -271,6 +334,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerPPOfTargetLastMoveBy3",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("LowerPPOfTargetLastMoveBy4", Battle::AI::Handlers::MoveFailureCheck.add("LowerPPOfTargetLastMoveBy4",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
last_move = target.battler.pbGetMoveWithID(target.battler.lastRegularMoveUsed) last_move = target.battler.pbGetMoveWithID(target.battler.lastRegularMoveUsed)
@@ -283,6 +349,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerPPOfTargetLastMoveBy4",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetLastMoveUsed", Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetLastMoveUsed",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.effects[PBEffects::Disable] > 0 || !target.battler.lastRegularMoveUsed next true if target.effects[PBEffects::Disable] > 0 || !target.battler.lastRegularMoveUsed
@@ -298,6 +367,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetLastMoveUsed",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetUsingSameMoveConsecutively", Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetUsingSameMoveConsecutively",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.effects[PBEffects::Torment] next true if target.effects[PBEffects::Torment]
@@ -310,6 +382,9 @@ Battle::AI::Handlers::MoveEffectScore.add("DisableTargetUsingSameMoveConsecutive
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetUsingDifferentMove", Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetUsingDifferentMove",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.effects[PBEffects::Encore] > 0 next true if target.effects[PBEffects::Encore] > 0
@@ -344,6 +419,9 @@ Battle::AI::Handlers::MoveEffectScore.add("DisableTargetUsingDifferentMove",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetStatusMoves", Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetStatusMoves",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.effects[PBEffects::Taunt] > 0 next true if target.effects[PBEffects::Taunt] > 0
@@ -352,6 +430,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetStatusMoves",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetHealingMoves", Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetHealingMoves",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if target.effects[PBEffects::HealBlock] > 0 next true if target.effects[PBEffects::HealBlock] > 0
@@ -359,6 +440,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetHealingMoves",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("DisableTargetSoundMoves", Battle::AI::Handlers::MoveEffectScore.add("DisableTargetSoundMoves",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
if target.effects[PBEffects::ThroatChop] == 0 && ai.trainer.high_skill? if target.effects[PBEffects::ThroatChop] == 0 && ai.trainer.high_skill?
@@ -374,12 +458,18 @@ Battle::AI::Handlers::MoveEffectScore.add("DisableTargetSoundMoves",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetMovesKnownByUser", Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetMovesKnownByUser",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if user.effects[PBEffects::Imprison] next true if user.effects[PBEffects::Imprison]
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("AllBattlersLoseHalfHPUserSkipsNextTurn", Battle::AI::Handlers::MoveFailureCheck.add("AllBattlersLoseHalfHPUserSkipsNextTurn",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
next true if battle.allBattlers.none? { |b| b.hp > 1 } next true if battle.allBattlers.none? { |b| b.hp > 1 }
@@ -394,6 +484,9 @@ Battle::AI::Handlers::MoveEffectScore.add("AllBattlersLoseHalfHPUserSkipsNextTur
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveEffectScore.add("UserLosesHalfHP", Battle::AI::Handlers::MoveEffectScore.add("UserLosesHalfHP",
proc { |score, move, user, target, ai, battle| proc { |score, move, user, target, ai, battle|
score += 20 # Shadow moves are more preferable score += 20 # Shadow moves are more preferable
@@ -402,6 +495,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserLosesHalfHP",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.copy("StartSunWeather", Battle::AI::Handlers::MoveFailureCheck.copy("StartSunWeather",
"StartShadowSkyWeather") "StartShadowSkyWeather")
Battle::AI::Handlers::MoveEffectScore.add("StartShadowSkyWeather", Battle::AI::Handlers::MoveEffectScore.add("StartShadowSkyWeather",
@@ -415,6 +511,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartShadowSkyWeather",
} }
) )
#===============================================================================
#
#===============================================================================
Battle::AI::Handlers::MoveFailureCheck.add("RemoveAllScreens", Battle::AI::Handlers::MoveFailureCheck.add("RemoveAllScreens",
proc { |move, user, target, ai, battle| proc { |move, user, target, ai, battle|
will_fail = true will_fail = true