Menú de Pausa

El Menú de Pausa es la interfaz principal que aparece al pulsar el botón de menú (por defecto X o Esc) durante la partida. Desde aquí el jugador puede acceder a la Pokédex, su equipo, la mochila, la tarjeta de entrenador, guardar la partida, las opciones y más.

Componentes por defecto

El menú de pausa estándar en Pokémon Essentials v21.1 incluye las siguientes entradas:

Entrada Condición para aparecer Descripción
Pokédex El jugador tiene al menos una Pokédex desbloqueada Abre la pantalla de la Pokédex
Pokémon El jugador tiene al menos 1 Pokémon en el equipo Abre la pantalla de equipo
Mochila Siempre visible Abre la mochila del jugador
Pokégear $player.has_pokegear es true Abre el Pokégear (mapa, teléfono, radio)
[Nombre del jugador] Siempre visible Muestra la Tarjeta de Entrenador
Guardar $game_system.save_disabled es false Guarda la partida actual
Opciones Siempre visible Abre la pantalla de opciones
Debug Solo en modo Debug ($DEBUG) Abre el menú de depuración
Salir Siempre visible Pregunta confirmación, guarda y cierra el juego (clave :quit_game)

Clases PokemonPauseMenu y PokemonPauseMenu_Scene

El menú de pausa se gestiona en el script 048_UI/002_UI_PauseMenu.rb mediante dos clases:

Cómo se construye la lista de comandos

El método de instancia PokemonPauseMenu#pbStartPokemonMenu recorre todos los handlers registrados con la clave :pause_menu mediante MenuHandlers.each_available(:pause_menu) y añade al menú aquellos cuya condición se cumple. Resumen del flujo:

  1. Se valida que $player esté definido (si no, se aborta).
  2. Se llama a pbStartScene en la escena (crea viewport y sprites).
  3. Se muestra el cartel de ubicación si Settings::SHOW_LOCATION_SIGN_IN_PAUSE_MENU está activo y DISABLE_LOCATION_SIGNS está desactivado.
  4. Se recorren los handlers de :pause_menu y se acumula la lista de comandos disponibles.
  5. Se muestran los comandos (pbShowCommands) y se ejecuta el effect del comando elegido.
  6. Si el effect devuelve true, el bucle termina y se cierra la escena.
Nota: pbStartPokemonMenu es un método de instancia de PokemonPauseMenu, no una función global. Se invoca con PokemonPauseMenu.new(scene).pbStartPokemonMenu. El menú de pausa lo lanza internamente Scene_Map cuando el jugador pulsa el botón de menú.

Cómo añadir una entrada personalizada

Para añadir una nueva opción al menú de pausa NO modifiques el script 048_UI/002_UI_PauseMenu.rb. En su lugar, registra un nuevo MenuHandler desde un plugin o un script adicional.

Ejemplo: Añadir entrada "Misiones"

# En un nuevo script o plugin, añade:
MenuHandlers.add(:pause_menu, :misiones, {
  "name"      => _INTL("Misiones"),
  "order"     => 40,   # Posición en el menú (menor = más arriba)
  "condition" => proc { next $game_switches[42] },  # Solo si el switch 42 está ON
  "effect"    => proc { |menu|
    pbFadeOutIn {
      # Aquí va la lógica de tu pantalla de misiones
      scene = MisionesScene.new
      screen = MisionesScreen.new(scene)
      screen.pbStartScreen
    }
    next false  # false = volver al menú, true = cerrar el menú
  }
})

Propiedades de MenuHandlers

Propiedad Tipo Descripción
"name" String Nombre que se muestra en el menú
"order" Integer Orden de aparición (menor número = más arriba)
"condition" Proc Condición para que aparezca la opción (devuelve true/false)
"effect" Proc Código que se ejecuta al seleccionar la opción

Eliminar una entrada del menú

Para eliminar una entrada existente, puedes sobreescribir su condición para que nunca se cumpla:

# Eliminar el Pokégear del menú de pausa
MenuHandlers.add(:pause_menu, :pokegear, {
  "name"      => _INTL("Pokégear"),
  "order"     => 40,
  "condition" => proc { next false },  # Nunca se muestra
  "effect"    => proc { |menu| next false }
})

Reordenar las entradas

Cada entrada tiene un valor "order" que determina su posición. Los valores definidos en 048_UI/002_UI_PauseMenu.rb son:

Clave Entrada Orden
:pokedexPokédex10
:partyPokémon20
:bagMochila30
:pokegearPokégear40
:town_mapMapa (si no hay Pokégear y se tiene :TOWNMAP)40
:trainer_cardTarjeta de Entrenador (usa $player.name)50
:saveGuardar60
:optionsOpciones70
:debugDebug (solo con $DEBUG)80
:quit_gameCerrar Juego90

Para mover una entrada, simplemente cambia su valor de "order". Por ejemplo, para poner la Mochila antes de la Pokédex:

MenuHandlers.add(:pause_menu, :bag, {
  "name"      => _INTL("Mochila"),
  "order"     => 5,   # Ahora aparece antes que Pokédex (10)
  "effect"    => proc { |menu|
    pbFadeOutIn { pbBagScreen }
    next false
  }
})

Entradas condicionales

Puedes hacer que una entrada aparezca solo bajo ciertas condiciones de juego:

Mostrar solo con cierta cantidad de medallas

MenuHandlers.add(:pause_menu, :liga, {
  "name"      => _INTL("Liga Pokémon"),
  "order"     => 45,
  "condition" => proc {
    next $player.badge_count >= 8  # Solo con 8 o más medallas
  },
  "effect"    => proc { |menu|
    pbMessage(_INTL("¡Ya tienes todas las medallas! Dirígete a la Liga Pokémon."))
    next false
  }
})

Mostrar solo si el jugador tiene un objeto clave

MenuHandlers.add(:pause_menu, :mapa_ciudad, {
  "name"      => _INTL("Mapa de Ciudad"),
  "order"     => 35,
  "condition" => proc {
    next $bag.has?(:TOWNMAP)  # Solo si tiene el Mapa en la mochila
  },
  "effect"    => proc { |menu|
    pbFadeOutIn { pbShowMap }
    next false
  }
})

Abrir el menú de pausa por script

El menú de pausa se abre automáticamente desde Scene_Map al pulsar la tecla de menú. Para invocarlo manualmente desde un script o evento (algo poco habitual), se crea una instancia de PokemonPauseMenu con su escena:

scene = PokemonPauseMenu_Scene.new
menu  = PokemonPauseMenu.new(scene)
menu.pbStartPokemonMenu

Desactivar el menú de pausa

En ciertas situaciones (como escenas cinemáticas o zonas especiales) puedes querer desactivar el acceso al menú:

# Desactivar el menú de pausa
$game_system.menu_disabled = true

# Volver a activar el menú de pausa
$game_system.menu_disabled = false
Nota: Si desactivas el menú de pausa, asegúrate de volver a activarlo en algún punto. De lo contrario, el jugador quedará sin acceso a funciones esenciales como guardar la partida.

Gráficos del menú

Los gráficos del menú de pausa se encuentran en la carpeta Graphics/UI/Pause Menu/. Los archivos principales son:

Archivo Descripción
bg.png Fondo del menú
cursor.png Cursor de selección
icon_*.png Iconos para cada entrada del menú