def pbStartScreen(pokemon, newspecies)
@pokemon = pokemon
@newspecies = newspecies
@sprites = {}
# Si Mime Jr. es macho y conoce Mímico, evoluciona a Mr. Mime Galar
if @pokemon.species == :MIMEJR && @pokemon.hasMove?(:MIMIC) && @pokemon.male?
@pokemon.species = :MRMIME
@pokemon.form = 1 # Forma Galar
end
# Crear vistas y sprites
@bgviewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@bgviewport.z = 99999
@viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@viewport.z = 99999
@msgviewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@msgviewport.z = 99999
# Agregar fondo
addBackgroundOrColoredPlane(@sprites, "background", "evolution_bg", Color.new(248, 248, 248), @bgviewport)
# Crear sprite para el Pokémon original (Mime Jr.)
rsprite1 = PokemonSprite.new(@viewport)
rsprite1.setOffset(PictureOrigin::CENTER)
rsprite1.setPokemonBitmap(@pokemon, false)
rsprite1.x = Graphics.width / 2
rsprite1.y = (Graphics.height - 64) / 2
# Crear sprite para la nueva especie (Mr. Mime Galar), inicialmente invisible
rsprite2 = PokemonSprite.new(@viewport)
rsprite2.setOffset(PictureOrigin::CENTER)
rsprite2.setPokemonBitmapSpecies(@pokemon, @newspecies, false)
rsprite2.x = rsprite1.x
rsprite2.y = rsprite1.y
rsprite2.visible = false # Inicialmente invisible, se hará visible durante la animación
@sprites["rsprite1"] = rsprite1
@sprites["rsprite2"] = rsprite2
@sprites["msgwindow"] = pbCreateMessageWindow(@msgviewport)
# Configurar animación de evolución
set_up_animation
pbFadeInAndShow(@sprites) { pbUpdate }
end
def set_up_animation
# Crear sprites para la animación
sprite = PictureEx.new(0)
sprite.setVisible(0, true) # Hacer visible el primer sprite (Mime Jr.)
sprite.setColor(0, Color.new(255, 255, 255, 0)) # Inicialmente invisible
sprite2 = PictureEx.new(0)
sprite2.setVisible(0, false) # Inicialmente invisible, se hará visible durante la animación
sprite2.setZoom(0, 0.0) # Inicialmente muy pequeño
sprite2.setColor(0, Color.new(255, 255, 255, 255)) # No transparente
# Hacer que el sprite 1 (Mime Jr.) se vuelva blanco
sprite.moveColor(0, 25, Color.new(255, 255, 255, 255)) # Fade to white
total_duration = 9 * 20 # 9 segundos
duration = 25 + 15
zoom_duration = 12
loop do
# Primero, reducir el tamaño del sprite original (Mime Jr.) y agrandar el sprite de evolución (Mr. Mime Galar)
sprite.moveZoom(duration, zoom_duration, 0)
sprite2.moveZoom(duration, zoom_duration, 110) # Aumentando el tamaño de Mr. Mime Galar
sprite2.setVisible(0, true) # Hacer visible el sprite de Mr. Mime Galar
duration += zoom_duration
# Si la animación ha durado lo suficiente, terminarla mientras el sprite de evolución es grande
break if duration >= total_duration
# Ahora, agrandar el sprite original (Mime Jr.) y reducir el tamaño del sprite de evolución
sprite.moveZoom(duration, zoom_duration, 110)
sprite2.moveZoom(duration, zoom_duration, 0)
duration += zoom_duration
# Reducir la duración del zoom en el siguiente ciclo
zoom_duration = [(zoom_duration / 1.2).round, 2].max
end
# Asignar los sprites a las variables globales de la clase
@picture1 = sprite
@picture2 = sprite2
end
# Abre la pantalla de evolución
def pbEvolution(cancancel = true)
pbBGMStop
pbMessageDisplay(@sprites["msgwindow"], "\\se[]" + _INTL("¡Anda!") + "\1") { pbUpdate }
pbPlayDecisionSE
@pokemon.play_cry
@sprites["msgwindow"].text = _INTL("¡{1} está evolucionando!", @pokemon.name)
timer_start = System.uptime
loop do
Graphics.update
Input.update
pbUpdate
break if System.uptime - timer_start >= 1
end
pbMEPlay("Evolution start")
pbBGMPlay("Evolution")
canceled = false
# Verificar si Mime Jr. es macho y conoce Mímico
if @pokemon.species == :MIMEJR && @pokemon.hasMove?(:MIMIC) && @pokemon.male?
@pokemon.species = :MRMIME # Cambiar la especie a Mr. Mime
@pokemon.form = 1 # Establecer la forma Galar (Forma 1)
# Actualizamos el sprite para reflejar la nueva forma
@sprites["rsprite1"].setPokemonBitmap(@pokemon, false) # Sprite original
@sprites["rsprite2"].setPokemonBitmapSpecies(@pokemon, @pokemon.species, false) # Sprite de la evolución
else
# Si no se cumple la condición, solo se realizará la evolución normal
@sprites["rsprite1"].setPokemonBitmap(@pokemon, false)
@sprites["rsprite2"].setPokemonBitmapSpecies(@pokemon, @pokemon.species, false)
end
# Iniciar la animación de la evolución
timer_start = System.uptime
loop do
pbUpdateNarrowScreen(timer_start)
@picture1.update
setPictureSprite(@sprites["rsprite1"], @picture1) # Actualiza el sprite del Pokémon original
if @sprites["rsprite1"].zoom_x > 1.0
@sprites["rsprite1"].zoom_x = 1.0
@sprites["rsprite1"].zoom_y = 1.0
end
@picture2.update
setPictureSprite(@sprites["rsprite2"], @picture2) # Actualiza el sprite de la evolución
if @sprites["rsprite2"].zoom_x > 1.0
@sprites["rsprite2"].zoom_x = 1.0
@sprites["rsprite2"].zoom_y = 1.0
end
Graphics.update
Input.update
pbUpdate(true)
# Si el jugador presiona BACK, se cancela la evolución
if Input.trigger?(Input::BACK) && cancancel
pbBGMStop
pbPlayCancelSE
canceled = true
break
end
# Romper el loop si las animaciones de ambos sprites han terminado
break if !@picture1.running? && !@picture2.running?
end
pbFlashInOut(canceled)
# Si se cancela la evolución
if canceled
$stats.evolutions_cancelled += 1
pbMessageDisplay(@sprites["msgwindow"],
_INTL("¿Eh? ¡{1} dejó de evolucionar!", @pokemon.name)) { pbUpdate }
else
# Confirmar la evolución exitosa
pbEvolutionSuccess
end
end