mirror of
https://github.com/veekun/pokedex.git
synced 2024-08-20 18:16:34 +00:00
Pokemon species split: Script for automatic changes. See #579
This commit is contained in:
parent
349fbb2d94
commit
750a5c1ae4
1 changed files with 164 additions and 0 deletions
164
scripts/pokemon_species.py
Normal file
164
scripts/pokemon_species.py
Normal file
|
@ -0,0 +1,164 @@
|
|||
# Encoding: UTF-8
|
||||
"""Reorganize Pokemon, PokemonForm, etc. to Species, Pokemon, etc.
|
||||
|
||||
This is an unmaintained one-shot script, only included in the repo for
|
||||
reference.
|
||||
|
||||
"""
|
||||
|
||||
import csv
|
||||
import os
|
||||
|
||||
from pokedex import defaults
|
||||
|
||||
number_of_species = 649
|
||||
high_id_start = 10000
|
||||
|
||||
csv_dir = defaults.get_default_csv_dir()
|
||||
|
||||
def to_dict(filename):
|
||||
fullname = os.path.join(csv_dir, filename)
|
||||
reader = csv.reader(open(fullname))
|
||||
column_names = reader.next()
|
||||
entries = dict()
|
||||
for row in reader:
|
||||
row_dict = dict(zip(column_names, row))
|
||||
entries[row_dict.get('id', row_dict.get('pokemon_id'))] = row_dict
|
||||
return entries, column_names
|
||||
|
||||
pokemon, pokemon_columns = to_dict('pokemon.csv')
|
||||
forms, form_columns = to_dict('pokemon_forms.csv')
|
||||
form_groups, form_group_columns = to_dict('pokemon_form_groups.csv')
|
||||
evolution_chains, evolution_chain_columns = to_dict('evolution_chains.csv')
|
||||
|
||||
result_columns = dict(
|
||||
species='''id identifier generation_id evolves_from_species_id
|
||||
evolution_chain_id color_id shape_id habitat_id
|
||||
growth_rate_id gender_rate capture_rate base_happiness is_baby
|
||||
hatch_counter has_gender_differences forms_switchable'''.split(),
|
||||
pokemon='''id species_id height weight base_experience order'''.split(),
|
||||
form='''id form_identifier pokemon_id introduced_in_version_group_id
|
||||
is_default is_battle_only order'''.split(),
|
||||
chain='''id baby_trigger_item_id'''.split(),
|
||||
)
|
||||
|
||||
def normalize_id(id):
|
||||
id = int(id)
|
||||
if id > number_of_species:
|
||||
id = id - high_id_start + number_of_species
|
||||
return id
|
||||
|
||||
def put(dct, entry):
|
||||
"""Put entry in dct. If already there, check it's the same.
|
||||
"""
|
||||
id = int(entry['id'])
|
||||
if id in dct:
|
||||
if entry == dct[id]:
|
||||
pass
|
||||
else:
|
||||
print entry
|
||||
print dct[id]
|
||||
assert False
|
||||
else:
|
||||
dct[id] = entry
|
||||
|
||||
forms_switchable = dict(
|
||||
castform=True,
|
||||
unown=False,
|
||||
darmanitan=True,
|
||||
basculin=False,
|
||||
rotom=True,
|
||||
shaymin=True,
|
||||
deerling=True,
|
||||
sawsbuck=True,
|
||||
arceus=True,
|
||||
pichu=False,
|
||||
giratina=True,
|
||||
burmy=True,
|
||||
wormadam=False,
|
||||
deoxys=True,
|
||||
genesect=True,
|
||||
meloetta=True,
|
||||
gastrodon=False,
|
||||
cherrim=True,
|
||||
shellos=False,
|
||||
)
|
||||
|
||||
result_species = dict()
|
||||
result_pokemon = dict()
|
||||
result_forms = dict()
|
||||
result_chains = dict()
|
||||
|
||||
for form_id, source_form in forms.items():
|
||||
pokemon_id = source_form['unique_pokemon_id'] or source_form['form_base_pokemon_id']
|
||||
species_id = source_form['form_base_pokemon_id']
|
||||
source_pokemon = pokemon[pokemon_id]
|
||||
source_evolution_chain = evolution_chains[source_pokemon['evolution_chain_id']]
|
||||
try:
|
||||
source_group = form_groups[species_id]
|
||||
except KeyError:
|
||||
source_group = dict(is_battle_only=0)
|
||||
all_fields = dict(source_form)
|
||||
all_fields.update(source_group)
|
||||
all_fields.update(source_pokemon)
|
||||
all_fields.update(source_evolution_chain)
|
||||
del all_fields['id']
|
||||
new_species = dict()
|
||||
for column_name in result_columns['species']:
|
||||
if column_name == 'id':
|
||||
new_species[column_name] = normalize_id(species_id)
|
||||
elif column_name == 'evolves_from_species_id':
|
||||
new_species[column_name] = pokemon[species_id]['evolves_from_pokemon_id']
|
||||
elif column_name == 'shape_id':
|
||||
new_species[column_name] = all_fields['pokemon_shape_id']
|
||||
elif column_name == 'forms_switchable':
|
||||
if species_id in form_groups:
|
||||
new_species[column_name] = forms_switchable[source_pokemon['identifier']]
|
||||
else:
|
||||
new_species[column_name] = 0
|
||||
else:
|
||||
new_species[column_name] = all_fields[column_name]
|
||||
put(result_species, new_species)
|
||||
new_pokemon = dict()
|
||||
for column_name in result_columns['pokemon']:
|
||||
if column_name == 'id':
|
||||
new_pokemon[column_name] = normalize_id(pokemon_id)
|
||||
elif column_name == 'species_id':
|
||||
new_pokemon[column_name] = species_id
|
||||
else:
|
||||
new_pokemon[column_name] = all_fields[column_name]
|
||||
put(result_pokemon, new_pokemon)
|
||||
new_form = dict()
|
||||
for column_name in result_columns['form']:
|
||||
if column_name == 'id':
|
||||
new_form[column_name] = normalize_id(form_id)
|
||||
elif column_name == 'pokemon_id':
|
||||
new_form[column_name] = normalize_id(pokemon_id)
|
||||
elif column_name == 'form_identifier':
|
||||
new_form[column_name] = source_form['identifier']
|
||||
elif column_name == 'is_battle_only':
|
||||
if source_form['unique_pokemon_id'] == source_form['form_base_pokemon_id']:
|
||||
# Default form, herefore not battle-only
|
||||
new_form[column_name] = '0'
|
||||
else:
|
||||
# Keep
|
||||
new_form[column_name] = all_fields[column_name]
|
||||
else:
|
||||
new_form[column_name] = all_fields[column_name]
|
||||
put(result_forms, new_form)
|
||||
new_chain = dict(source_evolution_chain)
|
||||
del new_chain['growth_rate_id']
|
||||
put(result_chains, new_chain)
|
||||
|
||||
def write_csv(dct, fieldnames, filename):
|
||||
fullname = os.path.join(csv_dir, filename)
|
||||
reader = csv.DictWriter(open(fullname, 'w'), fieldnames)
|
||||
reader.writerow(dict((n,n) for n in fieldnames))
|
||||
for id, row in sorted(dct.items()):
|
||||
reader.writerow(row)
|
||||
|
||||
write_csv(result_species, result_columns['species'], 'pokemon_species.csv')
|
||||
write_csv(result_pokemon, result_columns['pokemon'], 'pokemon.csv')
|
||||
write_csv(result_forms, result_columns['form'], 'pokemon_forms.csv')
|
||||
write_csv(result_chains, result_columns['chain'], 'evolution_chains.csv')
|
||||
|
Loading…
Reference in a new issue