Skip to content

Cups & Formats

Nicholas Beninato edited this page Feb 4, 2023 · 11 revisions

PvPoke's Rankings and Team Builder rely on two key data structures, cups and formats.

  • A cup contains a specific set of rules that define which Pokemon are eligible. Cup data is stored in data/gamemaster/cups directory in individual JSON files. Cup data is league agnostic - a cup can take place in any league.
  • A format includes a league CP and a cup name that refers to the cup data described above. Format data is stored in data/gamemaster/formats.json.

Cup Data Structure

A cup JSON object can contain the following properties and values. You can quickly obtain a cup's JSON object with Custom Rankings feature's Import/Export Settings.

name

Lowercase string used as a cup ID in formats and URLs. The cup name must contain alphanumeric characters only.

title

String displayed in the UI, only visible in the Custom Rankings advanced settings.

include

Array of filter objects that define Pokemon eligibility. A Pokemon must match all include filters to be eligible, or be explicitly listed in an id filter. This array can be empty (an empty array allows all Pokemon except those that meet the exclude criteria).

A filter object has the following properties:

  • filterType - A string defining the type of filter. Common values include type, id, and tag. A full list of filters can be found on the Custom Rankings page.
  • values - An array of values for the filter.
  • leagues (optional) - An array of integer CP values for leagues to apply the specific filter. For example, this property is used for the Remix cup to define different exclusion lists in different leagues.
  • includeShadows (optional) - A boolean for the id filter that defines if the filter includes Shadow versions of the listed Pokemon. This value is false by default for include filters and true by default for exclude filters.

exclude

Array of filter objects that define excluded or banned Pokemon. A Pokemon is excluded if it matches any exclude filter. See above for filter object properties.

levelCap (optional)

Integer with default value of 50. This value can be set to 40 for classic cups. 40 and 50 are the only supported values.

partySize (optional)

Integer with default value of 6. Supported values are 3 for GO Battle League cups, and 8 for show 8 ban 2 cups. This value is used by the Train feature to disable the "Tournament (6v6)" mode for these cups. It is also used by the Team Builder to set the default team size to 8 for cups with a partySize value of 8.

restrictedPicks (optional)

Integer that defines the number of restricted Pokemon allowed on a team.

restrictedPokemon (optional)

Array of Pokemon ID's that define a cup's restricted Pokemon list. Shadow Pokemon don't need to be explicitly listed.

tierRules (optional)

An object that defines points and eligibility in tier-based cups. This object has the following properties:

  • max - Integer maximum number of points allowed on a team.
  • floor - Integer point value for Pokemon that are eligible in the cup but not defined in a tier (ie the lowest tier).
  • tiers - Array of tier objects that define points and eligibility per tier.

A tier object has the following properties:

  • points - Integer value for the point cost of a Pokemon in the tier.
  • pokemon - Array of Pokemon ID's. Shadow versions of the listed Pokemon are automatically included in point calculation and don't need to be explicitly listed.

Example Cup Data

Below is an example of a cup JSON object.

{
	"name": "venture",
	"title": "Venture Cup",
	"include": [],
	"exclude": [{
		"filterType": "type",
		"values": ["dark", "fairy", "steel"]
	}, {
		"filterType": "tag",
		"values": ["mega"]
	}, {
		"filterType": "id",
		"values": ["chansey", "pidgeot"]
	}],
	"tierRules": {
		"max": 20,
		"floor": 1,
		"tiers": [{
			"points": 10,
			"pokemon": ["hypno", "hypno_shadow", "lickitung", "altaria", "froslass", "cresselia", "marowak_alolan"]
		}, {
			"points": 6,
			"pokemon": ["dewgong", "lapras", "snorlax", "dragonair", "politoed", "kingdra", "vigoroth", "medicham", "regirock", "deoxys_defense", "munchlax", "lickilicky", "jellicent", "galvantula", "talonflame", "dragalge", "lugia"]
		}, {
			"points": 4,
			"pokemon": ["machamp", "haunter", "gengar", "dragonite", "mew", "lanturn", "wobbuffet", "mantine", "swampert", "pelipper", "zangoose", "whiscash", "cradily", "dusclops", "tropius", "sealeo", "pachirisu", "drifblim", "abomasnow", "crustle", "stunfisk", "goodra", "graveler_alolan", "sirfetchd", "nidoqueen", "flygon"]
		}]
	}
}

Format Data Structure

Each format object listed in data/gamemaster/formats.json controls which formats are listed in the UI of the Rankings, Team Builder, and Multi-Battle dropdowns. Note that Great League, Ultra League, and Master League are listed by default and not included in the data files. A format JSON object can contain the following properties and values.

title

String displayed in the UI for the site's format select dropdowns.

cup

String of the associated cup object. This must match the cup's name property.

cp

Integer value for the format's league CP. Accepted values are 500 1500 2500 10000 (10000 is the site's CP limit for Master League).

meta

String of the format's meta group. This must match the filename of the JSON file located in the data/groups directory (do not include the .json file extension).

showCup

Boolean that controls if this format is listed in the Multi-Battle cup select dropdown.

showFormat

Boolean that controls if this format is listed in the Rankings and Team Builder dropdowns.

showMeta

Boolean that controls if this format is listed in Custom Multi-Battle "quick fill" dropdown.

hideRankings

Boolean that will remove the format from the Rankings page dropdown. This may be used for formats that require Team Builder support but not ranking support (such as Cliffhanger).

The above values are usually true for all active formats. Formats that are inactive or contain Multi-Battle resources for community cups may have one or more of these set to false.

Example Format Data

Below is an example of a format JSON object.

{
	"title": "Master League (Premier Classic)",
	"cup": "premierclassic",
	"cp": 10000,
	"meta": "masterpremierclassic",
	"showCup": false,
	"showFormat": false,
	"showMeta": true
}

Group Data Struture

Each JSON file listed in data/groups directory contains a list of Pokemon that make up the most common / relevant Pokemon for the specified meta. These groups can be used in places like the quick select list for Matrix Battles and Custom Threats for Team Builder.

The name of each file in the directory corresponds to the meta field of an entry in formats.json. Each group contains a list with each element having the following properties.

speciesId

String that matches a speciesId found in data/gamemaster/pokemon.json

fastMove

String that matches one of the elements of fastMoves from the above Pokemon in data/gamemaster/pokemon.json.

chargedMoves

Array of 2 Strings that are both elements of chargedMoves from the above Pokemon in data/gamemaster/pokemon.json

Example Group Data

[
	{
		"speciesId":"azumarill",
		"fastMove":"BUBBLE",
		"chargedMoves":["ICE_BEAM","PLAY_ROUGH"]
	},
	{
		"speciesId":"walrein",
		"fastMove":"POWDER_SNOW",
		"chargedMoves":["ICICLE_SPEAR","EARTHQUAKE"]
	}
]