addedInput schema / properties / attacker / description
Added value: +"The attacking Pokémon: species plus optional level, nature, IVs, EVs, item, ability, boosts, status, Tera type, and current HP."
addedInput schema / properties / attacker / properties / ability / description
Added value: +"Ability name, e.g. \"Intimidate\", \"Protosynthesis\"; defaults to the species’ default ability."
addedInput schema / properties / attacker / properties / abilityOn / description
Added value: +"Force the ability on (true) or off (false), e.g. to compare Protosynthesis active vs not; omitted leaves it to the calc."
addedInput schema / properties / attacker / properties / boosts / description
Added value: +"Stat stages keyed by stat id (hp, atk, def, spa, spd, spe), each -6..+6; omitted stats are 0 (e.g. { atk: 2 } = +2 Attack)."
addedInput schema / properties / attacker / properties / curHP / description
Added value: +"Current HP when entering damaged, e.g. 120; defaults to full HP."
addedInput schema / properties / attacker / properties / evs / description
Added value: +"EVs keyed by stat id (hp, atk, def, spa, spd, spe), each 0-252 in steps of 4; omitted stats are 0, and a total above 510 is rejected."
addedInput schema / properties / attacker / properties / isDynamaxed / description
Added value: +"Treat this Pokémon as Dynamaxed (doubles HP and alters several moves)."
addedInput schema / properties / attacker / properties / item / description
Added value: +"Held item name, e.g. \"Choice Band\", \"Assault Vest\", \"Leftovers\"; the calc applies its damage, Speed, or bulk effect."
addedInput schema / properties / attacker / properties / ivs / description
Added value: +"IVs keyed by stat id (hp, atk, def, spa, spd, spe), each 0-31; omitted stats default to 31."
addedInput schema / properties / attacker / properties / level / description
Added value: +"Level 1-100; defaults to 100 in the damage tools and 50 in the stat/speed tools."
addedInput schema / properties / attacker / properties / moves
Added value: +{
+ "description": "Moveset names, e.g. [\"Earthquake\", \"Dragon Claw\"]; used by `calc_matchups` to pick the hardest-hitting move per defender.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+}
addedInput schema / properties / attacker / properties / nature / description
Added value: +"Nature name, e.g. \"Jolly\", \"Modest\", \"Adamant\"; defaults to Serious (neutral) when omitted."
addedInput schema / properties / attacker / properties / species / description
Added value: +"Species or form name, e.g. \"Garchomp\", \"Ogerpon-Wellspring\"."
addedInput schema / properties / attacker / properties / status / description
Added value: +"Pre-existing status such as \"brn\", \"par\", or \"tox\"; burn halves physical damage, paralysis cuts Speed."
addedInput schema / properties / attacker / properties / teraType / description
Added value: +"Tera type to use when the move is Terastallized, e.g. \"Fairy\"."
addedInput schema / properties / defender / description
Added value: +"The defending Pokémon, same fields as `attacker`; its Defense/SpD, HP, typing, and ability drive the result."
addedInput schema / properties / defender / properties / ability / description
Added value: +"Ability name, e.g. \"Intimidate\", \"Protosynthesis\"; defaults to the species’ default ability."
addedInput schema / properties / defender / properties / abilityOn / description
Added value: +"Force the ability on (true) or off (false), e.g. to compare Protosynthesis active vs not; omitted leaves it to the calc."
addedInput schema / properties / defender / properties / boosts / description
Added value: +"Stat stages keyed by stat id (hp, atk, def, spa, spd, spe), each -6..+6; omitted stats are 0 (e.g. { atk: 2 } = +2 Attack)."
addedInput schema / properties / defender / properties / curHP / description
Added value: +"Current HP when entering damaged, e.g. 120; defaults to full HP."
addedInput schema / properties / defender / properties / evs / description
Added value: +"EVs keyed by stat id (hp, atk, def, spa, spd, spe), each 0-252 in steps of 4; omitted stats are 0, and a total above 510 is rejected."
addedInput schema / properties / defender / properties / isDynamaxed / description
Added value: +"Treat this Pokémon as Dynamaxed (doubles HP and alters several moves)."
addedInput schema / properties / defender / properties / item / description
Added value: +"Held item name, e.g. \"Choice Band\", \"Assault Vest\", \"Leftovers\"; the calc applies its damage, Speed, or bulk effect."
addedInput schema / properties / defender / properties / ivs / description
Added value: +"IVs keyed by stat id (hp, atk, def, spa, spd, spe), each 0-31; omitted stats default to 31."
addedInput schema / properties / defender / properties / level / description
Added value: +"Level 1-100; defaults to 100 in the damage tools and 50 in the stat/speed tools."
addedInput schema / properties / defender / properties / moves
Added value: +{
+ "description": "Moveset names, e.g. [\"Earthquake\", \"Dragon Claw\"]; used by `calc_matchups` to pick the hardest-hitting move per defender.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+}
addedInput schema / properties / defender / properties / nature / description
Added value: +"Nature name, e.g. \"Jolly\", \"Modest\", \"Adamant\"; defaults to Serious (neutral) when omitted."
addedInput schema / properties / defender / properties / species / description
Added value: +"Species or form name, e.g. \"Garchomp\", \"Ogerpon-Wellspring\"."
addedInput schema / properties / defender / properties / status / description
Added value: +"Pre-existing status such as \"brn\", \"par\", or \"tox\"; burn halves physical damage, paralysis cuts Speed."
addedInput schema / properties / defender / properties / teraType / description
Added value: +"Tera type to use when the move is Terastallized, e.g. \"Fairy\"."
addedInput schema / properties / field / description
Added value: +"Battlefield conditions applied to the calc; omit it for a neutral Singles field with no weather, terrain, or hazards."
addedInput schema / properties / field / properties / attackerSide / description
Added value: +"Attacker-side flags, e.g. { isHelpingHand: true, isTailwind: true, spikes: 2 }."
addedInput schema / properties / field / properties / defenderSide / description
Added value: +"Defender-side flags, e.g. { isReflect: true, isLightScreen: true, isAuroraVeil: true, isSR: true }."
addedInput schema / properties / field / properties / gameType / description
Added value: +"Doubles spreads damage across targets; default Singles."
addedInput schema / properties / field / properties / terrain / description
Added value: +"Terrain: \"Electric\", \"Grassy\", \"Psychic\", or \"Misty\"; default none."
addedInput schema / properties / field / properties / weather / description
Added value: +"Weather: \"Sand\", \"Sun\", \"Rain\", \"Hail\", \"Snow\", \"Harsh Sunshine\", \"Heavy Rain\", or \"Strong Winds\"; default none."
addedInput schema / properties / generation / description
Added value: +"Generation whose data to use, 1-9 (default 9). Earlier generations omit moves, items, abilities, and forms that did not exist yet."
addedInput schema / properties / move / description
Added value: +"Move used by the attacker, e.g. \"Earthquake\", \"Make It Rain\"; must be a real move name."
changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "additionalProperties": false,
+ "properties": {
+ "attacker": {
+ "additionalProperties": false,
+ "description": "The attacking set as the calc resolved it, including the six stats it swung with.",
+ "properties": {
+ "ability": {
+ "description": "Ability used: the one supplied, else the species’ first ability; absent for a species with no abilities.",
+ "type": "string"
+ },
+ "boosts": {
+ "additionalProperties": false,
+ "description": "Stat stages in effect for the calculation; all six keys are present with 0 for unboosted stats.",
+ "properties": {
+ "atk": {
+ "description": "Stat stage for Attack: the stat behind physical damage dealt.",
+ "type": "number"
+ },
+ "def": {
+ "description": "Stat stage for Defense: the stat behind physical damage taken.",
+ "type": "number"
+ },
+ "hp": {
+ "description": "Stat stage for HP: hit points, which decide how much damage the set can take.",
+ "type": "number"
+ },
+ "spa": {
+ "description": "Stat stage for Special Attack: the stat behind special damage dealt.",
+ "type": "number"
+ },
+ "spd": {
+ "description": "Stat stage for Special Defense: the stat behind special damage taken.",
+ "type": "number"
+ },
+ "spe": {
+ "description": "Stat stage for Speed: turn order; the higher Speed moves first.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "hp",
+ "atk",
+ "def",
+ "spa",
+ "spd",
+ "spe"
+ ],
+ "type": "object"
+ },
+ "evs": {
+ "additionalProperties": {
+ "type": "number"
+ },
+ "description": "EVs the set was calculated with, keyed by stat id (hp, atk, def, spa, spd, spe) with stats left at 0 omitted; generations 1-2 fix all six at 252 when the call supplies none.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "item": {
+ "description": "Held item echoed back as supplied, e.g. \"Choice Band\", whose effect the calc applied; absent when the set carried none.",
+ "type": "string"
+ },
+ "ivs": {
+ "additionalProperties": false,
+ "description": "IVs the set was calculated with; all six keys are present, defaulting to 31.",
+ "properties": {
+ "atk": {
+ "description": "Individual value for Attack: the stat behind physical damage dealt.",
+ "type": "number"
+ },
+ "def": {
+ "description": "Individual value for Defense: the stat behind physical damage taken.",
+ "type": "number"
+ },
+ "hp": {
+ "description": "Individual value for HP: hit points, which decide how much damage the set can take.",
+ "type": "number"
+ },
+ "spa": {
+ "description": "Individual value for Special Attack: the stat behind special damage dealt.",
+ "type": "number"
+ },
+ "spd": {
+ "description": "Individual value for Special Defense: the stat behind special damage taken.",
+ "type": "number"
+ },
+ "spe": {
+ "description": "Individual value for Speed: turn order; the higher Speed moves first.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "hp",
+ "atk",
+ "def",
+ "spa",
+ "spd",
+ "spe"
+ ],
+ "type": "object"
+ },
+ "level": {
+ "description": "Level the set was calculated at; the damage tools default nested sets to level 100.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "nature": {
+ "description": "Nature the stats were computed with, e.g. \"Jolly\"; Serious when the call omitted one.",
+ "type": "string"
+ },
+ "species": {
+ "description": "Canonical species name used in the calculation, e.g. \"Garchomp\".",
+ "type": "string"
+ },
+ "stats": {
+ "additionalProperties": false,
+ "description": "The six stats of this set at its level, IVs, EVs, and nature; stat stages are applied inside the damage mechanics, so they are not folded in here.",
+ "properties": {
+ "atk": {
+ "description": "Final Attack: the stat behind physical damage dealt.",
+ "type": "number"
+ },
+ "def": {
+ "description": "Final Defense: the stat behind physical damage taken.",
+ "type": "number"
+ },
+ "hp": {
+ "description": "Final HP: hit points, which decide how much damage the set can take.",
+ "type": "number"
+ },
+ "spa": {
+ "description": "Final Special Attack: the stat behind special damage dealt.",
+ "type": "number"
+ },
+ "spd": {
+ "description": "Final Special Defense: the stat behind special damage taken.",
+ "type": "number"
+ },
+ "spe": {
+ "description": "Final Speed: turn order; the higher Speed moves first.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "hp",
+ "atk",
+ "def",
+ "spa",
+ "spd",
+ "spe"
+ ],
+ "type": "object"
+ },
+ "status": {
+ "description": "Pre-existing status such as \"brn\", \"par\", or \"tox\"; absent when the set entered healthy.",
+ "type": "string"
+ },
+ "teraType": {
+ "description": "Tera type echoed back when the call supplied one; absent otherwise.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "species",
+ "level",
+ "nature",
+ "evs",
+ "ivs",
+ "boosts",
+ "stats"
+ ],
+ "type": "object"
+ },
+ "damage": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+ },
+ {
+ "items": {
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+ },
+ "type": "array"
+ }
+ ],
+ "description": "Damage dealt by the attack: a single number for a straight-damage move (0 when the defender is immune), a flat list of rolls for a move that rolls its own damage (e.g. False Swipe), or one roll list per hit for a multi-hit move (e.g. Population Bomb, Dragon Darts)."
+ },
+ "damageRange": {
+ "additionalItems": false,
+ "description": "[minimum, maximum] damage: `calculate_damage` totals every roll (multi-hit moves are summed), while `calc_matchups` reports the flattened per-hit rolls, so its bounds stay single-hit values. [0, 0] means nothing could be calculated.",
+ "items": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "number"
+ }
+ ],
+ "maxItems": 2,
+ "minItems": 2,
+ "type": "array"
+ },
+ "defender": {
+ "additionalProperties": false,
+ "description": "The defending set as the calc resolved it, including the six stats it was hit on.",
+ "properties": {
+ "ability": {
+ "description": "Ability used: the one supplied, else the species’ first ability; absent for a species with no abilities.",
+ "type": "string"
+ },
+ "boosts": {
+ "additionalProperties": false,
+ "description": "Stat stages in effect for the calculation; all six keys are present with 0 for unboosted stats.",
+ "properties": {
+ "atk": {
+ "description": "Stat stage for Attack: the stat behind physical damage dealt.",
+ "type": "number"
+ },
+ "def": {
+ "description": "Stat stage for Defense: the stat behind physical damage taken.",
+ "type": "number"
+ },
+ "hp": {
+ "description": "Stat stage for HP: hit points, which decide how much damage the set can take.",
+ "type": "number"
+ },
+ "spa": {
+ "description": "Stat stage for Special Attack: the stat behind special damage dealt.",
+ "type": "number"
+ },
+ "spd": {
+ "description": "Stat stage for Special Defense: the stat behind special damage taken.",
+ "type": "number"
+ },
+ "spe": {
+ "description": "Stat stage for Speed: turn order; the higher Speed moves first.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "hp",
+ "atk",
+ "def",
+ "spa",
+ "spd",
+ "spe"
+ ],
+ "type": "object"
+ },
+ "evs": {
+ "additionalProperties": {
+ "type": "number"
+ },
+ "description": "EVs the set was calculated with, keyed by stat id (hp, atk, def, spa, spd, spe) with stats left at 0 omitted; generations 1-2 fix all six at 252 when the call supplies none.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "item": {
+ "description": "Held item echoed back as supplied, e.g. \"Choice Band\", whose effect the calc applied; absent when the set carried none.",
+ "type": "string"
+ },
+ "ivs": {
+ "additionalProperties": false,
+ "description": "IVs the set was calculated with; all six keys are present, defaulting to 31.",
+ "properties": {
+ "atk": {
+ "description": "Individual value for Attack: the stat behind physical damage dealt.",
+ "type": "number"
+ },
+ "def": {
+ "description": "Individual value for Defense: the stat behind physical damage taken.",
+ "type": "number"
+ },
+ "hp": {
+ "description": "Individual value for HP: hit points, which decide how much damage the set can take.",
+ "type": "number"
+ },
+ "spa": {
+ "description": "Individual value for Special Attack: the stat behind special damage dealt.",
+ "type": "number"
+ },
+ "spd": {
+ "description": "Individual value for Special Defense: the stat behind special damage taken.",
+ "type": "number"
+ },
+ "spe": {
+ "description": "Individual value for Speed: turn order; the higher Speed moves first.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "hp",
+ "atk",
+ "def",
+ "spa",
+ "spd",
+ "spe"
+ ],
+ "type": "object"
+ },
+ "level": {
+ "description": "Level the set was calculated at; the damage tools default nested sets to level 100.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "nature": {
+ "description": "Nature the stats were computed with, e.g. \"Jolly\"; Serious when the call omitted one.",
+ "type": "string"
+ },
+ "species": {
+ "description": "Canonical species name used in the calculation, e.g. \"Garchomp\".",
+ "type": "string"
+ },
+ "stats": {
+ "additionalProperties": false,
+ "description": "The six stats of this set at its level, IVs, EVs, and nature; stat stages are applied inside the damage mechanics, so they are not folded in here.",
+ "properties": {
+ "atk": {
+ "description": "Final Attack: the stat behind physical damage dealt.",
+ "type": "number"
+ },
+ "def": {
+ "description": "Final Defense: the stat behind physical damage taken.",
+ "type": "number"
+ },
+ "hp": {
+ "description": "Final HP: hit points, which decide how much damage the set can take.",
+ "type": "number"
+ },
+ "spa": {
+ "description": "Final Special Attack: the stat behind special damage dealt.",
+ "type": "number"
+ },
+ "spd": {
+ "description": "Final Special Defense: the stat behind special damage taken.",
+ "type": "number"
+ },
+ "spe": {
+ "description": "Final Speed: turn order; the higher Speed moves first.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "hp",
+ "atk",
+ "def",
+ "spa",
+ "spd",
+ "spe"
+ ],
+ "type": "object"
+ },
+ "status": {
+ "description": "Pre-existing status such as \"brn\", \"par\", or \"tox\"; absent when the set entered healthy.",
+ "type": "string"
+ },
+ "teraType": {
+ "description": "Tera type echoed back when the call supplied one; absent otherwise.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "species",
+ "level",
+ "nature",
+ "evs",
+ "ivs",
+ "boosts",
+ "stats"
+ ],
+ "type": "object"
+ },
+ "description": {
+ "description": "One-line summary of the whole matchup, e.g. \"252 Atk Choice Band Garchomp Dragon Claw vs. 252 HP / 252+ Def Corviknight: 64-76 (16.4 - 19.5%) -- possible 6HKO\"; an explicit 0-damage note when the calc could not describe it.",
+ "type": "string"
+ },
+ "field": {
+ "additionalProperties": false,
+ "description": "The battlefield the calc ran under, echoed back with its defaults filled in.",
+ "properties": {
+ "gameType": {
+ "description": "How many targets the move hit; \"Singles\" unless the call asked for Doubles.",
+ "enum": [
+ "Singles",
+ "Doubles"
+ ],
+ "type": "string"
+ },
+ "terrain": {
+ "description": "Terrain in effect, e.g. \"Electric\", \"Grassy\"; absent when the field had none.",
+ "type": "string"
+ },
+ "weather": {
+ "description": "Weather in effect, e.g. \"Sun\", \"Rain\", \"Sand\"; absent when the field had none.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "gameType"
+ ],
+ "type": "object"
+ },
+ "generation": {
+ "description": "Generation whose data and mechanics were used, 1-9.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "koChance": {
+ "description": "Human-readable KO chance, e.g. \"guaranteed OHKO\" or \"31.3% chance to 2HKO\"; an empty string when no KO is possible (e.g. False Swipe), and absent when the calc could not describe the matchup at all, which is the immunity case.",
+ "type": "string"
+ },
+ "move": {
+ "description": "Canonical move name that was calculated, e.g. \"Dragon Claw\".",
+ "type": "string"
+ }
+ },
+ "required": [
+ "generation",
+ "attacker",
+ "defender",
+ "move",
+ "field",
+ "damage",
+ "damageRange",
+ "description"
+ ],
+ "type": "object"
+}