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 Cierra el menú de pausa

Clase PauseMenu

El menú de pausa se gestiona a través de la clase PauseMenu en el script UI_PauseMenu. Esta clase se encarga de construir la lista de opciones, mostrarlas y ejecutar la acción correspondiente al seleccionar cada una.

Estructura básica

# El menú de pausa se abre llamando a:
pbPauseMenu

# Internamente, esto crea una instancia de PauseMenu
# y la ejecuta con pbStartPokemonMenu

Método principal: pbStartPokemonMenu

Este método construye la lista de comandos y los muestra. El flujo es:

  1. Se crea un array de comandos vacío.
  2. Se evalúan las condiciones para cada entrada.
  3. Se añaden las entradas que cumplen las condiciones.
  4. Se muestra el menú y se espera la selección del jugador.
  5. Se ejecuta la acción correspondiente.

Cómo añadir una entrada personalizada

Para añadir una nueva opción al menú de pausa, debes modificar el script UI_PauseMenu. El proceso consiste en registrar un nuevo MenuHandler.

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 por defecto son aproximadamente:

Entrada Orden
Pokédex 10
Pokémon 20
Mochila 30
Pokégear 40
Tarjeta Entrenador 50
Guardar 60
Opciones 70
Debug 80
Salir 90

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

Puedes abrir el menú de pausa directamente desde un evento con el siguiente comando de script:

# Abrir el menú de pausa manualmente
pbPauseMenu

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ú