IA de Batalla
La Inteligencia Artificial (IA) de batalla en Pokémon Essentials controla las decisiones de los entrenadores NPC durante el combate. La IA decide qué movimiento usar, cuándo cambiar de Pokémon y cuándo usar objetos. El nivel de habilidad de la IA se puede configurar por tipo de entrenador.
Niveles de habilidad (Skill Level)
Cada tipo de entrenador tiene un valor de SkillLevel que se define en el archivo
trainer_types.txt del PBS. Este valor determina qué tan inteligente es la IA de ese entrenador.
Definir el SkillLevel
En el archivo PBS/trainer_types.txt, el campo SkillLevel se especifica como parte de
la definición del tipo de entrenador:
[POKEMONTRAINER]
Name = Entrenador Pokémon
SkillLevel = 32
[LEADER_Brock]
Name = Líder Brock
SkillLevel = 75
[RIVAL]
Name = Rival
SkillLevel = 100
[CHAMPION]
Name = Campeón
SkillLevel = 150
Rangos de habilidad
El valor de SkillLevel determina el comportamiento de la IA:
| Rango | Descripción | Comportamiento |
|---|---|---|
| 0 – 30 | Muy bajo | Elige movimientos de forma prácticamente aleatoria. No considera efectividad de tipos ni estados alterados. Ideal para entrenadores novatos de las primeras rutas. |
| 31 – 50 | Bajo | Tiene en cuenta la efectividad de tipo de forma básica. Puede elegir movimientos poco efectivos en ocasiones. Entrenadores comunes. |
| 51 – 75 | Medio | Considera efectividad de tipos, STAB, y evita movimientos inmunes. Puede usar movimientos de estado de forma básica. Líderes de gimnasio inferiores. |
| 76 – 99 | Alto | Toma decisiones más inteligentes: evita configurar movimientos duplicados, considera la habilidad del oponente, usa objetos de forma más estratégica. Líderes de gimnasio superiores. |
| 100+ | Muy alto / Experto | La IA toma las mejores decisiones posibles. Predice cambios, usa movimientos de estado de forma óptima, maximiza el daño, considera el equipo completo del jugador. Alto Mando y Campeón. |
Si no se especifica SkillLevel para un tipo de entrenador, el valor por defecto es
32.
Sistema de puntuación de movimientos
La IA funciona mediante un sistema de puntuación (scoring). Cada turno, la IA asigna una puntuación a cada movimiento disponible del Pokémon activo y elige el movimiento con la puntuación más alta.
Proceso de evaluación
- Puntuación inicial: Todos los movimientos comienzan con una puntuación de 100.
- Evaluación de cada movimiento: La IA analiza cada movimiento y modifica su puntuación
basándose en múltiples factores:
- Efectividad de tipo contra el objetivo.
- Si el movimiento recibe STAB.
- Si el movimiento puede noquear al oponente.
- Si el movimiento de estado es útil en la situación actual.
- Si el objetivo ya tiene un estado alterado (no intentar dormir a uno que ya está dormido).
- Si el movimiento ha fallado recientemente.
- Selección del movimiento: Se elige el movimiento con la puntuación más alta. Si hay empate, se elige aleatoriamente entre los empatados.
Ejemplos de puntuación
# Movimiento super efectivo: +20 a +40 puntos
# Movimiento con STAB: +10 a +20 puntos
# Movimiento que puede noquear: +30 a +50 puntos
# Movimiento poco efectivo: -20 a -40 puntos
# Movimiento inmune: se descarta (puntuación = 0)
# Movimiento de estado contra objetivo ya afectado: -90 puntos
# Movimiento de subida de stats ya al máximo: -80 puntos
Factores según SkillLevel
A mayor SkillLevel, la IA tiene en cuenta más factores:
- Skill ≥ 50: La IA considera la efectividad de tipos.
- Skill ≥ 60: La IA evita movimientos que no afectan al oponente (inmunidades).
- Skill ≥ 70: La IA considera las habilidades del oponente al evaluar movimientos.
- Skill ≥ 80: La IA prioriza movimientos que pueden noquear y evita desperdiciar turnos.
- Skill ≥ 100: La IA hace predicciones sobre cambios del jugador y actúa en consecuencia.
IA para cambio de Pokémon
La IA también decide cuándo cambiar de Pokémon. Los factores que considera son:
- Desventaja de tipo: Si el Pokémon activo tiene una desventaja de tipo significativa contra el oponente.
- PS bajos: Si el Pokémon activo tiene muy pocos PS y es probable que sea noqueado.
- Movimientos inútiles: Si ningún movimiento del Pokémon activo puede hacer daño significativo al oponente.
- Mejor opción disponible: Si hay un Pokémon en el equipo con ventaja de tipo clara.
La probabilidad de cambiar depende del SkillLevel:
# SkillLevel bajo (0-50): Rara vez cambia voluntariamente
# SkillLevel medio (51-75): Cambia si tiene clara desventaja
# SkillLevel alto (76-99): Cambia de forma estratégica
# SkillLevel experto (100+): Realiza cambios predictivos
IA para uso de objetos
Los entrenadores NPC pueden usar objetos durante la batalla si se les asignan en su definición. La IA decide cuándo usar cada objeto:
- Pociones / Restaurar Todo: Se usan cuando el Pokémon activo tiene PS bajos (generalmente por debajo del 25-50%).
- Cura Total: Se usa cuando el Pokémon activo tiene un estado alterado que lo debilita significativamente.
- Revivir: Se usa para revivir un Pokémon debilitado si la IA lo considera necesario.
- Potenciadores (Ataque X, etc.): Se usan al inicio del combate o en momentos oportunos si el
SkillLeveles suficientemente alto.
# Ejemplo en PBS/trainers.txt: asignar objetos a un entrenador
[LEADER_Brock,Brock]
Items = FULLRESTORE,FULLRESTORE
Pokemon = ONIX,14
Pokemon = GEODUDE,12
Flags de IA
Además del SkillLevel, se pueden usar flags de IA específicas para personalizar el comportamiento.
Estas se definen en el campo Flags del tipo de entrenador:
[CHAMPION]
Name = Campeón
SkillLevel = 150
Flags = HighAI,AlwaysSwitches
Flags disponibles
| Flag | Efecto |
|---|---|
HighAI |
Fuerza la IA a usar la lógica de SkillLevel alto independientemente del valor numérico. |
AlwaysSwitches |
El entrenador siempre intentará cambiar de Pokémon si tiene desventaja de tipo. |
NeverSwitches |
El entrenador nunca cambiará de Pokémon voluntariamente. |
IA personalizada
Es posible crear código de IA personalizado para entrenadores específicos o situaciones especiales. Esto se hace creando clases que hereden de las clases de IA existentes.
Archivos de IA
Los scripts de IA se encuentran en las siguientes secciones del código fuente:
- Battle_AI: Contiene la lógica principal de evaluación de movimientos.
- Battle_AI_Trainer: Contiene la lógica específica de decisiones de entrenadores (cambios, objetos).
- AI_Move_EffectScore: Contiene las funciones de puntuación para cada efecto de movimiento.
Ejemplo: Modificar la puntuación de un movimiento
Para cambiar cómo la IA valora un movimiento específico:
Battle::AI::Handlers::MoveEffectScore.add("ThunderWave",
proc { |score, move, user, target, ai, battle|
# Si el objetivo ya está paralizado, no usar
if target.status == :PARALYSIS
next 0
end
# Si el objetivo es tipo Eléctrico o Tierra, no usar
if target.pbHasType?(:ELECTRIC) || target.pbHasType?(:GROUND)
next 0
end
# Bonus si el usuario es más lento (paralizar al enemigo es más útil)
if user.speed < target.speed
score += 30
end
next score
}
)
Ejemplo: IA completamente personalizada
Para crear un entrenador con IA completamente personalizada, puedes sobreescribir el método de elección de movimiento:
# En un plugin o script adicional:
class Battle::AI
def pbChooseMoves_custom(idxBattler)
# Lógica personalizada aquí
# Ejemplo: siempre elegir el movimiento de mayor potencia
battler = @battle.battlers[idxBattler]
best_move = nil
best_power = 0
battler.eachMoveWithIndex do |move, i|
if move.baseDamage > best_power
best_power = move.baseDamage
best_move = i
end
end
return best_move || 0
end
end
Consejos para la IA
- Para entrenadores de las primeras rutas, un
SkillLevelde 20-40 es apropiado. - Para líderes de gimnasio, un
SkillLevelde 60-80 con 1-2 objetos curativos funciona bien. - Para el Alto Mando, usa un
SkillLevelde 100+ con varios objetos de recuperación. - El Campeón debería tener el
SkillLevelmás alto (120-200) y objetos estratégicos. - Los Pokémon salvajes no tienen IA; eligen movimientos aleatoriamente (excepto errantes con configuración especial).