Merge branch 'dev' into ai

This commit is contained in:
Maruno17
2023-02-10 21:20:28 +00:00
33 changed files with 341 additions and 1055 deletions

View File

@@ -461,9 +461,9 @@ class Battle::Battler
return if move_type != gem_type
@effects[PBEffects::GemConsumed] = @item_id
if Settings::MECHANICS_GENERATION >= 6
mults[:base_damage_multiplier] *= 1.3
mults[:power_multiplier] *= 1.3
else
mults[:base_damage_multiplier] *= 1.5
mults[:power_multiplier] *= 1.5
end
end
end

View File

@@ -4,7 +4,7 @@ class Battle::Move
attr_accessor :id
attr_reader :name
attr_reader :function
attr_reader :baseDamage
attr_reader :power
attr_reader :type
attr_reader :category
attr_reader :accuracy
@@ -22,6 +22,12 @@ class Battle::Move
def to_int; return @id; end
# @deprecated This method is slated to be removed in v22.
def baseDamage
Deprecation.warn_method("baseDamage", "v22", "power")
return @power
end
#=============================================================================
# Creating a move
#=============================================================================
@@ -32,7 +38,7 @@ class Battle::Move
@name = move.name # Get the move's name
# Get data on the move
@function = move.function_code
@baseDamage = move.base_damage
@power = move.power
@type = move.type
@category = move.category
@accuracy = move.accuracy
@@ -173,7 +179,7 @@ class Battle::Move
"PowerHigherWithUserHP", "PowerLowerWithUserHP",
"PowerHigherWithUserHappiness", "PowerLowerWithUserHappiness",
"PowerHigherWithUserPositiveStatStages", "PowerDependsOnUserStockpile"
return pbBaseType(@baseDamage, battler, nil)
return pbBaseType(@power, battler, nil)
end
=end
return @realMove.display_damage(battler.pokemon)

View File

@@ -248,7 +248,7 @@ class Battle::Move
# Calculate whether this hit deals critical damage
target.damageState.critical = pbIsCritical?(user, target)
# Calcuate base power of move
baseDmg = pbBaseDamage(@baseDamage, user, target)
baseDmg = pbBaseDamage(@power, user, target)
# Calculate user's attack stat
atk, atkStage = pbGetAttackStats(user, target)
if !target.hasActiveAbility?(:UNAWARE) || @battle.moldBreaker
@@ -263,14 +263,14 @@ class Battle::Move
end
# Calculate all multiplier effects
multipliers = {
:base_damage_multiplier => 1.0,
:power_multiplier => 1.0,
:attack_multiplier => 1.0,
:defense_multiplier => 1.0,
:final_damage_multiplier => 1.0
}
pbCalcDamageMultipliers(user, target, numTargets, type, baseDmg, multipliers)
# Main damage calculation
baseDmg = [(baseDmg * multipliers[:base_damage_multiplier]).round, 1].max
baseDmg = [(baseDmg * multipliers[:power_multiplier]).round, 1].max
atk = [(atk * multipliers[:attack_multiplier]).round, 1].max
defense = [(defense * multipliers[:defense_multiplier]).round, 1].max
damage = ((((2.0 * user.level / 5) + 2).floor * baseDmg * atk / defense).floor / 50).floor + 2
@@ -283,9 +283,9 @@ class Battle::Move
if (@battle.pbCheckGlobalAbility(:DARKAURA) && type == :DARK) ||
(@battle.pbCheckGlobalAbility(:FAIRYAURA) && type == :FAIRY)
if @battle.pbCheckGlobalAbility(:AURABREAK)
multipliers[:base_damage_multiplier] *= 2 / 3.0
multipliers[:power_multiplier] *= 2 / 3.0
else
multipliers[:base_damage_multiplier] *= 4 / 3.0
multipliers[:power_multiplier] *= 4 / 3.0
end
end
# Ability effects that alter damage
@@ -336,47 +336,47 @@ class Battle::Move
end
# Parental Bond's second attack
if user.effects[PBEffects::ParentalBond] == 1
multipliers[:base_damage_multiplier] /= (Settings::MECHANICS_GENERATION >= 7) ? 4 : 2
multipliers[:power_multiplier] /= (Settings::MECHANICS_GENERATION >= 7) ? 4 : 2
end
# Other
if user.effects[PBEffects::MeFirst]
multipliers[:base_damage_multiplier] *= 1.5
multipliers[:power_multiplier] *= 1.5
end
if user.effects[PBEffects::HelpingHand] && !self.is_a?(Battle::Move::Confusion)
multipliers[:base_damage_multiplier] *= 1.5
multipliers[:power_multiplier] *= 1.5
end
if user.effects[PBEffects::Charge] > 0 && type == :ELECTRIC
multipliers[:base_damage_multiplier] *= 2
multipliers[:power_multiplier] *= 2
end
# Mud Sport
if type == :ELECTRIC
if @battle.allBattlers.any? { |b| b.effects[PBEffects::MudSport] }
multipliers[:base_damage_multiplier] /= 3
multipliers[:power_multiplier] /= 3
end
if @battle.field.effects[PBEffects::MudSportField] > 0
multipliers[:base_damage_multiplier] /= 3
multipliers[:power_multiplier] /= 3
end
end
# Water Sport
if type == :FIRE
if @battle.allBattlers.any? { |b| b.effects[PBEffects::WaterSport] }
multipliers[:base_damage_multiplier] /= 3
multipliers[:power_multiplier] /= 3
end
if @battle.field.effects[PBEffects::WaterSportField] > 0
multipliers[:base_damage_multiplier] /= 3
multipliers[:power_multiplier] /= 3
end
end
# Terrain moves
terrain_multiplier = (Settings::MECHANICS_GENERATION >= 8) ? 1.3 : 1.5
case @battle.field.terrain
when :Electric
multipliers[:base_damage_multiplier] *= terrain_multiplier if type == :ELECTRIC && user.affectedByTerrain?
multipliers[:power_multiplier] *= terrain_multiplier if type == :ELECTRIC && user.affectedByTerrain?
when :Grassy
multipliers[:base_damage_multiplier] *= terrain_multiplier if type == :GRASS && user.affectedByTerrain?
multipliers[:power_multiplier] *= terrain_multiplier if type == :GRASS && user.affectedByTerrain?
when :Psychic
multipliers[:base_damage_multiplier] *= terrain_multiplier if type == :PSYCHIC && user.affectedByTerrain?
multipliers[:power_multiplier] *= terrain_multiplier if type == :PSYCHIC && user.affectedByTerrain?
when :Misty
multipliers[:base_damage_multiplier] /= 2 if type == :DRAGON && target.affectedByTerrain?
multipliers[:power_multiplier] /= 2 if type == :DRAGON && target.affectedByTerrain?
end
# Badge multipliers
if @battle.internalBattle
@@ -476,7 +476,7 @@ class Battle::Move
multipliers[:final_damage_multiplier] *= 2
end
# Move-specific base damage modifiers
multipliers[:base_damage_multiplier] = pbBaseDamageMultiplier(multipliers[:base_damage_multiplier], user, target)
multipliers[:power_multiplier] = pbBaseDamageMultiplier(multipliers[:power_multiplier], user, target)
# Move-specific final damage modifiers
multipliers[:final_damage_multiplier] = pbModifyDamage(multipliers[:final_damage_multiplier], user, target)
end

View File

@@ -27,7 +27,7 @@ class Battle::Move::Confusion < Battle::Move
@id = :CONFUSEDAMAGE
@name = ""
@function = "None"
@baseDamage = 40
@power = 40
@type = nil
@category = 0
@accuracy = 100
@@ -56,7 +56,7 @@ class Battle::Move::Struggle < Battle::Move
@id = (move) ? move.id : :STRUGGLE
@name = (move) ? move.name : _INTL("Struggle")
@function = "Struggle"
@baseDamage = 50
@power = 50
@type = nil
@category = 0
@accuracy = 0

View File

@@ -331,7 +331,7 @@ class Battle::Move::PowerHigherWithConsecutiveUse < Battle::Move
oldVal = user.effects[PBEffects::FuryCutter]
super
maxMult = 1
while (@baseDamage << (maxMult - 1)) < 160
while (@power << (maxMult - 1)) < 160
maxMult += 1 # 1-4 for base damage of 20, 1-3 for base damage of 40
end
user.effects[PBEffects::FuryCutter] = (oldVal >= maxMult) ? maxMult : oldVal + 1

View File

@@ -185,24 +185,24 @@ module Battle::AbilityEffects
#=============================================================================
def self.triggerDamageCalcFromUser(ability, user, target, move, mults, base_damage, type)
DamageCalcFromUser.trigger(ability, user, target, move, mults, base_damage, type)
def self.triggerDamageCalcFromUser(ability, user, target, move, mults, power, type)
DamageCalcFromUser.trigger(ability, user, target, move, mults, power, type)
end
def self.triggerDamageCalcFromAlly(ability, user, target, move, mults, base_damage, type)
DamageCalcFromAlly.trigger(ability, user, target, move, mults, base_damage, type)
def self.triggerDamageCalcFromAlly(ability, user, target, move, mults, power, type)
DamageCalcFromAlly.trigger(ability, user, target, move, mults, power, type)
end
def self.triggerDamageCalcFromTarget(ability, user, target, move, mults, base_damage, type)
DamageCalcFromTarget.trigger(ability, user, target, move, mults, base_damage, type)
def self.triggerDamageCalcFromTarget(ability, user, target, move, mults, power, type)
DamageCalcFromTarget.trigger(ability, user, target, move, mults, power, type)
end
def self.triggerDamageCalcFromTargetNonIgnorable(ability, user, target, move, mults, base_damage, type)
DamageCalcFromTargetNonIgnorable.trigger(ability, user, target, move, mults, base_damage, type)
def self.triggerDamageCalcFromTargetNonIgnorable(ability, user, target, move, mults, power, type)
DamageCalcFromTargetNonIgnorable.trigger(ability, user, target, move, mults, power, type)
end
def self.triggerDamageCalcFromTargetAlly(ability, user, target, move, mults, base_damage, type)
DamageCalcFromTargetAlly.trigger(ability, user, target, move, mults, base_damage, type)
def self.triggerDamageCalcFromTargetAlly(ability, user, target, move, mults, power, type)
DamageCalcFromTargetAlly.trigger(ability, user, target, move, mults, power, type)
end
def self.triggerCriticalCalcFromUser(ability, user, target, crit_stage)
@@ -1195,15 +1195,15 @@ Battle::AbilityEffects::AccuracyCalcFromTarget.add(:WONDERSKIN,
#===============================================================================
Battle::AbilityEffects::DamageCalcFromUser.add(:AERILATE,
proc { |ability, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if move.powerBoost
proc { |ability, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if move.powerBoost
}
)
Battle::AbilityEffects::DamageCalcFromUser.copy(:AERILATE, :PIXILATE, :REFRIGERATE, :GALVANIZE, :NORMALIZE)
Battle::AbilityEffects::DamageCalcFromUser.add(:ANALYTIC,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
# NOTE: In the official games, if another battler faints earlier in the
# round but it would have moved after the user, then Analytic does not
# power up the move. However, this makes the determination so much
@@ -1213,13 +1213,13 @@ Battle::AbilityEffects::DamageCalcFromUser.add(:ANALYTIC,
# "power up the move if all other battlers on the field right now have
# already moved".
if move.pbMoveFailedLastInRound?(user, false)
mults[:base_damage_multiplier] *= 1.3
mults[:power_multiplier] *= 1.3
end
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:BLAZE,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if user.hp <= user.totalhp / 3 && type == :FIRE
mults[:attack_multiplier] *= 1.5
end
@@ -1227,25 +1227,25 @@ Battle::AbilityEffects::DamageCalcFromUser.add(:BLAZE,
)
Battle::AbilityEffects::DamageCalcFromUser.add(:DEFEATIST,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:attack_multiplier] /= 2 if user.hp <= user.totalhp / 2
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:DRAGONSMAW,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:attack_multiplier] *= 1.5 if type == :DRAGON
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:FLAREBOOST,
proc { |ability, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.5 if user.burned? && move.specialMove?
proc { |ability, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.5 if user.burned? && move.specialMove?
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:FLASHFIRE,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if user.effects[PBEffects::FlashFire] && type == :FIRE
mults[:attack_multiplier] *= 1.5
end
@@ -1253,7 +1253,7 @@ Battle::AbilityEffects::DamageCalcFromUser.add(:FLASHFIRE,
)
Battle::AbilityEffects::DamageCalcFromUser.add(:FLOWERGIFT,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if move.physicalMove? && [:Sun, :HarshSun].include?(user.effectiveWeather)
mults[:attack_multiplier] *= 1.5
end
@@ -1261,13 +1261,13 @@ Battle::AbilityEffects::DamageCalcFromUser.add(:FLOWERGIFT,
)
Battle::AbilityEffects::DamageCalcFromUser.add(:GORILLATACTICS,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:attack_multiplier] *= 1.5 if move.physicalMove?
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:GUTS,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if user.pbHasAnyStatus? && move.physicalMove?
mults[:attack_multiplier] *= 1.5
end
@@ -1275,7 +1275,7 @@ Battle::AbilityEffects::DamageCalcFromUser.add(:GUTS,
)
Battle::AbilityEffects::DamageCalcFromUser.add(:HUGEPOWER,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:attack_multiplier] *= 2 if move.physicalMove?
}
)
@@ -1283,25 +1283,25 @@ Battle::AbilityEffects::DamageCalcFromUser.add(:HUGEPOWER,
Battle::AbilityEffects::DamageCalcFromUser.copy(:HUGEPOWER, :PUREPOWER)
Battle::AbilityEffects::DamageCalcFromUser.add(:HUSTLE,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:attack_multiplier] *= 1.5 if move.physicalMove?
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:IRONFIST,
proc { |ability, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if move.punchingMove?
proc { |ability, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if move.punchingMove?
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:MEGALAUNCHER,
proc { |ability, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.5 if move.pulseMove?
proc { |ability, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.5 if move.pulseMove?
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:MINUS,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
next if !move.specialMove?
if user.allAllies.any? { |b| b.hasActiveAbility?([:MINUS, :PLUS]) }
mults[:attack_multiplier] *= 1.5
@@ -1312,7 +1312,7 @@ Battle::AbilityEffects::DamageCalcFromUser.add(:MINUS,
Battle::AbilityEffects::DamageCalcFromUser.copy(:MINUS, :PLUS)
Battle::AbilityEffects::DamageCalcFromUser.add(:NEUROFORCE,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if Effectiveness.super_effective?(target.damageState.typeMod)
mults[:final_damage_multiplier] *= 1.25
end
@@ -1320,7 +1320,7 @@ Battle::AbilityEffects::DamageCalcFromUser.add(:NEUROFORCE,
)
Battle::AbilityEffects::DamageCalcFromUser.add(:OVERGROW,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if user.hp <= user.totalhp / 3 && type == :GRASS
mults[:attack_multiplier] *= 1.5
end
@@ -1328,52 +1328,52 @@ Battle::AbilityEffects::DamageCalcFromUser.add(:OVERGROW,
)
Battle::AbilityEffects::DamageCalcFromUser.add(:PUNKROCK,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:attack_multiplier] *= 1.3 if move.soundMove?
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:RECKLESS,
proc { |ability, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if move.recoilMove?
proc { |ability, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if move.recoilMove?
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:RIVALRY,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if user.gender != 2 && target.gender != 2
if user.gender == target.gender
mults[:base_damage_multiplier] *= 1.25
mults[:power_multiplier] *= 1.25
else
mults[:base_damage_multiplier] *= 0.75
mults[:power_multiplier] *= 0.75
end
end
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:SANDFORCE,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if user.effectiveWeather == :Sandstorm &&
[:ROCK, :GROUND, :STEEL].include?(type)
mults[:base_damage_multiplier] *= 1.3
mults[:power_multiplier] *= 1.3
end
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:SHEERFORCE,
proc { |ability, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.3 if move.addlEffect > 0
proc { |ability, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.3 if move.addlEffect > 0
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:SLOWSTART,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:attack_multiplier] /= 2 if user.effects[PBEffects::SlowStart] > 0 && move.physicalMove?
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:SOLARPOWER,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if move.specialMove? && [:Sun, :HarshSun].include?(user.effectiveWeather)
mults[:attack_multiplier] *= 1.5
end
@@ -1381,37 +1381,37 @@ Battle::AbilityEffects::DamageCalcFromUser.add(:SOLARPOWER,
)
Battle::AbilityEffects::DamageCalcFromUser.add(:SNIPER,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:final_damage_multiplier] *= 1.5 if target.damageState.critical
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:STAKEOUT,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:attack_multiplier] *= 2 if target.battle.choices[target.index][0] == :SwitchOut
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:STEELWORKER,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:attack_multiplier] *= 1.5 if type == :STEEL
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:STEELYSPIRIT,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:final_damage_multiplier] *= 1.5 if type == :STEEL
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:STRONGJAW,
proc { |ability, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.5 if move.bitingMove?
proc { |ability, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.5 if move.bitingMove?
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:SWARM,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if user.hp <= user.totalhp / 3 && type == :BUG
mults[:attack_multiplier] *= 1.5
end
@@ -1419,22 +1419,22 @@ Battle::AbilityEffects::DamageCalcFromUser.add(:SWARM,
)
Battle::AbilityEffects::DamageCalcFromUser.add(:TECHNICIAN,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if user.index != target.index && move && move.id != :STRUGGLE &&
baseDmg * mults[:base_damage_multiplier] <= 60
mults[:base_damage_multiplier] *= 1.5
power * mults[:power_multiplier] <= 60
mults[:power_multiplier] *= 1.5
end
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:TINTEDLENS,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:final_damage_multiplier] *= 2 if Effectiveness.resistant?(target.damageState.typeMod)
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:TORRENT,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if user.hp <= user.totalhp / 3 && type == :WATER
mults[:attack_multiplier] *= 1.5
end
@@ -1442,27 +1442,27 @@ Battle::AbilityEffects::DamageCalcFromUser.add(:TORRENT,
)
Battle::AbilityEffects::DamageCalcFromUser.add(:TOUGHCLAWS,
proc { |ability, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 4 / 3.0 if move.contactMove?
proc { |ability, user, target, move, mults, power, type|
mults[:power_multiplier] *= 4 / 3.0 if move.contactMove?
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:TOXICBOOST,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if user.poisoned? && move.physicalMove?
mults[:base_damage_multiplier] *= 1.5
mults[:power_multiplier] *= 1.5
end
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:TRANSISTOR,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:attack_multiplier] *= 1.5 if type == :ELECTRIC
}
)
Battle::AbilityEffects::DamageCalcFromUser.add(:WATERBUBBLE,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:attack_multiplier] *= 2 if type == :WATER
}
)
@@ -1472,14 +1472,14 @@ Battle::AbilityEffects::DamageCalcFromUser.add(:WATERBUBBLE,
#===============================================================================
Battle::AbilityEffects::DamageCalcFromAlly.add(:BATTERY,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
next if !move.specialMove?
mults[:final_damage_multiplier] *= 1.3
}
)
Battle::AbilityEffects::DamageCalcFromAlly.add(:FLOWERGIFT,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if move.physicalMove? && [:Sun, :HarshSun].include?(user.effectiveWeather)
mults[:attack_multiplier] *= 1.5
end
@@ -1487,13 +1487,13 @@ Battle::AbilityEffects::DamageCalcFromAlly.add(:FLOWERGIFT,
)
Battle::AbilityEffects::DamageCalcFromAlly.add(:POWERSPOT,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:final_damage_multiplier] *= 1.3
}
)
Battle::AbilityEffects::DamageCalcFromAlly.add(:STEELYSPIRIT,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:final_damage_multiplier] *= 1.5 if type == :STEEL
}
)
@@ -1503,13 +1503,13 @@ Battle::AbilityEffects::DamageCalcFromAlly.add(:STEELYSPIRIT,
#===============================================================================
Battle::AbilityEffects::DamageCalcFromTarget.add(:DRYSKIN,
proc { |ability, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.25 if type == :FIRE
proc { |ability, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.25 if type == :FIRE
}
)
Battle::AbilityEffects::DamageCalcFromTarget.add(:FILTER,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if Effectiveness.super_effective?(target.damageState.typeMod)
mults[:final_damage_multiplier] *= 0.75
end
@@ -1519,7 +1519,7 @@ Battle::AbilityEffects::DamageCalcFromTarget.add(:FILTER,
Battle::AbilityEffects::DamageCalcFromTarget.copy(:FILTER, :SOLIDROCK)
Battle::AbilityEffects::DamageCalcFromTarget.add(:FLOWERGIFT,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if move.specialMove? && [:Sun, :HarshSun].include?(target.effectiveWeather)
mults[:defense_multiplier] *= 1.5
end
@@ -1527,39 +1527,39 @@ Battle::AbilityEffects::DamageCalcFromTarget.add(:FLOWERGIFT,
)
Battle::AbilityEffects::DamageCalcFromTarget.add(:FLUFFY,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:final_damage_multiplier] *= 2 if move.calcType == :FIRE
mults[:final_damage_multiplier] /= 2 if move.pbContactMove?(user)
}
)
Battle::AbilityEffects::DamageCalcFromTarget.add(:FURCOAT,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:defense_multiplier] *= 2 if move.physicalMove? ||
move.function == "UseTargetDefenseInsteadOfTargetSpDef" # Psyshock
}
)
Battle::AbilityEffects::DamageCalcFromTarget.add(:GRASSPELT,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:defense_multiplier] *= 1.5 if user.battle.field.terrain == :Grassy
}
)
Battle::AbilityEffects::DamageCalcFromTarget.add(:HEATPROOF,
proc { |ability, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] /= 2 if type == :FIRE
proc { |ability, user, target, move, mults, power, type|
mults[:power_multiplier] /= 2 if type == :FIRE
}
)
Battle::AbilityEffects::DamageCalcFromTarget.add(:ICESCALES,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:final_damage_multiplier] /= 2 if move.specialMove?
}
)
Battle::AbilityEffects::DamageCalcFromTarget.add(:MARVELSCALE,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if target.pbHasAnyStatus? && move.physicalMove?
mults[:defense_multiplier] *= 1.5
end
@@ -1567,25 +1567,25 @@ Battle::AbilityEffects::DamageCalcFromTarget.add(:MARVELSCALE,
)
Battle::AbilityEffects::DamageCalcFromTarget.add(:MULTISCALE,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:final_damage_multiplier] /= 2 if target.hp == target.totalhp
}
)
Battle::AbilityEffects::DamageCalcFromTarget.add(:PUNKROCK,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:final_damage_multiplier] /= 2 if move.soundMove?
}
)
Battle::AbilityEffects::DamageCalcFromTarget.add(:THICKFAT,
proc { |ability, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] /= 2 if [:FIRE, :ICE].include?(type)
proc { |ability, user, target, move, mults, power, type|
mults[:power_multiplier] /= 2 if [:FIRE, :ICE].include?(type)
}
)
Battle::AbilityEffects::DamageCalcFromTarget.add(:WATERBUBBLE,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:final_damage_multiplier] /= 2 if type == :FIRE
}
)
@@ -1595,7 +1595,7 @@ Battle::AbilityEffects::DamageCalcFromTarget.add(:WATERBUBBLE,
#===============================================================================
Battle::AbilityEffects::DamageCalcFromTargetNonIgnorable.add(:PRISMARMOR,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if Effectiveness.super_effective?(target.damageState.typeMod)
mults[:final_damage_multiplier] *= 0.75
end
@@ -1603,7 +1603,7 @@ Battle::AbilityEffects::DamageCalcFromTargetNonIgnorable.add(:PRISMARMOR,
)
Battle::AbilityEffects::DamageCalcFromTargetNonIgnorable.add(:SHADOWSHIELD,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:final_damage_multiplier] /= 2 if target.hp == target.totalhp
}
)
@@ -1613,7 +1613,7 @@ Battle::AbilityEffects::DamageCalcFromTargetNonIgnorable.add(:SHADOWSHIELD,
#===============================================================================
Battle::AbilityEffects::DamageCalcFromTargetAlly.add(:FLOWERGIFT,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
if move.specialMove? && [:Sun, :HarshSun].include?(target.effectiveWeather)
mults[:defense_multiplier] *= 1.5
end
@@ -1621,7 +1621,7 @@ Battle::AbilityEffects::DamageCalcFromTargetAlly.add(:FLOWERGIFT,
)
Battle::AbilityEffects::DamageCalcFromTargetAlly.add(:FRIENDGUARD,
proc { |ability, user, target, move, mults, baseDmg, type|
proc { |ability, user, target, move, mults, power, type|
mults[:final_damage_multiplier] *= 0.75
}
)
@@ -2739,7 +2739,7 @@ Battle::AbilityEffects::OnSwitchIn.add(:FOREWARN,
forewarnMoves = []
battle.allOtherSideBattlers(battler.index).each do |b|
b.eachMove do |m|
power = m.baseDamage
power = m.power
power = 160 if ["OHKO", "OHKOIce", "OHKOHitsUndergroundTarget"].include?(m.function)
power = 150 if ["PowerHigherWithUserHP"].include?(m.function) # Eruption
# Counter, Mirror Coat, Metal Burst

View File

@@ -109,12 +109,12 @@ module Battle::ItemEffects
#=============================================================================
def self.triggerDamageCalcFromUser(item, user, target, move, mults, base_damage, type)
DamageCalcFromUser.trigger(item, user, target, move, mults, base_damage, type)
def self.triggerDamageCalcFromUser(item, user, target, move, mults, power, type)
DamageCalcFromUser.trigger(item, user, target, move, mults, power, type)
end
def self.triggerDamageCalcFromTarget(item, user, target, move, mults, base_damage, type)
DamageCalcFromTarget.trigger(item, user, target, move, mults, base_damage, type)
def self.triggerDamageCalcFromTarget(item, user, target, move, mults, power, type)
DamageCalcFromTarget.trigger(item, user, target, move, mults, power, type)
end
def self.triggerCriticalCalcFromUser(item, user, target, crit_stage)
@@ -724,63 +724,63 @@ Battle::ItemEffects::AccuracyCalcFromTarget.copy(:BRIGHTPOWDER, :LAXINCENSE)
#===============================================================================
Battle::ItemEffects::DamageCalcFromUser.add(:ADAMANTORB,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
if user.isSpecies?(:DIALGA) && [:DRAGON, :STEEL].include?(type)
mults[:base_damage_multiplier] *= 1.2
mults[:power_multiplier] *= 1.2
end
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:BLACKBELT,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :FIGHTING
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :FIGHTING
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:BLACKBELT, :FISTPLATE)
Battle::ItemEffects::DamageCalcFromUser.add(:BLACKGLASSES,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :DARK
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :DARK
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:BLACKGLASSES, :DREADPLATE)
Battle::ItemEffects::DamageCalcFromUser.add(:BUGGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:BUG, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:CHARCOAL,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :FIRE
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :FIRE
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:CHARCOAL, :FLAMEPLATE)
Battle::ItemEffects::DamageCalcFromUser.add(:CHOICEBAND,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.5 if move.physicalMove?
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.5 if move.physicalMove?
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:CHOICESPECS,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.5 if move.specialMove?
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.5 if move.specialMove?
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:DARKGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:DARK, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:DEEPSEATOOTH,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
if user.isSpecies?(:CLAMPERL) && move.specialMove?
mults[:attack_multiplier] *= 2
end
@@ -788,27 +788,27 @@ Battle::ItemEffects::DamageCalcFromUser.add(:DEEPSEATOOTH,
)
Battle::ItemEffects::DamageCalcFromUser.add(:DRAGONFANG,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :DRAGON
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :DRAGON
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:DRAGONFANG, :DRACOPLATE)
Battle::ItemEffects::DamageCalcFromUser.add(:DRAGONGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:DRAGON, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:ELECTRICGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:ELECTRIC, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:EXPERTBELT,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
if Effectiveness.super_effective?(target.damageState.typeMod)
mults[:final_damage_multiplier] *= 1.2
end
@@ -816,71 +816,71 @@ Battle::ItemEffects::DamageCalcFromUser.add(:EXPERTBELT,
)
Battle::ItemEffects::DamageCalcFromUser.add(:FAIRYGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:FAIRY, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:FIGHTINGGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:FIGHTING, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:FIREGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:FIRE, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:FLYINGGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:FLYING, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:GHOSTGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:GHOST, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:GRASSGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:GRASS, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:GRISEOUSORB,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
if user.isSpecies?(:GIRATINA) && [:DRAGON, :GHOST].include?(type)
mults[:base_damage_multiplier] *= 1.2
mults[:power_multiplier] *= 1.2
end
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:GROUNDGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:GROUND, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:HARDSTONE,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :ROCK
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :ROCK
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:HARDSTONE, :STONEPLATE, :ROCKINCENSE)
Battle::ItemEffects::DamageCalcFromUser.add(:ICEGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:ICE, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:LIFEORB,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
if !move.is_a?(Battle::Move::Confusion)
mults[:final_damage_multiplier] *= 1.3
end
@@ -888,142 +888,142 @@ Battle::ItemEffects::DamageCalcFromUser.add(:LIFEORB,
)
Battle::ItemEffects::DamageCalcFromUser.add(:LIGHTBALL,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
mults[:attack_multiplier] *= 2 if user.isSpecies?(:PIKACHU)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:LUSTROUSORB,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
if user.isSpecies?(:PALKIA) && [:DRAGON, :WATER].include?(type)
mults[:base_damage_multiplier] *= 1.2
mults[:power_multiplier] *= 1.2
end
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:MAGNET,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :ELECTRIC
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :ELECTRIC
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:MAGNET, :ZAPPLATE)
Battle::ItemEffects::DamageCalcFromUser.add(:METALCOAT,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :STEEL
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :STEEL
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:METALCOAT, :IRONPLATE)
Battle::ItemEffects::DamageCalcFromUser.add(:METRONOME,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
met = 1 + (0.2 * [user.effects[PBEffects::Metronome], 5].min)
mults[:final_damage_multiplier] *= met
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:MIRACLESEED,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :GRASS
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :GRASS
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:MIRACLESEED, :MEADOWPLATE, :ROSEINCENSE)
Battle::ItemEffects::DamageCalcFromUser.add(:MUSCLEBAND,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.1 if move.physicalMove?
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.1 if move.physicalMove?
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:MYSTICWATER,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :WATER
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :WATER
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:MYSTICWATER, :SPLASHPLATE, :SEAINCENSE, :WAVEINCENSE)
Battle::ItemEffects::DamageCalcFromUser.add(:NEVERMELTICE,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :ICE
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :ICE
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:NEVERMELTICE, :ICICLEPLATE)
Battle::ItemEffects::DamageCalcFromUser.add(:NORMALGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:NORMAL, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:PIXIEPLATE,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :FAIRY
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :FAIRY
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:POISONBARB,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :POISON
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :POISON
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:POISONBARB, :TOXICPLATE)
Battle::ItemEffects::DamageCalcFromUser.add(:POISONGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:POISON, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:PSYCHICGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:PSYCHIC, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:ROCKGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:ROCK, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:SHARPBEAK,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :FLYING
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :FLYING
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:SHARPBEAK, :SKYPLATE)
Battle::ItemEffects::DamageCalcFromUser.add(:SILKSCARF,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :NORMAL
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :NORMAL
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:SILVERPOWDER,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :BUG
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :BUG
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:SILVERPOWDER, :INSECTPLATE)
Battle::ItemEffects::DamageCalcFromUser.add(:SOFTSAND,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :GROUND
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :GROUND
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:SOFTSAND, :EARTHPLATE)
Battle::ItemEffects::DamageCalcFromUser.add(:SOULDEW,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
next if !user.isSpecies?(:LATIAS) && !user.isSpecies?(:LATIOS)
if Settings::SOUL_DEW_POWERS_UP_TYPES
mults[:final_damage_multiplier] *= 1.2 if [:DRAGON, :PSYCHIC].include?(type)
@@ -1034,21 +1034,21 @@ Battle::ItemEffects::DamageCalcFromUser.add(:SOULDEW,
)
Battle::ItemEffects::DamageCalcFromUser.add(:SPELLTAG,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :GHOST
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :GHOST
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:SPELLTAG, :SPOOKYPLATE)
Battle::ItemEffects::DamageCalcFromUser.add(:STEELGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:STEEL, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:THICKCLUB,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
if (user.isSpecies?(:CUBONE) || user.isSpecies?(:MAROWAK)) && move.physicalMove?
mults[:attack_multiplier] *= 2
end
@@ -1056,22 +1056,22 @@ Battle::ItemEffects::DamageCalcFromUser.add(:THICKCLUB,
)
Battle::ItemEffects::DamageCalcFromUser.add(:TWISTEDSPOON,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.2 if type == :PSYCHIC
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.2 if type == :PSYCHIC
}
)
Battle::ItemEffects::DamageCalcFromUser.copy(:TWISTEDSPOON, :MINDPLATE, :ODDINCENSE)
Battle::ItemEffects::DamageCalcFromUser.add(:WATERGEM,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
user.pbMoveTypePoweringUpGem(:WATER, move, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromUser.add(:WISEGLASSES,
proc { |item, user, target, move, mults, baseDmg, type|
mults[:base_damage_multiplier] *= 1.1 if move.specialMove?
proc { |item, user, target, move, mults, power, type|
mults[:power_multiplier] *= 1.1 if move.specialMove?
}
)
@@ -1083,49 +1083,49 @@ Battle::ItemEffects::DamageCalcFromUser.add(:WISEGLASSES,
#===============================================================================
Battle::ItemEffects::DamageCalcFromTarget.add(:ASSAULTVEST,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
mults[:defense_multiplier] *= 1.5 if move.specialMove?
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:BABIRIBERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:STEEL, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:CHARTIBERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:ROCK, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:CHILANBERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:NORMAL, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:CHOPLEBERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:FIGHTING, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:COBABERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:FLYING, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:COLBURBERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:DARK, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:DEEPSEASCALE,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
if target.isSpecies?(:CLAMPERL) && move.specialMove?
mults[:defense_multiplier] *= 2
end
@@ -1133,7 +1133,7 @@ Battle::ItemEffects::DamageCalcFromTarget.add(:DEEPSEASCALE,
)
Battle::ItemEffects::DamageCalcFromTarget.add(:EVIOLITE,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
# NOTE: Eviolite cares about whether the Pokémon itself can evolve, which
# means it also cares about the Pokémon's form. Some forms cannot
# evolve even if the species generally can, and such forms are not
@@ -1145,25 +1145,25 @@ Battle::ItemEffects::DamageCalcFromTarget.add(:EVIOLITE,
)
Battle::ItemEffects::DamageCalcFromTarget.add(:HABANBERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:DRAGON, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:KASIBBERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:GHOST, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:KEBIABERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:POISON, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:METALPOWDER,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
if target.isSpecies?(:DITTO) && !target.effects[PBEffects::Transform]
mults[:defense_multiplier] *= 1.5
end
@@ -1171,43 +1171,43 @@ Battle::ItemEffects::DamageCalcFromTarget.add(:METALPOWDER,
)
Battle::ItemEffects::DamageCalcFromTarget.add(:OCCABERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:FIRE, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:PASSHOBERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:WATER, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:PAYAPABERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:PSYCHIC, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:RINDOBERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:GRASS, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:ROSELIBERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:FAIRY, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:SHUCABERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:GROUND, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:SOULDEW,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
next if Settings::SOUL_DEW_POWERS_UP_TYPES
next if !target.isSpecies?(:LATIAS) && !target.isSpecies?(:LATIOS)
if move.specialMove? && !user.battle.rules["souldewclause"]
@@ -1217,19 +1217,19 @@ Battle::ItemEffects::DamageCalcFromTarget.add(:SOULDEW,
)
Battle::ItemEffects::DamageCalcFromTarget.add(:TANGABERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:BUG, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:WACANBERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:ELECTRIC, type, mults)
}
)
Battle::ItemEffects::DamageCalcFromTarget.add(:YACHEBERRY,
proc { |item, user, target, move, mults, baseDmg, type|
proc { |item, user, target, move, mults, power, type|
target.pbMoveTypeWeakeningBerry(:ICE, type, mults)
}
)