Rival

El rival es uno de los personajes más importantes de cualquier fangame Pokémon. En Pokémon Essentials, puedes crear un rival cuyo equipo evolucione a lo largo del juego y se adapte según el Pokémon inicial que eligió el jugador.


Concepto: Versiones de entrenador

La clave para un rival progresivo está en la propiedad Version del archivo trainers.txt. Cada versión representa un encuentro diferente con el mismo entrenador, permitiendo que su equipo crezca a medida que avanza la historia.

Versión Momento del juego Ejemplo
0 Primer encuentro 1 Pokémon, nivel 5
1 Después del 2º gimnasio 3 Pokémon, niveles 18-20
2 Mitad del juego 4 Pokémon, niveles 30-34
3 Antes de la Liga 6 Pokémon, niveles 48-52
4 Post-game 6 Pokémon, niveles 65-70

Equipo basado en la elección del jugador

Lo más común es que el rival elija el Pokémon inicial con ventaja de tipo sobre el que eligió el jugador. Para gestionar esto, se usa una Variable de juego que almacena la elección y luego se consulta en los eventos del rival.

Paso 1: Guardar la elección del jugador

En el evento donde el jugador elige su inicial, guarda la elección en una variable de RPG Maker (por ejemplo, Variable 7):

# En el evento de elección de inicial
# Variable 7 = 0 → Eligió Planta
# Variable 7 = 1 → Eligió Fuego
# Variable 7 = 2 → Eligió Agua

# Ejemplo: si el jugador elige a Chikorita
pbAddPokemon(:CHIKORITA, 5)
pbSet(7, 0)  # Guardamos que eligió Planta

Paso 2: Definir versiones del rival en trainers.txt

Crea distintas entradas para el rival según el inicial del jugador. Usa un esquema de versiones organizado:

Versión Significado
0, 1, 2 Primer combate: versiones para Planta, Fuego, Agua
3, 4, 5 Segundo combate: versiones para Planta, Fuego, Agua
6, 7, 8 Tercer combate: versiones para Planta, Fuego, Agua
# ── Primer combate: jugador eligió Planta → rival tiene Fuego ──
[RIVAL1,Silver,0]
LoseText = ¡Hmph! Esto no ha terminado...
Pokemon = CYNDAQUIL,5
    Moves = TACKLE,LEER

# ── Primer combate: jugador eligió Fuego → rival tiene Agua ──
[RIVAL1,Silver,1]
LoseText = ¡Hmph! Esto no ha terminado...
Pokemon = TOTODILE,5
    Moves = SCRATCH,LEER

# ── Primer combate: jugador eligió Agua → rival tiene Planta ──
[RIVAL1,Silver,2]
LoseText = ¡Hmph! Esto no ha terminado...
Pokemon = CHIKORITA,5
    Moves = TACKLE,GROWL

# ── Segundo combate: jugador eligió Planta ──
[RIVAL1,Silver,3]
LoseText = Has mejorado... pero yo más.
Pokemon = QUILAVA,18
    Moves = EMBER,QUICKATTACK,SMOKESCREEN,FLAMEWHEEL
Pokemon = GASTLY,16
    Moves = LICK,HYPNOSIS,MEANDLOOK,CURSE
Pokemon = ZUBAT,16
    Moves = LEECHLIFE,SUPERSONIC,BITE,CONFUSERAY

# ── Segundo combate: jugador eligió Fuego ──
[RIVAL1,Silver,4]
LoseText = Has mejorado... pero yo más.
Pokemon = CROCONAW,18
    Moves = WATERGUN,BITE,SCRATCH,RAGE
Pokemon = GASTLY,16
    Moves = LICK,HYPNOSIS,MEANDLOOK,CURSE
Pokemon = ZUBAT,16
    Moves = LEECHLIFE,SUPERSONIC,BITE,CONFUSERAY

# ── Segundo combate: jugador eligió Agua ──
[RIVAL1,Silver,5]
LoseText = Has mejorado... pero yo más.
Pokemon = BAYLEEF,18
    Moves = RAZORLEAF,REFLECT,POISONPOWDER,SYNTHESIS
Pokemon = GASTLY,16
    Moves = LICK,HYPNOSIS,MEANDLOOK,CURSE
Pokemon = ZUBAT,16
    Moves = LEECHLIFE,SUPERSONIC,BITE,CONFUSERAY

Evento del rival con equipos variables

En RPG Maker, crea un evento para el combate con el rival usando Conditional Branch basado en la Variable 7:

Método con Script (recomendado)

# Calcular la versión del entrenador según el inicial del jugador
# "combate_num" es el número de combate (0 = primero, 1 = segundo, etc.)
combate_num = 0  # Cambiar según el punto de la historia
inicial = pbGet(7)  # 0 = Planta, 1 = Fuego, 2 = Agua
version = (combate_num * 3) + inicial

TrainerBattle.start(:RIVAL1, "Silver", version)

Método con páginas de evento (alternativo)

Puedes crear el evento del rival con Conditional Branch (Bifurcación Condicional) de RPG Maker:

# Página del evento del rival:

# ◆ Mensaje: Silver: ¡Te voy a aplastar!
# ◆ Conditional Branch: [Variable 0007] == 0
#   ◆ Script: TrainerBattle.start(:RIVAL1, "Silver", 0)
# ◆ Branch End
# ◆ Conditional Branch: [Variable 0007] == 1
#   ◆ Script: TrainerBattle.start(:RIVAL1, "Silver", 1)
# ◆ Branch End
# ◆ Conditional Branch: [Variable 0007] == 2
#   ◆ Script: TrainerBattle.start(:RIVAL1, "Silver", 2)
# ◆ Branch End
# ◆ Mensaje: Silver: ¡No creas que esto ha terminado!
# ◆ Self Switch A = ON

Ejemplo completo: evento del rival

Este es un ejemplo de cómo se estructura un evento de combate con el rival en un mapa:

Configuración del evento

Propiedad Valor
Nombre Rival_Silver
Trigger Player Touch (Toque del Jugador) o Autorun
Graphic NPC_Silver.png
Páginas 2 (antes y después del combate)

Página 1 (combate)

Condición: Self Switch A está OFF.

# ◆ Move Route: Player (Esperar)
#   ◇ Turn toward This Event
# ◆ Mensaje: \bSilver\b: ¡Tú otra vez! A ver si has mejorado.
# ◆ Script:
combate_num = 1
inicial = pbGet(7)
version = (combate_num * 3) + inicial
TrainerBattle.start(:RIVAL1, "Silver", version)
# ◆ Mensaje: \bSilver\b: Hmph... entrenaré más duro.
# ◆ Move Route: This Event
#   ◇ Move Away from Player
#   ◇ Move Away from Player
#   ◇ Move Away from Player
# ◆ Erase Event (temporalmente)
# ◆ Self Switch A = ON

Página 2 (post-combate)

Condición: Self Switch A está ON. El evento desaparece o muestra un diálogo diferente.


Consejos para diseñar un buen rival