mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-10 22:54:59 +00:00
Added Eject Pack's effect
This commit is contained in:
@@ -39,10 +39,11 @@ class PokeBattle_Battler
|
||||
attr_accessor :movesUsed
|
||||
attr_accessor :currentMove # ID of multi-turn move currently being used
|
||||
attr_accessor :droppedBelowHalfHP # Used for Emergency Exit/Wimp Out
|
||||
attr_accessor :statsDropped # Used for Eject Pack
|
||||
attr_accessor :tookDamageThisRound # Boolean for whether self took damage this round
|
||||
attr_accessor :tookPhysicalHit
|
||||
attr_accessor :statsRaised # Boolean for whether self's stat(s) raised this round
|
||||
attr_accessor :statsLowered # Boolean for whether self's stat(s) lowered this round
|
||||
attr_accessor :statsRaisedThisRound # Boolean for whether self's stat(s) raised this round
|
||||
attr_accessor :statsLoweredThisRound # Boolean for whether self's stat(s) lowered this round
|
||||
attr_accessor :canRestoreIceFace # Whether Hail started in the round
|
||||
attr_accessor :damageState
|
||||
|
||||
|
||||
@@ -148,10 +148,11 @@ class PokeBattle_Battler
|
||||
@lastHPLost = 0
|
||||
@lastHPLostFromFoe = 0
|
||||
@droppedBelowHalfHP = false
|
||||
@statsDropped = false
|
||||
@tookDamageThisRound = false
|
||||
@tookPhysicalHit = false
|
||||
@statsRaised = false
|
||||
@statsLowered = false
|
||||
@statsRaisedThisRound = false
|
||||
@statsLoweredThisRound = false
|
||||
@canRestoreIceFace = false
|
||||
@lastMoveUsed = nil
|
||||
@lastMoveUsedType = nil
|
||||
|
||||
@@ -51,11 +51,13 @@ class PokeBattle_Battler
|
||||
end
|
||||
|
||||
def pbTakeEffectDamage(amt, show_anim = true)
|
||||
@droppedBelowHalfHP = false
|
||||
hp_lost = pbReduceHP(amt, show_anim)
|
||||
yield hp_lost if block_given? # Show message
|
||||
pbItemHPHealCheck
|
||||
pbAbilitiesOnDamageTaken
|
||||
pbFaint if fainted?
|
||||
@droppedBelowHalfHP = false
|
||||
end
|
||||
|
||||
def pbFaint(showMessage=true)
|
||||
|
||||
@@ -37,7 +37,7 @@ class PokeBattle_Battler
|
||||
new = @stages[stat]+increment
|
||||
PBDebug.log("[Stat change] #{pbThis}'s #{stat_name}: #{@stages[stat]} -> #{new} (+#{increment})")
|
||||
@stages[stat] += increment
|
||||
@statsRaised = true
|
||||
@statsRaisedThisRound = true
|
||||
end
|
||||
return increment
|
||||
end
|
||||
@@ -176,7 +176,8 @@ class PokeBattle_Battler
|
||||
new = @stages[stat]-increment
|
||||
PBDebug.log("[Stat change] #{pbThis}'s #{stat_name}: #{@stages[stat]} -> #{new} (-#{increment})")
|
||||
@stages[stat] -= increment
|
||||
@statsLowered = true
|
||||
@statsLoweredThisRound = true
|
||||
@statsDropped = true
|
||||
end
|
||||
return increment
|
||||
end
|
||||
@@ -360,9 +361,10 @@ class PokeBattle_Battler
|
||||
def pbResetStatStages
|
||||
GameData::Stat.each_battle do |s|
|
||||
if @stages[s.id] > 0
|
||||
@statsLowered = true
|
||||
@statsLoweredThisRound = true
|
||||
@statsDropped = true
|
||||
elsif @stages[s.id] < 0
|
||||
@statsRaised = true
|
||||
@statsRaisedThisRound = true
|
||||
end
|
||||
@stages[s.id] = 0
|
||||
end
|
||||
|
||||
@@ -292,4 +292,11 @@ class PokeBattle_Battler
|
||||
pbHeldItemTriggered(self.item)
|
||||
end
|
||||
end
|
||||
|
||||
# Used for Eject Pack. Returns whether self has switched out.
|
||||
def pbItemOnStatDropped(move_user = nil)
|
||||
return false if !@statsDropped
|
||||
return false if !itemActive?
|
||||
return BattleHandlers.triggerItemOnStatDropped(self.item, self, move_user, @battle)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -384,7 +384,10 @@ class PokeBattle_Battler
|
||||
user.lastMoveFailed = true
|
||||
else # We have targets, or move doesn't use targets
|
||||
# Reset whole damage state, perform various success checks (not accuracy)
|
||||
@battle.eachBattler { |b| b.droppedBelowHalfHP = false }
|
||||
@battle.eachBattler do |b|
|
||||
b.droppedBelowHalfHP = false
|
||||
b.statsDropped = false
|
||||
end
|
||||
targets.each do |b|
|
||||
b.damageState.reset
|
||||
next if pbSuccessCheckAgainstTarget(move, user, b, targets)
|
||||
@@ -496,7 +499,10 @@ class PokeBattle_Battler
|
||||
user.pbFaint if user.fainted?
|
||||
# External/general effects after all hits. Eject Button, Shell Bell, etc.
|
||||
pbEffectsAfterMove(user,targets,move,realNumHits)
|
||||
@battle.eachBattler { |b| b.droppedBelowHalfHP = false }
|
||||
@battle.eachBattler do |b|
|
||||
b.droppedBelowHalfHP = false
|
||||
b.statsDropped = false
|
||||
end
|
||||
end
|
||||
# End effect of Mold Breaker
|
||||
@battle.moldBreaker = false
|
||||
|
||||
@@ -138,12 +138,6 @@ class PokeBattle_Battler
|
||||
user.pbChangeForm((user.hp > user.totalhp / 2) ? 1 : 2, nil)
|
||||
end
|
||||
end
|
||||
# Consume user's Gem
|
||||
if user.effects[PBEffects::GemConsumed]
|
||||
# NOTE: The consume animation and message for Gems are shown immediately
|
||||
# after the move's animation, but the item is only consumed now.
|
||||
user.pbConsumeItem
|
||||
end
|
||||
# Room Service
|
||||
if move.function == "StartSlowerBattlersActFirst" && @battle.field.effects[PBEffects::TrickRoom] > 0
|
||||
@battle.battlers.each do |b|
|
||||
@@ -154,6 +148,12 @@ class PokeBattle_Battler
|
||||
b.pbConsumeItem
|
||||
end
|
||||
end
|
||||
# Consume user's Gem
|
||||
if user.effects[PBEffects::GemConsumed]
|
||||
# NOTE: The consume animation and message for Gems are shown immediately
|
||||
# after the move's animation, but the item is only consumed now.
|
||||
user.pbConsumeItem
|
||||
end
|
||||
switched_battlers = [] # Indices of battlers that were switched out somehow
|
||||
# Target switching caused by Roar, Whirlwind, Circle Throw, Dragon Tail
|
||||
move.pbSwitchOutTargetEffect(user, targets, numHits, switched_battlers)
|
||||
@@ -180,10 +180,17 @@ class PokeBattle_Battler
|
||||
def pbEffectsAfterMove2(user, targets, move, numHits, switched_battlers)
|
||||
# Target's held item (Eject Button, Red Card, Eject Pack)
|
||||
@battle.pbPriority(true).each do |b|
|
||||
next if !targets.any? { |targetB| targetB.index==b.index }
|
||||
next if b.damageState.unaffected || b.damageState.calcDamage == 0
|
||||
next if !b.itemActive?
|
||||
BattleHandlers.triggerTargetItemAfterMoveUse(b.item, b, user, move, switched_battlers, @battle)
|
||||
if targets.any? { |targetB| targetB.index==b.index }
|
||||
if !b.damageState.unaffected && b.damageState.calcDamage > 0 && b.itemActive?
|
||||
BattleHandlers.triggerTargetItemAfterMoveUse(b.item, b, user, move, switched_battlers, @battle)
|
||||
end
|
||||
end
|
||||
# Target's Eject Pack
|
||||
if switched_battlers.empty? && b.index != user.index
|
||||
if b.pbItemOnStatDropped(user)
|
||||
switched_battlers.push(b.index)
|
||||
end
|
||||
end
|
||||
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
|
||||
@@ -192,11 +199,11 @@ class PokeBattle_Battler
|
||||
# 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 }
|
||||
next if b.damageState.unaffected || switched_battlers.include?(b.index)
|
||||
next if !b.abilityActive?
|
||||
BattleHandlers.triggerTargetAbilityAfterMoveUse(b.ability, b, user, move, switched_battlers, @battle)
|
||||
if !b.damageState.unaffected && !switched_battlers.include?(b.index) && b.abilityActive?
|
||||
BattleHandlers.triggerTargetAbilityAfterMoveUse(b.ability, b, user, move, switched_battlers, @battle)
|
||||
end
|
||||
end
|
||||
# Emergency Exit, Wimp Out (including for Pokémon hurt by Flame Burst)
|
||||
# Target's Emergency Exit, Wimp Out (including for Pokémon hurt by Flame Burst)
|
||||
if switched_battlers.empty? && move.damagingMove? && b.index != user.index
|
||||
if b.pbAbilitiesOnDamageTaken(user)
|
||||
switched_battlers.push(b.index)
|
||||
@@ -207,8 +214,12 @@ class PokeBattle_Battler
|
||||
|
||||
# Everything in this method is negated by Sheer Force.
|
||||
def pbEffectsAfterMove3(user, targets, move, numHits, switched_battlers)
|
||||
# TODO: User's Eject Pack.
|
||||
|
||||
# User's held item that switches it out (Eject Pack)
|
||||
if switched_battlers.empty?
|
||||
if user.pbItemOnStatDropped(user)
|
||||
switched_battlers.push(user.index)
|
||||
end
|
||||
end
|
||||
# User's ability (Emergency Exit, Wimp Out)
|
||||
if switched_battlers.empty? && move.damagingMove?
|
||||
if user.pbAbilitiesOnDamageTaken(user)
|
||||
|
||||
Reference in New Issue
Block a user