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
- Progresión natural: Aumenta gradualmente el tamaño y nivel del equipo del rival. No le des 6 Pokémon desde el primer combate.
- Consistencia: Mantén ciertos Pokémon en su equipo a lo largo de toda la historia para darle identidad.
- IVs y EVs progresivos: En las primeras batallas, usa IVs bajos. En combates finales, usa IVs de 31 y EVs repartidos.
- Objetos: Empieza sin objetos y añade
SITRUSBERRYoFULLRESTOREen combates avanzados. - Sprite único: Asegúrate de tener un sprite de entrenador propio en
Graphics/Trainers/RIVAL1.png.