Manipular Pokémon

Esta página explica cómo agregar, eliminar, contar y seleccionar Pokémon del equipo del jugador a través de scripts en La Base de Sky. Todos los métodos descritos aquí se utilizan principalmente dentro de eventos de RPG Maker XP mediante el comando Llamar Script.

El equipo del jugador

El equipo del jugador se almacena en el array $player.party. Este array contiene entre 0 y 6 objetos de la clase Pokemon. Cada posición del array representa un slot del equipo (índice 0 = primer Pokémon, índice 5 = sexto Pokémon).

Propiedad / Método Descripción
$player.party Devuelve el array con todos los Pokémon del equipo.
$player.party_count Devuelve la cantidad de Pokémon en el equipo (equivale a $player.party.length).
$player.party_full? Devuelve true si el equipo tiene 6 Pokémon.
$player.party[0] Accede al primer Pokémon del equipo.
$player.pokemon_count Devuelve el número total de Pokémon del jugador (equipo + PC).

Agregar Pokémon al equipo

Existen varias formas de agregar un Pokémon al equipo del jugador. La diferencia principal entre ellas es la cantidad de información que muestran al jugador.

pbAddPokemon

Agrega un Pokémon al equipo del jugador mostrando un mensaje de obtención y registrando la especie en la Pokédex. Si el equipo está lleno, el Pokémon se envía al PC automáticamente.

# Agregar un Pikachu de nivel 15
pbAddPokemon(:PIKACHU, 15)

# Agregar un Pokémon con un objeto equipado
pkmn = Pokemon.new(:EEVEE, 20)
pkmn.item = :THUNDERSTONE
pbAddPokemon(pkmn)

Este método devuelve true si el Pokémon fue agregado exitosamente.

pbAddToPartySilent

Agrega un Pokémon al equipo de forma silenciosa, sin mostrar ningún mensaje ni registrar la especie en la Pokédex. Si el equipo está lleno, el Pokémon no se agrega y el método devuelve false.

# Agregar un Pokémon silenciosamente
pbAddToPartySilent(:BULBASAUR, 10)

# Agregar un Pokémon con propiedades personalizadas
pkmn = Pokemon.new(:CHARMANDER, 5)
pkmn.shiny = true
pbAddToPartySilent(pkmn)

pbAddPokemonSilent

Similar a pbAddToPartySilent, pero si el equipo está lleno, el Pokémon se envía al PC automáticamente (también sin mostrar ningún mensaje).

# Agregar silenciosamente, con posibilidad de ir al PC
pbAddPokemonSilent(:SQUIRTLE, 10)

Tabla comparativa

Método Muestra mensaje Registra en Pokédex Envía al PC si equipo lleno
pbAddPokemon
pbAddPokemonSilent No No
pbAddToPartySilent No No No (devuelve false)

Eliminar Pokémon del equipo

Para quitar Pokémon del equipo del jugador se utiliza pbRemovePokemonAt.

# Eliminar el Pokémon en la posición 0 (el primero)
pbRemovePokemonAt(0)

# Eliminar el último Pokémon del equipo
pbRemovePokemonAt($player.party_count - 1)
Nota: El índice comienza en 0. Tras eliminar un Pokémon, los índices de los siguientes se reordenan automáticamente. No se puede eliminar un Pokémon si el equipo solo tiene 1 miembro.

Otros métodos de eliminación

Método Descripción
$player.remove_pokemon_at_index(index) Elimina el Pokémon del equipo en el índice especificado.
$player.party.delete_at(index) Método directo de Ruby para eliminar un elemento del array. Usar con precaución.

Seleccionar Pokémon

Estos métodos abren la pantalla de selección del equipo y permiten al jugador elegir un Pokémon. Son útiles para eventos donde se necesita que el jugador seleccione un Pokémon específico (por ejemplo, para un intercambio o una acción especial).

pbChoosePokemon

Abre la pantalla de selección y permite al jugador elegir cualquier Pokémon de su equipo. Guarda el índice del Pokémon seleccionado en una variable del juego.

# El jugador elige un Pokémon, el índice se guarda en la variable 1
pbChoosePokemon(1, 2)
# Variable 1 = índice del Pokémon elegido (0-5), o -1 si canceló
# Variable 2 = nombre del Pokémon elegido

pbChooseAblePokemon

Similar a pbChoosePokemon, pero solo permite seleccionar Pokémon que no estén debilitados (HP > 0) y que no sean Huevos.

# Solo Pokémon aptos para combatir
pbChooseAblePokemon(1, 2)

pbChooseTradablePokemon

Solo permite seleccionar Pokémon que pueden ser intercambiados (no Huevos, no Pokémon con Mail).

# Solo Pokémon intercambiables
pbChooseTradablePokemon(1, 2)

Selección con filtro personalizado

Se puede usar un bloque de código para filtrar aún más los Pokémon que aparecen como seleccionables:

# Solo permitir seleccionar Pokémon de tipo Fuego
pbChoosePokemon(1, 2, proc { |pkmn|
  pkmn.hasType?(:FIRE)
})

Dar y quitar objetos a Pokémon

Cada Pokémon puede llevar un objeto equipado. Los siguientes scripts permiten gestionar estos objetos:

# Dar un objeto al primer Pokémon
$player.party[0].item = :LEFTOVERS

# Quitar el objeto del primer Pokémon
$player.party[0].item = nil

# Comprobar si un Pokémon lleva un objeto
if $player.party[0].hasItem?(:LEFTOVERS)
  pbMessage("¡Este Pokémon lleva Restos!")
end

# Obtener el objeto que lleva un Pokémon
item = $player.party[0].item   # Devuelve el símbolo del objeto, o nil

Comprobar especies en el equipo

Para verificar si el jugador tiene una especie específica en su equipo:

# Comprobar si el jugador tiene un Pikachu en el equipo
if $player.has_species?(:PIKACHU)
  pbMessage("¡Tienes un Pikachu en tu equipo!")
end

# Contar cuántos Pokémon de una especie hay en el equipo
count = 0
$player.party.each { |pkmn| count += 1 if pkmn.isSpecies?(:EEVEE) }

# Comprobar si algún Pokémon del equipo conoce un movimiento
if $player.has_pokemon_with_move?(:FLY)
  pbMessage("Un Pokémon de tu equipo puede usar Vuelo.")
end

Curar Pokémon

Para curar los Pokémon del equipo:

# Curar todos los Pokémon del equipo completamente
$player.party.each { |pkmn| pkmn.heal }

# Curar solo el primer Pokémon
$player.party[0].heal

# Restaurar solo los PS de un Pokémon
$player.party[0].hp = $player.party[0].totalhp

# Restaurar solo los PP de todos los movimientos
$player.party[0].moves.each { |m| m.pp = m.total_pp }

Información útil del Pokémon

Propiedad Descripción Ejemplo
pkmn.species Símbolo de la especie :PIKACHU
pkmn.name Nombre (o mote) del Pokémon "Pikachu"
pkmn.level Nivel actual 25
pkmn.hp PS actuales 60
pkmn.totalhp PS máximos 80
pkmn.fainted? Si está debilitado true / false
pkmn.egg? Si es un Huevo true / false
pkmn.shiny? Si es shiny true / false
pkmn.ability Habilidad actual :STATIC
pkmn.nature Naturaleza :JOLLY
pkmn.gender Género (0=macho, 1=hembra, 2=sin género) 0
pkmn.owner.name Nombre del Entrenador Original "Red"

Iterar sobre el equipo

Se puede recorrer el equipo completo para realizar operaciones en todos los Pokémon:

# Subir 5 niveles a todos los Pokémon del equipo
$player.party.each do |pkmn|
  next if pkmn.egg?   # Saltar huevos
  pbChangeLevel(pkmn, pkmn.level + 5, nil)
end

# Hacer que todos los Pokémon del equipo sean shiny
$player.party.each do |pkmn|
  next if pkmn.egg?
  pkmn.shiny = true
end

# Encontrar el Pokémon de mayor nivel
mejor = $player.party.max_by { |pkmn| pkmn.level }
pbMessage("Tu Pokémon de mayor nivel es #{mejor.name} (Nv. #{mejor.level}).")