Registrarse

[RPG - Scripting] Error al evolucionar Pokémon a su otra forma

R1P2R1P

Pequeño saltamontes
Hola, muy buenas a todos.

He estado trabajando en un metodo de evolución el cual Mime.Jr evolucionaría siendo hembra a Mime.Jr de Kanto, es decir, su forma por defecto y siendo macho evolucionaría a su forma Galar. El método de evolución parece ser válido pero el Mime.Jr al evolucionar se convierte en su forma por defecto y no en su forma Galar como se pretende, no sé si quizás el problema se haya en que falta algún detalle o no está bien configurado los PBS de pokemon.txt o los de pokemon_forms.txt.

Aquí abajo dejo el script por si acaso hay algún error en el código que no haya visto.

Código:
GameData::Evolution.register({
  :id            => :MimeJrGenderMove,
  :parameter     => nil, # No necesitamos un parámetro adicional
  :level_up_proc => proc { |pkmn, parameter|
    # Verifica si el Pokémon es Mime Jr. y si conoce el movimiento Mímico
    next false unless pkmn.species == :MIMEJR
    next false unless pkmn.hasMove?(:MIMIC)
    next true
  },
  :after_evolution_proc => proc { |pkmn, new_species, parameter, evo_species|
    # Verifica el género de Mime Jr. y asigna la forma correspondiente
    if pkmn.male?
      pkmn.form = 1 # Forma Galar
    elsif pkmn.female?
      pkmn.form = 0 # Forma normal
    else
      next false # En caso improbable de que no tenga género
    end
    next true
  }
})
 

Micolo

Autista de creatividad ilimitada
No se mucho pero, a lo mejor el fallo que tienes es llamar Mime Jr al propio Mr Mime, al igual que en lugar de poner Forma Galar, pon Galarian Mr Mime, ya que sería así como lo diferencia internamente los juegos.
 

R1P2R1P

Pequeño saltamontes
He conseguido que evolucione correctamente mime jr macho a mr mime galar pero en el proceso de evolución se muestra su forma normal y no la galar, dejo el código por si alguien me puede ayudar.

Código:
GameData::Evolution.register(
  :id            => :MimeJrGenderMove,
  :parameter     => nil,
  :level_up_proc => proc { |pkmn, parameter|
    # Verificar si el Pokémon es Mime Jr. y conoce el movimiento Mimético
    next false unless pkmn.species == :MIMEJR
    next false unless pkmn.hasMove?(:MIMIC)
    next true
  },
  :after_evolution_proc => proc { |pkmn, new_species, parameter, evo_species|
    # Determinar la forma según el género
    new_form = pkmn.male? ? 1 : 0

    # Actualizar la forma y especie antes de la animación de evolución
    pkmn.form = new_form
    pkmn.species = :MRMIME

    # Recalcular estadísticas para reflejar los cambios
    pkmn.calc_stats

    # Asegurarnos de actualizar el sprite correctamente durante la evolución
    if $scene.is_a?(Scene_Evolution)
      $scene.sprites["pokemon"].setPokemonBitmap(pkmn)
      $scene.wait(10) # Breve pausa para asegurar la transición
    end

    next true
  }
)
 

R1P2R1P

Pequeño saltamontes
Conseguí que saliese la forma galar en la animación de evolución pero sale desde un principio en vez de haber una transición entre mime jr y mr mime galar

Código:
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
Este es el codigo que uso en ui_evolution
 
Arriba