mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
Enabled BallBurst common animations to be played during other battle animations
This commit is contained in:
@@ -125,7 +125,7 @@ class PictureEx
|
|||||||
when Proc
|
when Proc
|
||||||
cb.call(self)
|
cb.call(self)
|
||||||
when Array
|
when Array
|
||||||
cb[0].method(cb[1]).call(self)
|
cb[0].method(cb[1]).call(self, *cb[2])
|
||||||
when Method
|
when Method
|
||||||
cb.call(self)
|
cb.call(self)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ class Battle::Scene
|
|||||||
def pbRecall(idxBattler)
|
def pbRecall(idxBattler)
|
||||||
@briefMessage = false
|
@briefMessage = false
|
||||||
# Recall animation
|
# Recall animation
|
||||||
recallAnim = Animation::BattlerRecall.new(@sprites, @viewport, idxBattler)
|
recallAnim = Animation::BattlerRecall.new(@sprites, @viewport, @battle.battlers[idxBattler])
|
||||||
loop do
|
loop do
|
||||||
recallAnim&.update
|
recallAnim&.update
|
||||||
pbUpdate
|
pbUpdate
|
||||||
@@ -564,4 +564,18 @@ class Battle::Scene
|
|||||||
targetSprite.pbSetOrigin
|
targetSprite.pbSetOrigin
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Ball burst common animations should have a focus of "Target" and a priority
|
||||||
|
# of "Front".
|
||||||
|
def pbBallBurstCommonAnimation(_picture_ex, anim_name, battler, target_x, target_y)
|
||||||
|
return if nil_or_empty?(anim_name)
|
||||||
|
animations = pbLoadBattleAnimations
|
||||||
|
anim = animations&.get_from_name("Common:" + anim_name)
|
||||||
|
return if !anim
|
||||||
|
animPlayer = PBAnimationPlayerX.new(anim, battler, nil, self)
|
||||||
|
animPlayer.discard_user_and_target_sprites # Don't involve user/target in animation
|
||||||
|
animPlayer.set_target_origin(target_x, target_y)
|
||||||
|
animPlayer.start
|
||||||
|
@animations.push(animPlayer)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -85,6 +85,30 @@ module Battle::Scene::Animation::BallAnimationMixin
|
|||||||
return Color.new(255, 181, 247) # Poké Ball, Sport Ball, Apricorn Balls, others
|
return Color.new(255, 181, 247) # Poké Ball, Sport Ball, Apricorn Balls, others
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# There are three kinds of animations shown when a Poké Ball opens up: one for
|
||||||
|
# when attempting to capture a Pokémon, one when recalling a Pokémon, and one
|
||||||
|
# for all other cases (e.g. sending out). This is anim_type (one of :capture,
|
||||||
|
# :recall and :main). The recall animation is the same for all Poké Balls, and
|
||||||
|
# the other two animations are different for each Poké Ball.
|
||||||
|
def getBallBurstAnimationName(poke_ball, anim_type = :main)
|
||||||
|
animations = pbLoadBattleAnimations
|
||||||
|
if anim_type == :recall
|
||||||
|
anim_name = "BallBurstRecall"
|
||||||
|
return anim_name if animations&.get_from_name("Common:" + anim_name)
|
||||||
|
else
|
||||||
|
name = poke_ball.to_s
|
||||||
|
if anim_type == :capture
|
||||||
|
anim = animations&.get_from_name("Common:BallBurstCapture" + name)
|
||||||
|
return "BallBurstCapture" + name if anim
|
||||||
|
anim = animations&.get_from_name("Common:BallBurstCapture")
|
||||||
|
return "BallBurstCapture" if anim
|
||||||
|
end
|
||||||
|
anim = animations&.get_from_name("Common:BallBurst" + name)
|
||||||
|
return "BallBurst" + name if anim
|
||||||
|
end
|
||||||
|
return "BallBurst"
|
||||||
|
end
|
||||||
|
|
||||||
def addBallSprite(ballX, ballY, poke_ball)
|
def addBallSprite(ballX, ballY, poke_ball)
|
||||||
file_path = sprintf("Graphics/Battle animations/ball_%s", poke_ball)
|
file_path = sprintf("Graphics/Battle animations/ball_%s", poke_ball)
|
||||||
ball = addNewSprite(ballX, ballY, file_path, PictureOrigin::CENTER)
|
ball = addNewSprite(ballX, ballY, file_path, PictureOrigin::CENTER)
|
||||||
@@ -249,12 +273,16 @@ module Battle::Scene::Animation::BallAnimationMixin
|
|||||||
end
|
end
|
||||||
|
|
||||||
# The regular Poké Ball burst animation.
|
# The regular Poké Ball burst animation.
|
||||||
def ballBurst(delay, ballX, ballY, poke_ball)
|
def ballBurst(delay, ball, ballX, ballY, poke_ball)
|
||||||
|
ball.setDelta(delay, 0, 0, [@battler.battle.scene, :pbBallBurstCommonAnimation,
|
||||||
|
[getBallBurstAnimationName(poke_ball), @battler, ballX, ballY]])
|
||||||
end
|
end
|
||||||
|
|
||||||
# The Poké Ball burst animation used when absorbing a wild Pokémon during a
|
# The Poké Ball burst animation used when absorbing a wild Pokémon during a
|
||||||
# capture attempt.
|
# capture attempt.
|
||||||
def ballBurstCapture(delay, ballX, ballY, poke_ball)
|
def ballBurstCapture(delay, ball, ballX, ballY, poke_ball)
|
||||||
|
ball.setDelta(delay, 0, 0, [@battler.battle.scene, :pbBallBurstCommonAnimation,
|
||||||
|
[getBallBurstAnimationName(poke_ball, :capture), @battler, ballX, ballY]])
|
||||||
end
|
end
|
||||||
|
|
||||||
def ballCaptureSuccess(ball, delay, ballX, ballY)
|
def ballCaptureSuccess(ball, delay, ballX, ballY)
|
||||||
@@ -263,6 +291,8 @@ module Battle::Scene::Animation::BallAnimationMixin
|
|||||||
end
|
end
|
||||||
|
|
||||||
# The Poké Ball burst animation used when recalling a Pokémon.
|
# The Poké Ball burst animation used when recalling a Pokémon.
|
||||||
def ballBurstRecall(delay, ballX, ballY, poke_ball)
|
def ballBurstRecall(delay, ball, ballX, ballY, poke_ball)
|
||||||
|
ball.setDelta(delay, 0, 0, [@battler.battle.scene, :pbBallBurstCommonAnimation,
|
||||||
|
[getBallBurstAnimationName(poke_ball, :recall), @battler, ballX, ballY]])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -453,7 +453,7 @@ class Battle::Scene::Animation::PokeballPlayerSendOut < Battle::Scene::Animation
|
|||||||
delay = ball.totalDuration + 4
|
delay = ball.totalDuration + 4
|
||||||
delay += 10 * @idxOrder # Stagger appearances if multiple Pokémon are sent out at once
|
delay += 10 * @idxOrder # Stagger appearances if multiple Pokémon are sent out at once
|
||||||
ballOpenUp(ball, delay - 2, poke_ball)
|
ballOpenUp(ball, delay - 2, poke_ball)
|
||||||
ballBurst(delay, battlerStartX, battlerStartY - 18, poke_ball)
|
ballBurst(delay, ball, battlerStartX, battlerStartY - 18, poke_ball)
|
||||||
ball.moveOpacity(delay + 2, 2, 0)
|
ball.moveOpacity(delay + 2, 2, 0)
|
||||||
# Set up battler sprite
|
# Set up battler sprite
|
||||||
battler = addSprite(batSprite, PictureOrigin::BOTTOM)
|
battler = addSprite(batSprite, PictureOrigin::BOTTOM)
|
||||||
@@ -517,7 +517,7 @@ class Battle::Scene::Animation::PokeballTrainerSendOut < Battle::Scene::Animatio
|
|||||||
delay += 10 if @showingTrainer # Give time for trainer to slide off screen
|
delay += 10 if @showingTrainer # Give time for trainer to slide off screen
|
||||||
delay += 10 * @idxOrder # Stagger appearances if multiple Pokémon are sent out at once
|
delay += 10 * @idxOrder # Stagger appearances if multiple Pokémon are sent out at once
|
||||||
ballOpenUp(ball, delay - 2, poke_ball)
|
ballOpenUp(ball, delay - 2, poke_ball)
|
||||||
ballBurst(delay, battlerStartX, battlerStartY - 18, poke_ball)
|
ballBurst(delay, ball, battlerStartX, battlerStartY - 18, poke_ball)
|
||||||
ball.moveOpacity(delay + 2, 2, 0)
|
ball.moveOpacity(delay + 2, 2, 0)
|
||||||
# Set up battler sprite
|
# Set up battler sprite
|
||||||
battler = addSprite(batSprite, PictureOrigin::BOTTOM)
|
battler = addSprite(batSprite, PictureOrigin::BOTTOM)
|
||||||
@@ -552,8 +552,9 @@ end
|
|||||||
class Battle::Scene::Animation::BattlerRecall < Battle::Scene::Animation
|
class Battle::Scene::Animation::BattlerRecall < Battle::Scene::Animation
|
||||||
include Battle::Scene::Animation::BallAnimationMixin
|
include Battle::Scene::Animation::BallAnimationMixin
|
||||||
|
|
||||||
def initialize(sprites, viewport, idxBattler)
|
def initialize(sprites, viewport, battler)
|
||||||
@idxBattler = idxBattler
|
@battler = battler
|
||||||
|
@idxBattler = battler.index
|
||||||
super(sprites, viewport)
|
super(sprites, viewport)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -579,7 +580,7 @@ class Battle::Scene::Animation::BattlerRecall < Battle::Scene::Animation
|
|||||||
# Poké Ball animation
|
# Poké Ball animation
|
||||||
ballOpenUp(ball, 0, poke_ball)
|
ballOpenUp(ball, 0, poke_ball)
|
||||||
delay = ball.totalDuration
|
delay = ball.totalDuration
|
||||||
ballBurstRecall(delay, battlerEndX, battlerEndY, poke_ball)
|
ballBurstRecall(delay, ball, battlerEndX, battlerEndY, poke_ball)
|
||||||
ball.moveOpacity(10, 2, 0)
|
ball.moveOpacity(10, 2, 0)
|
||||||
# Battler animation
|
# Battler animation
|
||||||
battlerAbsorb(battler, delay, battlerEndX, battlerEndY, col)
|
battlerAbsorb(battler, delay, battlerEndX, battlerEndY, col)
|
||||||
@@ -741,7 +742,7 @@ class Battle::Scene::Animation::PokeballThrowCapture < Battle::Scene::Animation
|
|||||||
battler = addSprite(batSprite, PictureOrigin::BOTTOM)
|
battler = addSprite(batSprite, PictureOrigin::BOTTOM)
|
||||||
# Poké Ball absorbs battler
|
# Poké Ball absorbs battler
|
||||||
delay = ball.totalDuration
|
delay = ball.totalDuration
|
||||||
ballBurstCapture(delay, ballEndX, ballEndY, @poke_ball)
|
ballBurstCapture(delay, ball, ballEndX, ballEndY, @poke_ball)
|
||||||
delay = ball.totalDuration + 4
|
delay = ball.totalDuration + 4
|
||||||
# NOTE: The Pokémon does not change color while being absorbed into a Poké
|
# NOTE: The Pokémon does not change color while being absorbed into a Poké
|
||||||
# Ball during a capture attempt. This may be an oversight in HGSS.
|
# Ball during a capture attempt. This may be an oversight in HGSS.
|
||||||
@@ -808,7 +809,7 @@ class Battle::Scene::Animation::PokeballThrowCapture < Battle::Scene::Animation
|
|||||||
# Poké Ball opens
|
# Poké Ball opens
|
||||||
ball.setZ(delay, batSprite.z - 1)
|
ball.setZ(delay, batSprite.z - 1)
|
||||||
ballOpenUp(ball, delay, @poke_ball, false)
|
ballOpenUp(ball, delay, @poke_ball, false)
|
||||||
ballBurst(delay, ballEndX, ballGroundY, @poke_ball)
|
ballBurst(delay, ball, ballEndX, ballGroundY, @poke_ball)
|
||||||
ball.moveOpacity(delay + 2, 2, 0)
|
ball.moveOpacity(delay + 2, 2, 0)
|
||||||
# Battler emerges
|
# Battler emerges
|
||||||
col = getBattlerColorFromPokeBall(@poke_ball)
|
col = getBattlerColorFromPokeBall(@poke_ball)
|
||||||
|
|||||||
@@ -368,6 +368,11 @@ class PBAnimations < Array
|
|||||||
@array[i] = value
|
@array[i] = value
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_from_name(name)
|
||||||
|
@array.each { |i| return i if i&.name == name }
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
def compact
|
def compact
|
||||||
@array.compact!
|
@array.compact!
|
||||||
end
|
end
|
||||||
@@ -751,6 +756,17 @@ class PBAnimationPlayerX
|
|||||||
@foColor.dispose
|
@foColor.dispose
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Makes the original user and target sprites be uninvolved with the animation.
|
||||||
|
# The animation shows just its particles.
|
||||||
|
def discard_user_and_target_sprites
|
||||||
|
@animsprites[0] = nil
|
||||||
|
@animsprites[1] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_target_origin(x, y)
|
||||||
|
@targetOrig = [x, y]
|
||||||
|
end
|
||||||
|
|
||||||
def start
|
def start
|
||||||
@frame = 0
|
@frame = 0
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user