diff --git a/Data/Scripts/001_Technical/002_RubyUtilities.rb b/Data/Scripts/001_Technical/002_RubyUtilities.rb index 42fa024f3..c61f97377 100644 --- a/Data/Scripts/001_Technical/002_RubyUtilities.rb +++ b/Data/Scripts/001_Technical/002_RubyUtilities.rb @@ -171,8 +171,3 @@ end def nil_or_empty?(string) return string.nil? || !string.is_a?(String) || string.size == 0 end - -#=============================================================================== -# This is only here to make the battle classes easier to define later. -#=============================================================================== -class Battle; end diff --git a/Data/Scripts/011_Battle/001_Battle/002_Battle.rb b/Data/Scripts/011_Battle/001_Battle/001_Battle.rb similarity index 99% rename from Data/Scripts/011_Battle/001_Battle/002_Battle.rb rename to Data/Scripts/011_Battle/001_Battle/001_Battle.rb index 74555321e..4d9bf0b74 100644 --- a/Data/Scripts/011_Battle/001_Battle/002_Battle.rb +++ b/Data/Scripts/011_Battle/001_Battle/001_Battle.rb @@ -87,8 +87,6 @@ class Battle attr_accessor :moldBreaker # True if Mold Breaker applies attr_reader :struggle # The Struggle move - include Battle::Common - def pbRandom(x); return rand(x); end #============================================================================= @@ -703,7 +701,7 @@ class Battle @field.weather = newWeather duration = (fixedDuration) ? 5 : -1 if duration>0 && user && user.itemActive? - duration = BattleHandlers.triggerWeatherExtenderItem(user.item, + duration = Battle::ItemEffects.triggerWeatherExtender(user.item, @field.weather,duration,user,self) end @field.weatherDuration = duration @@ -781,7 +779,7 @@ class Battle @field.terrain = newTerrain duration = (fixedDuration) ? 5 : -1 if duration>0 && user && user.itemActive? - duration = BattleHandlers.triggerTerrainExtenderItem(user.item, + duration = Battle::ItemEffects.triggerTerrainExtender(user.item, newTerrain,duration,user,self) end @field.terrainDuration = duration diff --git a/Data/Scripts/011_Battle/001_Battle/003_Battle_StartAndEnd.rb b/Data/Scripts/011_Battle/001_Battle/002_Battle_StartAndEnd.rb similarity index 99% rename from Data/Scripts/011_Battle/001_Battle/003_Battle_StartAndEnd.rb rename to Data/Scripts/011_Battle/001_Battle/002_Battle_StartAndEnd.rb index 36227feec..fb659ed38 100644 --- a/Data/Scripts/011_Battle/001_Battle/003_Battle_StartAndEnd.rb +++ b/Data/Scripts/011_Battle/001_Battle/002_Battle_StartAndEnd.rb @@ -478,7 +478,7 @@ class Battle @battlers.each do |b| next if !b pbCancelChoice(b.index) # Restore unused items to Bag - BattleHandlers.triggerAbilityOnSwitchOut(b.ability,b,true) if b.abilityActive? + Battle::AbilityEffects.triggerOnSwitchOut(b.ability, b, true) if b.abilityActive? end pbParty(0).each_with_index do |pkmn,i| next if !pkmn diff --git a/Data/Scripts/011_Battle/001_Battle/004_Battle_ExpAndMoveLearning.rb b/Data/Scripts/011_Battle/001_Battle/003_Battle_ExpAndMoveLearning.rb similarity index 97% rename from Data/Scripts/011_Battle/001_Battle/004_Battle_ExpAndMoveLearning.rb rename to Data/Scripts/011_Battle/001_Battle/003_Battle_ExpAndMoveLearning.rb index e35bc88db..b05a7ff31 100644 --- a/Data/Scripts/011_Battle/001_Battle/004_Battle_ExpAndMoveLearning.rb +++ b/Data/Scripts/011_Battle/001_Battle/003_Battle_ExpAndMoveLearning.rb @@ -63,8 +63,8 @@ class Battle evTotal = 0 GameData::Stat.each_main { |s| evTotal += pkmn.ev[s.id] } # Modify EV yield based on pkmn's held item - if !BattleHandlers.triggerEVGainModifierItem(pkmn.item,pkmn,evYield) - BattleHandlers.triggerEVGainModifierItem(@initialItems[0][idxParty],pkmn,evYield) + if !Battle::ItemEffects.triggerEVGainModifier(pkmn.item, pkmn, evYield) + Battle::ItemEffects.triggerEVGainModifier(@initialItems[0][idxParty], pkmn, evYield) end # Double EV gain because of Pokérus if pkmn.pokerusStage>=1 # Infected or cured @@ -147,9 +147,9 @@ class Battle # Exp. Charm increases Exp gained exp = exp * 3 / 2 if $bag.has?(:EXPCHARM) # Modify Exp gain based on pkmn's held item - i = BattleHandlers.triggerExpGainModifierItem(pkmn.item,pkmn,exp) + i = Battle::ItemEffects.triggerExpGainModifier(pkmn.item, pkmn, exp) if i<0 - i = BattleHandlers.triggerExpGainModifierItem(@initialItems[0][idxParty],pkmn,exp) + i = Battle::ItemEffects.triggerExpGainModifier(@initialItems[0][idxParty], pkmn, exp) end exp = i if i>=0 # Boost Exp gained with high affection diff --git a/Data/Scripts/011_Battle/001_Battle/005_Battle_ActionAttacksPriority.rb b/Data/Scripts/011_Battle/001_Battle/004_Battle_ActionAttacksPriority.rb similarity index 96% rename from Data/Scripts/011_Battle/001_Battle/005_Battle_ActionAttacksPriority.rb rename to Data/Scripts/011_Battle/001_Battle/004_Battle_ActionAttacksPriority.rb index 618740aa2..22a9f2444 100644 --- a/Data/Scripts/011_Battle/001_Battle/005_Battle_ActionAttacksPriority.rb +++ b/Data/Scripts/011_Battle/001_Battle/004_Battle_ActionAttacksPriority.rb @@ -155,7 +155,7 @@ class Battle move = @choices[b.index][2] pri = move.pbPriority(b) if b.abilityActive? - pri = BattleHandlers.triggerPriorityChangeAbility(b.ability,b,move,pri) + pri = Battle::AbilityEffects.triggerPriorityChange(b.ability, b, move, pri) end bArray[3] = pri @choices[b.index][4] = pri @@ -167,8 +167,7 @@ class Battle subPri = 0 # Abilities (Stall) if b.abilityActive? - newSubPri = BattleHandlers.triggerPriorityBracketChangeAbility(b.ability, - b,subPri,self) + newSubPri = Battle::AbilityEffects.triggerPriorityBracketChange(b.ability, b, subPri, self) if subPri!=newSubPri subPri = newSubPri b.effects[PBEffects::PriorityAbility] = true @@ -177,8 +176,7 @@ class Battle end # Items (Quick Claw, Custap Berry, Lagging Tail, Full Incense) if b.itemActive? - newSubPri = BattleHandlers.triggerPriorityBracketChangeItem(b.item, - b,subPri,self) + newSubPri = Battle::ItemEffects.triggerPriorityBracketChange(b.item, b, subPri, self) if subPri!=newSubPri subPri = newSubPri b.effects[PBEffects::PriorityAbility] = false diff --git a/Data/Scripts/011_Battle/001_Battle/006_Battle_ActionSwitching.rb b/Data/Scripts/011_Battle/001_Battle/005_Battle_ActionSwitching.rb similarity index 97% rename from Data/Scripts/011_Battle/001_Battle/006_Battle_ActionSwitching.rb rename to Data/Scripts/011_Battle/001_Battle/005_Battle_ActionSwitching.rb index 5a50d168e..97a193ede 100644 --- a/Data/Scripts/011_Battle/001_Battle/006_Battle_ActionSwitching.rb +++ b/Data/Scripts/011_Battle/001_Battle/005_Battle_ActionSwitching.rb @@ -56,12 +56,12 @@ class Battle return true if battler.fainted? # Ability/item effects that allow switching no matter what if battler.abilityActive? - if BattleHandlers.triggerCertainSwitchingUserAbility(battler.ability,battler,self) + if Battle::AbilityEffects.triggerCertainSwitching(battler.ability, battler, self) return true end end if battler.itemActive? - if BattleHandlers.triggerCertainSwitchingUserItem(battler.item,battler,self) + if Battle::ItemEffects.triggerCertainSwitching(battler.item, battler, self) return true end end @@ -75,7 +75,7 @@ class Battle # Trapping abilities/items allOtherSideBattlers(idxBattler).each do |b| next if !b.abilityActive? - if BattleHandlers.triggerTrappingTargetAbility(b.ability,battler,b,self) + if Battle::AbilityEffects.triggerTrappingByTarget(b.ability, battler, b, self) partyScene.pbDisplay(_INTL("{1}'s {2} prevents switching!", b.pbThis,b.abilityName)) if partyScene return false @@ -83,7 +83,7 @@ class Battle end allOtherSideBattlers(idxBattler).each do |b| next if !b.itemActive? - if BattleHandlers.triggerTrappingTargetItem(b.item,battler,b,self) + if Battle::ItemEffects.triggerTrappingByTarget(b.item,battler,b,self) partyScene.pbDisplay(_INTL("{1}'s {2} prevents switching!", b.pbThis,b.itemName)) if partyScene return false @@ -353,12 +353,12 @@ class Battle b.pbContinualAbilityChecks(true) # Abilities that trigger upon switching in if (!b.fainted? && b.unstoppableAbility?) || b.abilityActive? - BattleHandlers.triggerAbilityOnSwitchIn(b.ability, b, self) + Battle::AbilityEffects.triggerOnSwitchIn(b.ability, b, self) end pbEndPrimordialWeather # Checking this again just in case # Items that trigger upon switching in (Air Balloon message) if b.itemActive? - BattleHandlers.triggerItemOnSwitchIn(b.item, b, self) + Battle::ItemEffects.triggerOnSwitchIn(b.item, b, self) end # Berry check, status-curing ability check b.pbHeldItemTriggerCheck diff --git a/Data/Scripts/011_Battle/001_Battle/007_Battle_ActionUseItem.rb b/Data/Scripts/011_Battle/001_Battle/006_Battle_ActionUseItem.rb similarity index 100% rename from Data/Scripts/011_Battle/001_Battle/007_Battle_ActionUseItem.rb rename to Data/Scripts/011_Battle/001_Battle/006_Battle_ActionUseItem.rb diff --git a/Data/Scripts/011_Battle/001_Battle/008_Battle_ActionRunning.rb b/Data/Scripts/011_Battle/001_Battle/007_Battle_ActionRunning.rb similarity index 84% rename from Data/Scripts/011_Battle/001_Battle/008_Battle_ActionRunning.rb rename to Data/Scripts/011_Battle/001_Battle/007_Battle_ActionRunning.rb index 0ef8f0441..01d85123b 100644 --- a/Data/Scripts/011_Battle/001_Battle/008_Battle_ActionRunning.rb +++ b/Data/Scripts/011_Battle/001_Battle/007_Battle_ActionRunning.rb @@ -8,15 +8,15 @@ class Battle return false if !@canRun && !battler.opposes? return true if battler.pbHasType?(:GHOST) && Settings::MORE_TYPE_EFFECTS return true if battler.abilityActive? && - BattleHandlers.triggerRunFromBattleAbility(battler.ability,battler) + Battle::AbilityEffects.triggerCertainEscapeFromBattle(battler.ability, battler) return true if battler.itemActive? && - BattleHandlers.triggerRunFromBattleItem(battler.item,battler) + Battle::ItemEffects.triggerCertainEscapeFromBattle(battler.item, battler) return false if battler.trappedInBattle? allOtherSideBattlers(idxBattler).each do |b| return false if b.abilityActive? && - BattleHandlers.triggerTrappingTargetAbility(b.ability,battler,b,self) + Battle::AbilityEffects.triggerTrappingByTarget(b.ability, battler, b, self) return false if b.itemActive? && - BattleHandlers.triggerTrappingTargetItem(b.item,battler,b,self) + Battle::ItemEffects.triggerTrappingByTarget(b.item, battler, b, self) end return true end @@ -76,7 +76,7 @@ class Battle end # Abilities that guarantee escape if battler.abilityActive? - if BattleHandlers.triggerRunFromBattleAbility(battler.ability,battler) + if Battle::AbilityEffects.triggerCertainEscapeFromBattle(battler.ability, battler) pbShowAbilitySplash(battler,true) pbHideAbilitySplash(battler) pbSEPlay("Battle flee") @@ -87,10 +87,9 @@ class Battle end # Held items that guarantee escape if battler.itemActive? - if BattleHandlers.triggerRunFromBattleItem(battler.item,battler) + if Battle::ItemEffects.triggerCertainEscapeFromBattle(battler.item, battler) pbSEPlay("Battle flee") - pbDisplayPaused(_INTL("{1} fled using its {2}!", - battler.pbThis,battler.itemName)) + pbDisplayPaused(_INTL("{1} fled using its {2}!", battler.pbThis,battler.itemName)) @decision = 3 return 1 end @@ -103,14 +102,14 @@ class Battle # Trapping abilities/items allOtherSideBattlers(idxBattler).each do |b| next if !b.abilityActive? - if BattleHandlers.triggerTrappingTargetAbility(b.ability,battler,b,self) + if Battle::AbilityEffects.triggerTrappingByTarget(b.ability, battler, b, self) pbDisplayPaused(_INTL("{1} prevents escape with {2}!",b.pbThis,b.abilityName)) return 0 end end allOtherSideBattlers(idxBattler).each do |b| next if !b.itemActive? - if BattleHandlers.triggerTrappingTargetItem(b.item,battler,b,self) + if Battle::ItemEffects.triggerTrappingByTarget(b.item, battler, b, self) pbDisplayPaused(_INTL("{1} prevents escape with {2}!",b.pbThis,b.itemName)) return 0 end diff --git a/Data/Scripts/011_Battle/001_Battle/009_Battle_ActionOther.rb b/Data/Scripts/011_Battle/001_Battle/008_Battle_ActionOther.rb similarity index 98% rename from Data/Scripts/011_Battle/001_Battle/009_Battle_ActionOther.rb rename to Data/Scripts/011_Battle/001_Battle/008_Battle_ActionOther.rb index b8bf99f53..f2d4de779 100644 --- a/Data/Scripts/011_Battle/001_Battle/009_Battle_ActionOther.rb +++ b/Data/Scripts/011_Battle/001_Battle/008_Battle_ActionOther.rb @@ -132,7 +132,7 @@ class Battle old_ability = battler.ability_id # Break Illusion if battler.hasActiveAbility?(:ILLUSION) - BattleHandlers.triggerTargetAbilityOnHit(battler.ability,nil,battler,nil,self) + Battle::AbilityEffects.triggerOnBeingHit(battler.ability, nil, battler, nil, self) end # Mega Evolve case battler.pokemon.megaMessage diff --git a/Data/Scripts/011_Battle/001_Battle/010_Battle_CommandPhase.rb b/Data/Scripts/011_Battle/001_Battle/009_Battle_CommandPhase.rb similarity index 100% rename from Data/Scripts/011_Battle/001_Battle/010_Battle_CommandPhase.rb rename to Data/Scripts/011_Battle/001_Battle/009_Battle_CommandPhase.rb diff --git a/Data/Scripts/011_Battle/001_Battle/011_Battle_AttackPhase.rb b/Data/Scripts/011_Battle/001_Battle/010_Battle_AttackPhase.rb similarity index 97% rename from Data/Scripts/011_Battle/001_Battle/011_Battle_AttackPhase.rb rename to Data/Scripts/011_Battle/001_Battle/010_Battle_AttackPhase.rb index 1906a978f..f565e8544 100644 --- a/Data/Scripts/011_Battle/001_Battle/011_Battle_AttackPhase.rb +++ b/Data/Scripts/011_Battle/001_Battle/010_Battle_AttackPhase.rb @@ -6,9 +6,9 @@ class Battle def pbAttackPhasePriorityChangeMessages pbPriority.each do |b| if b.effects[PBEffects::PriorityAbility] && b.abilityActive? - BattleHandlers.triggerPriorityBracketUseAbility(b.ability,b,self) + Battle::AbilityEffects.triggerPriorityBracketUse(b.ability, b, self) elsif b.effects[PBEffects::PriorityItem] && b.itemActive? - BattleHandlers.triggerPriorityBracketUseItem(b.item,b,self) + Battle::ItemEffects.triggerPriorityBracketUse(b.item, b, self) end end end diff --git a/Data/Scripts/011_Battle/001_Battle/012_Battle_EndOfRoundPhase.rb b/Data/Scripts/011_Battle/001_Battle/011_Battle_EndOfRoundPhase.rb similarity index 98% rename from Data/Scripts/011_Battle/001_Battle/012_Battle_EndOfRoundPhase.rb rename to Data/Scripts/011_Battle/001_Battle/011_Battle_EndOfRoundPhase.rb index 441bc42b8..af7426b99 100644 --- a/Data/Scripts/011_Battle/001_Battle/012_Battle_EndOfRoundPhase.rb +++ b/Data/Scripts/011_Battle/001_Battle/011_Battle_EndOfRoundPhase.rb @@ -70,7 +70,7 @@ class Battle priority.each do |b| # Weather-related abilities if b.abilityActive? - BattleHandlers.triggerEORWeatherAbility(b.ability, b.effectiveWeather, b, self) + Battle::AbilityEffects.triggerEndOfRoundWeather(b.ability, b.effectiveWeather, b, self) b.pbFaint if b.fainted? end # Weather damage @@ -279,9 +279,9 @@ class Battle pbDisplay(_INTL("{1}'s HP was restored.",b.pbThis)) end # Healer, Hydration, Shed Skin - BattleHandlers.triggerEORHealingAbility(b.ability,b,self) if b.abilityActive? + Battle::AbilityEffects.triggerEndOfRoundHealing(b.ability, b, self) if b.abilityActive? # Black Sludge, Leftovers - BattleHandlers.triggerEORHealingItem(b.item,b,self) if b.itemActive? + Battle::ItemEffects.triggerEndOfRoundHealing(b.item, b, self) if b.itemActive? end # Self-curing of status due to affection if Settings::AFFECTION_EFFECTS && @internalBattle @@ -597,11 +597,11 @@ class Battle end end # Bad Dreams, Moody, Speed Boost - BattleHandlers.triggerEOREffectAbility(b.ability,b,self) if b.abilityActive? + Battle::AbilityEffects.triggerEndOfRoundEffect(b.ability, b, self) if b.abilityActive? # Flame Orb, Sticky Barb, Toxic Orb - BattleHandlers.triggerEOREffectItem(b.item,b,self) if b.itemActive? + Battle::ItemEffects.triggerEndOfRoundEffect(b.item, b, self) if b.itemActive? # Harvest, Pickup, Ball Fetch - BattleHandlers.triggerEORGainItemAbility(b.ability,b,self) if b.abilityActive? + Battle::AbilityEffects.triggerEndOfRoundGainItem(b.ability, b, self) if b.abilityActive? end pbGainExp return if @decision>0 diff --git a/Data/Scripts/011_Battle/002_Battler/001_Battle_Battler.rb b/Data/Scripts/011_Battle/002_Battler/001_Battle_Battler.rb index 636f5f5bc..5550c089e 100644 --- a/Data/Scripts/011_Battle/002_Battler/001_Battle_Battler.rb +++ b/Data/Scripts/011_Battle/002_Battler/001_Battle_Battler.rb @@ -248,11 +248,11 @@ class Battle::Battler speedMult = 1.0 # Ability effects that alter calculated Speed if abilityActive? - speedMult = BattleHandlers.triggerSpeedCalcAbility(self.ability,self,speedMult) + speedMult = Battle::AbilityEffects.triggerSpeedCalc(self.ability, self, speedMult) end # Item effects that alter calculated Speed if itemActive? - speedMult = BattleHandlers.triggerSpeedCalcItem(self.item,self,speedMult) + speedMult = Battle::ItemEffects.triggerSpeedCalc(self.item, self, speedMult) end # Other effects speedMult *= 2 if pbOwnSide.effects[PBEffects::Tailwind]>0 @@ -275,10 +275,10 @@ class Battle::Battler ret += @effects[PBEffects::WeightChange] ret = 1 if ret<1 if abilityActive? && !@battle.moldBreaker - ret = BattleHandlers.triggerWeightCalcAbility(self.ability,self,ret) + ret = Battle::AbilityEffects.triggerWeightCalc(self.ability, self, ret) end if itemActive? - ret = BattleHandlers.triggerWeightCalcItem(self.item,self,ret) + ret = Battle::ItemEffects.triggerWeightCalc(self.item, self, ret) end return [ret,1].max end diff --git a/Data/Scripts/011_Battle/002_Battler/004_Battler_Statuses.rb b/Data/Scripts/011_Battle/002_Battler/004_Battler_Statuses.rb index 899706c48..d6096a54a 100644 --- a/Data/Scripts/011_Battle/002_Battler/004_Battler_Statuses.rb +++ b/Data/Scripts/011_Battle/002_Battler/004_Battler_Statuses.rb @@ -9,14 +9,14 @@ class Battle::Battler # "counts as having that status", which includes Comatose which can't be # cured. def pbHasStatus?(checkStatus) - if BattleHandlers.triggerStatusCheckAbilityNonIgnorable(self.ability,self,checkStatus) + if Battle::AbilityEffects.triggerStatusCheckNonIgnorable(self.ability, self, checkStatus) return true end return @status==checkStatus end def pbHasAnyStatus? - if BattleHandlers.triggerStatusCheckAbilityNonIgnorable(self.ability,self,nil) + if Battle::AbilityEffects.triggerStatusCheckNonIgnorable(self.ability, self, nil) return true end return @status != :NONE @@ -102,15 +102,15 @@ class Battle::Battler # Ability immunity immuneByAbility = false immAlly = nil - if BattleHandlers.triggerStatusImmunityAbilityNonIgnorable(self.ability,self,newStatus) + if Battle::AbilityEffects.triggerStatusImmunityNonIgnorable(self.ability, self, newStatus) immuneByAbility = true elsif selfInflicted || !@battle.moldBreaker - if abilityActive? && BattleHandlers.triggerStatusImmunityAbility(self.ability,self,newStatus) + if abilityActive? && Battle::AbilityEffects.triggerStatusImmunity(self.ability, self, newStatus) immuneByAbility = true else allAllies.each do |b| next if !b.abilityActive? - next if !BattleHandlers.triggerStatusImmunityAllyAbility(b.ability,self,newStatus) + next if !Battle::AbilityEffects.triggerStatusImmunityFromAlly(b.ability, self, newStatus) immuneByAbility = true immAlly = b break @@ -192,15 +192,15 @@ class Battle::Battler end return false if hasImmuneType # Ability immunity - if BattleHandlers.triggerStatusImmunityAbilityNonIgnorable(self.ability,self,newStatus) + if Battle::AbilityEffects.triggerStatusImmunityNonIgnorable(self.ability, self, newStatus) return false end - if abilityActive? && BattleHandlers.triggerStatusImmunityAbility(self.ability,self,newStatus) + if abilityActive? && Battle::AbilityEffects.triggerStatusImmunity(self.ability, self, newStatus) return false end allAllies.each do |b| next if !b.abilityActive? - next if !BattleHandlers.triggerStatusImmunityAllyAbility(b.ability,self,newStatus) + next if !Battle::AbilityEffects.triggerStatusImmunityFromAlly(b.ability, self, newStatus) return false end # Safeguard immunity @@ -252,7 +252,7 @@ class Battle::Battler pbCheckFormOnStatusChange # Synchronize if abilityActive? - BattleHandlers.triggerAbilityOnStatusInflicted(self.ability,self,user,newStatus) + Battle::AbilityEffects.triggerOnStatusInflicted(self.ability, self, user, newStatus) end # Status cures pbItemStatusCureCheck @@ -287,18 +287,18 @@ class Battle::Battler if !hasActiveAbility?(:SOUNDPROOF) return false if @battle.allBattlers.any? { |b| b.effects[PBEffects::Uproar] > 0 } end - if BattleHandlers.triggerStatusImmunityAbilityNonIgnorable(self.ability, self, :SLEEP) + if Battle::AbilityEffects.triggerStatusImmunityNonIgnorable(self.ability, self, :SLEEP) return false end # NOTE: Bulbapedia claims that Flower Veil shouldn't prevent sleep due to # drowsiness, but I disagree because that makes no sense. Also, the # comparable Sweet Veil does prevent sleep due to drowsiness. - if abilityActive? && BattleHandlers.triggerStatusImmunityAbility(self.ability, self, :SLEEP) + if abilityActive? && Battle::AbilityEffects.triggerStatusImmunity(self.ability, self, :SLEEP) return false end allAllies.each do |b| next if !b.abilityActive? - next if !BattleHandlers.triggerStatusImmunityAllyAbility(b.ability, self, :SLEEP) + next if !Battle::AbilityEffects.triggerStatusImmunityFromAlly(b.ability, self, :SLEEP) return false end # NOTE: Bulbapedia claims that Safeguard shouldn't prevent sleep due to diff --git a/Data/Scripts/011_Battle/002_Battler/005_Battler_StatStages.rb b/Data/Scripts/011_Battle/002_Battler/005_Battler_StatStages.rb index 3e61f8ded..9a286e4a8 100644 --- a/Data/Scripts/011_Battle/002_Battler/005_Battler_StatStages.rb +++ b/Data/Scripts/011_Battle/002_Battler/005_Battler_StatStages.rb @@ -59,7 +59,7 @@ class Battle::Battler @battle.pbDisplay(arrStatTexts[[increment-1,2].min]) # Trigger abilities upon stat gain if abilityActive? - BattleHandlers.triggerAbilityOnStatGain(self.ability,self,stat,user) + Battle::AbilityEffects.triggerOnStatGain(self.ability, self, stat, user) end return true end @@ -88,7 +88,7 @@ class Battle::Battler @battle.pbDisplay(arrStatTexts[[increment-1,2].min]) # Trigger abilities upon stat gain if abilityActive? - BattleHandlers.triggerAbilityOnStatGain(self.ability,self,stat,user) + Battle::AbilityEffects.triggerOnStatGain(self.ability, self, stat, user) end return true end @@ -138,15 +138,15 @@ class Battle::Battler return false end if abilityActive? - return false if BattleHandlers.triggerStatLossImmunityAbility( + return false if Battle::AbilityEffects.triggerStatLossImmunity( self.ability,self,stat,@battle,showFailMsg) if !@battle.moldBreaker - return false if BattleHandlers.triggerStatLossImmunityAbilityNonIgnorable( + return false if Battle::AbilityEffects.triggerStatLossImmunityNonIgnorable( self.ability,self,stat,@battle,showFailMsg) end if !@battle.moldBreaker allAllies.each do |b| next if !b.abilityActive? - return false if BattleHandlers.triggerStatLossImmunityAllyAbility( + return false if Battle::AbilityEffects.triggerStatLossImmunityFromAlly( b.ability,b,self,stat,@battle,showFailMsg) end end @@ -218,7 +218,7 @@ class Battle::Battler @battle.pbDisplay(arrStatTexts[[increment-1,2].min]) # Trigger abilities upon stat loss if abilityActive? - BattleHandlers.triggerAbilityOnStatLoss(self.ability,self,stat,user) + Battle::AbilityEffects.triggerOnStatLoss(self.ability, self, stat, user) end return true end @@ -264,7 +264,7 @@ class Battle::Battler @battle.pbDisplay(arrStatTexts[[increment-1,2].min]) # Trigger abilities upon stat loss if abilityActive? - BattleHandlers.triggerAbilityOnStatLoss(self.ability,self,stat,user) + Battle::AbilityEffects.triggerOnStatLoss(self.ability, self, stat, user) end return true end @@ -320,8 +320,8 @@ class Battle::Battler return false end if abilityActive? - if BattleHandlers.triggerStatLossImmunityAbility(self.ability,self,:ATTACK,@battle,false) || - BattleHandlers.triggerStatLossImmunityAbilityNonIgnorable(self.ability,self,:ATTACK,@battle,false) + if Battle::AbilityEffects.triggerStatLossImmunity(self.ability, self, :ATTACK, @battle, false) || + Battle::AbilityEffects.triggerStatLossImmunityNonIgnorable(self.ability, self, :ATTACK, @battle, false) @battle.pbDisplay(_INTL("{1}'s {2} prevented {3}'s {4} from working!", pbThis,abilityName,user.pbThis(true),user.abilityName)) return false @@ -329,7 +329,7 @@ class Battle::Battler end allAllies.each do |b| next if !b.abilityActive? - if BattleHandlers.triggerStatLossImmunityAllyAbility(b.ability,b,self,:ATTACK,@battle,false) + if Battle::AbilityEffects.triggerStatLossImmunityFromAlly(b.ability, b, self, :ATTACK, @battle, false) @battle.pbDisplay(_INTL("{1} is protected from {2}'s {3} by {4}'s {5}!", pbThis,user.pbThis(true),user.abilityName,b.pbThis(true),b.abilityName)) return false diff --git a/Data/Scripts/011_Battle/002_Battler/006_Battler_AbilityAndItem.rb b/Data/Scripts/011_Battle/002_Battler/006_Battler_AbilityAndItem.rb index d0c06b027..c7eec8a15 100644 --- a/Data/Scripts/011_Battle/002_Battler/006_Battler_AbilityAndItem.rb +++ b/Data/Scripts/011_Battle/002_Battler/006_Battler_AbilityAndItem.rb @@ -4,7 +4,7 @@ class Battle::Battler #============================================================================= def pbAbilitiesOnSwitchOut if abilityActive? - BattleHandlers.triggerAbilityOnSwitchOut(self.ability,self,false) + Battle::AbilityEffects.triggerOnSwitchOut(self.ability, self, false) end # Reset form @battle.peer.pbOnLeavingBattle(@battle,@pokemon,@battle.usedInBattle[idxOwnSide][@index/2]) @@ -22,11 +22,11 @@ class Battle::Battler # Self fainted; check all other battlers to see if their abilities trigger @battle.pbPriority(true).each do |b| next if !b || !b.abilityActive? - BattleHandlers.triggerAbilityChangeOnBattlerFainting(b.ability,b,self,@battle) + Battle::AbilityEffects.triggerChangeOnBattlerFainting(b.ability, b, self, @battle) end @battle.pbPriority(true).each do |b| next if !b || !b.abilityActive? - BattleHandlers.triggerAbilityOnBattlerFainting(b.ability,b,self,@battle) + Battle::AbilityEffects.triggerOnBattlerFainting(b.ability, b, self, @battle) end pbAbilitiesOnNeutralizingGasEnding if hasActiveAbility?(:NEUTRALIZINGGAS, true) pbItemsOnUnnerveEnding if hasActiveAbility?(:UNNERVE, true) @@ -36,18 +36,18 @@ class Battle::Battler def pbAbilitiesOnDamageTaken(move_user = nil) return false if !@droppedBelowHalfHP return false if !abilityActive? - return BattleHandlers.triggerAbilityOnHPDroppedBelowHalf(self.ability, self, move_user, @battle) + return Battle::AbilityEffects.triggerOnHPDroppedBelowHalf(self.ability, self, move_user, @battle) end def pbAbilityOnTerrainChange(ability_changed = false) return if !abilityActive? - BattleHandlers.triggerAbilityOnTerrainChange(self.ability, self, @battle, ability_changed) + Battle::AbilityEffects.triggerOnTerrainChange(self.ability, self, @battle, ability_changed) end # Used for Rattled's Gen 8 effect. Called when Intimidate is triggered. def pbAbilitiesOnIntimidated return if !abilityActive? - BattleHandlers.triggerAbilityOnIntimidated(self.ability, self, @battle) + Battle::AbilityEffects.triggerOnIntimidated(self.ability, self, @battle) end def pbAbilitiesOnNeutralizingGasEnding @@ -57,7 +57,7 @@ class Battle::Battler @battle.pbPriority(true).each do |b| next if b.fainted? next if !b.unstoppableAbility? && !b.abilityActive? - BattleHandlers.triggerAbilityOnSwitchIn(b.ability, b, @battle) + Battle::AbilityEffects.triggerOnSwitchIn(b.ability, b, @battle) end end @@ -84,7 +84,7 @@ class Battle::Battler @battle.pbDisplay(_INTL("{1} traced {2}'s {3}!",pbThis,choice.pbThis(true),choice.abilityName)) @battle.pbHideAbilitySplash(self) if !onSwitchIn && (unstoppableAbility? || abilityActive?) - BattleHandlers.triggerAbilityOnSwitchIn(self.ability,self,@battle) + Battle::AbilityEffects.triggerOnSwitchIn(self.ability, self, @battle) end end end @@ -96,7 +96,7 @@ class Battle::Battler # Cures status conditions, confusion and infatuation. def pbAbilityStatusCureCheck if abilityActive? - BattleHandlers.triggerStatusCureAbility(self.ability,self) + Battle::AbilityEffects.triggerStatusCure(self.ability, self) end end @@ -195,7 +195,7 @@ class Battle::Battler pbContinualAbilityChecks(true) # Don't trigger Traced ability as it's triggered below # Abilities that trigger upon switching in if (!fainted? && unstoppableAbility?) || abilityActive? - BattleHandlers.triggerAbilityOnSwitchIn(self.ability, self, @battle) + Battle::AbilityEffects.triggerOnSwitchIn(self.ability, self, @battle) end # Status-curing ability check pbAbilityStatusCureCheck @@ -300,7 +300,7 @@ class Battle::Battler # when forcibly consumed by Pluck/Fling. if item_to_use itm = item_to_use || self.item - if BattleHandlers.triggerTargetItemOnHitPositiveBerry(itm, self, @battle, true) + if Battle::ItemEffects.triggerOnBeingHitPositiveBerry(itm, self, @battle, true) pbHeldItemTriggered(itm, false, fling) end end @@ -311,7 +311,7 @@ class Battle::Battler def pbItemHPHealCheck(item_to_use = nil, fling = false) return if !item_to_use && !itemActive? itm = item_to_use || self.item - if BattleHandlers.triggerHPHealItem(itm, self, @battle, !item_to_use.nil?) + if Battle::ItemEffects.triggerHPHeal(itm, self, @battle, !item_to_use.nil?) pbHeldItemTriggered(itm, item_to_use.nil?, fling) elsif !item_to_use pbItemTerrainStatBoostCheck @@ -326,7 +326,7 @@ class Battle::Battler return if fainted? return if !item_to_use && !itemActive? itm = item_to_use || self.item - if BattleHandlers.triggerStatusCureItem(itm, self, @battle, !item_to_use.nil?) + if Battle::ItemEffects.triggerStatusCure(itm, self, @battle, !item_to_use.nil?) pbHeldItemTriggered(itm, item_to_use.nil?, fling) end end @@ -338,9 +338,9 @@ class Battle::Battler return if fainted? return if !item_to_use && !itemActive? itm = item_to_use || self.item - if BattleHandlers.triggerEndOfMoveItem(itm, self, @battle, !item_to_use.nil?) + if Battle::ItemEffects.triggerOnEndOfUsingMove(itm, self, @battle, !item_to_use.nil?) pbHeldItemTriggered(itm, item_to_use.nil?, fling) - elsif BattleHandlers.triggerEndOfMoveStatRestoreItem(itm, self, @battle, !item_to_use.nil?) + elsif Battle::ItemEffects.triggerOnEndOfUsingMoveStatRestore(itm, self, @battle, !item_to_use.nil?) pbHeldItemTriggered(itm, item_to_use.nil?, fling) end end @@ -354,7 +354,7 @@ class Battle::Battler return if fainted? return if !item_to_use && !itemActive? itm = item_to_use || self.item - if BattleHandlers.triggerEndOfMoveStatRestoreItem(itm, self, @battle, !item_to_use.nil?) + if Battle::ItemEffects.triggerOnEndOfUsingMoveStatRestore(itm, self, @battle, !item_to_use.nil?) pbHeldItemTriggered(itm, item_to_use.nil?, fling) end end @@ -362,7 +362,7 @@ class Battle::Battler # Called when the battle terrain changes and when a Pokémon loses HP. def pbItemTerrainStatBoostCheck return if !itemActive? - if BattleHandlers.triggerTerrainStatBoostItem(self.item, self, @battle) + if Battle::ItemEffects.triggerTerrainStatBoost(self.item, self, @battle) pbHeldItemTriggered(self.item) end end @@ -371,7 +371,7 @@ class Battle::Battler # Intimidate has no effect on the Pokémon). def pbItemOnIntimidatedCheck return if !itemActive? - if BattleHandlers.triggerItemOnIntimidated(self.item, self, @battle) + if Battle::ItemEffects.triggerOnIntimidated(self.item, self, @battle) pbHeldItemTriggered(self.item) end end @@ -380,7 +380,7 @@ class Battle::Battler def pbItemOnStatDropped(move_user = nil) return false if !@statsDropped return false if !itemActive? - return BattleHandlers.triggerItemOnStatDropped(self.item, self, move_user, @battle) + return Battle::ItemEffects.triggerOnStatLoss(self.item, self, move_user, @battle) end def pbItemsOnUnnerveEnding diff --git a/Data/Scripts/011_Battle/002_Battler/007_Battler_UseMove.rb b/Data/Scripts/011_Battle/002_Battler/007_Battler_UseMove.rb index 26b6ff93f..283a680f4 100644 --- a/Data/Scripts/011_Battle/002_Battler/007_Battler_UseMove.rb +++ b/Data/Scripts/011_Battle/002_Battler/007_Battler_UseMove.rb @@ -281,7 +281,7 @@ class Battle::Battler # Dazzling/Queenly Majesty make the move fail here @battle.pbPriority(true).each do |b| next if !b || !b.abilityActive? - if BattleHandlers.triggerMoveBlockingAbility(b.ability,b,user,targets,move,@battle) + if Battle::AbilityEffects.triggerMoveBlocking(b.ability, b, user, targets, move, @battle) @battle.pbDisplayBrief(_INTL("{1} used {2}!",user.pbThis,move.name)) @battle.pbShowAbilitySplash(b) @battle.pbDisplay(_INTL("{1} cannot use {2}!",user.pbThis,move.name)) @@ -603,7 +603,7 @@ class Battle::Battler next if !b.damageState.missed || b.damageState.magicCoat pbMissMessage(move,user,b) if user.itemActive? - BattleHandlers.triggerUserItemOnMissing(user.item, user, b, move, hitNum, @battle) + Battle::ItemEffects.triggerOnMissingTarget(user.item, user, b, move, hitNum, @battle) end break if move.pbRepeatHit? # Dragon Darts only shows one failure message end @@ -649,7 +649,7 @@ class Battle::Battler next if !b.damageState.missed pbMissMessage(move, user, b) if user.itemActive? - BattleHandlers.triggerUserItemOnMissing(user.item, user, b, move, hitNum, @battle) + Battle::ItemEffects.triggerOnMissingTarget(user.item, user, b, move, hitNum, @battle) end end end diff --git a/Data/Scripts/011_Battle/002_Battler/009_Battler_UseMoveSuccessChecks.rb b/Data/Scripts/011_Battle/002_Battler/009_Battler_UseMoveSuccessChecks.rb index e83303e06..e3e2429cf 100644 --- a/Data/Scripts/011_Battle/002_Battler/009_Battler_UseMoveSuccessChecks.rb +++ b/Data/Scripts/011_Battle/002_Battler/009_Battler_UseMoveSuccessChecks.rb @@ -243,7 +243,7 @@ class Battle::Battler if @effects[PBEffects::Flinch] @battle.pbDisplay(_INTL("{1} flinched and couldn't move!",pbThis)) if abilityActive? - BattleHandlers.triggerAbilityOnFlinch(self.ability,self,@battle) + Battle::AbilityEffects.triggerOnFlinch(self.ability, self, @battle) end @lastMoveFailed = true return false diff --git a/Data/Scripts/011_Battle/002_Battler/010_Battler_UseMoveTriggerEffects.rb b/Data/Scripts/011_Battle/002_Battler/010_Battler_UseMoveTriggerEffects.rb index 2ecb5f8b9..f8c875e5a 100644 --- a/Data/Scripts/011_Battle/002_Battler/010_Battler_UseMoveTriggerEffects.rb +++ b/Data/Scripts/011_Battle/002_Battler/010_Battler_UseMoveTriggerEffects.rb @@ -7,7 +7,7 @@ class Battle::Battler # Target's ability if target.abilityActive?(true) oldHP = user.hp - BattleHandlers.triggerTargetAbilityOnHit(target.ability,user,target,move,@battle) + Battle::AbilityEffects.triggerOnBeingHit(target.ability, user, target, move, @battle) user.pbItemHPHealCheck if user.hp 0 && b.itemActive? - BattleHandlers.triggerTargetItemAfterMoveUse(b.item, b, user, move, switched_battlers, @battle) + Battle::ItemEffects.triggerAfterMoveUseFromTarget(b.item, b, user, move, switched_battlers, @battle) end end # Target's Eject Pack @@ -194,13 +194,13 @@ class Battle::Battler end # User's held item (Life Orb, Shell Bell, Throat Spray, Eject Pack) if !switched_battlers.include?(user.index) && user.itemActive? # Only if user hasn't switched out - BattleHandlers.triggerUserItemAfterMoveUse(user.item,user,targets,move,numHits,@battle) + Battle::ItemEffects.triggerAfterMoveUseFromUser(user.item, user, targets, move, numHits, @battle) end # Target's ability (Berserk, Color Change, Emergency Exit, Pickpocket, Wimp Out) @battle.pbPriority(true).each do |b| if targets.any? { |targetB| targetB.index==b.index } if !b.damageState.unaffected && !switched_battlers.include?(b.index) && b.abilityActive? - BattleHandlers.triggerTargetAbilityAfterMoveUse(b.ability, b, user, move, switched_battlers, @battle) + Battle::AbilityEffects.triggerAfterMoveUseFromTarget(b.ability, b, user, move, switched_battlers, @battle) end end # Target's Emergency Exit, Wimp Out (including for Pokémon hurt by Flame Burst) diff --git a/Data/Scripts/011_Battle/003_Move/002_Move_Usage.rb b/Data/Scripts/011_Battle/003_Move/002_Move_Usage.rb index 92f83212a..f17af1b1e 100644 --- a/Data/Scripts/011_Battle/003_Move/002_Move_Usage.rb +++ b/Data/Scripts/011_Battle/003_Move/002_Move_Usage.rb @@ -86,7 +86,7 @@ class Battle::Move return false if @battle.moldBreaker ret = false if target.abilityActive? - ret = BattleHandlers.triggerMoveImmunityTargetAbility(target.ability, + ret = Battle::AbilityEffects.triggerMoveImmunity(target.ability, user, target, self, @calcType, @battle, show_message) end return ret diff --git a/Data/Scripts/011_Battle/003_Move/003_Move_UsageCalculations.rb b/Data/Scripts/011_Battle/003_Move/003_Move_UsageCalculations.rb index 6468e3503..cef9f043d 100644 --- a/Data/Scripts/011_Battle/003_Move/003_Move_UsageCalculations.rb +++ b/Data/Scripts/011_Battle/003_Move/003_Move_UsageCalculations.rb @@ -5,7 +5,7 @@ class Battle::Move def pbBaseType(user) ret = @type if ret && user.abilityActive? - ret = BattleHandlers.triggerMoveBaseTypeModifierAbility(user.ability,user,self,ret) + ret = Battle::AbilityEffects.triggerModifyMoveBaseType(user.ability, user, self, ret) end return ret end @@ -130,25 +130,25 @@ class Battle::Move def pbCalcAccuracyModifiers(user,target,modifiers) # Ability effects that alter accuracy calculation if user.abilityActive? - BattleHandlers.triggerAccuracyCalcUserAbility(user.ability, + Battle::AbilityEffects.triggerAccuracyCalcFromUser(user.ability, modifiers,user,target,self,@calcType) end user.allAllies.each do |b| next if !b.abilityActive? - BattleHandlers.triggerAccuracyCalcUserAllyAbility(b.ability, + Battle::AbilityEffects.triggerAccuracyCalcFromAlly(b.ability, modifiers,user,target,self,@calcType) end if target.abilityActive? && !@battle.moldBreaker - BattleHandlers.triggerAccuracyCalcTargetAbility(target.ability, + Battle::AbilityEffects.triggerAccuracyCalcFromTarget(target.ability, modifiers,user,target,self,@calcType) end # Item effects that alter accuracy calculation if user.itemActive? - BattleHandlers.triggerAccuracyCalcUserItem(user.item, + Battle::ItemEffects.triggerAccuracyCalcFromUser(user.item, modifiers,user,target,self,@calcType) end if target.itemActive? - BattleHandlers.triggerAccuracyCalcTargetItem(target.item, + Battle::ItemEffects.triggerAccuracyCalcFromTarget(target.item, modifiers,user,target,self,@calcType) end # Other effects, inc. ones that set accuracy_multiplier or evasion_stage to @@ -181,17 +181,17 @@ class Battle::Move c = 0 # Ability effects that alter critical hit rate if c>=0 && user.abilityActive? - c = BattleHandlers.triggerCriticalCalcUserAbility(user.ability,user,target,c) + c = Battle::AbilityEffects.triggerCriticalCalcFromUser(user.ability, user, target, c) end if c>=0 && target.abilityActive? && !@battle.moldBreaker - c = BattleHandlers.triggerCriticalCalcTargetAbility(target.ability,user,target,c) + c = Battle::AbilityEffects.triggerCriticalCalcFromTarget(target.ability, user, target, c) end # Item effects that alter critical hit rate if c>=0 && user.itemActive? - c = BattleHandlers.triggerCriticalCalcUserItem(user.item,user,target,c) + c = Battle::ItemEffects.triggerCriticalCalcFromUser(user.item, user, target, c) end if c>=0 && target.itemActive? - c = BattleHandlers.triggerCriticalCalcTargetItem(target.item,user,target,c) + c = Battle::ItemEffects.triggerCriticalCalcFromTarget(target.item, user, target, c) end return false if c<0 # Move-specific "always/never a critical hit" effects @@ -294,7 +294,7 @@ class Battle::Move end # Ability effects that alter damage if user.abilityActive? - BattleHandlers.triggerDamageCalcUserAbility(user.ability, + Battle::AbilityEffects.triggerDamageCalcFromUser(user.ability, user,target,self,multipliers,baseDmg,type) end if !@battle.moldBreaker @@ -303,28 +303,28 @@ class Battle::Move # how it works. user.allAllies.each do |b| next if !b.abilityActive? - BattleHandlers.triggerDamageCalcUserAllyAbility(b.ability, + Battle::AbilityEffects.triggerDamageCalcFromAlly(b.ability, user,target,self,multipliers,baseDmg,type) end if target.abilityActive? - BattleHandlers.triggerDamageCalcTargetAbility(target.ability, + Battle::AbilityEffects.triggerDamageCalcFromTarget(target.ability, user,target,self,multipliers,baseDmg,type) if !@battle.moldBreaker - BattleHandlers.triggerDamageCalcTargetAbilityNonIgnorable(target.ability, + Battle::AbilityEffects.triggerDamageCalcFromTargetNonIgnorable(target.ability, user,target,self,multipliers,baseDmg,type) end target.allAllies.each do |b| next if !b.abilityActive? - BattleHandlers.triggerDamageCalcTargetAllyAbility(b.ability, + Battle::AbilityEffects.triggerDamageCalcFromTargetAlly(b.ability, user,target,self,multipliers,baseDmg,type) end end # Item effects that alter damage if user.itemActive? - BattleHandlers.triggerDamageCalcUserItem(user.item, + Battle::ItemEffects.triggerDamageCalcFromUser(user.item, user,target,self,multipliers,baseDmg,type) end if target.itemActive? - BattleHandlers.triggerDamageCalcTargetItem(target.item, + Battle::ItemEffects.triggerDamageCalcFromTarget(target.item, user,target,self,multipliers,baseDmg,type) end # Parental Bond's second attack diff --git a/Data/Scripts/011_Battle/005_AI/006_AI_Move_Utilities.rb b/Data/Scripts/011_Battle/005_AI/006_AI_Move_Utilities.rb index 2f91e2da4..43ee57e63 100644 --- a/Data/Scripts/011_Battle/005_AI/006_AI_Move_Utilities.rb +++ b/Data/Scripts/011_Battle/005_AI/006_AI_Move_Utilities.rb @@ -338,14 +338,14 @@ class Battle::AI break end if canCheck - BattleHandlers.triggerDamageCalcUserAbility(user.ability, + Battle::AbilityEffects.triggerDamageCalcFromUser(user.ability, user,target,move,multipliers,baseDmg,type) end end if skill>=PBTrainerAI.mediumSkill && !moldBreaker user.allAllies.each do |b| next if !b.abilityActive? - BattleHandlers.triggerDamageCalcUserAllyAbility(b.ability, + Battle::AbilityEffects.triggerDamageCalcFromAlly(b.ability, user,target,move,multipliers,baseDmg,type) end end @@ -360,14 +360,14 @@ class Battle::AI break end if canCheck - BattleHandlers.triggerDamageCalcTargetAbility(target.ability, + Battle::AbilityEffects.triggerDamageCalcFromTarget(target.ability, user,target,move,multipliers,baseDmg,type) end end if skill>=PBTrainerAI.bestSkill && !moldBreaker target.allAllies.each do |b| next if !b.abilityActive? - BattleHandlers.triggerDamageCalcTargetAllyAbility(b.ability, + Battle::AbilityEffects.triggerDamageCalcFromTargetAlly(b.ability, user,target,move,multipliers,baseDmg,type) end end @@ -379,7 +379,7 @@ class Battle::AI # round. itemBlacklist = [:EXPERTBELT,:LIFEORB] if !itemBlacklist.include?(user.item_id) - BattleHandlers.triggerDamageCalcUserItem(user.item, + Battle::ItemEffects.triggerDamageCalcFromUser(user.item, user,target,move,multipliers,baseDmg,type) end end @@ -387,7 +387,7 @@ class Battle::AI # NOTE: Type-weakening berries aren't suitable for checking at the start # of the round. if target.item && !target.item.is_berry? - BattleHandlers.triggerDamageCalcTargetItem(target.item, + Battle::ItemEffects.triggerDamageCalcFromTarget(target.item, user,target,move,multipliers,baseDmg,type) end end @@ -560,20 +560,20 @@ class Battle::AI c = 0 # Ability effects that alter critical hit rate if c>=0 && user.abilityActive? - c = BattleHandlers.triggerCriticalCalcUserAbility(user.ability,user,target,c) + c = Battle::AbilityEffects.triggerCriticalCalcFromUser(user.ability, user, target, c) end if skill>=PBTrainerAI.bestSkill if c>=0 && !moldBreaker && target.abilityActive? - c = BattleHandlers.triggerCriticalCalcTargetAbility(target.ability,user,target,c) + c = Battle::AbilityEffects.triggerCriticalCalcFromTarget(target.ability, user, target, c) end end # Item effects that alter critical hit rate if c>=0 && user.itemActive? - c = BattleHandlers.triggerCriticalCalcUserItem(user.item,user,target,c) + c = Battle::ItemEffects.triggerCriticalCalcFromUser(user.item, user, target, c) end if skill>=PBTrainerAI.bestSkill if c>=0 && target.itemActive? - c = BattleHandlers.triggerCriticalCalcTargetItem(target.item,user,target,c) + c = Battle::ItemEffects.triggerCriticalCalcFromTarget(target.item, user, target, c) end end # Other efffects @@ -638,31 +638,31 @@ class Battle::AI # Ability effects that alter accuracy calculation if skill>=PBTrainerAI.mediumSkill if user.abilityActive? - BattleHandlers.triggerAccuracyCalcUserAbility(user.ability, + Battle::AbilityEffects.triggerAccuracyCalcFromUser(user.ability, modifiers,user,target,move,type) end user.allAllies.each do |b| next if !b.abilityActive? - BattleHandlers.triggerAccuracyCalcUserAllyAbility(b.ability, + Battle::AbilityEffects.triggerAccuracyCalcFromAlly(b.ability, modifiers,user,target,move,type) end end if skill>=PBTrainerAI.bestSkill if target.abilityActive? && !moldBreaker - BattleHandlers.triggerAccuracyCalcTargetAbility(target.ability, + Battle::AbilityEffects.triggerAccuracyCalcFromTarget(target.ability, modifiers,user,target,move,type) end end # Item effects that alter accuracy calculation if skill>=PBTrainerAI.mediumSkill if user.itemActive? - BattleHandlers.triggerAccuracyCalcUserItem(user.item, + Battle::ItemEffects.triggerAccuracyCalcFromUser(user.item, modifiers,user,target,move,type) end end if skill>=PBTrainerAI.bestSkill if target.itemActive? - BattleHandlers.triggerAccuracyCalcTargetItem(target.item, + Battle::ItemEffects.triggerAccuracyCalcFromTarget(target.item, modifiers,user,target,move,type) end end diff --git a/Data/Scripts/011_Battle/001_Battle/001_Battle_Common.rb b/Data/Scripts/011_Battle/006_Other battle code/005_Battle_CatchAndStoreMixin.rb similarity index 90% rename from Data/Scripts/011_Battle/001_Battle/001_Battle_Common.rb rename to Data/Scripts/011_Battle/006_Other battle code/005_Battle_CatchAndStoreMixin.rb index b4247fcd5..c02f507e9 100644 --- a/Data/Scripts/011_Battle/001_Battle/001_Battle_Common.rb +++ b/Data/Scripts/011_Battle/006_Other battle code/005_Battle_CatchAndStoreMixin.rb @@ -1,4 +1,4 @@ -module Battle::Common +module Battle::CatchAndStoreMixin #============================================================================= # Store caught Pokémon #============================================================================= @@ -107,16 +107,16 @@ module Battle::Common case numShakes when 0 pbDisplay(_INTL("Oh no! The Pokémon broke free!")) - BallHandlers.onFailCatch(ball,self,battler) + Battle::PokeBallEffects.onFailCatch(ball, self, battler) when 1 pbDisplay(_INTL("Aww! It appeared to be caught!")) - BallHandlers.onFailCatch(ball,self,battler) + Battle::PokeBallEffects.onFailCatch(ball, self, battler) when 2 pbDisplay(_INTL("Aargh! Almost had it!")) - BallHandlers.onFailCatch(ball,self,battler) + Battle::PokeBallEffects.onFailCatch(ball, self, battler) when 3 pbDisplay(_INTL("Gah! It was so close, too!")) - BallHandlers.onFailCatch(ball,self,battler) + Battle::PokeBallEffects.onFailCatch(ball, self, battler) when 4 pbDisplayBrief(_INTL("Gotcha! {1} was caught!",pkmn.name)) @scene.pbThrowSuccess # Play capture success jingle @@ -135,7 +135,7 @@ module Battle::Common if GameData::Item.get(ball).is_snag_ball? pkmn.owner = Pokemon::Owner.new_from_trainer(pbPlayer) end - BallHandlers.onCatch(ball,self,pkmn) + Battle::PokeBallEffects.onCatch(ball, self, pkmn) pkmn.poke_ball = ball pkmn.makeUnmega if pkmn.mega? pkmn.makeUnprimal @@ -163,11 +163,8 @@ module Battle::Common # 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 - ultraBeast = [:NIHILEGO, :BUZZWOLE, :PHEROMOSA, :XURKITREE, :CELESTEELA, - :KARTANA, :GUZZLORD, :POIPOLE, :NAGANADEL, :STAKATAKA, - :BLACEPHALON].include?(pkmn.species) - if !ultraBeast || ball == :BEASTBALL - catch_rate = BallHandlers.modifyCatchRate(ball,catch_rate,self,battler,ultraBeast) + if !pkmn.species_data.has_flag?("UltraBeast") || ball == :BEASTBALL + catch_rate = Battle::PokeBallEffects.modifyCatchRate(ball, catch_rate, self, battler) else catch_rate /= 10 end @@ -184,7 +181,7 @@ module Battle::Common x = x.floor x = 1 if x<1 # Definite capture, no need to perform randomness checks - return 4 if x>=255 || BallHandlers.isUnconditional?(ball,self,battler) + 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 @@ -220,3 +217,10 @@ module Battle::Common return numShakes end end + +#=============================================================================== +# +#=============================================================================== +class Battle + include Battle::CatchAndStoreMixin +end diff --git a/Data/Scripts/011_Battle/006_Other battle code/005_Battle_Clauses.rb b/Data/Scripts/011_Battle/006_Other battle code/006_Battle_Clauses.rb similarity index 100% rename from Data/Scripts/011_Battle/006_Other battle code/005_Battle_Clauses.rb rename to Data/Scripts/011_Battle/006_Other battle code/006_Battle_Clauses.rb diff --git a/Data/Scripts/011_Battle/006_Other battle code/006_BattleAnimationPlayer.rb b/Data/Scripts/011_Battle/006_Other battle code/007_BattleAnimationPlayer.rb similarity index 100% rename from Data/Scripts/011_Battle/006_Other battle code/006_BattleAnimationPlayer.rb rename to Data/Scripts/011_Battle/006_Other battle code/007_BattleAnimationPlayer.rb diff --git a/Data/Scripts/011_Battle/006_Other battle code/007_BattleHandlers.rb b/Data/Scripts/011_Battle/006_Other battle code/007_BattleHandlers.rb deleted file mode 100644 index ca2ae9f7d..000000000 --- a/Data/Scripts/011_Battle/006_Other battle code/007_BattleHandlers.rb +++ /dev/null @@ -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 diff --git a/Data/Scripts/011_Battle/006_Other battle code/008_BattleHandlers_Abilities.rb b/Data/Scripts/011_Battle/006_Other battle code/008_Battle_AbilityEffects.rb similarity index 74% rename from Data/Scripts/011_Battle/006_Other battle code/008_BattleHandlers_Abilities.rb rename to Data/Scripts/011_Battle/006_Other battle code/008_Battle_AbilityEffects.rb index 87ea2bf8e..f21014c92 100644 --- a/Data/Scripts/011_Battle/006_Other battle code/008_BattleHandlers_Abilities.rb +++ b/Data/Scripts/011_Battle/006_Other battle code/008_Battle_AbilityEffects.rb @@ -1,76 +1,370 @@ #=============================================================================== -# SpeedCalcAbility handlers +# +#=============================================================================== +module Battle::AbilityEffects + SpeedCalc = AbilityHandlerHash.new + WeightCalc = AbilityHandlerHash.new + # Battler's HP/stat changed + OnHPDroppedBelowHalf = AbilityHandlerHash.new + # Battler's status problem + StatusCheckNonIgnorable = AbilityHandlerHash.new # Comatose + StatusImmunity = AbilityHandlerHash.new + StatusImmunityNonIgnorable = AbilityHandlerHash.new + StatusImmunityFromAlly = AbilityHandlerHash.new + OnStatusInflicted = AbilityHandlerHash.new # Synchronize + StatusCure = AbilityHandlerHash.new + # Battler's stat stages + StatLossImmunity = AbilityHandlerHash.new + StatLossImmunityNonIgnorable = AbilityHandlerHash.new # Full Metal Body + StatLossImmunityFromAlly = AbilityHandlerHash.new # Flower Veil + OnStatGain = AbilityHandlerHash.new # None! + OnStatLoss = AbilityHandlerHash.new + # Priority and turn order + PriorityChange = AbilityHandlerHash.new + PriorityBracketChange = AbilityHandlerHash.new # Stall + PriorityBracketUse = AbilityHandlerHash.new # None! + # Move usage failures + OnFlinch = AbilityHandlerHash.new # Steadfast + MoveBlocking = AbilityHandlerHash.new + MoveImmunity = AbilityHandlerHash.new + # Move usage + ModifyMoveBaseType = AbilityHandlerHash.new + # Accuracy calculation + AccuracyCalcFromUser = AbilityHandlerHash.new + AccuracyCalcFromAlly = AbilityHandlerHash.new # Victory Star + AccuracyCalcFromTarget = AbilityHandlerHash.new + # Damage calculation + DamageCalcFromUser = AbilityHandlerHash.new + DamageCalcFromAlly = AbilityHandlerHash.new + DamageCalcFromTarget = AbilityHandlerHash.new + DamageCalcFromTargetNonIgnorable = AbilityHandlerHash.new + DamageCalcFromTargetAlly = AbilityHandlerHash.new + CriticalCalcFromUser = AbilityHandlerHash.new + CriticalCalcFromTarget = AbilityHandlerHash.new + # Upon a move hitting a target + OnBeingHit = AbilityHandlerHash.new + OnDealingHit = AbilityHandlerHash.new # Poison Touch + # Abilities that trigger at the end of using a move + OnEndOfUsingMove = AbilityHandlerHash.new + AfterMoveUseFromTarget = AbilityHandlerHash.new + # End Of Round + EndOfRoundWeather = AbilityHandlerHash.new + EndOfRoundHealing = AbilityHandlerHash.new + EndOfRoundEffect = AbilityHandlerHash.new + EndOfRoundGainItem = AbilityHandlerHash.new + # Switching and fainting + CertainSwitching = AbilityHandlerHash.new # None! + TrappingByTarget = AbilityHandlerHash.new + OnSwitchIn = AbilityHandlerHash.new + OnSwitchOut = AbilityHandlerHash.new + ChangeOnBattlerFainting = AbilityHandlerHash.new + OnBattlerFainting = AbilityHandlerHash.new # Soul-Heart + OnTerrainChange = AbilityHandlerHash.new # Mimicry + OnIntimidated = AbilityHandlerHash.new # Rattled (Gen 8) + # Running from battle + CertainEscapeFromBattle = AbilityHandlerHash.new # Run Away + + #============================================================================= + + def self.trigger(hash, *args, ret: false) + new_ret = hash.trigger(*args) + return (new_ret != nil) ? new_ret : ret + end + + #============================================================================= + + def self.triggerSpeedCalc(ability, battler, mult) + return trigger(SpeedCalc, ability, battler, mult, ret: mult) + end + + def self.triggerWeightCalc(ability, battler, weight) + return trigger(WeightCalc, ability, battler, weight, ret: weight) + end + + #============================================================================= + + def self.triggerOnHPDroppedBelowHalf(ability, user, move_user, battle) + return trigger(OnHPDroppedBelowHalf, ability, user, move_user, battle) + end + + #============================================================================= + + def self.triggerStatusCheckNonIgnorable(ability, battler, status) + return trigger(StatusCheckNonIgnorable, ability, battler, status) + end + + def self.triggerStatusImmunity(ability, battler, status) + return trigger(StatusImmunity, ability, battler, status) + end + + def self.triggerStatusImmunityNonIgnorable(ability, battler, status) + return trigger(StatusImmunityNonIgnorable, ability, battler, status) + end + + def self.triggerStatusImmunityFromAlly(ability, battler, status) + return trigger(StatusImmunityFromAlly, ability, battler, status) + end + + def self.triggerOnStatusInflicted(ability, battler, user, status) + OnStatusInflicted.trigger(ability, battler, user, status) + end + + def self.triggerStatusCure(ability, battler) + return trigger(StatusCure, ability, battler) + end + + #============================================================================= + + def self.triggerStatLossImmunity(ability, battler, stat, battle, show_messages) + return trigger(StatLossImmunity, ability, battler, stat, battle, show_messages) + end + + def self.triggerStatLossImmunityNonIgnorable(ability, battler, stat, battle, show_messages) + return trigger(StatLossImmunityNonIgnorable, ability, battler, stat, battle, show_messages) + end + + def self.triggerStatLossImmunityFromAlly(ability, bearer, battler, stat, battle, show_messages) + return trigger(StatLossImmunityFromAlly, ability, bearer, battler, stat, battle, show_messages) + end + + def self.triggerOnStatGain(ability, battler, stat, user) + OnStatGain.trigger(ability, battler, stat, user) + end + + def self.triggerOnStatLoss(ability, battler, stat, user) + OnStatLoss.trigger(ability, battler, stat, user) + end + + #============================================================================= + + def self.triggerPriorityChange(ability, battler, move, priority) + return trigger(PriorityChange, ability, battler, move, priority, ret: priority) + end + + def self.triggerPriorityBracketChange(ability, battler, sub_priority, battle) + return trigger(PriorityBracketChange, ability, battler, sub_priority, battle, ret: sub_priority) + end + + def self.triggerPriorityBracketUse(ability, battler, battle) + PriorityBracketUse.trigger(ability, battler, battle) + end + + #============================================================================= + + def self.triggerOnFlinch(ability, battler, battle) + OnFlinch.trigger(ability, battler, battle) + end + + def self.triggerMoveBlocking(ability, bearer, user, targets, move, battle) + return trigger(MoveBlocking, ability, bearer, user, targets, move, battle) + end + + def self.triggerMoveImmunity(ability, user, target, move, type, battle, show_message) + return trigger(MoveImmunity, ability, user, target, move, type, battle, show_message) + end + + #============================================================================= + + def self.triggerModifyMoveBaseType(ability, user, move, type) + return trigger(ModifyMoveBaseType, ability, user, move, type, ret: type) + end + + #============================================================================= + + def self.triggerAccuracyCalcFromUser(ability, mods, user, target, move, type) + AccuracyCalcFromUser.trigger(ability, mods, user, target, move, type) + end + + def self.triggerAccuracyCalcFromAlly(ability, mods, user, target, move, type) + AccuracyCalcFromAlly.trigger(ability, mods, user, target, move, type) + end + + def self.triggerAccuracyCalcFromTarget(ability, mods, user, target, move, type) + AccuracyCalcFromTarget.trigger(ability, mods, user, target, move, type) + end + + #============================================================================= + + def self.triggerDamageCalcFromUser(ability, user, target, move, mults, base_damage, type) + DamageCalcFromUser.trigger(ability, user, target, move, mults, base_damage, type) + end + + def self.triggerDamageCalcFromAlly(ability, user, target, move, mults, base_damage, type) + DamageCalcFromAlly.trigger(ability, user, target, move, mults, base_damage, type) + end + + def self.triggerDamageCalcFromTarget(ability, user, target, move, mults, base_damage, type) + DamageCalcFromTarget.trigger(ability, user, target, move, mults, base_damage, type) + end + + def self.triggerDamageCalcFromTargetNonIgnorable(ability, user, target, move, mults, base_damage, type) + DamageCalcFromTargetNonIgnorable.trigger(ability, user, target, move, mults, base_damage, type) + end + + def self.triggerDamageCalcFromTargetAlly(ability, user, target, move, mults, base_damage, type) + DamageCalcFromTargetAlly.trigger(ability, user, target, move, mults, base_damage, type) + end + + def self.triggerCriticalCalcFromUser(ability, user, target, crit_stage) + return trigger(CriticalCalcFromUser, ability, user, target, crit_stage, ret: crit_stage) + end + + def self.triggerCriticalCalcFromTarget(ability, user, target, crit_stage) + return trigger(CriticalCalcFromTarget, ability, user, target, crit_stage, ret: crit_stage) + end + + #============================================================================= + + def self.triggerOnBeingHit(ability, user, target, move, battle) + OnBeingHit.trigger(ability, user, target, move, battle) + end + + def self.triggerOnDealingHit(ability, user, target, move, battle) + OnDealingHit.trigger(ability, user, target, move, battle) + end + + #============================================================================= + + def self.triggerOnEndOfUsingMove(ability, user, targets, move, battle) + OnEndOfUsingMove.trigger(ability, user, targets, move, battle) + end + + def self.triggerAfterMoveUseFromTarget(ability, target, user, move, switched_battlers, battle) + AfterMoveUseFromTarget.trigger(ability, target, user, move, switched_battlers, battle) + end + + #============================================================================= + + def self.triggerEndOfRoundWeather(ability, weather, battler, battle) + EndOfRoundWeather.trigger(ability, weather, battler, battle) + end + + def self.triggerEndOfRoundHealing(ability, battler, battle) + EndOfRoundHealing.trigger(ability, battler, battle) + end + + def self.triggerEndOfRoundEffect(ability, battler, battle) + EndOfRoundEffect.trigger(ability, battler, battle) + end + + def self.triggerEndOfRoundGainItem(ability, battler, battle) + EndOfRoundGainItem.trigger(ability, battler, battle) + end + + #============================================================================= + + def self.triggerCertainSwitching(ability, switcher, battle) + return trigger(CertainSwitching, ability, switcher, battle) + end + + def self.triggerTrappingByTarget(ability, switcher, bearer, battle) + return trigger(TrappingByTarget, ability, switcher, bearer, battle) + end + + def self.triggerOnSwitchIn(ability, battler, battle) + OnSwitchIn.trigger(ability, battler, battle) + end + + def self.triggerOnSwitchOut(ability, battler, end_of_battle) + OnSwitchOut.trigger(ability, battler, end_of_battle) + end + + def self.triggerChangeOnBattlerFainting(ability, battler, fainted, battle) + ChangeOnBattlerFainting.trigger(ability, battler, fainted, battle) + end + + def self.triggerOnBattlerFainting(ability, battler, fainted, battle) + OnBattlerFainting.trigger(ability, battler, fainted, battle) + end + + def self.triggerOnTerrainChange(ability, battler, battle, ability_changed) + OnTerrainChange.trigger(ability, battler, battle, ability_changed) + end + + def self.triggerOnIntimidated(ability, battler, battle) + OnIntimidated.trigger(ability, battler, battle) + end + + #============================================================================= + + def self.triggerCertainEscapeFromBattle(ability, battler) + return trigger(CertainEscapeFromBattle, ability, battler) + end +end + +#=============================================================================== +# SpeedCalc handlers #=============================================================================== -BattleHandlers::SpeedCalcAbility.add(:CHLOROPHYLL, +Battle::AbilityEffects::SpeedCalc.add(:CHLOROPHYLL, proc { |ability,battler,mult| next mult * 2 if [:Sun, :HarshSun].include?(battler.effectiveWeather) } ) -BattleHandlers::SpeedCalcAbility.add(:QUICKFEET, +Battle::AbilityEffects::SpeedCalc.add(:QUICKFEET, proc { |ability,battler,mult| next mult*1.5 if battler.pbHasAnyStatus? } ) -BattleHandlers::SpeedCalcAbility.add(:SANDRUSH, +Battle::AbilityEffects::SpeedCalc.add(:SANDRUSH, proc { |ability,battler,mult| next mult * 2 if [:Sandstorm].include?(battler.effectiveWeather) } ) -BattleHandlers::SpeedCalcAbility.add(:SLOWSTART, +Battle::AbilityEffects::SpeedCalc.add(:SLOWSTART, proc { |ability,battler,mult| next mult/2 if battler.effects[PBEffects::SlowStart]>0 } ) -BattleHandlers::SpeedCalcAbility.add(:SLUSHRUSH, +Battle::AbilityEffects::SpeedCalc.add(:SLUSHRUSH, proc { |ability,battler,mult| next mult * 2 if [:Hail].include?(battler.effectiveWeather) } ) -BattleHandlers::SpeedCalcAbility.add(:SURGESURFER, +Battle::AbilityEffects::SpeedCalc.add(:SURGESURFER, proc { |ability,battler,mult| next mult*2 if battler.battle.field.terrain == :Electric } ) -BattleHandlers::SpeedCalcAbility.add(:SWIFTSWIM, +Battle::AbilityEffects::SpeedCalc.add(:SWIFTSWIM, proc { |ability,battler,mult| next mult * 2 if [:Rain, :HeavyRain].include?(battler.effectiveWeather) } ) -BattleHandlers::SpeedCalcAbility.add(:UNBURDEN, +Battle::AbilityEffects::SpeedCalc.add(:UNBURDEN, proc { |ability,battler,mult| next mult*2 if battler.effects[PBEffects::Unburden] && !battler.item } ) #=============================================================================== -# WeightCalcAbility handlers +# WeightCalcy handlers #=============================================================================== -BattleHandlers::WeightCalcAbility.add(:HEAVYMETAL, +Battle::AbilityEffects::WeightCalc.add(:HEAVYMETAL, proc { |ability,battler,w| next w*2 } ) -BattleHandlers::WeightCalcAbility.add(:LIGHTMETAL, +Battle::AbilityEffects::WeightCalc.add(:LIGHTMETAL, proc { |ability,battler,w| next [w/2,1].max } ) #=============================================================================== -# AbilityOnHPDroppedBelowHalf handlers +# OnHPDroppedBelowHalf handlers #=============================================================================== -BattleHandlers::AbilityOnHPDroppedBelowHalf.add(:EMERGENCYEXIT, +Battle::AbilityEffects::OnHPDroppedBelowHalf.add(:EMERGENCYEXIT, proc { |ability, battler, move_user, battle| next false if battler.effects[PBEffects::SkyDrop]>=0 || battler.inTwoTurnAttack?("TwoTurnAttackInvulnerableInSkyTargetCannotAct") # Sky Drop @@ -111,13 +405,13 @@ BattleHandlers::AbilityOnHPDroppedBelowHalf.add(:EMERGENCYEXIT, } ) -BattleHandlers::AbilityOnHPDroppedBelowHalf.copy(:EMERGENCYEXIT,:WIMPOUT) +Battle::AbilityEffects::OnHPDroppedBelowHalf.copy(:EMERGENCYEXIT,:WIMPOUT) #=============================================================================== -# StatusCheckAbilityNonIgnorable handlers +# StatusCheckNonIgnorable handlers #=============================================================================== -BattleHandlers::StatusCheckAbilityNonIgnorable.add(:COMATOSE, +Battle::AbilityEffects::StatusCheckNonIgnorable.add(:COMATOSE, proc { |ability,battler,status| next false if !battler.isSpecies?(:KOMALA) next true if status.nil? || status == :SLEEP @@ -125,94 +419,94 @@ BattleHandlers::StatusCheckAbilityNonIgnorable.add(:COMATOSE, ) #=============================================================================== -# StatusImmunityAbility handlers +# StatusImmunity handlers #=============================================================================== -BattleHandlers::StatusImmunityAbility.add(:FLOWERVEIL, +Battle::AbilityEffects::StatusImmunity.add(:FLOWERVEIL, proc { |ability,battler,status| next true if battler.pbHasType?(:GRASS) } ) -BattleHandlers::StatusImmunityAbility.add(:IMMUNITY, +Battle::AbilityEffects::StatusImmunity.add(:IMMUNITY, proc { |ability,battler,status| next true if status == :POISON } ) -BattleHandlers::StatusImmunityAbility.copy(:IMMUNITY, :PASTELVEIL) +Battle::AbilityEffects::StatusImmunity.copy(:IMMUNITY, :PASTELVEIL) -BattleHandlers::StatusImmunityAbility.add(:INSOMNIA, +Battle::AbilityEffects::StatusImmunity.add(:INSOMNIA, proc { |ability,battler,status| next true if status == :SLEEP } ) -BattleHandlers::StatusImmunityAbility.copy(:INSOMNIA,:SWEETVEIL,:VITALSPIRIT) +Battle::AbilityEffects::StatusImmunity.copy(:INSOMNIA, :SWEETVEIL, :VITALSPIRIT) -BattleHandlers::StatusImmunityAbility.add(:LEAFGUARD, +Battle::AbilityEffects::StatusImmunity.add(:LEAFGUARD, proc { |ability,battler,status| next true if [:Sun, :HarshSun].include?(battler.effectiveWeather) } ) -BattleHandlers::StatusImmunityAbility.add(:LIMBER, +Battle::AbilityEffects::StatusImmunity.add(:LIMBER, proc { |ability,battler,status| next true if status == :PARALYSIS } ) -BattleHandlers::StatusImmunityAbility.add(:MAGMAARMOR, +Battle::AbilityEffects::StatusImmunity.add(:MAGMAARMOR, proc { |ability,battler,status| next true if status == :FROZEN } ) -BattleHandlers::StatusImmunityAbility.add(:WATERVEIL, +Battle::AbilityEffects::StatusImmunity.add(:WATERVEIL, proc { |ability,battler,status| next true if status == :BURN } ) -BattleHandlers::StatusImmunityAbility.copy(:WATERVEIL,:WATERBUBBLE) +Battle::AbilityEffects::StatusImmunity.copy(:WATERVEIL,:WATERBUBBLE) #=============================================================================== -# StatusImmunityAbilityNonIgnorable handlers +# StatusImmunityNonIgnorable handlers #=============================================================================== -BattleHandlers::StatusImmunityAbilityNonIgnorable.add(:COMATOSE, +Battle::AbilityEffects::StatusImmunityNonIgnorable.add(:COMATOSE, proc { |ability,battler,status| next true if battler.isSpecies?(:KOMALA) } ) -BattleHandlers::StatusImmunityAbilityNonIgnorable.add(:SHIELDSDOWN, +Battle::AbilityEffects::StatusImmunityNonIgnorable.add(:SHIELDSDOWN, proc { |ability,battler,status| next true if battler.isSpecies?(:MINIOR) && battler.form<7 } ) #=============================================================================== -# StatusImmunityAllyAbility handlers +# StatusImmunityFromAlly handlers #=============================================================================== -BattleHandlers::StatusImmunityAllyAbility.add(:FLOWERVEIL, +Battle::AbilityEffects::StatusImmunityFromAlly.add(:FLOWERVEIL, proc { |ability,battler,status| next true if battler.pbHasType?(:GRASS) } ) -BattleHandlers::StatusImmunityAllyAbility.add(:SWEETVEIL, +Battle::AbilityEffects::StatusImmunityFromAlly.add(:SWEETVEIL, proc { |ability,battler,status| next true if status == :SLEEP } ) #=============================================================================== -# AbilityOnStatusInflicted handlers +# OnStatusInflicted handlers #=============================================================================== -BattleHandlers::AbilityOnStatusInflicted.add(:SYNCHRONIZE, +Battle::AbilityEffects::OnStatusInflicted.add(:SYNCHRONIZE, proc { |ability,battler,user,status| next if !user || user.index==battler.index case status @@ -252,10 +546,10 @@ BattleHandlers::AbilityOnStatusInflicted.add(:SYNCHRONIZE, ) #=============================================================================== -# StatusCureAbility handlers +# StatusCure handlers #=============================================================================== -BattleHandlers::StatusCureAbility.add(:IMMUNITY, +Battle::AbilityEffects::StatusCure.add(:IMMUNITY, proc { |ability,battler| next if battler.status != :POISON battler.battle.pbShowAbilitySplash(battler) @@ -267,7 +561,7 @@ BattleHandlers::StatusCureAbility.add(:IMMUNITY, } ) -BattleHandlers::StatusCureAbility.add(:INSOMNIA, +Battle::AbilityEffects::StatusCure.add(:INSOMNIA, proc { |ability,battler| next if battler.status != :SLEEP battler.battle.pbShowAbilitySplash(battler) @@ -279,9 +573,9 @@ BattleHandlers::StatusCureAbility.add(:INSOMNIA, } ) -BattleHandlers::StatusCureAbility.copy(:INSOMNIA,:VITALSPIRIT) +Battle::AbilityEffects::StatusCure.copy(:INSOMNIA, :VITALSPIRIT) -BattleHandlers::StatusCureAbility.add(:LIMBER, +Battle::AbilityEffects::StatusCure.add(:LIMBER, proc { |ability,battler| next if battler.status != :PARALYSIS battler.battle.pbShowAbilitySplash(battler) @@ -293,7 +587,7 @@ BattleHandlers::StatusCureAbility.add(:LIMBER, } ) -BattleHandlers::StatusCureAbility.add(:MAGMAARMOR, +Battle::AbilityEffects::StatusCure.add(:MAGMAARMOR, proc { |ability,battler| next if battler.status != :FROZEN battler.battle.pbShowAbilitySplash(battler) @@ -305,7 +599,7 @@ BattleHandlers::StatusCureAbility.add(:MAGMAARMOR, } ) -BattleHandlers::StatusCureAbility.add(:OBLIVIOUS, +Battle::AbilityEffects::StatusCure.add(:OBLIVIOUS, proc { |ability,battler| next if battler.effects[PBEffects::Attract]<0 && (battler.effects[PBEffects::Taunt]==0 || Settings::MECHANICS_GENERATION <= 5) @@ -332,7 +626,7 @@ BattleHandlers::StatusCureAbility.add(:OBLIVIOUS, } ) -BattleHandlers::StatusCureAbility.add(:OWNTEMPO, +Battle::AbilityEffects::StatusCure.add(:OWNTEMPO, proc { |ability,battler| next if battler.effects[PBEffects::Confusion]==0 battler.battle.pbShowAbilitySplash(battler) @@ -347,7 +641,7 @@ BattleHandlers::StatusCureAbility.add(:OWNTEMPO, } ) -BattleHandlers::StatusCureAbility.add(:WATERVEIL, +Battle::AbilityEffects::StatusCure.add(:WATERVEIL, proc { |ability,battler| next if battler.status != :BURN battler.battle.pbShowAbilitySplash(battler) @@ -359,13 +653,13 @@ BattleHandlers::StatusCureAbility.add(:WATERVEIL, } ) -BattleHandlers::StatusCureAbility.copy(:WATERVEIL,:WATERBUBBLE) +Battle::AbilityEffects::StatusCure.copy(:WATERVEIL, :WATERBUBBLE) #=============================================================================== -# StatLossImmunityAbility handlers +# StatLossImmunity handlers #=============================================================================== -BattleHandlers::StatLossImmunityAbility.add(:BIGPECKS, +Battle::AbilityEffects::StatLossImmunity.add(:BIGPECKS, proc { |ability,battler,stat,battle,showMessages| next false if stat!=:DEFENSE if showMessages @@ -382,7 +676,7 @@ BattleHandlers::StatLossImmunityAbility.add(:BIGPECKS, } ) -BattleHandlers::StatLossImmunityAbility.add(:CLEARBODY, +Battle::AbilityEffects::StatLossImmunity.add(:CLEARBODY, proc { |ability,battler,stat,battle,showMessages| if showMessages battle.pbShowAbilitySplash(battler) @@ -397,9 +691,9 @@ BattleHandlers::StatLossImmunityAbility.add(:CLEARBODY, } ) -BattleHandlers::StatLossImmunityAbility.copy(:CLEARBODY,:WHITESMOKE) +Battle::AbilityEffects::StatLossImmunity.copy(:CLEARBODY, :WHITESMOKE) -BattleHandlers::StatLossImmunityAbility.add(:FLOWERVEIL, +Battle::AbilityEffects::StatLossImmunity.add(:FLOWERVEIL, proc { |ability,battler,stat,battle,showMessages| next false if !battler.pbHasType?(:GRASS) if showMessages @@ -415,7 +709,7 @@ BattleHandlers::StatLossImmunityAbility.add(:FLOWERVEIL, } ) -BattleHandlers::StatLossImmunityAbility.add(:HYPERCUTTER, +Battle::AbilityEffects::StatLossImmunity.add(:HYPERCUTTER, proc { |ability,battler,stat,battle,showMessages| next false if stat!=:ATTACK if showMessages @@ -432,7 +726,7 @@ BattleHandlers::StatLossImmunityAbility.add(:HYPERCUTTER, } ) -BattleHandlers::StatLossImmunityAbility.add(:KEENEYE, +Battle::AbilityEffects::StatLossImmunity.add(:KEENEYE, proc { |ability,battler,stat,battle,showMessages| next false if stat!=:ACCURACY if showMessages @@ -450,10 +744,10 @@ BattleHandlers::StatLossImmunityAbility.add(:KEENEYE, ) #=============================================================================== -# StatLossImmunityAbilityNonIgnorable handlers +# StatLossImmunityNonIgnorable handlers #=============================================================================== -BattleHandlers::StatLossImmunityAbilityNonIgnorable.add(:FULLMETALBODY, +Battle::AbilityEffects::StatLossImmunityNonIgnorable.add(:FULLMETALBODY, proc { |ability,battler,stat,battle,showMessages| if showMessages battle.pbShowAbilitySplash(battler) @@ -469,10 +763,10 @@ BattleHandlers::StatLossImmunityAbilityNonIgnorable.add(:FULLMETALBODY, ) #=============================================================================== -# StatLossImmunityAllyAbility handlers +# StatLossImmunityFromAlly handlers #=============================================================================== -BattleHandlers::StatLossImmunityAllyAbility.add(:FLOWERVEIL, +Battle::AbilityEffects::StatLossImmunityFromAlly.add(:FLOWERVEIL, proc { |ability,bearer,battler,stat,battle,showMessages| next false if !battler.pbHasType?(:GRASS) if showMessages @@ -490,23 +784,23 @@ BattleHandlers::StatLossImmunityAllyAbility.add(:FLOWERVEIL, ) #=============================================================================== -# AbilityOnStatGain handlers +# OnStatGain handlers #=============================================================================== # There aren't any! #=============================================================================== -# AbilityOnStatLoss handlers +# OnStatLoss handlers #=============================================================================== -BattleHandlers::AbilityOnStatLoss.add(:COMPETITIVE, +Battle::AbilityEffects::OnStatLoss.add(:COMPETITIVE, proc { |ability,battler,stat,user| next if user && !user.opposes?(battler) battler.pbRaiseStatStageByAbility(:SPECIAL_ATTACK,2,battler) } ) -BattleHandlers::AbilityOnStatLoss.add(:DEFIANT, +Battle::AbilityEffects::OnStatLoss.add(:DEFIANT, proc { |ability,battler,stat,user| next if user && !user.opposes?(battler) battler.pbRaiseStatStageByAbility(:ATTACK,2,battler) @@ -514,17 +808,17 @@ BattleHandlers::AbilityOnStatLoss.add(:DEFIANT, ) #=============================================================================== -# PriorityChangeAbility handlers +# PriorityChange handlers #=============================================================================== -BattleHandlers::PriorityChangeAbility.add(:GALEWINGS, +Battle::AbilityEffects::PriorityChange.add(:GALEWINGS, proc { |ability,battler,move,pri| next pri + 1 if (Settings::MECHANICS_GENERATION <= 6 || battler.hp == battler.totalhp) && move.type == :FLYING } ) -BattleHandlers::PriorityChangeAbility.add(:PRANKSTER, +Battle::AbilityEffects::PriorityChange.add(:PRANKSTER, proc { |ability,battler,move,pri| if move.statusMove? battler.effects[PBEffects::Prankster] = true @@ -533,33 +827,33 @@ BattleHandlers::PriorityChangeAbility.add(:PRANKSTER, } ) -BattleHandlers::PriorityChangeAbility.add(:TRIAGE, +Battle::AbilityEffects::PriorityChange.add(:TRIAGE, proc { |ability,battler,move,pri| next pri+3 if move.healingMove? } ) #=============================================================================== -# PriorityBracketChangeAbility handlers +# PriorityBracketChange handlers #=============================================================================== -BattleHandlers::PriorityBracketChangeAbility.add(:QUICKDRAW, +Battle::AbilityEffects::PriorityBracketChange.add(:QUICKDRAW, proc { |ability, battler, subPri, battle| next 1 if subPri == 0 && battle.pbRandom(100) < 30 } ) -BattleHandlers::PriorityBracketChangeAbility.add(:STALL, +Battle::AbilityEffects::PriorityBracketChange.add(:STALL, proc { |ability,battler,subPri,battle| next -1 if subPri==0 } ) #=============================================================================== -# PriorityBracketUseAbility handlers +# PriorityBracketUse handlers #=============================================================================== -BattleHandlers::PriorityBracketUseAbility.add(:QUICKDRAW, +Battle::AbilityEffects::PriorityBracketUse.add(:QUICKDRAW, proc { |ability, battler, battle| battle.pbShowAbilitySplash(battler) battle.pbDisplay(_INTL("{1} made {2} move faster!", battler.abilityName, battler.pbThis(true))) @@ -568,20 +862,20 @@ BattleHandlers::PriorityBracketUseAbility.add(:QUICKDRAW, ) #=============================================================================== -# AbilityOnFlinch handlers +# OnFlinch handlers #=============================================================================== -BattleHandlers::AbilityOnFlinch.add(:STEADFAST, +Battle::AbilityEffects::OnFlinch.add(:STEADFAST, proc { |ability,battler,battle| battler.pbRaiseStatStageByAbility(:SPEED,1,battler) } ) #=============================================================================== -# MoveBlockingAbility handlers +# MoveBlocking handlers #=============================================================================== -BattleHandlers::MoveBlockingAbility.add(:DAZZLING, +Battle::AbilityEffects::MoveBlocking.add(:DAZZLING, proc { |ability,bearer,user,targets,move,battle| next false if battle.choices[user.index][4]<=0 next false if !bearer.opposes?(user) @@ -594,13 +888,13 @@ BattleHandlers::MoveBlockingAbility.add(:DAZZLING, } ) -BattleHandlers::MoveBlockingAbility.copy(:DAZZLING,:QUEENLYMAJESTY) +Battle::AbilityEffects::MoveBlocking.copy(:DAZZLING, :QUEENLYMAJESTY) #=============================================================================== -# MoveImmunityTargetAbility handlers +# MoveImmunity handlers #=============================================================================== -BattleHandlers::MoveImmunityTargetAbility.add(:BULLETPROOF, +Battle::AbilityEffects::MoveImmunity.add(:BULLETPROOF, proc { |ability, user, target, move, type, battle, show_message| next false if !move.bombMove? if show_message @@ -617,7 +911,7 @@ BattleHandlers::MoveImmunityTargetAbility.add(:BULLETPROOF, } ) -BattleHandlers::MoveImmunityTargetAbility.add(:FLASHFIRE, +Battle::AbilityEffects::MoveImmunity.add(:FLASHFIRE, proc { |ability, user, target, move, type, battle, show_message| next false if user.index==target.index next false if type != :FIRE @@ -645,28 +939,28 @@ BattleHandlers::MoveImmunityTargetAbility.add(:FLASHFIRE, } ) -BattleHandlers::MoveImmunityTargetAbility.add(:LIGHTNINGROD, +Battle::AbilityEffects::MoveImmunity.add(:LIGHTNINGROD, proc { |ability, user, target, move, type, battle, show_message| next target.pbMoveImmunityStatRaisingAbility(user, move, type, :ELECTRIC, :SPECIAL_ATTACK, 1, show_message) } ) -BattleHandlers::MoveImmunityTargetAbility.add(:MOTORDRIVE, +Battle::AbilityEffects::MoveImmunity.add(:MOTORDRIVE, proc { |ability, user, target, move, type, battle, show_message| next target.pbMoveImmunityStatRaisingAbility(user, move, type, :ELECTRIC, :SPEED, 1, show_message) } ) -BattleHandlers::MoveImmunityTargetAbility.add(:SAPSIPPER, +Battle::AbilityEffects::MoveImmunity.add(:SAPSIPPER, proc { |ability, user, target, move, type, battle, show_message| next target.pbMoveImmunityStatRaisingAbility(user, move, type, :GRASS, :ATTACK, 1, show_message) } ) -BattleHandlers::MoveImmunityTargetAbility.add(:SOUNDPROOF, +Battle::AbilityEffects::MoveImmunity.add(:SOUNDPROOF, proc { |ability, user, target, move, type, battle, show_message| next false if !move.soundMove? next false if Settings::MECHANICS_GENERATION >= 8 && user.index == target.index @@ -683,14 +977,14 @@ BattleHandlers::MoveImmunityTargetAbility.add(:SOUNDPROOF, } ) -BattleHandlers::MoveImmunityTargetAbility.add(:STORMDRAIN, +Battle::AbilityEffects::MoveImmunity.add(:STORMDRAIN, proc { |ability, user, target, move, type, battle, show_message| next target.pbMoveImmunityStatRaisingAbility(user, move, type, :WATER, :SPECIAL_ATTACK, 1, show_message) } ) -BattleHandlers::MoveImmunityTargetAbility.add(:TELEPATHY, +Battle::AbilityEffects::MoveImmunity.add(:TELEPATHY, proc { |ability, user, target, move, type, battle, show_message| next false if move.statusMove? next false if user.index==target.index || target.opposes?(user) @@ -708,21 +1002,21 @@ BattleHandlers::MoveImmunityTargetAbility.add(:TELEPATHY, } ) -BattleHandlers::MoveImmunityTargetAbility.add(:VOLTABSORB, +Battle::AbilityEffects::MoveImmunity.add(:VOLTABSORB, proc { |ability, user, target, move, type, battle, show_message| next target.pbMoveImmunityHealingAbility(user, move, type, :ELECTRIC, show_message) } ) -BattleHandlers::MoveImmunityTargetAbility.add(:WATERABSORB, +Battle::AbilityEffects::MoveImmunity.add(:WATERABSORB, proc { |ability, user, target, move, type, battle, show_message| next target.pbMoveImmunityHealingAbility(user, move, type, :WATER, show_message) } ) -BattleHandlers::MoveImmunityTargetAbility.copy(:WATERABSORB,:DRYSKIN) +Battle::AbilityEffects::MoveImmunity.copy(:WATERABSORB, :DRYSKIN) -BattleHandlers::MoveImmunityTargetAbility.add(:WONDERGUARD, +Battle::AbilityEffects::MoveImmunity.add(:WONDERGUARD, proc { |ability, user, target, move, type, battle, show_message| next false if move.statusMove? next false if !type || Effectiveness.super_effective?(target.damageState.typeMod) @@ -740,10 +1034,10 @@ BattleHandlers::MoveImmunityTargetAbility.add(:WONDERGUARD, ) #=============================================================================== -# MoveBaseTypeModifierAbility handlers +# ModifyMoveBaseType handlers #=============================================================================== -BattleHandlers::MoveBaseTypeModifierAbility.add(:AERILATE, +Battle::AbilityEffects::ModifyMoveBaseType.add(:AERILATE, proc { |ability,user,move,type| next if type != :NORMAL || !GameData::Type.exists?(:FLYING) move.powerBoost = true @@ -751,7 +1045,7 @@ BattleHandlers::MoveBaseTypeModifierAbility.add(:AERILATE, } ) -BattleHandlers::MoveBaseTypeModifierAbility.add(:GALVANIZE, +Battle::AbilityEffects::ModifyMoveBaseType.add(:GALVANIZE, proc { |ability,user,move,type| next if type != :NORMAL || !GameData::Type.exists?(:ELECTRIC) move.powerBoost = true @@ -759,13 +1053,13 @@ BattleHandlers::MoveBaseTypeModifierAbility.add(:GALVANIZE, } ) -BattleHandlers::MoveBaseTypeModifierAbility.add(:LIQUIDVOICE, +Battle::AbilityEffects::ModifyMoveBaseType.add(:LIQUIDVOICE, proc { |ability,user,move,type| next :WATER if GameData::Type.exists?(:WATER) && move.soundMove? } ) -BattleHandlers::MoveBaseTypeModifierAbility.add(:NORMALIZE, +Battle::AbilityEffects::ModifyMoveBaseType.add(:NORMALIZE, proc { |ability,user,move,type| next if !GameData::Type.exists?(:NORMAL) move.powerBoost = true if Settings::MECHANICS_GENERATION >= 7 @@ -773,7 +1067,7 @@ BattleHandlers::MoveBaseTypeModifierAbility.add(:NORMALIZE, } ) -BattleHandlers::MoveBaseTypeModifierAbility.add(:PIXILATE, +Battle::AbilityEffects::ModifyMoveBaseType.add(:PIXILATE, proc { |ability,user,move,type| next if type != :NORMAL || !GameData::Type.exists?(:FAIRY) move.powerBoost = true @@ -781,7 +1075,7 @@ BattleHandlers::MoveBaseTypeModifierAbility.add(:PIXILATE, } ) -BattleHandlers::MoveBaseTypeModifierAbility.add(:REFRIGERATE, +Battle::AbilityEffects::ModifyMoveBaseType.add(:REFRIGERATE, proc { |ability,user,move,type| next if type != :NORMAL || !GameData::Type.exists?(:ICE) move.powerBoost = true @@ -790,102 +1084,102 @@ BattleHandlers::MoveBaseTypeModifierAbility.add(:REFRIGERATE, ) #=============================================================================== -# AccuracyCalcUserAbility handlers +# AccuracyCalcFromUser handlers #=============================================================================== -BattleHandlers::AccuracyCalcUserAbility.add(:COMPOUNDEYES, +Battle::AbilityEffects::AccuracyCalcFromUser.add(:COMPOUNDEYES, proc { |ability,mods,user,target,move,type| mods[:accuracy_multiplier] *= 1.3 } ) -BattleHandlers::AccuracyCalcUserAbility.add(:HUSTLE, +Battle::AbilityEffects::AccuracyCalcFromUser.add(:HUSTLE, proc { |ability,mods,user,target,move,type| mods[:accuracy_multiplier] *= 0.8 if move.physicalMove? } ) -BattleHandlers::AccuracyCalcUserAbility.add(:KEENEYE, +Battle::AbilityEffects::AccuracyCalcFromUser.add(:KEENEYE, proc { |ability,mods,user,target,move,type| mods[:evasion_stage] = 0 if mods[:evasion_stage] > 0 && Settings::MECHANICS_GENERATION >= 6 } ) -BattleHandlers::AccuracyCalcUserAbility.add(:NOGUARD, +Battle::AbilityEffects::AccuracyCalcFromUser.add(:NOGUARD, proc { |ability,mods,user,target,move,type| mods[:base_accuracy] = 0 } ) -BattleHandlers::AccuracyCalcUserAbility.add(:UNAWARE, +Battle::AbilityEffects::AccuracyCalcFromUser.add(:UNAWARE, proc { |ability,mods,user,target,move,type| mods[:evasion_stage] = 0 if move.damagingMove? } ) -BattleHandlers::AccuracyCalcUserAbility.add(:VICTORYSTAR, +Battle::AbilityEffects::AccuracyCalcFromUser.add(:VICTORYSTAR, proc { |ability,mods,user,target,move,type| mods[:accuracy_multiplier] *= 1.1 } ) #=============================================================================== -# AccuracyCalcUserAllyAbility handlers +# AccuracyCalcFromAlly handlers #=============================================================================== -BattleHandlers::AccuracyCalcUserAllyAbility.add(:VICTORYSTAR, +Battle::AbilityEffects::AccuracyCalcFromAlly.add(:VICTORYSTAR, proc { |ability,mods,user,target,move,type| mods[:accuracy_multiplier] *= 1.1 } ) #=============================================================================== -# AccuracyCalcTargetAbility handlers +# AccuracyCalcFromTarget handlers #=============================================================================== -BattleHandlers::AccuracyCalcTargetAbility.add(:LIGHTNINGROD, +Battle::AbilityEffects::AccuracyCalcFromTarget.add(:LIGHTNINGROD, proc { |ability,mods,user,target,move,type| mods[:base_accuracy] = 0 if type == :ELECTRIC } ) -BattleHandlers::AccuracyCalcTargetAbility.add(:NOGUARD, +Battle::AbilityEffects::AccuracyCalcFromTarget.add(:NOGUARD, proc { |ability,mods,user,target,move,type| mods[:base_accuracy] = 0 } ) -BattleHandlers::AccuracyCalcTargetAbility.add(:SANDVEIL, +Battle::AbilityEffects::AccuracyCalcFromTarget.add(:SANDVEIL, proc { |ability,mods,user,target,move,type| mods[:evasion_multiplier] *= 1.25 if target.effectiveWeather == :Sandstorm } ) -BattleHandlers::AccuracyCalcTargetAbility.add(:SNOWCLOAK, +Battle::AbilityEffects::AccuracyCalcFromTarget.add(:SNOWCLOAK, proc { |ability,mods,user,target,move,type| mods[:evasion_multiplier] *= 1.25 if target.effectiveWeather == :Hail } ) -BattleHandlers::AccuracyCalcTargetAbility.add(:STORMDRAIN, +Battle::AbilityEffects::AccuracyCalcFromTarget.add(:STORMDRAIN, proc { |ability,mods,user,target,move,type| mods[:base_accuracy] = 0 if type == :WATER } ) -BattleHandlers::AccuracyCalcTargetAbility.add(:TANGLEDFEET, +Battle::AbilityEffects::AccuracyCalcFromTarget.add(:TANGLEDFEET, proc { |ability,mods,user,target,move,type| mods[:accuracy_multiplier] /= 2 if target.effects[PBEffects::Confusion] > 0 } ) -BattleHandlers::AccuracyCalcTargetAbility.add(:UNAWARE, +Battle::AbilityEffects::AccuracyCalcFromTarget.add(:UNAWARE, proc { |ability,mods,user,target,move,type| mods[:accuracy_stage] = 0 if move.damagingMove? } ) -BattleHandlers::AccuracyCalcTargetAbility.add(:WONDERSKIN, +Battle::AbilityEffects::AccuracyCalcFromTarget.add(:WONDERSKIN, proc { |ability,mods,user,target,move,type| if move.statusMove? && user.opposes?(target) mods[:base_accuracy] = 50 if mods[:base_accuracy] > 50 @@ -894,18 +1188,18 @@ BattleHandlers::AccuracyCalcTargetAbility.add(:WONDERSKIN, ) #=============================================================================== -# DamageCalcUserAbility handlers +# DamageCalcFromUser handlers #=============================================================================== -BattleHandlers::DamageCalcUserAbility.add(:AERILATE, +Battle::AbilityEffects::DamageCalcFromUser.add(:AERILATE, proc { |ability,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if move.powerBoost } ) -BattleHandlers::DamageCalcUserAbility.copy(:AERILATE, :PIXILATE, :REFRIGERATE, :GALVANIZE, :NORMALIZE) +Battle::AbilityEffects::DamageCalcFromUser.copy(:AERILATE, :PIXILATE, :REFRIGERATE, :GALVANIZE, :NORMALIZE) -BattleHandlers::DamageCalcUserAbility.add(:ANALYTIC, +Battle::AbilityEffects::DamageCalcFromUser.add(:ANALYTIC, proc { |ability,user,target,move,mults,baseDmg,type| # NOTE: If another battler faints earlier in the round, but it would have # moved after the user, then Analytic would not power up the move. @@ -920,7 +1214,7 @@ BattleHandlers::DamageCalcUserAbility.add(:ANALYTIC, } ) -BattleHandlers::DamageCalcUserAbility.add(:BLAZE, +Battle::AbilityEffects::DamageCalcFromUser.add(:BLAZE, proc { |ability,user,target,move,mults,baseDmg,type| if user.hp <= user.totalhp / 3 && type == :FIRE mults[:attack_multiplier] *= 1.5 @@ -928,19 +1222,19 @@ BattleHandlers::DamageCalcUserAbility.add(:BLAZE, } ) -BattleHandlers::DamageCalcUserAbility.add(:DEFEATIST, +Battle::AbilityEffects::DamageCalcFromUser.add(:DEFEATIST, proc { |ability,user,target,move,mults,baseDmg,type| mults[:attack_multiplier] /= 2 if user.hp <= user.totalhp / 2 } ) -BattleHandlers::DamageCalcUserAbility.add(:DRAGONSMAW, +Battle::AbilityEffects::DamageCalcFromUser.add(:DRAGONSMAW, proc { |ability, user, target, move, mults, baseDmg, type| mults[:attack_multiplier] *= 1.5 if type == :DRAGON } ) -BattleHandlers::DamageCalcUserAbility.add(:FLAREBOOST, +Battle::AbilityEffects::DamageCalcFromUser.add(:FLAREBOOST, proc { |ability,user,target,move,mults,baseDmg,type| if user.burned? && move.specialMove? mults[:base_damage_multiplier] *= 1.5 @@ -948,7 +1242,7 @@ BattleHandlers::DamageCalcUserAbility.add(:FLAREBOOST, } ) -BattleHandlers::DamageCalcUserAbility.add(:FLASHFIRE, +Battle::AbilityEffects::DamageCalcFromUser.add(:FLASHFIRE, proc { |ability,user,target,move,mults,baseDmg,type| if user.effects[PBEffects::FlashFire] && type == :FIRE mults[:attack_multiplier] *= 1.5 @@ -956,7 +1250,7 @@ BattleHandlers::DamageCalcUserAbility.add(:FLASHFIRE, } ) -BattleHandlers::DamageCalcUserAbility.add(:FLOWERGIFT, +Battle::AbilityEffects::DamageCalcFromUser.add(:FLOWERGIFT, proc { |ability,user,target,move,mults,baseDmg,type| if move.physicalMove? && [:Sun, :HarshSun].include?(user.effectiveWeather) mults[:attack_multiplier] *= 1.5 @@ -964,13 +1258,13 @@ BattleHandlers::DamageCalcUserAbility.add(:FLOWERGIFT, } ) -BattleHandlers::DamageCalcUserAbility.add(:GORILLATACTICS, +Battle::AbilityEffects::DamageCalcFromUser.add(:GORILLATACTICS, proc { |ability, user, target, move, mults, baseDmg, type| mults[:attack_multiplier] *= 1.5 } ) -BattleHandlers::DamageCalcUserAbility.add(:GUTS, +Battle::AbilityEffects::DamageCalcFromUser.add(:GUTS, proc { |ability,user,target,move,mults,baseDmg,type| if user.pbHasAnyStatus? && move.physicalMove? mults[:attack_multiplier] *= 1.5 @@ -978,33 +1272,33 @@ BattleHandlers::DamageCalcUserAbility.add(:GUTS, } ) -BattleHandlers::DamageCalcUserAbility.add(:HUGEPOWER, +Battle::AbilityEffects::DamageCalcFromUser.add(:HUGEPOWER, proc { |ability,user,target,move,mults,baseDmg,type| mults[:attack_multiplier] *= 2 if move.physicalMove? } ) -BattleHandlers::DamageCalcUserAbility.copy(:HUGEPOWER,:PUREPOWER) +Battle::AbilityEffects::DamageCalcFromUser.copy(:HUGEPOWER, :PUREPOWER) -BattleHandlers::DamageCalcUserAbility.add(:HUSTLE, +Battle::AbilityEffects::DamageCalcFromUser.add(:HUSTLE, proc { |ability,user,target,move,mults,baseDmg,type| mults[:attack_multiplier] *= 1.5 if move.physicalMove? } ) -BattleHandlers::DamageCalcUserAbility.add(:IRONFIST, +Battle::AbilityEffects::DamageCalcFromUser.add(:IRONFIST, proc { |ability,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if move.punchingMove? } ) -BattleHandlers::DamageCalcUserAbility.add(:MEGALAUNCHER, +Battle::AbilityEffects::DamageCalcFromUser.add(:MEGALAUNCHER, proc { |ability,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.5 if move.pulseMove? } ) -BattleHandlers::DamageCalcUserAbility.add(:MINUS, +Battle::AbilityEffects::DamageCalcFromUser.add(:MINUS, proc { |ability,user,target,move,mults,baseDmg,type| next if !move.specialMove? if user.allAllies.any? { |b| b.hasActiveAbility?([:MINUS, :PLUS]) } @@ -1013,9 +1307,9 @@ BattleHandlers::DamageCalcUserAbility.add(:MINUS, } ) -BattleHandlers::DamageCalcUserAbility.copy(:MINUS,:PLUS) +Battle::AbilityEffects::DamageCalcFromUser.copy(:MINUS, :PLUS) -BattleHandlers::DamageCalcUserAbility.add(:NEUROFORCE, +Battle::AbilityEffects::DamageCalcFromUser.add(:NEUROFORCE, proc { |ability,user,target,move,mults,baseDmg,type| if Effectiveness.super_effective?(target.damageState.typeMod) mults[:final_damage_multiplier] *= 1.25 @@ -1023,7 +1317,7 @@ BattleHandlers::DamageCalcUserAbility.add(:NEUROFORCE, } ) -BattleHandlers::DamageCalcUserAbility.add(:OVERGROW, +Battle::AbilityEffects::DamageCalcFromUser.add(:OVERGROW, proc { |ability,user,target,move,mults,baseDmg,type| if user.hp <= user.totalhp / 3 && type == :GRASS mults[:attack_multiplier] *= 1.5 @@ -1031,19 +1325,19 @@ BattleHandlers::DamageCalcUserAbility.add(:OVERGROW, } ) -BattleHandlers::DamageCalcUserAbility.add(:PUNKROCK, +Battle::AbilityEffects::DamageCalcFromUser.add(:PUNKROCK, proc { |ability, user, target, move, mults, baseDmg, type| mults[:attack_multiplier] *= 1.3 if move.soundMove? } ) -BattleHandlers::DamageCalcUserAbility.add(:RECKLESS, +Battle::AbilityEffects::DamageCalcFromUser.add(:RECKLESS, proc { |ability,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if move.recoilMove? } ) -BattleHandlers::DamageCalcUserAbility.add(:RIVALRY, +Battle::AbilityEffects::DamageCalcFromUser.add(:RIVALRY, proc { |ability,user,target,move,mults,baseDmg,type| if user.gender!=2 && target.gender!=2 if user.gender==target.gender @@ -1055,7 +1349,7 @@ BattleHandlers::DamageCalcUserAbility.add(:RIVALRY, } ) -BattleHandlers::DamageCalcUserAbility.add(:SANDFORCE, +Battle::AbilityEffects::DamageCalcFromUser.add(:SANDFORCE, proc { |ability,user,target,move,mults,baseDmg,type| if user.effectiveWeather == :Sandstorm && [:ROCK, :GROUND, :STEEL].include?(type) @@ -1064,19 +1358,19 @@ BattleHandlers::DamageCalcUserAbility.add(:SANDFORCE, } ) -BattleHandlers::DamageCalcUserAbility.add(:SHEERFORCE, +Battle::AbilityEffects::DamageCalcFromUser.add(:SHEERFORCE, proc { |ability,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.3 if move.addlEffect > 0 } ) -BattleHandlers::DamageCalcUserAbility.add(:SLOWSTART, +Battle::AbilityEffects::DamageCalcFromUser.add(:SLOWSTART, proc { |ability,user,target,move,mults,baseDmg,type| mults[:attack_multiplier] /= 2 if user.effects[PBEffects::SlowStart] > 0 && move.physicalMove? } ) -BattleHandlers::DamageCalcUserAbility.add(:SOLARPOWER, +Battle::AbilityEffects::DamageCalcFromUser.add(:SOLARPOWER, proc { |ability,user,target,move,mults,baseDmg,type| if move.specialMove? && [:Sun, :HarshSun].include?(user.effectiveWeather) mults[:attack_multiplier] *= 1.5 @@ -1084,7 +1378,7 @@ BattleHandlers::DamageCalcUserAbility.add(:SOLARPOWER, } ) -BattleHandlers::DamageCalcUserAbility.add(:SNIPER, +Battle::AbilityEffects::DamageCalcFromUser.add(:SNIPER, proc { |ability,user,target,move,mults,baseDmg,type| if target.damageState.critical mults[:final_damage_multiplier] *= 1.5 @@ -1092,31 +1386,31 @@ BattleHandlers::DamageCalcUserAbility.add(:SNIPER, } ) -BattleHandlers::DamageCalcUserAbility.add(:STAKEOUT, +Battle::AbilityEffects::DamageCalcFromUser.add(:STAKEOUT, proc { |ability,user,target,move,mults,baseDmg,type| mults[:attack_multiplier] *= 2 if target.battle.choices[target.index][0] == :SwitchOut } ) -BattleHandlers::DamageCalcUserAbility.add(:STEELWORKER, +Battle::AbilityEffects::DamageCalcFromUser.add(:STEELWORKER, proc { |ability,user,target,move,mults,baseDmg,type| mults[:attack_multiplier] *= 1.5 if type == :STEEL } ) -BattleHandlers::DamageCalcUserAbility.add(:STEELYSPIRIT, +Battle::AbilityEffects::DamageCalcFromUser.add(:STEELYSPIRIT, proc { |ability, user, target, move, mults, baseDmg, type| mults[:final_damage_multiplier] *= 1.5 if type == :STEEL } ) -BattleHandlers::DamageCalcUserAbility.add(:STRONGJAW, +Battle::AbilityEffects::DamageCalcFromUser.add(:STRONGJAW, proc { |ability,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.5 if move.bitingMove? } ) -BattleHandlers::DamageCalcUserAbility.add(:SWARM, +Battle::AbilityEffects::DamageCalcFromUser.add(:SWARM, proc { |ability,user,target,move,mults,baseDmg,type| if user.hp <= user.totalhp / 3 && type == :BUG mults[:attack_multiplier] *= 1.5 @@ -1124,7 +1418,7 @@ BattleHandlers::DamageCalcUserAbility.add(:SWARM, } ) -BattleHandlers::DamageCalcUserAbility.add(:TECHNICIAN, +Battle::AbilityEffects::DamageCalcFromUser.add(:TECHNICIAN, proc { |ability,user,target,move,mults,baseDmg,type| if user.index != target.index && move && move.id != :STRUGGLE && baseDmg * mults[:base_damage_multiplier] <= 60 @@ -1133,13 +1427,13 @@ BattleHandlers::DamageCalcUserAbility.add(:TECHNICIAN, } ) -BattleHandlers::DamageCalcUserAbility.add(:TINTEDLENS, +Battle::AbilityEffects::DamageCalcFromUser.add(:TINTEDLENS, proc { |ability,user,target,move,mults,baseDmg,type| mults[:final_damage_multiplier] *= 2 if Effectiveness.resistant?(target.damageState.typeMod) } ) -BattleHandlers::DamageCalcUserAbility.add(:TORRENT, +Battle::AbilityEffects::DamageCalcFromUser.add(:TORRENT, proc { |ability,user,target,move,mults,baseDmg,type| if user.hp <= user.totalhp / 3 && type == :WATER mults[:attack_multiplier] *= 1.5 @@ -1147,13 +1441,13 @@ BattleHandlers::DamageCalcUserAbility.add(:TORRENT, } ) -BattleHandlers::DamageCalcUserAbility.add(:TOUGHCLAWS, +Battle::AbilityEffects::DamageCalcFromUser.add(:TOUGHCLAWS, proc { |ability,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 4 / 3.0 if move.contactMove? } ) -BattleHandlers::DamageCalcUserAbility.add(:TOXICBOOST, +Battle::AbilityEffects::DamageCalcFromUser.add(:TOXICBOOST, proc { |ability,user,target,move,mults,baseDmg,type| if user.poisoned? && move.physicalMove? mults[:base_damage_multiplier] *= 1.5 @@ -1161,30 +1455,30 @@ BattleHandlers::DamageCalcUserAbility.add(:TOXICBOOST, } ) -BattleHandlers::DamageCalcUserAbility.add(:TRANSISTOR, +Battle::AbilityEffects::DamageCalcFromUser.add(:TRANSISTOR, proc { |ability, user, target, move, mults, baseDmg, type| mults[:attack_multiplier] *= 1.5 if type == :ELECTRIC } ) -BattleHandlers::DamageCalcUserAbility.add(:WATERBUBBLE, +Battle::AbilityEffects::DamageCalcFromUser.add(:WATERBUBBLE, proc { |ability,user,target,move,mults,baseDmg,type| mults[:attack_multiplier] *= 2 if type == :WATER } ) #=============================================================================== -# DamageCalcUserAllyAbility handlers +# DamageCalcFromAlly handlers #=============================================================================== -BattleHandlers::DamageCalcUserAllyAbility.add(:BATTERY, +Battle::AbilityEffects::DamageCalcFromAlly.add(:BATTERY, proc { |ability,user,target,move,mults,baseDmg,type| next if !move.specialMove? mults[:final_damage_multiplier] *= 1.3 } ) -BattleHandlers::DamageCalcUserAllyAbility.add(:FLOWERGIFT, +Battle::AbilityEffects::DamageCalcFromAlly.add(:FLOWERGIFT, proc { |ability,user,target,move,mults,baseDmg,type| if move.physicalMove? && [:Sun, :HarshSun].include?(user.effectiveWeather) mults[:attack_multiplier] *= 1.5 @@ -1192,29 +1486,29 @@ BattleHandlers::DamageCalcUserAllyAbility.add(:FLOWERGIFT, } ) -BattleHandlers::DamageCalcUserAllyAbility.add(:POWERSPOT, +Battle::AbilityEffects::DamageCalcFromAlly.add(:POWERSPOT, proc { |ability, user, target, move, mults, baseDmg, type| mults[:final_damage_multiplier] *= 1.3 } ) -BattleHandlers::DamageCalcUserAllyAbility.add(:STEELYSPIRIT, +Battle::AbilityEffects::DamageCalcFromAlly.add(:STEELYSPIRIT, proc { |ability, user, target, move, mults, baseDmg, type| mults[:final_damage_multiplier] *= 1.5 if type == :STEEL } ) #=============================================================================== -# DamageCalcTargetAbility handlers +# DamageCalcFromTarget handlers #=============================================================================== -BattleHandlers::DamageCalcTargetAbility.add(:DRYSKIN, +Battle::AbilityEffects::DamageCalcFromTarget.add(:DRYSKIN, proc { |ability,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.25 if type == :FIRE } ) -BattleHandlers::DamageCalcTargetAbility.add(:FILTER, +Battle::AbilityEffects::DamageCalcFromTarget.add(:FILTER, proc { |ability,user,target,move,mults,baseDmg,type| if Effectiveness.super_effective?(target.damageState.typeMod) mults[:final_damage_multiplier] *= 0.75 @@ -1222,9 +1516,9 @@ BattleHandlers::DamageCalcTargetAbility.add(:FILTER, } ) -BattleHandlers::DamageCalcTargetAbility.copy(:FILTER,:SOLIDROCK) +Battle::AbilityEffects::DamageCalcFromTarget.copy(:FILTER, :SOLIDROCK) -BattleHandlers::DamageCalcTargetAbility.add(:FLOWERGIFT, +Battle::AbilityEffects::DamageCalcFromTarget.add(:FLOWERGIFT, proc { |ability,user,target,move,mults,baseDmg,type| if move.specialMove? && [:Sun, :HarshSun].include?(target.effectiveWeather) mults[:defense_multiplier] *= 1.5 @@ -1232,21 +1526,21 @@ BattleHandlers::DamageCalcTargetAbility.add(:FLOWERGIFT, } ) -BattleHandlers::DamageCalcTargetAbility.add(:FLUFFY, +Battle::AbilityEffects::DamageCalcFromTarget.add(:FLUFFY, proc { |ability,user,target,move,mults,baseDmg,type| mults[:final_damage_multiplier] *= 2 if move.calcType == :FIRE mults[:final_damage_multiplier] /= 2 if move.pbContactMove? } ) -BattleHandlers::DamageCalcTargetAbility.add(:FURCOAT, +Battle::AbilityEffects::DamageCalcFromTarget.add(:FURCOAT, proc { |ability,user,target,move,mults,baseDmg,type| mults[:defense_multiplier] *= 2 if move.physicalMove? || move.function == "UseTargetDefenseInsteadOfTargetSpDef" # Psyshock } ) -BattleHandlers::DamageCalcTargetAbility.add(:GRASSPELT, +Battle::AbilityEffects::DamageCalcFromTarget.add(:GRASSPELT, proc { |ability,user,target,move,mults,baseDmg,type| if user.battle.field.terrain == :Grassy mults[:defense_multiplier] *= 1.5 @@ -1254,19 +1548,19 @@ BattleHandlers::DamageCalcTargetAbility.add(:GRASSPELT, } ) -BattleHandlers::DamageCalcTargetAbility.add(:HEATPROOF, +Battle::AbilityEffects::DamageCalcFromTarget.add(:HEATPROOF, proc { |ability,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] /= 2 if type == :FIRE } ) -BattleHandlers::DamageCalcTargetAbility.add(:ICESCALES, +Battle::AbilityEffects::DamageCalcFromTarget.add(:ICESCALES, proc { |ability, user, target, move, mults, baseDmg, type| mults[:final_damage_multiplier] /= 2 if move.specialMove? } ) -BattleHandlers::DamageCalcTargetAbility.add(:MARVELSCALE, +Battle::AbilityEffects::DamageCalcFromTarget.add(:MARVELSCALE, proc { |ability,user,target,move,mults,baseDmg,type| if target.pbHasAnyStatus? && move.physicalMove? mults[:defense_multiplier] *= 1.5 @@ -1274,35 +1568,35 @@ BattleHandlers::DamageCalcTargetAbility.add(:MARVELSCALE, } ) -BattleHandlers::DamageCalcTargetAbility.add(:MULTISCALE, +Battle::AbilityEffects::DamageCalcFromTarget.add(:MULTISCALE, proc { |ability,user,target,move,mults,baseDmg,type| mults[:final_damage_multiplier] /= 2 if target.hp == target.totalhp } ) -BattleHandlers::DamageCalcTargetAbility.add(:PUNKROCK, +Battle::AbilityEffects::DamageCalcFromTarget.add(:PUNKROCK, proc { |ability, user, target, move, mults, baseDmg, type| mults[:final_damage_multiplier] /= 2 if move.soundMove? } ) -BattleHandlers::DamageCalcTargetAbility.add(:THICKFAT, +Battle::AbilityEffects::DamageCalcFromTarget.add(:THICKFAT, proc { |ability,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] /= 2 if type == :FIRE || type == :ICE } ) -BattleHandlers::DamageCalcTargetAbility.add(:WATERBUBBLE, +Battle::AbilityEffects::DamageCalcFromTarget.add(:WATERBUBBLE, proc { |ability,user,target,move,mults,baseDmg,type| mults[:final_damage_multiplier] /= 2 if type == :FIRE } ) #=============================================================================== -# DamageCalcTargetAbilityNonIgnorable handlers +# DamageCalcFromTargetNonIgnorable handlers #=============================================================================== -BattleHandlers::DamageCalcTargetAbilityNonIgnorable.add(:PRISMARMOR, +Battle::AbilityEffects::DamageCalcFromTargetNonIgnorable.add(:PRISMARMOR, proc { |ability,user,target,move,mults,baseDmg,type| if Effectiveness.super_effective?(target.damageState.typeMod) mults[:final_damage_multiplier] *= 0.75 @@ -1310,7 +1604,7 @@ BattleHandlers::DamageCalcTargetAbilityNonIgnorable.add(:PRISMARMOR, } ) -BattleHandlers::DamageCalcTargetAbilityNonIgnorable.add(:SHADOWSHIELD, +Battle::AbilityEffects::DamageCalcFromTargetNonIgnorable.add(:SHADOWSHIELD, proc { |ability,user,target,move,mults,baseDmg,type| if target.hp==target.totalhp mults[:final_damage_multiplier] /= 2 @@ -1319,10 +1613,10 @@ BattleHandlers::DamageCalcTargetAbilityNonIgnorable.add(:SHADOWSHIELD, ) #=============================================================================== -# DamageCalcTargetAllyAbility handlers +# DamageCalcFromTargetAlly handlers #=============================================================================== -BattleHandlers::DamageCalcTargetAllyAbility.add(:FLOWERGIFT, +Battle::AbilityEffects::DamageCalcFromTargetAlly.add(:FLOWERGIFT, proc { |ability,user,target,move,mults,baseDmg,type| if move.specialMove? && [:Sun, :HarshSun].include?(target.effectiveWeather) mults[:defense_multiplier] *= 1.5 @@ -1330,45 +1624,45 @@ BattleHandlers::DamageCalcTargetAllyAbility.add(:FLOWERGIFT, } ) -BattleHandlers::DamageCalcTargetAllyAbility.add(:FRIENDGUARD, +Battle::AbilityEffects::DamageCalcFromTargetAlly.add(:FRIENDGUARD, proc { |ability,user,target,move,mults,baseDmg,type| mults[:final_damage_multiplier] *= 0.75 } ) #=============================================================================== -# CriticalCalcUserAbility handlers +# CriticalCalcFromUser handlers #=============================================================================== -BattleHandlers::CriticalCalcUserAbility.add(:MERCILESS, +Battle::AbilityEffects::CriticalCalcFromUser.add(:MERCILESS, proc { |ability,user,target,c| next 99 if target.poisoned? } ) -BattleHandlers::CriticalCalcUserAbility.add(:SUPERLUCK, +Battle::AbilityEffects::CriticalCalcFromUser.add(:SUPERLUCK, proc { |ability,user,target,c| next c+1 } ) #=============================================================================== -# CriticalCalcTargetAbility handlers +# CriticalCalcFromTarget handlers #=============================================================================== -BattleHandlers::CriticalCalcTargetAbility.add(:BATTLEARMOR, +Battle::AbilityEffects::CriticalCalcFromTarget.add(:BATTLEARMOR, proc { |ability,user,target,c| next -1 } ) -BattleHandlers::CriticalCalcTargetAbility.copy(:BATTLEARMOR,:SHELLARMOR) +Battle::AbilityEffects::CriticalCalcFromTarget.copy(:BATTLEARMOR, :SHELLARMOR) #=============================================================================== -# TargetAbilityOnHit handlers +# OnBeingHit handlers #=============================================================================== -BattleHandlers::TargetAbilityOnHit.add(:AFTERMATH, +Battle::AbilityEffects::OnBeingHit.add(:AFTERMATH, proc { |ability,user,target,move,battle| next if !target.fainted? next if !move.pbContactMove?(user) @@ -1398,7 +1692,7 @@ BattleHandlers::TargetAbilityOnHit.add(:AFTERMATH, } ) -BattleHandlers::TargetAbilityOnHit.add(:ANGERPOINT, +Battle::AbilityEffects::OnBeingHit.add(:ANGERPOINT, proc { |ability,user,target,move,battle| next if !target.damageState.critical next if !target.pbCanRaiseStatStage?(:ATTACK,target) @@ -1416,7 +1710,7 @@ BattleHandlers::TargetAbilityOnHit.add(:ANGERPOINT, } ) -BattleHandlers::TargetAbilityOnHit.add(:COTTONDOWN, +Battle::AbilityEffects::OnBeingHit.add(:COTTONDOWN, proc { |ability, user, target, move, battle| next if battle.allBattlers.none? { |b| b.pbCanLowerStatStage?(:DEFENSE, target) } battle.pbShowAbilitySplash(battler) @@ -1427,7 +1721,7 @@ BattleHandlers::TargetAbilityOnHit.add(:COTTONDOWN, } ) -BattleHandlers::TargetAbilityOnHit.add(:CURSEDBODY, +Battle::AbilityEffects::OnBeingHit.add(:CURSEDBODY, proc { |ability,user,target,move,battle| next if user.fainted? next if user.effects[PBEffects::Disable]>0 @@ -1456,7 +1750,7 @@ BattleHandlers::TargetAbilityOnHit.add(:CURSEDBODY, } ) -BattleHandlers::TargetAbilityOnHit.add(:CUTECHARM, +Battle::AbilityEffects::OnBeingHit.add(:CUTECHARM, proc { |ability,user,target,move,battle| next if target.fainted? next if !move.pbContactMove?(user) @@ -1475,7 +1769,7 @@ BattleHandlers::TargetAbilityOnHit.add(:CUTECHARM, } ) -BattleHandlers::TargetAbilityOnHit.add(:EFFECTSPORE, +Battle::AbilityEffects::OnBeingHit.add(:EFFECTSPORE, proc { |ability,user,target,move,battle| # NOTE: This ability has a 30% chance of triggering, not a 30% chance of # inflicting a status condition. It can try (and fail) to inflict a @@ -1523,7 +1817,7 @@ BattleHandlers::TargetAbilityOnHit.add(:EFFECTSPORE, } ) -BattleHandlers::TargetAbilityOnHit.add(:FLAMEBODY, +Battle::AbilityEffects::OnBeingHit.add(:FLAMEBODY, proc { |ability,user,target,move,battle| next if !move.pbContactMove?(user) next if user.burned? || battle.pbRandom(100)>=30 @@ -1540,16 +1834,16 @@ BattleHandlers::TargetAbilityOnHit.add(:FLAMEBODY, } ) -BattleHandlers::TargetAbilityOnHit.add(:GOOEY, +Battle::AbilityEffects::OnBeingHit.add(:GOOEY, proc { |ability,user,target,move,battle| next if !move.pbContactMove?(user) user.pbLowerStatStageByAbility(:SPEED,1,target,true,true) } ) -BattleHandlers::TargetAbilityOnHit.copy(:GOOEY,:TANGLINGHAIR) +Battle::AbilityEffects::OnBeingHit.copy(:GOOEY, :TANGLINGHAIR) -BattleHandlers::TargetAbilityOnHit.add(:ILLUSION, +Battle::AbilityEffects::OnBeingHit.add(:ILLUSION, proc { |ability,user,target,move,battle| # NOTE: This intentionally doesn't show the ability splash. next if !target.effects[PBEffects::Illusion] @@ -1560,7 +1854,7 @@ BattleHandlers::TargetAbilityOnHit.add(:ILLUSION, } ) -BattleHandlers::TargetAbilityOnHit.add(:INNARDSOUT, +Battle::AbilityEffects::OnBeingHit.add(:INNARDSOUT, proc { |ability,user,target,move,battle| next if !target.fainted? || user.dummy battle.pbShowAbilitySplash(target) @@ -1578,7 +1872,7 @@ BattleHandlers::TargetAbilityOnHit.add(:INNARDSOUT, } ) -BattleHandlers::TargetAbilityOnHit.add(:IRONBARBS, +Battle::AbilityEffects::OnBeingHit.add(:IRONBARBS, proc { |ability,user,target,move,battle| next if !move.pbContactMove?(user) battle.pbShowAbilitySplash(target) @@ -1597,16 +1891,16 @@ BattleHandlers::TargetAbilityOnHit.add(:IRONBARBS, } ) -BattleHandlers::TargetAbilityOnHit.copy(:IRONBARBS,:ROUGHSKIN) +Battle::AbilityEffects::OnBeingHit.copy(:IRONBARBS, :ROUGHSKIN) -BattleHandlers::TargetAbilityOnHit.add(:JUSTIFIED, +Battle::AbilityEffects::OnBeingHit.add(:JUSTIFIED, proc { |ability,user,target,move,battle| next if move.calcType != :DARK target.pbRaiseStatStageByAbility(:ATTACK,1,target) } ) -BattleHandlers::TargetAbilityOnHit.add(:MUMMY, +Battle::AbilityEffects::OnBeingHit.add(:MUMMY, proc { |ability,user,target,move,battle| next if !move.pbContactMove?(user) next if user.fainted? @@ -1632,7 +1926,7 @@ BattleHandlers::TargetAbilityOnHit.add(:MUMMY, } ) -BattleHandlers::TargetAbilityOnHit.add(:PERISHBODY, +Battle::AbilityEffects::OnBeingHit.add(:PERISHBODY, proc { |ability, user, target, move, battle| next if !move.pbContactMove?(user) next if user.fainted? @@ -1654,7 +1948,7 @@ BattleHandlers::TargetAbilityOnHit.add(:PERISHBODY, } ) -BattleHandlers::TargetAbilityOnHit.add(:POISONPOINT, +Battle::AbilityEffects::OnBeingHit.add(:POISONPOINT, proc { |ability,user,target,move,battle| next if !move.pbContactMove?(user) next if user.poisoned? || battle.pbRandom(100)>=30 @@ -1671,26 +1965,26 @@ BattleHandlers::TargetAbilityOnHit.add(:POISONPOINT, } ) -BattleHandlers::TargetAbilityOnHit.add(:RATTLED, +Battle::AbilityEffects::OnBeingHit.add(:RATTLED, proc { |ability,user,target,move,battle| next if ![:BUG, :DARK, :GHOST].include?(move.calcType) target.pbRaiseStatStageByAbility(:SPEED,1,target) } ) -BattleHandlers::TargetAbilityOnHit.add(:SANDSPIT, +Battle::AbilityEffects::OnBeingHit.add(:SANDSPIT, proc { |ability, user, target, move, battle| battle.pbStartWeatherAbility(:Sandstorm, battler) } ) -BattleHandlers::TargetAbilityOnHit.add(:STAMINA, +Battle::AbilityEffects::OnBeingHit.add(:STAMINA, proc { |ability,user,target,move,battle| target.pbRaiseStatStageByAbility(:DEFENSE,1,target) } ) -BattleHandlers::TargetAbilityOnHit.add(:STATIC, +Battle::AbilityEffects::OnBeingHit.add(:STATIC, proc { |ability,user,target,move,battle| next if !move.pbContactMove?(user) next if user.paralyzed? || battle.pbRandom(100)>=30 @@ -1708,7 +2002,7 @@ BattleHandlers::TargetAbilityOnHit.add(:STATIC, } ) -BattleHandlers::TargetAbilityOnHit.add(:WANDERINGSPIRIT, +Battle::AbilityEffects::OnBeingHit.add(:WANDERINGSPIRIT, proc { |ability, user, target, move, battle| next if !move.pbContactMove?(user) next if user.ungainableAbility? || [:RECEIVER, :WONDERGUARD].include?(user.ability_id) @@ -1744,14 +2038,14 @@ BattleHandlers::TargetAbilityOnHit.add(:WANDERINGSPIRIT, } ) -BattleHandlers::TargetAbilityOnHit.add(:WATERCOMPACTION, +Battle::AbilityEffects::OnBeingHit.add(:WATERCOMPACTION, proc { |ability,user,target,move,battle| next if move.calcType != :WATER target.pbRaiseStatStageByAbility(:DEFENSE,2,target) } ) -BattleHandlers::TargetAbilityOnHit.add(:WEAKARMOR, +Battle::AbilityEffects::OnBeingHit.add(:WEAKARMOR, proc { |ability,user,target,move,battle| next if !move.physicalMove? next if !target.pbCanLowerStatStage?(:DEFENSE, target) && @@ -1765,10 +2059,10 @@ BattleHandlers::TargetAbilityOnHit.add(:WEAKARMOR, ) #=============================================================================== -# UserAbilityOnHit handlers +# OnDealingHit handlers #=============================================================================== -BattleHandlers::UserAbilityOnHit.add(:POISONTOUCH, +Battle::AbilityEffects::OnDealingHit.add(:POISONTOUCH, proc { |ability,user,target,move,battle| next if !move.contactMove? next if battle.pbRandom(100)>=30 @@ -1791,10 +2085,10 @@ BattleHandlers::UserAbilityOnHit.add(:POISONTOUCH, ) #=============================================================================== -# UserAbilityEndOfMove handlers +# OnEndOfUsingMove handlers #=============================================================================== -BattleHandlers::UserAbilityEndOfMove.add(:BEASTBOOST, +Battle::AbilityEffects::OnEndOfUsingMove.add(:BEASTBOOST, proc { |ability,user,targets,move,battle| next if battle.pbAllFainted?(user.idxOpposingSide) numFainted = 0 @@ -1813,7 +2107,7 @@ BattleHandlers::UserAbilityEndOfMove.add(:BEASTBOOST, } ) -BattleHandlers::UserAbilityEndOfMove.add(:CHILLINGNEIGH, +Battle::AbilityEffects::OnEndOfUsingMove.add(:CHILLINGNEIGH, proc { |ability, user, targets, move, battle| next if battle.pbAllFainted?(user.idxOpposingSide) numFainted = 0 @@ -1825,9 +2119,9 @@ BattleHandlers::UserAbilityEndOfMove.add(:CHILLINGNEIGH, } ) -BattleHandlers::UserAbilityEndOfMove.copy(:CHILLINGNEIGH, :ASONECHILLINGNEIGH) +Battle::AbilityEffects::OnEndOfUsingMove.copy(:CHILLINGNEIGH, :ASONECHILLINGNEIGH) -BattleHandlers::UserAbilityEndOfMove.add(:GRIMNEIGH, +Battle::AbilityEffects::OnEndOfUsingMove.add(:GRIMNEIGH, proc { |ability, user, targets, move, battle| next if battle.pbAllFainted?(user.idxOpposingSide) numFainted = 0 @@ -1839,9 +2133,9 @@ BattleHandlers::UserAbilityEndOfMove.add(:GRIMNEIGH, } ) -BattleHandlers::UserAbilityEndOfMove.copy(:GRIMNEIGH, :ASONEGRIMNEIGH) +Battle::AbilityEffects::OnEndOfUsingMove.copy(:GRIMNEIGH, :ASONEGRIMNEIGH) -BattleHandlers::UserAbilityEndOfMove.add(:MAGICIAN, +Battle::AbilityEffects::OnEndOfUsingMove.add(:MAGICIAN, proc { |ability,user,targets,move,battle| next if battle.futureSight next if !move.pbDamagingMove? @@ -1881,7 +2175,7 @@ BattleHandlers::UserAbilityEndOfMove.add(:MAGICIAN, } ) -BattleHandlers::UserAbilityEndOfMove.add(:MOXIE, +Battle::AbilityEffects::OnEndOfUsingMove.add(:MOXIE, proc { |ability,user,targets,move,battle| next if battle.pbAllFainted?(user.idxOpposingSide) numFainted = 0 @@ -1892,10 +2186,10 @@ BattleHandlers::UserAbilityEndOfMove.add(:MOXIE, ) #=============================================================================== -# TargetAbilityAfterMoveUse handlers +# AfterMoveUseFromTarget handlers #=============================================================================== -BattleHandlers::TargetAbilityAfterMoveUse.add(:BERSERK, +Battle::AbilityEffects::AfterMoveUseFromTarget.add(:BERSERK, proc { |ability, target, user, move, switched_battlers, battle| next if !move.damagingMove? next if !target.droppedBelowHalfHP @@ -1904,7 +2198,7 @@ BattleHandlers::TargetAbilityAfterMoveUse.add(:BERSERK, } ) -BattleHandlers::TargetAbilityAfterMoveUse.add(:COLORCHANGE, +Battle::AbilityEffects::AfterMoveUseFromTarget.add(:COLORCHANGE, proc { |ability, target, user, move, switched_battlers, battle| next if target.damageState.calcDamage==0 || target.damageState.substitute next if !move.calcType || GameData::Type.get(move.calcType).pseudo_type @@ -1918,7 +2212,7 @@ BattleHandlers::TargetAbilityAfterMoveUse.add(:COLORCHANGE, } ) -BattleHandlers::TargetAbilityAfterMoveUse.add(:PICKPOCKET, +Battle::AbilityEffects::AfterMoveUseFromTarget.add(:PICKPOCKET, proc { |ability, target, user, move, switched_battlers, battle| # NOTE: According to Bulbapedia, this can still trigger to steal the user's # item even if it was switched out by a Red Card. This doesn't make @@ -1954,10 +2248,10 @@ BattleHandlers::TargetAbilityAfterMoveUse.add(:PICKPOCKET, ) #=============================================================================== -# EORWeatherAbility handlers +# EndOfRoundWeather handlers #=============================================================================== -BattleHandlers::EORWeatherAbility.add(:DRYSKIN, +Battle::AbilityEffects::EndOfRoundWeather.add(:DRYSKIN, proc { |ability,weather,battler,battle| case weather when :Sun, :HarshSun @@ -1981,7 +2275,7 @@ BattleHandlers::EORWeatherAbility.add(:DRYSKIN, } ) -BattleHandlers::EORWeatherAbility.add(:ICEBODY, +Battle::AbilityEffects::EndOfRoundWeather.add(:ICEBODY, proc { |ability,weather,battler,battle| next unless weather == :Hail next if !battler.canHeal? @@ -1996,7 +2290,7 @@ BattleHandlers::EORWeatherAbility.add(:ICEBODY, } ) -BattleHandlers::EORWeatherAbility.add(:ICEFACE, +Battle::AbilityEffects::EndOfRoundWeather.add(:ICEFACE, proc { |ability, weather, battler, battle| next if weather != :Hail next if !battler.canRestoreIceFace || battler.form != 1 @@ -2009,7 +2303,7 @@ BattleHandlers::EORWeatherAbility.add(:ICEFACE, } ) -BattleHandlers::EORWeatherAbility.add(:RAINDISH, +Battle::AbilityEffects::EndOfRoundWeather.add(:RAINDISH, proc { |ability,weather,battler,battle| next unless [:Rain, :HeavyRain].include?(weather) next if !battler.canHeal? @@ -2024,7 +2318,7 @@ BattleHandlers::EORWeatherAbility.add(:RAINDISH, } ) -BattleHandlers::EORWeatherAbility.add(:SOLARPOWER, +Battle::AbilityEffects::EndOfRoundWeather.add(:SOLARPOWER, proc { |ability,weather,battler,battle| next unless [:Sun, :HarshSun].include?(weather) battle.pbShowAbilitySplash(battler) @@ -2037,10 +2331,10 @@ BattleHandlers::EORWeatherAbility.add(:SOLARPOWER, ) #=============================================================================== -# EORHealingAbility handlers +# EndOfRoundHealing handlers #=============================================================================== -BattleHandlers::EORHealingAbility.add(:HEALER, +Battle::AbilityEffects::EndOfRoundHealing.add(:HEALER, proc { |ability,battler,battle| next unless battle.pbRandom(100)<30 battler.allAllies.each do |b| @@ -2067,7 +2361,7 @@ BattleHandlers::EORHealingAbility.add(:HEALER, } ) -BattleHandlers::EORHealingAbility.add(:HYDRATION, +Battle::AbilityEffects::EndOfRoundHealing.add(:HYDRATION, proc { |ability,battler,battle| next if battler.status == :NONE next if ![:Rain, :HeavyRain].include?(battler.effectiveWeather) @@ -2092,7 +2386,7 @@ BattleHandlers::EORHealingAbility.add(:HYDRATION, } ) -BattleHandlers::EORHealingAbility.add(:SHEDSKIN, +Battle::AbilityEffects::EndOfRoundHealing.add(:SHEDSKIN, proc { |ability,battler,battle| next if battler.status == :NONE next unless battle.pbRandom(100)<30 @@ -2118,10 +2412,10 @@ BattleHandlers::EORHealingAbility.add(:SHEDSKIN, ) #=============================================================================== -# EOREffectAbility handlers +# EndOfRoundEffect handlers #=============================================================================== -BattleHandlers::EOREffectAbility.add(:BADDREAMS, +Battle::AbilityEffects::EndOfRoundEffect.add(:BADDREAMS, proc { |ability,battler,battle| battle.allOtherSideBattlers(battler.index).each do |b| next if !b.near?(battler) || !b.asleep? @@ -2140,7 +2434,7 @@ BattleHandlers::EOREffectAbility.add(:BADDREAMS, } ) -BattleHandlers::EOREffectAbility.add(:MOODY, +Battle::AbilityEffects::EndOfRoundEffect.add(:MOODY, proc { |ability,battler,battle| randomUp = [] randomDown = [] @@ -2172,7 +2466,7 @@ BattleHandlers::EOREffectAbility.add(:MOODY, } ) -BattleHandlers::EOREffectAbility.add(:SPEEDBOOST, +Battle::AbilityEffects::EndOfRoundEffect.add(:SPEEDBOOST, proc { |ability,battler,battle| # A Pokémon's turnCount is 0 if it became active after the beginning of a # round @@ -2184,10 +2478,10 @@ BattleHandlers::EOREffectAbility.add(:SPEEDBOOST, ) #=============================================================================== -# EORGainItemAbility handlers +# EndOfRoundGainItem handlers #=============================================================================== -BattleHandlers::EORGainItemAbility.add(:BALLFETCH, +Battle::AbilityEffects::EndOfRoundGainItem.add(:BALLFETCH, proc { |ability, battler, battle| next if battler.item next if battle.first_poke_ball.nil? @@ -2201,7 +2495,7 @@ BattleHandlers::EORGainItemAbility.add(:BALLFETCH, } ) -BattleHandlers::EORGainItemAbility.add(:HARVEST, +Battle::AbilityEffects::EndOfRoundGainItem.add(:HARVEST, proc { |ability,battler,battle| next if battler.item next if !battler.recycleItem || !GameData::Item.get(battler.recycleItem).is_berry? @@ -2218,7 +2512,7 @@ BattleHandlers::EORGainItemAbility.add(:HARVEST, } ) -BattleHandlers::EORGainItemAbility.add(:PICKUP, +Battle::AbilityEffects::EndOfRoundGainItem.add(:PICKUP, proc { |ability,battler,battle| next if battler.item foundItem = nil @@ -2248,38 +2542,38 @@ BattleHandlers::EORGainItemAbility.add(:PICKUP, ) #=============================================================================== -# CertainSwitchingUserAbility handlers +# CertainSwitching handlers #=============================================================================== # There aren't any! #=============================================================================== -# TrappingTargetAbility handlers +# TrappingByTarget handlers #=============================================================================== -BattleHandlers::TrappingTargetAbility.add(:ARENATRAP, +Battle::AbilityEffects::TrappingByTarget.add(:ARENATRAP, proc { |ability,switcher,bearer,battle| next true if !switcher.airborne? } ) -BattleHandlers::TrappingTargetAbility.add(:MAGNETPULL, +Battle::AbilityEffects::TrappingByTarget.add(:MAGNETPULL, proc { |ability,switcher,bearer,battle| next true if switcher.pbHasType?(:STEEL) } ) -BattleHandlers::TrappingTargetAbility.add(:SHADOWTAG, +Battle::AbilityEffects::TrappingByTarget.add(:SHADOWTAG, proc { |ability,switcher,bearer,battle| next true if !switcher.hasActiveAbility?(:SHADOWTAG) } ) #=============================================================================== -# AbilityOnSwitchIn handlers +# OnSwitchIn handlers #=============================================================================== -BattleHandlers::AbilityOnSwitchIn.add(:AIRLOCK, +Battle::AbilityEffects::OnSwitchIn.add(:AIRLOCK, proc { |ability,battler,battle| battle.pbShowAbilitySplash(battler) if !Battle::Scene::USE_ABILITY_SPLASH @@ -2290,9 +2584,9 @@ BattleHandlers::AbilityOnSwitchIn.add(:AIRLOCK, } ) -BattleHandlers::AbilityOnSwitchIn.copy(:AIRLOCK,:CLOUDNINE) +Battle::AbilityEffects::OnSwitchIn.copy(:AIRLOCK, :CLOUDNINE) -BattleHandlers::AbilityOnSwitchIn.add(:ANTICIPATION, +Battle::AbilityEffects::OnSwitchIn.add(:ANTICIPATION, proc { |ability,battler,battle| next if !battler.pbOwnedByPlayer? battlerTypes = battler.pbTypes(true) @@ -2328,7 +2622,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:ANTICIPATION, } ) -BattleHandlers::AbilityOnSwitchIn.add(:ASONECHILLINGNEIGH, +Battle::AbilityEffects::OnSwitchIn.add(:ASONECHILLINGNEIGH, proc { |ability, battler, battle| battle.pbShowAbilitySplash(battler) battle.pbDisplay(_INTL("{1} has two Abilities!", battler.pbThis)) @@ -2341,9 +2635,9 @@ BattleHandlers::AbilityOnSwitchIn.add(:ASONECHILLINGNEIGH, } ) -BattleHandlers::AbilityOnSwitchIn.copy(:ASONECHILLINGNEIGH, :ASONEGRIMNEIGH) +Battle::AbilityEffects::OnSwitchIn.copy(:ASONECHILLINGNEIGH, :ASONEGRIMNEIGH) -BattleHandlers::AbilityOnSwitchIn.add(:AURABREAK, +Battle::AbilityEffects::OnSwitchIn.add(:AURABREAK, proc { |ability,battler,battle| battle.pbShowAbilitySplash(battler) battle.pbDisplay(_INTL("{1} reversed all other Pokémon's auras!",battler.pbThis)) @@ -2351,7 +2645,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:AURABREAK, } ) -BattleHandlers::AbilityOnSwitchIn.add(:COMATOSE, +Battle::AbilityEffects::OnSwitchIn.add(:COMATOSE, proc { |ability,battler,battle| battle.pbShowAbilitySplash(battler) battle.pbDisplay(_INTL("{1} is drowsing!",battler.pbThis)) @@ -2359,7 +2653,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:COMATOSE, } ) -BattleHandlers::AbilityOnSwitchIn.add(:CURIOUSMEDICINE, +Battle::AbilityEffects::OnSwitchIn.add(:CURIOUSMEDICINE, proc { |ability, battler, battle| next if battler.allAllies.none? { |b| b.hasAlteredStatStages? } battle.pbShowAbilitySplash(battler) @@ -2377,7 +2671,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:CURIOUSMEDICINE, } ) -BattleHandlers::AbilityOnSwitchIn.add(:DARKAURA, +Battle::AbilityEffects::OnSwitchIn.add(:DARKAURA, proc { |ability,battler,battle| battle.pbShowAbilitySplash(battler) battle.pbDisplay(_INTL("{1} is radiating a dark aura!",battler.pbThis)) @@ -2385,25 +2679,25 @@ BattleHandlers::AbilityOnSwitchIn.add(:DARKAURA, } ) -BattleHandlers::AbilityOnSwitchIn.add(:DAUNTLESSSHIELD, +Battle::AbilityEffects::OnSwitchIn.add(:DAUNTLESSSHIELD, proc { |ability, battler, battle| battler.pbRaiseStatStageByAbility(:ATTACK, 1, battler) } ) -BattleHandlers::AbilityOnSwitchIn.add(:DELTASTREAM, +Battle::AbilityEffects::OnSwitchIn.add(:DELTASTREAM, proc { |ability,battler,battle| battle.pbStartWeatherAbility(:StrongWinds, battler, true) } ) -BattleHandlers::AbilityOnSwitchIn.add(:DESOLATELAND, +Battle::AbilityEffects::OnSwitchIn.add(:DESOLATELAND, proc { |ability,battler,battle| battle.pbStartWeatherAbility(:HarshSun, battler, true) } ) -BattleHandlers::AbilityOnSwitchIn.add(:DOWNLOAD, +Battle::AbilityEffects::OnSwitchIn.add(:DOWNLOAD, proc { |ability,battler,battle| oDef = oSpDef = 0 battle.allOtherSideBattlers(battler.index).each do |b| @@ -2415,19 +2709,19 @@ BattleHandlers::AbilityOnSwitchIn.add(:DOWNLOAD, } ) -BattleHandlers::AbilityOnSwitchIn.add(:DRIZZLE, +Battle::AbilityEffects::OnSwitchIn.add(:DRIZZLE, proc { |ability,battler,battle| battle.pbStartWeatherAbility(:Rain, battler) } ) -BattleHandlers::AbilityOnSwitchIn.add(:DROUGHT, +Battle::AbilityEffects::OnSwitchIn.add(:DROUGHT, proc { |ability,battler,battle| battle.pbStartWeatherAbility(:Sun, battler) } ) -BattleHandlers::AbilityOnSwitchIn.add(:ELECTRICSURGE, +Battle::AbilityEffects::OnSwitchIn.add(:ELECTRICSURGE, proc { |ability,battler,battle| next if battle.field.terrain == :Electric battle.pbShowAbilitySplash(battler) @@ -2436,7 +2730,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:ELECTRICSURGE, } ) -BattleHandlers::AbilityOnSwitchIn.add(:FAIRYAURA, +Battle::AbilityEffects::OnSwitchIn.add(:FAIRYAURA, proc { |ability,battler,battle| battle.pbShowAbilitySplash(battler) battle.pbDisplay(_INTL("{1} is radiating a fairy aura!",battler.pbThis)) @@ -2444,7 +2738,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:FAIRYAURA, } ) -BattleHandlers::AbilityOnSwitchIn.add(:FOREWARN, +Battle::AbilityEffects::OnSwitchIn.add(:FOREWARN, proc { |ability,battler,battle| next if !battler.pbOwnedByPlayer? highestPower = 0 @@ -2496,7 +2790,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:FOREWARN, } ) -BattleHandlers::AbilityOnSwitchIn.add(:FRISK, +Battle::AbilityEffects::OnSwitchIn.add(:FRISK, proc { |ability,battler,battle| next if !battler.pbOwnedByPlayer? foes = battle.allOtherSideBattlers(battler.index).select { |b| b.item } @@ -2517,7 +2811,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:FRISK, } ) -BattleHandlers::AbilityOnSwitchIn.add(:GRASSYSURGE, +Battle::AbilityEffects::OnSwitchIn.add(:GRASSYSURGE, proc { |ability,battler,battle| next if battle.field.terrain == :Grassy battle.pbShowAbilitySplash(battler) @@ -2526,7 +2820,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:GRASSYSURGE, } ) -BattleHandlers::AbilityOnSwitchIn.add(:ICEFACE, +Battle::AbilityEffects::OnSwitchIn.add(:ICEFACE, proc { |ability, battler, battle| next if !battler.isSpecies?(:EISCUE) || battler.form != 1 next if battler.effectiveWeather != :Hail @@ -2539,7 +2833,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:ICEFACE, } ) -BattleHandlers::AbilityOnSwitchIn.add(:IMPOSTER, +Battle::AbilityEffects::OnSwitchIn.add(:IMPOSTER, proc { |ability,battler,battle| next if battler.effects[PBEffects::Transform] choice = battler.pbDirectOpposing @@ -2557,7 +2851,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:IMPOSTER, } ) -BattleHandlers::AbilityOnSwitchIn.add(:INTIMIDATE, +Battle::AbilityEffects::OnSwitchIn.add(:INTIMIDATE, proc { |ability,battler,battle| battle.pbShowAbilitySplash(battler) battle.allOtherSideBattlers(battler.index).each do |b| @@ -2576,20 +2870,20 @@ BattleHandlers::AbilityOnSwitchIn.add(:INTIMIDATE, } ) -BattleHandlers::AbilityOnSwitchIn.add(:INTREPIDSWORD, +Battle::AbilityEffects::OnSwitchIn.add(:INTREPIDSWORD, proc { |ability, battler, battle| battler.pbRaiseStatStageByAbility(:ATTACK, 1, battler) } ) -BattleHandlers::AbilityOnSwitchIn.add(:MIMICRY, +Battle::AbilityEffects::OnSwitchIn.add(:MIMICRY, proc { |ability, battler, battle| next if battle.field.terrain == :None - BattleHandlers.triggerAbilityOnTerrainChange(ability, battler, battle, false) + Battle::AbilityEffects.triggerOnTerrainChange(ability, battler, battle, false) } ) -BattleHandlers::AbilityOnSwitchIn.add(:MISTYSURGE, +Battle::AbilityEffects::OnSwitchIn.add(:MISTYSURGE, proc { |ability,battler,battle| next if battle.field.terrain == :Misty battle.pbShowAbilitySplash(battler) @@ -2598,7 +2892,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:MISTYSURGE, } ) -BattleHandlers::AbilityOnSwitchIn.add(:MOLDBREAKER, +Battle::AbilityEffects::OnSwitchIn.add(:MOLDBREAKER, proc { |ability,battler,battle| battle.pbShowAbilitySplash(battler) battle.pbDisplay(_INTL("{1} breaks the mold!",battler.pbThis)) @@ -2606,7 +2900,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:MOLDBREAKER, } ) -BattleHandlers::AbilityOnSwitchIn.add(:NEUTRALIZINGGAS, +Battle::AbilityEffects::OnSwitchIn.add(:NEUTRALIZINGGAS, proc { |ability,battler,battle| battle.pbShowAbilitySplash(battler, true) battle.pbHideAbilitySplash(battler) @@ -2633,7 +2927,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:NEUTRALIZINGGAS, } ) -BattleHandlers::AbilityOnSwitchIn.add(:PASTELVEIL, +Battle::AbilityEffects::OnSwitchIn.add(:PASTELVEIL, proc { |ability, battler, battle| next if battler.allAllies.none? { |b| b.status == :POISON } battle.pbShowAbilitySplash(battler) @@ -2649,7 +2943,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:PASTELVEIL, } ) -BattleHandlers::AbilityOnSwitchIn.add(:PRESSURE, +Battle::AbilityEffects::OnSwitchIn.add(:PRESSURE, proc { |ability,battler,battle| battle.pbShowAbilitySplash(battler) battle.pbDisplay(_INTL("{1} is exerting its pressure!",battler.pbThis)) @@ -2657,13 +2951,13 @@ BattleHandlers::AbilityOnSwitchIn.add(:PRESSURE, } ) -BattleHandlers::AbilityOnSwitchIn.add(:PRIMORDIALSEA, +Battle::AbilityEffects::OnSwitchIn.add(:PRIMORDIALSEA, proc { |ability,battler,battle| battle.pbStartWeatherAbility(:HeavyRain, battler, true) } ) -BattleHandlers::AbilityOnSwitchIn.add(:PSYCHICSURGE, +Battle::AbilityEffects::OnSwitchIn.add(:PSYCHICSURGE, proc { |ability,battler,battle| next if battle.field.terrain == :Psychic battle.pbShowAbilitySplash(battler) @@ -2672,13 +2966,13 @@ BattleHandlers::AbilityOnSwitchIn.add(:PSYCHICSURGE, } ) -BattleHandlers::AbilityOnSwitchIn.add(:SANDSTREAM, +Battle::AbilityEffects::OnSwitchIn.add(:SANDSTREAM, proc { |ability,battler,battle| battle.pbStartWeatherAbility(:Sandstorm, battler) } ) -BattleHandlers::AbilityOnSwitchIn.add(:SCREENCLEANER, +Battle::AbilityEffects::OnSwitchIn.add(:SCREENCLEANER, proc { |ability, battler, battle| next if target.pbOwnSide.effects[PBEffects::AuroraVeil] == 0 && target.pbOwnSide.effects[PBEffects::LightScreen] == 0 && @@ -2715,7 +3009,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:SCREENCLEANER, } ) -BattleHandlers::AbilityOnSwitchIn.add(:SLOWSTART, +Battle::AbilityEffects::OnSwitchIn.add(:SLOWSTART, proc { |ability,battler,battle| battle.pbShowAbilitySplash(battler) battler.effects[PBEffects::SlowStart] = 5 @@ -2729,13 +3023,13 @@ BattleHandlers::AbilityOnSwitchIn.add(:SLOWSTART, } ) -BattleHandlers::AbilityOnSwitchIn.add(:SNOWWARNING, +Battle::AbilityEffects::OnSwitchIn.add(:SNOWWARNING, proc { |ability,battler,battle| battle.pbStartWeatherAbility(:Hail, battler) } ) -BattleHandlers::AbilityOnSwitchIn.add(:TERAVOLT, +Battle::AbilityEffects::OnSwitchIn.add(:TERAVOLT, proc { |ability,battler,battle| battle.pbShowAbilitySplash(battler) battle.pbDisplay(_INTL("{1} is radiating a bursting aura!",battler.pbThis)) @@ -2743,7 +3037,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:TERAVOLT, } ) -BattleHandlers::AbilityOnSwitchIn.add(:TURBOBLAZE, +Battle::AbilityEffects::OnSwitchIn.add(:TURBOBLAZE, proc { |ability,battler,battle| battle.pbShowAbilitySplash(battler) battle.pbDisplay(_INTL("{1} is radiating a blazing aura!",battler.pbThis)) @@ -2751,7 +3045,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:TURBOBLAZE, } ) -BattleHandlers::AbilityOnSwitchIn.add(:UNNERVE, +Battle::AbilityEffects::OnSwitchIn.add(:UNNERVE, proc { |ability,battler,battle| battle.pbShowAbilitySplash(battler) battle.pbDisplay(_INTL("{1} is too nervous to eat Berries!",battler.pbOpposingTeam)) @@ -2760,10 +3054,10 @@ BattleHandlers::AbilityOnSwitchIn.add(:UNNERVE, ) #=============================================================================== -# AbilityOnSwitchOut handlers +# OnSwitchOut handlers #=============================================================================== -BattleHandlers::AbilityOnSwitchOut.add(:IMMUNITY, +Battle::AbilityEffects::OnSwitchOut.add(:IMMUNITY, proc { |ability, battler, endOfBattle| next if battler.status != :POISON PBDebug.log("[Ability triggered] #{battler.pbThis}'s #{battler.abilityName}") @@ -2771,7 +3065,7 @@ BattleHandlers::AbilityOnSwitchOut.add(:IMMUNITY, } ) -BattleHandlers::AbilityOnSwitchOut.add(:INSOMNIA, +Battle::AbilityEffects::OnSwitchOut.add(:INSOMNIA, proc { |ability, battler, endOfBattle| next if battler.status != :SLEEP PBDebug.log("[Ability triggered] #{battler.pbThis}'s #{battler.abilityName}") @@ -2779,9 +3073,9 @@ BattleHandlers::AbilityOnSwitchOut.add(:INSOMNIA, } ) -BattleHandlers::AbilityOnSwitchOut.copy(:INSOMNIA, :VITALSPIRIT) +Battle::AbilityEffects::OnSwitchOut.copy(:INSOMNIA, :VITALSPIRIT) -BattleHandlers::AbilityOnSwitchOut.add(:LIMBER, +Battle::AbilityEffects::OnSwitchOut.add(:LIMBER, proc { |ability, battler, endOfBattle| next if battler.status != :PARALYSIS PBDebug.log("[Ability triggered] #{battler.pbThis}'s #{battler.abilityName}") @@ -2789,7 +3083,7 @@ BattleHandlers::AbilityOnSwitchOut.add(:LIMBER, } ) -BattleHandlers::AbilityOnSwitchOut.add(:MAGMAARMOR, +Battle::AbilityEffects::OnSwitchOut.add(:MAGMAARMOR, proc { |ability, battler, endOfBattle| next if battler.status != :FROZEN PBDebug.log("[Ability triggered] #{battler.pbThis}'s #{battler.abilityName}") @@ -2797,14 +3091,14 @@ BattleHandlers::AbilityOnSwitchOut.add(:MAGMAARMOR, } ) -BattleHandlers::AbilityOnSwitchOut.add(:NATURALCURE, +Battle::AbilityEffects::OnSwitchOut.add(:NATURALCURE, proc { |ability,battler,endOfBattle| PBDebug.log("[Ability triggered] #{battler.pbThis}'s #{battler.abilityName}") battler.status = :NONE } ) -BattleHandlers::AbilityOnSwitchOut.add(:REGENERATOR, +Battle::AbilityEffects::OnSwitchOut.add(:REGENERATOR, proc { |ability,battler,endOfBattle| next if endOfBattle PBDebug.log("[Ability triggered] #{battler.pbThis}'s #{battler.abilityName}") @@ -2812,7 +3106,7 @@ BattleHandlers::AbilityOnSwitchOut.add(:REGENERATOR, } ) -BattleHandlers::AbilityOnSwitchOut.add(:WATERVEIL, +Battle::AbilityEffects::OnSwitchOut.add(:WATERVEIL, proc { |ability, battler, endOfBattle| next if battler.status != :BURN PBDebug.log("[Ability triggered] #{battler.pbThis}'s #{battler.abilityName}") @@ -2820,13 +3114,13 @@ BattleHandlers::AbilityOnSwitchOut.add(:WATERVEIL, } ) -BattleHandlers::AbilityOnSwitchOut.copy(:WATERVEIL, :WATERBUBBLE) +Battle::AbilityEffects::OnSwitchOut.copy(:WATERVEIL, :WATERBUBBLE) #=============================================================================== -# AbilityChangeOnBattlerFainting handlers +# ChangeOnBattlerFainting handlers #=============================================================================== -BattleHandlers::AbilityChangeOnBattlerFainting.add(:POWEROFALCHEMY, +Battle::AbilityEffects::ChangeOnBattlerFainting.add(:POWEROFALCHEMY, proc { |ability,battler,fainted,battle| next if battler.opposes?(fainted) next if fainted.ungainableAbility? || @@ -2839,23 +3133,23 @@ BattleHandlers::AbilityChangeOnBattlerFainting.add(:POWEROFALCHEMY, } ) -BattleHandlers::AbilityChangeOnBattlerFainting.copy(:POWEROFALCHEMY,:RECEIVER) +Battle::AbilityEffects::ChangeOnBattlerFainting.copy(:POWEROFALCHEMY, :RECEIVER) #=============================================================================== -# AbilityOnBattlerFainting handlers +# OnBattlerFainting handlers #=============================================================================== -BattleHandlers::AbilityOnBattlerFainting.add(:SOULHEART, +Battle::AbilityEffects::OnBattlerFainting.add(:SOULHEART, proc { |ability,battler,fainted,battle| battler.pbRaiseStatStageByAbility(:SPECIAL_ATTACK,1,battler) } ) #=============================================================================== -# AbilityOnTerrainChange handlers +# OnTerrainChange handlers #=============================================================================== -BattleHandlers::AbilityOnTerrainChange.add(:MIMICRY, +Battle::AbilityEffects::OnTerrainChange.add(:MIMICRY, proc { |ability, battler, battle, ability_changed| if battle.field.terrain == :None # Revert to original typing @@ -2889,10 +3183,10 @@ BattleHandlers::AbilityOnTerrainChange.add(:MIMICRY, ) #=============================================================================== -# AbilityOnIntimidated handlers +# OnIntimidated handlers #=============================================================================== -BattleHandlers::AbilityOnIntimidated.add(:RATTLED, +Battle::AbilityEffects::OnIntimidated.add(:RATTLED, proc { |ability,battler,battle| next if Settings::MECHANICS_GENERATION < 8 battler.pbRaiseStatStageByAbility(:SPEED, 1, battler) @@ -2900,10 +3194,10 @@ BattleHandlers::AbilityOnIntimidated.add(:RATTLED, ) #=============================================================================== -# RunFromBattleAbility handlers +# CertainEscapeFromBattle handlers #=============================================================================== -BattleHandlers::RunFromBattleAbility.add(:RUNAWAY, +Battle::AbilityEffects::CertainEscapeFromBattle.add(:RUNAWAY, proc { |ability,battler| next true } diff --git a/Data/Scripts/011_Battle/006_Other battle code/009_BattleHandlers_Items.rb b/Data/Scripts/011_Battle/006_Other battle code/009_Battle_ItemEffects.rb similarity index 70% rename from Data/Scripts/011_Battle/006_Other battle code/009_BattleHandlers_Items.rb rename to Data/Scripts/011_Battle/006_Other battle code/009_Battle_ItemEffects.rb index 5e9a88dcc..c6a2de80b 100644 --- a/Data/Scripts/011_Battle/006_Other battle code/009_BattleHandlers_Items.rb +++ b/Data/Scripts/011_Battle/006_Other battle code/009_Battle_ItemEffects.rb @@ -1,51 +1,267 @@ #=============================================================================== -# SpeedCalcItem handlers +# +#=============================================================================== +module Battle::ItemEffects + SpeedCalc = ItemHandlerHash.new + WeightCalc = ItemHandlerHash.new # Float Stone + # Battler's HP/stat changed + HPHeal = ItemHandlerHash.new + OnStatLoss = ItemHandlerHash.new + # Battler's status problem + StatusCure = ItemHandlerHash.new + # Priority and turn order + PriorityBracketChange = ItemHandlerHash.new + PriorityBracketUse = ItemHandlerHash.new + # Move usage failures + OnMissingTarget = ItemHandlerHash.new # Blunder Policy + # Accuracy calculation + AccuracyCalcFromUser = ItemHandlerHash.new + AccuracyCalcFromTarget = ItemHandlerHash.new + # Damage calculation + DamageCalcFromUser = ItemHandlerHash.new + DamageCalcFromTarget = ItemHandlerHash.new + CriticalCalcFromUser = ItemHandlerHash.new + CriticalCalcFromTarget = ItemHandlerHash.new # None! + # Upon a move hitting a target + OnBeingHit = ItemHandlerHash.new + OnBeingHitPositiveBerry = ItemHandlerHash.new + # Items that trigger at the end of using a move + AfterMoveUseFromTarget = ItemHandlerHash.new + AfterMoveUseFromUser = ItemHandlerHash.new + OnEndOfUsingMove = ItemHandlerHash.new # Leppa Berry + OnEndOfUsingMoveStatRestore = ItemHandlerHash.new # White Herb + # Experience and EV gain + ExpGainModifier = ItemHandlerHash.new # Lucky Egg + EVGainModifier = ItemHandlerHash.new + # Weather and terrin + WeatherExtender = ItemHandlerHash.new + TerrainExtender = ItemHandlerHash.new # Terrain Extender + TerrainStatBoost = ItemHandlerHash.new + # End Of Round + EndOfRoundHealing = ItemHandlerHash.new + EndOfRoundEffect = ItemHandlerHash.new + # Switching and fainting + CertainSwitching = ItemHandlerHash.new # Shed Shell + TrappingByTarget = ItemHandlerHash.new # None! + OnSwitchIn = ItemHandlerHash.new # Air Balloon + OnIntimidated = ItemHandlerHash.new # Adrenaline Orb + # Running from battle + CertainEscapeFromBattle = ItemHandlerHash.new # Smoke Ball + + #============================================================================= + + def self.trigger(hash, *args, ret: false) + new_ret = hash.trigger(*args) + return (new_ret != nil) ? new_ret : ret + end + + #============================================================================= + + def self.triggerSpeedCalc(item, battler, mult) + return trigger(SpeedCalc, item, battler, mult, ret: mult) + end + + def self.triggerWeightCalc(item, battler, w) + return trigger(WeightCalc, item, battler, w, ret: w) + end + + #============================================================================= + + def self.triggerHPHeal(item, battler, battle, forced) + return trigger(HPHeal, item, battler, battle, forced) + end + + def self.triggerOnStatLoss(item, user, move_user, battle) + return trigger(OnStatLoss, item, user, move_user, battle) + end + + #============================================================================= + + def self.triggerStatusCure(item, battler, battle, forced) + return trigger(StatusCure, item, battler, battle, forced) + end + + #============================================================================= + + def self.triggerPriorityBracketChange(item, battler, sub_pri, battle) + return trigger(PriorityBracketChange, item, battler, sub_pri, battle, ret: sub_pri) + end + + def self.triggerPriorityBracketUse(item, battler, battle) + PriorityBracketUse.trigger(item, battler, battle) + end + + #============================================================================= + + def self.triggerOnMissingTarget(item, user, target, move, hit_num, battle) + OnMissingTarget.trigger(item, user, target, move, hit_num, battle) + end + + #============================================================================= + + def self.triggerAccuracyCalcFromUser(item, mods, user, target, move, type) + AccuracyCalcFromUser.trigger(item, mods, user, target, move, type) + end + + def self.triggerAccuracyCalcFromTarget(item, mods, user, target, move, type) + AccuracyCalcFromTarget.trigger(item, mods, user, target, move, type) + end + + #============================================================================= + + def self.triggerDamageCalcFromUser(item, user, target, move, mults, base_damage, type) + DamageCalcFromUser.trigger(item, user, target, move, mults, base_damage, type) + end + + def self.triggerDamageCalcFromTarget(item, user, target, move, mults, base_damage, type) + DamageCalcFromTarget.trigger(item, user, target, move, mults, base_damage, type) + end + + def self.triggerCriticalCalcFromUser(item, user, target, crit_stage) + return trigger(CriticalCalcFromUser, item, user, target, crit_stage, ret: crit_stage) + end + + def self.triggerCriticalCalcFromTarget(item, user, target, crit_stage) + return trigger(CriticalCalcFromTarget, item, user, target, crit_stage, ret: crit_stage) + end + + #============================================================================= + + def self.triggerOnBeingHit(item, user, target, move, battle) + OnBeingHit.trigger(item, user, target, move, battle) + end + + def self.triggerOnBeingHitPositiveBerry(item, battler, battle, forced) + return trigger(OnBeingHitPositiveBerry, item, battler, battle, forced) + end + + #============================================================================= + + def self.triggerAfterMoveUseFromTarget(item, battler, user, move, switched_battlers, battle) + AfterMoveUseFromTarget.trigger(item, battler, user, move, switched_battlers, battle) + end + + def self.triggerAfterMoveUseFromUser(item, user, targets, move, num_hits, battle) + AfterMoveUseFromUser.trigger(item, user, targets, move, num_hits, battle) + end + + def self.triggerOnEndOfUsingMove(item, battler, battle, forced) + return trigger(OnEndOfUsingMove, item, battler, battle, forced) + end + + def self.triggerOnEndOfUsingMoveStatRestore(item, battler, battle, forced) + return trigger(OnEndOfUsingMoveStatRestore, item, battler, battle, forced) + end + + #============================================================================= + + def self.triggerExpGainModifier(item, battler, exp) + return trigger(ExpGainModifier, item, battler, exp, ret: -1) + end + + def self.triggerEVGainModifier(item, battler, ev_array) + return false if !EVGainModifier[item] + EVGainModifier.trigger(item, battler, ev_array) + return true + end + + #============================================================================= + + def self.triggerWeatherExtender(item, weather, duration, battler, battle) + return trigger(WeatherExtender, item, weather, duration, battler, battle, ret: duration) + end + + def self.triggerTerrainExtender(item, terrain, duration, battler, battle) + return trigger(TerrainExtender, item, terrain, duration, battler, battle, ret: duration) + end + + def self.triggerTerrainStatBoost(item, battler, battle) + return trigger(TerrainStatBoost, item, battler, battle) + end + + #============================================================================= + + def self.triggerEndOfRoundHealing(item, battler, battle) + EndOfRoundHealing.trigger(item, battler, battle) + end + + def self.triggerEndOfRoundEffect(item, battler, battle) + EndOfRoundEffect.trigger(item, battler, battle) + end + + #============================================================================= + + def self.triggerCertainSwitching(item, switcher, battle) + return trigger(CertainSwitching, item, switcher, battle) + end + + def self.triggerTrappingByTarget(item, switcher, bearer, battle) + return trigger(TrappingByTarget, item, switcher, bearer, battle) + end + + def self.triggerOnSwitchIn(item, battler, battle) + OnSwitchIn.trigger(item, battler, battle) + end + + def self.triggerOnIntimidated(item, battler, battle) + return trigger(OnIntimidated, item, battler, battle) + end + + #============================================================================= + + def self.triggerCertainEscapeFromBattle(item, battler) + return trigger(CertainEscapeFromBattle, item, battler) + end +end + +#=============================================================================== +# SpeedCalc handlers #=============================================================================== -BattleHandlers::SpeedCalcItem.add(:CHOICESCARF, +Battle::ItemEffects::SpeedCalc.add(:CHOICESCARF, proc { |item,battler,mult| next mult*1.5 } ) -BattleHandlers::SpeedCalcItem.add(:MACHOBRACE, +Battle::ItemEffects::SpeedCalc.add(:MACHOBRACE, proc { |item,battler,mult| next mult/2 } ) -BattleHandlers::SpeedCalcItem.copy(:MACHOBRACE,:POWERANKLET,:POWERBAND, - :POWERBELT,:POWERBRACER, - :POWERLENS,:POWERWEIGHT) +Battle::ItemEffects::SpeedCalc.copy(:MACHOBRACE, :POWERANKLET, :POWERBAND, + :POWERBELT, :POWERBRACER, + :POWERLENS, :POWERWEIGHT) -BattleHandlers::SpeedCalcItem.add(:QUICKPOWDER, +Battle::ItemEffects::SpeedCalc.add(:QUICKPOWDER, proc { |item,battler,mult| next mult*2 if battler.isSpecies?(:DITTO) && !battler.effects[PBEffects::Transform] } ) -BattleHandlers::SpeedCalcItem.add(:IRONBALL, +Battle::ItemEffects::SpeedCalc.add(:IRONBALL, proc { |item,battler,mult| next mult/2 } ) #=============================================================================== -# WeightCalcItem handlers +# WeightCalc handlers #=============================================================================== -BattleHandlers::WeightCalcItem.add(:FLOATSTONE, +Battle::ItemEffects::WeightCalc.add(:FLOATSTONE, proc { |item,battler,w| next [w/2,1].max } ) #=============================================================================== -# HPHealItem handlers +# HPHeal handlers #=============================================================================== -BattleHandlers::HPHealItem.add(:AGUAVBERRY, +Battle::ItemEffects::HPHeal.add(:AGUAVBERRY, proc { |item,battler,battle,forced| next battler.pbConfusionBerry(item, forced, 4, _INTL("For {1}, the {2} was too bitter!", battler.pbThis(true), GameData::Item.get(item).name) @@ -53,13 +269,13 @@ BattleHandlers::HPHealItem.add(:AGUAVBERRY, } ) -BattleHandlers::HPHealItem.add(:APICOTBERRY, +Battle::ItemEffects::HPHeal.add(:APICOTBERRY, proc { |item,battler,battle,forced| next battler.pbStatIncreasingBerry(item, forced, :SPECIAL_DEFENSE) } ) -BattleHandlers::HPHealItem.add(:BERRYJUICE, +Battle::ItemEffects::HPHeal.add(:BERRYJUICE, proc { |item,battler,battle,forced| next false if !battler.canHeal? next false if !forced && battler.hp>battler.totalhp/2 @@ -76,7 +292,7 @@ BattleHandlers::HPHealItem.add(:BERRYJUICE, } ) -BattleHandlers::HPHealItem.add(:FIGYBERRY, +Battle::ItemEffects::HPHeal.add(:FIGYBERRY, proc { |item,battler,battle,forced| next battler.pbConfusionBerry(item, forced, 0, _INTL("For {1}, the {2} was too spicy!", battler.pbThis(true), GameData::Item.get(item).name) @@ -84,13 +300,13 @@ BattleHandlers::HPHealItem.add(:FIGYBERRY, } ) -BattleHandlers::HPHealItem.add(:GANLONBERRY, +Battle::ItemEffects::HPHeal.add(:GANLONBERRY, proc { |item,battler,battle,forced| next battler.pbStatIncreasingBerry(item, forced, :DEFENSE) } ) -BattleHandlers::HPHealItem.add(:IAPAPABERRY, +Battle::ItemEffects::HPHeal.add(:IAPAPABERRY, proc { |item,battler,battle,forced| next battler.pbConfusionBerry(item, forced, 1, _INTL("For {1}, the {2} was too sour!", battler.pbThis(true), GameData::Item.get(item).name) @@ -98,7 +314,7 @@ BattleHandlers::HPHealItem.add(:IAPAPABERRY, } ) -BattleHandlers::HPHealItem.add(:LANSATBERRY, +Battle::ItemEffects::HPHeal.add(:LANSATBERRY, proc { |item,battler,battle,forced| next false if !forced && !battler.canConsumePinchBerry? next false if battler.effects[PBEffects::FocusEnergy]>=2 @@ -114,13 +330,13 @@ BattleHandlers::HPHealItem.add(:LANSATBERRY, } ) -BattleHandlers::HPHealItem.add(:LIECHIBERRY, +Battle::ItemEffects::HPHeal.add(:LIECHIBERRY, proc { |item,battler,battle,forced| next battler.pbStatIncreasingBerry(item, forced, :ATTACK) } ) -BattleHandlers::HPHealItem.add(:MAGOBERRY, +Battle::ItemEffects::HPHeal.add(:MAGOBERRY, proc { |item,battler,battle,forced| next battler.pbConfusionBerry(item, forced, 2, _INTL("For {1}, the {2} was too sweet!", battler.pbThis(true), GameData::Item.get(item).name) @@ -128,7 +344,7 @@ BattleHandlers::HPHealItem.add(:MAGOBERRY, } ) -BattleHandlers::HPHealItem.add(:MICLEBERRY, +Battle::ItemEffects::HPHeal.add(:MICLEBERRY, proc { |item,battler,battle,forced| next false if !forced && !battler.canConsumePinchBerry? next false if !battler.effects[PBEffects::MicleBerry] @@ -146,7 +362,7 @@ BattleHandlers::HPHealItem.add(:MICLEBERRY, } ) -BattleHandlers::HPHealItem.add(:ORANBERRY, +Battle::ItemEffects::HPHeal.add(:ORANBERRY, proc { |item,battler,battle,forced| next false if !battler.canHeal? next false if !forced && !battler.canConsumePinchBerry?(false) @@ -171,19 +387,19 @@ BattleHandlers::HPHealItem.add(:ORANBERRY, } ) -BattleHandlers::HPHealItem.add(:PETAYABERRY, +Battle::ItemEffects::HPHeal.add(:PETAYABERRY, proc { |item,battler,battle,forced| next battler.pbStatIncreasingBerry(item, forced, :SPECIAL_ATTACK) } ) -BattleHandlers::HPHealItem.add(:SALACBERRY, +Battle::ItemEffects::HPHeal.add(:SALACBERRY, proc { |item,battler,battle,forced| next battler.pbStatIncreasingBerry(item, forced, :SPEED) } ) -BattleHandlers::HPHealItem.add(:SITRUSBERRY, +Battle::ItemEffects::HPHeal.add(:SITRUSBERRY, proc { |item,battler,battle,forced| next false if !battler.canHeal? next false if !forced && !battler.canConsumePinchBerry?(false) @@ -208,7 +424,7 @@ BattleHandlers::HPHealItem.add(:SITRUSBERRY, } ) -BattleHandlers::HPHealItem.add(:STARFBERRY, +Battle::ItemEffects::HPHeal.add(:STARFBERRY, proc { |item,battler,battle,forced| stats = [] GameData::Stat.each_main_battle { |s| stats.push(s.id) if battler.pbCanRaiseStatStage?(s.id, battler) } @@ -218,7 +434,7 @@ BattleHandlers::HPHealItem.add(:STARFBERRY, } ) -BattleHandlers::HPHealItem.add(:WIKIBERRY, +Battle::ItemEffects::HPHeal.add(:WIKIBERRY, proc { |item,battler,battle,forced| next battler.pbConfusionBerry(item, forced, 3, _INTL("For {1}, the {2} was too dry!", battler.pbThis(true), GameData::Item.get(item).name) @@ -227,9 +443,9 @@ BattleHandlers::HPHealItem.add(:WIKIBERRY, ) #=============================================================================== -# ItemOnStatDropped handlers +# OnStatLoss handlers #=============================================================================== -BattleHandlers::ItemOnStatDropped.add(:EJECTPACK, +Battle::ItemEffects::OnStatLoss.add(:EJECTPACK, proc { |item, battler, move_user, battle| next false if battler.effects[PBEffects::SkyDrop] >= 0 || battler.inTwoTurnAttack?("TwoTurnAttackInvulnerableInSkyTargetCannotAct") # Sky Drop @@ -256,10 +472,10 @@ BattleHandlers::ItemOnStatDropped.add(:EJECTPACK, ) #=============================================================================== -# StatusCureItem handlers +# StatusCure handlers #=============================================================================== -BattleHandlers::StatusCureItem.add(:ASPEARBERRY, +Battle::ItemEffects::StatusCure.add(:ASPEARBERRY, proc { |item,battler,battle,forced| next false if !forced && !battler.canConsumeBerry? next false if battler.status != :FROZEN @@ -272,7 +488,7 @@ BattleHandlers::StatusCureItem.add(:ASPEARBERRY, } ) -BattleHandlers::StatusCureItem.add(:CHERIBERRY, +Battle::ItemEffects::StatusCure.add(:CHERIBERRY, proc { |item,battler,battle,forced| next false if !forced && !battler.canConsumeBerry? next false if battler.status != :PARALYSIS @@ -285,7 +501,7 @@ BattleHandlers::StatusCureItem.add(:CHERIBERRY, } ) -BattleHandlers::StatusCureItem.add(:CHESTOBERRY, +Battle::ItemEffects::StatusCure.add(:CHESTOBERRY, proc { |item,battler,battle,forced| next false if !forced && !battler.canConsumeBerry? next false if battler.status != :SLEEP @@ -298,7 +514,7 @@ BattleHandlers::StatusCureItem.add(:CHESTOBERRY, } ) -BattleHandlers::StatusCureItem.add(:LUMBERRY, +Battle::ItemEffects::StatusCure.add(:LUMBERRY, proc { |item,battler,battle,forced| next false if !forced && !battler.canConsumeBerry? next false if battler.status == :NONE && @@ -333,7 +549,7 @@ BattleHandlers::StatusCureItem.add(:LUMBERRY, } ) -BattleHandlers::StatusCureItem.add(:MENTALHERB, +Battle::ItemEffects::StatusCure.add(:MENTALHERB, proc { |item,battler,battle,forced| next false if battler.effects[PBEffects::Attract]==-1 && battler.effects[PBEffects::Taunt]==0 && @@ -368,7 +584,7 @@ BattleHandlers::StatusCureItem.add(:MENTALHERB, } ) -BattleHandlers::StatusCureItem.add(:PECHABERRY, +Battle::ItemEffects::StatusCure.add(:PECHABERRY, proc { |item,battler,battle,forced| next false if !forced && !battler.canConsumeBerry? next false if battler.status != :POISON @@ -381,7 +597,7 @@ BattleHandlers::StatusCureItem.add(:PECHABERRY, } ) -BattleHandlers::StatusCureItem.add(:PERSIMBERRY, +Battle::ItemEffects::StatusCure.add(:PERSIMBERRY, proc { |item,battler,battle,forced| next false if !forced && !battler.canConsumeBerry? next false if battler.effects[PBEffects::Confusion]==0 @@ -399,7 +615,7 @@ BattleHandlers::StatusCureItem.add(:PERSIMBERRY, } ) -BattleHandlers::StatusCureItem.add(:RAWSTBERRY, +Battle::ItemEffects::StatusCure.add(:RAWSTBERRY, proc { |item,battler,battle,forced| next false if !forced && !battler.canConsumeBerry? next false if battler.status != :BURN @@ -413,35 +629,35 @@ BattleHandlers::StatusCureItem.add(:RAWSTBERRY, ) #=============================================================================== -# PriorityBracketChangeItem handlers +# PriorityBracketChange handlers #=============================================================================== -BattleHandlers::PriorityBracketChangeItem.add(:CUSTAPBERRY, +Battle::ItemEffects::PriorityBracketChange.add(:CUSTAPBERRY, proc { |item,battler,subPri,battle| next if !battler.canConsumePinchBerry? next 1 if subPri<1 } ) -BattleHandlers::PriorityBracketChangeItem.add(:LAGGINGTAIL, +Battle::ItemEffects::PriorityBracketChange.add(:LAGGINGTAIL, proc { |item,battler,subPri,battle| next -1 if subPri==0 } ) -BattleHandlers::PriorityBracketChangeItem.copy(:LAGGINGTAIL,:FULLINCENSE) +Battle::ItemEffects::PriorityBracketChange.copy(:LAGGINGTAIL, :FULLINCENSE) -BattleHandlers::PriorityBracketChangeItem.add(:QUICKCLAW, +Battle::ItemEffects::PriorityBracketChange.add(:QUICKCLAW, proc { |item,battler,subPri,battle| next 1 if subPri<1 && battle.pbRandom(100)<20 } ) #=============================================================================== -# PriorityBracketUseItem handlers +# PriorityBracketUse handlers #=============================================================================== -BattleHandlers::PriorityBracketUseItem.add(:CUSTAPBERRY, +Battle::ItemEffects::PriorityBracketUse.add(:CUSTAPBERRY, proc { |item,battler,battle| battle.pbCommonAnimation("EatBerry",battler) battle.pbDisplay(_INTL("{1}'s {2} let it move first!",battler.pbThis,battler.itemName)) @@ -449,7 +665,7 @@ BattleHandlers::PriorityBracketUseItem.add(:CUSTAPBERRY, } ) -BattleHandlers::PriorityBracketUseItem.add(:QUICKCLAW, +Battle::ItemEffects::PriorityBracketUse.add(:QUICKCLAW, proc { |item,battler,battle| battle.pbCommonAnimation("UseItem",battler) battle.pbDisplay(_INTL("{1}'s {2} let it move first!",battler.pbThis,battler.itemName)) @@ -457,10 +673,10 @@ BattleHandlers::PriorityBracketUseItem.add(:QUICKCLAW, ) #=============================================================================== -# UserItemOnMissing handlers +# OnMissingTarget handlers #=============================================================================== -BattleHandlers::PriorityBracketUseItem.add(:BLUNDERPOLICY, +Battle::ItemEffects::OnMissingTarget.add(:BLUNDERPOLICY, proc { |item, user, target, move, hit_num, battle| next if hit_num > 0 || target.damageState.invulnerable next if ["OHKO", "OHKOIce", "OHKOHitsUndergroundTarget"].include?(move.function) @@ -473,16 +689,16 @@ BattleHandlers::PriorityBracketUseItem.add(:BLUNDERPOLICY, ) #=============================================================================== -# AccuracyCalcUserItem handlers +# AccuracyCalcFromUser handlers #=============================================================================== -BattleHandlers::AccuracyCalcUserItem.add(:WIDELENS, +Battle::ItemEffects::AccuracyCalcFromUser.add(:WIDELENS, proc { |item,mods,user,target,move,type| mods[:accuracy_multiplier] *= 1.1 } ) -BattleHandlers::AccuracyCalcUserItem.add(:ZOOMLENS, +Battle::ItemEffects::AccuracyCalcFromUser.add(:ZOOMLENS, proc { |item,mods,user,target,move,type| if (target.battle.choices[target.index][0]!=:UseMove && target.battle.choices[target.index][0]!=:Shift) || @@ -493,22 +709,22 @@ BattleHandlers::AccuracyCalcUserItem.add(:ZOOMLENS, ) #=============================================================================== -# AccuracyCalcTargetItem handlers +# AccuracyCalcFromTarget handlers #=============================================================================== -BattleHandlers::AccuracyCalcTargetItem.add(:BRIGHTPOWDER, +Battle::ItemEffects::AccuracyCalcFromTarget.add(:BRIGHTPOWDER, proc { |item,mods,user,target,move,type| mods[:accuracy_multiplier] *= 0.9 } ) -BattleHandlers::AccuracyCalcTargetItem.copy(:BRIGHTPOWDER,:LAXINCENSE) +Battle::ItemEffects::AccuracyCalcFromTarget.copy(:BRIGHTPOWDER, :LAXINCENSE) #=============================================================================== -# DamageCalcUserItem handlers +# DamageCalcFromUser handlers #=============================================================================== -BattleHandlers::DamageCalcUserItem.add(:ADAMANTORB, +Battle::ItemEffects::DamageCalcFromUser.add(:ADAMANTORB, proc { |item,user,target,move,mults,baseDmg,type| if user.isSpecies?(:DIALGA) && (type == :DRAGON || type == :STEEL) mults[:base_damage_multiplier] *= 1.2 @@ -516,55 +732,55 @@ BattleHandlers::DamageCalcUserItem.add(:ADAMANTORB, } ) -BattleHandlers::DamageCalcUserItem.add(:BLACKBELT, +Battle::ItemEffects::DamageCalcFromUser.add(:BLACKBELT, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :FIGHTING } ) -BattleHandlers::DamageCalcUserItem.copy(:BLACKBELT,:FISTPLATE) +Battle::ItemEffects::DamageCalcFromUser.copy(:BLACKBELT, :FISTPLATE) -BattleHandlers::DamageCalcUserItem.add(:BLACKGLASSES, +Battle::ItemEffects::DamageCalcFromUser.add(:BLACKGLASSES, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :DARK } ) -BattleHandlers::DamageCalcUserItem.copy(:BLACKGLASSES,:DREADPLATE) +Battle::ItemEffects::DamageCalcFromUser.copy(:BLACKGLASSES, :DREADPLATE) -BattleHandlers::DamageCalcUserItem.add(:BUGGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:BUGGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:BUG, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:CHARCOAL, +Battle::ItemEffects::DamageCalcFromUser.add(:CHARCOAL, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :FIRE } ) -BattleHandlers::DamageCalcUserItem.copy(:CHARCOAL,:FLAMEPLATE) +Battle::ItemEffects::DamageCalcFromUser.copy(:CHARCOAL, :FLAMEPLATE) -BattleHandlers::DamageCalcUserItem.add(:CHOICEBAND, +Battle::ItemEffects::DamageCalcFromUser.add(:CHOICEBAND, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.5 if move.physicalMove? } ) -BattleHandlers::DamageCalcUserItem.add(:CHOICESPECS, +Battle::ItemEffects::DamageCalcFromUser.add(:CHOICESPECS, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.5 if move.specialMove? } ) -BattleHandlers::DamageCalcUserItem.add(:DARKGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:DARKGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:DARK, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:DEEPSEATOOTH, +Battle::ItemEffects::DamageCalcFromUser.add(:DEEPSEATOOTH, proc { |item,user,target,move,mults,baseDmg,type| if user.isSpecies?(:CLAMPERL) && move.specialMove? mults[:attack_multiplier] *= 2 @@ -572,27 +788,27 @@ BattleHandlers::DamageCalcUserItem.add(:DEEPSEATOOTH, } ) -BattleHandlers::DamageCalcUserItem.add(:DRAGONFANG, +Battle::ItemEffects::DamageCalcFromUser.add(:DRAGONFANG, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :DRAGON } ) -BattleHandlers::DamageCalcUserItem.copy(:DRAGONFANG,:DRACOPLATE) +Battle::ItemEffects::DamageCalcFromUser.copy(:DRAGONFANG, :DRACOPLATE) -BattleHandlers::DamageCalcUserItem.add(:DRAGONGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:DRAGONGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:DRAGON, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:ELECTRICGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:ELECTRICGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:ELECTRIC, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:EXPERTBELT, +Battle::ItemEffects::DamageCalcFromUser.add(:EXPERTBELT, proc { |item,user,target,move,mults,baseDmg,type| if Effectiveness.super_effective?(target.damageState.typeMod) mults[:final_damage_multiplier] *= 1.2 @@ -600,43 +816,43 @@ BattleHandlers::DamageCalcUserItem.add(:EXPERTBELT, } ) -BattleHandlers::DamageCalcUserItem.add(:FAIRYGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:FAIRYGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:FAIRY, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:FIGHTINGGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:FIGHTINGGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:FIGHTING, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:FIREGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:FIREGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:FIRE, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:FLYINGGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:FLYINGGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:FLYING, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:GHOSTGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:GHOSTGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:GHOST, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:GRASSGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:GRASSGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:GRASS, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:GRISEOUSORB, +Battle::ItemEffects::DamageCalcFromUser.add(:GRISEOUSORB, proc { |item,user,target,move,mults,baseDmg,type| if user.isSpecies?(:GIRATINA) && (type == :DRAGON || type == :GHOST) mults[:base_damage_multiplier] *= 1.2 @@ -644,27 +860,27 @@ BattleHandlers::DamageCalcUserItem.add(:GRISEOUSORB, } ) -BattleHandlers::DamageCalcUserItem.add(:GROUNDGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:GROUNDGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:GROUND, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:HARDSTONE, +Battle::ItemEffects::DamageCalcFromUser.add(:HARDSTONE, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :ROCK } ) -BattleHandlers::DamageCalcUserItem.copy(:HARDSTONE,:STONEPLATE,:ROCKINCENSE) +Battle::ItemEffects::DamageCalcFromUser.copy(:HARDSTONE, :STONEPLATE, :ROCKINCENSE) -BattleHandlers::DamageCalcUserItem.add(:ICEGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:ICEGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:ICE, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:LIFEORB, +Battle::ItemEffects::DamageCalcFromUser.add(:LIFEORB, proc { |item,user,target,move,mults,baseDmg,type| if !move.is_a?(Battle::Move::Confusion) mults[:final_damage_multiplier] *= 1.3 @@ -672,7 +888,7 @@ BattleHandlers::DamageCalcUserItem.add(:LIFEORB, } ) -BattleHandlers::DamageCalcUserItem.add(:LIGHTBALL, +Battle::ItemEffects::DamageCalcFromUser.add(:LIGHTBALL, proc { |item,user,target,move,mults,baseDmg,type| if user.isSpecies?(:PIKACHU) mults[:attack_multiplier] *= 2 @@ -680,7 +896,7 @@ BattleHandlers::DamageCalcUserItem.add(:LIGHTBALL, } ) -BattleHandlers::DamageCalcUserItem.add(:LUSTROUSORB, +Battle::ItemEffects::DamageCalcFromUser.add(:LUSTROUSORB, proc { |item,user,target,move,mults,baseDmg,type| if user.isSpecies?(:PALKIA) && (type == :DRAGON || type == :WATER) mults[:base_damage_multiplier] *= 1.2 @@ -688,128 +904,128 @@ BattleHandlers::DamageCalcUserItem.add(:LUSTROUSORB, } ) -BattleHandlers::DamageCalcUserItem.add(:MAGNET, +Battle::ItemEffects::DamageCalcFromUser.add(:MAGNET, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :ELECTRIC } ) -BattleHandlers::DamageCalcUserItem.copy(:MAGNET,:ZAPPLATE) +Battle::ItemEffects::DamageCalcFromUser.copy(:MAGNET, :ZAPPLATE) -BattleHandlers::DamageCalcUserItem.add(:METALCOAT, +Battle::ItemEffects::DamageCalcFromUser.add(:METALCOAT, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :STEEL } ) -BattleHandlers::DamageCalcUserItem.copy(:METALCOAT,:IRONPLATE) +Battle::ItemEffects::DamageCalcFromUser.copy(:METALCOAT, :IRONPLATE) -BattleHandlers::DamageCalcUserItem.add(:METRONOME, +Battle::ItemEffects::DamageCalcFromUser.add(:METRONOME, proc { |item,user,target,move,mults,baseDmg,type| met = 1 + 0.2 * [user.effects[PBEffects::Metronome], 5].min mults[:final_damage_multiplier] *= met } ) -BattleHandlers::DamageCalcUserItem.add(:MIRACLESEED, +Battle::ItemEffects::DamageCalcFromUser.add(:MIRACLESEED, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :GRASS } ) -BattleHandlers::DamageCalcUserItem.copy(:MIRACLESEED,:MEADOWPLATE,:ROSEINCENSE) +Battle::ItemEffects::DamageCalcFromUser.copy(:MIRACLESEED, :MEADOWPLATE, :ROSEINCENSE) -BattleHandlers::DamageCalcUserItem.add(:MUSCLEBAND, +Battle::ItemEffects::DamageCalcFromUser.add(:MUSCLEBAND, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.1 if move.physicalMove? } ) -BattleHandlers::DamageCalcUserItem.add(:MYSTICWATER, +Battle::ItemEffects::DamageCalcFromUser.add(:MYSTICWATER, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :WATER } ) -BattleHandlers::DamageCalcUserItem.copy(:MYSTICWATER,:SPLASHPLATE,:SEAINCENSE,:WAVEINCENSE) +Battle::ItemEffects::DamageCalcFromUser.copy(:MYSTICWATER, :SPLASHPLATE, :SEAINCENSE, :WAVEINCENSE) -BattleHandlers::DamageCalcUserItem.add(:NEVERMELTICE, +Battle::ItemEffects::DamageCalcFromUser.add(:NEVERMELTICE, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :ICE } ) -BattleHandlers::DamageCalcUserItem.copy(:NEVERMELTICE,:ICICLEPLATE) +Battle::ItemEffects::DamageCalcFromUser.copy(:NEVERMELTICE, :ICICLEPLATE) -BattleHandlers::DamageCalcUserItem.add(:NORMALGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:NORMALGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:NORMAL, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:PIXIEPLATE, +Battle::ItemEffects::DamageCalcFromUser.add(:PIXIEPLATE, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :FAIRY } ) -BattleHandlers::DamageCalcUserItem.add(:POISONBARB, +Battle::ItemEffects::DamageCalcFromUser.add(:POISONBARB, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :POISON } ) -BattleHandlers::DamageCalcUserItem.copy(:POISONBARB,:TOXICPLATE) +Battle::ItemEffects::DamageCalcFromUser.copy(:POISONBARB, :TOXICPLATE) -BattleHandlers::DamageCalcUserItem.add(:POISONGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:POISONGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:POISON, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:PSYCHICGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:PSYCHICGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:PSYCHIC, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:ROCKGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:ROCKGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:ROCK, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:SHARPBEAK, +Battle::ItemEffects::DamageCalcFromUser.add(:SHARPBEAK, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :FLYING } ) -BattleHandlers::DamageCalcUserItem.copy(:SHARPBEAK,:SKYPLATE) +Battle::ItemEffects::DamageCalcFromUser.copy(:SHARPBEAK, :SKYPLATE) -BattleHandlers::DamageCalcUserItem.add(:SILKSCARF, +Battle::ItemEffects::DamageCalcFromUser.add(:SILKSCARF, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :NORMAL } ) -BattleHandlers::DamageCalcUserItem.add(:SILVERPOWDER, +Battle::ItemEffects::DamageCalcFromUser.add(:SILVERPOWDER, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :BUG } ) -BattleHandlers::DamageCalcUserItem.copy(:SILVERPOWDER,:INSECTPLATE) +Battle::ItemEffects::DamageCalcFromUser.copy(:SILVERPOWDER, :INSECTPLATE) -BattleHandlers::DamageCalcUserItem.add(:SOFTSAND, +Battle::ItemEffects::DamageCalcFromUser.add(:SOFTSAND, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :GROUND } ) -BattleHandlers::DamageCalcUserItem.copy(:SOFTSAND,:EARTHPLATE) +Battle::ItemEffects::DamageCalcFromUser.copy(:SOFTSAND, :EARTHPLATE) -BattleHandlers::DamageCalcUserItem.add(:SOULDEW, +Battle::ItemEffects::DamageCalcFromUser.add(:SOULDEW, proc { |item,user,target,move,mults,baseDmg,type| next if !user.isSpecies?(:LATIAS) && !user.isSpecies?(:LATIOS) if Settings::SOUL_DEW_POWERS_UP_TYPES @@ -822,21 +1038,21 @@ BattleHandlers::DamageCalcUserItem.add(:SOULDEW, } ) -BattleHandlers::DamageCalcUserItem.add(:SPELLTAG, +Battle::ItemEffects::DamageCalcFromUser.add(:SPELLTAG, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :GHOST } ) -BattleHandlers::DamageCalcUserItem.copy(:SPELLTAG,:SPOOKYPLATE) +Battle::ItemEffects::DamageCalcFromUser.copy(:SPELLTAG, :SPOOKYPLATE) -BattleHandlers::DamageCalcUserItem.add(:STEELGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:STEELGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:STEEL, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:THICKCLUB, +Battle::ItemEffects::DamageCalcFromUser.add(:THICKCLUB, proc { |item,user,target,move,mults,baseDmg,type| if (user.isSpecies?(:CUBONE) || user.isSpecies?(:MAROWAK)) && move.physicalMove? mults[:attack_multiplier] *= 2 @@ -844,76 +1060,76 @@ BattleHandlers::DamageCalcUserItem.add(:THICKCLUB, } ) -BattleHandlers::DamageCalcUserItem.add(:TWISTEDSPOON, +Battle::ItemEffects::DamageCalcFromUser.add(:TWISTEDSPOON, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.2 if type == :PSYCHIC } ) -BattleHandlers::DamageCalcUserItem.copy(:TWISTEDSPOON,:MINDPLATE,:ODDINCENSE) +Battle::ItemEffects::DamageCalcFromUser.copy(:TWISTEDSPOON, :MINDPLATE, :ODDINCENSE) -BattleHandlers::DamageCalcUserItem.add(:WATERGEM, +Battle::ItemEffects::DamageCalcFromUser.add(:WATERGEM, proc { |item,user,target,move,mults,baseDmg,type| user.pbMoveTypePoweringUpGem(:WATER, move, type, mults) } ) -BattleHandlers::DamageCalcUserItem.add(:WISEGLASSES, +Battle::ItemEffects::DamageCalcFromUser.add(:WISEGLASSES, proc { |item,user,target,move,mults,baseDmg,type| mults[:base_damage_multiplier] *= 1.1 if move.specialMove? } ) #=============================================================================== -# DamageCalcTargetItem handlers +# DamageCalcFromTarget handlers #=============================================================================== # NOTE: Species-specific held items consider the original species, not the # transformed species, and still work while transformed. The exceptions # are Metal/Quick Powder, which don't work if the holder is transformed. -BattleHandlers::DamageCalcTargetItem.add(:ASSAULTVEST, +Battle::ItemEffects::DamageCalcFromTarget.add(:ASSAULTVEST, proc { |item,user,target,move,mults,baseDmg,type| mults[:defense_multiplier] *= 1.5 if move.specialMove? } ) -BattleHandlers::DamageCalcTargetItem.add(:BABIRIBERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:BABIRIBERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:STEEL, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:CHARTIBERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:CHARTIBERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:ROCK, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:CHILANBERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:CHILANBERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:NORMAL, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:CHOPLEBERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:CHOPLEBERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:FIGHTING, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:COBABERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:COBABERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:FLYING, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:COLBURBERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:COLBURBERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:DARK, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:DEEPSEASCALE, +Battle::ItemEffects::DamageCalcFromTarget.add(:DEEPSEASCALE, proc { |item,user,target,move,mults,baseDmg,type| if target.isSpecies?(:CLAMPERL) && move.specialMove? mults[:defense_multiplier] *= 2 @@ -921,7 +1137,7 @@ BattleHandlers::DamageCalcTargetItem.add(:DEEPSEASCALE, } ) -BattleHandlers::DamageCalcTargetItem.add(:EVIOLITE, +Battle::ItemEffects::DamageCalcFromTarget.add(:EVIOLITE, proc { |item,user,target,move,mults,baseDmg,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 @@ -933,25 +1149,25 @@ BattleHandlers::DamageCalcTargetItem.add(:EVIOLITE, } ) -BattleHandlers::DamageCalcTargetItem.add(:HABANBERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:HABANBERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:DRAGON, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:KASIBBERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:KASIBBERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:GHOST, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:KEBIABERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:KEBIABERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:POISON, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:METALPOWDER, +Battle::ItemEffects::DamageCalcFromTarget.add(:METALPOWDER, proc { |item,user,target,move,mults,baseDmg,type| if target.isSpecies?(:DITTO) && !target.effects[PBEffects::Transform] mults[:defense_multiplier] *= 1.5 @@ -959,43 +1175,43 @@ BattleHandlers::DamageCalcTargetItem.add(:METALPOWDER, } ) -BattleHandlers::DamageCalcTargetItem.add(:OCCABERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:OCCABERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:FIRE, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:PASSHOBERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:PASSHOBERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:WATER, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:PAYAPABERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:PAYAPABERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:PSYCHIC, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:RINDOBERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:RINDOBERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:GRASS, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:ROSELIBERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:ROSELIBERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:FAIRY, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:SHUCABERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:SHUCABERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:GROUND, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:SOULDEW, +Battle::ItemEffects::DamageCalcFromTarget.add(:SOULDEW, proc { |item,user,target,move,mults,baseDmg,type| next if Settings::SOUL_DEW_POWERS_UP_TYPES next if !target.isSpecies?(:LATIAS) && !target.isSpecies?(:LATIOS) @@ -1005,61 +1221,61 @@ BattleHandlers::DamageCalcTargetItem.add(:SOULDEW, } ) -BattleHandlers::DamageCalcTargetItem.add(:TANGABERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:TANGABERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:BUG, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:WACANBERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:WACANBERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:ELECTRIC, type, mults) } ) -BattleHandlers::DamageCalcTargetItem.add(:YACHEBERRY, +Battle::ItemEffects::DamageCalcFromTarget.add(:YACHEBERRY, proc { |item,user,target,move,mults,baseDmg,type| target.pbMoveTypeWeakeningBerry(:ICE, type, mults) } ) #=============================================================================== -# CriticalCalcUserItem handlers +# CriticalCalcFromUser handlers #=============================================================================== -BattleHandlers::CriticalCalcUserItem.add(:LUCKYPUNCH, +Battle::ItemEffects::CriticalCalcFromUser.add(:LUCKYPUNCH, proc { |item,user,target,c| next c+2 if user.isSpecies?(:CHANSEY) } ) -BattleHandlers::CriticalCalcUserItem.add(:RAZORCLAW, +Battle::ItemEffects::CriticalCalcFromUser.add(:RAZORCLAW, proc { |item,user,target,c| next c+1 } ) -BattleHandlers::CriticalCalcUserItem.copy(:RAZORCLAW,:SCOPELENS) +Battle::ItemEffects::CriticalCalcFromUser.copy(:RAZORCLAW, :SCOPELENS) -BattleHandlers::CriticalCalcUserItem.add(:LEEK, +Battle::ItemEffects::CriticalCalcFromUser.add(:LEEK, proc { |item,user,target,c| next c+2 if user.isSpecies?(:FARFETCHD) || user.isSpecies?(:SIRFETCHD) } ) -BattleHandlers::CriticalCalcUserItem.copy(:LEEK, :STICK) +Battle::ItemEffects::CriticalCalcFromUser.copy(:LEEK, :STICK) #=============================================================================== -# CriticalCalcTargetItem handlers +# CriticalCalcFromTarget handlers #=============================================================================== # There aren't any! #=============================================================================== -# TargetItemOnHit handlers +# OnBeingHit handlers #=============================================================================== -BattleHandlers::TargetItemOnHit.add(:ABSORBBULB, +Battle::ItemEffects::OnBeingHit.add(:ABSORBBULB, proc { |item,user,target,move,battle| next if move.calcType != :WATER next if !target.pbCanRaiseStatStage?(:SPECIAL_ATTACK,target) @@ -1069,7 +1285,7 @@ BattleHandlers::TargetItemOnHit.add(:ABSORBBULB, } ) -BattleHandlers::TargetItemOnHit.add(:AIRBALLOON, +Battle::ItemEffects::OnBeingHit.add(:AIRBALLOON, proc { |item,user,target,move,battle| battle.pbDisplay(_INTL("{1}'s {2} popped!",target.pbThis,target.itemName)) target.pbConsumeItem(false,true) @@ -1077,7 +1293,7 @@ BattleHandlers::TargetItemOnHit.add(:AIRBALLOON, } ) -BattleHandlers::TargetItemOnHit.add(:CELLBATTERY, +Battle::ItemEffects::OnBeingHit.add(:CELLBATTERY, proc { |item,user,target,move,battle| next if move.calcType != :ELECTRIC next if !target.pbCanRaiseStatStage?(:ATTACK,target) @@ -1087,18 +1303,18 @@ BattleHandlers::TargetItemOnHit.add(:CELLBATTERY, } ) -BattleHandlers::TargetItemOnHit.add(:ENIGMABERRY, +Battle::ItemEffects::OnBeingHit.add(:ENIGMABERRY, proc { |item,user,target,move,battle| next if target.damageState.substitute || target.damageState.disguise || target.damageState.iceFace next if !Effectiveness.super_effective?(target.damageState.typeMod) - if BattleHandlers.triggerTargetItemOnHitPositiveBerry(item,target,battle,false) + if Battle::ItemEffects.triggerOnBeingHitPositiveBerry(item, target, battle, false) target.pbHeldItemTriggered(item) end } ) -BattleHandlers::TargetItemOnHit.add(:JABOCABERRY, +Battle::ItemEffects::OnBeingHit.add(:JABOCABERRY, proc { |item,user,target,move,battle| next if !target.canConsumeBerry? next if !move.physicalMove? @@ -1125,16 +1341,16 @@ BattleHandlers::TargetItemOnHit.add(:JABOCABERRY, # nowhere says it should be stopped by Sheer Force. I suspect this # stoppage is either a false report that no one ever corrected, or an # effect that later changed and wasn't noticed. -BattleHandlers::TargetItemOnHit.add(:KEEBERRY, +Battle::ItemEffects::OnBeingHit.add(:KEEBERRY, proc { |item,user,target,move,battle| next if !move.physicalMove? - if BattleHandlers.triggerTargetItemOnHitPositiveBerry(item,target,battle,false) + if Battle::ItemEffects.triggerOnBeingHitPositiveBerry(item, target, battle, false) target.pbHeldItemTriggered(item) end } ) -BattleHandlers::TargetItemOnHit.add(:LUMINOUSMOSS, +Battle::ItemEffects::OnBeingHit.add(:LUMINOUSMOSS, proc { |item,user,target,move,battle| next if move.calcType != :WATER next if !target.pbCanRaiseStatStage?(:SPECIAL_DEFENSE,target) @@ -1149,16 +1365,16 @@ BattleHandlers::TargetItemOnHit.add(:LUMINOUSMOSS, # nowhere says it should be stopped by Sheer Force. I suspect this # stoppage is either a false report that no one ever corrected, or an # effect that later changed and wasn't noticed. -BattleHandlers::TargetItemOnHit.add(:MARANGABERRY, +Battle::ItemEffects::OnBeingHit.add(:MARANGABERRY, proc { |item,user,target,move,battle| next if !move.specialMove? - if BattleHandlers.triggerTargetItemOnHitPositiveBerry(item,target,battle,false) + if Battle::ItemEffects.triggerOnBeingHitPositiveBerry(item, target, battle, false) target.pbHeldItemTriggered(item) end } ) -BattleHandlers::TargetItemOnHit.add(:ROCKYHELMET, +Battle::ItemEffects::OnBeingHit.add(:ROCKYHELMET, proc { |item,user,target,move,battle| next if !move.pbContactMove?(user) || !user.affectedByContactEffect? next if !user.takesIndirectDamage? @@ -1168,7 +1384,7 @@ BattleHandlers::TargetItemOnHit.add(:ROCKYHELMET, } ) -BattleHandlers::TargetItemOnHit.add(:ROWAPBERRY, +Battle::ItemEffects::OnBeingHit.add(:ROWAPBERRY, proc { |item,user,target,move,battle| next if !target.canConsumeBerry? next if !move.specialMove? @@ -1190,7 +1406,7 @@ BattleHandlers::TargetItemOnHit.add(:ROWAPBERRY, } ) -BattleHandlers::TargetItemOnHit.add(:SNOWBALL, +Battle::ItemEffects::OnBeingHit.add(:SNOWBALL, proc { |item,user,target,move,battle| next if move.calcType != :ICE next if !target.pbCanRaiseStatStage?(:ATTACK,target) @@ -1200,7 +1416,7 @@ BattleHandlers::TargetItemOnHit.add(:SNOWBALL, } ) -BattleHandlers::TargetItemOnHit.add(:STICKYBARB, +Battle::ItemEffects::OnBeingHit.add(:STICKYBARB, proc { |item,user,target,move,battle| next if !move.pbContactMove?(user) || !user.affectedByContactEffect? next if user.fainted? || user.item @@ -1218,7 +1434,7 @@ BattleHandlers::TargetItemOnHit.add(:STICKYBARB, } ) -BattleHandlers::TargetItemOnHit.add(:WEAKNESSPOLICY, +Battle::ItemEffects::OnBeingHit.add(:WEAKNESSPOLICY, proc { |item,user,target,move,battle| next if target.damageState.disguise || target.damageState.iceFace next if !Effectiveness.super_effective?(target.damageState.typeMod) @@ -1239,12 +1455,12 @@ BattleHandlers::TargetItemOnHit.add(:WEAKNESSPOLICY, ) #=============================================================================== -# TargetItemOnHitPositiveBerry handlers +# OnBeingHitPositiveBerry handlers # NOTE: This is for berries that have an effect when Pluck/Bug Bite/Fling # forces their use. #=============================================================================== -BattleHandlers::TargetItemOnHitPositiveBerry.add(:ENIGMABERRY, +Battle::ItemEffects::OnBeingHitPositiveBerry.add(:ENIGMABERRY, proc { |item,battler,battle,forced| next false if !battler.canHeal? next false if !forced && !battler.canConsumeBerry? @@ -1270,7 +1486,7 @@ BattleHandlers::TargetItemOnHitPositiveBerry.add(:ENIGMABERRY, } ) -BattleHandlers::TargetItemOnHitPositiveBerry.add(:KEEBERRY, +Battle::ItemEffects::OnBeingHitPositiveBerry.add(:KEEBERRY, proc { |item,battler,battle,forced| next false if !forced && !battler.canConsumeBerry? next false if !battler.pbCanRaiseStatStage?(:DEFENSE,battler) @@ -1290,7 +1506,7 @@ BattleHandlers::TargetItemOnHitPositiveBerry.add(:KEEBERRY, } ) -BattleHandlers::TargetItemOnHitPositiveBerry.add(:MARANGABERRY, +Battle::ItemEffects::OnBeingHitPositiveBerry.add(:MARANGABERRY, proc { |item,battler,battle,forced| next false if !forced && !battler.canConsumeBerry? next false if !battler.pbCanRaiseStatStage?(:SPECIAL_DEFENSE,battler) @@ -1311,10 +1527,10 @@ BattleHandlers::TargetItemOnHitPositiveBerry.add(:MARANGABERRY, ) #=============================================================================== -# TargetItemAfterMoveUse handlers +# AfterMoveUseFromTarget handlers #=============================================================================== -BattleHandlers::TargetItemAfterMoveUse.add(:EJECTBUTTON, +Battle::ItemEffects::AfterMoveUseFromTarget.add(:EJECTBUTTON, proc { |item, battler, user, move, switched_battlers, battle| next if !switched_battlers.empty? next if battle.pbAllFainted?(battler.idxOpposingSide) @@ -1332,7 +1548,7 @@ BattleHandlers::TargetItemAfterMoveUse.add(:EJECTBUTTON, } ) -BattleHandlers::TargetItemAfterMoveUse.add(:REDCARD, +Battle::ItemEffects::AfterMoveUseFromTarget.add(:REDCARD, proc { |item, battler, user, move, switched_battlers, battle| next if !switched_battlers.empty? || user.fainted? newPkmn = battle.pbGetReplacementPokemonIndex(user.index,true) # Random @@ -1365,10 +1581,10 @@ BattleHandlers::TargetItemAfterMoveUse.add(:REDCARD, ) #=============================================================================== -# UserItemAfterMoveUse handlers +# AfterMoveUseFromUser handlers #=============================================================================== -BattleHandlers::UserItemAfterMoveUse.add(:LIFEORB, +Battle::ItemEffects::AfterMoveUseFromUser.add(:LIFEORB, proc { |item,user,targets,move,numHits,battle| next if !user.takesIndirectDamage? next if !move.pbDamagingMove? || numHits==0 @@ -1389,7 +1605,7 @@ BattleHandlers::UserItemAfterMoveUse.add(:LIFEORB, # NOTE: In the official games, Shell Bell does not prevent Emergency Exit/Wimp # Out triggering even if Shell Bell heals the holder back to 50% HP or # more. Essentials ignores this exception. -BattleHandlers::UserItemAfterMoveUse.add(:SHELLBELL, +Battle::ItemEffects::AfterMoveUseFromUser.add(:SHELLBELL, proc { |item,user,targets,move,numHits,battle| next if !user.canHeal? totalDamage = 0 @@ -1401,7 +1617,7 @@ BattleHandlers::UserItemAfterMoveUse.add(:SHELLBELL, } ) -BattleHandlers::UserItemAfterMoveUse.add(:THROATSPRAY, +Battle::ItemEffects::AfterMoveUseFromUser.add(:THROATSPRAY, proc { |item, user, targets, move, numHits, battle| next if battle.pbAllFainted?(user.idxOwnSide) || battle.pbAllFainted?(user.idxOpposingSide) @@ -1414,10 +1630,10 @@ BattleHandlers::UserItemAfterMoveUse.add(:THROATSPRAY, ) #=============================================================================== -# EndOfMoveItem handlers +# OnEndOfUsingMove handlers #=============================================================================== -BattleHandlers::EndOfMoveItem.add(:LEPPABERRY, +Battle::ItemEffects::OnEndOfUsingMove.add(:LEPPABERRY, proc { |item,battler,battle,forced| next false if !forced && !battler.canConsumeBerry? found_empty_moves = [] @@ -1455,10 +1671,10 @@ BattleHandlers::EndOfMoveItem.add(:LEPPABERRY, ) #=============================================================================== -# EndOfMoveStatRestoreItem handlers +# OnEndOfUsingMoveStatRestore handlers #=============================================================================== -BattleHandlers::EndOfMoveStatRestoreItem.add(:WHITEHERB, +Battle::ItemEffects::OnEndOfUsingMoveStatRestore.add(:WHITEHERB, proc { |item,battler,battle,forced| reducedStats = false GameData::Stat.each_battle do |s| @@ -1482,104 +1698,104 @@ BattleHandlers::EndOfMoveStatRestoreItem.add(:WHITEHERB, ) #=============================================================================== -# ExpGainModifierItem handlers +# ExpGainModifier handlers #=============================================================================== -BattleHandlers::ExpGainModifierItem.add(:LUCKYEGG, +Battle::ItemEffects::ExpGainModifier.add(:LUCKYEGG, proc { |item,battler,exp| next exp*3/2 } ) #=============================================================================== -# EVGainModifierItem handlers +# EVGainModifier handlers #=============================================================================== -BattleHandlers::EVGainModifierItem.add(:MACHOBRACE, +Battle::ItemEffects::EVGainModifier.add(:MACHOBRACE, proc { |item,battler,evYield| evYield.each_key { |stat| evYield[stat] *= 2 } } ) -BattleHandlers::EVGainModifierItem.add(:POWERANKLET, +Battle::ItemEffects::EVGainModifier.add(:POWERANKLET, proc { |item,battler,evYield| evYield[:SPEED] += (Settings::MORE_EVS_FROM_POWER_ITEMS) ? 8 : 4 } ) -BattleHandlers::EVGainModifierItem.add(:POWERBAND, +Battle::ItemEffects::EVGainModifier.add(:POWERBAND, proc { |item,battler,evYield| evYield[:SPECIAL_DEFENSE] += (Settings::MORE_EVS_FROM_POWER_ITEMS) ? 8 : 4 } ) -BattleHandlers::EVGainModifierItem.add(:POWERBELT, +Battle::ItemEffects::EVGainModifier.add(:POWERBELT, proc { |item,battler,evYield| evYield[:DEFENSE] += (Settings::MORE_EVS_FROM_POWER_ITEMS) ? 8 : 4 } ) -BattleHandlers::EVGainModifierItem.add(:POWERBRACER, +Battle::ItemEffects::EVGainModifier.add(:POWERBRACER, proc { |item,battler,evYield| evYield[:ATTACK] += (Settings::MORE_EVS_FROM_POWER_ITEMS) ? 8 : 4 } ) -BattleHandlers::EVGainModifierItem.add(:POWERLENS, +Battle::ItemEffects::EVGainModifier.add(:POWERLENS, proc { |item,battler,evYield| evYield[:SPECIAL_ATTACK] += (Settings::MORE_EVS_FROM_POWER_ITEMS) ? 8 : 4 } ) -BattleHandlers::EVGainModifierItem.add(:POWERWEIGHT, +Battle::ItemEffects::EVGainModifier.add(:POWERWEIGHT, proc { |item,battler,evYield| evYield[:HP] += (Settings::MORE_EVS_FROM_POWER_ITEMS) ? 8 : 4 } ) #=============================================================================== -# WeatherExtenderItem handlers +# WeatherExtender handlers #=============================================================================== -BattleHandlers::WeatherExtenderItem.add(:DAMPROCK, +Battle::ItemEffects::WeatherExtender.add(:DAMPROCK, proc { |item,weather,duration,battler,battle| next 8 if weather == :Rain } ) -BattleHandlers::WeatherExtenderItem.add(:HEATROCK, +Battle::ItemEffects::WeatherExtender.add(:HEATROCK, proc { |item,weather,duration,battler,battle| next 8 if weather == :Sun } ) -BattleHandlers::WeatherExtenderItem.add(:ICYROCK, +Battle::ItemEffects::WeatherExtender.add(:ICYROCK, proc { |item,weather,duration,battler,battle| next 8 if weather == :Hail } ) -BattleHandlers::WeatherExtenderItem.add(:SMOOTHROCK, +Battle::ItemEffects::WeatherExtender.add(:SMOOTHROCK, proc { |item,weather,duration,battler,battle| next 8 if weather == :Sandstorm } ) #=============================================================================== -# TerrainExtenderItem handlers +# TerrainExtender handlers #=============================================================================== -BattleHandlers::TerrainExtenderItem.add(:TERRAINEXTENDER, +Battle::ItemEffects::TerrainExtender.add(:TERRAINEXTENDER, proc { |item,terrain,duration,battler,battle| next 8 } ) #=============================================================================== -# TerrainStatBoostItem handlers +# TerrainStatBoost handlers #=============================================================================== -BattleHandlers::TerrainStatBoostItem.add(:ELECTRICSEED, +Battle::ItemEffects::TerrainStatBoost.add(:ELECTRICSEED, proc { |item,battler,battle| next false if battle.field.terrain != :Electric next false if !battler.pbCanRaiseStatStage?(:DEFENSE,battler) @@ -1589,7 +1805,7 @@ BattleHandlers::TerrainStatBoostItem.add(:ELECTRICSEED, } ) -BattleHandlers::TerrainStatBoostItem.add(:GRASSYSEED, +Battle::ItemEffects::TerrainStatBoost.add(:GRASSYSEED, proc { |item,battler,battle| next false if battle.field.terrain != :Grassy next false if !battler.pbCanRaiseStatStage?(:DEFENSE,battler) @@ -1599,7 +1815,7 @@ BattleHandlers::TerrainStatBoostItem.add(:GRASSYSEED, } ) -BattleHandlers::TerrainStatBoostItem.add(:MISTYSEED, +Battle::ItemEffects::TerrainStatBoost.add(:MISTYSEED, proc { |item,battler,battle| next false if battle.field.terrain != :Misty next false if !battler.pbCanRaiseStatStage?(:SPECIAL_DEFENSE,battler) @@ -1609,7 +1825,7 @@ BattleHandlers::TerrainStatBoostItem.add(:MISTYSEED, } ) -BattleHandlers::TerrainStatBoostItem.add(:PSYCHICSEED, +Battle::ItemEffects::TerrainStatBoost.add(:PSYCHICSEED, proc { |item,battler,battle| next false if battle.field.terrain != :Psychic next false if !battler.pbCanRaiseStatStage?(:SPECIAL_DEFENSE,battler) @@ -1620,10 +1836,10 @@ BattleHandlers::TerrainStatBoostItem.add(:PSYCHICSEED, ) #=============================================================================== -# EORHealingItem handlers +# EndOfRoundHealing handlers #=============================================================================== -BattleHandlers::EORHealingItem.add(:BLACKSLUDGE, +Battle::ItemEffects::EndOfRoundHealing.add(:BLACKSLUDGE, proc { |item,battler,battle| if battler.pbHasType?(:POISON) next if !battler.canHeal? @@ -1640,7 +1856,7 @@ BattleHandlers::EORHealingItem.add(:BLACKSLUDGE, } ) -BattleHandlers::EORHealingItem.add(:LEFTOVERS, +Battle::ItemEffects::EndOfRoundHealing.add(:LEFTOVERS, proc { |item,battler,battle| next if !battler.canHeal? battle.pbCommonAnimation("UseItem",battler) @@ -1651,17 +1867,17 @@ BattleHandlers::EORHealingItem.add(:LEFTOVERS, ) #=============================================================================== -# EOREffectItem handlers +# EndOfRoundEffect handlers #=============================================================================== -BattleHandlers::EOREffectItem.add(:FLAMEORB, +Battle::ItemEffects::EndOfRoundEffect.add(:FLAMEORB, proc { |item,battler,battle| next if !battler.pbCanBurn?(nil,false) battler.pbBurn(nil,_INTL("{1} was burned by the {2}!",battler.pbThis,battler.itemName)) } ) -BattleHandlers::EOREffectItem.add(:STICKYBARB, +Battle::ItemEffects::EndOfRoundEffect.add(:STICKYBARB, proc { |item,battler,battle| next if !battler.takesIndirectDamage? oldHP = battler.hp @@ -1672,7 +1888,7 @@ BattleHandlers::EOREffectItem.add(:STICKYBARB, } ) -BattleHandlers::EOREffectItem.add(:TOXICORB, +Battle::ItemEffects::EndOfRoundEffect.add(:TOXICORB, proc { |item,battler,battle| next if !battler.pbCanPoison?(nil,false) battler.pbPoison(nil,_INTL("{1} was badly poisoned by the {2}!", @@ -1681,33 +1897,33 @@ BattleHandlers::EOREffectItem.add(:TOXICORB, ) #=============================================================================== -# CertainSwitchingUserItem handlers +# CertainSwitching handlers #=============================================================================== -BattleHandlers::CertainSwitchingUserItem.add(:SHEDSHELL, +Battle::ItemEffects::CertainSwitching.add(:SHEDSHELL, proc { |item,battler,battle| next true } ) #=============================================================================== -# TrappingTargetItem handlers +# TrappingByTarget handlers #=============================================================================== # There aren't any! #=============================================================================== -# ItemOnSwitchIn handlers +# OnSwitchIn handlers #=============================================================================== -BattleHandlers::ItemOnSwitchIn.add(:AIRBALLOON, +Battle::ItemEffects::OnSwitchIn.add(:AIRBALLOON, proc { |item,battler,battle| battle.pbDisplay(_INTL("{1} floats in the air with its {2}!", battler.pbThis,battler.itemName)) } ) -BattleHandlers::ItemOnSwitchIn.add(:ROOMSERVICE, +Battle::ItemEffects::OnSwitchIn.add(:ROOMSERVICE, proc { |item, battler, battle| next if battle.field.effects[PBEffects::TrickRoom] == 0 next if !battler.pbCanLowerStatStage?(:SPEED) @@ -1718,10 +1934,10 @@ BattleHandlers::ItemOnSwitchIn.add(:ROOMSERVICE, ) #=============================================================================== -# ItemOnIntimidated handlers +# OnIntimidated handlers #=============================================================================== -BattleHandlers::ItemOnIntimidated.add(:ADRENALINEORB, +Battle::ItemEffects::OnIntimidated.add(:ADRENALINEORB, proc { |item,battler,battle| next false if !battler.pbCanRaiseStatStage?(:SPEED,battler) itemName = GameData::Item.get(item).name @@ -1731,10 +1947,10 @@ BattleHandlers::ItemOnIntimidated.add(:ADRENALINEORB, ) #=============================================================================== -# RunFromBattleItem handlers +# CertainEscapeFromBattle handlers #=============================================================================== -BattleHandlers::RunFromBattleItem.add(:SMOKEBALL, +Battle::ItemEffects::CertainEscapeFromBattle.add(:SMOKEBALL, proc { |item,battler| next true } diff --git a/Data/Scripts/011_Battle/006_Other battle code/010_BallHandlers_PokeBallEffects.rb b/Data/Scripts/011_Battle/006_Other battle code/010_Battle_PokeBallEffects.rb similarity index 51% rename from Data/Scripts/011_Battle/006_Other battle code/010_BallHandlers_PokeBallEffects.rb rename to Data/Scripts/011_Battle/006_Other battle code/010_Battle_PokeBallEffects.rb index ff1b50e3f..2d4a5aff5 100644 --- a/Data/Scripts/011_Battle/006_Other battle code/010_BallHandlers_PokeBallEffects.rb +++ b/Data/Scripts/011_Battle/006_Other battle code/010_Battle_PokeBallEffects.rb @@ -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 }) diff --git a/Data/Scripts/011_Battle/007_Other battle types/001_SafariBattle.rb b/Data/Scripts/011_Battle/007_Other battle types/001_SafariBattle.rb index 8c3b7eca6..642c18275 100644 --- a/Data/Scripts/011_Battle/007_Other battle types/001_SafariBattle.rb +++ b/Data/Scripts/011_Battle/007_Other battle types/001_SafariBattle.rb @@ -304,7 +304,7 @@ class SafariBattle attr_accessor :rules attr_accessor :ballCount - include Battle::Common + include Battle::CatchAndStoreMixin def pbRandom(x); return rand(x); end diff --git a/PBS/Gen 7/pokemon.txt b/PBS/Gen 7/pokemon.txt index 5456887cd..e2608f5c9 100644 --- a/PBS/Gen 7/pokemon.txt +++ b/PBS/Gen 7/pokemon.txt @@ -20784,6 +20784,7 @@ Shape = Multiped Category = Parasite Pokedex = One of several mysterious Ultra Beasts. People on the street report observing those infested by it suddenly becoming violent. Generation = 7 +Flags = UltraBeast #------------------------------- [BUZZWOLE] Name = Buzzwole @@ -20808,6 +20809,7 @@ Shape = Multiped Category = Swollen Pokedex = This Ultra Beast appeared from another world. It shows off its body, but whether that display is a boast or a threat remains unclear. Generation = 7 +Flags = UltraBeast #------------------------------- [PHEROMOSA] Name = Pheromosa @@ -20832,6 +20834,7 @@ Shape = Bipedal Category = Lissome Pokedex = One of the Ultra Beasts. It refuses to touch anything, perhaps because it senses some uncleanness in this world. Generation = 7 +Flags = UltraBeast #------------------------------- [XURKITREE] Name = Xurkitree @@ -20855,6 +20858,7 @@ Shape = BipedalTail Category = Glowing Pokedex = One of the mysterious life-forms known as Ultra Beasts. Astonishing electric shocks emanate from its entire body, according to witnesses. Generation = 7 +Flags = UltraBeast #------------------------------- [CELESTEELA] Name = Celesteela @@ -20879,6 +20883,7 @@ Shape = Bipedal Category = Launch Pokedex = One kind of Ultra Beast. Witnesses have seen it burn down a forest by expelling gas from its two arms. Generation = 7 +Flags = UltraBeast #------------------------------- [KARTANA] Name = Kartana @@ -20903,6 +20908,7 @@ Shape = Bipedal Category = Drawn Sword Pokedex = One of the Ultra Beast life-forms, it was observed cutting down a gigantic steel tower with one stroke of its blade. Generation = 7 +Flags = UltraBeast #------------------------------- [GUZZLORD] Name = Guzzlord @@ -20927,6 +20933,7 @@ Shape = BipedalTail Category = Junkivore Pokedex = A dangerous Ultra Beast, it appears to be eating constantly, but for some reason its droppings have never been found. Generation = 7 +Flags = UltraBeast #------------------------------- [NECROZMA] Name = Necrozma @@ -21021,6 +21028,7 @@ Shape = BipedalTail Category = Poison Pin Pokedex = An Ultra Beast that lives in a different world, it cackles wildly as it sprays its opponents with poison from the needles on its head. Generation = 7 +Flags = UltraBeast Evolutions = NAGANADEL,HasMove,DRAGONPULSE #------------------------------- [NAGANADEL] @@ -21046,6 +21054,7 @@ Shape = Winged Category = Poison Pin Pokedex = One kind of Ultra Beast, it fires a glowing, venomous liquid from its needles. This liquid is also immensely adhesive. Generation = 7 +Flags = UltraBeast #------------------------------- [STAKATAKA] Name = Stakataka @@ -21070,6 +21079,7 @@ Shape = Quadruped Category = Rampart Pokedex = When stone walls started moving and attacking, the brute's true identity was this mysterious life-form, which brings to mind an Ultra Beast. Generation = 7 +Flags = UltraBeast #------------------------------- [BLACEPHALON] Name = Blacephalon @@ -21094,6 +21104,7 @@ Shape = Bipedal Category = Fireworks Pokedex = It slithers toward people. Then, without warning, it triggers the explosion of its own head. It's apparently one kind of Ultra Beast. Generation = 7 +Flags = UltraBeast #------------------------------- [ZERAORA] Name = Zeraora diff --git a/PBS/Gen 8/pokemon.txt b/PBS/Gen 8/pokemon.txt index d0da366c6..57dc31990 100644 --- a/PBS/Gen 8/pokemon.txt +++ b/PBS/Gen 8/pokemon.txt @@ -20787,6 +20787,7 @@ Shape = Multiped Category = Parasite Pokedex = One of several mysterious Ultra Beasts. People on the street report observing those infested by it suddenly becoming violent. Generation = 7 +Flags = UltraBeast #------------------------------- [BUZZWOLE] Name = Buzzwole @@ -20811,6 +20812,7 @@ Shape = Multiped Category = Swollen Pokedex = This Ultra Beast appeared from another world. It shows off its body, but whether that display is a boast or a threat remains unclear. Generation = 7 +Flags = UltraBeast #------------------------------- [PHEROMOSA] Name = Pheromosa @@ -20835,6 +20837,7 @@ Shape = Bipedal Category = Lissome Pokedex = One of the Ultra Beasts. It refuses to touch anything, perhaps because it senses some uncleanness in this world. Generation = 7 +Flags = UltraBeast #------------------------------- [XURKITREE] Name = Xurkitree @@ -20858,6 +20861,7 @@ Shape = BipedalTail Category = Glowing Pokedex = One of the mysterious life-forms known as Ultra Beasts. Astonishing electric shocks emanate from its entire body, according to witnesses. Generation = 7 +Flags = UltraBeast #------------------------------- [CELESTEELA] Name = Celesteela @@ -20882,6 +20886,7 @@ Shape = Bipedal Category = Launch Pokedex = One kind of Ultra Beast. Witnesses have seen it burn down a forest by expelling gas from its two arms. Generation = 7 +Flags = UltraBeast #------------------------------- [KARTANA] Name = Kartana @@ -20906,6 +20911,7 @@ Shape = Bipedal Category = Drawn Sword Pokedex = One of the Ultra Beast life-forms, it was observed cutting down a gigantic steel tower with one stroke of its blade. Generation = 7 +Flags = UltraBeast #------------------------------- [GUZZLORD] Name = Guzzlord @@ -20930,6 +20936,7 @@ Shape = BipedalTail Category = Junkivore Pokedex = A dangerous Ultra Beast, it appears to be eating constantly, but for some reason its droppings have never been found. Generation = 7 +Flags = UltraBeast #------------------------------- [NECROZMA] Name = Necrozma @@ -21024,6 +21031,7 @@ Shape = BipedalTail Category = Poison Pin Pokedex = An Ultra Beast that lives in a different world, it cackles wildly as it sprays its opponents with poison from the needles on its head. Generation = 7 +Flags = UltraBeast Evolutions = NAGANADEL,HasMove,DRAGONPULSE #------------------------------- [NAGANADEL] @@ -21049,6 +21057,7 @@ Shape = Winged Category = Poison Pin Pokedex = One kind of Ultra Beast, it fires a glowing, venomous liquid from its needles. This liquid is also immensely adhesive. Generation = 7 +Flags = UltraBeast #------------------------------- [STAKATAKA] Name = Stakataka @@ -21073,6 +21082,7 @@ Shape = Quadruped Category = Rampart Pokedex = When stone walls started moving and attacking, the brute's true identity was this mysterious life-form, which brings to mind an Ultra Beast. Generation = 7 +Flags = UltraBeast #------------------------------- [BLACEPHALON] Name = Blacephalon @@ -21097,6 +21107,7 @@ Shape = Bipedal Category = Fireworks Pokedex = It slithers toward people. Then, without warning, it triggers the explosion of its own head. It's apparently one kind of Ultra Beast. Generation = 7 +Flags = UltraBeast #------------------------------- [ZERAORA] Name = Zeraora diff --git a/PBS/pokemon.txt b/PBS/pokemon.txt index d0da366c6..57dc31990 100644 --- a/PBS/pokemon.txt +++ b/PBS/pokemon.txt @@ -20787,6 +20787,7 @@ Shape = Multiped Category = Parasite Pokedex = One of several mysterious Ultra Beasts. People on the street report observing those infested by it suddenly becoming violent. Generation = 7 +Flags = UltraBeast #------------------------------- [BUZZWOLE] Name = Buzzwole @@ -20811,6 +20812,7 @@ Shape = Multiped Category = Swollen Pokedex = This Ultra Beast appeared from another world. It shows off its body, but whether that display is a boast or a threat remains unclear. Generation = 7 +Flags = UltraBeast #------------------------------- [PHEROMOSA] Name = Pheromosa @@ -20835,6 +20837,7 @@ Shape = Bipedal Category = Lissome Pokedex = One of the Ultra Beasts. It refuses to touch anything, perhaps because it senses some uncleanness in this world. Generation = 7 +Flags = UltraBeast #------------------------------- [XURKITREE] Name = Xurkitree @@ -20858,6 +20861,7 @@ Shape = BipedalTail Category = Glowing Pokedex = One of the mysterious life-forms known as Ultra Beasts. Astonishing electric shocks emanate from its entire body, according to witnesses. Generation = 7 +Flags = UltraBeast #------------------------------- [CELESTEELA] Name = Celesteela @@ -20882,6 +20886,7 @@ Shape = Bipedal Category = Launch Pokedex = One kind of Ultra Beast. Witnesses have seen it burn down a forest by expelling gas from its two arms. Generation = 7 +Flags = UltraBeast #------------------------------- [KARTANA] Name = Kartana @@ -20906,6 +20911,7 @@ Shape = Bipedal Category = Drawn Sword Pokedex = One of the Ultra Beast life-forms, it was observed cutting down a gigantic steel tower with one stroke of its blade. Generation = 7 +Flags = UltraBeast #------------------------------- [GUZZLORD] Name = Guzzlord @@ -20930,6 +20936,7 @@ Shape = BipedalTail Category = Junkivore Pokedex = A dangerous Ultra Beast, it appears to be eating constantly, but for some reason its droppings have never been found. Generation = 7 +Flags = UltraBeast #------------------------------- [NECROZMA] Name = Necrozma @@ -21024,6 +21031,7 @@ Shape = BipedalTail Category = Poison Pin Pokedex = An Ultra Beast that lives in a different world, it cackles wildly as it sprays its opponents with poison from the needles on its head. Generation = 7 +Flags = UltraBeast Evolutions = NAGANADEL,HasMove,DRAGONPULSE #------------------------------- [NAGANADEL] @@ -21049,6 +21057,7 @@ Shape = Winged Category = Poison Pin Pokedex = One kind of Ultra Beast, it fires a glowing, venomous liquid from its needles. This liquid is also immensely adhesive. Generation = 7 +Flags = UltraBeast #------------------------------- [STAKATAKA] Name = Stakataka @@ -21073,6 +21082,7 @@ Shape = Quadruped Category = Rampart Pokedex = When stone walls started moving and attacking, the brute's true identity was this mysterious life-form, which brings to mind an Ultra Beast. Generation = 7 +Flags = UltraBeast #------------------------------- [BLACEPHALON] Name = Blacephalon @@ -21097,6 +21107,7 @@ Shape = Bipedal Category = Fireworks Pokedex = It slithers toward people. Then, without warning, it triggers the explosion of its own head. It's apparently one kind of Ultra Beast. Generation = 7 +Flags = UltraBeast #------------------------------- [ZERAORA] Name = Zeraora