Skip to content

Built-in Presets

Smart Trainers ships with a set of ready-to-use AI presets and battle bag presets. These range from completely random behavior to championship-level strategic play. You can use them directly or inherit from them to build custom trainers.

PresetIDSkillDescription
Randomsmart_trainers:random0Pure random move selection. No strategy whatsoever. All scoring is bypassed.
Easysmart_trainers:easy2Basic type awareness. Occasionally picks random moves (~40% of the time). Heals at 20% HP.
Mediumsmart_trainers:medium3STAB bonus, type effectiveness, switches on bad matchups. Priority finishing moves. Picks randomly ~20% of the time.
Hardsmart_trainers:hard4Full damage prediction, hazard setup, ability immunities, synergy rules. Only random ~5% of the time.
Expertsmart_trainers:expert5Inherits from Hard. Tighter select margin, lower variance. KO prediction, overkill penalty, accuracy weighting. Includes gimmick rules for Mega Evolution, Terastallization, Dynamax, and Z-Moves.
Championsmart_trainers:champion5Specialized champion-level AI with sweeper setup, Will-o-Wisp on physical attackers, strategic healing.
VGC Mastersmart_trainers:vgc_master5Doubles-optimized. Fake Out usage, Protect timing, speed control, redirection awareness, spread move management.
Gen 4 Cynthiasmart_trainers:gen4_cynthia5Recreation of Champion Cynthia from Pokemon Platinum. Setup sweeps with Swords Dance, toxic stalling against walls, priority finishes.

Each preset is designed around a distinct playstyle:

Random — The baseline. Useful for testing or creating deliberately incompetent trainers. Every move is equally likely regardless of the situation.

Easy — Represents a new trainer who understands types but makes frequent mistakes. Will occasionally use a healing item when critically low, but otherwise plays without much thought.

Medium — A competent trainer. Understands STAB, type effectiveness, and knows when to switch out of bad matchups. Uses priority moves to finish weakened opponents. The default for most NPC trainers.

Hard — A skilled battler. Runs full damage calculations, sets up entry hazards, respects ability immunities (won’t use Fire moves into Flash Fire), and considers team synergy. Rarely makes random choices.

Expert — A near-perfect player. Inherits everything from Hard and adds tighter decision-making with a smaller randomness margin. Predicts KOs and avoids overkill (won’t waste a powerful move when a weaker one would finish the job). Weighs accuracy into move selection. Includes rules for activating gimmick mechanics (Mega Evolution, Terastallization, Dynamax, Z-Moves) at appropriate times.

Champion — A boss-fight caliber opponent. Identifies setup opportunities and commits to sweeps. Uses Will-o-Wisp strategically against physical attackers. Heals at calculated moments to maximize value. Designed for climactic battles.

VGC Master — Built for doubles. Understands Fake Out pressure on the first turn, knows when to Protect (and when not to), manages speed control with Tailwind and Trick Room, uses redirection (Follow Me, Rage Powder), and handles spread move targeting intelligently.

Gen 4 Cynthia — A character-specific preset recreating Champion Cynthia’s battle style from Pokemon Platinum. Aggressively sets up Swords Dance when safe, uses Toxic to wear down walls, finishes with priority moves, and plays with the calculated aggression Cynthia is known for.

PresetIDItemsMax Uses
Emptysmart_trainers:emptyNone0
Trainer Basicsmart_trainers:trainer_basic2x Potion, 1x Antidote2
Trainer Advancedsmart_trainers:trainer_advanced2x Super Potion, 1x Full Heal3
Gym Leadersmart_trainers:gym_leader2x Hyper Potion, 1x Full Heal2
Elitesmart_trainers:elite4x Full Restore, 2x Max Revive4
Championsmart_trainers:champion4x Full Restore4
VGC Mastersmart_trainers:vgc_master2x Full Restore2
Gen 4 Cynthiasmart_trainers:gen4_cynthia2x Full Restore2

The most common workflow is to inherit from a built-in preset and customize specific behaviors. Use the parent field to inherit:

{
"parent": "smart_trainers:expert",
"max_select_margin": 0.05
}

This creates a config that inherits everything from the expert preset but overrides the randomness margin to be tighter (5% instead of the expert default).

How different field types are inherited:

  • Scalar values (move_bias, max_select_margin, etc.) — Child overrides parent. If the child omits the field, the parent’s value is used.
  • Object values (skill, personality, prediction, team_synergy) — Child replaces the entire object. If the child omits it, the parent’s object is inherited.
  • Rule lists (action_priorities, move_scoring_rules, switch_conditions, gimmick_rules):
    • null (not specified) — Inherits the parent’s list entirely
    • [] (empty array) — Clears the parent’s rules and starts fresh
    • [...rules...] — Child rules are prepended to parent rules. Child rules come first and are evaluated first.

A Fire-type Gym Leader that inherits from hard and adds weather-specific behavior:

{
"parent": "smart_trainers:hard",
"max_select_margin": 0.2,
"personality": {
"enabled": true,
"base_personality": {
"aggression": 0.75,
"setup_preference": 0.6,
"switchiness": 0.3
},
"trait_variance": 0.1
},
"action_priorities": [
{
"id": "setup_sunny_day",
"condition": "!q.field.has_weather('SunnyDay') && q.pokemon.current_hp_percent > 0.7",
"action_type": "move",
"move_filter": { "names": ["sunnyday"] },
"priority": 85,
"bias_multiplier": 3.0,
"score_bonus": 100.0
}
]
}

Because action_priorities is a non-empty array, these rules are prepended to the parent’s (hard) rules. The child’s Sunny Day rule runs first, then all of hard’s built-in rules apply.

Inheritance chains work across multiple levels. A config can inherit from a parent that itself inherits from a grandparent:

mypack:fire_gym → smart_trainers:hard → smart_trainers:medium

Circular inheritance (A inherits B inherits A) is detected and throws an error on load.