Added data for pokedex and classes that process that data. Utility Scripts also contains two scripts used for generating data. Data not final.

This commit is contained in:
JPAKx4
2024-06-04 20:36:24 -05:00
parent ee73058f5b
commit 2ac91b0731
27 changed files with 2823 additions and 6228 deletions
@@ -1,3 +1,11 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.mixin.accessor;
import net.minecraft.client.gui.widget.EntryListWidget;
@@ -8,7 +8,6 @@
package com.cobblemon.mod.common.api.pokedex
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.api.pokedex.trackeddata.GlobalTrackedData
import com.cobblemon.mod.common.api.storage.player.PlayerInstancedDataStoreType
import com.cobblemon.mod.common.api.storage.player.client.ClientInstancedPlayerData
@@ -42,7 +41,7 @@ class ClientPokedex(
}
fun getKnowledgeCount(pokedexEntryProgress: PokedexEntryProgress, dexData: Collection<DexPokemonData>): Int {
return dexData.count{ discoveryLevel(it.name) == pokedexEntryProgress }
return dexData.count{ discoveryLevel(it.identifier) == pokedexEntryProgress }
}
fun discoveryLevel(species: Identifier): PokedexEntryProgress {
@@ -1,3 +1,11 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.pokedex
import com.cobblemon.mod.common.pokedex.DexPokemonData
@@ -1,3 +1,11 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.pokedex
enum class PokedexEntryCategory(name: String) {
@@ -44,6 +44,68 @@ object PokedexJSONRegistry : JsonDataRegistry<DexData> {
val dexes: MutableCollection<DexData>
get() = this.dexByIdentifier.values.toMutableList()
private var _entries: MutableSet<DexPokemonData>? = null
val entries: Set<DexPokemonData>
get() {
if(_entries != null) return _entries as Set<DexPokemonData>
_entries = mutableSetOf()
val categoryEntries: MutableMap<PokedexEntryCategory, MutableSet<DexPokemonData>> = mutableMapOf()
for (category in PokedexEntryCategory.values()) {
categoryEntries[category] = mutableSetOf()
}
//Step 1: Get all dexes without a parent, so we can iterate over them
val dexesWithoutParents : MutableList<Identifier> = mutableListOf()
dexesWithoutParents.addAll(dexByIdentifier.keys)
for(identifier in dexByIdentifier.keys) {
if(dexByIdentifier[identifier] == null) continue
for (childDex in dexByIdentifier[identifier]!!.containedDexes) {
dexesWithoutParents.remove(childDex)
}
}
//Step 2: Each parent dex adds all of their pokemon and recursively adds the child dexes as well
for(dexIdentifier in dexesWithoutParents) {
dexByIdentifier[dexIdentifier]?.parseEntries(_entries as MutableSet<DexPokemonData>, categoryEntries)
}
//Step 3: Add all pokemon in the order of their categories
for(categories in categoryEntries.values){
for(entry in categories) {
if (_entries!!.contains(entry)){
_entries!!.add(_entries!!.find { it == entry }!!.combine(entry))
} else {
_entries!!.add(entry)
}
}
}
return _entries as Set<DexPokemonData>
}
private var _skipAutoNumberingIndexes : MutableSet<Int>? = null
private val skipAutoNumberingIndexes : Set<Int>
get() {
if(_skipAutoNumberingIndexes != null) return _skipAutoNumberingIndexes as MutableSet<Int>
_skipAutoNumberingIndexes = mutableSetOf()
var index = 0
for(entry in entries){
if(entry.skipAutoNumbering){
_skipAutoNumberingIndexes!!.add(index)
}
index++
}
return _skipAutoNumberingIndexes!!
}
/**
* Finds a dex by the pathname of their [Identifier].
* This method exists for the convenience of finding Cobble default dexes.
@@ -57,7 +119,7 @@ object PokedexJSONRegistry : JsonDataRegistry<DexData> {
/**
* Finds a [DexData] by its unique [Identifier].
*
* @param identifier The unique [DexData.resourceIdentifier] of the [DexData].
* @param identifier The unique [DexData.identifier] of the [DexData].
* @return The [DexData] if existing.
*/
fun getByIdentifier(identifier: Identifier) = this.dexByIdentifier[identifier]
@@ -87,8 +149,8 @@ object PokedexJSONRegistry : JsonDataRegistry<DexData> {
val dex = getDexesInNamespace(namespace)
val speciesList: MutableList<DexPokemonData> = mutableListOf()
dex.forEach {
if(it.pokemon_list != null) {
it.pokemon_list.forEach { dexPokemonData ->
if(it.pokemonList != null) {
it.pokemonList.forEach { dexPokemonData ->
speciesList.add(dexPokemonData)
}
}
@@ -98,45 +160,32 @@ object PokedexJSONRegistry : JsonDataRegistry<DexData> {
}
fun getSortedDexData(filters: Collection<EntryFilter>): Collection<DexPokemonData> {
var entries : MutableSet<DexPokemonData> = mutableSetOf()
val categoryEntries: MutableMap<PokedexEntryCategory, MutableSet<DexPokemonData>> = mutableMapOf()
for (category in PokedexEntryCategory.values()) {
categoryEntries[category] = mutableSetOf()
}
//Step 1: Get all dexes without a parent, so we can iterate over them
val dexesWithoutParents : MutableList<Identifier> = mutableListOf()
dexesWithoutParents.addAll(dexByIdentifier.keys)
for(identifier in dexByIdentifier.keys) {
if(dexByIdentifier[identifier] == null) continue
for (childDex in dexByIdentifier[identifier]!!.contained_dexes) {
dexesWithoutParents.remove(childDex)
}
}
//Step 2: Each parent dex adds all of their pokemon and recursively adds the child dexes as well
for(dexIdentifier in dexesWithoutParents) {
dexByIdentifier[dexIdentifier]?.parseEntries(entries, categoryEntries)
}
for(categoryEntry in categoryEntries.values){
entries.addAll(categoryEntry)
}
entries = entries.filter { pokemon ->
return entries.filter { pokemon ->
filters.forEach {filter ->
if(!filter.filter(pokemon)) return@filter false
}
return@filter true
}.toMutableSet()
}.toSet()
}
return entries
fun getPokemonVisualDexNumber(dexPokemonData: DexPokemonData): String {
if(dexPokemonData.visualNumber != null) return dexPokemonData.visualNumber!!
val originalIndex = entries.indexOf(dexPokemonData)
var dexNumber = originalIndex + 1
for(index in skipAutoNumberingIndexes) {
if(index < originalIndex){
dexNumber--
}
}
return dexNumber.toString()
}
override fun reload(data: Map<Identifier, DexData>) {
this.dexes.clear()
_entries = null
_skipAutoNumberingIndexes = null
data.forEach { (identifier, dexData) ->
if(dexData.enabled){
try {
@@ -1,3 +1,11 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.pokedex.adapter
import com.cobblemon.mod.common.Cobblemon
@@ -7,7 +15,7 @@ import com.google.gson.*
import net.minecraft.util.Identifier
import java.lang.reflect.Type
object DexDataAdapter: JsonDeserializer<DexData>, JsonSerializer<DexData> {
object DexDataAdapter: JsonDeserializer<DexData> {
override fun deserialize(jElement: JsonElement, type: Type, context: JsonDeserializationContext): DexData {
val json = jElement.asJsonObject
val pokemonList: MutableList<DexPokemonData> = mutableListOf()
@@ -18,7 +26,7 @@ object DexDataAdapter: JsonDeserializer<DexData>, JsonSerializer<DexData> {
if(dexPokemonData.species != null) {
pokemonList.add(dexPokemonData)
} else {
Cobblemon.LOGGER.error("Failed to load Pokedex Entry for {}.", dexPokemonData.name)
Cobblemon.LOGGER.error("Failed to load Pokedex Entry for {}.", dexPokemonData.identifier)
}
}
}
@@ -32,13 +40,9 @@ object DexDataAdapter: JsonDeserializer<DexData>, JsonSerializer<DexData> {
return DexData(
identifier = Identifier(json.get("identifier").asString),
enabled = json.getAsJsonPrimitive("enabled")?.asBoolean ?: true,
contained_dexes = containedDexes,
pokemon_list = pokemonList,
override_categories = json.getAsJsonPrimitive("override_categories")?.asBoolean ?: false
containedDexes = containedDexes,
pokemonList = pokemonList,
overrideCategories = json.getAsJsonPrimitive("override_categories")?.asBoolean ?: false
)
}
override fun serialize(data: DexData, type: Type, context: JsonSerializationContext): JsonElement {
return context.serialize(data).asJsonObject
}
}
@@ -8,15 +8,13 @@
package com.cobblemon.mod.common.api.pokedex.adapter
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.api.berry.GrowthFactor
import com.cobblemon.mod.common.api.pokedex.PokedexEntryCategory
import com.cobblemon.mod.common.pokedex.DexPokemonData
import com.google.gson.*
import net.minecraft.util.Identifier
import java.lang.reflect.Type
object DexPokemonDataAdapter: JsonDeserializer<DexPokemonData>, JsonSerializer<DexPokemonData> {
object DexPokemonDataAdapter: JsonDeserializer<DexPokemonData> {
override fun deserialize(jElement: JsonElement, type: Type, context: JsonDeserializationContext): DexPokemonData {
val json = jElement.asJsonObject
val categoryJson = json.get("category")
@@ -26,16 +24,14 @@ object DexPokemonDataAdapter: JsonDeserializer<DexPokemonData>, JsonSerializer<D
}
return DexPokemonData(
name = Identifier(json.get("name").asString),
identifier = Identifier(json.get("identifier").asString),
forms = json.getAsJsonArray("forms")?.map { it.asString }?.toMutableList() ?: mutableListOf(),
category = category,
tags = json.getAsJsonArray("tags")?.map { it.asString }?.toMutableList() ?: mutableListOf(),
invisibleUntilFound = json.getAsJsonPrimitive("invisible")?.asBoolean == true
invisibleUntilFound = json.getAsJsonPrimitive("invisible")?.asBoolean == true,
visualNumber = json.getAsJsonPrimitive("visual_number")?.asString,
skipAutoNumbering = json.getAsJsonPrimitive("skip_auto_numbering")?.asBoolean == true
)
}
override fun serialize(data: DexPokemonData, type: Type, context: JsonSerializationContext): JsonElement {
return context.serialize(data).asJsonObject
}
}
@@ -1,3 +1,11 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.pokedex.filters
import com.cobblemon.mod.common.api.pokedex.ClientPokedex
@@ -7,6 +15,6 @@ import com.cobblemon.mod.common.pokedex.DexPokemonData
class InvisibleFilter(val clientPokedex: ClientPokedex) : EntryFilter(clientPokedex) {
override fun filter(dexPokemonData: DexPokemonData): Boolean {
return clientPokedex.discoveryLevel(dexPokemonData.name) >= PokedexEntryProgress.CAUGHT || !dexPokemonData.invisibleUntilFound
return clientPokedex.discoveryLevel(dexPokemonData.identifier) >= PokedexEntryProgress.CAUGHT || !dexPokemonData.invisibleUntilFound
}
}
@@ -1,14 +1,20 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.pokedex.filters
import com.cobblemon.mod.common.api.pokedex.ClientPokedex
import com.cobblemon.mod.common.api.pokedex.EntryFilter
import com.cobblemon.mod.common.api.pokedex.PokedexEntryProgress
import com.cobblemon.mod.common.api.text.text
import com.cobblemon.mod.common.pokedex.DexPokemonData
import net.minecraft.text.Text
class SearchFilter(val clientPokedex: ClientPokedex, val searchString: String) : EntryFilter(clientPokedex) {
override fun filter(dexPokemonData: DexPokemonData): Boolean {
return searchString == "" || (clientPokedex.discoveryLevel(dexPokemonData.name) >= PokedexEntryProgress.ENCOUNTERED && dexPokemonData.species?.name?.contains(searchString.trim(), true) == true)
return searchString == "" || (clientPokedex.discoveryLevel(dexPokemonData.identifier) >= PokedexEntryProgress.ENCOUNTERED && dexPokemonData.species?.name?.contains(searchString.trim(), true) == true)
}
}
@@ -7,12 +7,10 @@
*/
package com.cobblemon.mod.common.client.gui.pokedex
import com.cobblemon.mod.common.Cobblemon.LOGGER
import com.cobblemon.mod.common.api.gui.blitk
import com.cobblemon.mod.common.api.pokedex.*
import com.cobblemon.mod.common.api.pokedex.filters.InvisibleFilter
import com.cobblemon.mod.common.api.pokedex.filters.SearchFilter
import com.cobblemon.mod.common.api.text.text
import com.cobblemon.mod.common.client.gui.pokedex.PokedexGUIConstants.BASE_HEIGHT
import com.cobblemon.mod.common.client.gui.pokedex.PokedexGUIConstants.BASE_WIDTH
import com.cobblemon.mod.common.client.gui.pokedex.PokedexGUIConstants.HEADER_HEIGHT
@@ -30,14 +28,11 @@ import com.cobblemon.mod.common.client.gui.pokedex.PokedexGUIConstants.SPACER
import com.cobblemon.mod.common.client.gui.pokedex.widgets.*
import com.cobblemon.mod.common.client.render.drawScaledTextJustifiedRight
import com.cobblemon.mod.common.pokedex.DexPokemonData
import com.cobblemon.mod.common.pokemon.FormData
import com.cobblemon.mod.common.pokemon.Species
import com.cobblemon.mod.common.util.cobblemonResource
import net.minecraft.client.MinecraftClient
import net.minecraft.client.gui.DrawContext
import net.minecraft.client.gui.screen.Screen
import net.minecraft.text.Text
import org.spongepowered.asm.mixin.injection.Desc
/**
* Pokedex GUI
@@ -200,7 +195,7 @@ class PokedexGUI private constructor(val pokedex: ClientPokedex) : Screen(Text.t
fun setSelectedPokemon(dexPokemonData : DexPokemonData){
selectedPokemon = dexPokemonData
val speciesEntry = pokedex.speciesEntries[selectedPokemon!!.name]
val speciesEntry = pokedex.speciesEntries[selectedPokemon!!.identifier]
pokemonInfoWidget.setPokemon(selectedPokemon!!, speciesEntry)
val textToShowInDescription = mutableListOf<String>()
@@ -8,13 +8,11 @@
package com.cobblemon.mod.common.client.gui.pokedex.widgets
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.api.gui.blitk
import com.cobblemon.mod.common.api.gui.drawPortraitPokemon
import com.cobblemon.mod.common.api.gui.drawText
import com.cobblemon.mod.common.api.pokedex.ClientPokedex
import com.cobblemon.mod.common.api.pokedex.PokedexJSONRegistry
import com.cobblemon.mod.common.api.pokedex.SpeciesPokedexEntry
import com.cobblemon.mod.common.api.pokedex.trackeddata.SpeciesTrackedData
import com.cobblemon.mod.common.api.pokemon.PokemonSpecies
import com.cobblemon.mod.common.api.text.text
import com.cobblemon.mod.common.client.gui.ScrollingWidget
@@ -29,7 +27,6 @@ import com.cobblemon.mod.common.util.cobblemonResource
import com.cobblemon.mod.common.util.lang
import net.minecraft.client.gui.DrawContext
import net.minecraft.text.MutableText
import net.minecraft.text.Text
class EntriesScrollingWidget<PokemonScrollSlot : ScrollingWidget.Slot<EntriesScrollingWidget.PokemonScrollSlot>>(val pX: Int, val pY: Int, val setPokedexEntry: (DexPokemonData) -> (Unit)
): ScrollingWidget<EntriesScrollingWidget.PokemonScrollSlot>(
@@ -41,7 +38,7 @@ class EntriesScrollingWidget<PokemonScrollSlot : ScrollingWidget.Slot<EntriesScr
){
fun createEntries(filteredPokedex: Collection<DexPokemonData>, clientPokedex: ClientPokedex){
filteredPokedex.forEach {
val data = clientPokedex.speciesEntries[it.name]
val data = clientPokedex.speciesEntries[it.identifier]
val newEntry = PokemonScrollSlot (it, data){ selectPokemon(it) }
addEntry( newEntry )
}
@@ -67,7 +64,7 @@ class EntriesScrollingWidget<PokemonScrollSlot : ScrollingWidget.Slot<EntriesScr
}
init {
pokemonSpecies = PokemonSpecies.getByIdentifier(dexPokemonData.name)
pokemonSpecies = PokemonSpecies.getByIdentifier(dexPokemonData.identifier)
//Shouldn't be null due to above line
pokemonName = if(speciesPokedexEntry != null){
pokemonSpecies!!.translatedName
@@ -75,7 +72,7 @@ class EntriesScrollingWidget<PokemonScrollSlot : ScrollingWidget.Slot<EntriesScr
lang("ui.pokedex.unknown")
}
pokemonNumber = "${pokemonSpecies!!.nationalPokedexNumber}".text()
pokemonNumber = PokedexJSONRegistry.getPokemonVisualDexNumber(dexPokemonData).text()
}
override fun render(
@@ -1,6 +1,13 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.gui.pokedex.widgets
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.api.text.bold
import com.cobblemon.mod.common.api.text.text
import com.cobblemon.mod.common.client.CobblemonResources
@@ -0,0 +1,8 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
@@ -17,58 +17,58 @@ import net.minecraft.util.Identifier
class DexData (
var identifier : Identifier,
var enabled : Boolean = true,
var contained_dexes : MutableList<Identifier> = mutableListOf(),
var pokemon_list : MutableList<DexPokemonData> = mutableListOf(),
var override_categories : Boolean = false
var containedDexes : MutableList<Identifier> = mutableListOf(),
var pokemonList : MutableList<DexPokemonData> = mutableListOf(),
var overrideCategories : Boolean = false
): ClientDataSynchronizer<DexData> {
override fun shouldSynchronize(other: DexData): Boolean {
return other.identifier != identifier || other.contained_dexes != contained_dexes || other.pokemon_list != pokemon_list
return other.identifier != identifier || other.containedDexes != containedDexes || other.pokemonList != pokemonList
}
fun parseEntries(entries: MutableSet<DexPokemonData>, categoryEntries : MutableMap<PokedexEntryCategory, MutableSet<DexPokemonData>>){
if (!enabled) return
for(pokemon in pokemon_list){
if(override_categories){
for(pokemon in pokemonList){
if(overrideCategories){
entries.add(pokemon)
} else {
categoryEntries[pokemon.category]!!.add(pokemon)
}
}
for(childDexIdentifier in contained_dexes){
for(childDexIdentifier in containedDexes){
PokedexJSONRegistry.dexByIdentifier
PokedexJSONRegistry.getByIdentifier(childDexIdentifier)!!.parseEntries(entries, categoryEntries)
PokedexJSONRegistry.getByIdentifier(childDexIdentifier)?.parseEntries(entries, categoryEntries)
}
}
override fun encode(buffer: PacketByteBuf) {
buffer.writeIdentifier(identifier)
buffer.writeBoolean(override_categories)
buffer.writeBoolean(overrideCategories)
buffer.writeBoolean(enabled)
buffer.writeInt(contained_dexes.size)
contained_dexes.forEach {
buffer.writeInt(containedDexes.size)
containedDexes.forEach {
buffer.writeIdentifier(it)
}
buffer.writeInt(pokemon_list.size)
pokemon_list.forEach {
buffer.writeInt(pokemonList.size)
pokemonList.forEach {
it.encode(buffer)
}
}
override fun decode(buffer: PacketByteBuf) {
identifier = buffer.readIdentifier()
override_categories = buffer.readBoolean()
overrideCategories = buffer.readBoolean()
enabled = buffer.readBoolean()
val subdexesSize = buffer.readInt()
for (i in 0 until subdexesSize){
contained_dexes.add(buffer.readIdentifier())
containedDexes.add(buffer.readIdentifier())
}
val pokemonSize = buffer.readInt()
for (i in 0 until pokemonSize){
val decodedPokemon = DexPokemonData()
decodedPokemon.decode(buffer)
pokemon_list.add(decodedPokemon)
pokemonList.add(decodedPokemon)
}
}
}
@@ -18,40 +18,77 @@ import net.minecraft.network.PacketByteBuf
import net.minecraft.util.Identifier
class DexPokemonData(
var name : Identifier = cobblemonResource("dex.pokemon"),
var identifier : Identifier = cobblemonResource("dex.pokemon"),
var forms : MutableList<String> = mutableListOf(),
var category: PokedexEntryCategory = PokedexEntryCategory.STANDARD,
var tags: MutableList<String> = mutableListOf(),
var invisibleUntilFound : Boolean = false
): Decodable, Encodable {
var invisibleUntilFound : Boolean = false,
var visualNumber : String? = null,
var skipAutoNumbering: Boolean = false
): Decodable, Encodable, Comparable<DexPokemonData> {
val species : Species?
get() = PokemonSpecies.getByIdentifier(name)
get() = PokemonSpecies.getByIdentifier(identifier)
fun combine(diffDexPokemonData: DexPokemonData): DexPokemonData {
fun combine(diff: DexPokemonData): DexPokemonData {
val newForms: MutableList<String> = mutableListOf()
newForms.addAll(forms)
newForms.addAll(diffDexPokemonData.forms)
newForms.addAll(diff.forms)
return DexPokemonData(name, newForms, this.category)
val newTags: MutableList<String> = mutableListOf()
newTags.addAll(tags)
newTags.addAll(diff.tags)
val newInvisibleUntilFound = invisibleUntilFound || diff.invisibleUntilFound
val newSkipAutoNumbering = skipAutoNumbering || diff.invisibleUntilFound
val newVisualNumber = if (visualNumber != null) visualNumber else if (diff.visualNumber != null) diff.visualNumber else null
return DexPokemonData(
identifier = identifier,
forms = newForms,
category = category,
tags = newTags,
invisibleUntilFound = newInvisibleUntilFound,
visualNumber = newVisualNumber,
skipAutoNumbering = newSkipAutoNumbering
)
}
override fun encode(buffer: PacketByteBuf) {
buffer.writeIdentifier(name)
buffer.writeIdentifier(identifier)
buffer.writeInt(forms.size)
forms.forEach {
buffer.writeString(it)
}
buffer.writeString(category.name)
buffer.writeEnumConstant(category)
buffer.writeInt(tags.size)
tags.forEach {
buffer.writeString(it)
}
buffer.writeBoolean(invisibleUntilFound)
buffer.writeNullable(visualNumber) { _, v -> buffer.writeString(v)}
buffer.writeBoolean(skipAutoNumbering)
}
override fun decode(buffer: PacketByteBuf) {
name = buffer.readIdentifier()
identifier = buffer.readIdentifier()
val formsOrderListSize = buffer.readInt()
for(i in 0 until formsOrderListSize){
forms.add(buffer.readString())
}
val categoryOrNull = PokedexEntryCategory.from(buffer.readString())
category = categoryOrNull ?: PokedexEntryCategory.STANDARD
category = buffer.readEnumConstant(PokedexEntryCategory::class.java)
val tagListSize = buffer.readInt()
for(i in 0 until tagListSize){
tags.add(buffer.readString())
}
invisibleUntilFound = buffer.readBoolean()
visualNumber = buffer.readNullable { buffer.readString() }
skipAutoNumbering = buffer.readBoolean()
}
//Compares using identifiers.
override fun compareTo(other: DexPokemonData): Int {
return identifier.compareTo(other.identifier)
}
}
@@ -1,515 +1,152 @@
{
"identifier": "cobblemon:national_alola",
"pokemon_list": [
{
"name": "cobblemon:rowlet",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dartrix",
"forms": [
"normal"
]
},
{
"name": "cobblemon:decidueye",
"forms": [
"normal"
]
},
{
"name": "cobblemon:litten",
"forms": [
"normal"
]
},
{
"name": "cobblemon:torracat",
"forms": [
"normal"
]
},
{
"name": "cobblemon:incineroar",
"forms": [
"normal"
]
},
{
"name": "cobblemon:popplio",
"forms": [
"normal"
]
},
{
"name": "cobblemon:brionne",
"forms": [
"normal"
]
},
{
"name": "cobblemon:primarina",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pikipek",
"forms": [
"normal"
]
},
{
"name": "cobblemon:trumbeak",
"forms": [
"normal"
]
},
{
"name": "cobblemon:toucannon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:yungoos",
"forms": [
"normal"
]
},
{
"name": "cobblemon:gumshoos",
"forms": [
"normal"
]
},
{
"name": "cobblemon:grubbin",
"forms": [
"normal"
]
},
{
"name": "cobblemon:charjabug",
"forms": [
"normal"
]
},
{
"name": "cobblemon:vikavolt",
"forms": [
"normal"
]
},
{
"name": "cobblemon:crabrawler",
"forms": [
"normal"
]
},
{
"name": "cobblemon:crabominable",
"forms": [
"normal"
]
},
{
"name": "cobblemon:oricorio",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cutiefly",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ribombee",
"forms": [
"normal"
]
},
{
"name": "cobblemon:rockruff",
"forms": [
"normal"
]
},
{
"name": "cobblemon:lycanroc",
"forms": [
"normal"
]
},
{
"name": "cobblemon:wishiwashi",
"forms": [
"normal"
]
},
{
"name": "cobblemon:mareanie",
"forms": [
"normal"
]
},
{
"name": "cobblemon:toxapex",
"forms": [
"normal"
]
},
{
"name": "cobblemon:mudbray",
"forms": [
"normal"
]
},
{
"name": "cobblemon:mudsdale",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dewpider",
"forms": [
"normal"
]
},
{
"name": "cobblemon:araquanid",
"forms": [
"normal"
]
},
{
"name": "cobblemon:fomantis",
"forms": [
"normal"
]
},
{
"name": "cobblemon:lurantis",
"forms": [
"normal"
]
},
{
"name": "cobblemon:morelull",
"forms": [
"normal"
]
},
{
"name": "cobblemon:shiinotic",
"forms": [
"normal"
]
},
{
"name": "cobblemon:salandit",
"forms": [
"normal"
]
},
{
"name": "cobblemon:salazzle",
"forms": [
"normal"
]
},
{
"name": "cobblemon:stufful",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bewear",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bounsweet",
"forms": [
"normal"
]
},
{
"name": "cobblemon:steenee",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tsareena",
"forms": [
"normal"
]
},
{
"name": "cobblemon:comfey",
"forms": [
"normal"
]
},
{
"name": "cobblemon:oranguru",
"forms": [
"normal"
]
},
{
"name": "cobblemon:passimian",
"forms": [
"normal"
]
},
{
"name": "cobblemon:wimpod",
"forms": [
"normal"
]
},
{
"name": "cobblemon:golisopod",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sandygast",
"forms": [
"normal"
]
},
{
"name": "cobblemon:palossand",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pyukumuku",
"forms": [
"normal"
]
},
{
"name": "cobblemon:silvally",
"forms": [
"normal"
]
},
{
"name": "cobblemon:minior",
"forms": [
"normal"
]
},
{
"name": "cobblemon:komala",
"forms": [
"normal"
]
},
{
"name": "cobblemon:turtonator",
"forms": [
"normal"
]
},
{
"name": "cobblemon:togedemaru",
"forms": [
"normal"
]
},
{
"name": "cobblemon:mimikyu",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bruxish",
"forms": [
"normal"
]
},
{
"name": "cobblemon:drampa",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dhelmise",
"forms": [
"normal"
]
},
{
"name": "cobblemon:jangmoo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:hakamoo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:kommoo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tapukoko",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tapulele",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tapubulu",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tapufini",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cosmog",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cosmoem",
"forms": [
"normal"
]
},
{
"name": "cobblemon:solgaleo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:lunala",
"forms": [
"normal"
]
},
{
"name": "cobblemon:nihilego",
"forms": [
"normal"
]
},
{
"name": "cobblemon:buzzwole",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pheromosa",
"forms": [
"normal"
]
},
{
"name": "cobblemon:xurkitree",
"forms": [
"normal"
]
},
{
"name": "cobblemon:celesteela",
"forms": [
"normal"
]
},
{
"name": "cobblemon:kartana",
"forms": [
"normal"
]
},
{
"name": "cobblemon:guzzlord",
"forms": [
"normal"
]
},
{
"name": "cobblemon:necrozma",
"forms": [
"normal"
]
},
{
"name": "cobblemon:magearna",
"forms": [
"normal"
]
},
{
"name": "cobblemon:marshadow",
"forms": [
"normal"
]
},
{
"name": "cobblemon:poipole",
"forms": [
"normal"
]
},
{
"name": "cobblemon:naganadel",
"forms": [
"normal"
]
},
{
"name": "cobblemon:stakataka",
"forms": [
"normal"
]
},
{
"name": "cobblemon:blacephalon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:zeraora",
"forms": [
"normal"
]
}
]
{
"identifier": "cobblemon:national_alola",
"pokemon_list": [
{
"identifier": "cobblemon:rowlet",
"forms": [
"normal",
"region-bias-hisui"
]
},
{
"identifier": "cobblemon:dartrix",
"forms": [
"normal",
"region-bias-hisui"
]
},
{
"identifier": "cobblemon:decidueye",
"forms": [
"normal",
"hisuian"
]
},
{
"identifier": "cobblemon:litten"
},
{
"identifier": "cobblemon:torracat"
},
{
"identifier": "cobblemon:incineroar"
},
{
"identifier": "cobblemon:popplio"
},
{
"identifier": "cobblemon:brionne"
},
{
"identifier": "cobblemon:primarina"
},
{
"identifier": "cobblemon:crabrawler"
},
{
"identifier": "cobblemon:crabominable"
},
{
"identifier": "cobblemon:cutiefly"
},
{
"identifier": "cobblemon:ribombee"
},
{
"identifier": "cobblemon:wishiwashi",
"forms": [
"normal",
"schooling"
]
},
{
"identifier": "cobblemon:mudbray"
},
{
"identifier": "cobblemon:mudsdale"
},
{
"identifier": "cobblemon:fomantis"
},
{
"identifier": "cobblemon:lurantis"
},
{
"identifier": "cobblemon:morelull"
},
{
"identifier": "cobblemon:shiinotic"
},
{
"identifier": "cobblemon:salandit"
},
{
"identifier": "cobblemon:salazzle"
},
{
"identifier": "cobblemon:stufful"
},
{
"identifier": "cobblemon:bewear"
},
{
"identifier": "cobblemon:bounsweet"
},
{
"identifier": "cobblemon:steenee"
},
{
"identifier": "cobblemon:tsareena"
},
{
"identifier": "cobblemon:comfey"
},
{
"identifier": "cobblemon:wimpod"
},
{
"identifier": "cobblemon:golisopod"
},
{
"identifier": "cobblemon:pyukumuku"
},
{
"identifier": "cobblemon:komala",
"forms": [
"normal",
"tree-oak",
"tree-spruce",
"tree-acacia",
"tree-birch",
"tree-darkoak",
"tree-jungle",
"tree-mangrove",
"tree-cherry"
]
},
{
"identifier": "cobblemon:turtonator"
},
{
"identifier": "cobblemon:mimikyu"
},
{
"identifier": "cobblemon:dhelmise"
},
{
"identifier": "cobblemon:jangmoo"
},
{
"identifier": "cobblemon:hakamoo"
},
{
"identifier": "cobblemon:kommoo"
},
{
"identifier": "cobblemon:poipole"
},
{
"identifier": "cobblemon:naganadel"
}
]
}
@@ -1,539 +1,216 @@
{
"identifier": "cobblemon:national_galar",
"pokemon_list": [
{
"name": "cobblemon:grookey",
"forms": [
"normal"
]
},
{
"name": "cobblemon:thwackey",
"forms": [
"normal"
]
},
{
"name": "cobblemon:rillaboom",
"forms": [
"normal"
]
},
{
"name": "cobblemon:scorbunny",
"forms": [
"normal"
]
},
{
"name": "cobblemon:raboot",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cinderace",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sobble",
"forms": [
"normal"
]
},
{
"name": "cobblemon:drizzile",
"forms": [
"normal"
]
},
{
"name": "cobblemon:inteleon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:skwovet",
"forms": [
"normal"
]
},
{
"name": "cobblemon:greedent",
"forms": [
"normal"
]
},
{
"name": "cobblemon:rookidee",
"forms": [
"normal"
]
},
{
"name": "cobblemon:corvisquire",
"forms": [
"normal"
]
},
{
"name": "cobblemon:corviknight",
"forms": [
"normal"
]
},
{
"name": "cobblemon:blipbug",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dottler",
"forms": [
"normal"
]
},
{
"name": "cobblemon:orbeetle",
"forms": [
"normal"
]
},
{
"name": "cobblemon:nickit",
"forms": [
"normal"
]
},
{
"name": "cobblemon:thievul",
"forms": [
"normal"
]
},
{
"name": "cobblemon:gossifleur",
"forms": [
"normal"
]
},
{
"name": "cobblemon:eldegoss",
"forms": [
"normal"
]
},
{
"name": "cobblemon:wooloo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dubwool",
"forms": [
"normal"
]
},
{
"name": "cobblemon:chewtle",
"forms": [
"normal"
]
},
{
"name": "cobblemon:drednaw",
"forms": [
"normal"
]
},
{
"name": "cobblemon:yamper",
"forms": [
"normal"
]
},
{
"name": "cobblemon:boltund",
"forms": [
"normal"
]
},
{
"name": "cobblemon:rolycoly",
"forms": [
"normal"
]
},
{
"name": "cobblemon:carkol",
"forms": [
"normal"
]
},
{
"name": "cobblemon:coalossal",
"forms": [
"normal"
]
},
{
"name": "cobblemon:applin",
"forms": [
"normal"
]
},
{
"name": "cobblemon:flapple",
"forms": [
"normal"
]
},
{
"name": "cobblemon:appletun",
"forms": [
"normal"
]
},
{
"name": "cobblemon:silicobra",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sandaconda",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cramorant",
"forms": [
"normal"
]
},
{
"name": "cobblemon:arrokuda",
"forms": [
"normal"
]
},
{
"name": "cobblemon:barraskewda",
"forms": [
"normal"
]
},
{
"name": "cobblemon:toxel",
"forms": [
"normal"
]
},
{
"name": "cobblemon:toxtricity",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sizzlipede",
"forms": [
"normal"
]
},
{
"name": "cobblemon:centiskorch",
"forms": [
"normal"
]
},
{
"name": "cobblemon:clobbopus",
"forms": [
"normal"
]
},
{
"name": "cobblemon:grapploct",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sinistea",
"forms": [
"normal"
]
},
{
"name": "cobblemon:polteageist",
"forms": [
"normal"
]
},
{
"name": "cobblemon:hatenna",
"forms": [
"normal"
]
},
{
"name": "cobblemon:hattrem",
"forms": [
"normal"
]
},
{
"name": "cobblemon:hatterene",
"forms": [
"normal"
]
},
{
"name": "cobblemon:impidimp",
"forms": [
"normal"
]
},
{
"name": "cobblemon:morgrem",
"forms": [
"normal"
]
},
{
"name": "cobblemon:grimmsnarl",
"forms": [
"normal"
]
},
{
"name": "cobblemon:obstagoon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:perrserker",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cursola",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sirfetchd",
"forms": [
"normal"
]
},
{
"name": "cobblemon:mr.rime",
"forms": [
"normal"
]
},
{
"name": "cobblemon:runerigus",
"forms": [
"normal"
]
},
{
"name": "cobblemon:milcery",
"forms": [
"normal"
]
},
{
"name": "cobblemon:alcremie",
"forms": [
"normal"
]
},
{
"name": "cobblemon:falinks",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pincurchin",
"forms": [
"normal"
]
},
{
"name": "cobblemon:snom",
"forms": [
"normal"
]
},
{
"name": "cobblemon:frosmoth",
"forms": [
"normal"
]
},
{
"name": "cobblemon:stonjourner",
"forms": [
"normal"
]
},
{
"name": "cobblemon:eiscue",
"forms": [
"normal"
]
},
{
"name": "cobblemon:indeedee",
"forms": [
"normal"
]
},
{
"name": "cobblemon:morpeko",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cufant",
"forms": [
"normal"
]
},
{
"name": "cobblemon:copperajah",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dracozolt",
"forms": [
"normal"
]
},
{
"name": "cobblemon:arctozolt",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dracovish",
"forms": [
"normal"
]
},
{
"name": "cobblemon:arctovish",
"forms": [
"normal"
]
},
{
"name": "cobblemon:duraludon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dreepy",
"forms": [
"normal"
]
},
{
"name": "cobblemon:drakloak",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dragapult",
"forms": [
"normal"
]
},
{
"name": "cobblemon:zacian",
"forms": [
"normal"
]
},
{
"name": "cobblemon:zamazenta",
"forms": [
"normal"
]
},
{
"name": "cobblemon:eternatus",
"forms": [
"normal"
]
},
{
"name": "cobblemon:kubfu",
"forms": [
"normal"
]
},
{
"name": "cobblemon:urshifu",
"forms": [
"normal"
]
},
{
"name": "cobblemon:zarude",
"forms": [
"normal"
]
},
{
"name": "cobblemon:regieleki",
"forms": [
"normal"
]
},
{
"name": "cobblemon:regidrago",
"forms": [
"normal"
]
},
{
"name": "cobblemon:glastrier",
"forms": [
"normal"
]
},
{
"name": "cobblemon:spectrier",
"forms": [
"normal"
]
},
{
"name": "cobblemon:calyrex",
"forms": [
"normal"
]
}
]
{
"identifier": "cobblemon:national_galar",
"pokemon_list": [
{
"identifier": "cobblemon:grookey"
},
{
"identifier": "cobblemon:thwackey"
},
{
"identifier": "cobblemon:rillaboom"
},
{
"identifier": "cobblemon:scorbunny"
},
{
"identifier": "cobblemon:raboot"
},
{
"identifier": "cobblemon:cinderace"
},
{
"identifier": "cobblemon:sobble"
},
{
"identifier": "cobblemon:drizzile"
},
{
"identifier": "cobblemon:inteleon"
},
{
"identifier": "cobblemon:rookidee"
},
{
"identifier": "cobblemon:corvisquire"
},
{
"identifier": "cobblemon:corviknight"
},
{
"identifier": "cobblemon:nickit"
},
{
"identifier": "cobblemon:thievul"
},
{
"identifier": "cobblemon:gossifleur"
},
{
"identifier": "cobblemon:eldegoss"
},
{
"identifier": "cobblemon:wooloo",
"forms": [
"normal",
"color-black",
"color-blue",
"color-brown",
"color-cyan",
"color-gray",
"color-green",
"color-light_blue",
"color-light_gray",
"color-lime",
"color-magenta",
"color-orange",
"color-pink",
"color-purple",
"color-red",
"color-white",
"color-yellow"
]
},
{
"identifier": "cobblemon:dubwool",
"forms": [
"normal",
"color-black",
"color-blue",
"color-brown",
"color-cyan",
"color-gray",
"color-green",
"color-light_blue",
"color-light_gray",
"color-lime",
"color-magenta",
"color-orange",
"color-pink",
"color-purple",
"color-red",
"color-white",
"color-yellow"
]
},
{
"identifier": "cobblemon:yamper"
},
{
"identifier": "cobblemon:boltund"
},
{
"identifier": "cobblemon:arrokuda"
},
{
"identifier": "cobblemon:barraskewda"
},
{
"identifier": "cobblemon:sizzlipede"
},
{
"identifier": "cobblemon:centiskorch"
},
{
"identifier": "cobblemon:impidimp"
},
{
"identifier": "cobblemon:morgrem"
},
{
"identifier": "cobblemon:grimmsnarl"
},
{
"identifier": "cobblemon:obstagoon"
},
{
"identifier": "cobblemon:perrserker"
},
{
"identifier": "cobblemon:sirfetchd"
},
{
"identifier": "cobblemon:milcery"
},
{
"identifier": "cobblemon:alcremie",
"forms": [
"normal",
"decoration-berry",
"decoration-strawberry",
"decoration-clover",
"decoration-flower",
"decoration-love",
"decoration-ribbon",
"decoration-star",
"cream-vanilla",
"cream-caramel_swirl",
"cream-ruby",
"cream-matcha",
"cream-mint",
"cream-lemon",
"cream-salted",
"cream-ruby_swirl",
"cream-rainbow_swirl"
]
},
{
"identifier": "cobblemon:falinks"
},
{
"identifier": "cobblemon:stonjourner"
},
{
"identifier": "cobblemon:eiscue",
"forms": [
"normal",
"no_ice"
]
},
{
"identifier": "cobblemon:cufant"
},
{
"identifier": "cobblemon:copperajah"
},
{
"identifier": "cobblemon:dracozolt"
},
{
"identifier": "cobblemon:arctozolt"
},
{
"identifier": "cobblemon:dracovish"
},
{
"identifier": "cobblemon:arctovish"
},
{
"identifier": "cobblemon:dreepy"
},
{
"identifier": "cobblemon:drakloak"
},
{
"identifier": "cobblemon:dragapult"
},
{
"identifier": "cobblemon:wyrdeer"
},
{
"identifier": "cobblemon:kleavor"
},
{
"identifier": "cobblemon:ursaluna"
},
{
"identifier": "cobblemon:basculegion"
},
{
"identifier": "cobblemon:sneasler"
},
{
"identifier": "cobblemon:overqwil"
}
]
}
File diff suppressed because it is too large Load Diff
@@ -1,605 +1,277 @@
{
"identifier": "cobblemon:national_johto",
"pokemon_list": [
{
"name": "cobblemon:chikorita",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bayleef",
"forms": [
"normal"
]
},
{
"name": "cobblemon:meganium",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cyndaquil",
"forms": [
"normal"
]
},
{
"name": "cobblemon:quilava",
"forms": [
"normal"
]
},
{
"name": "cobblemon:typhlosion",
"forms": [
"normal"
]
},
{
"name": "cobblemon:totodile",
"forms": [
"normal"
]
},
{
"name": "cobblemon:croconaw",
"forms": [
"normal"
]
},
{
"name": "cobblemon:feraligatr",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sentret",
"forms": [
"normal"
]
},
{
"name": "cobblemon:furret",
"forms": [
"normal"
]
},
{
"name": "cobblemon:hoothoot",
"forms": [
"normal"
]
},
{
"name": "cobblemon:noctowl",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ledyba",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ledian",
"forms": [
"normal"
]
},
{
"name": "cobblemon:spinarak",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ariados",
"forms": [
"normal"
]
},
{
"name": "cobblemon:crobat",
"forms": [
"normal"
]
},
{
"name": "cobblemon:chinchou",
"forms": [
"normal"
]
},
{
"name": "cobblemon:lanturn",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pichu",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cleffa",
"forms": [
"normal"
]
},
{
"name": "cobblemon:igglybuff",
"forms": [
"normal"
]
},
{
"name": "cobblemon:togepi",
"forms": [
"normal"
]
},
{
"name": "cobblemon:togetic",
"forms": [
"normal"
]
},
{
"name": "cobblemon:natu",
"forms": [
"normal"
]
},
{
"name": "cobblemon:xatu",
"forms": [
"normal"
]
},
{
"name": "cobblemon:mareep",
"forms": [
"normal"
]
},
{
"name": "cobblemon:flaaffy",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ampharos",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bellossom",
"forms": [
"normal"
]
},
{
"name": "cobblemon:marill",
"forms": [
"normal"
]
},
{
"name": "cobblemon:azumarill",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sudowoodo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:politoed",
"forms": [
"normal"
]
},
{
"name": "cobblemon:hoppip",
"forms": [
"normal"
]
},
{
"name": "cobblemon:skiploom",
"forms": [
"normal"
]
},
{
"name": "cobblemon:jumpluff",
"forms": [
"normal"
]
},
{
"name": "cobblemon:aipom",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sunkern",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sunflora",
"forms": [
"normal"
]
},
{
"name": "cobblemon:yanma",
"forms": [
"normal"
]
},
{
"name": "cobblemon:wooper",
"forms": [
"normal"
]
},
{
"name": "cobblemon:quagsire",
"forms": [
"normal"
]
},
{
"name": "cobblemon:espeon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:umbreon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:murkrow",
"forms": [
"normal"
]
},
{
"name": "cobblemon:slowking",
"forms": [
"normal"
]
},
{
"name": "cobblemon:misdreavus",
"forms": [
"normal"
]
},
{
"name": "cobblemon:unown",
"forms": [
"normal"
]
},
{
"name": "cobblemon:wobbuffet",
"forms": [
"normal"
]
},
{
"name": "cobblemon:girafarig",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pineco",
"forms": [
"normal"
]
},
{
"name": "cobblemon:forretress",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dunsparce",
"forms": [
"normal"
]
},
{
"name": "cobblemon:gligar",
"forms": [
"normal"
]
},
{
"name": "cobblemon:steelix",
"forms": [
"normal"
]
},
{
"name": "cobblemon:snubbull",
"forms": [
"normal"
]
},
{
"name": "cobblemon:granbull",
"forms": [
"normal"
]
},
{
"name": "cobblemon:qwilfish",
"forms": [
"normal"
]
},
{
"name": "cobblemon:scizor",
"forms": [
"normal"
]
},
{
"name": "cobblemon:shuckle",
"forms": [
"normal"
]
},
{
"name": "cobblemon:heracross",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sneasel",
"forms": [
"normal"
]
},
{
"name": "cobblemon:teddiursa",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ursaring",
"forms": [
"normal"
]
},
{
"name": "cobblemon:slugma",
"forms": [
"normal"
]
},
{
"name": "cobblemon:magcargo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:swinub",
"forms": [
"normal"
]
},
{
"name": "cobblemon:piloswine",
"forms": [
"normal"
]
},
{
"name": "cobblemon:corsola",
"forms": [
"normal"
]
},
{
"name": "cobblemon:remoraid",
"forms": [
"normal"
]
},
{
"name": "cobblemon:octillery",
"forms": [
"normal"
]
},
{
"name": "cobblemon:delibird",
"forms": [
"normal"
]
},
{
"name": "cobblemon:mantine",
"forms": [
"normal"
]
},
{
"name": "cobblemon:skarmory",
"forms": [
"normal"
]
},
{
"name": "cobblemon:houndour",
"forms": [
"normal"
]
},
{
"name": "cobblemon:houndoom",
"forms": [
"normal"
]
},
{
"name": "cobblemon:kingdra",
"forms": [
"normal"
]
},
{
"name": "cobblemon:phanpy",
"forms": [
"normal"
]
},
{
"name": "cobblemon:donphan",
"forms": [
"normal"
]
},
{
"name": "cobblemon:porygon2",
"forms": [
"normal"
]
},
{
"name": "cobblemon:stantler",
"forms": [
"normal"
]
},
{
"name": "cobblemon:smeargle",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tyrogue",
"forms": [
"normal"
]
},
{
"name": "cobblemon:hitmontop",
"forms": [
"normal"
]
},
{
"name": "cobblemon:smoochum",
"forms": [
"normal"
]
},
{
"name": "cobblemon:elekid",
"forms": [
"normal"
]
},
{
"name": "cobblemon:magby",
"forms": [
"normal"
]
},
{
"name": "cobblemon:miltank",
"forms": [
"normal"
]
},
{
"name": "cobblemon:blissey",
"forms": [
"normal"
]
},
{
"name": "cobblemon:raikou",
"forms": [
"normal"
]
},
{
"name": "cobblemon:entei",
"forms": [
"normal"
]
},
{
"name": "cobblemon:suicune",
"forms": [
"normal"
]
},
{
"name": "cobblemon:larvitar",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pupitar",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tyranitar",
"forms": [
"normal"
]
},
{
"name": "cobblemon:lugia",
"forms": [
"normal"
]
},
{
"name": "cobblemon:hooh",
"forms": [
"normal"
]
},
{
"name": "cobblemon:celebi",
"forms": [
"normal"
]
}
]
{
"identifier": "cobblemon:national_johto",
"pokemon_list": [
{
"identifier": "cobblemon:chikorita"
},
{
"identifier": "cobblemon:bayleef"
},
{
"identifier": "cobblemon:meganium"
},
{
"identifier": "cobblemon:cyndaquil",
"forms": [
"normal",
"region-bias-hisui"
]
},
{
"identifier": "cobblemon:quilava",
"forms": [
"normal",
"region-bias-hisui"
]
},
{
"identifier": "cobblemon:typhlosion",
"forms": [
"normal",
"hisuian"
]
},
{
"identifier": "cobblemon:totodile"
},
{
"identifier": "cobblemon:croconaw"
},
{
"identifier": "cobblemon:feraligatr"
},
{
"identifier": "cobblemon:sentret"
},
{
"identifier": "cobblemon:furret"
},
{
"identifier": "cobblemon:hoothoot"
},
{
"identifier": "cobblemon:noctowl"
},
{
"identifier": "cobblemon:spinarak"
},
{
"identifier": "cobblemon:ariados"
},
{
"identifier": "cobblemon:crobat"
},
{
"identifier": "cobblemon:chinchou"
},
{
"identifier": "cobblemon:lanturn"
},
{
"identifier": "cobblemon:pichu"
},
{
"identifier": "cobblemon:cleffa"
},
{
"identifier": "cobblemon:igglybuff"
},
{
"identifier": "cobblemon:natu"
},
{
"identifier": "cobblemon:xatu"
},
{
"identifier": "cobblemon:mareep"
},
{
"identifier": "cobblemon:flaaffy"
},
{
"identifier": "cobblemon:ampharos"
},
{
"identifier": "cobblemon:bellossom",
"forms": [
"normal",
"valencian"
]
},
{
"identifier": "cobblemon:sudowoodo"
},
{
"identifier": "cobblemon:politoed"
},
{
"identifier": "cobblemon:aipom"
},
{
"identifier": "cobblemon:yanma"
},
{
"identifier": "cobblemon:wooper",
"forms": [
"normal",
"paldean"
]
},
{
"identifier": "cobblemon:quagsire"
},
{
"identifier": "cobblemon:espeon"
},
{
"identifier": "cobblemon:umbreon"
},
{
"identifier": "cobblemon:murkrow"
},
{
"identifier": "cobblemon:slowking"
},
{
"identifier": "cobblemon:misdreavus"
},
{
"identifier": "cobblemon:pineco"
},
{
"identifier": "cobblemon:forretress",
"forms": [
"normal",
"shulker"
]
},
{
"identifier": "cobblemon:gligar"
},
{
"identifier": "cobblemon:steelix"
},
{
"identifier": "cobblemon:snubbull"
},
{
"identifier": "cobblemon:granbull"
},
{
"identifier": "cobblemon:qwilfish",
"forms": [
"normal",
"hisuian"
]
},
{
"identifier": "cobblemon:scizor"
},
{
"identifier": "cobblemon:shuckle"
},
{
"identifier": "cobblemon:heracross"
},
{
"identifier": "cobblemon:sneasel",
"forms": [
"normal",
"hisuian"
]
},
{
"identifier": "cobblemon:teddiursa"
},
{
"identifier": "cobblemon:ursaring"
},
{
"identifier": "cobblemon:slugma"
},
{
"identifier": "cobblemon:magcargo"
},
{
"identifier": "cobblemon:swinub"
},
{
"identifier": "cobblemon:piloswine"
},
{
"identifier": "cobblemon:skarmory"
},
{
"identifier": "cobblemon:kingdra"
},
{
"identifier": "cobblemon:phanpy"
},
{
"identifier": "cobblemon:donphan"
},
{
"identifier": "cobblemon:porygon2"
},
{
"identifier": "cobblemon:stantler"
},
{
"identifier": "cobblemon:smeargle",
"forms": [
"normal",
"color-black",
"color-blue",
"color-brown",
"color-cyan",
"color-gray",
"color-green",
"color-light_blue",
"color-light_gray",
"color-lime",
"color-magenta",
"color-orange",
"color-pink",
"color-purple",
"color-red",
"color-white",
"color-yellow"
]
},
{
"identifier": "cobblemon:tyrogue"
},
{
"identifier": "cobblemon:hitmontop"
},
{
"identifier": "cobblemon:smoochum"
},
{
"identifier": "cobblemon:elekid"
},
{
"identifier": "cobblemon:magby"
},
{
"identifier": "cobblemon:miltank",
"forms": [
"normal",
"mooshtank-red",
"mooshtank-brown"
]
},
{
"identifier": "cobblemon:blissey"
},
{
"identifier": "cobblemon:larvitar"
},
{
"identifier": "cobblemon:pupitar"
},
{
"identifier": "cobblemon:tyranitar"
}
]
}
@@ -1,437 +1,196 @@
{
"identifier": "cobblemon:national_kalos",
"pokemon_list": [
{
"name": "cobblemon:chespin",
"forms": [
"normal"
]
},
{
"name": "cobblemon:quilladin",
"forms": [
"normal"
]
},
{
"name": "cobblemon:chesnaught",
"forms": [
"normal"
]
},
{
"name": "cobblemon:fennekin",
"forms": [
"normal"
]
},
{
"name": "cobblemon:braixen",
"forms": [
"normal"
]
},
{
"name": "cobblemon:delphox",
"forms": [
"normal"
]
},
{
"name": "cobblemon:froakie",
"forms": [
"normal"
]
},
{
"name": "cobblemon:frogadier",
"forms": [
"normal"
]
},
{
"name": "cobblemon:greninja",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bunnelby",
"forms": [
"normal"
]
},
{
"name": "cobblemon:diggersby",
"forms": [
"normal"
]
},
{
"name": "cobblemon:fletchling",
"forms": [
"normal"
]
},
{
"name": "cobblemon:fletchinder",
"forms": [
"normal"
]
},
{
"name": "cobblemon:talonflame",
"forms": [
"normal"
]
},
{
"name": "cobblemon:scatterbug",
"forms": [
"normal"
]
},
{
"name": "cobblemon:spewpa",
"forms": [
"normal"
]
},
{
"name": "cobblemon:vivillon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:litleo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pyroar",
"forms": [
"normal"
]
},
{
"name": "cobblemon:flabebe",
"forms": [
"normal"
]
},
{
"name": "cobblemon:floette",
"forms": [
"normal"
]
},
{
"name": "cobblemon:florges",
"forms": [
"normal"
]
},
{
"name": "cobblemon:skiddo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:gogoat",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pancham",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pangoro",
"forms": [
"normal"
]
},
{
"name": "cobblemon:furfrou",
"forms": [
"normal"
]
},
{
"name": "cobblemon:espurr",
"forms": [
"normal"
]
},
{
"name": "cobblemon:meowstic",
"forms": [
"normal"
]
},
{
"name": "cobblemon:honedge",
"forms": [
"normal"
]
},
{
"name": "cobblemon:doublade",
"forms": [
"normal"
]
},
{
"name": "cobblemon:aegislash",
"forms": [
"normal"
]
},
{
"name": "cobblemon:spritzee",
"forms": [
"normal"
]
},
{
"name": "cobblemon:aromatisse",
"forms": [
"normal"
]
},
{
"name": "cobblemon:swirlix",
"forms": [
"normal"
]
},
{
"name": "cobblemon:slurpuff",
"forms": [
"normal"
]
},
{
"name": "cobblemon:inkay",
"forms": [
"normal"
]
},
{
"name": "cobblemon:malamar",
"forms": [
"normal"
]
},
{
"name": "cobblemon:binacle",
"forms": [
"normal"
]
},
{
"name": "cobblemon:barbaracle",
"forms": [
"normal"
]
},
{
"name": "cobblemon:skrelp",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dragalge",
"forms": [
"normal"
]
},
{
"name": "cobblemon:clauncher",
"forms": [
"normal"
]
},
{
"name": "cobblemon:clawitzer",
"forms": [
"normal"
]
},
{
"name": "cobblemon:helioptile",
"forms": [
"normal"
]
},
{
"name": "cobblemon:heliolisk",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tyrunt",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tyrantrum",
"forms": [
"normal"
]
},
{
"name": "cobblemon:amaura",
"forms": [
"normal"
]
},
{
"name": "cobblemon:aurorus",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sylveon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:hawlucha",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dedenne",
"forms": [
"normal"
]
},
{
"name": "cobblemon:carbink",
"forms": [
"normal"
]
},
{
"name": "cobblemon:goomy",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sliggoo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:goodra",
"forms": [
"normal"
]
},
{
"name": "cobblemon:klefki",
"forms": [
"normal"
]
},
{
"name": "cobblemon:phantump",
"forms": [
"normal"
]
},
{
"name": "cobblemon:trevenant",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pumpkaboo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:gourgeist",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bergmite",
"forms": [
"normal"
]
},
{
"name": "cobblemon:avalugg",
"forms": [
"normal"
]
},
{
"name": "cobblemon:noibat",
"forms": [
"normal"
]
},
{
"name": "cobblemon:noivern",
"forms": [
"normal"
]
},
{
"name": "cobblemon:xerneas",
"forms": [
"normal"
]
},
{
"name": "cobblemon:yveltal",
"forms": [
"normal"
]
},
{
"name": "cobblemon:zygarde",
"forms": [
"normal"
]
},
{
"name": "cobblemon:diancie",
"forms": [
"normal"
]
},
{
"name": "cobblemon:hoopa",
"forms": [
"normal"
]
},
{
"name": "cobblemon:volcanion",
"forms": [
"normal"
]
}
]
{
"identifier": "cobblemon:national_kalos",
"pokemon_list": [
{
"identifier": "cobblemon:chespin"
},
{
"identifier": "cobblemon:quilladin"
},
{
"identifier": "cobblemon:chesnaught"
},
{
"identifier": "cobblemon:fennekin"
},
{
"identifier": "cobblemon:braixen"
},
{
"identifier": "cobblemon:delphox"
},
{
"identifier": "cobblemon:froakie"
},
{
"identifier": "cobblemon:frogadier"
},
{
"identifier": "cobblemon:greninja"
},
{
"identifier": "cobblemon:bunnelby"
},
{
"identifier": "cobblemon:diggersby"
},
{
"identifier": "cobblemon:fletchling"
},
{
"identifier": "cobblemon:fletchinder"
},
{
"identifier": "cobblemon:talonflame"
},
{
"identifier": "cobblemon:scatterbug"
},
{
"identifier": "cobblemon:spewpa"
},
{
"identifier": "cobblemon:vivillon",
"forms": [
"normal",
"vivillon-wings-archipelago",
"vivillon-wings-continental",
"vivillon-wings-elegant",
"vivillon-wings-fancy",
"vivillon-wings-garden",
"vivillon-wings-high-plains",
"vivillon-wings-icy-snow",
"vivillon-wings-jungle",
"vivillon-wings-marine",
"vivillon-wings-meadow",
"vivillon-wings-modern",
"vivillon-wings-monsoon",
"vivillon-wings-ocean",
"vivillon-wings-poke-ball",
"vivillon-wings-polar",
"vivillon-wings-river",
"vivillon-wings-sandstorm",
"vivillon-wings-savanna",
"vivillon-wings-sun",
"vivillon-wings-tundra",
"vivillon-wings-inferno",
"vivillon-wings-void",
"vivillon-wings-forsaken"
]
},
{
"identifier": "cobblemon:flabebe",
"forms": [
"normal",
"flower-blue",
"flower-orange",
"flower-yellow",
"flower-white",
"flower-red",
"flower-pink"
]
},
{
"identifier": "cobblemon:floette",
"forms": [
"normal",
"flower-blue",
"flower-orange",
"flower-yellow",
"flower-white",
"flower-red",
"flower-pink"
]
},
{
"identifier": "cobblemon:florges",
"forms": [
"normal",
"flower-blue",
"flower-orange",
"flower-yellow",
"flower-white",
"flower-red",
"flower-pink"
]
},
{
"identifier": "cobblemon:honedge"
},
{
"identifier": "cobblemon:doublade"
},
{
"identifier": "cobblemon:aegislash"
},
{
"identifier": "cobblemon:skrelp"
},
{
"identifier": "cobblemon:dragalge"
},
{
"identifier": "cobblemon:tyrunt"
},
{
"identifier": "cobblemon:tyrantrum"
},
{
"identifier": "cobblemon:amaura"
},
{
"identifier": "cobblemon:aurorus"
},
{
"identifier": "cobblemon:sylveon"
},
{
"identifier": "cobblemon:carbink"
},
{
"identifier": "cobblemon:goomy",
"forms": [
"normal",
"region-bias-hisui"
]
},
{
"identifier": "cobblemon:sliggoo",
"forms": [
"normal",
"hisuian"
]
},
{
"identifier": "cobblemon:goodra",
"forms": [
"normal",
"hisuian"
]
},
{
"identifier": "cobblemon:klefki"
},
{
"identifier": "cobblemon:phantump"
},
{
"identifier": "cobblemon:trevenant"
},
{
"identifier": "cobblemon:pumpkaboo"
},
{
"identifier": "cobblemon:gourgeist"
},
{
"identifier": "cobblemon:bergmite"
},
{
"identifier": "cobblemon:avalugg"
},
{
"identifier": "cobblemon:xerneas"
}
]
}
File diff suppressed because it is too large Load Diff
@@ -1,725 +1,174 @@
{
"identifier": "cobblemon:national_paldea",
"pokemon_list": [
{
"name": "cobblemon:sprigatito",
"forms": [
"normal"
]
},
{
"name": "cobblemon:floragato",
"forms": [
"normal"
]
},
{
"name": "cobblemon:meowscarada",
"forms": [
"normal"
]
},
{
"name": "cobblemon:fuecoco",
"forms": [
"normal"
]
},
{
"name": "cobblemon:crocalor",
"forms": [
"normal"
]
},
{
"name": "cobblemon:skeledirge",
"forms": [
"normal"
]
},
{
"name": "cobblemon:quaxly",
"forms": [
"normal"
]
},
{
"name": "cobblemon:quaxwell",
"forms": [
"normal"
]
},
{
"name": "cobblemon:quaquaval",
"forms": [
"normal"
]
},
{
"name": "cobblemon:lechonk",
"forms": [
"normal"
]
},
{
"name": "cobblemon:oinkologne",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tarountula",
"forms": [
"normal"
]
},
{
"name": "cobblemon:spidops",
"forms": [
"normal"
]
},
{
"name": "cobblemon:nymble",
"forms": [
"normal"
]
},
{
"name": "cobblemon:lokix",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pawmi",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pawmo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pawmot",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tandemaus",
"forms": [
"normal"
]
},
{
"name": "cobblemon:maushold",
"forms": [
"normal"
]
},
{
"name": "cobblemon:fidough",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dachsbun",
"forms": [
"normal"
]
},
{
"name": "cobblemon:smoliv",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dolliv",
"forms": [
"normal"
]
},
{
"name": "cobblemon:arboliva",
"forms": [
"normal"
]
},
{
"name": "cobblemon:squawkabilly",
"forms": [
"normal"
]
},
{
"name": "cobblemon:nacli",
"forms": [
"normal"
]
},
{
"name": "cobblemon:naclstack",
"forms": [
"normal"
]
},
{
"name": "cobblemon:garganacl",
"forms": [
"normal"
]
},
{
"name": "cobblemon:charcadet",
"forms": [
"normal"
]
},
{
"name": "cobblemon:armarouge",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ceruledge",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tadbulb",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bellibolt",
"forms": [
"normal"
]
},
{
"name": "cobblemon:wattrel",
"forms": [
"normal"
]
},
{
"name": "cobblemon:kilowattrel",
"forms": [
"normal"
]
},
{
"name": "cobblemon:maschiff",
"forms": [
"normal"
]
},
{
"name": "cobblemon:mabosstiff",
"forms": [
"normal"
]
},
{
"name": "cobblemon:shroodle",
"forms": [
"normal"
]
},
{
"name": "cobblemon:grafaiai",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bramblin",
"forms": [
"normal"
]
},
{
"name": "cobblemon:brambleghast",
"forms": [
"normal"
]
},
{
"name": "cobblemon:toedscool",
"forms": [
"normal"
]
},
{
"name": "cobblemon:toedscruel",
"forms": [
"normal"
]
},
{
"name": "cobblemon:klawf",
"forms": [
"normal"
]
},
{
"name": "cobblemon:capsakid",
"forms": [
"normal"
]
},
{
"name": "cobblemon:scovillain",
"forms": [
"normal"
]
},
{
"name": "cobblemon:rellor",
"forms": [
"normal"
]
},
{
"name": "cobblemon:rabsca",
"forms": [
"normal"
]
},
{
"name": "cobblemon:flittle",
"forms": [
"normal"
]
},
{
"name": "cobblemon:espathra",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tinkatink",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tinkatuff",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tinkaton",
"forms": [
"normal"
]
},
{
"name": "cobblemon:wiglett",
"forms": [
"normal"
]
},
{
"name": "cobblemon:wugtrio",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bombirdier",
"forms": [
"normal"
]
},
{
"name": "cobblemon:finizen",
"forms": [
"normal"
]
},
{
"name": "cobblemon:palafin",
"forms": [
"normal"
]
},
{
"name": "cobblemon:varoom",
"forms": [
"normal"
]
},
{
"name": "cobblemon:revavroom",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cyclizar",
"forms": [
"normal"
]
},
{
"name": "cobblemon:orthworm",
"forms": [
"normal"
]
},
{
"name": "cobblemon:glimmet",
"forms": [
"normal"
]
},
{
"name": "cobblemon:glimmora",
"forms": [
"normal"
]
},
{
"name": "cobblemon:greavard",
"forms": [
"normal"
]
},
{
"name": "cobblemon:houndstone",
"forms": [
"normal"
]
},
{
"name": "cobblemon:flamigo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cetoddle",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cetitan",
"forms": [
"normal"
]
},
{
"name": "cobblemon:veluza",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dondozo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tatsugiri",
"forms": [
"normal"
]
},
{
"name": "cobblemon:annihilape",
"forms": [
"normal"
]
},
{
"name": "cobblemon:clodsire",
"forms": [
"normal"
]
},
{
"name": "cobblemon:farigiraf",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dudunsparce",
"forms": [
"normal"
]
},
{
"name": "cobblemon:kingambit",
"forms": [
"normal"
]
},
{
"name": "cobblemon:greattusk",
"forms": [
"normal"
]
},
{
"name": "cobblemon:screamtail",
"forms": [
"normal"
]
},
{
"name": "cobblemon:brutebonnet",
"forms": [
"normal"
]
},
{
"name": "cobblemon:fluttermane",
"forms": [
"normal"
]
},
{
"name": "cobblemon:slitherwing",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sandyshocks",
"forms": [
"normal"
]
},
{
"name": "cobblemon:irontreads",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ironbundle",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ironhands",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ironjugulis",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ironmoth",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ironthorns",
"forms": [
"normal"
]
},
{
"name": "cobblemon:frigibax",
"forms": [
"normal"
]
},
{
"name": "cobblemon:arctibax",
"forms": [
"normal"
]
},
{
"name": "cobblemon:baxcalibur",
"forms": [
"normal"
]
},
{
"name": "cobblemon:gimmighoul",
"forms": [
"normal"
]
},
{
"name": "cobblemon:gholdengo",
"forms": [
"normal"
]
},
{
"name": "cobblemon:wochien",
"forms": [
"normal"
]
},
{
"name": "cobblemon:chienpao",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tinglu",
"forms": [
"normal"
]
},
{
"name": "cobblemon:chiyu",
"forms": [
"normal"
]
},
{
"name": "cobblemon:roaringmoon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ironvaliant",
"forms": [
"normal"
]
},
{
"name": "cobblemon:koraidon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:miraidon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:walkingwake",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ironleaves",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dipplin",
"forms": [
"normal"
]
},
{
"name": "cobblemon:poltchageist",
"forms": [
"normal"
]
},
{
"name": "cobblemon:sinistcha",
"forms": [
"normal"
]
},
{
"name": "cobblemon:okidogi",
"forms": [
"normal"
]
},
{
"name": "cobblemon:munkidori",
"forms": [
"normal"
]
},
{
"name": "cobblemon:fezandipiti",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ogerpon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:archaludon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:hydrapple",
"forms": [
"normal"
]
},
{
"name": "cobblemon:gougingfire",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ragingbolt",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ironboulder",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ironcrown",
"forms": [
"normal"
]
},
{
"name": "cobblemon:terapagos",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pecharunt",
"forms": [
"normal"
]
}
]
{
"identifier": "cobblemon:national_paldea",
"pokemon_list": [
{
"identifier": "cobblemon:sprigatito"
},
{
"identifier": "cobblemon:floragato"
},
{
"identifier": "cobblemon:meowscarada"
},
{
"identifier": "cobblemon:fuecoco"
},
{
"identifier": "cobblemon:crocalor"
},
{
"identifier": "cobblemon:skeledirge"
},
{
"identifier": "cobblemon:quaxly"
},
{
"identifier": "cobblemon:quaxwell"
},
{
"identifier": "cobblemon:quaquaval"
},
{
"identifier": "cobblemon:lechonk"
},
{
"identifier": "cobblemon:oinkologne"
},
{
"identifier": "cobblemon:tandemaus"
},
{
"identifier": "cobblemon:maushold",
"forms": [
"normal",
"maushold-family-four"
]
},
{
"identifier": "cobblemon:fidough"
},
{
"identifier": "cobblemon:dachsbun"
},
{
"identifier": "cobblemon:squawkabilly",
"forms": [
"normal",
"squawkabilly-color-blue",
"squawkabilly-color-gray",
"squawkabilly-color-green",
"squawkabilly-color-yellow"
]
},
{
"identifier": "cobblemon:nacli"
},
{
"identifier": "cobblemon:naclstack"
},
{
"identifier": "cobblemon:garganacl"
},
{
"identifier": "cobblemon:charcadet"
},
{
"identifier": "cobblemon:armarouge"
},
{
"identifier": "cobblemon:ceruledge"
},
{
"identifier": "cobblemon:maschiff"
},
{
"identifier": "cobblemon:mabosstiff"
},
{
"identifier": "cobblemon:shroodle"
},
{
"identifier": "cobblemon:grafaiai"
},
{
"identifier": "cobblemon:flittle"
},
{
"identifier": "cobblemon:espathra"
},
{
"identifier": "cobblemon:tinkatink"
},
{
"identifier": "cobblemon:tinkatuff"
},
{
"identifier": "cobblemon:tinkaton"
},
{
"identifier": "cobblemon:varoom"
},
{
"identifier": "cobblemon:revavroom"
},
{
"identifier": "cobblemon:glimmet"
},
{
"identifier": "cobblemon:glimmora"
},
{
"identifier": "cobblemon:cetoddle"
},
{
"identifier": "cobblemon:cetitan"
},
{
"identifier": "cobblemon:tatsugiri",
"forms": [
"normal",
"tatsugiri-texture-curly",
"tatsugiri-texture-droopy",
"tatsugiri-texture-stretchy"
]
},
{
"identifier": "cobblemon:annihilape"
},
{
"identifier": "cobblemon:clodsire"
},
{
"identifier": "cobblemon:gimmighoul",
"forms": [
"normal",
"minecraft",
"roaming"
]
},
{
"identifier": "cobblemon:gholdengo",
"forms": [
"normal",
"netherite-coating-stage1",
"netherite-coating-stage2",
"netherite-coating-stage3",
"netherite-coating-stage4",
"netherite-coating-stage5",
"netherite-coating-stage6",
"netherite-coating-stage7",
"netherite-coating-full"
]
},
{
"identifier": "cobblemon:walkingwake"
},
{
"identifier": "cobblemon:ironleaves",
"forms": [
"normal",
"sleep"
]
}
]
}
@@ -1,647 +1,222 @@
{
"identifier": "cobblemon:national_sinnoh",
"pokemon_list": [
{
"name": "cobblemon:turtwig",
"forms": [
"normal"
]
},
{
"name": "cobblemon:grotle",
"forms": [
"normal"
]
},
{
"name": "cobblemon:torterra",
"forms": [
"normal"
]
},
{
"name": "cobblemon:chimchar",
"forms": [
"normal"
]
},
{
"name": "cobblemon:monferno",
"forms": [
"normal"
]
},
{
"name": "cobblemon:infernape",
"forms": [
"normal"
]
},
{
"name": "cobblemon:piplup",
"forms": [
"normal"
]
},
{
"name": "cobblemon:prinplup",
"forms": [
"normal"
]
},
{
"name": "cobblemon:empoleon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:starly",
"forms": [
"normal"
]
},
{
"name": "cobblemon:staravia",
"forms": [
"normal"
]
},
{
"name": "cobblemon:staraptor",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bidoof",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bibarel",
"forms": [
"normal"
]
},
{
"name": "cobblemon:kricketot",
"forms": [
"normal"
]
},
{
"name": "cobblemon:kricketune",
"forms": [
"normal"
]
},
{
"name": "cobblemon:shinx",
"forms": [
"normal"
]
},
{
"name": "cobblemon:luxio",
"forms": [
"normal"
]
},
{
"name": "cobblemon:luxray",
"forms": [
"normal"
]
},
{
"name": "cobblemon:budew",
"forms": [
"normal"
]
},
{
"name": "cobblemon:roserade",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cranidos",
"forms": [
"normal"
]
},
{
"name": "cobblemon:rampardos",
"forms": [
"normal"
]
},
{
"name": "cobblemon:shieldon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bastiodon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:burmy",
"forms": [
"normal"
]
},
{
"name": "cobblemon:wormadam",
"forms": [
"normal"
]
},
{
"name": "cobblemon:mothim",
"forms": [
"normal"
]
},
{
"name": "cobblemon:combee",
"forms": [
"normal"
]
},
{
"name": "cobblemon:vespiquen",
"forms": [
"normal"
]
},
{
"name": "cobblemon:pachirisu",
"forms": [
"normal"
]
},
{
"name": "cobblemon:buizel",
"forms": [
"normal"
]
},
{
"name": "cobblemon:floatzel",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cherubi",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cherrim",
"forms": [
"normal"
]
},
{
"name": "cobblemon:shellos",
"forms": [
"normal"
]
},
{
"name": "cobblemon:gastrodon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:ambipom",
"forms": [
"normal"
]
},
{
"name": "cobblemon:drifloon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:drifblim",
"forms": [
"normal"
]
},
{
"name": "cobblemon:buneary",
"forms": [
"normal"
]
},
{
"name": "cobblemon:lopunny",
"forms": [
"normal"
]
},
{
"name": "cobblemon:mismagius",
"forms": [
"normal"
]
},
{
"name": "cobblemon:honchkrow",
"forms": [
"normal"
]
},
{
"name": "cobblemon:glameow",
"forms": [
"normal"
]
},
{
"name": "cobblemon:purugly",
"forms": [
"normal"
]
},
{
"name": "cobblemon:chingling",
"forms": [
"normal"
]
},
{
"name": "cobblemon:stunky",
"forms": [
"normal"
]
},
{
"name": "cobblemon:skuntank",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bronzor",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bronzong",
"forms": [
"normal"
]
},
{
"name": "cobblemon:bonsly",
"forms": [
"normal"
]
},
{
"name": "cobblemon:mimejr.",
"forms": [
"normal"
]
},
{
"name": "cobblemon:happiny",
"forms": [
"normal"
]
},
{
"name": "cobblemon:chatot",
"forms": [
"normal"
]
},
{
"name": "cobblemon:spiritomb",
"forms": [
"normal"
]
},
{
"name": "cobblemon:gible",
"forms": [
"normal"
]
},
{
"name": "cobblemon:gabite",
"forms": [
"normal"
]
},
{
"name": "cobblemon:garchomp",
"forms": [
"normal"
]
},
{
"name": "cobblemon:munchlax",
"forms": [
"normal"
]
},
{
"name": "cobblemon:riolu",
"forms": [
"normal"
]
},
{
"name": "cobblemon:lucario",
"forms": [
"normal"
]
},
{
"name": "cobblemon:hippopotas",
"forms": [
"normal"
]
},
{
"name": "cobblemon:hippowdon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:skorupi",
"forms": [
"normal"
]
},
{
"name": "cobblemon:drapion",
"forms": [
"normal"
]
},
{
"name": "cobblemon:croagunk",
"forms": [
"normal"
]
},
{
"name": "cobblemon:toxicroak",
"forms": [
"normal"
]
},
{
"name": "cobblemon:carnivine",
"forms": [
"normal"
]
},
{
"name": "cobblemon:finneon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:lumineon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:mantyke",
"forms": [
"normal"
]
},
{
"name": "cobblemon:snover",
"forms": [
"normal"
]
},
{
"name": "cobblemon:abomasnow",
"forms": [
"normal"
]
},
{
"name": "cobblemon:weavile",
"forms": [
"normal"
]
},
{
"name": "cobblemon:magnezone",
"forms": [
"normal"
]
},
{
"name": "cobblemon:lickilicky",
"forms": [
"normal"
]
},
{
"name": "cobblemon:rhyperior",
"forms": [
"normal"
]
},
{
"name": "cobblemon:tangrowth",
"forms": [
"normal"
]
},
{
"name": "cobblemon:electivire",
"forms": [
"normal"
]
},
{
"name": "cobblemon:magmortar",
"forms": [
"normal"
]
},
{
"name": "cobblemon:togekiss",
"forms": [
"normal"
]
},
{
"name": "cobblemon:yanmega",
"forms": [
"normal"
]
},
{
"name": "cobblemon:leafeon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:glaceon",
"forms": [
"normal"
]
},
{
"name": "cobblemon:gliscor",
"forms": [
"normal"
]
},
{
"name": "cobblemon:mamoswine",
"forms": [
"normal"
]
},
{
"name": "cobblemon:porygonz",
"forms": [
"normal"
]
},
{
"name": "cobblemon:gallade",
"forms": [
"normal"
]
},
{
"name": "cobblemon:probopass",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dusknoir",
"forms": [
"normal"
]
},
{
"name": "cobblemon:froslass",
"forms": [
"normal"
]
},
{
"name": "cobblemon:rotom",
"forms": [
"normal"
]
},
{
"name": "cobblemon:uxie",
"forms": [
"normal"
]
},
{
"name": "cobblemon:mesprit",
"forms": [
"normal"
]
},
{
"name": "cobblemon:azelf",
"forms": [
"normal"
]
},
{
"name": "cobblemon:dialga",
"forms": [
"normal"
]
},
{
"name": "cobblemon:palkia",
"forms": [
"normal"
]
},
{
"name": "cobblemon:heatran",
"forms": [
"normal"
]
},
{
"name": "cobblemon:regigigas",
"forms": [
"normal"
]
},
{
"name": "cobblemon:giratina",
"forms": [
"normal"
]
},
{
"name": "cobblemon:cresselia",
"forms": [
"normal"
]
},
{
"name": "cobblemon:phione",
"forms": [
"normal"
]
},
{
"name": "cobblemon:manaphy",
"forms": [
"normal"
]
},
{
"name": "cobblemon:darkrai",
"forms": [
"normal"
]
},
{
"name": "cobblemon:shaymin",
"forms": [
"normal"
]
},
{
"name": "cobblemon:arceus",
"forms": [
"normal"
]
}
]
{
"identifier": "cobblemon:national_sinnoh",
"pokemon_list": [
{
"identifier": "cobblemon:turtwig"
},
{
"identifier": "cobblemon:grotle"
},
{
"identifier": "cobblemon:torterra",
"forms": [
"normal",
"tree-cherry",
"tree-birch",
"tree-darkoak",
"tree-oak",
"tree-spruce",
"tree-jungle",
"tree-swamp",
"tree-acacia",
"tree-azalea",
"tree-mangrove"
]
},
{
"identifier": "cobblemon:chimchar"
},
{
"identifier": "cobblemon:monferno"
},
{
"identifier": "cobblemon:infernape"
},
{
"identifier": "cobblemon:piplup"
},
{
"identifier": "cobblemon:prinplup"
},
{
"identifier": "cobblemon:empoleon"
},
{
"identifier": "cobblemon:starly"
},
{
"identifier": "cobblemon:staravia"
},
{
"identifier": "cobblemon:staraptor"
},
{
"identifier": "cobblemon:bidoof"
},
{
"identifier": "cobblemon:bibarel"
},
{
"identifier": "cobblemon:kricketot"
},
{
"identifier": "cobblemon:kricketune"
},
{
"identifier": "cobblemon:shinx"
},
{
"identifier": "cobblemon:luxio"
},
{
"identifier": "cobblemon:luxray"
},
{
"identifier": "cobblemon:budew"
},
{
"identifier": "cobblemon:roserade"
},
{
"identifier": "cobblemon:cranidos"
},
{
"identifier": "cobblemon:rampardos"
},
{
"identifier": "cobblemon:shieldon"
},
{
"identifier": "cobblemon:bastiodon"
},
{
"identifier": "cobblemon:combee"
},
{
"identifier": "cobblemon:vespiquen"
},
{
"identifier": "cobblemon:pachirisu"
},
{
"identifier": "cobblemon:buizel"
},
{
"identifier": "cobblemon:floatzel"
},
{
"identifier": "cobblemon:ambipom"
},
{
"identifier": "cobblemon:drifloon"
},
{
"identifier": "cobblemon:drifblim"
},
{
"identifier": "cobblemon:buneary"
},
{
"identifier": "cobblemon:lopunny"
},
{
"identifier": "cobblemon:mismagius"
},
{
"identifier": "cobblemon:honchkrow"
},
{
"identifier": "cobblemon:chingling"
},
{
"identifier": "cobblemon:bonsly"
},
{
"identifier": "cobblemon:mimejr"
},
{
"identifier": "cobblemon:happiny"
},
{
"identifier": "cobblemon:chatot"
},
{
"identifier": "cobblemon:spiritomb"
},
{
"identifier": "cobblemon:gible"
},
{
"identifier": "cobblemon:gabite"
},
{
"identifier": "cobblemon:garchomp"
},
{
"identifier": "cobblemon:munchlax"
},
{
"identifier": "cobblemon:riolu"
},
{
"identifier": "cobblemon:lucario"
},
{
"identifier": "cobblemon:hippopotas"
},
{
"identifier": "cobblemon:hippowdon"
},
{
"identifier": "cobblemon:carnivine"
},
{
"identifier": "cobblemon:weavile"
},
{
"identifier": "cobblemon:magnezone"
},
{
"identifier": "cobblemon:lickilicky"
},
{
"identifier": "cobblemon:rhyperior"
},
{
"identifier": "cobblemon:tangrowth"
},
{
"identifier": "cobblemon:electivire"
},
{
"identifier": "cobblemon:magmortar"
},
{
"identifier": "cobblemon:yanmega"
},
{
"identifier": "cobblemon:leafeon"
},
{
"identifier": "cobblemon:glaceon"
},
{
"identifier": "cobblemon:gliscor"
},
{
"identifier": "cobblemon:mamoswine"
},
{
"identifier": "cobblemon:porygonz"
},
{
"identifier": "cobblemon:gallade"
},
{
"identifier": "cobblemon:probopass"
},
{
"identifier": "cobblemon:dusknoir"
}
]
}
@@ -2,13 +2,13 @@
"identifier": "cobblemon:national_unknown",
"pokemon_list": [
{
"name": "cobblemon:meltan",
"identifier": "cobblemon:meltan",
"forms": [
"normal"
]
},
{
"name": "cobblemon:melmetal",
"identifier": "cobblemon:melmetal",
"forms": [
"normal"
]
File diff suppressed because it is too large Load Diff
+92
View File
@@ -0,0 +1,92 @@
import csv
import json
dexes = {}
with open('pokedex.csv', newline='') as csvfile:
data_reader = csv.reader(csvfile, delimiter=',', quotechar='|')
for row in data_reader:
if(row[0] == 'pokedex'): continue
dex_name = row[0]
if dex_name not in dexes:
dexes[dex_name] = {}
dex = dexes[dex_name]
identifier = row[1]
form = row[2]
category = row[3]
tags = row[4]
invisible_until_found = row[5]
visual_number = row[6]
skip_auto_numbering = row[7]
pokemon = {}
if identifier in dex:
pokemon = dex[identifier]
pokemon['identifier'] = identifier
if 'forms' not in pokemon:
pokemon['forms'] = []
pokemon['forms'].append(form)
if 'category' not in pokemon:
pokemon['category'] = category
if 'tags' not in pokemon:
pokemon['tags'] = []
for tag in tags:
pokemon['tags'].append(tag)
if 'invisible_until_found' not in pokemon:
pokemon['invisible_until_found'] = False
if invisible_until_found != '' and bool(invisible_until_found):
pokemon['invisible_until_found'] = True
if 'visual_number' not in pokemon:
pokemon['visual_number'] = ''
if(visual_number != '' and pokemon['visual_number'] == ''):
pokemon['visual_number'] = visual_number
if 'skip_auto_numbering' not in pokemon:
pokemon['skip_auto_numbering'] = False
if skip_auto_numbering != '' and bool(skip_auto_numbering):
pokemon['skip_auto_numbering'] = True
dex[identifier] = pokemon
for dex_name in dexes.keys():
dex = dexes[dex_name]
json_dict = {'identifier':f'cobblemon:{dex_name}'}
pokemon_list = []
for entry in dex.values():
json_entry = {'identifier':entry['identifier']}
if not (len(entry['forms']) == 1 and entry['forms'][0] == 'normal'):
json_entry['forms'] = entry['forms']
if entry['category'] != '':
json_entry['category'] = entry['category']
if len(entry['tags']) != 0:
json_entry['tags'] = entry['tags']
if entry['invisible_until_found'] == True:
json_entry['invisible_until_found'] = entry['invisible_until_found']
if entry['visual_number'] != '':
json_entry['visual_number'] = entry['visual_number']
if entry['skip_auto_numbering'] == True:
json_entry['skip_auto_numbering'] = entry['skip_auto_numbering']
pokemon_list.append(json_entry)
json_dict['pokemon_list'] = pokemon_list
with open(f'{dex_name}.json', "w") as outfile:
outfile.write(json.dumps(json_dict, indent=4))
@@ -0,0 +1,72 @@
import csv
import json
import os
# special thanks to Rosemary for writing this script - JPAK
# ignore "shiny" and "female" aspects
# every pokemon should have a form with an empty string
# get species, aspects, generation
# for each generation grab national dex number
# hash map of dex number as key, to generation
species_directory = 'species'
generations = {}
for generation in os.listdir(species_directory):
generation_directory = os.path.join(species_directory, generation)
if os.path.isdir(generation_directory):
for species_filename in os.listdir(generation_directory):
species_path = os.path.join(generation_directory, species_filename)
species_file = open(species_path, "r", encoding="utf-8")
try:
species_json = json.loads(species_file.read())
nat_dex_num = species_json["nationalPokedexNumber"]
generations[nat_dex_num] = generation
except:
print(species_filename)
resolvers_directory = 'resolvers'
def is_valid_aspect(aspect):
return not ("female" in aspect or "shiny" in aspect)
num_digits = 4
csv_data = []
for pokemon_foldername in os.listdir(resolvers_directory):
nat_dex_num = int(pokemon_foldername[0:num_digits])
if nat_dex_num not in generations:
continue
generation = generations[nat_dex_num]
pokemon_directory = os.path.join(resolvers_directory, pokemon_foldername)
if os.path.isdir(pokemon_directory):
aspects_set = {}
aspects_set["normal"] = False
for pokemon_filename in os.listdir(pokemon_directory):
pokemon_path = os.path.join(pokemon_directory, pokemon_filename)
pokemon_file = open(pokemon_path, "r", encoding="utf-8")
pokemon_json = json.loads(pokemon_file.read())
species = pokemon_json["species"]
variations = pokemon_json["variations"]
for variation in variations:
aspects = variation["aspects"]
for aspect in aspects:
if (is_valid_aspect(aspect)):
aspects_set[aspect] = False
for aspect in aspects_set.keys():
csv_data.append([generation, species, aspect])
with open('pokemon_data.csv', 'w', newline='') as csvfile:
pokemon_writer = csv.writer(csvfile, delimiter=' ',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
pokemon_writer.writerow(["pokedex", "identifier", "form"])
for row in csv_data:
pokemon_writer.writerow(row)