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

  1. Puntuación inicial: Todos los movimientos comienzan con una puntuación de 100.
  2. 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.
  3. 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:

IA para cambio de Pokémon

La IA también decide cuándo cambiar de Pokémon. Los factores que considera son:

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:

# 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:

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