Pantalla de Opciones

La Pantalla de Opciones permite al jugador personalizar diversos aspectos del juego como la velocidad del texto, el volumen del sonido, el estilo de combate y el tamaño de la pantalla. Se accede desde el menú de pausa. Las preferencias se almacenan en el objeto $PokemonSystem.

Opciones estándar

Estas son las opciones disponibles por defecto en Pokémon Essentials v21.1:

Opción Valores posibles Propiedad Descripción
Velocidad del Texto Lenta (1), Normal (2), Rápida (3) $PokemonSystem.textspeed Velocidad a la que aparece el texto de los mensajes
Escena de Batalla Activada (0), Desactivada (1) $PokemonSystem.battlescene Si se muestran las animaciones de movimientos en combate
Estilo de Combate Cambiar (0), Fijar (1) $PokemonSystem.battlestyle Si se permite cambiar de Pokémon al derrotar al rival
Volumen de Música 0 a 100 $PokemonSystem.bgmvolume Volumen de la música de fondo
Volumen de Efectos 0 a 100 $PokemonSystem.sevolume Volumen de los efectos de sonido
Tamaño de Pantalla 1x, 2x, 3x, Completa $PokemonSystem.screensize Tamaño de la ventana del juego

La clase $PokemonSystem

Todas las opciones se almacenan en una instancia de la clase PokemonSystem, accesible globalmente como $PokemonSystem. Esta instancia se crea al iniciar el juego y se guarda con la partida.

# Leer una opción
velocidad = $PokemonSystem.textspeed   # 0=Lenta, 1=Normal, 2=Rápida

# Cambiar una opción por script
$PokemonSystem.textspeed = 2     # Poner texto rápido
$PokemonSystem.battlescene = 1   # Desactivar animaciones de batalla
$PokemonSystem.battlestyle = 0   # Modo "Cambiar"

# Ajustar volúmenes
$PokemonSystem.bgmvolume = 80    # Música al 80%
$PokemonSystem.sevolume = 50     # Efectos al 50%

Opciones extra de La Base de Sky

La Base de Sky añade opciones adicionales que no existen en Essentials estándar:

Opción Valores Descripción
Velocidad de Juego x1, x2, x3 Multiplicador de velocidad del juego (turbo)
Turbo en Combate Activado/Desactivado Permite acelerar los combates automáticamente
Saltar Animaciones Activado/Desactivado Omite las animaciones de movimientos en combate
Texto Instantáneo Activado/Desactivado El texto aparece inmediatamente en lugar de letra por letra

Cómo añadir una opción personalizada

Para añadir una nueva opción al menú, necesitas hacer tres cosas:

1. Añadir la propiedad a PokemonSystem

# En un nuevo script o plugin
class PokemonSystem
  attr_accessor :dificultad  # 0=Fácil, 1=Normal, 2=Difícil

  # Si necesitas un valor por defecto, modifica initialize:
  alias _init_dificultad initialize
  def initialize
    _init_dificultad
    @dificultad = 1  # Normal por defecto
  end
end

2. Registrar la opción en el menú

# Registrar la nueva opción
MenuHandlers.add(:options_menu, :dificultad, {
  "name"        => _INTL("Dificultad"),
  "order"       => 50,
  "type"        => NumberOption,
  "parameters"  => [0, 2],  # Rango de valores: 0 a 2
  "descriptions" => [
    _INTL("Fácil"), _INTL("Normal"), _INTL("Difícil")
  ],
  "get_proc"    => proc { next $PokemonSystem.dificultad },
  "set_proc"    => proc { |value|
    $PokemonSystem.dificultad = value
  }
})

3. Usar la opción en el juego

# En cualquier script donde necesites consultar la dificultad:
case $PokemonSystem.dificultad
when 0  # Fácil
  multiplicador_exp = 1.5
when 1  # Normal
  multiplicador_exp = 1.0
when 2  # Difícil
  multiplicador_exp = 0.75
end

Tipos de opciones

El sistema de opciones soporta diferentes tipos de controles:

Tipo Clase Descripción
Enumeración EnumOption Una lista de valores predefinidos (ej: Lenta/Normal/Rápida)
Numérico NumberOption Un rango numérico con descripciones para cada valor
Deslizador SliderOption Un control deslizante para valores continuos (ej: volumen)
Booleano BooleanOption Activado/Desactivado

Ejemplo: Opción booleana

MenuHandlers.add(:options_menu, :mostrar_reloj, {
  "name"        => _INTL("Mostrar Reloj"),
  "order"       => 55,
  "type"        => BooleanOption,
  "get_proc"    => proc { next $PokemonSystem.mostrar_reloj },
  "set_proc"    => proc { |value|
    $PokemonSystem.mostrar_reloj = value
  }
})

Ejemplo: Opción de deslizador (volumen)

MenuHandlers.add(:options_menu, :volumen_voces, {
  "name"        => _INTL("Volumen de Voces"),
  "order"       => 35,
  "type"        => SliderOption,
  "parameters"  => [0, 100],  # Mínimo 0, máximo 100
  "get_proc"    => proc { next $PokemonSystem.volumen_voces },
  "set_proc"    => proc { |value|
    $PokemonSystem.volumen_voces = value
  }
})

Abrir la pantalla de opciones por script

# Abrir las opciones directamente
pbFadeOutIn {
  scene = PokemonOption_Scene.new
  screen = PokemonOptionScreen.new(scene)
  screen.pbStartScreen
}

Gráficos

Los gráficos de la pantalla de opciones se encuentran en Graphics/UI/Options/:

Archivo Descripción
bg.png Fondo de la pantalla de opciones
cursor.png Cursor de selección
slider.png Control deslizante para opciones de volumen
option_bar.png Barra de cada opción
Nota: Al añadir nuevas opciones a $PokemonSystem, ten en cuenta que las partidas guardadas anteriormente no tendrán esa propiedad. Usa ||= o valores por defecto en el getter para evitar errores con partidas antiguas.