El Jugador

En Pokémon Essentials, toda la información del jugador se almacena en el objeto global $player (también accesible como $Trainer en versiones anteriores). Este objeto contiene el nombre, género, dinero, medallas, equipo Pokémon y mucho más.


El objeto $player

La variable $player es una instancia de la clase Player y se crea automáticamente al iniciar una nueva partida. A continuación se listan todas sus propiedades principales:

Propiedad Tipo Descripción
$player.name String Nombre del jugador.
$player.gender Integer Género: 0 = masculino, 1 = femenino, 2 = no binario.
$player.id Integer ID completo del entrenador (número único generado al crear la partida).
$player.public_ID Integer ID público visible (los últimos 5 dígitos del ID completo).
$player.secret_ID Integer ID secreto (usado para determinar si un Pokémon es shiny).
$player.money Integer Cantidad de dinero actual del jugador.
$player.coins Integer Cantidad de fichas del Game Corner.
$player.party Array Array con los Pokémon del equipo (máximo 6).
$player.party_count Integer Número de Pokémon en el equipo.
$player.badges Array Array de booleanos que indica qué medallas se han obtenido.
$player.badge_count Integer Número total de medallas obtenidas.
$player.has_pokedex Boolean Si el jugador tiene la Pokédex.
$player.has_pokegear Boolean Si el jugador tiene el Pokégear.
$player.has_running_shoes Boolean Si el jugador tiene zapatillas para correr.
$player.trainer_type Symbol Tipo de entrenador del jugador (define su sprite).
$player.language Integer Idioma del jugador (para juegos multiidioma).

Archivo player_metadata.txt

Los personajes jugables se definen en el archivo PBS player_metadata.txt. Aquí se configuran los sprites y la apariencia del jugador en el mapa y en combate.

[0]
TrainerType = POKEMONTRAINER_Red
WalkCharset = trainer_POKEMONTRAINER_Red
RunCharset = trainer_POKEMONTRAINER_Red_run
CycleCharset = trainer_POKEMONTRAINER_Red_cycle
SurfCharset = trainer_POKEMONTRAINER_Red_surf
DiveCharset = trainer_POKEMONTRAINER_Red_dive
FishCharset = trainer_POKEMONTRAINER_Red_fish
SurfFishCharset = trainer_POKEMONTRAINER_Red_surf_fish

[1]
TrainerType = POKEMONTRAINER_Leaf
WalkCharset = trainer_POKEMONTRAINER_Leaf
RunCharset = trainer_POKEMONTRAINER_Leaf_run
CycleCharset = trainer_POKEMONTRAINER_Leaf_cycle
SurfCharset = trainer_POKEMONTRAINER_Leaf_surf
DiveCharset = trainer_POKEMONTRAINER_Leaf_dive
FishCharset = trainer_POKEMONTRAINER_Leaf_fish
SurfFishCharset = trainer_POKEMONTRAINER_Leaf_surf_fish

El número entre corchetes ([0], [1], etc.) indica el índice del personaje jugable. [0] generalmente es el protagonista masculino y [1] el femenino.

Propiedad Descripción
TrainerType Tipo de entrenador del jugador (define sprite de combate y tipo en PBS).
WalkCharset Sprite del jugador caminando en el mapa.
RunCharset Sprite del jugador corriendo.
CycleCharset Sprite del jugador en bicicleta.
SurfCharset Sprite del jugador surfeando.
DiveCharset Sprite del jugador buceando.
FishCharset Sprite del jugador pescando.
SurfFishCharset Sprite del jugador pescando mientras surfea.

Medallas (Badges)

Las medallas se gestionan mediante el array $player.badges. Cada medalla tiene un índice numérico (empezando desde 0).

# Comprobar si el jugador tiene una medalla específica
if $player.badges[0]   # Primera medalla (índice 0)
  pbMessage("Tienes la primera medalla.")
end

# Otorgar una medalla
$player.badges[0] = true   # Otorgar la primera medalla

# Quitar una medalla
$player.badges[0] = false  # Quitar la primera medalla

# Contar medallas totales
pbMessage("Tienes #{$player.badge_count} medallas.")

# Comprobar si tiene una medalla específica con función auxiliar
if pbHasBadge?(3)   # Cuarta medalla (índice 3)
  pbMessage("Puedes usar Surf fuera de combate.")
end

Medallas y MOs (HMs)

Por defecto, cada medalla desbloquea el uso de una MO fuera de combate. Esto se configura en Settings:

Medalla (índice) MO desbloqueada (por defecto)
0 Corte (Cut)
1 Destello (Flash)
2 Surf
3 Fuerza (Strength)
4 Vuelo (Fly)
5 Cascada (Waterfall)
6 Buceo (Dive)
7 Trepar (Rock Climb)

Dinero

El dinero del jugador se gestiona con las siguientes funciones:

# Obtener dinero actual
pbMessage("Tienes #{$player.money}₽.")

# Añadir dinero
pbAddMoney(5000)    # Añade 5000₽

# Quitar dinero
pbRemoveMoney(1500) # Quita 1500₽

# Comprobar si tiene suficiente dinero
if $player.money >= 3000
  pbMessage("Puedes permitírtelo.")
  pbRemoveMoney(3000)
else
  pbMessage("No tienes suficiente dinero.")
end

# Establecer dinero directamente
$player.money = 10000
Nota: El dinero máximo por defecto es 999.999₽. Este límite se puede cambiar en la constante Settings::MAX_MONEY.

Fichas del Game Corner

# Obtener fichas
pbMessage("Tienes #{$player.coins} fichas.")

# Añadir fichas
$player.coins += 500
$player.coins = [$player.coins, Settings::MAX_COINS].min

# Quitar fichas
$player.coins -= 100
$player.coins = [$player.coins, 0].max

Configurar el personaje del jugador

Al inicio del juego, debes configurar el jugador. Generalmente esto se hace en el evento de introducción:

Elegir nombre y género

# Preguntar el género del jugador
pbMessage("¿Eres chico o chica?")
gender = pbShowCommands(nil, ["Chico", "Chica"], -1)
if gender == 0
  pbChangePlayer(0)  # Personaje masculino (índice 0)
elsif gender == 1
  pbChangePlayer(1)  # Personaje femenino (índice 1)
end

# Pedir el nombre al jugador
pbTrainerName

Establecer nombre directamente

# Establecer un nombre sin pedir al jugador
$player.name = "Red"

Gráficos del jugador

Los gráficos del jugador se almacenan en varias carpetas:

Carpeta Contenido Ejemplo
Graphics/Characters/ Sprites del mapa (overworld): caminar, correr, bici, surf, etc. trainer_POKEMONTRAINER_Red.png
Graphics/Trainers/ Sprite frontal del entrenador (pantalla de combate del oponente). POKEMONTRAINER_Red.png
Graphics/Trainers/ Sprite trasero (visto en combate como jugador). POKEMONTRAINER_Red_back.png

Sprites del mapa (Characters)

Los sprites de mapa son hojas de sprites con 4 filas × 4 columnas, donde cada fila corresponde a una dirección (abajo, izquierda, derecha, arriba) y cada columna es un cuadro de animación.

Sprite trasero de combate

El sprite trasero (_back) se muestra durante los combates. Es una imagen generalmente de 128×128 píxeles o mayor que muestra al jugador de espaldas.


Múltiples personajes jugables

Puedes ofrecer varias opciones de personaje. Cada uno se define en player_metadata.txt con un índice diferente.

# Cambiar el personaje jugable durante el juego
pbChangePlayer(0)  # Cambiar al personaje 0 (masculino)
pbChangePlayer(1)  # Cambiar al personaje 1 (femenino)

# También puedes cambiar el outfit del jugador actual
$player.character_ID = 2  # Cambiar a un outfit alternativo

Ejemplo: selección de personaje al inicio

# ◆ Mensaje: ¡Bienvenido al mundo Pokémon!
#            ¿Cómo te ves a ti mismo?
# ◆ Show Choices: [Chico], [Chica]
#   ◆ When [Chico]:
#     ◆ Script: pbChangePlayer(0)
#   ◆ When [Chica]:
#     ◆ Script: pbChangePlayer(1)
# ◆ Branch End
# ◆ Script: pbTrainerName
# ◆ Mensaje: ¡Así que te llamas \PN!
#            ¡Tu aventura está a punto de comenzar!

Otras propiedades útiles

# Dar la Pokédex al jugador
$player.has_pokedex = true

# Dar el Pokégear
$player.has_pokegear = true

# Dar las zapatillas para correr
$player.has_running_shoes = true

# Comprobar horas de juego
horas = $stats.play_time.to_i / 3600
pbMessage("Llevas #{horas} horas jugando.")

# Curar todo el equipo
$player.heal_party