More FPS agnosticism, fixed pause after finishing an event's repeating move route

This commit is contained in:
Maruno17
2023-05-24 21:20:20 +01:00
parent 167155c67d
commit c756e2647a
30 changed files with 947 additions and 847 deletions

View File

@@ -23,14 +23,6 @@ class SpriteMetafile
FLASHDURATION = 18
BITMAP = 19
def length
return @metafile.length
end
def [](i)
return @metafile[i]
end
def initialize(viewport = nil)
@metafile = []
@values = [
@@ -44,11 +36,19 @@ class SpriteMetafile
]
end
def dispose; end
def disposed?
return false
end
def dispose; end
def [](i)
return @metafile[i]
end
def length
return @metafile.length
end
def flash(color, duration)
if duration > 0
@@ -252,35 +252,34 @@ class SpriteMetafilePlayer
end
def update
if @playing
(@index...@metafile.length).each do |j|
@index = j + 1
break if @metafile[j][0] < 0
code = @metafile[j][0]
value = @metafile[j][1]
@sprites.each do |sprite|
case code
when SpriteMetafile::X then sprite.x = value
when SpriteMetafile::Y then sprite.y = value
when SpriteMetafile::OX then sprite.ox = value
when SpriteMetafile::OY then sprite.oy = value
when SpriteMetafile::ZOOM_X then sprite.zoom_x = value
when SpriteMetafile::ZOOM_Y then sprite.zoom_y = value
when SpriteMetafile::SRC_RECT then sprite.src_rect = value
when SpriteMetafile::VISIBLE then sprite.visible = value
when SpriteMetafile::Z then sprite.z = value # prevent crashes
when SpriteMetafile::ANGLE then sprite.angle = (value == 180) ? 179.9 : value
when SpriteMetafile::MIRROR then sprite.mirror = value
when SpriteMetafile::BUSH_DEPTH then sprite.bush_depth = value
when SpriteMetafile::OPACITY then sprite.opacity = value
when SpriteMetafile::BLEND_TYPE then sprite.blend_type = value
when SpriteMetafile::COLOR then sprite.color = value
when SpriteMetafile::TONE then sprite.tone = value
end
return if !@playing
(@index...@metafile.length).each do |j|
@index = j + 1
break if @metafile[j][0] < 0
code = @metafile[j][0]
value = @metafile[j][1]
@sprites.each do |sprite|
case code
when SpriteMetafile::X then sprite.x = value
when SpriteMetafile::Y then sprite.y = value
when SpriteMetafile::OX then sprite.ox = value
when SpriteMetafile::OY then sprite.oy = value
when SpriteMetafile::ZOOM_X then sprite.zoom_x = value
when SpriteMetafile::ZOOM_Y then sprite.zoom_y = value
when SpriteMetafile::SRC_RECT then sprite.src_rect = value
when SpriteMetafile::VISIBLE then sprite.visible = value
when SpriteMetafile::Z then sprite.z = value # prevent crashes
when SpriteMetafile::ANGLE then sprite.angle = (value == 180) ? 179.9 : value
when SpriteMetafile::MIRROR then sprite.mirror = value
when SpriteMetafile::BUSH_DEPTH then sprite.bush_depth = value
when SpriteMetafile::OPACITY then sprite.opacity = value
when SpriteMetafile::BLEND_TYPE then sprite.blend_type = value
when SpriteMetafile::COLOR then sprite.color = value
when SpriteMetafile::TONE then sprite.tone = value
end
end
@playing = false if @index == @metafile.length
end
@playing = false if @index == @metafile.length
end
end
@@ -420,36 +419,29 @@ class PokemonEvolutionScene
end
end
def pbUpdateNarrowScreen
halfResizeDiff = 8 * 20 / Graphics.frame_rate
if @bgviewport.rect.y < 80
@bgviewport.rect.height -= halfResizeDiff * 2
if @bgviewport.rect.height < Graphics.height - 64
@bgviewport.rect.y += halfResizeDiff
@sprites["background"].oy = @bgviewport.rect.y
end
end
def pbUpdateNarrowScreen(timer_start)
return if @bgviewport.rect.y >= 80
buffer = 80
@bgviewport.rect.height = Graphics.height - lerp(0, 64 + (buffer * 2), 0.7, timer_start, System.uptime).to_i
@bgviewport.rect.y = lerp(0, buffer, 0.5, timer_start + 0.2, System.uptime).to_i
@sprites["background"].oy = @bgviewport.rect.y
end
def pbUpdateExpandScreen
halfResizeDiff = 8 * 20 / Graphics.frame_rate
if @bgviewport.rect.y > 0
@bgviewport.rect.y -= halfResizeDiff
@sprites["background"].oy = @bgviewport.rect.y
end
if @bgviewport.rect.height < Graphics.height
@bgviewport.rect.height += halfResizeDiff * 2
end
def pbUpdateExpandScreen(timer_start)
return if @bgviewport.rect.height >= Graphics.height
buffer = 80
@bgviewport.rect.height = Graphics.height - lerp(64 + (buffer * 2), 0, 0.7, timer_start, System.uptime).to_i
@bgviewport.rect.y = lerp(buffer, 0, 0.5, timer_start, System.uptime).to_i
@sprites["background"].oy = @bgviewport.rect.y
end
def pbFlashInOut(canceled, oldstate, oldstate2)
tone = 0
toneDiff = 20 * 20 / Graphics.frame_rate
timer_start = System.uptime
loop do
Graphics.update
pbUpdate(true)
pbUpdateExpandScreen
tone += toneDiff
pbUpdateExpandScreen(timer_start)
tone = lerp(0, 255, 0.7, timer_start, System.uptime)
@viewport.tone.set(tone, tone, tone, 0)
break if tone >= 255
end
@@ -471,16 +463,18 @@ class PokemonEvolutionScene
@sprites["rsprite2"].zoom_y = 1.0
@sprites["rsprite2"].color.alpha = 0
end
(Graphics.frame_rate / 4).times do
timer_start = System.uptime
loop do
Graphics.update
pbUpdate(true)
break if System.uptime - timer_start >= 0.25
end
tone = 255
toneDiff = 40 * 20 / Graphics.frame_rate
timer_start = System.uptime
loop do
Graphics.update
pbUpdate
tone -= toneDiff
pbUpdateExpandScreen(timer_start)
tone = lerp(255, 0, 0.4, timer_start, System.uptime)
@viewport.tone.set(tone, tone, tone, 0)
break if tone <= 0
end
@@ -551,8 +545,9 @@ class PokemonEvolutionScene
pbMEPlay("Evolution start")
pbBGMPlay("Evolution")
canceled = false
timer_start = System.uptime
loop do
pbUpdateNarrowScreen
pbUpdateNarrowScreen(timer_start)
metaplayer1.update
metaplayer2.update
Graphics.update
@@ -579,11 +574,13 @@ class PokemonEvolutionScene
def pbEvolutionSuccess
$stats.evolution_count += 1
# Play cry of evolved species
frames = (GameData::Species.cry_length(@newspecies, @pokemon.form) * Graphics.frame_rate).ceil
cry_time = GameData::Species.cry_length(@newspecies, @pokemon.form)
Pokemon.play_cry(@newspecies, @pokemon.form)
(frames + 4).times do
timer_start = System.uptime
loop do
Graphics.update
pbUpdate
break if System.uptime - timer_start >= cry_time
end
pbBGMStop
# Success jingle/message

View File

@@ -17,7 +17,7 @@ class PokemonLoadPanel < Sprite
@title = title
@isContinue = isContinue
@trainer = trainer
@totalsec = stats.play_time.to_i
@totalsec = stats&.play_time.to_i || 0
@mapid = mapid
@selected = (index == 0)
@bgbitmap = AnimatedBitmap.new("Graphics/UI/Load/panels")

View File

@@ -5,7 +5,7 @@ class PokemonBoxIcon < IconSprite
def initialize(pokemon, viewport = nil)
super(0, 0, viewport)
@pokemon = pokemon
@release = Interpolator.new
@release = SpriteInterpolator.new
@startRelease = false
refresh
end
@@ -20,9 +20,9 @@ class PokemonBoxIcon < IconSprite
self.x += self.src_rect.width / 2 # 32
self.y += self.src_rect.height / 2 # 32
@release.tween(self,
[[Interpolator::ZOOM_X, 0],
[Interpolator::ZOOM_Y, 0],
[Interpolator::OPACITY, 0]],
[[SpriteInterpolator::ZOOM_X, 0],
[SpriteInterpolator::ZOOM_Y, 0],
[SpriteInterpolator::OPACITY, 0]],
100)
@startRelease = true
end
@@ -969,34 +969,32 @@ class PokemonStorageScene
end
def pbChangeBackground(wp)
duration = 0.2 # Time in seconds to fade out or fade in
@sprites["box"].refreshSprites = false
alpha = 0
Graphics.update
self.update
timeTaken = Graphics.frame_rate * 4 / 10
alphaDiff = (255.0 / timeTaken).ceil
timeTaken.times do
alpha += alphaDiff
Graphics.update
Input.update
# Fade old background to white
timer_start = System.uptime
loop do
alpha = lerp(0, 255, duration, timer_start, System.uptime)
@sprites["box"].color = Color.new(248, 248, 248, alpha)
Graphics.update
self.update
break if alpha >= 255
end
# Fade in new background from white
@sprites["box"].refreshBox = true
@storage[@storage.currentBox].background = wp
(Graphics.frame_rate / 10).times do
Graphics.update
Input.update
self.update
end
timeTaken.times do
alpha -= alphaDiff
Graphics.update
Input.update
timer_start = System.uptime
loop do
alpha = lerp(255, 0, duration, timer_start, System.uptime)
@sprites["box"].color = Color.new(248, 248, 248, alpha)
Graphics.update
self.update
break if alpha <= 0
end
@sprites["box"].refreshSprites = true
Input.update
end
def pbSwitchBoxToRight(newbox)

View File

@@ -168,7 +168,7 @@ class PokemonEntryScene
when 4 # Storage box
@sprites["subject"] = TrainerWalkingCharSprite.new(nil, @viewport)
@sprites["subject"].altcharset = "Graphics/UI/Naming/icon_storage"
@sprites["subject"].animspeed = 4
@sprites["subject"].anim_duration = 0.4
charwidth = @sprites["subject"].bitmap.width
charheight = @sprites["subject"].bitmap.height
@sprites["subject"].x = 88 - (charwidth / 8)
@@ -449,7 +449,7 @@ class PokemonEntryScene2
when 4 # Storage box
@sprites["subject"] = TrainerWalkingCharSprite.new(nil, @viewport)
@sprites["subject"].altcharset = "Graphics/UI/Naming/icon_storage"
@sprites["subject"].animspeed = 4
@sprites["subject"].anim_duration = 0.4
charwidth = @sprites["subject"].bitmap.width
charheight = @sprites["subject"].bitmap.height
@sprites["subject"].x = 88 - (charwidth / 8)