Skill & Personality
Skill & Personality
Section titled “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.
Skill Config
Section titled “Skill Config”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 }}Skill Fields
Section titled “Skill Fields”| Field | JSON Key | Type | Default | Description |
|---|---|---|---|---|
| Level | level | int (0—5) | 5 | Each 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 Moves | predict_opponent_moves | bool | true | Whether the AI predicts what moves the opponent might use. Affects threat evaluation. |
| Consider Type Matchups | consider_type_matchups | bool | true | Whether type effectiveness is factored into move and switch scoring. When false, the AI only looks at raw base power. |
| Use Damage Calc | use_damage_calc | bool | false | When 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. |
Skill Level Breakdown
Section titled “Skill Level Breakdown”| Level | Behavior |
|---|---|
| 0 | Always picks a random move. All scoring is bypassed. |
| 1 | Picks randomly ~80% of the time. Very unreliable. |
| 2 | Picks randomly ~40% of the time. Occasionally competent. |
| 3 | Picks randomly ~20% of the time. Decent player. |
| 4 | Picks randomly ~5% of the time. Strong player. |
| 5 | Never random. Always uses the full scoring system. |
Personality Config
Section titled “Personality Config”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 }}Personality Fields
Section titled “Personality Fields”| Field | JSON Key | Type | Default | Description |
|---|---|---|---|---|
| Enabled | enabled | bool | true | Whether personality traits affect scoring. |
| Base Personality | base_personality | object | Random | If not specified, a random personality is generated for each battle. If specified, this is the center that variance is applied around. |
| Trait Variance | trait_variance | double (0.0—0.5) | 0.15 | How much each trait can deviate from the base. 0.0 means identical every battle. 0.3 means noticeably different each time. |
| Consistency Within Battle | consistency_within_battle | bool | true | Whether the personality stays constant during a single battle versus re-rolling each turn. |
Personality Traits
Section titled “Personality Traits”All traits range from 0.0 to 1.0:
| Trait | JSON Key | At 0.0 | At 1.0 |
|---|---|---|---|
| Aggression | aggression | Defensive, prefers safe plays | Aggressive, favors offensive moves |
| Risk Tolerance | risk_tolerance | Conservative, picks reliable moves | Risk-taker, favors high-risk high-reward moves (low accuracy, recoil) |
| Setup Preference | setup_preference | Never uses setup moves | Heavily favors setup moves (Swords Dance, Dragon Dance, etc.) |
| Switchiness | switchiness | Stays in almost always | Switches frequently to maintain type advantage |
| Item Conservatism | item_conservatism | Uses items freely whenever helpful | Hoards items, only uses them in emergencies |
How Personality Affects Scoring
Section titled “How Personality Affects Scoring”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.