Skip to content

Skill & Personality

These two config sections work together to define how competent a trainer is and how they play. Skill determines whether the AI even attempts to make smart decisions, while personality adds flavor and variance to those decisions.

Controls how “smart” the AI is at a fundamental level. Each turn, the AI rolls a skill check — if it fails, it picks a random move instead of scoring all options. Higher skill levels fail less often.

{
"skill": {
"level": 5,
"predict_opponent_moves": true,
"consider_type_matchups": true,
"use_damage_calc": true
}
}
FieldJSON KeyTypeDefaultDescription
Levellevelint (0—5)5Each turn, the AI rolls a skill check. If it fails, it picks a random move and skips all scoring. Level 0 always fails. Level 5 never fails.
Predict Opponent Movespredict_opponent_movesbooltrueWhether the AI predicts what moves the opponent might use. Affects threat evaluation.
Consider Type Matchupsconsider_type_matchupsbooltrueWhether type effectiveness is factored into move and switch scoring. When false, the AI only looks at raw base power.
Use Damage Calcuse_damage_calcboolfalseWhen true, move scores are based on estimated damage percentage instead of just base power. Considers stats, abilities, items, weather, and terrain. More accurate but computationally heavier.
LevelBehavior
0Always picks a random move. All scoring is bypassed.
1Picks randomly ~80% of the time. Very unreliable.
2Picks randomly ~40% of the time. Occasionally competent.
3Picks randomly ~20% of the time. Decent player.
4Picks randomly ~5% of the time. Strong player.
5Never random. Always uses the full scoring system.

Gives the AI a distinct personality that subtly influences its decisions. Two trainers with the same config will play slightly differently based on their personality traits.

{
"personality": {
"enabled": true,
"base_personality": {
"aggression": 0.8,
"risk_tolerance": 0.6,
"setup_preference": 0.7,
"switchiness": 0.3,
"item_conservatism": 0.4
},
"trait_variance": 0.1,
"consistency_within_battle": true
}
}
FieldJSON KeyTypeDefaultDescription
EnabledenabledbooltrueWhether personality traits affect scoring.
Base Personalitybase_personalityobjectRandomIf not specified, a random personality is generated for each battle. If specified, this is the center that variance is applied around.
Trait Variancetrait_variancedouble (0.0—0.5)0.15How much each trait can deviate from the base. 0.0 means identical every battle. 0.3 means noticeably different each time.
Consistency Within Battleconsistency_within_battlebooltrueWhether the personality stays constant during a single battle versus re-rolling each turn.

All traits range from 0.0 to 1.0:

TraitJSON KeyAt 0.0At 1.0
AggressionaggressionDefensive, prefers safe playsAggressive, favors offensive moves
Risk Tolerancerisk_toleranceConservative, picks reliable movesRisk-taker, favors high-risk high-reward moves (low accuracy, recoil)
Setup Preferencesetup_preferenceNever uses setup movesHeavily favors setup moves (Swords Dance, Dragon Dance, etc.)
SwitchinessswitchinessStays in almost alwaysSwitches frequently to maintain type advantage
Item Conservatismitem_conservatismUses items freely whenever helpfulHoards items, only uses them in emergencies

Each trait applies a multiplier to the relevant action type. The multiplier is calculated using linear interpolation (lerp) between a minimum and maximum value.

For example, with aggression = 0.8:

  • Damaging moves get a x1.3 boost (lerp from 0.7 at aggression=0 to 1.3 at aggression=1)
  • Status moves get a corresponding reduction

This means an aggressive trainer will lean toward attacking moves even when a status move might score similarly, while a defensive trainer (low aggression) will lean toward safe, non-damaging plays.