mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
Merge branch 'dev' into ai
This commit is contained in:
@@ -702,6 +702,7 @@ module MessageTypes
|
||||
STORAGE_CREATOR_NAME = 27
|
||||
ITEM_PORTION_NAMES = 28
|
||||
ITEM_PORTION_NAME_PLURALS = 29
|
||||
POKEMON_NICKNAMES = 30
|
||||
@@messages = Translation.new
|
||||
|
||||
def self.load_default_messages
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
SaveData.register(:player) do
|
||||
ensure_class :Player
|
||||
save_value { $player }
|
||||
load_value { |value| $player = $Trainer = value }
|
||||
load_value { |value| $player = value }
|
||||
new_game_value { Player.new("Unnamed", GameData::TrainerType.keys.first) }
|
||||
from_old_format { |old_format| old_format[0] }
|
||||
end
|
||||
@@ -69,7 +69,7 @@ end
|
||||
SaveData.register(:map_factory) do
|
||||
ensure_class :PokemonMapFactory
|
||||
save_value { $map_factory }
|
||||
load_value { |value| $map_factory = $MapFactory = value }
|
||||
load_value { |value| $map_factory = value }
|
||||
from_old_format { |old_format| old_format[9] }
|
||||
end
|
||||
|
||||
@@ -100,7 +100,7 @@ end
|
||||
SaveData.register(:bag) do
|
||||
ensure_class :PokemonBag
|
||||
save_value { $bag }
|
||||
load_value { |value| $bag = $PokemonBag = value }
|
||||
load_value { |value| $bag = value }
|
||||
new_game_value { PokemonBag.new }
|
||||
from_old_format { |old_format| old_format[13] }
|
||||
end
|
||||
|
||||
@@ -147,7 +147,8 @@ SaveData.register_conversion(:v20_refactor_follower_data) do
|
||||
display_title "Updating follower data format"
|
||||
to_value :global_metadata do |global|
|
||||
# NOTE: dependentEvents is still defined in class PokemonGlobalMetadata just
|
||||
# for the sake of this conversion. It will be removed in future.
|
||||
# for the sake of this conversion. It is deprecated and will be
|
||||
# removed in v22.
|
||||
if global.dependentEvents && global.dependentEvents.length > 0
|
||||
global.followers = []
|
||||
global.dependentEvents.each do |follower|
|
||||
|
||||
@@ -49,7 +49,7 @@ end
|
||||
# Permanently stores data of follower events (i.e. in save files).
|
||||
#===============================================================================
|
||||
class PokemonGlobalMetadata
|
||||
attr_accessor :dependentEvents # Deprecated
|
||||
attr_accessor :dependentEvents # Deprecated - to be removed in v22
|
||||
attr_writer :followers
|
||||
|
||||
def followers
|
||||
@@ -387,42 +387,3 @@ module Followers
|
||||
$game_temp.followers.put_followers_on_player
|
||||
end
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
# Deprecated methods
|
||||
#===============================================================================
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbAddDependency2(event_id, name, common_event_id)
|
||||
Deprecation.warn_method("pbAddDependency2", "v21", "Followers.add(event_id, name, common_event_id)")
|
||||
Followers.add(event_id, name, common_event_id)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbAddDependency(event)
|
||||
Deprecation.warn_method("pbAddDependency", "v21", "Followers.add_event(event)")
|
||||
Followers.add_event(event)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbRemoveDependency2(name)
|
||||
Deprecation.warn_method("pbRemoveDependency2", "v21", "Followers.remove(name)")
|
||||
Followers.remove(name)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbRemoveDependency(event)
|
||||
Deprecation.warn_method("pbRemoveDependency", "v21", "Followers.remove_event(event)")
|
||||
Followers.remove_event(event)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbRemoveDependencies
|
||||
Deprecation.warn_method("pbRemoveDependencies", "v21", "Followers.clear")
|
||||
Followers.clear
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbGetDependency(name)
|
||||
Deprecation.warn_method("pbGetDependency", "v21", "Followers.get(name)")
|
||||
Followers.get(name)
|
||||
end
|
||||
|
||||
@@ -256,7 +256,12 @@ module GameData
|
||||
ret = []
|
||||
self.constants.each do |c|
|
||||
next if !self.const_get(c).is_a?(Class)
|
||||
ret.push(self.const_get(c)::DATA_FILENAME) if self.const_get(c).const_defined?(:DATA_FILENAME)
|
||||
next if !self.const_get(c).const_defined?(:DATA_FILENAME)
|
||||
if self.const_get(c).const_defined?(:OPTIONAL) && self.const_get(c)::OPTIONAL
|
||||
ret.push([self.const_get(c)::DATA_FILENAME, false])
|
||||
else
|
||||
ret.push([self.const_get(c)::DATA_FILENAME, true])
|
||||
end
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
@@ -4,8 +4,7 @@ module GameData
|
||||
attr_reader :real_name
|
||||
attr_reader :type
|
||||
attr_reader :category
|
||||
# TODO: Rename base_damage to power everywhere.
|
||||
attr_reader :base_damage
|
||||
attr_reader :power
|
||||
attr_reader :accuracy
|
||||
attr_reader :total_pp
|
||||
attr_reader :target
|
||||
@@ -25,7 +24,7 @@ module GameData
|
||||
"Name" => [:real_name, "s"],
|
||||
"Type" => [:type, "e", :Type],
|
||||
"Category" => [:category, "e", ["Physical", "Special", "Status"]],
|
||||
"Power" => [:base_damage, "u"],
|
||||
"Power" => [:power, "u"],
|
||||
"Accuracy" => [:accuracy, "u"],
|
||||
"TotalPP" => [:total_pp, "u"],
|
||||
"Target" => [:target, "e", :Target],
|
||||
@@ -40,12 +39,11 @@ module GameData
|
||||
include InstanceMethods
|
||||
|
||||
def initialize(hash)
|
||||
convert_move_data(hash)
|
||||
@id = hash[:id]
|
||||
@real_name = hash[:real_name] || "Unnamed"
|
||||
@type = hash[:type] || :NONE
|
||||
@category = hash[:category] || 2
|
||||
@base_damage = hash[:base_damage] || 0
|
||||
@power = hash[:power] || 0
|
||||
@accuracy = hash[:accuracy] || 100
|
||||
@total_pp = hash[:total_pp] || 5
|
||||
@target = hash[:target] || :None
|
||||
@@ -58,6 +56,12 @@ module GameData
|
||||
@pbs_file_suffix = hash[:pbs_file_suffix] || ""
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v22.
|
||||
def base_damage
|
||||
Deprecation.warn_method("base_damage", "v22", "power")
|
||||
return @power
|
||||
end
|
||||
|
||||
# @return [String] the translated name of this move
|
||||
def name
|
||||
return pbGetMessageFromHash(MessageTypes::MOVE_NAMES, @real_name)
|
||||
@@ -73,13 +77,13 @@ module GameData
|
||||
end
|
||||
|
||||
def physical?
|
||||
return false if @base_damage == 0
|
||||
return false if @power == 0
|
||||
return @category == 0 if Settings::MOVE_CATEGORY_PER_MOVE
|
||||
return GameData::Type.get(@type).physical?
|
||||
end
|
||||
|
||||
def special?
|
||||
return false if @base_damage == 0
|
||||
return false if @power == 0
|
||||
return @category == 1 if Settings::MOVE_CATEGORY_PER_MOVE
|
||||
return GameData::Type.get(@type).special?
|
||||
end
|
||||
@@ -360,7 +364,7 @@ module GameData
|
||||
return 10 if pkmn.item.is_berry?
|
||||
return 80 if pkmn.item.is_mega_stone?
|
||||
if pkmn.item.is_TR?
|
||||
ret = GameData::Move.get(pkmn.item.move).base_damage
|
||||
ret = GameData::Move.get(pkmn.item.move).power
|
||||
ret = 10 if ret < 10
|
||||
return ret
|
||||
end
|
||||
@@ -388,444 +392,12 @@ module GameData
|
||||
return dmgs[ppLeft]
|
||||
end
|
||||
=end
|
||||
return @base_damage
|
||||
return @power
|
||||
end
|
||||
|
||||
def display_category(pkmn, move = nil); return @category; end
|
||||
def display_accuracy(pkmn, move = nil); return @accuracy; end
|
||||
|
||||
def convert_move_data(data)
|
||||
new_code = data[:function_code]
|
||||
case data[:function_code]
|
||||
when "000" then new_code = "None"
|
||||
when "001" then new_code = "DoesNothingUnusableInGravity"
|
||||
when "002" then new_code = "Struggle"
|
||||
when "003"
|
||||
if data[:id] == :RELICSONG
|
||||
new_code = "SleepTargetChangeUserMeloettaForm"
|
||||
elsif data[:id] == :DARKVOID && Settings::MECHANICS_GENERATION >= 7
|
||||
new_code = "SleepTargetIfUserDarkrai"
|
||||
else
|
||||
new_code = "SleepTarget"
|
||||
end
|
||||
when "004" then new_code = "SleepTargetNextTurn"
|
||||
when "005" then new_code = "PoisonTarget"
|
||||
when "006" then new_code = "BadPoisonTarget"
|
||||
when "007"
|
||||
if data[:id] == :THUNDERWAVE
|
||||
new_code = "ParalyzeTargetIfNotTypeImmune"
|
||||
else
|
||||
new_code = "ParalyzeTarget"
|
||||
end
|
||||
when "008" then new_code = "ParalyzeTargetAlwaysHitsInRainHitsTargetInSky"
|
||||
when "009" then new_code = "ParalyzeFlinchTarget"
|
||||
when "00A" then new_code = "BurnTarget"
|
||||
when "00B" then new_code = "BurnFlinchTarget"
|
||||
when "00C" then new_code = "FreezeTarget"
|
||||
when "00D" then new_code = "FreezeTargetAlwaysHitsInHail"
|
||||
when "00E" then new_code = "FreezeFlinchTarget"
|
||||
when "00F", "010" then new_code = "FlinchTarget"
|
||||
when "011" then new_code = "FlinchTargetFailsIfUserNotAsleep"
|
||||
when "012" then new_code = "FlinchTargetFailsIfNotUserFirstTurn"
|
||||
when "013", "014" then new_code = "ConfuseTarget"
|
||||
when "015" then new_code = "ConfuseTargetAlwaysHitsInRainHitsTargetInSky"
|
||||
when "016" then new_code = "AttractTarget"
|
||||
when "017" then new_code = "ParalyzeBurnOrFreezeTarget"
|
||||
when "018" then new_code = "CureUserBurnPoisonParalysis"
|
||||
when "019" then new_code = "CureUserPartyStatus"
|
||||
when "01A" then new_code = "StartUserSideImmunityToInflictedStatus"
|
||||
when "01B" then new_code = "GiveUserStatusToTarget"
|
||||
when "01C" then new_code = "RaiseUserAttack1"
|
||||
when "01D" then new_code = "RaiseUserDefense1"
|
||||
when "01E" then new_code = "RaiseUserDefense1CurlUpUser"
|
||||
when "01F" then new_code = "RaiseUserSpeed1"
|
||||
when "020" then new_code = "RaiseUserSpAtk1"
|
||||
when "021" then new_code = "RaiseUserSpDef1PowerUpElectricMove"
|
||||
when "022" then new_code = "RaiseUserEvasion1"
|
||||
when "023" then new_code = "RaiseUserCriticalHitRate2"
|
||||
when "024" then new_code = "RaiseUserAtkDef1"
|
||||
when "025" then new_code = "RaiseUserAtkDefAcc1"
|
||||
when "026" then new_code = "RaiseUserAtkSpd1"
|
||||
when "027" then new_code = "RaiseUserAtkSpAtk1"
|
||||
when "028" then new_code = "RaiseUserAtkSpAtk1Or2InSun"
|
||||
when "029" then new_code = "RaiseUserAtkAcc1"
|
||||
when "02A" then new_code = "RaiseUserDefSpDef1"
|
||||
when "02B" then new_code = "RaiseUserSpAtkSpDefSpd1"
|
||||
when "02C" then new_code = "RaiseUserSpAtkSpDef1"
|
||||
when "02D" then new_code = "RaiseUserMainStats1"
|
||||
when "02E" then new_code = "RaiseUserAttack2"
|
||||
when "02F" then new_code = "RaiseUserDefense2"
|
||||
when "030" then new_code = "RaiseUserSpeed2"
|
||||
when "031" then new_code = "RaiseUserSpeed2LowerUserWeight"
|
||||
when "032" then new_code = "RaiseUserSpAtk2"
|
||||
when "033" then new_code = "RaiseUserSpDef2"
|
||||
when "034" then new_code = "RaiseUserEvasion2MinimizeUser"
|
||||
when "035" then new_code = "LowerUserDefSpDef1RaiseUserAtkSpAtkSpd2"
|
||||
when "036" then new_code = "RaiseUserAtk1Spd2"
|
||||
when "037" then new_code = "RaiseTargetRandomStat2"
|
||||
when "038" then new_code = "RaiseUserDefense3"
|
||||
when "039" then new_code = "RaiseUserSpAtk3"
|
||||
when "03A" then new_code = "MaxUserAttackLoseHalfOfTotalHP"
|
||||
when "03B" then new_code = "LowerUserAtkDef1"
|
||||
when "03C" then new_code = "LowerUserDefSpDef1"
|
||||
when "03D" then new_code = "LowerUserDefSpDefSpd1"
|
||||
when "03E" then new_code = "LowerUserSpeed1"
|
||||
when "03F" then new_code = "LowerUserSpAtk2"
|
||||
when "040" then new_code = "RaiseTargetSpAtk1ConfuseTarget"
|
||||
when "041" then new_code = "RaiseTargetAttack2ConfuseTarget"
|
||||
when "042" then new_code = "LowerTargetAttack1"
|
||||
when "043" then new_code = "LowerTargetDefense1"
|
||||
when "044"
|
||||
if data[:id] == :BULLDOZE
|
||||
new_code = "LowerTargetSpeed1WeakerInGrassyTerrain"
|
||||
else
|
||||
new_code = "LowerTargetSpeed1"
|
||||
end
|
||||
when "045" then new_code = "LowerTargetSpAtk1"
|
||||
when "046" then new_code = "LowerTargetSpDef1"
|
||||
when "047" then new_code = "LowerTargetAccuracy1"
|
||||
when "048"
|
||||
if data[:id] == :SWEETSCENT && Settings::MECHANICS_GENERATION >= 6
|
||||
new_code = "LowerTargetEvasion2"
|
||||
else
|
||||
new_code = "LowerTargetEvasion1"
|
||||
end
|
||||
when "049" then new_code = "LowerTargetEvasion1RemoveSideEffects"
|
||||
when "04A" then new_code = "LowerTargetAtkDef1"
|
||||
when "04B" then new_code = "LowerTargetAttack2"
|
||||
when "04C" then new_code = "LowerTargetDefense2"
|
||||
when "04D" then new_code = "LowerTargetSpeed2"
|
||||
when "04E" then new_code = "LowerTargetSpAtk2IfCanAttract"
|
||||
when "04F" then new_code = "LowerTargetSpDef2"
|
||||
when "050" then new_code = "ResetTargetStatStages"
|
||||
when "051" then new_code = "ResetAllBattlersStatStages"
|
||||
when "052" then new_code = "UserTargetSwapAtkSpAtkStages"
|
||||
when "053" then new_code = "UserTargetSwapDefSpDefStages"
|
||||
when "054" then new_code = "UserTargetSwapStatStages"
|
||||
when "055" then new_code = "UserCopyTargetStatStages"
|
||||
when "056" then new_code = "StartUserSideImmunityToStatStageLowering"
|
||||
when "057" then new_code = "UserSwapBaseAtkDef"
|
||||
when "058" then new_code = "UserTargetAverageBaseAtkSpAtk"
|
||||
when "059" then new_code = "UserTargetAverageBaseDefSpDef"
|
||||
when "05A" then new_code = "UserTargetAverageHP"
|
||||
when "05B" then new_code = "StartUserSideDoubleSpeed"
|
||||
when "05C" then new_code = "ReplaceMoveThisBattleWithTargetLastMoveUsed"
|
||||
when "05D" then new_code = "ReplaceMoveWithTargetLastMoveUsed"
|
||||
when "05E" then new_code = "SetUserTypesToUserMoveType"
|
||||
when "05F" then new_code = "SetUserTypesToResistLastAttack"
|
||||
when "060" then new_code = "SetUserTypesBasedOnEnvironment"
|
||||
when "061" then new_code = "SetTargetTypesToWater"
|
||||
when "062" then new_code = "SetUserTypesToTargetTypes"
|
||||
when "063" then new_code = "SetTargetAbilityToSimple"
|
||||
when "064" then new_code = "SetTargetAbilityToInsomnia"
|
||||
when "065" then new_code = "SetUserAbilityToTargetAbility"
|
||||
when "066" then new_code = "SetTargetAbilityToUserAbility"
|
||||
when "067" then new_code = "UserTargetSwapAbilities"
|
||||
when "068" then new_code = "NegateTargetAbility"
|
||||
when "069" then new_code = "TransformUserIntoTarget"
|
||||
when "06A" then new_code = "FixedDamage20"
|
||||
when "06B" then new_code = "FixedDamage40"
|
||||
when "06C" then new_code = "FixedDamageHalfTargetHP"
|
||||
when "06D" then new_code = "FixedDamageUserLevel"
|
||||
when "06E" then new_code = "LowerTargetHPToUserHP"
|
||||
when "06F" then new_code = "FixedDamageUserLevelRandom"
|
||||
when "070"
|
||||
if data[:id] == :FISSURE
|
||||
new_code = "OHKOHitsUndergroundTarget"
|
||||
elsif data[:id] == :SHEERCOLD && Settings::MECHANICS_GENERATION >= 7
|
||||
new_code = "OHKOIce"
|
||||
else
|
||||
new_code = "OHKO"
|
||||
end
|
||||
when "071" then new_code = "CounterPhysicalDamage"
|
||||
when "072" then new_code = "CounterSpecialDamage"
|
||||
when "073" then new_code = "CounterDamagePlusHalf"
|
||||
when "074" then new_code = "DamageTargetAlly"
|
||||
when "075" then new_code = "DoublePowerIfTargetUnderwater"
|
||||
when "076" then new_code = "DoublePowerIfTargetUnderground"
|
||||
when "077" then new_code = "DoublePowerIfTargetInSky"
|
||||
when "078" then new_code = "FlinchTargetDoublePowerIfTargetInSky"
|
||||
when "079" then new_code = "DoublePowerAfterFusionFlare"
|
||||
when "07A" then new_code = "DoublePowerAfterFusionBolt"
|
||||
when "07B" then new_code = "DoublePowerIfTargetPoisoned"
|
||||
when "07C" then new_code = "DoublePowerIfTargetParalyzedCureTarget"
|
||||
when "07D" then new_code = "DoublePowerIfTargetAsleepCureTarget"
|
||||
when "07E" then new_code = "DoublePowerIfUserPoisonedBurnedParalyzed"
|
||||
when "07F" then new_code = "DoublePowerIfTargetStatusProblem"
|
||||
when "080" then new_code = "DoublePowerIfTargetHPLessThanHalf"
|
||||
when "081" then new_code = "DoublePowerIfUserLostHPThisTurn"
|
||||
when "082" then new_code = "DoublePowerIfTargetLostHPThisTurn"
|
||||
when "083" then new_code = "UsedAfterAllyRoundWithDoublePower"
|
||||
when "084" then new_code = "DoublePowerIfTargetActed"
|
||||
when "085" then new_code = "DoublePowerIfAllyFaintedLastTurn"
|
||||
when "086" then new_code = "DoublePowerIfUserHasNoItem"
|
||||
when "087" then new_code = "TypeAndPowerDependOnWeather"
|
||||
when "088" then new_code = "PursueSwitchingFoe"
|
||||
when "089" then new_code = "PowerHigherWithUserHappiness"
|
||||
when "08A" then new_code = "PowerLowerWithUserHappiness"
|
||||
when "08B" then new_code = "PowerHigherWithUserHP"
|
||||
when "08C" then new_code = "PowerHigherWithTargetHP"
|
||||
when "08D" then new_code = "PowerHigherWithTargetFasterThanUser"
|
||||
when "08E" then new_code = "PowerHigherWithUserPositiveStatStages"
|
||||
when "08F" then new_code = "PowerHigherWithTargetPositiveStatStages"
|
||||
when "090" then new_code = "TypeDependsOnUserIVs"
|
||||
when "091" then new_code = "PowerHigherWithConsecutiveUse"
|
||||
when "092" then new_code = "PowerHigherWithConsecutiveUseOnUserSide"
|
||||
when "093" then new_code = "StartRaiseUserAtk1WhenDamaged"
|
||||
when "094" then new_code = "RandomlyDamageOrHealTarget"
|
||||
when "095" then new_code = "RandomPowerDoublePowerIfTargetUnderground"
|
||||
when "096" then new_code = "TypeAndPowerDependOnUserBerry"
|
||||
when "097" then new_code = "PowerHigherWithLessPP"
|
||||
when "098" then new_code = "PowerLowerWithUserHP"
|
||||
when "099" then new_code = "PowerHigherWithUserFasterThanTarget"
|
||||
when "09A" then new_code = "PowerHigherWithTargetWeight"
|
||||
when "09B" then new_code = "PowerHigherWithUserHeavierThanTarget"
|
||||
when "09C" then new_code = "PowerUpAllyMove"
|
||||
when "09D" then new_code = "StartWeakenElectricMoves"
|
||||
when "09E" then new_code = "StartWeakenFireMoves"
|
||||
when "09F"
|
||||
case data[:id]
|
||||
when :MULTIATTACK
|
||||
new_code = "TypeDependsOnUserMemory"
|
||||
when :TECHNOBLAST
|
||||
new_code = "TypeDependsOnUserDrive"
|
||||
else
|
||||
new_code = "TypeDependsOnUserPlate"
|
||||
end
|
||||
when "0A0" then new_code = "AlwaysCriticalHit"
|
||||
when "0A1" then new_code = "StartPreventCriticalHitsAgainstUserSide"
|
||||
when "0A2" then new_code = "StartWeakenPhysicalDamageAgainstUserSide"
|
||||
when "0A3" then new_code = "StartWeakenSpecialDamageAgainstUserSide"
|
||||
when "0A4" then new_code = "EffectDependsOnEnvironment"
|
||||
when "0A5"
|
||||
new_code = "None"
|
||||
data[:accuracy] = 0
|
||||
when "0A6" then new_code = "EnsureNextMoveAlwaysHits"
|
||||
when "0A7" then new_code = "StartNegateTargetEvasionStatStageAndGhostImmunity"
|
||||
when "0A8" then new_code = "StartNegateTargetEvasionStatStageAndDarkImmunity"
|
||||
when "0A9" then new_code = "IgnoreTargetDefSpDefEvaStatStages"
|
||||
when "0AA" then new_code = "ProtectUser"
|
||||
when "0AB" then new_code = "ProtectUserSideFromPriorityMoves"
|
||||
when "0AC" then new_code = "ProtectUserSideFromMultiTargetDamagingMoves"
|
||||
when "0AD" then new_code = "RemoveProtections"
|
||||
when "0AE" then new_code = "UseLastMoveUsedByTarget"
|
||||
when "0AF" then new_code = "UseLastMoveUsed"
|
||||
when "0B0" then new_code = "UseMoveTargetIsAboutToUse"
|
||||
when "0B1" then new_code = "BounceBackProblemCausingStatusMoves"
|
||||
when "0B2" then new_code = "StealAndUseBeneficialStatusMove"
|
||||
when "0B3" then new_code = "UseMoveDependingOnEnvironment"
|
||||
when "0B4" then new_code = "UseRandomUserMoveIfAsleep"
|
||||
when "0B5" then new_code = "UseRandomMoveFromUserParty"
|
||||
when "0B6" then new_code = "UseRandomMove"
|
||||
when "0B7" then new_code = "DisableTargetUsingSameMoveConsecutively"
|
||||
when "0B8" then new_code = "DisableTargetMovesKnownByUser"
|
||||
when "0B9" then new_code = "DisableTargetLastMoveUsed"
|
||||
when "0BA" then new_code = "DisableTargetStatusMoves"
|
||||
when "0BB" then new_code = "DisableTargetHealingMoves"
|
||||
when "0BC" then new_code = "DisableTargetUsingDifferentMove"
|
||||
when "0BD" then new_code = "HitTwoTimes"
|
||||
when "0BE" then new_code = "HitTwoTimesPoisonTarget"
|
||||
when "0BF" then new_code = "HitThreeTimesPowersUpWithEachHit"
|
||||
when "0C0"
|
||||
if data[:id] == :WATERSHURIKEN
|
||||
new_code = "HitTwoToFiveTimesOrThreeForAshGreninja"
|
||||
else
|
||||
new_code = "HitTwoToFiveTimes"
|
||||
end
|
||||
when "0C1" then new_code = "HitOncePerUserTeamMember"
|
||||
when "0C2" then new_code = "AttackAndSkipNextTurn"
|
||||
when "0C3" then new_code = "TwoTurnAttack"
|
||||
when "0C4" then new_code = "TwoTurnAttackOneTurnInSun"
|
||||
when "0C5" then new_code = "TwoTurnAttackParalyzeTarget"
|
||||
when "0C6" then new_code = "TwoTurnAttackBurnTarget"
|
||||
when "0C7" then new_code = "TwoTurnAttackFlinchTarget"
|
||||
when "0C8" then new_code = "TwoTurnAttackChargeRaiseUserDefense1"
|
||||
when "0C9" then new_code = "TwoTurnAttackInvulnerableInSky"
|
||||
when "0CA" then new_code = "TwoTurnAttackInvulnerableUnderground"
|
||||
when "0CB" then new_code = "TwoTurnAttackInvulnerableUnderwater"
|
||||
when "0CC" then new_code = "TwoTurnAttackInvulnerableInSkyParalyzeTarget"
|
||||
when "0CD" then new_code = "TwoTurnAttackInvulnerableRemoveProtections"
|
||||
when "0CE" then new_code = "TwoTurnAttackInvulnerableInSkyTargetCannotAct"
|
||||
when "0CF" then new_code = "BindTarget"
|
||||
when "0D0" then new_code = "BindTargetDoublePowerIfTargetUnderwater"
|
||||
when "0D1" then new_code = "MultiTurnAttackPreventSleeping"
|
||||
when "0D2" then new_code = "MultiTurnAttackConfuseUserAtEnd"
|
||||
when "0D3" then new_code = "MultiTurnAttackPowersUpEachTurn"
|
||||
when "0D4" then new_code = "MultiTurnAttackBideThenReturnDoubleDamage"
|
||||
when "0D5" then new_code = "HealUserHalfOfTotalHP"
|
||||
when "0D6" then new_code = "HealUserHalfOfTotalHPLoseFlyingTypeThisTurn"
|
||||
when "0D7" then new_code = "HealUserPositionNextTurn"
|
||||
when "0D8" then new_code = "HealUserDependingOnWeather"
|
||||
when "0D9" then new_code = "HealUserFullyAndFallAsleep"
|
||||
when "0DA" then new_code = "StartHealUserEachTurn"
|
||||
when "0DB" then new_code = "StartHealUserEachTurnTrapUserInBattle"
|
||||
when "0DC" then new_code = "StartLeechSeedTarget"
|
||||
when "0DD" then new_code = "HealUserByHalfOfDamageDone"
|
||||
when "0DE" then new_code = "HealUserByHalfOfDamageDoneIfTargetAsleep"
|
||||
when "0DF" then new_code = "HealTargetHalfOfTotalHP"
|
||||
when "0E0" then new_code = "UserFaintsExplosive"
|
||||
when "0E1" then new_code = "UserFaintsFixedDamageUserHP"
|
||||
when "0E2" then new_code = "UserFaintsLowerTargetAtkSpAtk2"
|
||||
when "0E3" then new_code = "UserFaintsHealAndCureReplacement"
|
||||
when "0E4" then new_code = "UserFaintsHealAndCureReplacementRestorePP"
|
||||
when "0E5" then new_code = "StartPerishCountsForAllBattlers"
|
||||
when "0E6" then new_code = "SetAttackerMovePPTo0IfUserFaints"
|
||||
when "0E7" then new_code = "AttackerFaintsIfUserFaints"
|
||||
when "0E8" then new_code = "UserEnduresFaintingThisTurn"
|
||||
when "0E9" then new_code = "CannotMakeTargetFaint"
|
||||
when "0EA"
|
||||
if Settings::MECHANICS_GENERATION >= 8
|
||||
new_code = "SwitchOutUserStatusMove"
|
||||
else
|
||||
new_code = "FleeFromBattle"
|
||||
end
|
||||
when "0EB" then new_code = "SwitchOutTargetStatusMove"
|
||||
when "0EC" then new_code = "SwitchOutTargetDamagingMove"
|
||||
when "0ED" then new_code = "SwitchOutUserPassOnEffects"
|
||||
when "0EE" then new_code = "SwitchOutUserDamagingMove"
|
||||
when "0EF" then new_code = "TrapTargetInBattle"
|
||||
when "0F0" then new_code = "RemoveTargetItem"
|
||||
when "0F1" then new_code = "UserTakesTargetItem"
|
||||
when "0F2" then new_code = "UserTargetSwapItems"
|
||||
when "0F3" then new_code = "TargetTakesUserItem"
|
||||
when "0F4" then new_code = "UserConsumeTargetBerry"
|
||||
when "0F5" then new_code = "DestroyTargetBerryOrGem"
|
||||
when "0F6" then new_code = "RestoreUserConsumedItem"
|
||||
when "0F7" then new_code = "ThrowUserItemAtTarget"
|
||||
when "0F8" then new_code = "StartTargetCannotUseItem"
|
||||
when "0F9" then new_code = "StartNegateHeldItems"
|
||||
when "0FA" then new_code = "RecoilQuarterOfDamageDealt"
|
||||
when "0FB" then new_code = "RecoilThirdOfDamageDealt"
|
||||
when "0FC" then new_code = "RecoilHalfOfDamageDealt"
|
||||
when "0FD" then new_code = "RecoilThirdOfDamageDealtParalyzeTarget"
|
||||
when "0FE" then new_code = "RecoilThirdOfDamageDealtBurnTarget"
|
||||
when "0FF" then new_code = "StartSunWeather"
|
||||
when "100" then new_code = "StartRainWeather"
|
||||
when "101" then new_code = "StartSandstormWeather"
|
||||
when "102" then new_code = "StartHailWeather"
|
||||
when "103" then new_code = "AddSpikesToFoeSide"
|
||||
when "104" then new_code = "AddToxicSpikesToFoeSide"
|
||||
when "105" then new_code = "AddStealthRocksToFoeSide"
|
||||
when "106" then new_code = "GrassPledge"
|
||||
when "107" then new_code = "FirePledge"
|
||||
when "108" then new_code = "WaterPledge"
|
||||
when "109" then new_code = "AddMoneyGainedFromBattle"
|
||||
when "10A" then new_code = "RemoveScreens"
|
||||
when "10B" then new_code = "CrashDamageIfFailsUnusableInGravity"
|
||||
when "10C" then new_code = "UserMakeSubstitute"
|
||||
when "10D" then new_code = "CurseTargetOrLowerUserSpd1RaiseUserAtkDef1"
|
||||
when "10E" then new_code = "LowerPPOfTargetLastMoveBy4"
|
||||
when "10F" then new_code = "StartDamageTargetEachTurnIfTargetAsleep"
|
||||
when "110" then new_code = "RemoveUserBindingAndEntryHazards"
|
||||
when "111" then new_code = "AttackTwoTurnsLater"
|
||||
when "112" then new_code = "UserAddStockpileRaiseDefSpDef1"
|
||||
when "113" then new_code = "PowerDependsOnUserStockpile"
|
||||
when "114" then new_code = "HealUserDependingOnUserStockpile"
|
||||
when "115" then new_code = "FailsIfUserDamagedThisTurn"
|
||||
when "116" then new_code = "FailsIfTargetActed"
|
||||
when "117" then new_code = "RedirectAllMovesToUser"
|
||||
when "118" then new_code = "StartGravity"
|
||||
when "119" then new_code = "StartUserAirborne"
|
||||
when "11A" then new_code = "StartTargetAirborneAndAlwaysHitByMoves"
|
||||
when "11B" then new_code = "HitsTargetInSky"
|
||||
when "11C" then new_code = "HitsTargetInSkyGroundsTarget"
|
||||
when "11D" then new_code = "TargetActsNext"
|
||||
when "11E" then new_code = "TargetActsLast"
|
||||
when "11F" then new_code = "StartSlowerBattlersActFirst"
|
||||
when "120" then new_code = "UserSwapsPositionsWithAlly"
|
||||
when "121" then new_code = "UseTargetAttackInsteadOfUserAttack"
|
||||
when "122" then new_code = "UseTargetDefenseInsteadOfTargetSpDef"
|
||||
when "123" then new_code = "FailsUnlessTargetSharesTypeWithUser"
|
||||
when "124" then new_code = "StartSwapAllBattlersBaseDefensiveStats"
|
||||
when "125" then new_code = "FailsIfUserHasUnusedMove"
|
||||
when "126" then new_code = "None"
|
||||
when "127" then new_code = "ParalyzeTarget"
|
||||
when "128" then new_code = "BurnTarget"
|
||||
when "129" then new_code = "FreezeTarget"
|
||||
when "12A" then new_code = "ConfuseTarget"
|
||||
when "12B" then new_code = "LowerTargetDefense2"
|
||||
when "12C" then new_code = "LowerTargetEvasion2"
|
||||
when "12D" then new_code = "DoublePowerIfTargetUnderwater"
|
||||
when "12E" then new_code = "AllBattlersLoseHalfHPUserSkipsNextTurn"
|
||||
when "12F" then new_code = "TrapTargetInBattle"
|
||||
when "130" then new_code = "UserLosesHalfHP"
|
||||
when "131" then new_code = "StartShadowSkyWeather"
|
||||
when "132" then new_code = "RemoveAllScreensAndSafeguard"
|
||||
when "133" then new_code = "DoesNothingFailsIfNoAlly"
|
||||
when "134" then new_code = "DoesNothingCongratulations"
|
||||
when "135" then new_code = "FreezeTargetSuperEffectiveAgainstWater"
|
||||
when "136" then new_code = "RaiseUserDefense2"
|
||||
when "137" then new_code = "RaisePlusMinusUserAndAlliesDefSpDef1"
|
||||
when "138" then new_code = "RaiseTargetSpDef1"
|
||||
when "139" then new_code = "LowerTargetAttack1BypassSubstitute"
|
||||
when "13A" then new_code = "LowerTargetAtkSpAtk1"
|
||||
when "13B" then new_code = "HoopaRemoveProtectionsBypassSubstituteLowerUserDef1"
|
||||
when "13C" then new_code = "LowerTargetSpAtk1"
|
||||
when "13D" then new_code = "LowerTargetSpAtk2"
|
||||
when "13E" then new_code = "RaiseGroundedGrassBattlersAtkSpAtk1"
|
||||
when "13F" then new_code = "RaiseGrassBattlersDef1"
|
||||
when "140" then new_code = "LowerPoisonedTargetAtkSpAtkSpd1"
|
||||
when "141" then new_code = "InvertTargetStatStages"
|
||||
when "142" then new_code = "AddGhostTypeToTarget"
|
||||
when "143" then new_code = "AddGrassTypeToTarget"
|
||||
when "144" then new_code = "EffectivenessIncludesFlyingType"
|
||||
when "145" then new_code = "TargetMovesBecomeElectric"
|
||||
when "146" then new_code = "NormalMovesBecomeElectric"
|
||||
when "147" then new_code = "RemoveProtectionsBypassSubstitute"
|
||||
when "148" then new_code = "TargetNextFireMoveDamagesTarget"
|
||||
when "149" then new_code = "ProtectUserSideFromDamagingMovesIfUserFirstTurn"
|
||||
when "14A" then new_code = "ProtectUserSideFromStatusMoves"
|
||||
when "14B" then new_code = "ProtectUserFromDamagingMovesKingsShield"
|
||||
when "14C" then new_code = "ProtectUserFromTargetingMovesSpikyShield"
|
||||
when "14D" then new_code = "TwoTurnAttackInvulnerableRemoveProtections"
|
||||
when "14E" then new_code = "TwoTurnAttackRaiseUserSpAtkSpDefSpd2"
|
||||
when "14F" then new_code = "HealUserByThreeQuartersOfDamageDone"
|
||||
when "150" then new_code = "RaiseUserAttack3IfTargetFaints"
|
||||
when "151" then new_code = "LowerTargetAtkSpAtk1SwitchOutUser"
|
||||
when "152" then new_code = "TrapAllBattlersInBattleForOneTurn"
|
||||
when "153" then new_code = "AddStickyWebToFoeSide"
|
||||
when "154" then new_code = "StartElectricTerrain"
|
||||
when "155" then new_code = "StartGrassyTerrain"
|
||||
when "156" then new_code = "StartMistyTerrain"
|
||||
when "157" then new_code = "DoubleMoneyGainedFromBattle"
|
||||
when "158" then new_code = "FailsIfUserNotConsumedBerry"
|
||||
when "159" then new_code = "PoisonTargetLowerTargetSpeed1"
|
||||
when "15A" then new_code = "CureTargetBurn"
|
||||
when "15B" then new_code = "CureTargetStatusHealUserHalfOfTotalHP"
|
||||
when "15C" then new_code = "RaisePlusMinusUserAndAlliesAtkSpAtk1"
|
||||
when "15D" then new_code = "UserStealTargetPositiveStatStages"
|
||||
when "15E" then new_code = "EnsureNextCriticalHit"
|
||||
when "15F" then new_code = "LowerUserDefense1"
|
||||
when "160" then new_code = "HealUserByTargetAttackLowerTargetAttack1"
|
||||
when "161" then new_code = "UserTargetSwapBaseSpeed"
|
||||
when "162" then new_code = "UserLosesFireType"
|
||||
when "163" then new_code = "IgnoreTargetAbility"
|
||||
when "164" then new_code = "CategoryDependsOnHigherDamageIgnoreTargetAbility"
|
||||
when "165" then new_code = "NegateTargetAbilityIfTargetActed"
|
||||
when "166" then new_code = "DoublePowerIfUserLastMoveFailed"
|
||||
when "167" then new_code = "StartWeakenDamageAgainstUserSideIfHail"
|
||||
when "168" then new_code = "ProtectUserBanefulBunker"
|
||||
when "169" then new_code = "TypeIsUserFirstType"
|
||||
when "16A" then new_code = "RedirectAllMovesToTarget"
|
||||
when "16B" then new_code = "TargetUsesItsLastUsedMoveAgain"
|
||||
when "16C" then new_code = "DisableTargetSoundMoves"
|
||||
when "16D" then new_code = "HealUserDependingOnSandstorm"
|
||||
when "16E" then new_code = "HealTargetDependingOnGrassyTerrain"
|
||||
when "16F" then new_code = "HealAllyOrDamageFoe"
|
||||
when "170" then new_code = "UserLosesHalfOfTotalHPExplosive"
|
||||
when "171" then new_code = "UsedAfterUserTakesPhysicalDamage"
|
||||
when "172" then new_code = "BurnAttackerBeforeUserActs"
|
||||
when "173" then new_code = "StartPsychicTerrain"
|
||||
when "174" then new_code = "FailsIfNotUserFirstTurn"
|
||||
when "175" then new_code = "HitTwoTimesFlinchTarget"
|
||||
#=========================================================================
|
||||
# NOTE: The below was added in v21.
|
||||
when "UseUserBaseDefenseInsteadOfUserBaseAttack" then new_code = "UseUserDefenseInsteadOfUserAttack"
|
||||
end
|
||||
data[:function_code] = new_code
|
||||
return data
|
||||
end
|
||||
|
||||
alias __orig__get_property_for_PBS get_property_for_PBS unless method_defined?(:__orig__get_property_for_PBS)
|
||||
def get_property_for_PBS(key)
|
||||
ret = __orig__get_property_for_PBS(key)
|
||||
|
||||
@@ -50,19 +50,21 @@ module GameData
|
||||
battle_use_array = [_INTL("Can't use in battle")]
|
||||
self.schema["BattleUse"][2].each { |key, value| battle_use_array[value] = key if !battle_use_array[value] }
|
||||
return [
|
||||
["ID", ReadOnlyProperty, _INTL("ID of this item (used as a symbol like :XXX).")],
|
||||
["Name", ItemNameProperty, _INTL("Name of this item as displayed by the game.")],
|
||||
["NamePlural", ItemNameProperty, _INTL("Plural name of this item as displayed by the game.")],
|
||||
["Pocket", PocketProperty, _INTL("Pocket in the Bag where this item is stored.")],
|
||||
["Price", LimitProperty.new(Settings::MAX_MONEY), _INTL("Purchase price of this item.")],
|
||||
["SellPrice", LimitProperty2.new(Settings::MAX_MONEY), _INTL("Sell price of this item. If blank, is half the purchase price.")],
|
||||
["BPPrice", LimitProperty.new(Settings::MAX_BATTLE_POINTS), _INTL("Purchase price of this item in Battle Points (BP).")],
|
||||
["FieldUse", EnumProperty.new(field_use_array), _INTL("How this item can be used outside of battle.")],
|
||||
["BattleUse", EnumProperty.new(battle_use_array), _INTL("How this item can be used within a battle.")],
|
||||
["Flags", StringListProperty, _INTL("Words/phrases that can be used to group certain kinds of items.")],
|
||||
["Consumable", BooleanProperty, _INTL("Whether this item is consumed after use.")],
|
||||
["Move", MoveProperty, _INTL("Move taught by this HM, TM or TR.")],
|
||||
["Description", StringProperty, _INTL("Description of this item.")]
|
||||
["ID", ReadOnlyProperty, _INTL("ID of this item (used as a symbol like :XXX).")],
|
||||
["Name", ItemNameProperty, _INTL("Name of this item as displayed by the game.")],
|
||||
["NamePlural", ItemNameProperty, _INTL("Plural name of this item as displayed by the game.")],
|
||||
["PortionName", ItemNameProperty, _INTL("Name of a portion of this item as displayed by the game.")],
|
||||
["PortionNamePlural", ItemNameProperty, _INTL("Name of 2 or more portions of this item as displayed by the game.")],
|
||||
["Pocket", PocketProperty, _INTL("Pocket in the Bag where this item is stored.")],
|
||||
["Price", LimitProperty.new(Settings::MAX_MONEY), _INTL("Purchase price of this item.")],
|
||||
["SellPrice", LimitProperty2.new(Settings::MAX_MONEY), _INTL("Sell price of this item. If blank, is half the purchase price.")],
|
||||
["BPPrice", LimitProperty.new(Settings::MAX_BATTLE_POINTS), _INTL("Purchase price of this item in Battle Points (BP).")],
|
||||
["FieldUse", EnumProperty.new(field_use_array), _INTL("How this item can be used outside of battle.")],
|
||||
["BattleUse", EnumProperty.new(battle_use_array), _INTL("How this item can be used within a battle.")],
|
||||
["Flags", StringListProperty, _INTL("Words/phrases that can be used to group certain kinds of items.")],
|
||||
["Consumable", BooleanProperty, _INTL("Whether this item is consumed after use.")],
|
||||
["Move", MoveProperty, _INTL("Move taught by this HM, TM or TR.")],
|
||||
["Description", StringProperty, _INTL("Description of this item.")]
|
||||
]
|
||||
end
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ module GameData
|
||||
DATA = {}
|
||||
DATA_FILENAME = "shadow_pokemon.dat"
|
||||
PBS_BASE_FILENAME = "shadow_pokemon"
|
||||
OPTIONAL = true
|
||||
|
||||
SCHEMA = {
|
||||
"SectionName" => [:id, "e", :Species],
|
||||
@@ -21,7 +22,7 @@ module GameData
|
||||
extend ClassMethodsSymbols
|
||||
include InstanceMethods
|
||||
|
||||
alias __orig__load load unless private_method_defined?(:__orig__load)
|
||||
singleton_class.alias_method(:__orig__load, :load) unless singleton_class.method_defined?(:__orig__load)
|
||||
def self.load
|
||||
__orig__load if safeExists?("Data/#{self::DATA_FILENAME}")
|
||||
end
|
||||
|
||||
@@ -167,7 +167,9 @@ module GameData
|
||||
end
|
||||
end
|
||||
pkmn.happiness = pkmn_data[:happiness] if pkmn_data[:happiness]
|
||||
pkmn.name = pkmn_data[:real_name] if !nil_or_empty?(pkmn_data[:real_name])
|
||||
if !nil_or_empty?(pkmn_data[:real_name])
|
||||
pkmn.name = pbGetMessageFromHash(MessageTypes::POKEMON_NICKNAMES, pkmn_data[:real_name])
|
||||
end
|
||||
if pkmn_data[:shadowness]
|
||||
pkmn.makeShadow
|
||||
pkmn.shiny = false
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -739,103 +739,3 @@ def pbHoneyGather(pkmn)
|
||||
return unless rand(100) < chance
|
||||
pkmn.item = :HONEY
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
# Deprecated methods
|
||||
#===============================================================================
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbNewBattleScene
|
||||
Deprecation.warn_method("pbNewBattleScene", "v21", "BattleCreationHelperMethods.create_battle_scene")
|
||||
return BattleCreationHelperMethods.create_battle_scene
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbPrepareBattle(battle)
|
||||
Deprecation.warn_method("pbPrepareBattle", "v21", "BattleCreationHelperMethods.prepare_battle(battle)")
|
||||
BattleCreationHelperMethods.prepare_battle(battle)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbWildBattleCore(*args)
|
||||
Deprecation.warn_method("pbWildBattleCore", "v21", "WildBattle.start_core(species, level)")
|
||||
return WildBattle.start_core(*args)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbWildBattle(species, level, outcomeVar = 1, canRun = true, canLose = false)
|
||||
Deprecation.warn_method("pbWildBattle", "v21", "WildBattle.start(species, level)")
|
||||
setBattleRule("outcomeVar", outcomeVar) if outcomeVar != 1
|
||||
setBattleRule("cannotRun") if !canRun
|
||||
setBattleRule("canLose") if canLose
|
||||
return WildBattle.start(species, level)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbDoubleWildBattle(species1, level1, species2, level2,
|
||||
outcomeVar = 1, canRun = true, canLose = false)
|
||||
Deprecation.warn_method("pbDoubleWildBattle", "v21", "WildBattle.start(pkmn1, pkmn2)")
|
||||
setBattleRule("outcomeVar", outcomeVar) if outcomeVar != 1
|
||||
setBattleRule("cannotRun") if !canRun
|
||||
setBattleRule("canLose") if canLose
|
||||
setBattleRule("double")
|
||||
return WildBattle.start(species1, level1, species2, level2)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbTripleWildBattle(species1, level1, species2, level2, species3, level3,
|
||||
outcomeVar = 1, canRun = true, canLose = false)
|
||||
Deprecation.warn_method("pbTripleWildBattle", "v21", "WildBattle.start(pkmn1, pkmn2, pkmn3)")
|
||||
setBattleRule("outcomeVar", outcomeVar) if outcomeVar != 1
|
||||
setBattleRule("cannotRun") if !canRun
|
||||
setBattleRule("canLose") if canLose
|
||||
setBattleRule("triple")
|
||||
return WildBattle.start(species1, level1, species2, level2, species3, level3)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbTrainerBattleCore(*args)
|
||||
Deprecation.warn_method("pbTrainerBattleCore", "v21", "TrainerBattle.start_core(trainer_type, trainer_name, trainer_version)")
|
||||
return TrainerBattle.start_core(*args)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbTrainerBattle(trainerID, trainerName, endSpeech = nil,
|
||||
doubleBattle = false, trainerPartyID = 0, canLose = false, outcomeVar = 1)
|
||||
Deprecation.warn_method("pbTrainerBattle", "v21", "TrainerBattle.start(trainer_type, trainer_name, trainer_version)")
|
||||
setBattleRule("outcomeVar", outcomeVar) if outcomeVar != 1
|
||||
setBattleRule("canLose") if canLose
|
||||
setBattleRule("double") if doubleBattle
|
||||
return TrainerBattle.start(trainerID, trainerName, trainerPartyID)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbDoubleTrainerBattle(trainerID1, trainerName1, trainerPartyID1, endSpeech1,
|
||||
trainerID2, trainerName2, trainerPartyID2 = 0, endSpeech2 = nil,
|
||||
canLose = false, outcomeVar = 1)
|
||||
Deprecation.warn_method("pbDoubleTrainerBattle", "v21", "TrainerBattle.start(trainer1, trainer2)")
|
||||
setBattleRule("outcomeVar", outcomeVar) if outcomeVar != 1
|
||||
setBattleRule("canLose") if canLose
|
||||
setBattleRule("double")
|
||||
return TrainerBattle.start(trainerID1, trainerName1, trainerPartyID1,
|
||||
trainerID2, trainerName2, trainerPartyID2)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbTripleTrainerBattle(trainerID1, trainerName1, trainerPartyID1, endSpeech1,
|
||||
trainerID2, trainerName2, trainerPartyID2, endSpeech2,
|
||||
trainerID3, trainerName3, trainerPartyID3 = 0, endSpeech3 = nil,
|
||||
canLose = false, outcomeVar = 1)
|
||||
Deprecation.warn_method("pbTripleTrainerBattle", "v21", "TrainerBattle.start(trainer1, trainer2, trainer3)")
|
||||
setBattleRule("outcomeVar", outcomeVar) if outcomeVar != 1
|
||||
setBattleRule("canLose") if canLose
|
||||
setBattleRule("triple")
|
||||
return TrainerBattle.start(trainerID1, trainerName1, trainerPartyID1,
|
||||
trainerID2, trainerName2, trainerPartyID2,
|
||||
trainerID3, trainerName3, trainerPartyID3)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbAfterBattle(outcome, can_lose)
|
||||
Deprecation.warn_method("pbAfterBattle", "v21", "BattleCreationHelperMethods.after_battle(outcome, can_lose)")
|
||||
BattleCreationHelperMethods.after_battle(outcome, can_lose)
|
||||
end
|
||||
|
||||
@@ -14,8 +14,8 @@ class PokemonGlobalMetadata
|
||||
attr_accessor :stepcount
|
||||
attr_accessor :pcItemStorage
|
||||
attr_accessor :mailbox
|
||||
attr_accessor :phoneNumbers # Deprecated
|
||||
attr_accessor :phoneTime # Deprecated
|
||||
attr_accessor :phoneNumbers # Deprecated - to be removed in v22
|
||||
attr_accessor :phoneTime # Deprecated - to be removed in v22
|
||||
attr_accessor :phone
|
||||
attr_accessor :partner
|
||||
attr_accessor :creditsPlayed
|
||||
|
||||
@@ -357,20 +357,6 @@ def pbSurfacing
|
||||
return false
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbTransferUnderwater(mapid, x, y, direction = $game_player.direction)
|
||||
Deprecation.warn_method("pbTransferUnderwater", "v21", '"Transfer Player" event command')
|
||||
pbFadeOutIn do
|
||||
$game_temp.player_new_map_id = mapid
|
||||
$game_temp.player_new_x = x
|
||||
$game_temp.player_new_y = y
|
||||
$game_temp.player_new_direction = direction
|
||||
$scene.transfer_player(false)
|
||||
$game_map.autoplay
|
||||
$game_map.refresh
|
||||
end
|
||||
end
|
||||
|
||||
EventHandlers.add(:on_player_interact, :diving,
|
||||
proc {
|
||||
if $PokemonGlobal.diving
|
||||
@@ -755,20 +741,6 @@ def pbEndSurf(_xOffset, _yOffset)
|
||||
return false
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbTransferSurfing(mapid, xcoord, ycoord, direction = $game_player.direction)
|
||||
Deprecation.warn_method("pbTransferSurfing", "v21", '"Transfer Player" event command')
|
||||
pbFadeOutIn do
|
||||
$game_temp.player_new_map_id = mapid
|
||||
$game_temp.player_new_x = xcoord
|
||||
$game_temp.player_new_y = ycoord
|
||||
$game_temp.player_new_direction = direction
|
||||
$scene.transfer_player(false)
|
||||
$game_map.autoplay
|
||||
$game_map.refresh
|
||||
end
|
||||
end
|
||||
|
||||
EventHandlers.add(:on_player_interact, :start_surfing,
|
||||
proc {
|
||||
next if $PokemonGlobal.surfing
|
||||
|
||||
@@ -562,60 +562,3 @@ EventHandlers.add(:on_player_step_taken, :update_day_care,
|
||||
$PokemonGlobal.day_care.update_on_step_taken
|
||||
}
|
||||
)
|
||||
|
||||
#===============================================================================
|
||||
# Deprecated methods
|
||||
#===============================================================================
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbDayCareDeposited
|
||||
Deprecation.warn_method("pbDayCareDeposited", "v21", "DayCare.count")
|
||||
return DayCare.count
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbDayCareGetDeposited(index, name_var, cost_var)
|
||||
Deprecation.warn_method("pbDayCareGetDeposited", "v21", "DayCare.get_details(index, name_var, cost_var)")
|
||||
DayCare.get_details(index, name_var, cost_var)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbDayCareGetLevelGain(index, name_var, level_var)
|
||||
Deprecation.warn_method("pbDayCareGetLevelGain", "v21", "DayCare.get_level_gain(index, name_var, level_var)")
|
||||
DayCare.get_level_gain(index, name_var, level_var)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbDayCareDeposit(party_index)
|
||||
Deprecation.warn_method("pbDayCareDeposit", "v21", "DayCare.deposit(party_index)")
|
||||
DayCare.deposit(party_index)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbDayCareWithdraw(index)
|
||||
Deprecation.warn_method("pbDayCareWithdraw", "v21", "DayCare.withdraw(index)")
|
||||
DayCare.withdraw(index)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbDayCareChoose(text, choice_var)
|
||||
Deprecation.warn_method("pbDayCareChoose", "v21", "DayCare.choose(text, choice_var)")
|
||||
DayCare.choose(text, choice_var)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbDayCareGetCompatibility(compat_var)
|
||||
Deprecation.warn_method("pbDayCareGetCompatibility", "v21", "DayCare.get_compatibility(compat_var)")
|
||||
DayCare.get_compatibility(compat_var)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbEggGenerated?
|
||||
Deprecation.warn_method("pbEggGenerated?", "v21", "DayCare.egg_generated?")
|
||||
return DayCare.egg_generated?
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbDayCareGenerateEgg
|
||||
Deprecation.warn_method("pbDayCareGenerateEgg", "v21", "DayCare.collect_egg")
|
||||
DayCare.collect_egg
|
||||
end
|
||||
|
||||
@@ -587,7 +587,8 @@ EventHandlers.add(:on_frame_update, :phone_call_counter,
|
||||
#===============================================================================
|
||||
# Deprecated.
|
||||
#===============================================================================
|
||||
# Called by events.
|
||||
# Called by events. Make your event look like this instead:
|
||||
#
|
||||
# @>Conditional Branch: Phone.can_add?(trainer_type, name, start_version)
|
||||
# @>Text: Let me register you.
|
||||
# @>Show Choices: Yes, No
|
||||
@@ -602,6 +603,7 @@ EventHandlers.add(:on_frame_update, :phone_call_counter,
|
||||
# : Branch End
|
||||
# : Branch End
|
||||
# @>
|
||||
#
|
||||
# @deprecated This method is slated to be removed in v22.
|
||||
def pbPhoneRegisterBattle(message, event, trainer_type, name, versions_count)
|
||||
Deprecation.warn_method("pbPhoneRegisterBattle", "v22", "several scripts and event commands; see def pbPhoneRegisterBattle")
|
||||
|
||||
@@ -328,98 +328,3 @@ module ItemStorageHelper
|
||||
return ret
|
||||
end
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
# Deprecated methods
|
||||
#===============================================================================
|
||||
class PokemonBag
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbQuantity(item)
|
||||
Deprecation.warn_method("pbQuantity", "v21", "$bag.quantity(item)")
|
||||
return quantity(item)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbHasItem?(item)
|
||||
Deprecation.warn_method("pbHasItem?", "v21", "$bag.has?(item)")
|
||||
return has?(item)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbCanStore?(item, quantity = 1)
|
||||
Deprecation.warn_method("pbCanStore?", "v21", "$bag.can_add?(item, quantity)")
|
||||
return can_add?(item, quantity)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbStoreItem(item, quantity = 1)
|
||||
Deprecation.warn_method("pbStoreItem", "v21", "$bag.add(item, quantity)")
|
||||
return add(item, quantity)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbStoreAllOrNone(item, quantity = 1)
|
||||
Deprecation.warn_method("pbStoreAllOrNone", "v21", "$bag.add_all(item, quantity)")
|
||||
return add_all(item, quantity)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbChangeItem(old_item, new_item)
|
||||
Deprecation.warn_method("pbChangeItem", "v21", "$bag.replace_item(old_item, new_item)")
|
||||
return replace_item(old_item, new_item)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbDeleteItem(item, quantity = 1)
|
||||
Deprecation.warn_method("pbDeleteItem", "v21", "$bag.remove(item, quantity)")
|
||||
return remove(item, quantity)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbIsRegistered?(item)
|
||||
Deprecation.warn_method("pbIsRegistered?", "v21", "$bag.registered?(item)")
|
||||
return registered?(item)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbRegisterItem(item)
|
||||
Deprecation.warn_method("pbRegisterItem", "v21", "$bag.register(item)")
|
||||
register(item)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbUnregisterItem(item)
|
||||
Deprecation.warn_method("pbUnregisterItem", "v21", "$bag.unregister(item)")
|
||||
unregister(item)
|
||||
end
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbQuantity(item)
|
||||
Deprecation.warn_method("pbQuantity", "v21", "$bag.quantity(item)")
|
||||
return $bag.quantity(item)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbHasItem?(item)
|
||||
Deprecation.warn_method("pbHasItem?", "v21", "$bag.has?(item)")
|
||||
return $bag.has?(item)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbCanStore?(item, quantity = 1)
|
||||
Deprecation.warn_method("pbCanStore?", "v21", "$bag.can_add?(item, quantity)")
|
||||
return $bag.can_add?(item, quantity)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbStoreItem(item, quantity = 1)
|
||||
Deprecation.warn_method("pbStoreItem", "v21", "$bag.add(item, quantity)")
|
||||
return $bag.add(item, quantity)
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
def pbStoreAllOrNone(item, quantity = 1)
|
||||
Deprecation.warn_method("pbStoreAllOrNone", "v21", "$bag.add_all(item, quantity)")
|
||||
return $bag.add_all(item, quantity)
|
||||
end
|
||||
|
||||
@@ -314,15 +314,15 @@ class Pokemon
|
||||
return species_data.types.clone
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
# @deprecated This method is slated to be removed in v22.
|
||||
def type1
|
||||
Deprecation.warn_method("type1", "v21", "pkmn.types")
|
||||
Deprecation.warn_method("type1", "v22", "pkmn.types")
|
||||
return types[0]
|
||||
end
|
||||
|
||||
# @deprecated This method is slated to be removed in v21.
|
||||
# @deprecated This method is slated to be removed in v22.
|
||||
def type2
|
||||
Deprecation.warn_method("type2", "v21", "pkmn.types")
|
||||
Deprecation.warn_method("type2", "v22", "pkmn.types")
|
||||
return types[1] || types[0]
|
||||
end
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ class Pokemon
|
||||
alias totalpp total_pp
|
||||
|
||||
def function_code; return GameData::Move.get(@id).function_code; end
|
||||
def base_damage; return GameData::Move.get(@id).base_damage; end
|
||||
def power; return GameData::Move.get(@id).power; end
|
||||
def type; return GameData::Move.get(@id).type; end
|
||||
def category; return GameData::Move.get(@id).category; end
|
||||
def accuracy; return GameData::Move.get(@id).accuracy; end
|
||||
@@ -60,6 +60,12 @@ class Pokemon
|
||||
def description; return GameData::Move.get(@id).description; end
|
||||
def hidden_move?; return GameData::Move.get(@id).hidden_move?; end
|
||||
|
||||
# @deprecated This method is slated to be removed in v22.
|
||||
def base_damage
|
||||
Deprecation.warn_method("base_damage", "v22", "power")
|
||||
return @power
|
||||
end
|
||||
|
||||
def display_type(pkmn); return GameData::Move.get(@id).display_type(pkmn, self); end
|
||||
def display_category(pkmn); return GameData::Move.get(@id).display_category(pkmn, self); end
|
||||
def display_damage(pkmn); return GameData::Move.get(@id).display_damage(pkmn, self); end
|
||||
|
||||
@@ -37,7 +37,7 @@ def pbNewTrainer(tr_type, tr_name, tr_version, save_changes = true)
|
||||
if save_changes
|
||||
trainer_hash = {
|
||||
:trainer_type => tr_type,
|
||||
:name => tr_name,
|
||||
:real_name => tr_name,
|
||||
:version => tr_version,
|
||||
:pokemon => []
|
||||
}
|
||||
@@ -50,7 +50,7 @@ def pbNewTrainer(tr_type, tr_name, tr_version, save_changes = true)
|
||||
)
|
||||
end
|
||||
# Add trainer's data to records
|
||||
trainer_hash[:id] = [trainer_hash[:trainer_type], trainer_hash[:name], trainer_hash[:version]]
|
||||
trainer_hash[:id] = [trainer_hash[:trainer_type], trainer_hash[:real_name], trainer_hash[:version]]
|
||||
GameData::Trainer.register(trainer_hash)
|
||||
GameData::Trainer.save
|
||||
pbConvertTrainerData
|
||||
|
||||
@@ -84,12 +84,12 @@ class MoveRelearner_Scene
|
||||
0, 78 + ((@sprites["commands"].index - @sprites["commands"].top_item) * 64),
|
||||
0, 0, 258, 72])
|
||||
selMoveData = GameData::Move.get(@moves[@sprites["commands"].index])
|
||||
basedamage = selMoveData.display_damage(@pokemon)
|
||||
power = selMoveData.display_damage(@pokemon)
|
||||
category = selMoveData.display_category(@pokemon)
|
||||
accuracy = selMoveData.display_accuracy(@pokemon)
|
||||
textpos.push([_INTL("CATEGORY"), 272, 120, 0, Color.new(248, 248, 248), Color.black])
|
||||
textpos.push([_INTL("POWER"), 272, 152, 0, Color.new(248, 248, 248), Color.black])
|
||||
textpos.push([basedamage <= 1 ? basedamage == 1 ? "???" : "---" : sprintf("%d", basedamage),
|
||||
textpos.push([power <= 1 ? power == 1 ? "???" : "---" : sprintf("%d", power),
|
||||
468, 152, 2, Color.new(64, 64, 64), Color.new(176, 176, 176)])
|
||||
textpos.push([_INTL("ACCURACY"), 272, 184, 0, Color.new(248, 248, 248), Color.black])
|
||||
textpos.push([accuracy == 0 ? "---" : "#{accuracy}%",
|
||||
|
||||
@@ -76,12 +76,12 @@ def pbGetLegalMoves2(species, maxlevel)
|
||||
# If we have a move that always hits, remove all other moves with no
|
||||
# effect of the same type and <= base power
|
||||
if md.accuracy == 0 && move2[1].function_code == "None" &&
|
||||
md.type == move2[1].type && md.base_damage >= move2[1].base_damage
|
||||
md.type == move2[1].type && md.power >= move2[1].power
|
||||
deleteAll.call(moves, move2[0])
|
||||
# If we have two status moves that have the same function code, delete the
|
||||
# one with lower accuracy (Supersonic vs. Confuse Ray, etc.)
|
||||
elsif md.function_code == move2[1].function_code && md.base_damage == 0 &&
|
||||
move2[1].base_damage == 0 && md.accuracy > move2[1].accuracy
|
||||
elsif md.function_code == move2[1].function_code && md.power == 0 &&
|
||||
move2[1].power == 0 && md.accuracy > move2[1].accuracy
|
||||
deleteAll.call(moves, move2[0])
|
||||
# Delete poison-causing moves if we have a move that causes toxic
|
||||
elsif md.function_code == "BadPoisonTarget" && move2[1].function_code == "PoisonTarget"
|
||||
@@ -90,11 +90,11 @@ def pbGetLegalMoves2(species, maxlevel)
|
||||
# them is damaging and has 10/15/the same PP as the other move and EITHER
|
||||
# does more damage than the other move OR does the same damage but is more
|
||||
# accurate, delete the other move (Surf, Flamethrower, Thunderbolt, etc.)
|
||||
elsif md.function_code == move2[1].function_code && md.base_damage != 0 &&
|
||||
elsif md.function_code == move2[1].function_code && md.power != 0 &&
|
||||
md.type == move2[1].type &&
|
||||
(md.total_pp == 15 || md.total_pp == 10 || md.total_pp == move2[1].total_pp) &&
|
||||
(md.base_damage > move2[1].base_damage ||
|
||||
(md.base_damage == move2[1].base_damage && md.accuracy > move2[1].accuracy))
|
||||
(md.power > move2[1].power ||
|
||||
(md.power == move2[1].power && md.accuracy > move2[1].accuracy))
|
||||
deleteAll.call(moves, move2[0])
|
||||
end
|
||||
end
|
||||
@@ -107,15 +107,15 @@ def addMove(moves, move, base)
|
||||
return if moves.include?(data.id)
|
||||
return if [:BUBBLE, :BUBBLEBEAM].include?(data.id) # Never add these moves
|
||||
count = base + 1 # Number of times to add move to moves
|
||||
count = base if data.function_code == "None" && data.base_damage <= 40
|
||||
if data.base_damage <= 30 || [:GROWL, :TAILWHIP, :LEER].include?(data.id)
|
||||
count = base if data.function_code == "None" && data.power <= 40
|
||||
if data.power <= 30 || [:GROWL, :TAILWHIP, :LEER].include?(data.id)
|
||||
count = base
|
||||
end
|
||||
if data.base_damage >= 60 ||
|
||||
if data.power >= 60 ||
|
||||
[:REFLECT, :LIGHTSCREEN, :SAFEGUARD, :SUBSTITUTE, :FAKEOUT].include?(data.id)
|
||||
count = base + 2
|
||||
end
|
||||
count = base + 3 if data.base_damage >= 80 && data.type == :NORMAL
|
||||
count = base + 3 if data.power >= 80 && data.type == :NORMAL
|
||||
if [:PROTECT, :DETECT, :TOXIC, :AERIALACE, :WILLOWISP, :SPORE, :THUNDERWAVE,
|
||||
:HYPNOSIS, :CONFUSERAY, :ENDURE, :SWORDSDANCE].include?(data.id)
|
||||
count = base + 3
|
||||
@@ -127,11 +127,11 @@ end
|
||||
# with a higher base damage than it.
|
||||
def hasMorePowerfulMove(moves, thismove)
|
||||
thisdata = GameData::Move.get(thismove)
|
||||
return false if thisdata.base_damage == 0
|
||||
return false if thisdata.power == 0
|
||||
moves.each do |move|
|
||||
next if !move
|
||||
moveData = GameData::Move.get(move)
|
||||
if moveData.type == thisdata.type && moveData.base_damage > thisdata.base_damage
|
||||
if moveData.type == thisdata.type && moveData.power > thisdata.power
|
||||
return true
|
||||
end
|
||||
end
|
||||
@@ -297,14 +297,14 @@ def pbRandomPokemonFromRule(rules, trainer)
|
||||
!((sketch || !moves.include?(rest)) && rand(100) < 20)
|
||||
next
|
||||
end
|
||||
totalbasedamage = 0
|
||||
total_power = 0
|
||||
hasPhysical = false
|
||||
hasSpecial = false
|
||||
hasNormal = false
|
||||
newmoves.each do |move|
|
||||
d = GameData::Move.get(move)
|
||||
next if d.base_damage == 0
|
||||
totalbasedamage += d.base_damage
|
||||
next if d.power == 0
|
||||
total_power += d.power
|
||||
hasNormal = true if d.type == :NORMAL
|
||||
hasPhysical = true if d.category == 0
|
||||
hasSpecial = true if d.category == 1
|
||||
@@ -318,9 +318,9 @@ def pbRandomPokemonFromRule(rules, trainer)
|
||||
next
|
||||
end
|
||||
r = rand(10)
|
||||
next if r > 6 && totalbasedamage > 180
|
||||
next if r > 8 && totalbasedamage > 140
|
||||
next if totalbasedamage == 0 && rand(100) < 95
|
||||
next if r > 6 && total_power > 180
|
||||
next if r > 8 && total_power > 140
|
||||
next if total_power == 0 && rand(100) < 95
|
||||
############
|
||||
# Moves accepted
|
||||
if hasPhysical && !hasSpecial
|
||||
|
||||
@@ -309,7 +309,7 @@ end
|
||||
#===============================================================================
|
||||
def pbDecideWinnerEffectiveness(move, otype1, otype2, ability, scores)
|
||||
data = GameData::Move.get(move)
|
||||
return 0 if data.base_damage == 0
|
||||
return 0 if data.power == 0
|
||||
atype = data.type
|
||||
typemod = 1.0
|
||||
if ability != :LEVITATE || data.type != :GROUND
|
||||
|
||||
@@ -525,7 +525,7 @@ def pbTrainerBattleEditor
|
||||
else
|
||||
trainer_hash = {
|
||||
:trainer_type => data[0],
|
||||
:name => data[1],
|
||||
:real_name => data[1],
|
||||
:version => data[2],
|
||||
:lose_text => data[3],
|
||||
:pokemon => party,
|
||||
@@ -533,7 +533,7 @@ def pbTrainerBattleEditor
|
||||
:pbs_file_suffix => tr_data.pbs_file_suffix
|
||||
}
|
||||
# Add trainer type's data to records
|
||||
trainer_hash[:id] = [trainer_hash[:trainer_type], trainer_hash[:name], trainer_hash[:version]]
|
||||
trainer_hash[:id] = [trainer_hash[:trainer_type], trainer_hash[:real_name], trainer_hash[:version]]
|
||||
GameData::Trainer.register(trainer_hash)
|
||||
if data[0] != old_type || data[1] != old_name || data[2] != old_version
|
||||
GameData::Trainer::DATA.delete([old_type, old_name, old_version])
|
||||
@@ -568,7 +568,7 @@ def pbTrainerBattleEditor
|
||||
if t
|
||||
trainer_hash = {
|
||||
:trainer_type => tr_type,
|
||||
:name => tr_name,
|
||||
:real_name => tr_name,
|
||||
:version => tr_version,
|
||||
:pokemon => []
|
||||
}
|
||||
@@ -581,7 +581,7 @@ def pbTrainerBattleEditor
|
||||
)
|
||||
end
|
||||
# Add trainer's data to records
|
||||
trainer_hash[:id] = [trainer_hash[:trainer_type], trainer_hash[:name], trainer_hash[:version]]
|
||||
trainer_hash[:id] = [trainer_hash[:trainer_type], trainer_hash[:real_name], trainer_hash[:version]]
|
||||
GameData::Trainer.register(trainer_hash)
|
||||
pbMessage(_INTL("The Trainer battle was added."))
|
||||
modified = true
|
||||
@@ -607,7 +607,7 @@ module TrainerPokemonProperty
|
||||
oldsetting = [
|
||||
initsetting[:species],
|
||||
initsetting[:level],
|
||||
initsetting[:name],
|
||||
initsetting[:real_name],
|
||||
initsetting[:form],
|
||||
initsetting[:gender],
|
||||
initsetting[:shininess],
|
||||
@@ -629,7 +629,7 @@ module TrainerPokemonProperty
|
||||
pkmn_properties = [
|
||||
[_INTL("Species"), SpeciesProperty, _INTL("Species of the Pokémon.")],
|
||||
[_INTL("Level"), NonzeroLimitProperty.new(max_level), _INTL("Level of the Pokémon (1-{1}).", max_level)],
|
||||
[_INTL("Name"), StringProperty, _INTL("Name of the Pokémon.")],
|
||||
[_INTL("Name"), StringProperty, _INTL("Nickname of the Pokémon.")],
|
||||
[_INTL("Form"), LimitProperty2.new(999), _INTL("Form of the Pokémon.")],
|
||||
[_INTL("Gender"), GenderProperty, _INTL("Gender of the Pokémon.")],
|
||||
[_INTL("Shiny"), BooleanProperty2, _INTL("If set to true, the Pokémon is a different-colored Pokémon.")],
|
||||
@@ -655,7 +655,7 @@ module TrainerPokemonProperty
|
||||
ret = {
|
||||
:species => oldsetting[0],
|
||||
:level => oldsetting[1],
|
||||
:name => oldsetting[2],
|
||||
:real_name => oldsetting[2],
|
||||
:form => oldsetting[3],
|
||||
:gender => oldsetting[4],
|
||||
:shininess => oldsetting[5],
|
||||
|
||||
@@ -213,6 +213,7 @@ class SpritePositioner
|
||||
break
|
||||
elsif Input.trigger?(Input::USE)
|
||||
pbPlayDecisionSE
|
||||
@metricsChanged = true if metrics_data.shadow_size != oldval
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
@@ -534,7 +534,7 @@ def pbSelectSE(canvas, audio)
|
||||
cmdwin.update
|
||||
maxsizewindow.update
|
||||
if maxsizewindow.changed?(3) && animfiles.length > 0 # Play Sound
|
||||
fname = (cmdwin.index == 0) ? "Cries/001Cry" : "Anim/" + filename
|
||||
fname = (cmdwin.index == 0) ? "Cries/000" : "Anim/" + filename
|
||||
pbSEPlay(RPG::AudioFile.new(fname, maxsizewindow.value(1), maxsizewindow.value(2)))
|
||||
end
|
||||
pbSEStop if maxsizewindow.changed?(4) && animfiles.length > 0 # Stop Sound
|
||||
@@ -572,7 +572,6 @@ def pbSelectBG(canvas, timing)
|
||||
# animfiles.concat(Dir.glob("*.jpeg"))
|
||||
# animfiles.concat(Dir.glob("*.bmp"))
|
||||
end
|
||||
animfiles.map! { |f| File.basename(f, ".*") }
|
||||
animfiles.uniq!
|
||||
animfiles.sort! { |a, b| a.downcase <=> b.downcase }
|
||||
cmdwin = pbListWindow(animfiles, 320)
|
||||
@@ -598,7 +597,7 @@ def pbSelectBG(canvas, timing)
|
||||
cmdwin.update
|
||||
maxsizewindow.update
|
||||
if maxsizewindow.changed?(8) # OK
|
||||
timing.name = filename
|
||||
timing.name = File.basename(filename, ".*")
|
||||
timing.bgX = maxsizewindow.value(1)
|
||||
timing.bgY = maxsizewindow.value(2)
|
||||
timing.opacity = maxsizewindow.value(3)
|
||||
|
||||
@@ -862,9 +862,9 @@ module Compiler
|
||||
# Get all data files and PBS files to be checked for their last modified times
|
||||
data_files = GameData.get_all_data_filenames
|
||||
data_files += [ # Extra .dat files for data that isn't a GameData class
|
||||
"map_connections.dat",
|
||||
"regional_dexes.dat",
|
||||
"trainer_lists.dat"
|
||||
["map_connections.dat", true],
|
||||
["regional_dexes.dat", true],
|
||||
["trainer_lists.dat", true]
|
||||
]
|
||||
text_files = get_all_pbs_files_to_compile
|
||||
latestDataTime = 0
|
||||
@@ -880,16 +880,16 @@ module Compiler
|
||||
mustCompile = true
|
||||
end
|
||||
# Check data files for their latest modify time
|
||||
data_files.each do |filename|
|
||||
if safeExists?("Data/" + filename)
|
||||
data_files.each do |filename| # filename = [string, boolean (whether mandatory)]
|
||||
if safeExists?("Data/" + filename[0])
|
||||
begin
|
||||
File.open("Data/#{filename}") do |file|
|
||||
File.open("Data/#{filename[0]}") do |file|
|
||||
latestDataTime = [latestDataTime, file.mtime.to_i].max
|
||||
end
|
||||
rescue SystemCallError
|
||||
mustCompile = true
|
||||
end
|
||||
elsif filename != "shadow_pokemon.dat"
|
||||
elsif filename[1]
|
||||
mustCompile = true
|
||||
break
|
||||
end
|
||||
@@ -911,9 +911,9 @@ module Compiler
|
||||
mustCompile = true if Input.press?(Input::CTRL)
|
||||
# Delete old data files in preparation for recompiling
|
||||
if mustCompile
|
||||
data_files.length.times do |i|
|
||||
data_files.each do |filename|
|
||||
begin
|
||||
File.delete("Data/#{data_files[i]}") if safeExists?("Data/#{data_files[i]}")
|
||||
File.delete("Data/#{filename[0]}") if safeExists?("Data/#{filename[0]}")
|
||||
rescue SystemCallError
|
||||
end
|
||||
end
|
||||
@@ -924,9 +924,9 @@ module Compiler
|
||||
e = $!
|
||||
raise e if e.class.to_s == "Reset" || e.is_a?(Reset) || e.is_a?(SystemExit)
|
||||
pbPrintException(e)
|
||||
data_files.length.times do |i|
|
||||
data_files.each do |filename|
|
||||
begin
|
||||
File.delete("Data/#{data_files[i]}")
|
||||
File.delete("Data/#{filename[0]}") if safeExists?("Data/#{filename[0]}")
|
||||
rescue SystemCallError
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2,6 +2,9 @@ module Compiler
|
||||
module_function
|
||||
|
||||
def compile_PBS_file_generic(game_data, *paths)
|
||||
if game_data.const_defined?(:OPTIONAL) && game_data::OPTIONAL
|
||||
return if paths.none? { |p| safeExists?(p) }
|
||||
end
|
||||
game_data::DATA.clear
|
||||
schema = game_data.schema
|
||||
# Read from PBS file(s)
|
||||
@@ -212,12 +215,12 @@ module Compiler
|
||||
end
|
||||
|
||||
def validate_compiled_move(hash)
|
||||
if (hash[:category] || 2) == 2 && (hash[:base_damage] || 0) != 0
|
||||
if (hash[:category] || 2) == 2 && (hash[:power] || 0) != 0
|
||||
raise _INTL("Move {1} is defined as a Status move with a non-zero base damage.\r\n{2}",
|
||||
hash[:name], FileLineData.linereport)
|
||||
elsif (hash[:category] || 2) != 2 && (hash[:base_damage] || 0) == 0
|
||||
hash[:real_name], FileLineData.linereport)
|
||||
elsif (hash[:category] || 2) != 2 && (hash[:power] || 0) == 0
|
||||
print _INTL("Warning: Move {1} is defined as Physical or Special but has a base damage of 0. Changing it to a Status move.\r\n{2}",
|
||||
hash[:name], FileLineData.linereport)
|
||||
hash[:real_name], FileLineData.linereport)
|
||||
hash[:category] = 2
|
||||
end
|
||||
end
|
||||
@@ -542,7 +545,6 @@ module Compiler
|
||||
# Compile Shadow Pokémon data
|
||||
#=============================================================================
|
||||
def compile_shadow_pokemon(*paths)
|
||||
return if !safeExists?("PBS/shadow_pokemon.txt")
|
||||
compile_PBS_file_generic(GameData::ShadowPokemon, *paths) do |final_validate, hash|
|
||||
(final_validate) ? validate_all_compiled_shadow_pokemon : validate_compiled_shadow_pokemon(hash)
|
||||
end
|
||||
@@ -847,9 +849,9 @@ module Compiler
|
||||
pkmn[:level], max_level, FileLineData.linereport)
|
||||
end
|
||||
# Ensure valid name length
|
||||
if pkmn[:name] && pkmn[:name].length > Pokemon::MAX_NAME_SIZE
|
||||
if pkmn[:real_name] && pkmn[:real_name].length > Pokemon::MAX_NAME_SIZE
|
||||
raise _INTL("Invalid Pokémon nickname: {1} (must be 1-{2} characters).\r\n{3}",
|
||||
pkmn[:name], Pokemon::MAX_NAME_SIZE, FileLineData.linereport)
|
||||
pkmn[:real_name], Pokemon::MAX_NAME_SIZE, FileLineData.linereport)
|
||||
end
|
||||
# Ensure no duplicate moves
|
||||
pkmn[:moves].uniq! if pkmn[:moves]
|
||||
@@ -904,12 +906,17 @@ module Compiler
|
||||
# Get trainer names and lose texts for translating
|
||||
trainer_names = []
|
||||
lose_texts = []
|
||||
pokemon_nicknames = []
|
||||
GameData::Trainer.each do |trainer|
|
||||
trainer_names.push(trainer.real_name)
|
||||
lose_texts.push(trainer.real_lose_text)
|
||||
trainer.pokemon.each do |pkmn|
|
||||
pokemon_nicknames.push(pkmn[:real_name]) if !nil_or_empty?(pkmn[:real_name])
|
||||
end
|
||||
end
|
||||
MessageTypes.setMessagesAsHash(MessageTypes::TRAINER_NAMES, trainer_names)
|
||||
MessageTypes.setMessagesAsHash(MessageTypes::TRAINER_SPEECHES_LOSE, lose_texts)
|
||||
MessageTypes.setMessagesAsHash(MessageTypes::POKEMON_NICKNAMES, pokemon_nicknames)
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
Reference in New Issue
Block a user