mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-07 21:24:59 +00:00
Changed AI's random move choice after scores are calculated
This commit is contained in:
@@ -9,12 +9,9 @@ class Battle::AI
|
||||
choices = []
|
||||
# TODO: Split this into two, the first part being the calculation of all
|
||||
# predicted damages and the second part being the score calculations
|
||||
# (which are based on the predicted damages). Note that this requires
|
||||
# saving each of the scoresAndTargets entries in here rather than in
|
||||
# def pbRegisterMoveTrainer, and only at the very end are they
|
||||
# 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.
|
||||
# (which are based on the predicted damages). Multi-target moves could
|
||||
# be fiddly since damages should be calculated for each target but
|
||||
# they're all related.
|
||||
battler.eachMoveWithIndex do |_m, i|
|
||||
next if !@battle.pbCanChooseMove?(battler.index, i, false)
|
||||
if @user.wild?
|
||||
@@ -73,17 +70,11 @@ class Battle::AI
|
||||
choices.push([idxMove, totalScore, -1]) if totalScore > 0
|
||||
else
|
||||
# If move affects one battler and you have to choose which one
|
||||
scoresAndTargets = []
|
||||
@battle.allBattlers.each do |b|
|
||||
next if !@battle.pbMoveCanTarget?(battler.index, b.index, target_data)
|
||||
next if target_data.targets_foe && !battler.opposes?(b)
|
||||
score = pbGetMoveScore(move, b)
|
||||
scoresAndTargets.push([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]])
|
||||
choices.push([idxMove, score, b.index]) if score > 0
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -466,7 +457,7 @@ class Battle::AI
|
||||
"UserTargetSwapBaseSpeed",
|
||||
"RedirectAllMovesToTarget",
|
||||
"TargetUsesItsLastUsedMoveAgain"
|
||||
return 5
|
||||
return 55
|
||||
when "RaiseUserAttack1",
|
||||
"RaiseUserDefense1",
|
||||
"RaiseUserDefense1CurlUpUser",
|
||||
@@ -490,7 +481,7 @@ class Battle::AI
|
||||
"LowerTargetAtkSpAtk1",
|
||||
"LowerTargetSpAtk1",
|
||||
"TargetNextFireMoveDamagesTarget"
|
||||
return 10
|
||||
return 60
|
||||
when "SleepTarget",
|
||||
"SleepTargetIfUserDarkrai",
|
||||
"SleepTargetChangeUserMeloettaForm",
|
||||
@@ -527,7 +518,7 @@ class Battle::AI
|
||||
"LowerTargetAtkSpAtk1SwitchOutUser",
|
||||
"RaisePlusMinusUserAndAlliesAtkSpAtk1",
|
||||
"HealTargetDependingOnGrassyTerrain"
|
||||
return 15
|
||||
return 65
|
||||
when "SleepTarget",
|
||||
"SleepTargetChangeUserMeloettaForm",
|
||||
"SleepTargetNextTurn",
|
||||
@@ -553,7 +544,7 @@ class Battle::AI
|
||||
"TargetMovesBecomeElectric",
|
||||
"NormalMovesBecomeElectric",
|
||||
"PoisonTargetLowerTargetSpeed1"
|
||||
return 20
|
||||
return 70
|
||||
when "BadPoisonTarget",
|
||||
"ParalyzeTarget",
|
||||
"BurnTarget",
|
||||
@@ -585,7 +576,7 @@ class Battle::AI
|
||||
"InvertTargetStatStages",
|
||||
"HealUserByTargetAttackLowerTargetAttack1",
|
||||
"HealUserDependingOnSandstorm"
|
||||
return 25
|
||||
return 75
|
||||
when "ParalyzeTarget",
|
||||
"ParalyzeTargetIfNotTypeImmune",
|
||||
"RaiseUserAtkDef1",
|
||||
@@ -606,7 +597,7 @@ class Battle::AI
|
||||
"StartMistyTerrain",
|
||||
"StartPsychicTerrain",
|
||||
"CureTargetStatusHealUserHalfOfTotalHP"
|
||||
return 30
|
||||
return 80
|
||||
when "CureUserPartyStatus",
|
||||
"RaiseUserAttack2",
|
||||
"RaiseUserSpAtk2",
|
||||
@@ -617,18 +608,18 @@ class Battle::AI
|
||||
"ProtectUserSideFromDamagingMovesIfUserFirstTurn",
|
||||
"ProtectUserFromDamagingMovesKingsShield",
|
||||
"ProtectUserBanefulBunker"
|
||||
return 35
|
||||
return 85
|
||||
when "RaiseUserAtkSpd1",
|
||||
"RaiseUserSpAtkSpDefSpd1",
|
||||
"LowerUserDefSpDef1RaiseUserAtkSpAtkSpd2",
|
||||
"RaiseUserAtk1Spd2",
|
||||
"TwoTurnAttackRaiseUserSpAtkSpDefSpd2"
|
||||
return 40
|
||||
return 90
|
||||
when "SleepTarget",
|
||||
"SleepTargetChangeUserMeloettaForm",
|
||||
"AddStickyWebToFoeSide",
|
||||
"StartWeakenDamageAgainstUserSideIfHail"
|
||||
return 60
|
||||
return 100
|
||||
end
|
||||
# "DoesNothingUnusableInGravity",
|
||||
# "StartUserSideImmunityToInflictedStatus",
|
||||
@@ -644,7 +635,7 @@ class Battle::AI
|
||||
# "TargetActsNext",
|
||||
# "TargetActsLast",
|
||||
# "ProtectUserSideFromStatusMoves"
|
||||
return 0
|
||||
return 100
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
@@ -654,48 +645,33 @@ class Battle::AI
|
||||
def pbChooseMove(choices)
|
||||
user_battler = @user.battler
|
||||
|
||||
# Figure out useful information about the choices
|
||||
totalScore = 0
|
||||
maxScore = 0
|
||||
choices.each do |c|
|
||||
totalScore += c[1]
|
||||
maxScore = c[1] if maxScore < c[1]
|
||||
# If there are no calculated choices, pick one at random
|
||||
if choices.length == 0
|
||||
user_battler.eachMoveWithIndex do |_m, i|
|
||||
next if !@battle.pbCanChooseMove?(user_battler.index, i, false)
|
||||
choices.push([i, 100, -1]) # Move index, score, target
|
||||
end
|
||||
|
||||
# Find any preferred moves and just choose from them
|
||||
if @trainer.high_skill? && maxScore > 100
|
||||
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
|
||||
if choices.length == 0 # No moves are physically possible to use; use Struggle
|
||||
@battle.pbAutoChooseMove(user_battler.index)
|
||||
PBDebug.log("[AI] #{user_battler.pbThis} (#{user_battler.index}) will auto-use a move or Struggle")
|
||||
return
|
||||
end
|
||||
PBDebug.log("[AI] #{user_battler.pbThis} (#{user_battler.index}) doesn't want to use any moves; picking one at random")
|
||||
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
|
||||
if @trainer.high_skill? && @user.can_switch_lax?
|
||||
badMoves = false
|
||||
if (maxScore <= 20 && user_battler.turnCount > 2) ||
|
||||
(maxScore <= 40 && user_battler.turnCount > 5)
|
||||
if (max_score <= 20 && user_battler.turnCount > 2) ||
|
||||
(max_score <= 40 && user_battler.turnCount > 5)
|
||||
badMoves = true if pbAIRandom(100) < 80
|
||||
end
|
||||
if !badMoves && totalScore < 100 && user_battler.turnCount > 1
|
||||
badMoves = true
|
||||
choices.each do |c|
|
||||
next if !user_battler.moves[c[0]].damagingMove?
|
||||
badMoves = false
|
||||
break
|
||||
end
|
||||
if !badMoves && max_score < 60 && user_battler.turnCount > 1
|
||||
badMoves = choices.none? { |c| user_battler.moves[c[0]].damagingMove? }
|
||||
badMoves = false if badMoves && pbAIRandom(100) < 10
|
||||
end
|
||||
if badMoves && pbEnemyShouldWithdrawEx?(true)
|
||||
@@ -706,20 +682,13 @@ class Battle::AI
|
||||
end
|
||||
end
|
||||
|
||||
# If there are no calculated choices, pick one at random
|
||||
if choices.length == 0
|
||||
PBDebug.log("[AI] #{user_battler.pbThis} (#{user_battler.index}) doesn't want to use any moves; picking one at random")
|
||||
user_battler.eachMoveWithIndex do |_m, i|
|
||||
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
|
||||
# Calculate a minimum score threshold and reduce all move scores by it
|
||||
threshold = (max_score * 0.85).floor
|
||||
choices.each { |c| c[1] = [c[1] - threshold, 0].max }
|
||||
total_score = choices.sum { |c| c[1] }
|
||||
|
||||
# Randomly choose a move from the choices and register it
|
||||
randNum = pbAIRandom(totalScore)
|
||||
# Pick a move randomly from choices weighted by their scores
|
||||
randNum = pbAIRandom(total_score)
|
||||
choices.each do |c|
|
||||
randNum -= c[1]
|
||||
next if randNum >= 0
|
||||
@@ -727,6 +696,7 @@ class Battle::AI
|
||||
@battle.pbRegisterTarget(user_battler.index, c[2]) if c[2] >= 0
|
||||
break
|
||||
end
|
||||
|
||||
# Log the result
|
||||
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}")
|
||||
|
||||
@@ -3,8 +3,14 @@
|
||||
#===============================================================================
|
||||
# Struggle
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# None
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("DoesNothingCongratulations",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next 0 if ai.trainer.high_skill?
|
||||
@@ -12,6 +18,9 @@ Battle::AI::Handlers::MoveEffectScore.add("DoesNothingCongratulations",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("DoesNothingFailsIfNoAlly",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.battler.allAllies.length == 0
|
||||
@@ -20,18 +29,35 @@ Battle::AI::Handlers::MoveFailureCheck.add("DoesNothingFailsIfNoAlly",
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("DoesNothingCongratulations",
|
||||
"DoesNothingFailsIfNoAlly")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("DoesNothingCongratulations",
|
||||
"DoesNothingUnusableInGravity")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("DoesNothingCongratulations",
|
||||
"DoesNothingUnusableInGravity",
|
||||
"DoubleMoneyGainedFromBattle")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# AddMoneyGainedFromBattle
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("FailsIfNotUserFirstTurn",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.turnCount > 0
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("FailsIfUserHasUnusedMove",
|
||||
proc { |move, user, target, ai, battle|
|
||||
has_another_move = false
|
||||
@@ -47,12 +73,18 @@ Battle::AI::Handlers::MoveFailureCheck.add("FailsIfUserHasUnusedMove",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("FailsIfUserNotConsumedBerry",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !user.battler.belched?
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("FailsIfTargetHasNoItem",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !target.item || !target.item_active?
|
||||
@@ -64,6 +96,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FailsIfTargetHasNoItem",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("FailsUnlessTargetSharesTypeWithUser",
|
||||
proc { |move, user, target, ai, battle|
|
||||
user_types = user.battler.pbTypes(true)
|
||||
@@ -72,6 +107,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("FailsUnlessTargetSharesTypeWithUser"
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("FailsIfUserDamagedThisTurn",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
score += 50 if target.effects[PBEffects::HyperBeam] > 0
|
||||
@@ -81,14 +119,23 @@ Battle::AI::Handlers::MoveEffectScore.add("FailsIfUserDamagedThisTurn",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# FailsIfTargetActed
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("CrashDamageIfFailsUnusableInGravity",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score + 10 * (user.stages[:ACCURACY] - target.stages[:EVASION])
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartSunWeather",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if [:HarshSun, :HeavyRain, :StrongWinds,
|
||||
@@ -110,6 +157,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartSunWeather",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("StartSunWeather",
|
||||
"StartRainWeather")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("StartRainWeather",
|
||||
@@ -127,6 +177,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartRainWeather",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("StartSunWeather",
|
||||
"StartSandstormWeather")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("StartSandstormWeather",
|
||||
@@ -138,6 +191,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartSandstormWeather",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("StartSunWeather",
|
||||
"StartHailWeather")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("StartHailWeather",
|
||||
@@ -149,36 +205,54 @@ Battle::AI::Handlers::MoveEffectScore.add("StartHailWeather",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartElectricTerrain",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if battle.field.terrain == :Electric
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartGrassyTerrain",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if battle.field.terrain == :Grassy
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartMistyTerrain",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if battle.field.terrain == :Misty
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartPsychicTerrain",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if battle.field.terrain == :Psychic
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("RemoveTerrain",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if battle.field.terrain == :None
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("AddSpikesToFoeSide",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.pbOpposingSide.effects[PBEffects::StealthRock]
|
||||
@@ -228,12 +308,18 @@ Battle::AI::Handlers::MoveEffectScore.add("AddStealthRocksToFoeSide",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("AddStickyWebToFoeSide",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.pbOpposingSide.effects[PBEffects::StickyWeb]
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SwapSideEffects",
|
||||
proc { |move, user, target, ai, battle|
|
||||
has_effect = false
|
||||
@@ -277,6 +363,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SwapSideEffects",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("UserMakeSubstitute",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.effects[PBEffects::Substitute] > 0
|
||||
@@ -284,6 +373,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("UserMakeSubstitute",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RemoveUserBindingAndEntryHazards",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
score += 30 if user.effects[PBEffects::Trapping] > 0
|
||||
@@ -297,6 +389,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RemoveUserBindingAndEntryHazards",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("AttackTwoTurnsLater",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
num_targets = 0
|
||||
@@ -324,6 +422,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("UserSwapsPositionsWithAlly",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("BurnAttackerBeforeUserActs",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score + 20 # Because of possible burning
|
||||
|
||||
@@ -40,6 +40,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAttack1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAttack1",
|
||||
"RaiseUserAttack2")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAttack2",
|
||||
@@ -78,17 +81,29 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAttack2",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAttack2",
|
||||
"RaiseUserAttack2IfTargetFaints")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAttack2",
|
||||
"RaiseUserAttack3")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAttack2",
|
||||
"RaiseUserAttack3")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAttack2IfTargetFaints",
|
||||
"RaiseUserAttack3IfTargetFaints")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("MaxUserAttackLoseHalfOfTotalHP",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
"RaiseUserDefense1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense1",
|
||||
@@ -127,11 +145,17 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserDefense1",
|
||||
"RaiseUserDefense1CurlUpUser")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserDefense1",
|
||||
"RaiseUserDefense1CurlUpUser")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserDefense1",
|
||||
"RaiseUserDefense2")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense2",
|
||||
@@ -147,6 +171,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense2",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserDefense1",
|
||||
"RaiseUserDefense3")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense3",
|
||||
@@ -162,6 +189,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefense3",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAttack1",
|
||||
"RaiseUserSpAtk1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk1",
|
||||
@@ -197,6 +227,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpAtk1",
|
||||
"RaiseUserSpAtk2")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk2",
|
||||
@@ -234,6 +267,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk2",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpAtk1",
|
||||
"RaiseUserSpAtk3")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk3",
|
||||
@@ -271,6 +307,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtk3",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserDefense1",
|
||||
"RaiseUserSpDef1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpDef1",
|
||||
@@ -286,6 +325,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpDef1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpDef1",
|
||||
"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",
|
||||
"RaiseUserSpDef2",
|
||||
"RaiseUserSpDef3")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserSpDef1",
|
||||
"RaiseUserSpDef2",
|
||||
"RaiseUserSpDef3")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpDef1",
|
||||
"RaiseUserSpeed1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpeed1",
|
||||
@@ -331,6 +385,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpeed1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpeed1",
|
||||
"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",
|
||||
"RaiseUserSpeed2LowerUserWeight",
|
||||
"RaiseUserSpeed3")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserSpeed2",
|
||||
"RaiseUserSpeed2LowerUserWeight",
|
||||
"RaiseUserSpeed3")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserSpeed1",
|
||||
"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",
|
||||
"RaiseUserAccuracy2",
|
||||
"RaiseUserAccuracy3")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAccuracy1",
|
||||
"RaiseUserAccuracy2",
|
||||
"RaiseUserAccuracy3")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAccuracy1",
|
||||
"RaiseUserEvasion1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserEvasion1",
|
||||
@@ -393,6 +474,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserEvasion1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserEvasion1",
|
||||
"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",
|
||||
"RaiseUserEvasion2MinimizeUser",
|
||||
"RaiseUserEvasion3")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserEvasion2",
|
||||
"RaiseUserEvasion2MinimizeUser",
|
||||
"RaiseUserEvasion3")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("RaiseUserCriticalHitRate2",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.effects[PBEffects::FocusEnergy] >= 2
|
||||
@@ -428,6 +524,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserCriticalHitRate2",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("RaiseUserAtkDef1",
|
||||
proc { |move, user, target, ai, battle|
|
||||
if move.statusMove?
|
||||
@@ -462,6 +561,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkDef1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkDef1",
|
||||
"RaiseUserAtkDefAcc1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkDefAcc1",
|
||||
@@ -486,6 +588,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkDefAcc1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkDef1",
|
||||
"RaiseUserAtkSpAtk1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkSpAtk1",
|
||||
@@ -512,11 +617,17 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkSpAtk1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
|
||||
"RaiseUserAtkSpAtk1Or2InSun")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("RaiseUserAtkSpAtk1",
|
||||
"RaiseUserAtkSpAtk1Or2InSun")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("LowerUserDefSpDef1RaiseUserAtkSpAtkSpd2",
|
||||
proc { |move, user, target, ai, battle|
|
||||
will_fail = true
|
||||
@@ -553,6 +664,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefSpDef1RaiseUserAtkSpAtkSp
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
|
||||
"RaiseUserAtkSpd1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkSpd1",
|
||||
@@ -582,6 +696,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkSpd1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
|
||||
"RaiseUserAtk1Spd2")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtk1Spd2",
|
||||
@@ -610,6 +727,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtk1Spd2",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
|
||||
"RaiseUserAtkAcc1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkAcc1",
|
||||
@@ -633,6 +753,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserAtkAcc1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
|
||||
"RaiseUserDefSpDef1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefSpDef1",
|
||||
@@ -643,6 +766,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserDefSpDef1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
|
||||
"RaiseUserSpAtkSpDef1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtkSpDef1",
|
||||
@@ -667,6 +793,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtkSpDef1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
|
||||
"RaiseUserSpAtkSpDefSpd1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtkSpDefSpd1",
|
||||
@@ -697,6 +826,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserSpAtkSpDefSpd1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("RaiseUserAtkSpAtk1",
|
||||
"RaiseUserMainStats1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RaiseUserMainStats1",
|
||||
@@ -715,6 +847,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserMainStats1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("RaiseUserMainStats1LoseThirdOfTotalHP",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.effects[PBEffects::NoRetreat]
|
||||
@@ -768,57 +906,93 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseUserMainStats1TrapUserInBattle",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("StartRaiseUserAtk1WhenDamaged",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score + 25 if user.effects[PBEffects::Rage]
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerUserAttack1",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score + user.stages[:ATTACK] * 10
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("LowerUserAttack1",
|
||||
"LowerUserAttack2")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefense1",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score + user.stages[:DEFENSE] * 10
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("LowerUserDefense1",
|
||||
"LowerUserDefense2")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerUserSpAtk1",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score + user.stages[:SPECIAL_ATTACK] * 10
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("LowerUserSpAtk1",
|
||||
"LowerUserSpAtk2")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerUserSpDef1",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score + user.stages[:SPECIAL_DEFENSE] * 10
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("LowerUserSpDef1",
|
||||
"LowerUserSpDef2")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerUserSpeed1",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score + user.stages[:SPECIAL_DEFENSE] * 10
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("LowerUserSpeed1",
|
||||
"LowerUserSpeed2")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerUserAtkDef1",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
avg = user.stages[:ATTACK] * 10
|
||||
@@ -827,6 +1001,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerUserAtkDef1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefSpDef1",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
avg = user.stages[:DEFENSE] * 10
|
||||
@@ -835,6 +1012,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefSpDef1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefSpDefSpd1",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
avg = user.stages[:DEFENSE] * 10
|
||||
@@ -844,6 +1024,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerUserDefSpDefSpd1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetAttack1",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if move.statusMove? &&
|
||||
@@ -851,6 +1034,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetAttack1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetAttack2ConfuseTarget",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
will_fail = true
|
||||
@@ -909,6 +1104,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseTargetRandomStat2",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("RaiseTargetAtkSpAtk2",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if move.statusMove? &&
|
||||
@@ -964,6 +1165,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAttack1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack1",
|
||||
"LowerTargetAttack1BypassSubstitute")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAttack1BypassSubstitute",
|
||||
@@ -986,6 +1190,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAttack1BypassSubstitute",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack1",
|
||||
"LowerTargetAttack2")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAttack2",
|
||||
@@ -1023,11 +1230,17 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAttack2",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack2",
|
||||
"LowerTargetAttack3")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetAttack2",
|
||||
"LowerTargetAttack3")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack1",
|
||||
"LowerTargetDefense1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetDefense1",
|
||||
@@ -1041,6 +1254,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetDefense1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetDefense1",
|
||||
"LowerTargetDefense1PowersUpInGravity")
|
||||
Battle::AI::Handlers::MoveBasePower.add("LowerTargetDefense1PowersUpInGravity",
|
||||
@@ -1059,6 +1275,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetDefense1PowersUpInGravity"
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetDefense1",
|
||||
"LowerTargetDefense2")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetDefense2",
|
||||
@@ -1074,11 +1293,17 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetDefense2",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetDefense2",
|
||||
"LowerTargetDefense3")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetDefense2",
|
||||
"LowerTargetDefense3")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAttack1",
|
||||
"LowerTargetSpAtk1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk1",
|
||||
@@ -1114,6 +1339,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpAtk1",
|
||||
"LowerTargetSpAtk2")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk2",
|
||||
@@ -1124,6 +1352,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk2",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetSpAtk2IfCanAttract",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if move.statusMove? &&
|
||||
@@ -1167,6 +1398,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk2IfCanAttract",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpAtk1",
|
||||
"LowerTargetSpAtk3")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk3",
|
||||
@@ -1177,6 +1411,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpAtk3",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetDefense1",
|
||||
"LowerTargetSpDef1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpDef1",
|
||||
@@ -1190,6 +1427,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpDef1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpDef1",
|
||||
"LowerTargetSpDef2")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpDef2",
|
||||
@@ -1205,11 +1445,17 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpDef2",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpDef2",
|
||||
"LowerTargetSpDef3")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetSpDef2",
|
||||
"LowerTargetSpDef3")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpDef1",
|
||||
"LowerTargetSpeed1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpeed1",
|
||||
@@ -1228,6 +1474,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpeed1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpeed1",
|
||||
"LowerTargetSpeed1WeakerInGrassyTerrain")
|
||||
Battle::AI::Handlers::MoveBasePower.add("LowerTargetSpeed1WeakerInGrassyTerrain",
|
||||
@@ -1238,6 +1487,9 @@ Battle::AI::Handlers::MoveBasePower.add("LowerTargetSpeed1WeakerInGrassyTerrain"
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetSpeed1",
|
||||
"LowerTargetSpeed1WeakerInGrassyTerrain")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetSpeed1MakeTargetWeakerToFire",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next false if !target.effects[PBEffects::TarShot]
|
||||
@@ -1258,6 +1510,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpeed1MakeTargetWeakerToFi
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpeed1",
|
||||
"LowerTargetSpeed2")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpeed2",
|
||||
@@ -1278,11 +1533,17 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetSpeed2",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpeed2",
|
||||
"LowerTargetSpeed3")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetSpeed2",
|
||||
"LowerTargetSpeed3")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetSpeed1",
|
||||
"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",
|
||||
"LowerTargetAccuracy2",
|
||||
"LowerTargetAccuracy3")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetAccuracy1",
|
||||
"LowerTargetAccuracy2",
|
||||
"LowerTargetAccuracy3")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAccuracy1",
|
||||
"LowerTargetEvasion1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetEvasion1",
|
||||
@@ -1316,6 +1589,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetEvasion1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetEvasion1RemoveSideEffects",
|
||||
proc { |move, user, target, ai, battle|
|
||||
target_side = target.pbOwnSide
|
||||
@@ -1358,6 +1634,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetEvasion1RemoveSideEffects"
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetEvasion1",
|
||||
"LowerTargetEvasion2")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetEvasion2",
|
||||
@@ -1371,11 +1650,17 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetEvasion2",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetEvasion2",
|
||||
"LowerTargetEvasion3")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("LowerTargetEvasion2",
|
||||
"LowerTargetEvasion3")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetAtkDef1",
|
||||
proc { |move, user, target, ai, battle|
|
||||
will_fail = true
|
||||
@@ -1395,6 +1680,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAtkDef1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("LowerTargetAtkDef1",
|
||||
"LowerTargetAtkSpAtk1")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAtkSpAtk1",
|
||||
@@ -1405,6 +1693,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAtkSpAtk1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("LowerPoisonedTargetAtkSpAtkSpd1",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !target.battler.poisoned?
|
||||
@@ -1426,6 +1717,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerPoisonedTargetAtkSpAtkSpd1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("RaiseAlliesAtkDef1",
|
||||
proc { |move, user, target, ai, battle|
|
||||
will_fail = true
|
||||
@@ -1454,6 +1748,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseAlliesAtkDef1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("RaisePlusMinusUserAndAlliesAtkSpAtk1",
|
||||
proc { |move, user, target, ai, battle|
|
||||
will_fail = true
|
||||
@@ -1480,6 +1777,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaisePlusMinusUserAndAlliesAtkSpAtk1"
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("RaisePlusMinusUserAndAlliesAtkSpAtk1",
|
||||
proc { |move, user, target, ai, battle|
|
||||
will_fail = true
|
||||
@@ -1506,6 +1806,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaisePlusMinusUserAndAlliesDefSpDef1"
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("RaiseGroundedGrassBattlersAtkSpAtk1",
|
||||
proc { |move, user, target, ai, battle|
|
||||
will_fail = true
|
||||
@@ -1533,6 +1836,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseGroundedGrassBattlersAtkSpAtk1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("RaiseGrassBattlersDef1",
|
||||
proc { |move, user, target, ai, battle|
|
||||
will_fail = true
|
||||
@@ -1558,6 +1864,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RaiseGrassBattlersDef1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapAtkSpAtkStages",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if ai.trainer.medium_skill?
|
||||
@@ -1578,6 +1887,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapAtkSpAtkStages",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapDefSpDefStages",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if ai.trainer.medium_skill?
|
||||
@@ -1598,6 +1910,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapDefSpDefStages",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapStatStages",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if ai.trainer.medium_skill?
|
||||
@@ -1615,6 +1930,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapStatStages",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UserCopyTargetStatStages",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if ai.trainer.medium_skill?
|
||||
@@ -1632,7 +1950,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserCopyTargetStatStages",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
# TODO: Account for stat theft before damage calculation.
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UserStealTargetPositiveStatStages",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
numStages = 0
|
||||
@@ -1644,6 +1964,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserStealTargetPositiveStatStages",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("InvertTargetStatStages",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !target.battler.hasAlteredStatStages?
|
||||
@@ -1662,6 +1985,9 @@ Battle::AI::Handlers::MoveEffectScore.add("InvertTargetStatStages",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("ResetTargetStatStages",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next 0 if target.effects[PBEffects::Substitute] > 0
|
||||
@@ -1677,6 +2003,9 @@ Battle::AI::Handlers::MoveEffectScore.add("ResetTargetStatStages",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("ResetAllBattlersStatStages",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.pbOwnSide.effects[PBEffects::Mist] > 0
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UserSwapBaseAtkDef",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if ai.trainer.medium_skill?
|
||||
@@ -1726,6 +2061,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserSwapBaseAtkDef",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapBaseSpeed",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if ai.trainer.medium_skill?
|
||||
@@ -1739,6 +2077,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapBaseSpeed",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageBaseAtkSpAtk",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if ai.trainer.medium_skill?
|
||||
@@ -1760,6 +2101,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageBaseAtkSpAtk",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageBaseDefSpDef",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if ai.trainer.medium_skill?
|
||||
@@ -1781,6 +2125,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageBaseDefSpDef",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageHP",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if target.effects[PBEffects::Substitute] > 0
|
||||
@@ -1794,10 +2141,16 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetAverageHP",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartUserSideDoubleSpeed",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.pbOwnSide.effects[PBEffects::Tailwind] > 0
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# StartSwapAllBattlersBaseDefensiveStats
|
||||
|
||||
@@ -23,6 +23,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SleepTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SleepTargetIfUserDarkrai",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
"SleepTargetIfUserDarkrai")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("SleepTarget",
|
||||
"SleepTargetChangeUserMeloettaForm")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SleepTargetNextTurn",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if target.effects[PBEffects::Yawn] > 0
|
||||
@@ -55,6 +64,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SleepTargetNextTurn",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("PoisonTarget",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
"BadPoisonTarget")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("BadPoisonTarget",
|
||||
@@ -129,6 +147,9 @@ Battle::AI::Handlers::MoveEffectScore.add("BadPoisonTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("ParalyzeTarget",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
"ParalyzeTargetIfNotTypeImmune")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("ParalyzeTarget",
|
||||
"ParalyzeTargetAlwaysHitsInRainHitsTargetInSky",
|
||||
"ParalyzeFlinchTarget")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("BurnTarget",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
"BurnTargetIfTargetStatsRaisedThisTurn",
|
||||
"BurnFlinchTarget")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("FreezeTarget",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if target.battler.pbCanFreeze?(user.battler, false)
|
||||
@@ -205,6 +249,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FreezeTargetSuperEffectiveAgainstWate
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("FreezeTargetAlwaysHitsInHail",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if target.battler.pbCanFreeze?(user.battler, false)
|
||||
@@ -217,15 +264,24 @@ Battle::AI::Handlers::MoveEffectScore.add("FreezeTargetAlwaysHitsInHail",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("FreezeTargetAlwaysHitsInHail",
|
||||
"FreezeFlinchTarget")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("ParalyzeBurnOrFreezeTarget",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score + 30 if target.status == :NONE
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("GiveUserStatusToTarget",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.status == :NONE
|
||||
@@ -238,6 +294,9 @@ Battle::AI::Handlers::MoveEffectScore.add("GiveUserStatusToTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("CureUserBurnPoisonParalysis",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if target.opposes?(user)
|
||||
@@ -294,6 +359,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CureTargetBurn",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartUserSideImmunityToInflictedStatus",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !user.asleep?
|
||||
@@ -331,6 +405,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FlinchTargetFailsIfUserNotAsleep",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("FlinchTargetFailsIfNotUserFirstTurn",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.turnCount > 0
|
||||
@@ -343,6 +420,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FlinchTargetFailsIfNotUserFirstTurn",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("FlinchTargetDoublePowerIfTargetInSky",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbBaseDamage(power, user.battler, target.battler)
|
||||
@@ -356,6 +436,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FlinchTargetDoublePowerIfTargetInSky"
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("ConfuseTarget",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
"ConfuseTargetAlwaysHitsInRainHitsTargetInSky")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("AttractTarget",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !user.battler.canChangeType?
|
||||
@@ -430,6 +522,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesBasedOnEnvironment",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToResistLastAttack",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !user.battler.canChangeType?
|
||||
@@ -446,6 +541,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToResistLastAttack",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToTargetTypes",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !user.battler.canChangeType?
|
||||
@@ -455,6 +553,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToTargetTypes",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToUserMoveType",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !user.battler.canChangeType?
|
||||
@@ -470,6 +571,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetUserTypesToUserMoveType",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SetTargetTypesToPsychic",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !target.battler.canChangeType?
|
||||
@@ -478,6 +582,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetTargetTypesToPsychic",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SetTargetTypesToWater",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !target.battler.canChangeType?
|
||||
@@ -485,6 +592,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetTargetTypesToWater",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("AddGhostTypeToTarget",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !target.battler.canChangeType?
|
||||
@@ -492,6 +602,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("AddGhostTypeToTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("AddGrassTypeToTarget",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !target.battler.canChangeType?
|
||||
@@ -499,12 +612,18 @@ Battle::AI::Handlers::MoveFailureCheck.add("AddGrassTypeToTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("UserLosesFireType",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !user.has_type?(:FIRE)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SetTargetAbilityToSimple",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !GameData::Ability.exists?(:SIMPLE)
|
||||
@@ -513,6 +632,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetTargetAbilityToSimple",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SetTargetAbilityToInsomnia",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !GameData::Ability.exists?(:INSOMNIA)
|
||||
@@ -521,6 +643,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("SetTargetAbilityToInsomnia",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SetUserAbilityToTargetAbility",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.battle.unstoppableAbility?
|
||||
@@ -539,6 +664,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SetUserAbilityToTargetAbility",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SetTargetAbilityToUserAbility",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !user.ability || !target.ability
|
||||
@@ -577,6 +708,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapAbilities",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("NegateTargetAbility",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if target.unstoppableAbility? ||
|
||||
@@ -584,6 +718,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("NegateTargetAbility",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("NegateTargetAbilityIfTargetActed",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if ai.trainer.medium_skill?
|
||||
@@ -595,8 +732,14 @@ Battle::AI::Handlers::MoveEffectScore.add("NegateTargetAbilityIfTargetActed",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# IgnoreTargetAbility
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartUserAirborne",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.effects[PBEffects::Ingrain] ||
|
||||
@@ -605,6 +748,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("StartUserAirborne",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartTargetAirborneAndAlwaysHitByMoves",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if target.effects[PBEffects::Ingrain] ||
|
||||
@@ -618,8 +764,14 @@ Battle::AI::Handlers::MoveFailureCheck.add("StartTargetAirborneAndAlwaysHitByMov
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# HitsTargetInSky
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("HitsTargetInSkyGroundsTarget",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if ai.trainer.medium_skill?
|
||||
@@ -635,6 +787,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HitsTargetInSkyGroundsTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartGravity",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.effects[PBEffects::Transform]
|
||||
|
||||
@@ -17,6 +17,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FixedDamage20",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("FixedDamage40",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbFixedDamage(user.battler, target.battler)
|
||||
@@ -28,6 +31,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FixedDamage40",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("FixedDamageHalfTargetHP",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbFixedDamage(user.battler, target.battler)
|
||||
@@ -40,6 +46,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FixedDamageHalfTargetHP",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("FixedDamageUserLevel",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbFixedDamage(user.battler, target.battler)
|
||||
@@ -51,6 +60,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FixedDamageUserLevel",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("FixedDamageUserLevelRandom",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next user.level # Average power
|
||||
@@ -62,6 +74,9 @@ Battle::AI::Handlers::MoveEffectScore.add("FixedDamageUserLevelRandom",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetHPToUserHP",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.hp >= target.hp
|
||||
@@ -74,15 +89,13 @@ Battle::AI::Handlers::MoveBasePower.add("LowerTargetHPToUserHP",
|
||||
)
|
||||
Battle::AI::Handlers::MoveEffectScore.add("LowerTargetHPToUserHP",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if user.hp >= target.hp
|
||||
score -= 90
|
||||
elsif user.hp < target.hp / 2
|
||||
score += 50
|
||||
end
|
||||
next score
|
||||
next score + 50 if user.hp < target.hp / 2
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("OHKO",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if target.level > user.level
|
||||
@@ -95,6 +108,9 @@ Battle::AI::Handlers::MoveBasePower.add("OHKO",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("OHKOIce",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if target.level > user.level
|
||||
@@ -107,11 +123,17 @@ Battle::AI::Handlers::MoveBasePower.copy("OHKO",
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("OHKO",
|
||||
"OHKOIce")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.copy("OHKO",
|
||||
"OHKOHitsUndergroundTarget")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("OHKO",
|
||||
"OHKOHitsUndergroundTarget")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("DamageTargetAlly",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
target.battler.allAllies.each do |b|
|
||||
@@ -122,22 +144,66 @@ Battle::AI::Handlers::MoveEffectScore.add("DamageTargetAlly",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithUserHP",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
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",
|
||||
"PowerLowerWithUserHP",
|
||||
"PowerHigherWithTargetHP",
|
||||
"PowerHigherWithUserHappiness",
|
||||
"PowerLowerWithUserHappiness",
|
||||
"PowerHigherWithUserPositiveStatStages",
|
||||
"PowerHigherWithTargetPositiveStatStages",
|
||||
"PowerHigherWithUserFasterThanTarget",
|
||||
"PowerHigherWithTargetFasterThanUser")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithLessPP",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbBaseDamage(power, user.battler, target.battler)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.copy("PowerHigherWithTargetWeight",
|
||||
"PowerHigherWithUserHeavierThanTarget")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithConsecutiveUse",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next power << user.effects[PBEffects::FuryCutter]
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("PowerHigherWithConsecutiveUseOnUserSide",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next power * (user.pbOwnSide.effects[PBEffects::EchoedVoiceCounter] + 1)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("RandomPowerDoublePowerIfTargetUnderground",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
power = 71 # Average damage
|
||||
@@ -175,15 +256,24 @@ Battle::AI::Handlers::MoveBasePower.add("RandomPowerDoublePowerIfTargetUndergrou
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetHPLessThanHalf",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbBaseDamage(power, user.battler, target.battler)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetHPLessThanHalf",
|
||||
"DoublePowerIfUserPoisonedBurnedParalyzed")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetHPLessThanHalf",
|
||||
"DoublePowerIfTargetAsleepCureTarget")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetAsleepCureTarget",
|
||||
@@ -193,12 +283,18 @@ Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetAsleepCureTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetPoisoned",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbBaseDamage(power, user.battler, target.battler)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetPoisoned",
|
||||
"DoublePowerIfTargetParalyzedCureTarget")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetParalyzedCureTarget",
|
||||
@@ -207,62 +303,111 @@ Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetParalyzedCureTarge
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetStatusProblem",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbBaseDamage(power, user.battler, target.battler)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfUserHasNoItem",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next power * 2 if !user.item || user.has_active_item?(:FLYINGGEM)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetUnderwater",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbModifyDamage(power, user.battler, target.battler)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.copy("DoublePowerIfTargetUnderwater",
|
||||
"DoublePowerIfTargetUnderground")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("DoublePowerIfTargetInSky",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
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",
|
||||
"DoublePowerInElectricTerrain",
|
||||
"DoublePowerIfUserLastMoveFailed",
|
||||
"DoublePowerIfAllyFaintedLastTurn")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfUserLostHPThisTurn",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score + 30 if target.faster_than?(user)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetLostHPThisTurn",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score + 20 if battle.pbOpposingBattlerCount(user.battler) > 1
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# DoublePowerIfUserStatsLoweredThisTurn
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("DoublePowerIfTargetActed",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score + 30 if target.faster_than?(user)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# DoublePowerIfTargetNotActed
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# AlwaysCriticalHit
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("EnsureNextCriticalHit",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if user.effects[PBEffects::LaserFocus] > 0
|
||||
@@ -274,18 +419,27 @@ Battle::AI::Handlers::MoveEffectScore.add("EnsureNextCriticalHit",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("EnsureNextCriticalHit",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next 0 if user.pbOwnSide.effects[PBEffects::LuckyChant] > 0
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartPreventCriticalHitsAgainstUserSide",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.pbOwnSide.effects[PBEffects::LuckyChant] > 0
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("CannotMakeTargetFaint",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if target.hp == 1
|
||||
@@ -303,6 +457,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CannotMakeTargetFaint",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UserEnduresFaintingThisTurn",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
score -= 25 if user.hp > user.totalhp / 2
|
||||
@@ -316,6 +473,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserEnduresFaintingThisTurn",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenElectricMoves",
|
||||
proc { |move, user, target, ai, battle|
|
||||
if Settings::MECHANICS_GENERATION >= 6
|
||||
@@ -331,6 +491,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartWeakenElectricMoves",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenFireMoves",
|
||||
proc { |move, user, target, ai, battle|
|
||||
if Settings::MECHANICS_GENERATION >= 6
|
||||
@@ -346,18 +509,27 @@ Battle::AI::Handlers::MoveEffectScore.add("StartWeakenFireMoves",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenPhysicalDamageAgainstUserSide",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.pbOwnSide.effects[PBEffects::Reflect] > 0
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenSpecialDamageAgainstUserSide",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.pbOwnSide.effects[PBEffects::LightScreen] > 0
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartWeakenDamageAgainstUserSideIfHail",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if user.effects[PBEffects::ProtectRate] > 1 ||
|
||||
@@ -395,6 +573,9 @@ Battle::AI::Handlers::MoveEffectScore.add("ProtectUser",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("ProtectUserBanefulBunker",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if user.effects[PBEffects::ProtectRate] > 1 ||
|
||||
@@ -412,6 +593,9 @@ Battle::AI::Handlers::MoveEffectScore.add("ProtectUserBanefulBunker",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromDamagingMovesKingsShield",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if user.effects[PBEffects::ProtectRate] > 1 ||
|
||||
@@ -428,6 +612,9 @@ Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromDamagingMovesKingsShie
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromDamagingMovesObstruct",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if user.effects[PBEffects::ProtectRate] > 1 ||
|
||||
@@ -444,6 +631,9 @@ Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromDamagingMovesObstruct"
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromTargetingMovesSpikyShield",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if user.effects[PBEffects::ProtectRate] > 1 ||
|
||||
@@ -460,6 +650,9 @@ Battle::AI::Handlers::MoveEffectScore.add("ProtectUserFromTargetingMovesSpikyShi
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("ProtectUserSideFromDamagingMovesIfUserFirstTurn",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.turnCount > 0
|
||||
@@ -471,20 +664,38 @@ Battle::AI::Handlers::MoveEffectScore.add("ProtectUserSideFromDamagingMovesIfUse
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("ProtectUserSideFromStatusMoves",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.pbOwnSide.effects[PBEffects::CraftyShield]
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# ProtectUserSideFromPriorityMoves
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# ProtectUserSideFromMultiTargetDamagingMoves
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# RemoveProtections
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# RemoveProtectionsBypassSubstitute
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("HoopaRemoveProtectionsBypassSubstituteLowerUserDef1",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score - 25
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RecoilThirdOfDamageDealtParalyzeTarget",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
score -= 30
|
||||
@@ -522,6 +739,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RecoilThirdOfDamageDealtParalyzeTarge
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RecoilThirdOfDamageDealtBurnTarget",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
score -= 30
|
||||
@@ -533,12 +753,18 @@ Battle::AI::Handlers::MoveEffectScore.add("RecoilThirdOfDamageDealtBurnTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RecoilHalfOfDamageDealt",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score - 40
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("EffectivenessIncludesFlyingType",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
if GameData::Type.exists?(:FLYING)
|
||||
@@ -557,26 +783,47 @@ Battle::AI::Handlers::MoveBasePower.add("EffectivenessIncludesFlyingType",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("CategoryDependsOnHigherDamagePoisonTarget",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score + 5 if target.battler.pbCanPoison?(user.battler, false)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# CategoryDependsOnHigherDamageIgnoreTargetAbility
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# UseUserBaseDefenseInsteadOfUserBaseAttack
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# UseTargetAttackInsteadOfUserAttack
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# UseTargetDefenseInsteadOfTargetSpDef
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("EnsureNextMoveAlwaysHits",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score - 50 if user.effects[PBEffects::LockOn] > 0
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("StartNegateTargetEvasionStatStageAndGhostImmunity",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if target.effects[PBEffects::Foresight]
|
||||
@@ -590,6 +837,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartNegateTargetEvasionStatStageAndG
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("StartNegateTargetEvasionStatStageAndDarkImmunity",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if target.effects[PBEffects::MiracleEye]
|
||||
@@ -603,16 +853,28 @@ Battle::AI::Handlers::MoveEffectScore.add("StartNegateTargetEvasionStatStageAndD
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# IgnoreTargetDefSpDefEvaStatStages
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# TypeIsUserFirstType
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("TypeDependsOnUserIVs",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbBaseDamage(power, user.battler, target.battler)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("TypeAndPowerDependOnUserBerry",
|
||||
proc { |move, user, target, ai, battle|
|
||||
item = user.item
|
||||
@@ -628,12 +890,24 @@ Battle::AI::Handlers::MoveBasePower.add("TypeAndPowerDependOnUserBerry",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# TypeDependsOnUserPlate
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# TypeDependsOnUserMemory
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# TypeDependsOnUserDrive
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("TypeDependsOnUserMorpekoFormRaiseUserSpeed1",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbBaseDamage(power, user.battler, target.battler)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.copy("TypeAndPowerDependOnWeather",
|
||||
"TypeAndPowerDependOnTerrain")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("TypeAndPowerDependOnTerrain",
|
||||
@@ -659,10 +939,16 @@ Battle::AI::Handlers::MoveEffectScore.add("TypeAndPowerDependOnTerrain",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("TargetMovesBecomeElectric",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next 0 if user.faster_than?(target)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# NormalMovesBecomeElectric
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
|
||||
Battle::AI::Handlers::MoveBasePower.add("HitTwoTimes",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next power * move.pbNumHits(user.battler, [target.battler])
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.copy("HitTwoTimes",
|
||||
"HitTwoTimesPoisonTarget")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("HitTwoTimesPoisonTarget",
|
||||
@@ -28,6 +30,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HitTwoTimesPoisonTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.copy("HitTwoTimes",
|
||||
"HitTwoTimesFlinchTarget")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("HitTwoTimesFlinchTarget",
|
||||
@@ -36,18 +41,27 @@ Battle::AI::Handlers::MoveEffectScore.add("HitTwoTimesFlinchTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("HitTwoTimesTargetThenTargetAlly",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next power * 2
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("HitThreeTimesPowersUpWithEachHit",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next power * 6 # Hits do x1, x2, x3 ret in turn, for x6 in total
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("HitThreeTimesAlwaysCriticalHit",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next power * move.pbNumHits(user.battler, [target.battler])
|
||||
@@ -62,6 +76,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HitThreeTimesAlwaysCriticalHit",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("HitTwoToFiveTimes",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
will_fail = true
|
||||
@@ -120,16 +146,28 @@ Battle::AI::Handlers::MoveBasePower.add("HitOncePerUserTeamMember",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# AttackAndSkipNextTurn
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# TwoTurnAttack
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("TwoTurnAttackOneTurnInSun",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbBaseDamageMultiplier(power, user.battler, target.battler)
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackParalyzeTarget",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if target.battler.pbCanParalyze?(user.battler, false)
|
||||
@@ -151,6 +189,9 @@ Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackParalyzeTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackBurnTarget",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
score += 20 if user.effects[PBEffects::FocusEnergy] > 0
|
||||
@@ -169,6 +213,9 @@ Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackFlinchTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("TwoTurnAttackRaiseUserSpAtkSpDefSpd2",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if move.statusMove?
|
||||
@@ -224,6 +274,9 @@ Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackChargeRaiseUserDefense1"
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackChargeRaiseUserSpAtk1",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
aspeed = user.rough_stat(:SPEED)
|
||||
@@ -238,14 +291,29 @@ Battle::AI::Handlers::MoveEffectScore.add("TwoTurnAttackChargeRaiseUserSpAtk1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# TwoTurnAttackInvulnerableUnderground
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# TwoTurnAttackInvulnerableUnderwater
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# TwoTurnAttackInvulnerableInSky
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# TwoTurnAttackInvulnerableInSkyParalyzeTarget
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("TwoTurnAttackInvulnerableInSkyTargetCannotAct",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !target.opposes?(user)
|
||||
@@ -255,18 +323,33 @@ Battle::AI::Handlers::MoveFailureCheck.add("TwoTurnAttackInvulnerableInSkyTarget
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# TwoTurnAttackInvulnerableRemoveProtections
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# MultiTurnAttackPreventSleeping
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# MultiTurnAttackConfuseUserAtEnd
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("MultiTurnAttackPowersUpEachTurn",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next power * 2 if user.effects[PBEffects::DefenseCurl]
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("MultiTurnAttackBideThenReturnDoubleDamage",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next 40 # Representative value
|
||||
|
||||
@@ -17,6 +17,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserFullyAndFallAsleep",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("HealUserHalfOfTotalHP",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !user.battler.canHeal?
|
||||
@@ -30,6 +33,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserHalfOfTotalHP",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("HealUserHalfOfTotalHP",
|
||||
"HealUserDependingOnWeather")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("HealUserDependingOnWeather",
|
||||
@@ -47,6 +53,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserDependingOnWeather",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("HealUserHalfOfTotalHP",
|
||||
"HealUserDependingOnSandstorm")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("HealUserDependingOnSandstorm",
|
||||
@@ -58,6 +67,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserDependingOnSandstorm",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("HealUserHalfOfTotalHP",
|
||||
"HealUserHalfOfTotalHPLoseFlyingTypeThisTurn")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("HealUserHalfOfTotalHPLoseFlyingTypeThisTurn",
|
||||
@@ -68,6 +80,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserHalfOfTotalHPLoseFlyingTypeTh
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("CureTargetStatusHealUserHalfOfTotalHP",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !user.battler.canHeal?
|
||||
@@ -82,6 +97,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CureTargetStatusHealUserHalfOfTotalHP
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("HealUserByTargetAttackLowerTargetAttack1",
|
||||
proc { |move, user, target, ai, battle|
|
||||
if target.has_active_ability?(:CONTRARY)
|
||||
@@ -114,6 +132,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserByTargetAttackLowerTargetAtta
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("HealUserByHalfOfDamageDone",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if target.has_active_ability?(:LIQUIDOOZE)
|
||||
@@ -125,6 +146,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserByHalfOfDamageDone",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("HealUserByHalfOfDamageDoneIfTargetAsleep",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !target.battler.asleep?
|
||||
@@ -141,6 +165,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserByHalfOfDamageDoneIfTargetAsl
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("HealUserByThreeQuartersOfDamageDone",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if target.has_active_ability?(:LIQUIDOOZE)
|
||||
@@ -152,6 +179,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserByThreeQuartersOfDamageDone",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("HealUserAndAlliesQuarterOfTotalHP",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !target.battler.canHeal?
|
||||
@@ -206,6 +242,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HealTargetHalfOfTotalHP",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("HealTargetHalfOfTotalHP",
|
||||
"HealTargetDependingOnGrassyTerrain")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("HealTargetDependingOnGrassyTerrain",
|
||||
@@ -221,24 +260,36 @@ Battle::AI::Handlers::MoveEffectScore.add("HealTargetDependingOnGrassyTerrain",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("HealUserPositionNextTurn",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if battle.positions[user.index].effects[PBEffects::Wish] > 0
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartHealUserEachTurn",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.effects[PBEffects::AquaRing]
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartHealUserEachTurnTrapUserInBattle",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.effects[PBEffects::Ingrain]
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartDamageTargetEachTurnIfTargetAsleep",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if target.effects[PBEffects::LeechSeed] >= 0
|
||||
@@ -275,12 +329,18 @@ Battle::AI::Handlers::MoveEffectScore.add("StartLeechSeedTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UserLosesHalfOfTotalHP",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next 0 if user.hp <= user.totalhp / 2
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("UserLosesHalfOfTotalHPExplosive",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if battle.pbCheckGlobalAbility(:DAMP)
|
||||
@@ -301,6 +361,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserLosesHalfOfTotalHPExplosive",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("UserLosesHalfOfTotalHPExplosive",
|
||||
"UserFaintsExplosive")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UserFaintsExplosive",
|
||||
@@ -318,6 +381,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserFaintsExplosive",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("UserLosesHalfOfTotalHPExplosive",
|
||||
"UserFaintsPowersUpInMistyTerrainExplosive")
|
||||
Battle::AI::Handlers::MoveBasePower.add("UserFaintsPowersUpInMistyTerrainExplosive",
|
||||
@@ -340,12 +406,18 @@ Battle::AI::Handlers::MoveEffectScore.add("UserFaintsPowersUpInMistyTerrainExplo
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("UserFaintsFixedDamageUserHP",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next user.hp
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UserFaintsLowerTargetAtkSpAtk2",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if !target.battler.pbCanLowerStatStage?(:ATTACK, user.battler) &&
|
||||
@@ -362,6 +434,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserFaintsLowerTargetAtkSpAtk2",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("UserFaintsHealAndCureReplacement",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !battle.pbCanChooseNonActive?(user.index)
|
||||
@@ -373,11 +448,17 @@ Battle::AI::Handlers::MoveEffectScore.add("UserFaintsHealAndCureReplacement",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("UserFaintsHealAndCureReplacement",
|
||||
"UserFaintsHealAndCureReplacementRestorePP")
|
||||
Battle::AI::Handlers::MoveEffectScore.copy("UserFaintsHealAndCureReplacement",
|
||||
"UserFaintsHealAndCureReplacementRestorePP")
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartPerishCountsForAllBattlers",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next target.effects[PBEffects::PerishSong] > 0
|
||||
@@ -392,6 +473,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartPerishCountsForAllBattlers",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("AttackerFaintsIfUserFaints",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
score += 50
|
||||
|
||||
@@ -16,6 +16,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTakesTargetItem",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("TargetTakesUserItem",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.wild?
|
||||
@@ -56,6 +62,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserTargetSwapItems",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("RestoreUserConsumedItem",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !user.battler.recycleItem || user.item
|
||||
@@ -68,6 +77,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RestoreUserConsumedItem",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("RemoveTargetItem",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbBaseDamage(power, user.battler, target.battler)
|
||||
@@ -82,6 +94,9 @@ Battle::AI::Handlers::MoveEffectScore.add("RemoveTargetItem",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("DestroyTargetBerryOrGem",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if target.effects[PBEffects::Substitute] == 0
|
||||
@@ -112,6 +127,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CorrodeTargetItem",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("StartTargetCannotUseItem",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if target.effects[PBEffects::Embargo] > 0
|
||||
@@ -123,6 +141,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartTargetCannotUseItem",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("StartNegateHeldItems",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
item = user.item
|
||||
@@ -160,6 +184,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserConsumeBerryRaiseDefense2",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("AllBattlersConsumeBerry",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if target.effects[PBEffects::Substitute] == 0
|
||||
@@ -212,6 +242,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserConsumeTargetBerry",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("ThrowUserItemAtTarget",
|
||||
proc { |move, user, target, ai, battle|
|
||||
item = user.item
|
||||
|
||||
@@ -7,12 +7,18 @@ Battle::AI::Handlers::MoveEffectScore.add("RedirectAllMovesToUser",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("RedirectAllMovesToTarget",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next 0 if user.battler.allAllies.length == 0
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("CannotBeRedirected",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
redirection = false
|
||||
@@ -32,12 +38,18 @@ Battle::AI::Handlers::MoveEffectScore.add("CannotBeRedirected",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("RandomlyDamageOrHealTarget",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next 50 # Average power, ish
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("HealAllyOrDamageFoe",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
if user.has_type?(:GHOST)
|
||||
@@ -85,8 +100,14 @@ Battle::AI::Handlers::MoveEffectScore.add("CurseTargetOrLowerUserSpd1RaiseUserAt
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# EffectDependsOnEnvironment
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("HitsAllFoesAndPowersUpInPsychicTerrain",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbBaseDamage(power, user.battler, target.battler)
|
||||
@@ -98,6 +119,9 @@ Battle::AI::Handlers::MoveEffectScore.add("HitsAllFoesAndPowersUpInPsychicTerrai
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("TargetNextFireMoveDamagesTarget",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if target.effects[PBEffects::Powder]
|
||||
@@ -116,10 +140,19 @@ Battle::AI::Handlers::MoveEffectScore.add("TargetNextFireMoveDamagesTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# DoublePowerAfterFusionFlare
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# DoublePowerAfterFusionBolt
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("PowerUpAllyMove",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next 60 # Representative value
|
||||
@@ -155,6 +191,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CounterPhysicalDamage",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("CounterSpecialDamage",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next 60 # Representative value
|
||||
@@ -178,6 +217,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CounterSpecialDamage",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("CounterDamagePlusHalf",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next 60 # Representative value
|
||||
@@ -189,6 +231,9 @@ Battle::AI::Handlers::MoveEffectScore.add("CounterDamagePlusHalf",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("UserAddStockpileRaiseDefSpDef1",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.effects[PBEffects::Stockpile] >= 3
|
||||
@@ -208,6 +253,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserAddStockpileRaiseDefSpDef1",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("PowerDependsOnUserStockpile",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.effects[PBEffects::Stockpile] == 0
|
||||
@@ -219,6 +267,9 @@ Battle::AI::Handlers::MoveBasePower.add("PowerDependsOnUserStockpile",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("HealUserDependingOnUserStockpile",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.effects[PBEffects::Stockpile] == 0
|
||||
@@ -236,12 +287,24 @@ Battle::AI::Handlers::MoveEffectScore.add("HealUserDependingOnUserStockpile",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# GrassPledge
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# FirePledge
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# WaterPledge
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("UseLastMoveUsed",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !battle.lastMoveUsed
|
||||
@@ -249,6 +312,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("UseLastMoveUsed",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("UseLastMoveUsedByTarget",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !target.battle.lastRegularMoveUsed
|
||||
@@ -261,12 +327,24 @@ Battle::AI::Handlers::MoveEffectScore.add("UseLastMoveUsedByTarget",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# UseMoveTargetIsAboutToUse
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# UseMoveDependingOnEnvironment
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# UseRandomMove
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("UseRandomMoveFromUserParty",
|
||||
proc { |move, user, target, ai, battle|
|
||||
will_fail = true
|
||||
@@ -285,6 +363,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("UseRandomMoveFromUserParty",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("UseRandomUserMoveIfAsleep",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !user.battler.asleep?
|
||||
@@ -304,10 +385,19 @@ Battle::AI::Handlers::MoveEffectScore.add("UseRandomUserMoveIfAsleep",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# BounceBackProblemCausingStatusMoves
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# StealAndUseBeneficialStatusMove
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("ReplaceMoveThisBattleWithTargetLastMoveUsed",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.effects[PBEffects::Transform] || !user.battler.pbHasMove?(move.id)
|
||||
|
||||
@@ -7,6 +7,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("FleeFromBattle",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SwitchOutUserStatusMove",
|
||||
proc { |move, user, target, ai, battle|
|
||||
if user.wild?
|
||||
@@ -42,6 +45,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SwitchOutUserStatusMove",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("SwitchOutUserDamagingMove",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next 0 if !battle.pbCanChooseNonActive?(user.index) ||
|
||||
@@ -49,6 +55,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SwitchOutUserDamagingMove",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("LowerTargetAtkSpAtk1SwitchOutUser",
|
||||
proc { |move, user, target, ai, battle|
|
||||
will_fail = true
|
||||
@@ -69,6 +78,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerTargetAtkSpAtk1SwitchOutUser",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SwitchOutUserPassOnEffects",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !battle.pbCanChooseNonActive?(user.index)
|
||||
@@ -100,6 +112,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SwitchOutUserPassOnEffects",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("SwitchOutTargetStatusMove",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if target.has_active_ability?(:SUCTIONCUPS) ||
|
||||
@@ -126,6 +141,9 @@ Battle::AI::Handlers::MoveEffectScore.add("SwitchOutTargetStatusMove",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("SwitchOutTargetDamagingMove",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if !target.effects[PBEffects::Ingrain] &&
|
||||
@@ -138,12 +156,18 @@ Battle::AI::Handlers::MoveEffectScore.add("SwitchOutTargetDamagingMove",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("BindTarget",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
next score + 40 if target.effects[PBEffects::Trapping] == 0
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveBasePower.add("BindTargetDoublePowerIfTargetUnderwater",
|
||||
proc { |power, move, user, target, ai, battle|
|
||||
next move.pbModifyDamage(power, user.battler, target.battler)
|
||||
@@ -155,6 +179,9 @@ Battle::AI::Handlers::MoveEffectScore.add("BindTargetDoublePowerIfTargetUnderwat
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("TrapTargetInBattle",
|
||||
proc { |move, user, target, ai, battle|
|
||||
if move.statusMove?
|
||||
@@ -164,6 +191,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("TrapTargetInBattle",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("TrapTargetInBattle",
|
||||
proc { |move, user, target, ai, battle|
|
||||
if move.statusMove?
|
||||
@@ -181,6 +211,9 @@ Battle::AI::Handlers::MoveEffectScore.add("TrapTargetInBattleLowerTargetDefSpDef
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("TrapUserAndTargetInBattle",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if target.effects[PBEffects::JawLock] < 0
|
||||
@@ -190,14 +223,23 @@ Battle::AI::Handlers::MoveEffectScore.add("TrapUserAndTargetInBattle",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("TrapAllBattlersInBattleForOneTurn",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if battle.field.effects[PBEffects::FairyLock] > 0
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# PursueSwitchingFoe
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UsedAfterUserTakesPhysicalDamage",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if ai.trainer.medium_skill?
|
||||
@@ -213,6 +255,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UsedAfterUserTakesPhysicalDamage",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("UsedAfterAllyRoundWithDoublePower",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
if ai.trainer.medium_skill?
|
||||
@@ -225,10 +270,19 @@ Battle::AI::Handlers::MoveEffectScore.add("UsedAfterAllyRoundWithDoublePower",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# TargetActsNext
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# TargetActsLast
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("TargetUsesItsLastUsedMoveAgain",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if !target.battler.lastRegularMoveUsed ||
|
||||
@@ -250,8 +304,14 @@ Battle::AI::Handlers::MoveEffectScore.add("TargetUsesItsLastUsedMoveAgain",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
# StartSlowerBattlersActFirst
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("HigherPriorityInGrassyTerrain",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
last_move = target.battler.pbGetMoveWithID(target.battler.lastRegularMoveUsed)
|
||||
@@ -271,6 +334,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerPPOfTargetLastMoveBy3",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("LowerPPOfTargetLastMoveBy4",
|
||||
proc { |move, user, target, ai, battle|
|
||||
last_move = target.battler.pbGetMoveWithID(target.battler.lastRegularMoveUsed)
|
||||
@@ -283,6 +349,9 @@ Battle::AI::Handlers::MoveEffectScore.add("LowerPPOfTargetLastMoveBy4",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetLastMoveUsed",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if target.effects[PBEffects::Torment]
|
||||
@@ -310,6 +382,9 @@ Battle::AI::Handlers::MoveEffectScore.add("DisableTargetUsingSameMoveConsecutive
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetUsingDifferentMove",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if target.effects[PBEffects::Encore] > 0
|
||||
@@ -344,6 +419,9 @@ Battle::AI::Handlers::MoveEffectScore.add("DisableTargetUsingDifferentMove",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetStatusMoves",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if target.effects[PBEffects::Taunt] > 0
|
||||
@@ -352,6 +430,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetStatusMoves",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetHealingMoves",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if target.effects[PBEffects::HealBlock] > 0
|
||||
@@ -359,6 +440,9 @@ Battle::AI::Handlers::MoveFailureCheck.add("DisableTargetHealingMoves",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveEffectScore.add("DisableTargetSoundMoves",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |move, user, target, ai, battle|
|
||||
next true if user.effects[PBEffects::Imprison]
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("AllBattlersLoseHalfHPUserSkipsNextTurn",
|
||||
proc { |move, user, target, ai, battle|
|
||||
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",
|
||||
proc { |score, move, user, target, ai, battle|
|
||||
score += 20 # Shadow moves are more preferable
|
||||
@@ -402,6 +495,9 @@ Battle::AI::Handlers::MoveEffectScore.add("UserLosesHalfHP",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.copy("StartSunWeather",
|
||||
"StartShadowSkyWeather")
|
||||
Battle::AI::Handlers::MoveEffectScore.add("StartShadowSkyWeather",
|
||||
@@ -415,6 +511,9 @@ Battle::AI::Handlers::MoveEffectScore.add("StartShadowSkyWeather",
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
Battle::AI::Handlers::MoveFailureCheck.add("RemoveAllScreens",
|
||||
proc { |move, user, target, ai, battle|
|
||||
will_fail = true
|
||||
|
||||
Reference in New Issue
Block a user