Revanchas

El sistema de revanchas permite al jugador volver a luchar contra entrenadores que ya ha derrotado. En Pokémon Essentials, las revanchas se implementan mediante el sistema de teléfono (Pokégear) y versiones progresivas de los entrenadores, de forma similar a los juegos originales de Pokémon Gold/Silver/Crystal y sus remakes.

Cómo funciona el sistema

El flujo general del sistema de revanchas es:

  1. El jugador derrota a un entrenador por primera vez.
  2. El entrenador se registra en el teléfono del jugador (Pokégear).
  3. Después de cierto tiempo o número de pasos, el entrenador llama al jugador para pedirle una revancha.
  4. El jugador vuelve al mapa del entrenador y lucha contra él con un equipo mejorado.
  5. El proceso se repite con versiones progresivamente más fuertes del entrenador.

Registrar un entrenador para revanchas

Para que un entrenador pueda ofrecer revanchas, primero debe registrarse en el teléfono del jugador. Esto se hace en el evento del entrenador, después de la batalla inicial.

Funciones principales

Función Descripción
pbRegisterForRematch(event_id) Registra al entrenador del evento con el ID indicado para revanchas y lo agrega al teléfono.
pbTrainerIsRegistered?(trainer_type, trainer_name) Devuelve true si el entrenador ya está registrado en el teléfono.
pbPhoneRegisterBattle(message, event_id, trainer_type, trainer_name, max_battles) Registra al entrenador y define cuántas versiones de revancha tiene.

Ejemplo: Evento de entrenador con registro

# Página 1 del evento (antes de la batalla):
# Condición: Self Switch A está OFF

# Script:
pbTrainerBattle(:YOUNGSTER, "Miguel", 0, "¡No puedo creer que perdí!")
# Después de la batalla, registrar para revancha
pbRegisterForRematch(@event_id)
pbSetSelfSwitch("A", true)
# Página 2 del evento (después de la batalla, esperando revancha):
# Condición: Self Switch A está ON

# Script (si el entrenador quiere revancha):
if pbPhoneRematchReady?(@event_id)
  pbMessage("¡Oye, he estado entrenando! ¡Vamos a luchar de nuevo!")
  pbPhoneTrainerBattle(@event_id)
else
  pbMessage("Estoy entrenando duro para nuestra próxima batalla.")
end

Versiones progresivas de entrenadores

Cada entrenador puede tener múltiples versiones con equipos progresivamente más fuertes. Las versiones se definen en el archivo PBS trainers.txt con diferentes números de versión:

# trainers.txt

# Versión 0 (primera batalla)
[YOUNGSTER,Miguel,0]
Pokemon = RATTATA,10

# Versión 1 (primera revancha)
[YOUNGSTER,Miguel,1]
Pokemon = RATICATE,25
Pokemon = PIDGEOTTO,24

# Versión 2 (segunda revancha)
[YOUNGSTER,Miguel,2]
Pokemon = RATICATE,35
Pokemon = PIDGEOT,34
Pokemon = FEAROW,33

# Versión 3 (tercera revancha)
[YOUNGSTER,Miguel,3]
Pokemon = RATICATE,45
Pokemon = PIDGEOT,44
Pokemon = FEAROW,43
Pokemon = NOCTOWL,42

El sistema avanza automáticamente a la siguiente versión cada vez que el jugador gana una revancha, hasta llegar a la última versión disponible. Si no hay más versiones, se usa la última definida.

Cuántas versiones crear

Sistema de teléfono

Las revanchas están integradas con el sistema de teléfono del Pokégear. Los entrenadores registrados pueden llamar al jugador para:

Configurar llamadas de revancha

# En el archivo phone.txt o en Settings:
# Definir los mensajes del entrenador para las llamadas

# El sistema usa estas variables para las llamadas:
# - Mensajes genéricos de batalla
# - Mensajes de solicitud de revancha
# - Mensajes informativos

Forzar una llamada de revancha

# Forzar que un entrenador específico esté listo para revancha
pbSetReadyForRematch(@event_id)

# Verificar si un entrenador está listo para revancha
if pbPhoneRematchReady?(@event_id)
  pbMessage("¡Este entrenador quiere la revancha!")
end

Mecánicas de cooldown

Las revanchas no están disponibles inmediatamente después de ganar una batalla. Hay un sistema de enfriamiento (cooldown) que controla cuándo un entrenador está listo para otra revancha:

Factores que afectan el cooldown

Factor Descripción
Pasos caminados El jugador debe caminar un número mínimo de pasos entre revanchas.
Batallas realizadas El jugador debe completar cierto número de combates.
Tiempo transcurrido Puede haber un tiempo mínimo entre llamadas del mismo entrenador.

Configuración del cooldown

# En Settings
REMATCH_POKEMON_BATTLES = 4    # Número de batallas entre revanchas
REMATCH_POKEMON_STEPS   = 250  # Número de pasos entre revanchas

Cuando se cumplen las condiciones de cooldown, el entrenador puede llamar al jugador (si tiene teléfono registrado) o estar listo para luchar si el jugador vuelve a hablarle.

Configurar entrenadores revanchables

Guía paso a paso para hacer que un entrenador ofrezca revanchas:

Paso 1: Definir las versiones en trainers.txt

# Versión inicial (0)
[ACE_TRAINER,Laura,0]
Pokemon = ARCANINE,32
  Moves = FLAMETHROWER,EXTREME_SPEED,CRUNCH,WILL_O_WISP
Pokemon = STARMIE,32
  Moves = SURF,PSYCHIC,THUNDERBOLT,ICE_BEAM

# Primera revancha (1)
[ACE_TRAINER,Laura,1]
Pokemon = ARCANINE,42
  Moves = FLARE_BLITZ,EXTREME_SPEED,CRUNCH,WILD_CHARGE
  Item = LIFE_ORB
Pokemon = STARMIE,42
  Moves = HYDRO_PUMP,PSYCHIC,THUNDERBOLT,ICE_BEAM
  Item = CHOICE_SPECS
Pokemon = ROSERADE,41
  Moves = SLUDGE_BOMB,GIGA_DRAIN,SHADOW_BALL,SLEEP_POWDER

# Segunda revancha (2)
[ACE_TRAINER,Laura,2]
Pokemon = ARCANINE,55
  Moves = FLARE_BLITZ,EXTREME_SPEED,CLOSE_COMBAT,WILD_CHARGE
  Item = LIFE_ORB
Pokemon = STARMIE,55
  Moves = HYDRO_PUMP,PSYCHIC,THUNDERBOLT,ICE_BEAM
  Item = CHOICE_SPECS
Pokemon = ROSERADE,54
  Moves = SLUDGE_BOMB,ENERGY_BALL,SHADOW_BALL,SLEEP_POWDER
  Item = BLACK_SLUDGE
Pokemon = LUCARIO,55
  Moves = CLOSE_COMBAT,METEOR_MASH,EXTREME_SPEED,SWORDS_DANCE
  Item = FOCUS_SASH

Paso 2: Crear el evento en RPG Maker

El evento del entrenador necesita al menos dos páginas:

Página 1 — Batalla inicial

# Condición: Self Switch A está OFF
# Trigger: El jugador interactúa con el evento

pbTrainerBattle(:ACE_TRAINER, "Laura", 0, "¡Impresionante! Eres muy fuerte.")
pbMessage("Laura: Toma mi número. Me encantaría luchar contigo otra vez.")
pbRegisterForRematch(@event_id)
pbSetSelfSwitch("A", true)

Página 2 — Esperando revancha / Revancha disponible

# Condición: Self Switch A está ON
# Trigger: El jugador interactúa con el evento

if pbPhoneRematchReady?(@event_id)
  pbMessage("Laura: ¡Al fin nos vemos! ¡He mejorado mucho!")
  pbPhoneTrainerBattle(@event_id)
else
  pbMessage("Laura: Sigo entrenando. Espera mi llamada.")
end

Revanchas sin teléfono

Si prefieres no usar el sistema de teléfono, puedes implementar un sistema de revanchas más simple usando variables y versiones de entrenador directamente:

# Sistema de revancha simple sin teléfono
# Usa una variable del juego para rastrear la versión

version = $game_variables[50]  # Variable que almacena la versión actual

if version == 0
  # Primera batalla
  if pbTrainerBattle(:HIKER, "Roberto", 0)
    $game_variables[50] = 1
  end
elsif version == 1 && pbGet(20) > 4  # Var 20 = contador de medallas
  # Primera revancha (disponible después de 4 medallas)
  pbMessage("Roberto: ¡He entrenado mucho desde la última vez!")
  if pbTrainerBattle(:HIKER, "Roberto", 1)
    $game_variables[50] = 2
  end
elsif version == 2 && pbGet(20) > 7  # Después de 7 medallas
  # Segunda revancha
  pbMessage("Roberto: ¡Esta vez no perderé!")
  if pbTrainerBattle(:HIKER, "Roberto", 2)
    $game_variables[50] = 3
  end
else
  pbMessage("Roberto: Buen combate la última vez.")
end

Revanchas de líderes de gimnasio

Los líderes de gimnasio también pueden ofrecer revanchas. Es común que estén disponibles en post-game con equipos mejorados:

# En el gimnasio, después de la Liga Pokémon
# Condición: El jugador ya es campeón (Game Switch para post-game)

pbMessage("Líder Brock: Has llegado muy lejos. ¿Quieres luchar de nuevo?")
choices = ["Sí", "No"]
if pbMessage("¿Aceptas el desafío?", choices, 2) == 0
  pbTrainerBattle(:LEADER_Brock, "Brock", 1)  # Versión 1 = equipo post-game
end

Consejos y buenas prácticas