mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-09 06:04:59 +00:00
Refactored ability/item/ball battle handlers, added "UltraBeast" species flag for Beast Ball
This commit is contained in:
@@ -0,0 +1,226 @@
|
||||
module Battle::CatchAndStoreMixin
|
||||
#=============================================================================
|
||||
# Store caught Pokémon
|
||||
#=============================================================================
|
||||
def pbStorePokemon(pkmn)
|
||||
# Nickname the Pokémon (unless it's a Shadow Pokémon)
|
||||
if !pkmn.shadowPokemon?
|
||||
if pbDisplayConfirm(_INTL("Would you like to give a nickname to {1}?", pkmn.name))
|
||||
nickname = @scene.pbNameEntry(_INTL("{1}'s nickname?", pkmn.speciesName), pkmn)
|
||||
pkmn.name = nickname
|
||||
end
|
||||
end
|
||||
# Store the Pokémon
|
||||
currentBox = @peer.pbCurrentBox
|
||||
storedBox = @peer.pbStorePokemon(pbPlayer,pkmn)
|
||||
if storedBox<0
|
||||
pbDisplayPaused(_INTL("{1} has been added to your party.",pkmn.name))
|
||||
@initialItems[0][pbPlayer.party.length-1] = pkmn.item_id if @initialItems
|
||||
return
|
||||
end
|
||||
# Messages saying the Pokémon was stored in a PC box
|
||||
creator = @peer.pbGetStorageCreatorName
|
||||
curBoxName = @peer.pbBoxName(currentBox)
|
||||
boxName = @peer.pbBoxName(storedBox)
|
||||
if storedBox!=currentBox
|
||||
if creator
|
||||
pbDisplayPaused(_INTL("Box \"{1}\" on {2}'s PC was full.",curBoxName,creator))
|
||||
else
|
||||
pbDisplayPaused(_INTL("Box \"{1}\" on someone's PC was full.",curBoxName))
|
||||
end
|
||||
pbDisplayPaused(_INTL("{1} was transferred to box \"{2}\".",pkmn.name,boxName))
|
||||
else
|
||||
if creator
|
||||
pbDisplayPaused(_INTL("{1} was transferred to {2}'s PC.",pkmn.name,creator))
|
||||
else
|
||||
pbDisplayPaused(_INTL("{1} was transferred to someone's PC.",pkmn.name))
|
||||
end
|
||||
pbDisplayPaused(_INTL("It was stored in box \"{1}\".",boxName))
|
||||
end
|
||||
end
|
||||
|
||||
# Register all caught Pokémon in the Pokédex, and store them.
|
||||
def pbRecordAndStoreCaughtPokemon
|
||||
@caughtPokemon.each do |pkmn|
|
||||
pbSetCaught(pkmn)
|
||||
pbSetSeen(pkmn) # In case the form changed upon leaving battle
|
||||
# Record the Pokémon's species as owned in the Pokédex
|
||||
if !pbPlayer.owned?(pkmn.species)
|
||||
pbPlayer.pokedex.set_owned(pkmn.species)
|
||||
if $player.has_pokedex
|
||||
pbDisplayPaused(_INTL("{1}'s data was added to the Pokédex.",pkmn.name))
|
||||
pbPlayer.pokedex.register_last_seen(pkmn)
|
||||
@scene.pbShowPokedex(pkmn.species)
|
||||
end
|
||||
end
|
||||
# Record a Shadow Pokémon's species as having been caught
|
||||
pbPlayer.pokedex.set_shadow_pokemon_owned(pkmn.species) if pkmn.shadowPokemon?
|
||||
# Store caught Pokémon
|
||||
pbStorePokemon(pkmn)
|
||||
end
|
||||
@caughtPokemon.clear
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
# Throw a Poké Ball
|
||||
#=============================================================================
|
||||
def pbThrowPokeBall(idxBattler,ball,catch_rate=nil,showPlayer=false)
|
||||
# Determine which Pokémon you're throwing the Poké Ball at
|
||||
battler = nil
|
||||
if opposes?(idxBattler)
|
||||
battler = @battlers[idxBattler]
|
||||
else
|
||||
battler = @battlers[idxBattler].pbDirectOpposing(true)
|
||||
end
|
||||
battler = battler.allAllies[0] if battler.fainted?
|
||||
# Messages
|
||||
itemName = GameData::Item.get(ball).name
|
||||
if battler.fainted?
|
||||
if itemName.starts_with_vowel?
|
||||
pbDisplay(_INTL("{1} threw an {2}!",pbPlayer.name,itemName))
|
||||
else
|
||||
pbDisplay(_INTL("{1} threw a {2}!",pbPlayer.name,itemName))
|
||||
end
|
||||
pbDisplay(_INTL("But there was no target..."))
|
||||
return
|
||||
end
|
||||
if itemName.starts_with_vowel?
|
||||
pbDisplayBrief(_INTL("{1} threw an {2}!",pbPlayer.name,itemName))
|
||||
else
|
||||
pbDisplayBrief(_INTL("{1} threw a {2}!",pbPlayer.name,itemName))
|
||||
end
|
||||
# Animation of opposing trainer blocking Poké Balls (unless it's a Snag Ball
|
||||
# at a Shadow Pokémon)
|
||||
if trainerBattle? && !(GameData::Item.get(ball).is_snag_ball? && battler.shadowPokemon?)
|
||||
@scene.pbThrowAndDeflect(ball,1)
|
||||
pbDisplay(_INTL("The Trainer blocked your Poké Ball! Don't be a thief!"))
|
||||
return
|
||||
end
|
||||
# Calculate the number of shakes (4=capture)
|
||||
pkmn = battler.pokemon
|
||||
@criticalCapture = false
|
||||
numShakes = pbCaptureCalc(pkmn,battler,catch_rate,ball)
|
||||
PBDebug.log("[Threw Poké Ball] #{itemName}, #{numShakes} shakes (4=capture)")
|
||||
# Animation of Ball throw, absorb, shake and capture/burst out
|
||||
@scene.pbThrow(ball,numShakes,@criticalCapture,battler.index,showPlayer)
|
||||
# Outcome message
|
||||
case numShakes
|
||||
when 0
|
||||
pbDisplay(_INTL("Oh no! The Pokémon broke free!"))
|
||||
Battle::PokeBallEffects.onFailCatch(ball, self, battler)
|
||||
when 1
|
||||
pbDisplay(_INTL("Aww! It appeared to be caught!"))
|
||||
Battle::PokeBallEffects.onFailCatch(ball, self, battler)
|
||||
when 2
|
||||
pbDisplay(_INTL("Aargh! Almost had it!"))
|
||||
Battle::PokeBallEffects.onFailCatch(ball, self, battler)
|
||||
when 3
|
||||
pbDisplay(_INTL("Gah! It was so close, too!"))
|
||||
Battle::PokeBallEffects.onFailCatch(ball, self, battler)
|
||||
when 4
|
||||
pbDisplayBrief(_INTL("Gotcha! {1} was caught!",pkmn.name))
|
||||
@scene.pbThrowSuccess # Play capture success jingle
|
||||
pbRemoveFromParty(battler.index,battler.pokemonIndex)
|
||||
# Gain Exp
|
||||
if Settings::GAIN_EXP_FOR_CAPTURE
|
||||
battler.captured = true
|
||||
pbGainExp
|
||||
battler.captured = false
|
||||
end
|
||||
battler.pbReset
|
||||
if pbAllFainted?(battler.index)
|
||||
@decision = (trainerBattle?) ? 1 : 4 # Battle ended by win/capture
|
||||
end
|
||||
# Modify the Pokémon's properties because of the capture
|
||||
if GameData::Item.get(ball).is_snag_ball?
|
||||
pkmn.owner = Pokemon::Owner.new_from_trainer(pbPlayer)
|
||||
end
|
||||
Battle::PokeBallEffects.onCatch(ball, self, pkmn)
|
||||
pkmn.poke_ball = ball
|
||||
pkmn.makeUnmega if pkmn.mega?
|
||||
pkmn.makeUnprimal
|
||||
pkmn.update_shadow_moves if pkmn.shadowPokemon?
|
||||
pkmn.record_first_moves
|
||||
# Reset form
|
||||
pkmn.forced_form = nil if MultipleForms.hasFunction?(pkmn.species,"getForm")
|
||||
@peer.pbOnLeavingBattle(self,pkmn,true,true)
|
||||
# Make the Poké Ball and data box disappear
|
||||
@scene.pbHideCaptureBall(idxBattler)
|
||||
# Save the Pokémon for storage at the end of battle
|
||||
@caughtPokemon.push(pkmn)
|
||||
end
|
||||
if numShakes != 4
|
||||
@first_poke_ball = ball if !@poke_ball_failed
|
||||
@poke_ball_failed = true
|
||||
end
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
# Calculate how many shakes a thrown Poké Ball will make (4 = capture)
|
||||
#=============================================================================
|
||||
def pbCaptureCalc(pkmn,battler,catch_rate,ball)
|
||||
return 4 if $DEBUG && Input.press?(Input::CTRL)
|
||||
# Get a catch rate if one wasn't provided
|
||||
catch_rate = pkmn.species_data.catch_rate if !catch_rate
|
||||
# Modify catch_rate depending on the Poké Ball's effect
|
||||
if !pkmn.species_data.has_flag?("UltraBeast") || ball == :BEASTBALL
|
||||
catch_rate = Battle::PokeBallEffects.modifyCatchRate(ball, catch_rate, self, battler)
|
||||
else
|
||||
catch_rate /= 10
|
||||
end
|
||||
# First half of the shakes calculation
|
||||
a = battler.totalhp
|
||||
b = battler.hp
|
||||
x = ((3*a-2*b)*catch_rate.to_f)/(3*a)
|
||||
# Calculation modifiers
|
||||
if battler.status == :SLEEP || battler.status == :FROZEN
|
||||
x *= 2.5
|
||||
elsif battler.status != :NONE
|
||||
x *= 1.5
|
||||
end
|
||||
x = x.floor
|
||||
x = 1 if x<1
|
||||
# Definite capture, no need to perform randomness checks
|
||||
return 4 if x>=255 || Battle::PokeBallEffects.isUnconditional?(ball, self, battler)
|
||||
# Second half of the shakes calculation
|
||||
y = ( 65536 / ((255.0/x)**0.1875) ).floor
|
||||
# Critical capture check
|
||||
if Settings::ENABLE_CRITICAL_CAPTURES
|
||||
dex_modifier = 0
|
||||
numOwned = $player.pokedex.owned_count
|
||||
if numOwned>600
|
||||
dex_modifier = 5
|
||||
elsif numOwned>450
|
||||
dex_modifier = 4
|
||||
elsif numOwned>300
|
||||
dex_modifier = 3
|
||||
elsif numOwned>150
|
||||
dex_modifier = 2
|
||||
elsif numOwned>30
|
||||
dex_modifier = 1
|
||||
end
|
||||
dex_modifier *= 2 if $bag.has?(:CATCHINGCHARM)
|
||||
c = x * dex_modifier / 12
|
||||
# Calculate the number of shakes
|
||||
if c>0 && pbRandom(256)<c
|
||||
@criticalCapture = true
|
||||
return 4 if pbRandom(65536)<y
|
||||
return 0
|
||||
end
|
||||
end
|
||||
# Calculate the number of shakes
|
||||
numShakes = 0
|
||||
for i in 0...4
|
||||
break if numShakes<i
|
||||
numShakes += 1 if pbRandom(65536)<y
|
||||
end
|
||||
return numShakes
|
||||
end
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
class Battle
|
||||
include Battle::CatchAndStoreMixin
|
||||
end
|
||||
@@ -1,498 +0,0 @@
|
||||
module BattleHandlers
|
||||
# Battler's speed calculation
|
||||
SpeedCalcAbility = AbilityHandlerHash.new
|
||||
SpeedCalcItem = ItemHandlerHash.new
|
||||
# Battler's weight calculation
|
||||
WeightCalcAbility = AbilityHandlerHash.new
|
||||
WeightCalcItem = ItemHandlerHash.new # Float Stone
|
||||
# Battler's HP/stat changed
|
||||
HPHealItem = ItemHandlerHash.new
|
||||
AbilityOnHPDroppedBelowHalf = AbilityHandlerHash.new
|
||||
ItemOnStatDropped = ItemHandlerHash.new
|
||||
# Battler's status problem
|
||||
StatusCheckAbilityNonIgnorable = AbilityHandlerHash.new # Comatose
|
||||
StatusImmunityAbility = AbilityHandlerHash.new
|
||||
StatusImmunityAbilityNonIgnorable = AbilityHandlerHash.new
|
||||
StatusImmunityAllyAbility = AbilityHandlerHash.new
|
||||
AbilityOnStatusInflicted = AbilityHandlerHash.new # Synchronize
|
||||
StatusCureItem = ItemHandlerHash.new
|
||||
StatusCureAbility = AbilityHandlerHash.new
|
||||
# Battler's stat stages
|
||||
StatLossImmunityAbility = AbilityHandlerHash.new
|
||||
StatLossImmunityAbilityNonIgnorable = AbilityHandlerHash.new # Full Metal Body
|
||||
StatLossImmunityAllyAbility = AbilityHandlerHash.new # Flower Veil
|
||||
AbilityOnStatGain = AbilityHandlerHash.new # None!
|
||||
AbilityOnStatLoss = AbilityHandlerHash.new
|
||||
# Priority and turn order
|
||||
PriorityChangeAbility = AbilityHandlerHash.new
|
||||
PriorityBracketChangeAbility = AbilityHandlerHash.new # Stall
|
||||
PriorityBracketChangeItem = ItemHandlerHash.new
|
||||
PriorityBracketUseAbility = AbilityHandlerHash.new # None!
|
||||
PriorityBracketUseItem = ItemHandlerHash.new
|
||||
# Move usage failures
|
||||
AbilityOnFlinch = AbilityHandlerHash.new # Steadfast
|
||||
MoveBlockingAbility = AbilityHandlerHash.new
|
||||
MoveImmunityTargetAbility = AbilityHandlerHash.new
|
||||
UserItemOnMissing = ItemHandlerHash.new # Blunder Policy
|
||||
# Move usage
|
||||
MoveBaseTypeModifierAbility = AbilityHandlerHash.new
|
||||
# Accuracy calculation
|
||||
AccuracyCalcUserAbility = AbilityHandlerHash.new
|
||||
AccuracyCalcUserAllyAbility = AbilityHandlerHash.new # Victory Star
|
||||
AccuracyCalcTargetAbility = AbilityHandlerHash.new
|
||||
AccuracyCalcUserItem = ItemHandlerHash.new
|
||||
AccuracyCalcTargetItem = ItemHandlerHash.new
|
||||
# Damage calculation
|
||||
DamageCalcUserAbility = AbilityHandlerHash.new
|
||||
DamageCalcUserAllyAbility = AbilityHandlerHash.new
|
||||
DamageCalcTargetAbility = AbilityHandlerHash.new
|
||||
DamageCalcTargetAbilityNonIgnorable = AbilityHandlerHash.new
|
||||
DamageCalcTargetAllyAbility = AbilityHandlerHash.new
|
||||
DamageCalcUserItem = ItemHandlerHash.new
|
||||
DamageCalcTargetItem = ItemHandlerHash.new
|
||||
# Critical hit calculation
|
||||
CriticalCalcUserAbility = AbilityHandlerHash.new
|
||||
CriticalCalcTargetAbility = AbilityHandlerHash.new
|
||||
CriticalCalcUserItem = ItemHandlerHash.new
|
||||
CriticalCalcTargetItem = ItemHandlerHash.new # None!
|
||||
# Upon a move hitting a target
|
||||
TargetAbilityOnHit = AbilityHandlerHash.new
|
||||
UserAbilityOnHit = AbilityHandlerHash.new # Poison Touch
|
||||
TargetItemOnHit = ItemHandlerHash.new
|
||||
TargetItemOnHitPositiveBerry = ItemHandlerHash.new
|
||||
# Abilities/items that trigger at the end of using a move
|
||||
UserAbilityEndOfMove = AbilityHandlerHash.new
|
||||
TargetItemAfterMoveUse = ItemHandlerHash.new
|
||||
UserItemAfterMoveUse = ItemHandlerHash.new
|
||||
TargetAbilityAfterMoveUse = AbilityHandlerHash.new
|
||||
EndOfMoveItem = ItemHandlerHash.new # Leppa Berry
|
||||
EndOfMoveStatRestoreItem = ItemHandlerHash.new # White Herb
|
||||
# Experience and EV gain
|
||||
ExpGainModifierItem = ItemHandlerHash.new # Lucky Egg
|
||||
EVGainModifierItem = ItemHandlerHash.new
|
||||
# Weather and terrin
|
||||
WeatherExtenderItem = ItemHandlerHash.new
|
||||
TerrainExtenderItem = ItemHandlerHash.new # Terrain Extender
|
||||
TerrainStatBoostItem = ItemHandlerHash.new
|
||||
# End Of Round
|
||||
EORWeatherAbility = AbilityHandlerHash.new
|
||||
EORHealingAbility = AbilityHandlerHash.new
|
||||
EORHealingItem = ItemHandlerHash.new
|
||||
EOREffectAbility = AbilityHandlerHash.new
|
||||
EOREffectItem = ItemHandlerHash.new
|
||||
EORGainItemAbility = AbilityHandlerHash.new
|
||||
# Switching and fainting
|
||||
CertainSwitchingUserAbility = AbilityHandlerHash.new # None!
|
||||
CertainSwitchingUserItem = ItemHandlerHash.new # Shed Shell
|
||||
TrappingTargetAbility = AbilityHandlerHash.new
|
||||
TrappingTargetItem = ItemHandlerHash.new # None!
|
||||
AbilityOnSwitchIn = AbilityHandlerHash.new
|
||||
ItemOnSwitchIn = ItemHandlerHash.new # Air Balloon
|
||||
ItemOnIntimidated = ItemHandlerHash.new # Adrenaline Orb
|
||||
AbilityOnSwitchOut = AbilityHandlerHash.new
|
||||
AbilityChangeOnBattlerFainting = AbilityHandlerHash.new
|
||||
AbilityOnBattlerFainting = AbilityHandlerHash.new # Soul-Heart
|
||||
AbilityOnTerrainChange = AbilityHandlerHash.new # Mimicry
|
||||
AbilityOnIntimidated = AbilityHandlerHash.new # Rattled (Gen 8)
|
||||
# Running from battle
|
||||
RunFromBattleAbility = AbilityHandlerHash.new # Run Away
|
||||
RunFromBattleItem = ItemHandlerHash.new # Smoke Ball
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerSpeedCalcAbility(ability,battler,mult)
|
||||
ret = SpeedCalcAbility.trigger(ability,battler,mult)
|
||||
return (ret!=nil) ? ret : mult
|
||||
end
|
||||
|
||||
def self.triggerSpeedCalcItem(item,battler,mult)
|
||||
ret = SpeedCalcItem.trigger(item,battler,mult)
|
||||
return (ret!=nil) ? ret : mult
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerWeightCalcAbility(ability,battler,w)
|
||||
ret = WeightCalcAbility.trigger(ability,battler,w)
|
||||
return (ret!=nil) ? ret : w
|
||||
end
|
||||
|
||||
def self.triggerWeightCalcItem(item,battler,w)
|
||||
ret = WeightCalcItem.trigger(item,battler,w)
|
||||
return (ret!=nil) ? ret : w
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerHPHealItem(item,battler,battle,forced)
|
||||
ret = HPHealItem.trigger(item,battler,battle,forced)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerAbilityOnHPDroppedBelowHalf(ability, user, move_user, battle)
|
||||
ret = AbilityOnHPDroppedBelowHalf.trigger(ability, user, move_user, battle)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerItemOnStatDropped(item, user, move_user, battle)
|
||||
ret = ItemOnStatDropped.trigger(item, user, move_user, battle)
|
||||
return (ret != nil) ? ret : false
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerStatusCheckAbilityNonIgnorable(ability,battler,status)
|
||||
ret = StatusCheckAbilityNonIgnorable.trigger(ability,battler,status)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerStatusImmunityAbility(ability,battler,status)
|
||||
ret = StatusImmunityAbility.trigger(ability,battler,status)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerStatusImmunityAbilityNonIgnorable(ability,battler,status)
|
||||
ret = StatusImmunityAbilityNonIgnorable.trigger(ability,battler,status)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerStatusImmunityAllyAbility(ability,battler,status)
|
||||
ret = StatusImmunityAllyAbility.trigger(ability,battler,status)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerAbilityOnStatusInflicted(ability,battler,user,status)
|
||||
AbilityOnStatusInflicted.trigger(ability,battler,user,status)
|
||||
end
|
||||
|
||||
def self.triggerStatusCureItem(item,battler,battle,forced)
|
||||
ret = StatusCureItem.trigger(item,battler,battle,forced)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerStatusCureAbility(ability,battler)
|
||||
ret = StatusCureAbility.trigger(ability,battler)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerStatLossImmunityAbility(ability,battler,stat,battle,showMessages)
|
||||
ret = StatLossImmunityAbility.trigger(ability,battler,stat,battle,showMessages)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerStatLossImmunityAbilityNonIgnorable(ability,battler,stat,battle,showMessages)
|
||||
ret = StatLossImmunityAbilityNonIgnorable.trigger(ability,battler,stat,battle,showMessages)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerStatLossImmunityAllyAbility(ability,bearer,battler,stat,battle,showMessages)
|
||||
ret = StatLossImmunityAllyAbility.trigger(ability,bearer,battler,stat,battle,showMessages)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerAbilityOnStatGain(ability,battler,stat,user)
|
||||
AbilityOnStatGain.trigger(ability,battler,stat,user)
|
||||
end
|
||||
|
||||
def self.triggerAbilityOnStatLoss(ability,battler,stat,user)
|
||||
AbilityOnStatLoss.trigger(ability,battler,stat,user)
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerPriorityChangeAbility(ability,battler,move,pri)
|
||||
ret = PriorityChangeAbility.trigger(ability,battler,move,pri)
|
||||
return (ret!=nil) ? ret : pri
|
||||
end
|
||||
|
||||
def self.triggerPriorityBracketChangeAbility(ability,battler,subPri,battle)
|
||||
ret = PriorityBracketChangeAbility.trigger(ability,battler,subPri,battle)
|
||||
return (ret!=nil) ? ret : subPri
|
||||
end
|
||||
|
||||
def self.triggerPriorityBracketChangeItem(item,battler,subPri,battle)
|
||||
ret = PriorityBracketChangeItem.trigger(item,battler,subPri,battle)
|
||||
return (ret!=nil) ? ret : subPri
|
||||
end
|
||||
|
||||
def self.triggerPriorityBracketUseAbility(ability,battler,battle)
|
||||
PriorityBracketUseAbility.trigger(ability,battler,battle)
|
||||
end
|
||||
|
||||
def self.triggerPriorityBracketUseItem(item,battler,battle)
|
||||
PriorityBracketUseItem.trigger(item,battler,battle)
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerAbilityOnFlinch(ability,battler,battle)
|
||||
AbilityOnFlinch.trigger(ability,battler,battle)
|
||||
end
|
||||
|
||||
def self.triggerMoveBlockingAbility(ability,bearer,user,targets,move,battle)
|
||||
ret = MoveBlockingAbility.trigger(ability,bearer,user,targets,move,battle)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerMoveImmunityTargetAbility(ability, user, target, move, type, battle, show_message)
|
||||
ret = MoveImmunityTargetAbility.trigger(ability, user, target, move, type, battle, show_message)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerUserItemOnMissing(item, user, target, move, hit_num, battle)
|
||||
UserItemOnMissing.trigger(item, user, target, move, hit_num, battle)
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerMoveBaseTypeModifierAbility(ability,user,move,type)
|
||||
ret = MoveBaseTypeModifierAbility.trigger(ability,user,move,type)
|
||||
return (ret!=nil) ? ret : type
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerAccuracyCalcUserAbility(ability,mods,user,target,move,type)
|
||||
AccuracyCalcUserAbility.trigger(ability,mods,user,target,move,type)
|
||||
end
|
||||
|
||||
def self.triggerAccuracyCalcUserAllyAbility(ability,mods,user,target,move,type)
|
||||
AccuracyCalcUserAllyAbility.trigger(ability,mods,user,target,move,type)
|
||||
end
|
||||
|
||||
def self.triggerAccuracyCalcTargetAbility(ability,mods,user,target,move,type)
|
||||
AccuracyCalcTargetAbility.trigger(ability,mods,user,target,move,type)
|
||||
end
|
||||
|
||||
def self.triggerAccuracyCalcUserItem(item,mods,user,target,move,type)
|
||||
AccuracyCalcUserItem.trigger(item,mods,user,target,move,type)
|
||||
end
|
||||
|
||||
def self.triggerAccuracyCalcTargetItem(item,mods,user,target,move,type)
|
||||
AccuracyCalcTargetItem.trigger(item,mods,user,target,move,type)
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerDamageCalcUserAbility(ability,user,target,move,mults,baseDmg,type)
|
||||
DamageCalcUserAbility.trigger(ability,user,target,move,mults,baseDmg,type)
|
||||
end
|
||||
|
||||
def self.triggerDamageCalcUserAllyAbility(ability,user,target,move,mults,baseDmg,type)
|
||||
DamageCalcUserAllyAbility.trigger(ability,user,target,move,mults,baseDmg,type)
|
||||
end
|
||||
|
||||
def self.triggerDamageCalcTargetAbility(ability,user,target,move,mults,baseDmg,type)
|
||||
DamageCalcTargetAbility.trigger(ability,user,target,move,mults,baseDmg,type)
|
||||
end
|
||||
|
||||
def self.triggerDamageCalcTargetAbilityNonIgnorable(ability,user,target,move,mults,baseDmg,type)
|
||||
DamageCalcTargetAbilityNonIgnorable.trigger(ability,user,target,move,mults,baseDmg,type)
|
||||
end
|
||||
|
||||
def self.triggerDamageCalcTargetAllyAbility(ability,user,target,move,mults,baseDmg,type)
|
||||
DamageCalcTargetAllyAbility.trigger(ability,user,target,move,mults,baseDmg,type)
|
||||
end
|
||||
|
||||
def self.triggerDamageCalcUserItem(item,user,target,move,mults,baseDmg,type)
|
||||
DamageCalcUserItem.trigger(item,user,target,move,mults,baseDmg,type)
|
||||
end
|
||||
|
||||
def self.triggerDamageCalcTargetItem(item,user,target,move,mults,baseDmg,type)
|
||||
DamageCalcTargetItem.trigger(item,user,target,move,mults,baseDmg,type)
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerCriticalCalcUserAbility(ability,user,target,c)
|
||||
ret = CriticalCalcUserAbility.trigger(ability,user,target,c)
|
||||
return (ret!=nil) ? ret : c
|
||||
end
|
||||
|
||||
def self.triggerCriticalCalcTargetAbility(ability,user,target,c)
|
||||
ret = CriticalCalcTargetAbility.trigger(ability,user,target,c)
|
||||
return (ret!=nil) ? ret : c
|
||||
end
|
||||
|
||||
def self.triggerCriticalCalcUserItem(item,user,target,c)
|
||||
ret = CriticalCalcUserItem.trigger(item,user,target,c)
|
||||
return (ret!=nil) ? ret : c
|
||||
end
|
||||
|
||||
def self.triggerCriticalCalcTargetItem(item,user,target,c)
|
||||
ret = CriticalCalcTargetItem.trigger(item,user,target,c)
|
||||
return (ret!=nil) ? ret : c
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerTargetAbilityOnHit(ability,user,target,move,battle)
|
||||
TargetAbilityOnHit.trigger(ability,user,target,move,battle)
|
||||
end
|
||||
|
||||
def self.triggerUserAbilityOnHit(ability,user,target,move,battle)
|
||||
UserAbilityOnHit.trigger(ability,user,target,move,battle)
|
||||
end
|
||||
|
||||
def self.triggerTargetItemOnHit(item,user,target,move,battle)
|
||||
TargetItemOnHit.trigger(item,user,target,move,battle)
|
||||
end
|
||||
|
||||
def self.triggerTargetItemOnHitPositiveBerry(item,battler,battle,forced)
|
||||
ret = TargetItemOnHitPositiveBerry.trigger(item,battler,battle,forced)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerUserAbilityEndOfMove(ability,user,targets,move,battle)
|
||||
UserAbilityEndOfMove.trigger(ability,user,targets,move,battle)
|
||||
end
|
||||
|
||||
def self.triggerTargetItemAfterMoveUse(item, battler, user, move, switched_battlers, battle)
|
||||
TargetItemAfterMoveUse.trigger(item, battler, user, move, switched_battlers, battle)
|
||||
end
|
||||
|
||||
def self.triggerUserItemAfterMoveUse(item,user,targets,move,numHits,battle)
|
||||
UserItemAfterMoveUse.trigger(item,user,targets,move,numHits,battle)
|
||||
end
|
||||
|
||||
def self.triggerTargetAbilityAfterMoveUse(ability, target, user, move, switched_battlers, battle)
|
||||
TargetAbilityAfterMoveUse.trigger(ability, target, user, move, switched_battlers, battle)
|
||||
end
|
||||
|
||||
def self.triggerEndOfMoveItem(item,battler,battle,forced)
|
||||
ret = EndOfMoveItem.trigger(item,battler,battle,forced)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerEndOfMoveStatRestoreItem(item,battler,battle,forced)
|
||||
ret = EndOfMoveStatRestoreItem.trigger(item,battler,battle,forced)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerExpGainModifierItem(item,battler,exp)
|
||||
ret = ExpGainModifierItem.trigger(item,battler,exp)
|
||||
return (ret!=nil) ? ret : -1
|
||||
end
|
||||
|
||||
def self.triggerEVGainModifierItem(item,battler,evarray)
|
||||
return false if !EVGainModifierItem[item]
|
||||
EVGainModifierItem.trigger(item,battler,evarray)
|
||||
return true
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerWeatherExtenderItem(item,weather,duration,battler,battle)
|
||||
ret = WeatherExtenderItem.trigger(item,weather,duration,battler,battle)
|
||||
return (ret!=nil) ? ret : duration
|
||||
end
|
||||
|
||||
def self.triggerTerrainExtenderItem(item,terrain,duration,battler,battle)
|
||||
ret = TerrainExtenderItem.trigger(item,terrain,duration,battler,battle)
|
||||
return (ret!=nil) ? ret : duration
|
||||
end
|
||||
|
||||
def self.triggerTerrainStatBoostItem(item,battler,battle)
|
||||
ret = TerrainStatBoostItem.trigger(item,battler,battle)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerEORWeatherAbility(ability,weather,battler,battle)
|
||||
EORWeatherAbility.trigger(ability,weather,battler,battle)
|
||||
end
|
||||
|
||||
def self.triggerEORHealingAbility(ability,battler,battle)
|
||||
EORHealingAbility.trigger(ability,battler,battle)
|
||||
end
|
||||
|
||||
def self.triggerEORHealingItem(item,battler,battle)
|
||||
EORHealingItem.trigger(item,battler,battle)
|
||||
end
|
||||
|
||||
def self.triggerEOREffectAbility(ability,battler,battle)
|
||||
EOREffectAbility.trigger(ability,battler,battle)
|
||||
end
|
||||
|
||||
def self.triggerEOREffectItem(item,battler,battle)
|
||||
EOREffectItem.trigger(item,battler,battle)
|
||||
end
|
||||
|
||||
def self.triggerEORGainItemAbility(ability,battler,battle)
|
||||
EORGainItemAbility.trigger(ability,battler,battle)
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerCertainSwitchingUserAbility(ability,switcher,battle)
|
||||
ret = CertainSwitchingUserAbility.trigger(ability,switcher,battle)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerCertainSwitchingUserItem(item,switcher,battle)
|
||||
ret = CertainSwitchingUserItem.trigger(item,switcher,battle)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerTrappingTargetAbility(ability,switcher,bearer,battle)
|
||||
ret = TrappingTargetAbility.trigger(ability,switcher,bearer,battle)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerTrappingTargetItem(item,switcher,bearer,battle)
|
||||
ret = TrappingTargetItem.trigger(item,switcher,bearer,battle)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerAbilityOnSwitchIn(ability,battler,battle)
|
||||
AbilityOnSwitchIn.trigger(ability,battler,battle)
|
||||
end
|
||||
|
||||
def self.triggerItemOnSwitchIn(item,battler,battle)
|
||||
ItemOnSwitchIn.trigger(item,battler,battle)
|
||||
end
|
||||
|
||||
def self.triggerItemOnIntimidated(item,battler,battle)
|
||||
ret = ItemOnIntimidated.trigger(item,battler,battle)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerAbilityOnSwitchOut(ability,battler,endOfBattle)
|
||||
AbilityOnSwitchOut.trigger(ability,battler,endOfBattle)
|
||||
end
|
||||
|
||||
def self.triggerAbilityChangeOnBattlerFainting(ability,battler,fainted,battle)
|
||||
AbilityChangeOnBattlerFainting.trigger(ability,battler,fainted,battle)
|
||||
end
|
||||
|
||||
def self.triggerAbilityOnBattlerFainting(ability,battler,fainted,battle)
|
||||
AbilityOnBattlerFainting.trigger(ability,battler,fainted,battle)
|
||||
end
|
||||
|
||||
def self.triggerAbilityOnTerrainChange(ability, battler, battle, ability_changed)
|
||||
AbilityOnTerrainChange.trigger(ability, battler, battle, ability_changed)
|
||||
end
|
||||
|
||||
def self.triggerAbilityOnIntimidated(ability,battler,battle)
|
||||
AbilityOnIntimidated.trigger(ability,battler,battle)
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
|
||||
def self.triggerRunFromBattleAbility(ability,battler)
|
||||
ret = RunFromBattleAbility.trigger(ability,battler)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.triggerRunFromBattleItem(item,battler)
|
||||
ret = RunFromBattleItem.trigger(item,battler)
|
||||
return (ret!=nil) ? ret : false
|
||||
end
|
||||
end
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,38 +1,36 @@
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
module BallHandlers
|
||||
module Battle::PokeBallEffects
|
||||
IsUnconditional = ItemHandlerHash.new
|
||||
ModifyCatchRate = ItemHandlerHash.new
|
||||
OnCatch = ItemHandlerHash.new
|
||||
OnFailCatch = ItemHandlerHash.new
|
||||
|
||||
def self.isUnconditional?(ball,battle,battler)
|
||||
ret = IsUnconditional.trigger(ball,battle,battler)
|
||||
return (ret!=nil) ? ret : false
|
||||
def self.isUnconditional?(ball, battle, battler)
|
||||
ret = IsUnconditional.trigger(ball, battle, battler)
|
||||
return (ret != nil) ? ret : false
|
||||
end
|
||||
|
||||
def self.modifyCatchRate(ball,catchRate,battle,battler,ultraBeast)
|
||||
ret = ModifyCatchRate.trigger(ball,catchRate,battle,battler,ultraBeast)
|
||||
return (ret!=nil) ? ret : catchRate
|
||||
def self.modifyCatchRate(ball, catchRate, battle, battler)
|
||||
ret = ModifyCatchRate.trigger(ball, catchRate, battle, battler)
|
||||
return (ret != nil) ? ret : catchRate
|
||||
end
|
||||
|
||||
def self.onCatch(ball,battle,pkmn)
|
||||
OnCatch.trigger(ball,battle,pkmn)
|
||||
def self.onCatch(ball, battle, pkmn)
|
||||
OnCatch.trigger(ball, battle, pkmn)
|
||||
end
|
||||
|
||||
def self.onFailCatch(ball,battle,battler)
|
||||
def self.onFailCatch(ball, battle, battler)
|
||||
$stats.failed_poke_ball_count += 1
|
||||
OnFailCatch.trigger(ball,battle,battler)
|
||||
OnFailCatch.trigger(ball, battle, battler)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
#===============================================================================
|
||||
# IsUnconditional
|
||||
#===============================================================================
|
||||
BallHandlers::IsUnconditional.add(:MASTERBALL,proc { |ball,battle,battler|
|
||||
Battle::PokeBallEffects::IsUnconditional.add(:MASTERBALL, proc { |ball, battle, battler|
|
||||
next true
|
||||
})
|
||||
|
||||
@@ -42,67 +40,67 @@ BallHandlers::IsUnconditional.add(:MASTERBALL,proc { |ball,battle,battler|
|
||||
# Ball is a Beast Ball). In this case, all Balls' catch rates are set
|
||||
# elsewhere to 0.1x.
|
||||
#===============================================================================
|
||||
BallHandlers::ModifyCatchRate.add(:GREATBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
next catchRate*1.5
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:GREATBALL, proc { |ball, catchRate, battle, battler|
|
||||
next catchRate * 1.5
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:ULTRABALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
next catchRate*2
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:ULTRABALL, proc { |ball, catchRate, battle, battler|
|
||||
next catchRate * 2
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:SAFARIBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
next catchRate*1.5
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:SAFARIBALL, proc { |ball, catchRate, battle, battler|
|
||||
next catchRate * 1.5
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:NETBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:NETBALL, proc { |ball, catchRate, battle, battler|
|
||||
multiplier = (Settings::NEW_POKE_BALL_CATCH_RATES) ? 3.5 : 3
|
||||
catchRate *= multiplier if battler.pbHasType?(:BUG) || battler.pbHasType?(:WATER)
|
||||
next catchRate
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:DIVEBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:DIVEBALL, proc { |ball, catchRate, battle, battler|
|
||||
catchRate *= 3.5 if battle.environment == :Underwater
|
||||
next catchRate
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:NESTBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:NESTBALL, proc { |ball, catchRate, battle, battler|
|
||||
if battler.level <= 30
|
||||
catchRate *= [(41 - battler.level) / 10.0, 1].max
|
||||
end
|
||||
next catchRate
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:REPEATBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:REPEATBALL, proc { |ball, catchRate, battle, battler|
|
||||
multiplier = (Settings::NEW_POKE_BALL_CATCH_RATES) ? 3.5 : 3
|
||||
catchRate *= multiplier if battle.pbPlayer.owned?(battler.species)
|
||||
next catchRate
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:TIMERBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
multiplier = [1+(0.3*battle.turnCount),4].min
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:TIMERBALL, proc { |ball, catchRate, battle, battler|
|
||||
multiplier = [1 + (0.3 * battle.turnCount), 4].min
|
||||
catchRate *= multiplier
|
||||
next catchRate
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:DUSKBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:DUSKBALL, proc { |ball, catchRate, battle, battler|
|
||||
multiplier = (Settings::NEW_POKE_BALL_CATCH_RATES) ? 3 : 3.5
|
||||
catchRate *= multiplier if battle.time==2
|
||||
catchRate *= multiplier if battle.time == 2 # Night or in cave
|
||||
next catchRate
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:QUICKBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
catchRate *= 5 if battle.turnCount==0
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:QUICKBALL, proc { |ball, catchRate, battle, battler|
|
||||
catchRate *= 5 if battle.turnCount == 0
|
||||
next catchRate
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:FASTBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:FASTBALL, proc { |ball, catchRate, battle, battler|
|
||||
baseStats = battler.pokemon.baseStats
|
||||
baseSpeed = baseStats[:SPEED]
|
||||
catchRate *= 4 if baseSpeed >= 100
|
||||
next [catchRate, 255].min
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:LEVELBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:LEVELBALL, proc { |ball, catchRate, battle, battler|
|
||||
maxlevel = 0
|
||||
battle.allSameSideBattlers.each { |b| maxlevel = b.level if b.level > maxlevel }
|
||||
if maxlevel >= battler.level * 4
|
||||
@@ -112,17 +110,17 @@ BallHandlers::ModifyCatchRate.add(:LEVELBALL,proc { |ball,catchRate,battle,battl
|
||||
elsif maxlevel > battler.level
|
||||
catchRate *= 2
|
||||
end
|
||||
next [catchRate,255].min
|
||||
next [catchRate, 255].min
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:LUREBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:LUREBALL, proc { |ball, catchRate, battle, battler|
|
||||
multiplier = (Settings::NEW_POKE_BALL_CATCH_RATES) ? 5 : 3
|
||||
catchRate *= multiplier if GameData::EncounterType.get($game_temp.encounter_type).type == :fishing
|
||||
next [catchRate,255].min
|
||||
next [catchRate, 255].min
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:HEAVYBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
next 0 if catchRate==0
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:HEAVYBALL, proc { |ball, catchRate, battle, battler|
|
||||
next 0 if catchRate == 0
|
||||
weight = battler.pokemon.species_data.base_stats[:SPEED]
|
||||
if Settings::NEW_POKE_BALL_CATCH_RATES
|
||||
if weight >= 3000
|
||||
@@ -143,21 +141,21 @@ BallHandlers::ModifyCatchRate.add(:HEAVYBALL,proc { |ball,catchRate,battle,battl
|
||||
catchRate -= 20
|
||||
end
|
||||
end
|
||||
catchRate = [catchRate,1].max
|
||||
next [catchRate,255].min
|
||||
catchRate = [catchRate, 1].max
|
||||
next [catchRate, 255].min
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:LOVEBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:LOVEBALL, proc { |ball, catchRate, battle, battler|
|
||||
battle.allSameSideBattlers.each do |b|
|
||||
next if b.species!=battler.species
|
||||
next if b.gender==battler.gender || b.gender==2 || battler.gender==2
|
||||
next if b.species != battler.species
|
||||
next if b.gender == battler.gender || b.gender == 2 || battler.gender == 2
|
||||
catchRate *= 8
|
||||
break
|
||||
end
|
||||
next [catchRate,255].min
|
||||
next [catchRate, 255].min
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:MOONBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:MOONBALL, proc { |ball, catchRate, battle, battler|
|
||||
# NOTE: Moon Ball cares about whether any species in the target's evolutionary
|
||||
# family can evolve with the Moon Stone, not whether the target itself
|
||||
# can immediately evolve with the Moon Stone.
|
||||
@@ -168,17 +166,17 @@ BallHandlers::ModifyCatchRate.add(:MOONBALL,proc { |ball,catchRate,battle,battle
|
||||
next [catchRate, 255].min
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:SPORTBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
next catchRate*1.5
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:SPORTBALL, proc { |ball, catchRate, battle, battler|
|
||||
next catchRate * 1.5
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:DREAMBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:DREAMBALL, proc { |ball, catchRate, battle, battler|
|
||||
catchRate *= 4 if battler.asleep?
|
||||
next catchRate
|
||||
})
|
||||
|
||||
BallHandlers::ModifyCatchRate.add(:BEASTBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
|
||||
if ultraBeast
|
||||
Battle::PokeBallEffects::ModifyCatchRate.add(:BEASTBALL, proc { |ball, catchRate, battle, battler|
|
||||
if battler.pokemon.species_data.has_flag?("UltraBeast")
|
||||
catchRate *= 5
|
||||
else
|
||||
catchRate /= 10
|
||||
@@ -189,10 +187,10 @@ BallHandlers::ModifyCatchRate.add(:BEASTBALL,proc { |ball,catchRate,battle,battl
|
||||
#===============================================================================
|
||||
# OnCatch
|
||||
#===============================================================================
|
||||
BallHandlers::OnCatch.add(:HEALBALL,proc { |ball,battle,pkmn|
|
||||
Battle::PokeBallEffects::OnCatch.add(:HEALBALL, proc { |ball, battle, pkmn|
|
||||
pkmn.heal
|
||||
})
|
||||
|
||||
BallHandlers::OnCatch.add(:FRIENDBALL,proc { |ball,battle,pkmn|
|
||||
Battle::PokeBallEffects::OnCatch.add(:FRIENDBALL, proc { |ball, battle, pkmn|
|
||||
pkmn.happiness = 200
|
||||
})
|
||||
Reference in New Issue
Block a user