mirror of
https://github.com/veekun/pokedex.git
synced 2024-08-20 18:16:34 +00:00
8161bd84e4
Cosplay Pikachu was listed as being encountered in contest-hall, but that's a Sinnoh location. In OR/AS, the contest halls are not a first-class location but rather just treated as part of the town or city they are in. Cosplay Pikachu is given to the player after they participate in their first contest, so its location can be any of the four cities with a contest hall. The Sinnoh starter that the player obtains in OR/AS is on Hoenn Route 101, not Sinnoh Route 201 (probably a copy/paste error). Add a test to make sure that encounter regions always match the region(s) that their game takes place in.
308 lines
16 KiB
Python
308 lines
16 KiB
Python
#!/usr/bin/env python2
|
|
"""
|
|
This is an unmaintained one-shot script, only included in the repo for
|
|
reference.
|
|
"""
|
|
|
|
from pokedex.db import connect, identifier_from_name
|
|
from pokedex.db.tables import Encounter, EncounterMethod, EncounterSlot, Language, Location, LocationArea, Pokemon, Version
|
|
|
|
session = connect()
|
|
|
|
def get_version(name):
|
|
return session.query(Version).filter_by(identifier=identifier_from_name(name)).one()
|
|
|
|
R = get_version(u'red')
|
|
B = get_version(u'blue')
|
|
Ye = get_version(u'yellow')
|
|
G = get_version(u'gold')
|
|
S = get_version(u'silver')
|
|
C = get_version(u'crystal')
|
|
RU = get_version(u'ruby')
|
|
SA = get_version(u'sapphire')
|
|
EM = get_version(u'emerald')
|
|
FR = get_version(u'firered')
|
|
LG = get_version(u'leafgreen')
|
|
|
|
DI = get_version(u'diamond')
|
|
PE = get_version(u'pearl')
|
|
PT = get_version(u'platinum')
|
|
HG = get_version(u'heartgold')
|
|
SS = get_version(u'soulsilver')
|
|
|
|
BL = get_version(u'black')
|
|
WH = get_version(u'white')
|
|
B2 = get_version(u'black-2')
|
|
W2 = get_version(u'white-2')
|
|
|
|
X = get_version(u'x')
|
|
Y = get_version(u'y')
|
|
OR = get_version(u'omega-ruby')
|
|
AS = get_version(u'alpha-sapphire')
|
|
|
|
def normal_gift_data():
|
|
return [
|
|
# Gen I
|
|
[ u'bulbasaur', [ R, B ], 5, u'pallet-town' ],
|
|
[ u'charmander', [ R, B ], 5, u'pallet-town' ],
|
|
[ u'squirtle', [ R, B ], 5, u'pallet-town' ],
|
|
[ u'pikachu', [ Ye ], 5, u'pallet-town' ],
|
|
[ u'bulbasaur', [ Ye ], 10, u'cerulean-city' ],
|
|
[ u'charmander', [ Ye ], 10, u'kanto-route-24' ],
|
|
[ u'squirtle', [ Ye ], 10, u'vermilion-city' ],
|
|
|
|
#[ u'aerodactyl', [ R, B, Ye ], 30, u'pewter-city', u'museum-of-science', u'Pewter Museum of Science' ],
|
|
[ u'magikarp', [ R, B, Ye ], 5, u'kanto-route-4', u'pokemon-center', u'Pokemon Center' ],
|
|
#[ u'omanyte', [ R, B, Ye ], 30, u'mt-moon', u'b2f' ],
|
|
#[ u'kabuto', [ R, B, Ye ], 30, u'mt-moon', u'b2f' ],
|
|
[ u'hitmonlee', [ R, B, Ye ], 30, u'saffron-city', u'fighting-dojo', u'Fighting Dojo' ],
|
|
[ u'hitmonchan', [ R, B, Ye ], 30, u'saffron-city', u'fighting-dojo', u'Fighting Dojo' ],
|
|
[ u'eevee', [ R, B, Ye ], 25, u'celadon-city', u'celadon-mansion', u'Celadon Mansion rooftop' ],
|
|
[ u'lapras', [ R, B, Ye ], 15, u'saffron-city', u'silph-co-7f', u'Silph Co. 7F' ],
|
|
|
|
# Gen II
|
|
[ u'chikorita', [ G, S, C ], 5, u'new-bark-town' ],
|
|
[ u'cyndaquil', [ G, S, C ], 5, u'new-bark-town' ],
|
|
[ u'totodile', [ G, S, C ], 5, u'new-bark-town' ],
|
|
[ u'spearow', [ G, S, C ], 10, u'goldenrod-city', u'north-gate', u'North Gate' ],
|
|
[ u'eevee', [ G, S, C ], 20, u'goldenrod-city', u'bills-house', u"Bill's house" ],
|
|
[ u'shuckle', [ G, S, C ], 15, u'cianwood-city', u'manias-house', u"Mania's house" ],
|
|
[ u'dratini', [ C ], 15, u'dragons-den' ],
|
|
[ u'tyrogue', [ G, S, C ], 10, u'mt-mortar', u'b1f' ],
|
|
|
|
# Gen III
|
|
# Note Lileep + Anorith are not listed because they are not *gifts*
|
|
# They're note quite encounters either
|
|
# but that's outta scope of gift logic
|
|
[ u'treecko', [ RU, SA, EM ], 5, u'hoenn-route-101' ],
|
|
[ u'torchic', [ RU, SA, EM ], 5, u'hoenn-route-101' ],
|
|
[ u'mudkip' , [ RU, SA, EM ], 5, u'hoenn-route-101' ],
|
|
[ u'castform', [ RU, SA, EM ], 25, u'hoenn-route-119', u'weather-institute', u'Weather Institute' ],
|
|
[ u'beldum', [ RU, SA, EM ], 5, u'mossdeep-city', u'stevens-house', u"Steven's house" ],
|
|
[ u'chikorita', [ EM ], 5, u'littleroot-town' ],
|
|
[ u'cyndaquil', [ EM ], 5, u'littleroot-town' ],
|
|
[ u'totodile', [ EM ], 5, u'littleroot-town' ],
|
|
|
|
[ u'bulbasaur', [ FR, LG ], 5, u'pallet-town' ],
|
|
[ u'charmander', [ FR, LG ], 5, u'pallet-town' ],
|
|
[ u'squirtle', [ FR, LG ], 5, u'pallet-town' ],
|
|
#[ u'aerodactyl', [ FR, LG ], 5, u'pewter-city', u'museum-of-science' ],
|
|
[ u'magikarp', [ FR, LG ], 5, u'kanto-route-4', u'pokemon-center' ],
|
|
#[ u'omanyte', [ FR, LG ], 5, u'mt-moon', u'b2f' ],
|
|
#[ u'kabuto', [ FR, LG ], 5, u'mt-moon', u'b2f' ],
|
|
[ u'hitmonlee', [ FR, LG ], 25, u'saffron-city', u'fighting-dojo' ],
|
|
[ u'hitmonchan', [ FR, LG ], 25, u'saffron-city', u'fighting-dojo' ],
|
|
[ u'eevee', [ FR, LG ], 25, u'celadon-city', u'celadon-mansion' ],
|
|
[ u'lapras', [ FR, LG ], 25, u'saffron-city', u'silph-co-7f' ],
|
|
|
|
# Gen IV
|
|
[ u'turtwig', [ DI, PE ], 5, u'lake-verity', u'before-galactic-intervention' ],
|
|
[ u'chimchar', [ DI, PE ], 5, u'lake-verity', u'before-galactic-intervention' ],
|
|
[ u'piplup', [ DI, PE ], 5, u'lake-verity', u'before-galactic-intervention' ],
|
|
[ u'turtwig', [ PT ], 5, u'sinnoh-route-201' ],
|
|
[ u'chimchar', [ PT ], 5, u'sinnoh-route-201' ],
|
|
[ u'piplup', [ PT ], 5, u'sinnoh-route-201' ],
|
|
[ u'eevee', [ DI, PE, ], 5, u'hearthome-city' ],
|
|
[ u'eevee', [ PT ], 20, u'hearthome-city' ],
|
|
[ u'porygon', [ PT ], 25, u'veilstone-city' ],
|
|
|
|
[ u'chikorita', [ HG, SS ], 5, u'new-bark-town' ],
|
|
[ u'cyndaquil', [ HG, SS ], 5, u'new-bark-town' ],
|
|
[ u'totodile', [ HG, SS ], 5, u'new-bark-town' ],
|
|
[ u'spearow', [ HG, SS ], 20, u'goldenrod-city', u'north-gate' ],
|
|
[ u'eevee', [ HG, SS ], 5, u'goldenrod-city', u'bills-house' ],
|
|
[ u'shuckle', [ HG, SS ], 15, u'cianwood-city', u'kirks-house', u"Kirk's house" ],
|
|
[ u'dratini', [ HG, SS ], 15, u'dragons-den' ],
|
|
[ u'tyrogue', [ HG, SS ], 10, u'mt-mortar', u'b1f' ],
|
|
[ u'bulbasaur', [ HG, SS ], 5, u'pallet-town' ],
|
|
[ u'charmander', [ HG, SS ], 5, u'pallet-town' ],
|
|
[ u'squirtle', [ HG, SS ], 5, u'pallet-town' ],
|
|
[ u'treecko', [ HG, SS ], 5, u'saffron-city', u'silph-co-7f' ],
|
|
[ u'torchic', [ HG, SS ], 5, u'saffron-city', u'silph-co-7f' ],
|
|
[ u'mudkip' , [ HG, SS ], 5, u'saffron-city', u'silph-co-7f' ],
|
|
|
|
# Gen V
|
|
[ u'snivy', [ BL, WH ], 5, u'nuvema-town' ],
|
|
[ u'tepig', [ BL, WH ], 5, u'nuvema-town' ],
|
|
[ u'oshawott', [ BL, WH ], 5, u'nuvema-town' ],
|
|
[ u'pansage', [ BL, WH ], 10, u'dreamyard' ], # not the basement
|
|
[ u'pansear', [ BL, WH ], 10, u'dreamyard' ],
|
|
[ u'panpour', [ BL, WH ], 10, u'dreamyard' ],
|
|
[ u'zorua', [ BL, WH ], 10, u'castelia-city', u'game-freak-hq-1f', u'Game Freak HQ 1F' ],
|
|
#[ u'tirtouga', [ BL, WH ], 25, u'relic-castle', u'a' ],
|
|
#[ u'archen', [ BL, WH ], 25, u'relic-castle', u'a' ],
|
|
#[ u'omanyte', [ BL, WH ], 25, u'twist-mountain' ],
|
|
#[ u'kabuto', [ BL, WH ], 25, u'twist-mountain' ],
|
|
#[ u'aerodactyl', [ BL, WH ], 25, u'twist-mountain' ],
|
|
#[ u'lileep', [ BL, WH ], 25, u'twist-mountain' ],
|
|
#[ u'anorith', [ BL, WH ], 25, u'twist-mountain' ],
|
|
#[ u'cranidos', [ BL, WH ], 25, u'twist-mountain' ],
|
|
#[ u'shieldon', [ BL, WH ], 25, u'twist-mountain' ],
|
|
[ u'magikarp', [ BL, WH ], 5, u'marvelous-bridge' ],
|
|
|
|
[ u'snivy', [ B2, W2 ], 5, u'aspertia-city' ],
|
|
[ u'tepig', [ B2, W2 ], 5, u'aspertia-city' ],
|
|
[ u'oshawott', [ B2, W2 ], 5, u'aspertia-city' ],
|
|
[ u'zorua', [ B2, W2 ], 25, u'driftveil-city' ],
|
|
[ u'deerling', [ B2, W2 ], 30, u'unova-route-6', u'weather-institute', u'Weather Institute' ],
|
|
[ u'eevee', [ B2, W2 ], 10, u'castelia-city' ],
|
|
#[ u'omanyte', [ B2, W2 ], 25, u'join-avenue' ],
|
|
#[ u'kabuto', [ B2, W2 ], 25, u'join-avenue' ],
|
|
#[ u'aerodactyl', [ B2, W2 ], 25, u'join-avenue' ],
|
|
#[ u'lileep', [ B2, W2 ], 25, u'join-avenue' ],
|
|
#[ u'anorith', [ B2, W2 ], 25, u'join-avenue' ],
|
|
#[ u'cranidos', [ B2, W2 ], 25, u'join-avenue' ],
|
|
#[ u'shieldon', [ B2, W2 ], 25, u'join-avenue' ],
|
|
#[ u'tirtouga', [ B2, W2 ], 25, u'join-avenue' ],
|
|
#[ u'archen', [ B2, W2 ], 25, u'join-avenue' ],
|
|
[ u'magikarp', [ B2, W2 ], 5, u'marvelous-bridge' ],
|
|
#[ u'tirtouga', [ B2, W2 ], 25, u'nacrene-city', u'museum', u'Nacrene City Museum' ],
|
|
#[ u'archen', [ B2, W2 ], 25, u'nacrene-city', u'museum'],
|
|
#[ u'omanyte', [ B2, W2 ], 25, u'twist-mountain' ],
|
|
#[ u'kabuto', [ B2, W2 ], 25, u'twist-mountain' ],
|
|
#[ u'aerodactyl', [ B2, W2 ], 25, u'twist-mountain' ],
|
|
#[ u'lileep', [ B2, W2 ], 25, u'twist-mountain' ],
|
|
#[ u'anorith', [ B2, W2 ], 25, u'twist-mountain' ],
|
|
#[ u'cranidos', [ B2, W2 ], 25, u'twist-mountain' ],
|
|
#[ u'shieldon', [ B2, W2 ], 25, u'twist-mountain' ],
|
|
# These are shiny...
|
|
[ u'dratini', [ W2 ], 1, u'floccesy-town' ],
|
|
[ u'gible', [ B2 ], 1, u'floccesy-town' ],
|
|
|
|
# Gen VI
|
|
[ u'chespin', [ X, Y ], 5, u'aquacorde-town' ],
|
|
[ u'fennekin', [ X, Y ], 5, u'aquacorde-town' ],
|
|
[ u'froakie', [ X, Y ], 5, u'aquacorde-town' ],
|
|
[ u'bulbasaur', [ X, Y ], 10, u'lumiose-city' ],
|
|
[ u'charmander', [ X, Y ], 10, u'lumiose-city' ],
|
|
[ u'squirtle', [ X, Y ], 10, u'lumiose-city' ],
|
|
[ u'tyrunt', [ X, Y ], 20, u'glittering-cave', u'unknown-area-303' ], # 304 means ceiling
|
|
[ u'amaura', [ X, Y ], 20, u'glittering-cave', u'unknown-area-303' ],
|
|
[ u'lucario', [ X, Y ], 32, u'tower-of-mastery' ],
|
|
[ u'lapras', [ X, Y ], 30, u'kalos-route-12' ],
|
|
|
|
[ u'treecko', [ OR, AS ], 5, u'hoenn-route-101' ],
|
|
[ u'torchic', [ OR, AS ], 5, u'hoenn-route-101' ],
|
|
[ u'mudkip', [ OR, AS ], 5, u'hoenn-route-101' ],
|
|
# cosplay pikachu is given to you the first time you participate in a contest
|
|
[ u'pikachu', [ OR, AS ], 20, u'slateport-city', u'contest-hall', u"Contest Hall" ],
|
|
[ u'pikachu', [ OR, AS ], 20, u'verdanturf-town', u'contest-hall', u"Contest Hall" ],
|
|
[ u'pikachu', [ OR, AS ], 20, u'fallarbor-town', u'contest-hall', u"Contest Hall" ],
|
|
[ u'pikachu', [ OR, AS ], 20, u'lilycove-city', u'contest-hall', u"Contest Hall" ],
|
|
[ u'latios', [ OR ], 30, u'southern-island' ], # eon tickets ignored here - they're not gifts?
|
|
[ u'latias', [ AS ], 30, u'southern-island' ],
|
|
[ u'castform', [ OR, AS ], 30, u'hoenn-route-119', u'weather-institute' ],
|
|
[ u'chikorita', [ OR, AS ], 5, u'hoenn-route-101' ],
|
|
[ u'cyndaquil', [ OR, AS ], 5, u'hoenn-route-101' ],
|
|
[ u'totodile', [ OR, AS ], 5, u'hoenn-route-101' ],
|
|
[ u'snivy', [ OR, AS ], 5, u'hoenn-route-101' ],
|
|
[ u'tepig', [ OR, AS ], 5, u'hoenn-route-101' ],
|
|
[ u'oshawott', [ OR, AS ], 5, u'hoenn-route-101' ],
|
|
[ u'beldum', [ OR, AS ], 1, u'mossdeep-city', u'stevens-house' ],
|
|
[ u'turtwig', [ OR, AS ], 5, u'hoenn-route-101' ],
|
|
[ u'chimchar', [ OR, AS ], 5, u'hoenn-route-101' ],
|
|
[ u'piplup', [ OR, AS ], 5, u'hoenn-route-101' ],
|
|
[ u'camerupt', [ OR, AS ], 40, u'battle-resort' ],
|
|
[ u'sharpedo', [ OR, AS ], 40, u'battle-resort' ],
|
|
]
|
|
|
|
def egg_gift_data():
|
|
return [
|
|
[ u'togepi', [ G, S, C ], 5, u'violet-city' ],
|
|
[ u'pichu', [ C ], 5, u'johto-route-34' ],
|
|
[ u'cleffa', [ C ], 5, u'johto-route-34' ],
|
|
[ u'igglybuff', [ C ], 5, u'johto-route-34' ],
|
|
[ u'tyrogue', [ C ], 5, u'johto-route-34' ],
|
|
[ u'smoochum', [ C ], 5, u'johto-route-34' ],
|
|
[ u'elekid', [ C ], 5, u'johto-route-34' ],
|
|
[ u'magby', [ C ], 5, u'johto-route-34' ],
|
|
|
|
[ u'wynaut', [ RU, SA, EM ], 5, u'lavaridge-town' ],
|
|
[ u'togepi', [ FR, LG ], 5, u'water-labyrinth' ],
|
|
|
|
[ u'togepi', [ DI, PE, PT ], 1, u'eterna-city', u'west-gate', u'West Gate' ],
|
|
[ u'happiny', [ DI, PE, ], 1, u'hearthome-city', u'west-gate', u'West Gate' ],
|
|
[ u'riolu', [ DI, PE, PT ], 1, u'iron-island', u'b2f-left' ],
|
|
[ u'togepi', [ HG, SS ], 1, u'violet-city', u'poke-mart', u'Poke Mart' ],
|
|
[ u'mareep', [ HG, SS ], 1, u'violet-city', u'pokemon-center', u'Pokemon Center' ],
|
|
[ u'wooper', [ HG, SS ], 1, u'violet-city', u'pokemon-center' ],
|
|
[ u'slugma', [ HG, SS ], 1, u'violet-city', u'pokemon-center' ],
|
|
|
|
[ u'larvesta', [ BL, WH ], 1, u'unova-route-18' ],
|
|
[ u'happiny', [ B2, W2 ], 1, u'nacrene-city', u'west-gate', u'West Gate' ],
|
|
[ u'wynaut', [ OR, AS ], 1, u'lavaridge-town' ],
|
|
[ u'togepi', [ OR, AS ], 1, u'lavaridge-town' ],
|
|
]
|
|
|
|
def record_method_and_gifts(gift_method, gift_data):
|
|
|
|
en = session.query(Language).filter_by(identifier=u'en').one()
|
|
|
|
for gift_datum in gift_data:
|
|
pokemon_name = identifier_from_name(gift_datum[0])
|
|
versions = gift_datum[1]
|
|
level = identifier_from_name(str(gift_datum[2]))
|
|
location_name = identifier_from_name(gift_datum[3])
|
|
area_name = None
|
|
if len(gift_datum) > 4:
|
|
area_name = identifier_from_name(gift_datum[4])
|
|
|
|
pokemon = session.query(Pokemon ).filter_by(identifier=pokemon_name ).one()
|
|
location = session.query(Location ).filter_by(identifier=location_name ).one()
|
|
location_area = session.query(LocationArea).filter_by(identifier=area_name, location_id=location.id).first()
|
|
# Some of these don't exist yet
|
|
if not location_area:
|
|
|
|
location_area = LocationArea(
|
|
location_id = location.id,
|
|
game_index = 0, # cause who knows what this means
|
|
identifier = area_name
|
|
)
|
|
|
|
area_prose = None
|
|
if area_name != None:
|
|
area_prose = gift_datum[5]
|
|
location_area.name_map[en] = area_prose
|
|
|
|
session.add(location_area)
|
|
session.commit()
|
|
|
|
for version in versions:
|
|
encounter_slot = session.query(EncounterSlot).filter_by(
|
|
version_group_id = version.version_group_id,
|
|
encounter_method_id = gift_method.id
|
|
).first()
|
|
|
|
if not encounter_slot:
|
|
encounter_slot = EncounterSlot(
|
|
version_group_id = version.version_group_id,
|
|
encounter_method_id = gift_method.id,
|
|
# No priority over or under other events/conditions
|
|
slot = None,
|
|
# Rarity is meaningless for gifts, but say that it's
|
|
# 100% to help out code that expects rarity to be defined.
|
|
rarity = 100,
|
|
)
|
|
session.add(encounter_slot)
|
|
session.commit()
|
|
|
|
encounter_info = {
|
|
'version_id': version.id,
|
|
'location_area_id': location_area.id,
|
|
'encounter_slot_id': encounter_slot.id,
|
|
'pokemon_id': pokemon.id,
|
|
'min_level': level,
|
|
'max_level': level
|
|
}
|
|
encounter = session.query(Encounter).filter_by(**encounter_info).first()
|
|
if not encounter:
|
|
encounter = Encounter(**encounter_info)
|
|
session.add(encounter)
|
|
|
|
session.commit()
|
|
|
|
normal_gift_method = session.query(EncounterMethod).filter_by(identifier=u'gift').one()
|
|
record_method_and_gifts(normal_gift_method, normal_gift_data())
|
|
|
|
egg_gift_method = session.query(EncounterMethod).filter_by(identifier=u'gift-egg').one()
|
|
record_method_and_gifts(egg_gift_method, egg_gift_data())
|