Summary

Description
A Pokémon species is a single named entity in the Pokédex.
Data path
resources/data/pokemon/
Schema
https://poketools.gamestuff.info/data/schema/pokemon.json

Filename

Pokémon identifier

A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

Top-level keys

Version group identifier

A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

Fields

name

The entity’s user-facing name. All of UTF-8 is valid here, so use “é” where appropriate.

type

string

required

position

The sorting position for this entity.

type

integer

default

0

required

numbers

A mapping describing the numbers this species has across the Pokédexes it appears in. Keys are Pokédex identifiers, values are numbers.

type
mapping[string: integer]

pokemon

Pokémon are defined as a form with different types, moves, or other game- changing properties; e.g. There are four separate “Pokemon” for Deoxys, but only one for Unown.

Keys are used as identifiers for referencing that specific Pokémon.

type
mapping
minimum values
1
required

name

The entity’s user-facing name. All of UTF-8 is valid here, so use “é” where appropriate.

type

string

required

genus

The short flavor text, such as “Seed” or “Lizard”; usually affixed with the word “Pokémon”.

type
string

color

Identifier for the Pokémon Color, used for a search function in the games. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

shape

Identifier for the Pokémon Shape, used for a search function in the games. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

habitat

Identifier for the Pokémon Habitat, used for a search function in the games. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

female_rate

Percentage of wild encounters that are female.

type
integer
minimum
0
maximum
100

capture_rate

Wild capture rate, used as part of the Pokéball calculations.

type
integer
minimum
1
maximum
255
required

baby

Is this a baby (and thus unable to breed)?

type
boolean
default
false

hatch_steps

Number of steps in one egg cycle. The number of cycles before hatching depends on the generation.

type
integer
minimum
1

growth_rate

Growth Rate identifier. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type

string

pattern

^[a-z0-9\-]+$ (Test)

required

forms_switchable

Has manually-switchable forms?

type
boolean
default
false

forms_note

A special note about how forms work with the Pokémon.

Textual content formatted with Markdown. See the CommonMark Spec for details.

type
string

pal_park

Pal Park data, for version groups with the Pal Park.

type
mapping

area

Pal Park Area identifier. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type

string

pattern

^[a-z0-9\-]+$ (Test)

required

rate

Encounter rate in the Pal Park.

type
integer
minimum
1
maximum
100
required

score

Points earned when capturing this Pokémon in the Pal Park game.

type
integer
minimum
1
required

default

Is this entity the default in the collection?

type
boolean
default
false

height

Height, in decimeters.

type
integer
minimum
1
required

weight

Weight, in hectograms.

type
integer
minimum
1
required

experience

Base experience earned when defeating this Pokémon in battle.

type
integer
minimum
1
required

types

A list of Type identifiers.

type
list
required
minimum values
1

egg_groups

A list of Egg Group identifiers.

type
list

mega

Is this a Mega Evolution?

type
boolean
default
false

stats

A mapping describing this Pokémon’s stats. Keys are Stat identifiers.

type
mapping[string: mapping]
required

base_value

Base stat value

type
integer
minimum
1
maximum
255
required

effort_change

EV earned by opponent when this Pokémon is defeated in battle.

type
integer
minimum
0
required

evolution_conditions

A mapping describing how a Pokémon can evolve into this one. Keys are Evolution Trigger identifiers. Values are one or more of the conditions listed below. A Pokémon will evolve under the given trigger when all of the conditions are true. See existing data for examples.

type
mapping[string: mapping]

bag_item

Identifier for the Item that must be in the player’s bag. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

trigger_item

Identifier for the Item that will trigger evolution (e.g. evolutionary stone). A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

minimum_level

Minimum level

type
integer
minimum
2
maximum
100

gender

Gender identifier. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

location

Identifier for the Location where evolution can take place. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

held_item

Identifier for the Item that must be held. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

time_of_day

A list of identifiers for the Time of Day when evolution can take place. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

known_move

Identifier for the Move the Pokémon must know. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

known_move_type

Identifier for the Type of Move a Pokémon must know. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

minimum_happiness

Minimum happiness

type
integer
minimum
1
maximum
255

minimum_beauty

Minimum beauty

type
integer
minimum
1
maximum
255

minimum_affection

Minimum affection (from Pokémon-Amie or similar)

type
integer
minimum
1
maximum
5

party_species

Identifier for the Pokémon Species that must be in the party. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

party_type

Identifier for the Type of Pokémon that must be in the party. with. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

physical_stats_difference

The difference in physical stats:

  • Attack > Defense → 1
  • Attack < Defense → -1
  • Attack = Defense → 0
type
integer
values
  • -1
  • 0
  • 1

traded_for_species

Identifier for the Pokémon Species that must be traded for. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

overworld_weather

Identifier for the Weather condition that must be present. A machine-usable name for the entity. This is usually a munged version of the entity name. An identifier must consist only of lowercase ASCII characters, 0-9, and/or a hyphen.

i.e. anything unique to the entity matching the regular expression ^[a-z0-9\-]+$ (Test it here)

type
string
pattern
^[a-z0-9\-]+$ (Test)

console_inverted

Is the console upside-down?

type
boolean

abilities

A mapping describing the Pokémon’s Abilities. Keys are the Ability identifier.

type
mapping[string: mapping]

position

The sorting position for this entity.

type

integer

default

0

required

hidden

Is this a Hidden Ability?

type
boolean
default
false

wild_held_items

A two-level mapping describing items this Pokémon can be found holding in the wild. First-level keys are Version identifiers; second-level keys are Item identifiers. Values are the percent chance. For example:

gold:
    lucky-egg: 5
type
mapping[string: mapping[string: integer]]
minimum
1
maximum
100

flavor_text

A mapping describing how this Pokémon is described in the Pokédex. Keys are Version identifiers. Values are flavor text.

type
mapping[string: string]

How this entity is described in-game. Include line breaks where appropriate.

type
string

evolution_parent

A special string in the format {species}/{pokemon} for the Pokémon that evolves into this one.

type
string

forms

An individual form of a Pokémon.

This includes every variant (except shiny differences) of every Pokémon, regardless of how the games treat them. Even Pokémon with no alternate forms have one form to represent their lone “normal” form.

Keys are used as identifiers for referencing that specific Form.

type
mapping
required
minimum values
1

name

The entity’s user-facing name. All of UTF-8 is valid here, so use “é” where appropriate.

type

string

required

form_name

Similar to name, except only distinguishes this Form from other Forms of the same Pokémon. E.g. name = Unown A, form_name = A

type
string
required

default

Is this entity the default in the collection?

type
boolean
default
false

battle_only

Is this Form only available in battle?

type
boolean
default
false

pokeathlon_stats

This Form’s base Pokéathlon stats. Keys are Pokéathlon Stat identifiers.

type
mapping[string: mapping]
base_value
type
integer
minimum
0
maximum
5
required
range

A range is either a single integer or two integers separated by a hyphen, e.g. 5 or 1-10.

minimum
0
maximum
5
required

icon

Menu icon. The path to the asset, relative to the entity type’s asset directory.

type
string

sprites

List of battle sprites. The path to the asset, relative to the entity type’s asset directory.

type

string

type

list[string]

art

List of concept art. Not all Forms will have this. The path to the asset, relative to the entity type’s asset directory.

type

string

type

list[string]

footprint

Pokémon’s footprint. The path to the asset, relative to the entity type’s asset directory.

type
string

cry

Pokémon’s cry The path to the asset, relative to the entity type’s asset directory.

type
string

JSON Schema

View raw

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://poketools.gamestuff.info/data/schema/pokemon.json",
  "title": "Pokemon Species",
  "description": "A Pokémon species is a single named entity in the Pokédex.",
  "type": "object",
  "propertyNames": {
    "title": "Version Group identifier",
    "allOf": [
      {
        "$ref": "types/identifier.json"
      },
      {
        "type": "string",
        "$filters": "versionGroupIdentifier"
      }
    ]
  },
  "minProperties": 1,
  "additionalProperties": {
    "type": "object",
    "properties": {
      "name": {
        "$ref": "types/name.json"
      },
      "position": {
        "$ref": "types/position.json"
      },
      "numbers": {
        "title": "Pokedex numbers",
        "type": "object",
        "minProperties": 1,
        "propertyNames": {
          "allOf": [
            {
              "$ref": "types/identifier.json"
            },
            {
              "type": "string",
              "$filters": [
                "pokedexIdentifier",
                {
                  "$func": "versionGroupHasPokedex",
                  "$vars": {
                    "versionGroup": {
                      "$ref": "1#"
                    }
                  }
                }
              ]
            }
          ]
        }
      },
      "pokemon": {
        "title": "Pokemon",
        "description": "Pokémon are defined as a form with different types, moves, or other game-changing properties; e.g. There are four separate \"Pokemon\" for Deoxys, but only one for Unown.",
        "minProperties": 1,
        "propertyNames": {
          "$ref": "types/identifier.json"
        },
        "additionalProperties": {
          "type": "object",
          "properties": {
            "genus": {
              "title": "Genus",
              "type": "string"
            },
            "color": {
              "title": "Color",
              "allOf": [
                {
                  "$ref": "types/identifier.json"
                },
                {
                  "type": "string",
                  "$filters": "pokemonColorIdentifier"
                }
              ]
            },
            "shape": {
              "title": "Shape",
              "allOf": [
                {
                  "$ref": "types/identifier.json"
                },
                {
                  "type": "string",
                  "$filters": [
                    "pokemonShapeIdentifier",
                    {
                      "$func": "pokemonShapeInVersionGroup",
                      "$vars": {
                        "versionGroup": {
                          "$ref": "3#"
                        }
                      }
                    }
                  ]
                }
              ]
            },
            "habitat": {
              "title": "Habitat",
              "allOf": [
                {
                  "$ref": "types/identifier.json"
                },
                {
                  "type": "string",
                  "$filters": "habitatIdentifier"
                }
              ]
            },
            "female_rate": {
              "title": "Female rate",
              "description": "Percentage of encounters that are female",
              "type": "integer",
              "minimum": 0,
              "maximum": 100
            },
            "capture_rate": {
              "title": "Capture rate",
              "type": "integer",
              "minimum": 1,
              "maximum": 255
            },
            "happiness": {
              "title": "Initial happiness",
              "type": "integer",
              "minimum": 0,
              "maximum": 255
            },
            "baby": {
              "title": "Is baby?",
              "type": "boolean",
              "default": false
            },
            "hatch_steps": {
              "title": "Steps in one egg cycle",
              "type": "integer",
              "minimum": 1
            },
            "growth_rate": {
              "title": "Growth rate",
              "allOf": [
                {
                  "$ref": "types/identifier.json"
                },
                {
                  "type": "string",
                  "$filters": "growthRateIdentifier"
                }
              ]
            },
            "forms_switchable": {
              "title": "Has manually-switchable forms",
              "type": "boolean"
            },
            "forms_note": {
              "title": "Forms note",
              "$ref": "types/markdown.json"
            },
            "pal_park": {
              "title": "Pal Park location",
              "type": "object",
              "properties": {
                "area": {
                  "title": "Area",
                  "allOf": [
                    {
                      "$ref": "types/identifier.json"
                    },
                    {
                      "type": "string",
                      "$filters": "palParkAreaIdentifier"
                    }
                  ]
                },
                "rate": {
                  "title": "Encounter rate",
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 100
                },
                "score": {
                  "title": "Score",
                  "type": "integer",
                  "minimum": 1
                }
              },
              "additionalProperties": false,
              "required": [
                "area",
                "rate",
                "score"
              ]
            },
            "name": {
              "$ref": "types/name.json"
            },
            "default": {
              "title": "Default",
              "type": "boolean",
              "default": false
            },
            "height": {
              "title": "Height (dm)",
              "type": "integer",
              "minimum": 1
            },
            "weight": {
              "title": "Weight (hg)",
              "type": "integer",
              "minimum": 1
            },
            "experience": {
              "title": "Experience",
              "type": "integer",
              "minimum": 1
            },
            "types": {
              "title": "Types",
              "type": "array",
              "minItems": 1,
              "uniqueItems": true,
              "items": {
                "allOf": [
                  {
                    "$ref": "types/identifier.json"
                  },
                  {
                    "type": "string",
                    "$filters": [
                      "typeIdentifier",
                      {
                        "$func": "typeInVersionGroup",
                        "$vars": {
                          "versionGroup": {
                            "$ref": "4#"
                          }
                        }
                      }
                    ]
                  }
                ]
              }
            },
            "egg_groups": {
              "title": "Egg groups",
              "type": "array",
              "minItems": 1,
              "items": {
                "allOf": [
                  {
                    "$ref": "types/identifier.json"
                  },
                  {
                    "type": "string",
                    "$filters": "eggGroupIdentifier"
                  }
                ]
              }
            },
            "mega": {
              "title": "Is Mega Evolution",
              "type": "boolean",
              "default": false
            },
            "stats": {
              "title": "Stats",
              "type": "object",
              "propertyNames": {
                "type": "string",
                "$filters": "statIdentifier"
              },
              "minProperties": 1,
              "additionalProperties": {
                "type": "object",
                "properties": {
                  "base_value": {
                    "title": "Base value",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 255
                  },
                  "effort_change": {
                    "title": "Effort change",
                    "type": "integer",
                    "minimum": 0
                  }
                },
                "additionalProperties": false,
                "required": [
                  "base_value",
                  "effort_change"
                ]
              }
            },
            "evolution_conditions": {
              "title": "Evolution conditions",
              "type": "object",
              "propertyNames": {
                "title": "Evolution trigger",
                "allOf": [
                  {
                    "$ref": "types/identifier.json"
                  },
                  {
                    "type": "string",
                    "$filters": "evolutionTriggerIdentifier"
                  }
                ]
              },
              "additionalProperties": {
                "oneOf": [
                  {
                    "type": "array",
                    "minItems": 0,
                    "maxItems": 0
                  },
                  {
                    "type": "object",
                    "minProperties": 0,
                    "additionalProperties": false,
                    "properties": {
                      "bag_item": {
                        "title": "Item in Bag",
                        "allOf": [
                          {
                            "$ref": "types/identifier.json"
                          },
                          {
                            "type": "string",
                            "$filters": [
                              "itemIdentifier",
                              {
                                "$func": "itemInVersionGroup",
                                "$vars": {
                                  "versionGroup": {
                                    "$ref": "5#"
                                  }
                                }
                              }
                            ]
                          }
                        ]
                      },
                      "trigger_item": {
                        "title": "Trigger item",
                        "allOf": [
                          {
                            "$ref": "types/identifier.json"
                          },
                          {
                            "type": "string",
                            "$filters": [
                              "itemIdentifier",
                              {
                                "$func": "itemInVersionGroup",
                                "$vars": {
                                  "versionGroup": {
                                    "$ref": "5#"
                                  }
                                }
                              }
                            ]
                          }
                        ]
                      },
                      "minimum_level": {
                        "title": "Minimum level",
                        "type": "integer",
                        "minimum": 2,
                        "maximum": 100
                      },
                      "gender": {
                        "title": "Gender",
                        "allOf": [
                          {
                            "$ref": "types/identifier.json"
                          },
                          {
                            "type": "string",
                            "$filters": "genderIdentifier"
                          }
                        ]
                      },
                      "location": {
                        "title": "Location",
                        "allOf": [
                          {
                            "$ref": "types/identifier.json"
                          },
                          {
                            "type": "string",
                            "$filters": [
                              "locationIdentifier",
                              {
                                "$func": "locationInVersionGroup",
                                "$vars": {
                                  "versionGroup": {
                                    "$ref": "5#"
                                  }
                                }
                              }
                            ]
                          }
                        ]
                      },
                      "held_item": {
                        "title": "Held item",
                        "allOf": [
                          {
                            "$ref": "types/identifier.json"
                          },
                          {
                            "type": "string",
                            "$filters": [
                              "itemIdentifier",
                              {
                                "$func": "itemInVersionGroup",
                                "$vars": {
                                  "versionGroup": {
                                    "$ref": "5#"
                                  }
                                }
                              }
                            ]
                          }
                        ]
                      },
                      "time_of_day": {
                        "title": "Time of day",
                        "type": "array",
                        "items": {
                          "allOf": [
                            {
                              "$ref": "types/identifier.json"
                            },
                            {
                              "type": "string",
                              "$filters": "timeOfDayIdentifier"
                            }
                          ]
                        }
                      },
                      "known_move": {
                        "title": "Knows move",
                        "allOf": [
                          {
                            "$ref": "types/identifier.json"
                          },
                          {
                            "type": "string",
                            "$filters": [
                              "moveIdentifier",
                              {
                                "$func": "moveInVersionGroup",
                                "$vars": {
                                  "versionGroup": {
                                    "$ref": "5#"
                                  }
                                }
                              }
                            ]
                          }
                        ]
                      },
                      "known_move_type": {
                        "title": "Knows move of type",
                        "allOf": [
                          {
                            "$ref": "types/identifier.json"
                          },
                          {
                            "type": "string",
                            "$filters": [
                              "typeIdentifier",
                              {
                                "$func": "typeInVersionGroup",
                                "$vars": {
                                  "versionGroup": {
                                    "$ref": "5#"
                                  }
                                }
                              }
                            ]
                          }
                        ]
                      },
                      "minimum_happiness": {
                        "title": "Minimum happiness",
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 255
                      },
                      "minimum_beauty": {
                        "title": "Minimum beauty",
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 255
                      },
                      "minimum_affection": {
                        "title": "Minimum affection",
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 5
                      },
                      "party_species": {
                        "title": "In party with species",
                        "allOf": [
                          {
                            "$ref": "types/identifier.json"
                          },
                          {
                            "type": "string",
                            "$filters": [
                              "speciesIdentifier",
                              {
                                "$func": "speciesInVersionGroup",
                                "$vars": {
                                  "versionGroup": {
                                    "$ref": "5#"
                                  }
                                }
                              }
                            ]
                          }
                        ]
                      },
                      "party_type": {
                        "title": "In party with type",
                        "allOf": [
                          {
                            "$ref": "types/identifier.json"
                          },
                          {
                            "type": "string",
                            "$filters": [
                              "typeIdentifier",
                              {
                                "$func": "typeInVersionGroup",
                                "$vars": {
                                  "versionGroup": {
                                    "$ref": "5#"
                                  }
                                }
                              }
                            ]
                          }
                        ]
                      },
                      "physical_stats_difference": {
                        "title": "Physical stats difference",
                        "type": "integer",
                        "minimum": -1,
                        "maximum": 1
                      },
                      "traded_for_species": {
                        "title": "Traded for species",
                        "allOf": [
                          {
                            "$ref": "types/identifier.json"
                          },
                          {
                            "type": "string",
                            "$filters": [
                              "speciesIdentifier",
                              {
                                "$func": "speciesInVersionGroup",
                                "$vars": {
                                  "versionGroup": {
                                    "$ref": "5#"
                                  }
                                }
                              }
                            ]
                          }
                        ]
                      },
                      "overworld_weather": {
                        "title": "Overworld weather",
                        "allOf": [
                          {
                            "$ref": "types/identifier.json"
                          },
                          {
                            "type": "string",
                            "$filters": "weatherIdentifier"
                          }
                        ]
                      },
                      "console_inverted": {
                        "title": "Console upside-down",
                        "type": "boolean"
                      }
                    }
                  }
                ]
              }
            },
            "abilities": {
              "title": "Abilities",
              "type": "object",
              "propertyNames": {
                "allOf": [
                  {
                    "$ref": "types/identifier.json"
                  },
                  {
                    "type": "string",
                    "$filters": [
                      "abilityIdentifier",
                      {
                        "$func": "abilityInVersionGroup",
                        "$vars": {
                          "versionGroup": {
                            "$ref": "3#"
                          }
                        }
                      }
                    ]
                  }
                ]
              },
              "additionalProperties": {
                "type": "object",
                "properties": {
                  "hidden": {
                    "title": "Hidden ability",
                    "type": "boolean",
                    "default": false
                  },
                  "position": {
                    "$ref": "types/position.json"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "position"
                ]
              }
            },
            "wild_held_items": {
              "title": "Wild held items",
              "type": "object",
              "propertyNames": {
                "title": "Version identifier",
                "allOf": [
                  {
                    "$ref": "types/identifier.json"
                  },
                  {
                    "type": "string",
                    "$filters": [
                      "versionIdentifier",
                      {
                        "$func": "versionInVersionGroup",
                        "$vars": {
                          "versionGroup": {
                            "$ref": "3#"
                          }
                        }
                      }
                    ]
                  }
                ]
              },
              "additionalProperties": {
                "type": "object",
                "propertyNames": {
                  "title": "Item identifier",
                  "allOf": [
                    {
                      "$ref": "types/identifier.json"
                    },
                    {
                      "type": "string",
                      "$filters": [
                        "itemIdentifier",
                        {
                          "$func": "itemInVersionGroup",
                          "$vars": {
                            "version": {
                              "$ref": "0#"
                            }
                          }
                        }
                      ]
                    }
                  ]
                },
                "additionalProperties": {
                  "title": "Percent chance",
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 100
                }
              }
            },
            "flavor_text": {
              "title": "Flavor text",
              "type": "object",
              "minProperties": 1,
              "propertyNames": {
                "allOf": [
                  {
                    "$ref": "types/identifier.json"
                  },
                  {
                    "type": "string",
                    "$filters": [
                      "versionIdentifier",
                      {
                        "$func": "versionInVersionGroup",
                        "$vars": {
                          "versionGroup": {
                            "$ref": "3#"
                          }
                        }
                      }
                    ]
                  }
                ]
              },
              "additionalProperties": {
                "$ref": "types/flavor_text.json"
              }
            },
            "evolution_parent": {
              "title": "Evolves from",
              "type": "string",
              "pattern": "^[a-z0-9\\-]+/[a-z0-9\\-]+$",
              "$filters": [
                {
                  "$func": "speciesPokemonCombination",
                  "$vars": {
                    "versionGroup": {
                      "$ref": "3#"
                    }
                  }
                }
              ]
            },
            "forms": {
              "title": "Forms",
              "type": "object",
              "minProperties": 1,
              "propertyNames": {
                "$ref": "types/identifier.json"
              },
              "additionalProperties": {
                "type": "object",
                "properties": {
                  "name": {
                    "$ref": "types/name.json"
                  },
                  "form_name": {
                    "title": "Form name",
                    "$ref": "types/name.json"
                  },
                  "default": {
                    "title": "Default",
                    "type": "boolean",
                    "default": false
                  },
                  "battle_only": {
                    "title": "Battle only form",
                    "type": "boolean",
                    "default": false
                  },
                  "pokeathlon_stats": {
                    "title": "Pokeathlon stats",
                    "propertyNames": {
                      "title": "Pokeathlon stat",
                      "allOf": [
                        {
                          "$ref": "types/identifier.json"
                        },
                        {
                          "type": "string",
                          "$filters": "pokeathlonStatIdentifier"
                        }
                      ]
                    },
                    "additionalProperties": {
                      "type": "object",
                      "properties": {
                        "base_value": {
                          "title": "Base value",
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 5
                        },
                        "range": {
                          "title": "Range",
                          "oneOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 5
                            },
                            {
                              "allOf": [
                                {
                                  "$ref": "types/range.json"
                                },
                                {
                                  "type": "string",
                                  "$filters": {
                                    "$func": "range",
                                    "$vars": {
                                      "min": 0,
                                      "max": 5
                                    }
                                  }
                                }
                              ]
                            }
                          ]
                        }
                      },
                      "additionalProperties": false,
                      "required": [
                        "base_value",
                        "range"
                      ]
                    }
                  },
                  "icon": {
                    "title": "Icon",
                    "$ref": "types/asset_path.json"
                  },
                  "sprites": {
                    "title": "Sprites",
                    "type": "array",
                    "uniqueItems": true,
                    "items": {
                      "$ref": "types/asset_path.json"
                    }
                  },
                  "art": {
                    "title": "Concept art",
                    "type": "array",
                    "uniqueItems": true,
                    "items": {
                      "$ref": "types/asset_path.json"
                    }
                  },
                  "footprint": {
                    "title": "Footprint",
                    "$ref": "types/asset_path.json"
                  },
                  "cry": {
                    "title": "Cry",
                    "$ref": "types/asset_path.json"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "name",
                  "form_name"
                ]
              },
              "$filters": "singleDefault"
            }
          },
          "additionalProperties": false,
          "required": [
            "capture_rate",
            "growth_rate",
            "name",
            "height",
            "weight",
            "experience",
            "types",
            "stats",
            "forms"
          ]
        },
        "$filters": "singleDefault"
      }
    },
    "additionalProperties": false,
    "required": [
      "name",
      "position",
      "pokemon"
    ]
  }
}