Grouped all ability blacklists together

This commit is contained in:
Maruno17
2020-09-12 22:00:25 +01:00
parent 0fc544adb8
commit d4db99719b
6 changed files with 85 additions and 348 deletions

View File

@@ -338,25 +338,54 @@ class PokeBattle_Battler
end
alias hasWorkingAbility hasActiveAbility?
def nonNegatableAbility?
# Applies to both losing self's ability (i.e. being replaced by another) and
# having self's ability be negated.
def unstoppableAbility?
abilityBlacklist = [
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
# :FLOWERGIFT, # This can be negated
# :FORECAST, # This can be negated
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
# :FLOWERGIFT, # This can be stopped
# :FORECAST, # This can be stopped
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM
]
abilityBlacklist.each do |abil|
return true if isConst?(@ability,PBAbilities,abil)
abilityBlacklist.each do |a|
return true if isConst?(@ability, PBAbilities, a)
end
return false
end
# Applies to gaining the ability.
def ungainableAbility?(abil)
abilityBlacklist = [
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
:FLOWERGIFT,
:FORECAST,
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Appearance-changing abilities
:ILLUSION,
:IMPOSTER,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM
]
abilityBlacklist.each do |a|
return true if isConst?(abil, PBAbilities, a)
end
return false
end

View File

@@ -109,7 +109,7 @@ class PokeBattle_Battler
# These effects are passed on if Baton Pass is used, but they need to be
# cancelled in certain circumstances anyway
@effects[PBEffects::Telekinesis] = 0 if isSpecies?(:GENGAR) && mega?
@effects[PBEffects::GastroAcid] = false if nonNegatableAbility?
@effects[PBEffects::GastroAcid] = false if unstoppableAbility?
else
# These effects are passed on if Baton Pass is used
@stages[PBStats::ATTACK] = 0

View File

@@ -10,7 +10,7 @@ class PokeBattle_Battler
# Ending primordial weather, checking Trace
pbContinualAbilityChecks(true)
# Abilities that trigger upon switching in
if (!fainted? && nonNegatableAbility?) || abilityActive?
if (!fainted? && unstoppableAbility?) || abilityActive?
BattleHandlers.triggerAbilityOnSwitchIn(@ability,self,@battle)
end
# Check for end of primordial weather
@@ -72,36 +72,13 @@ class PokeBattle_Battler
# in and not at any later times, even if a traceable ability turns
# up later. Essentials ignores this, and allows Trace to trigger
# whenever it can even in the old battle mechanics.
abilityBlacklist = [
# Replaces self with another ability
:POWEROFALCHEMY,
:RECEIVER,
:TRACE,
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
:FLOWERGIFT,
:FORECAST,
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Appearance-changing abilities
:ILLUSION,
:IMPOSTER,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM
]
choices = []
@battle.eachOtherSideBattler(@index) do |b|
abilityBlacklist.each do |abil|
next if !isConst?(b.ability,PBAbilities,abil)
choices.push(b)
break
end
next if b.ungainableAbility? ||
isConst?(b.ability, PBAbilities, :POWEROFALCHEMY) ||
isConst?(b.ability, PBAbilities, :RECEIVER) ||
isConst?(b.ability, PBAbilities, :TRACE)
choices.push(b)
end
if choices.length>0
choice = choices[@battle.pbRandom(choices.length)]
@@ -109,7 +86,7 @@ class PokeBattle_Battler
@ability = choice.ability
@battle.pbDisplay(_INTL("{1} traced {2}'s {3}!",pbThis,choice.pbThis(true),choice.abilityName))
@battle.pbHideAbilitySplash(self)
if !onSwitchIn && (nonNegatableAbility? || abilityActive?)
if !onSwitchIn && (unstoppableAbility? || abilityActive?)
BattleHandlers.triggerAbilityOnSwitchIn(@ability,self,@battle)
end
end
@@ -138,7 +115,7 @@ class PokeBattle_Battler
@battle.pbSetSeen(self)
end
end
@effects[PBEffects::GastroAcid] = false if nonNegatableAbility?
@effects[PBEffects::GastroAcid] = false if unstoppableAbility?
@effects[PBEffects::SlowStart] = 0 if !isConst?(@ability,PBAbilities,:SLOWSTART)
# Revert form if Flower Gift/Forecast was lost
pbCheckFormOnWeatherChange

View File

@@ -1996,29 +1996,6 @@ end
# Target's ability becomes Simple. (Simple Beam)
#===============================================================================
class PokeBattle_Move_063 < PokeBattle_Move
def initialize(battle,move)
super
@abilityBlacklist = [
:TRUANT,
# This ability
:SIMPLE,
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
# :FLOWERGIFT, # This can be replaced
# :FORECAST, # This can be replaced
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM
]
end
def pbMoveFailed?(user,targets)
if !hasConst?(PBAbilities,:SIMPLE) # Ability isn't defined
@battle.pbDisplay(_INTL("But it failed!"))
@@ -2028,8 +2005,9 @@ class PokeBattle_Move_063 < PokeBattle_Move
end
def pbFailsAgainstTarget?(user,target)
@abilityBlacklist.each do |abil|
next if !isConst?(target.ability,PBAbilities,abil)
if target.unstoppableAbility? ||
isConst?(target.ability, PBAbilities, :TRUANT) || # For some reason
isConst?(target.ability, PBAbilities, :SIMPLE)
@battle.pbDisplay(_INTL("But it failed!"))
return true
end
@@ -2053,29 +2031,6 @@ end
# Target's ability becomes Insomnia. (Worry Seed)
#===============================================================================
class PokeBattle_Move_064 < PokeBattle_Move
def initialize(battle,move)
super
@abilityBlacklist = [
:TRUANT,
# This ability
:INSOMNIA,
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
# :FLOWERGIFT, # This can be replaced
# :FORECAST, # This can be replaced
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM
]
end
def pbMoveFailed?(user,targets)
if !hasConst?(PBAbilities,:INSOMNIA) # Ability isn't defined
@battle.pbDisplay(_INTL("But it failed!"))
@@ -2085,8 +2040,9 @@ class PokeBattle_Move_064 < PokeBattle_Move
end
def pbFailsAgainstTarget?(user,target)
@abilityBlacklist.each do |abil|
next if !isConst?(target.ability,PBAbilities,abil)
if target.unstoppableAbility? ||
isConst?(target.ability, PBAbilities, :TRUANT) || # For some reason
isConst?(target.ability, PBAbilities, :INSOMNIA)
@battle.pbDisplay(_INTL("But it failed!"))
return true
end
@@ -2112,54 +2068,8 @@ end
class PokeBattle_Move_065 < PokeBattle_Move
def ignoresSubstitute?(user); return true; end
def initialize(battle,move)
super
@abilityBlacklistUnlosable = [
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
# :FLOWERGIFT, # This can be lost
# :FORECAST, # This can be lost
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM
]
@abilityBlacklistUngainable = [
# Replaces self with another ability
:POWEROFALCHEMY,
:RECEIVER,
:TRACE,
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
:FLOWERGIFT,
:FORECAST,
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Appearance-changing abilities
:ILLUSION,
:IMPOSTER,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM,
# Abilities that would be overpowered if allowed to be transferred
:WONDERGUARD
]
end
def pbMoveFailed?(user,targets)
@abilityBlacklistUnlosable.each do |abil|
next if !isConst?(user.ability,PBAbilities,abil)
if user.unstoppableAbility?
@battle.pbDisplay(_INTL("But it failed!"))
return true
end
@@ -2171,8 +2081,11 @@ class PokeBattle_Move_065 < PokeBattle_Move
@battle.pbDisplay(_INTL("But it failed!"))
return true
end
@abilityBlacklistUngainable.each do |abil|
next if !isConst?(target.ability,PBAbilities,abil)
if target.ungainableAbility? ||
isConst?(target.ability, PBAbilities, :POWEROFALCHEMY) ||
isConst?(target.ability, PBAbilities, :RECEIVER) ||
isConst?(target.ability, PBAbilities, :TRACE) ||
isConst?(target.ability, PBAbilities, :WONDERGUARD)
@battle.pbDisplay(_INTL("But it failed!"))
return true
end
@@ -2198,57 +2111,15 @@ end
# Target copies user's ability. (Entrainment)
#===============================================================================
class PokeBattle_Move_066 < PokeBattle_Move
def initialize(battle,move)
super
@abilityBlacklistUnlosable = [
:TRUANT,
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
# :FLOWERGIFT, # This can be lost
# :FORECAST, # This can be lost
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM
]
@abilityBlacklistUngainable = [
# Replaces self with another ability
:POWEROFALCHEMY,
:RECEIVER,
:TRACE,
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
:FLOWERGIFT,
:FORECAST,
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Appearance-changing abilities
:ILLUSION,
:IMPOSTER,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM
]
end
def pbMoveFailed?(user,targets)
if user.ability==0
@battle.pbDisplay(_INTL("But it failed!"))
return true
end
@abilityBlacklistUngainable.each do |abil|
next if !isConst?(user.ability,PBAbilities,abil)
if user.ungainableAbility? ||
isConst?(user.ability, PBAbilities, :POWEROFALCHEMY) ||
isConst?(user.ability, PBAbilities, :RECEIVER) ||
isConst?(user.ability, PBAbilities, :TRACE)
@battle.pbDisplay(_INTL("But it failed!"))
return true
end
@@ -2256,8 +2127,7 @@ class PokeBattle_Move_066 < PokeBattle_Move
end
def pbFailsAgainstTarget?(user,target)
@abilityBlacklistUnlosable.each do |abil|
next if !isConst?(target.ability,PBAbilities,abil)
if target.unstoppableAbility? || isConst?(target.ability, PBAbilities, :TRUANT)
@battle.pbDisplay(_INTL("But it failed!"))
return true
end
@@ -2284,59 +2154,16 @@ end
class PokeBattle_Move_067 < PokeBattle_Move
def ignoresSubstitute?(user); return true; end
def initialize(battle,move)
super
@abilityBlacklistUnlosable = [
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
# :FLOWERGIFT, # This can be lost
# :FORECAST, # This can be lost
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM
]
@abilityBlacklistUngainable = [
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
:FLOWERGIFT,
:FORECAST,
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Appearance-changing abilities
:ILLUSION,
:IMPOSTER,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM,
# Abilities that would be overpowered if allowed to be transferred
:WONDERGUARD
]
end
def pbMoveFailed?(user,targets)
if user.ability==0
@battle.pbDisplay(_INTL("But it failed!"))
return true
end
@abilityBlacklistUnlosable.each do |abil|
next if !isConst?(user.ability,PBAbilities,abil)
if user.unstoppableAbility?
@battle.pbDisplay(_INTL("But it failed!"))
return true
end
@abilityBlacklistUngainable.each do |abil|
next if !isConst?(user.ability,PBAbilities,abil)
if user.ungainableAbility? || isConst?(user.ability, PBAbilities, :WONDERGUARD)
@battle.pbDisplay(_INTL("But it failed!"))
return true
end
@@ -2349,13 +2176,11 @@ class PokeBattle_Move_067 < PokeBattle_Move
@battle.pbDisplay(_INTL("But it failed!"))
return true
end
@abilityBlacklistUnlosable.each do |abil|
next if !isConst?(target.ability,PBAbilities,abil)
if target.unstoppableAbility?
@battle.pbDisplay(_INTL("But it failed!"))
return true
end
@abilityBlacklistUngainable.each do |abil|
next if !isConst?(target.ability,PBAbilities,abil)
if target.ungainableAbility? || isConst?(target.ability, PBAbilities, :WONDERGUARD)
@battle.pbDisplay(_INTL("But it failed!"))
return true
end
@@ -2398,29 +2223,8 @@ end
# Target's ability is negated. (Gastro Acid)
#===============================================================================
class PokeBattle_Move_068 < PokeBattle_Move
def initialize(battle,move)
super
@abilityBlacklist = [
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
# :FLOWERGIFT, # This can be negated
# :FORECAST, # This can be negated
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM
]
end
def pbFailsAgainstTarget?(user,target)
@abilityBlacklist.each do |abil|
next if !isConst?(target.ability,PBAbilities,abil)
if target.unstoppableAbility?
@battle.pbDisplay(_INTL("But it failed!"))
return true
end

View File

@@ -2178,31 +2178,9 @@ end
# performed its action this round. (Core Enforcer)
#===============================================================================
class PokeBattle_Move_165 < PokeBattle_Move
def initialize(battle,move)
super
@abilityBlacklist = [
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
# :FLOWERGIFT, # This can be negated
# :FORECAST, # This can be negated
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM
]
end
def pbEffectAgainstTarget(user,target)
return if target.damageState.substitute || target.effects[PBEffects::GastroAcid]
@abilityBlacklist.each do |abil|
return if isConst?(target.ability,PBAbilities,abil)
end
return if target.unstoppableAbility?
return if @battle.choices[target.index][0]!=:UseItem &&
!((@battle.choices[target.index][0]==:UseMove ||
@battle.choices[target.index][0]==:Shift) && target.movedThisRound?)

View File

@@ -1532,37 +1532,13 @@ BattleHandlers::TargetAbilityOnHit.add(:MUMMY,
proc { |ability,user,target,move,battle|
next if !move.pbContactMove?(user)
next if user.fainted?
abilityBlacklist = [
# This ability
:MUMMY,
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
# :FLOWERGIFT, # This can be replaced
# :FORECAST, # This can be replaced
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM,
]
failed = false
abilityBlacklist.each do |abil|
next if !isConst?(user.ability,PBAbilities,abil)
failed = true
break
end
next if failed
next if user.unstoppableAbility? || user.ability == ability
oldAbil = -1
battle.pbShowAbilitySplash(target) if user.opposes?(target)
if user.affectedByContactEffect?(PokeBattle_SceneConstants::USE_ABILITY_SPLASH)
oldAbil = user.ability
battle.pbShowAbilitySplash(user,true,false) if user.opposes?(target)
user.ability = getConst(PBAbilities,:MUMMY)
user.ability = ability
battle.pbReplaceAbilitySplash(user) if user.opposes?(target)
if PokeBattle_SceneConstants::USE_ABILITY_SPLASH
battle.pbDisplay(_INTL("{1}'s Ability became {2}!",user.pbThis,user.abilityName))
@@ -2444,38 +2420,11 @@ BattleHandlers::AbilityOnSwitchOut.add(:REGENERATOR,
BattleHandlers::AbilityChangeOnBattlerFainting.add(:POWEROFALCHEMY,
proc { |ability,battler,fainted,battle|
next if battler.opposes?(fainted)
abilityBlacklist = [
# Replaces self with another ability
:POWEROFALCHEMY,
:RECEIVER,
:TRACE,
# Form-changing abilities
:BATTLEBOND,
:DISGUISE,
:FLOWERGIFT,
:FORECAST,
:MULTITYPE,
:POWERCONSTRUCT,
:SCHOOLING,
:SHIELDSDOWN,
:STANCECHANGE,
:ZENMODE,
# Appearance-changing abilities
:ILLUSION,
:IMPOSTER,
# Abilities intended to be inherent properties of a certain species
:COMATOSE,
:RKSSYSTEM,
# Abilities that would be overpowered if allowed to be transferred
:WONDERGUARD
]
failed = false
abilityBlacklist.each do |abil|
next if !isConst?(fainted.ability,PBAbilities,abil)
failed = true
break
end
next if failed
next if fainted.ungainableAbility? ||
isConst?(fainted.ability, PBAbilities, :POWEROFALCHEMY) ||
isConst?(fainted.ability, PBAbilities, :RECEIVER) ||
isConst?(fainted.ability, PBAbilities, :TRACE) ||
isConst?(fainted.ability, PBAbilities, :WONDERGUARD)
battle.pbShowAbilitySplash(battler,true)
battler.ability = fainted.ability
battle.pbReplaceAbilitySplash(battler)