mirror of
https://github.com/veekun/pokedex.git
synced 2024-08-20 18:16:34 +00:00
Add special encounters for RBY. Helps #22
This commit is contained in:
parent
8230f71f33
commit
fdb8214e7d
7 changed files with 425 additions and 0 deletions
|
@ -1 +1,56 @@
|
|||
id,nickname,pokemon_form_id,ability_id,nature_id,item_id,level,gender_id,pokeball_id,personality,is_shiny,is_egg,original_trainer_id
|
||||
1,,1,,,,5,,,,,0,
|
||||
2,,2,,,,5,,,,,0,
|
||||
3,,3,,,,5,,,,,0,
|
||||
4,,25,,,,5,,,,,0,
|
||||
5,,1,,,,10,,,,,0,
|
||||
6,,4,,,,10,,,,,0,
|
||||
7,,7,,,,10,,,,,0,
|
||||
8,,107,,,,30,,,,,0,
|
||||
9,,106,,,,30,,,,,0,
|
||||
10,,131,,,,15,,,,,0,
|
||||
11,,133,,,,25,,,,,0,
|
||||
12,,138,,,,30,,,,,0,
|
||||
13,,140,,,,30,,,,,0,
|
||||
14,,142,,,,30,,,,,0,
|
||||
15,,143,,,,30,,,,,0,
|
||||
16,,143,,,,30,,,,,0,
|
||||
17,,144,,,,50,,,,,0,
|
||||
18,,145,,,,50,,,,,0,
|
||||
19,,146,,,,50,,,,,0,
|
||||
20,,150,,,,70,,,,,0,
|
||||
21,,129,,,,,,,,,0,
|
||||
22,DUX,83,,,,,,,,,0,1
|
||||
23,MARC,108,,,,,,,,,0,1
|
||||
24,MARCEL,122,,,,,,,,,0,1
|
||||
25,MILES,122,,,,,,,,,0,1
|
||||
26,LOLA,124,,,,,,,,,0,1
|
||||
27,SPOT,29,,,,,,,,,0,1
|
||||
28,TERRY,30,,,,,,,,,0,1
|
||||
29,SPIKE,47,,,,,,,,,0,1
|
||||
30,GURIO,51,,,,,,,,,0,1
|
||||
31,RICKY,67,,,,,,,,,0,1
|
||||
32,SAILOR,86,,,,,,,,,0,1
|
||||
33,CEZANNE,87,,,,,,,,,0,1
|
||||
34,STICKY,89,,,,,,,,,0,1
|
||||
35,DORIS,101,,,,,,,,,0,1
|
||||
36,BUFFY,112,,,,,,,,,0,1
|
||||
37,CRINKLES,114,,,,,,,,,0,1
|
||||
38,,30,,,,17,,,,,0,
|
||||
39,,33,,,,17,,,,,0,
|
||||
40,,35,,,,8,,,,,0,
|
||||
41,,35,,,,12,,,,,0,
|
||||
42,,37,,,,18,,,,,0,
|
||||
43,,40,,,,22,,,,,0,
|
||||
44,,63,,,,9,,,,,0,
|
||||
45,,63,,,,6,,,,,0,
|
||||
46,,63,,,,15,,,,,0,
|
||||
47,,123,,,,25,,,,,0,
|
||||
48,,123,,,,30,,,,,0,
|
||||
49,,127,,,,20,,,,,0,
|
||||
50,,127,,,,30,,,,,0,
|
||||
51,,137,,,,26,,,,,0,
|
||||
52,,137,,,,18,,,,,0,
|
||||
53,,137,,,,26,,,,,0,
|
||||
54,,147,,,,18,,,,,0,
|
||||
55,,147,,,,24,,,,,0,
|
||||
|
|
|
|
@ -1 +1,96 @@
|
|||
special_encounter_id,version_id
|
||||
1,1
|
||||
1,2
|
||||
2,1
|
||||
2,2
|
||||
3,1
|
||||
3,2
|
||||
4,3
|
||||
5,3
|
||||
6,3
|
||||
7,3
|
||||
8,1
|
||||
8,2
|
||||
8,3
|
||||
9,1
|
||||
9,2
|
||||
9,3
|
||||
10,1
|
||||
10,2
|
||||
10,3
|
||||
11,1
|
||||
11,2
|
||||
11,3
|
||||
12,1
|
||||
12,2
|
||||
12,3
|
||||
13,1
|
||||
13,2
|
||||
13,3
|
||||
14,1
|
||||
14,2
|
||||
14,3
|
||||
15,1
|
||||
15,2
|
||||
15,3
|
||||
16,1
|
||||
16,2
|
||||
16,3
|
||||
17,1
|
||||
17,2
|
||||
17,3
|
||||
18,1
|
||||
18,2
|
||||
18,3
|
||||
19,1
|
||||
19,2
|
||||
19,3
|
||||
20,1
|
||||
20,2
|
||||
20,3
|
||||
21,1
|
||||
21,2
|
||||
21,3
|
||||
22,1
|
||||
22,2
|
||||
23,1
|
||||
23,2
|
||||
24,1
|
||||
24,2
|
||||
25,3
|
||||
26,1
|
||||
26,2
|
||||
27,1
|
||||
27,2
|
||||
28,1
|
||||
28,2
|
||||
29,3
|
||||
30,3
|
||||
31,3
|
||||
32,1
|
||||
32,2
|
||||
33,3
|
||||
34,3
|
||||
35,1
|
||||
35,2
|
||||
36,3
|
||||
37,1
|
||||
37,2
|
||||
38,1
|
||||
39,2
|
||||
40,1
|
||||
41,2
|
||||
42,3
|
||||
43,3
|
||||
44,1
|
||||
45,2
|
||||
46,3
|
||||
47,1
|
||||
48,3
|
||||
49,2
|
||||
50,3
|
||||
51,1
|
||||
52,2
|
||||
53,3
|
||||
54,1
|
||||
55,2
|
||||
|
|
|
|
@ -1 +1,56 @@
|
|||
id,type_id,event_pokemon_id,location_area_id,roam_region_id,cost,traded_species_id,traded_gender_id
|
||||
1,1,1,554,,,,
|
||||
2,1,2,554,,,,
|
||||
3,1,3,554,,,,
|
||||
4,1,4,554,,,,
|
||||
5,2,5,281,,,,
|
||||
6,2,6,552,,,,
|
||||
7,2,7,557,,,,
|
||||
8,2,8,576,,,,
|
||||
9,2,9,576,,,,
|
||||
10,2,10,576,,,,
|
||||
11,2,11,283,,,,
|
||||
12,3,12,279,,,,
|
||||
13,3,13,279,,,,
|
||||
14,3,14,279,,,,
|
||||
15,4,15,276,,,,
|
||||
16,4,16,309,,,,
|
||||
17,4,17,577,,,,
|
||||
18,4,18,330,,,,
|
||||
19,4,19,318,,,,
|
||||
20,4,20,325,,,,
|
||||
21,5,21,298,,,,
|
||||
22,6,22,557,,,,
|
||||
23,6,23,311,,,,
|
||||
24,6,24,530,,,,
|
||||
25,6,25,530,,,,
|
||||
26,6,26,281,,,,
|
||||
27,6,27,299,,,,
|
||||
28,6,28,305,,,,
|
||||
29,6,29,311,,,,
|
||||
30,6,30,305,,,,
|
||||
31,6,31,299,,,,
|
||||
32,6,32,279,,,,
|
||||
33,6,33,279,,,,
|
||||
34,6,34,279,,,,
|
||||
35,6,35,279,,,,
|
||||
36,6,36,279,,,,
|
||||
37,6,37,279,,,,
|
||||
38,7,38,283,,,,
|
||||
39,7,39,283,,,,
|
||||
40,7,40,283,,,,
|
||||
41,7,41,283,,,,
|
||||
42,7,42,283,,,,
|
||||
43,7,43,283,,,,
|
||||
44,7,44,283,,,,
|
||||
45,7,45,283,,,,
|
||||
46,7,46,283,,,,
|
||||
47,7,47,283,,,,
|
||||
48,7,48,283,,,,
|
||||
49,7,49,283,,,,
|
||||
50,7,50,283,,,,
|
||||
51,7,51,283,,,,
|
||||
52,7,52,283,,,,
|
||||
53,7,53,283,,,,
|
||||
54,7,54,283,,,,
|
||||
55,7,55,283,,,,
|
||||
|
|
|
|
@ -1 +1,2 @@
|
|||
trainer_id,local_language_id,name
|
||||
1,9,TRAINER
|
||||
|
|
|
|
@ -1 +1,2 @@
|
|||
id,number,gender_id
|
||||
1,,
|
||||
|
|
|
52
scripts/events-special-encounters.csv
Normal file
52
scripts/events-special-encounters.csv
Normal file
|
@ -0,0 +1,52 @@
|
|||
For use with load-events-special-encounters.py,Versions: RBY GSC RSE-CoXd-FL DPPt BW,,,,,,,,Stat order is HP/Atk/Def/Spd/SpA/SpD. Gen. I-II genes are Atk/Def/Spd/Sp.,,,,,,,,,Real World
|
||||
Method,Version,Species/Form,Lv.,Item,Move(s),♂♀,⁂,Egg,Genes,Place,Trade for,Name,OT Name,OT №,Cost,Shadow mvs,Ribbons,Location,Distribution dates,Notes,Wonder Card title,Wonder Card text
|
||||
starter,RB,"bulbasaur, ivysaur, venusaur",5,,,,,,,pallet-town,,,,,,,,,,choice of 1
|
||||
starter,Y,pikachu,5,,,,,,,pallet-town,,,,,,,,,,"(Has happiness, unable to evolve, etc)"
|
||||
gift,Y,bulbasaur,10,,,,,,,cerulean-city,,,,,,,,,,(Pikachu's happiness high)
|
||||
gift,Y,charmander,10,,,,,,,kanto-route-24
|
||||
gift,Y,squirtle,10,,,,,,,vermillion-city,,,,,,,,,,(Thunder Badge required)
|
||||
gift,RBY,"hitmonchan, hitmonlee",30,,,,,,,saffron-city,,,,,,,,,,choice of 1; Fighting Dojo
|
||||
gift,RBY,lapras,15,,,,,,,saffron-city,,,,,,,,,,Silph Co.
|
||||
gift,RBY,eevee,25,,,,,,,celadon-city,,,,,,,,,,Celadon Mansion
|
||||
fossil,RBY,"omanyte, kabuto",30,,,,,,,cinnabar-island,,,,,,,,,,choice of 1; Pokémon Lab; fossil from Mt. Moon
|
||||
fossil,RBY,aerodactyl,30,,,,,,,cinnabar-island,,,,,,,,,,Pokémon Lab; fossil from behind Pewter Museum (need Cut)
|
||||
overworld,RBY,snorlax,30,,,,,,,"kanto-route-12, kanto-route-16",,,,,,,,,,Nedd to be awakened by Poké Flute
|
||||
overworld,RBY,articuno,50,,,,,,,seafoam-islands
|
||||
overworld,RBY,zapdos,50,,,,,,,power-plant
|
||||
overworld,RBY,moltres,50,,,,,,,kanto-victory-road-1 2f
|
||||
overworld,RBY,mewtwo,70,,,,,,,cerulean-cave b1f
|
||||
purchase,RBY,magikarp,,,,,,,,kanto-route-4,,,,,500
|
||||
trade,RB,farfetchd,,,,,,,,vermillion-city,spearow,DUX,TRAINER
|
||||
trade,RB,lickitung,,,,,,,,kanto-route-18,slowbro,MARC,TRAINER
|
||||
trade,RB,mr-mime,,,,,,,,kanto-route-2,abra,MARCEL,TRAINER
|
||||
trade,Y,mr-mime,,,,,,,,kanto-route-2,clefairy,MILES,TRAINER
|
||||
trade,RB,jynx,,,,,,,,cerulean-city,poliwhirl,LOLA,TRAINER
|
||||
trade,RB,nidoran-f,,,,,,,,kanto-route-5,nidoran-m,SPOT,TRAINER
|
||||
trade,RB,nidorina,,,,,,,,kanto-route-11,nidorino,TERRY,TRAINER
|
||||
trade,Y,parasect,,,,,,,,kanto-route-18,tangela,SPIKE,TRAINER
|
||||
trade,Y,dugtrio,,,,,,,,kanto-route-11,lickitung,GURIO,TRAINER
|
||||
trade,Y,machoke,,,,,,,,kanto-route-5,cubone,RICKY,TRAINER,,,,,,,(evolves immediately)
|
||||
trade,RB,seel,,,,,,,,cinnabar-island,ponyta,SAILOR,TRAINER
|
||||
trade,Y,dewgong,,,,,,,,cinnabar-island,growlithe,CEZANNE,TRAINER
|
||||
trade,Y,muk,,,,,,,,cinnabar-island,kangaskhan,STICKY,TRAINER
|
||||
trade,RB,electrode,,,,,,,,cinnabar-island,raichu,DORIS,TRAINER
|
||||
trade,Y,rhydon,,,,,,,,cinnabar-island,golduck,BUFFY,TRAINER
|
||||
trade,RB,tangela,,,,,,,,cinnabar-island,venonat,CRINKLES,TRAINER
|
||||
prize,R,nidorina,17,,,,,,,celadon-city,,,,,1200
|
||||
prize,B,nidorino,17,,,,,,,celadon-city,,,,,1200
|
||||
prize,R,clefairy,8,,,,,,,celadon-city,,,,,500
|
||||
prize,B,clefairy,12,,,,,,,celadon-city,,,,,750
|
||||
prize,Y,vulpix,18,,,,,,,celadon-city,,,,,1000
|
||||
prize,Y,wigglytuff,22,,,,,,,celadon-city,,,,,2680
|
||||
prize,R,abra,9,,,,,,,celadon-city,,,,,180
|
||||
prize,B,abra,6,,,,,,,celadon-city,,,,,120
|
||||
prize,Y,abra,15,,,,,,,celadon-city,,,,,230
|
||||
prize,R,scyther,25,,,,,,,celadon-city,,,,,5500
|
||||
prize,Y,scyther,30,,,,,,,celadon-city,,,,,6500
|
||||
prize,B,pinsir,20,,,,,,,celadon-city,,,,,2500
|
||||
prize,Y,pinsir,30,,,,,,,celadon-city,,,,,6500
|
||||
prize,R,porygon,26,,,,,,,celadon-city,,,,,9999
|
||||
prize,B,porygon,18,,,,,,,celadon-city,,,,,4600
|
||||
prize,Y,porygon,26,,,,,,,celadon-city,,,,,9999
|
||||
prize,R,dratini,18,,,,,,,celadon-city,,,,,2800
|
||||
prize,B,dratini,24,,,,,,,celadon-city,,,,,4600
|
Can't render this file because it has a wrong number of fields in line 2.
|
166
scripts/load-events-and-special-encounters.py
Normal file
166
scripts/load-events-and-special-encounters.py
Normal file
|
@ -0,0 +1,166 @@
|
|||
# Encoding: UTF-8
|
||||
"""Load events and special encounters from a CSV file
|
||||
|
||||
This is an unmaintained one-shot script, only included in the repo for reference.
|
||||
|
||||
Loads the data from an ad-hoc spreadsheet format, because for getting this stuff
|
||||
together, flat is definitely better than nested.
|
||||
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import sys
|
||||
import csv
|
||||
|
||||
from sqlalchemy.sql.expression import func
|
||||
from sqlalchemy.orm import subqueryload
|
||||
import sqlalchemy.orm.exc
|
||||
|
||||
from pokedex.db import connect, tables, util, load
|
||||
|
||||
session = connect()
|
||||
|
||||
reader = ([c.decode('utf-8') for c in l] for l in csv.reader(open(sys.argv[1])))
|
||||
reader.next() # discard line 1
|
||||
column_names = reader.next()
|
||||
print ','.join(column_names)
|
||||
|
||||
english = util.get(session, tables.Language, 'en')
|
||||
|
||||
def create_with_autoid(table):
|
||||
autoid = (session.query(func.max(table.id)).one()[0] or 0) + 1
|
||||
obj = table()
|
||||
obj.id = autoid
|
||||
return obj
|
||||
|
||||
# We need location_areas for places that don't have them yet
|
||||
for location in session.query(tables.Location).options(subqueryload('areas')):
|
||||
if not location.areas:
|
||||
print 'Creating default area for', location.identifier
|
||||
area = create_with_autoid(tables.LocationArea)
|
||||
area.location = location
|
||||
session.add(area)
|
||||
|
||||
def trainer(name, number):
|
||||
if name is number is None:
|
||||
return None
|
||||
query = session.query(tables.Trainer).join(tables.Trainer.names)
|
||||
query = query.filter(tables.Trainer.names_table.name == name)
|
||||
query = query.filter(tables.Trainer.number == number)
|
||||
try:
|
||||
return query.one()
|
||||
except sqlalchemy.orm.exc.NoResultFound:
|
||||
trainer = create_with_autoid(tables.Trainer)
|
||||
trainer_name = tables.Trainer.names_table()
|
||||
trainer_name.local_language = english
|
||||
trainer_name.foreign_id = trainer.id
|
||||
trainer_name.name = name
|
||||
trainer.number = number
|
||||
session.add(trainer)
|
||||
session.add(trainer_name)
|
||||
return trainer
|
||||
|
||||
version_codes = (
|
||||
# 2-letter codes first!
|
||||
('Xd', 'xd'),
|
||||
('Co', 'colosseum'),
|
||||
('Pt', 'platinum'),
|
||||
('Hg', 'heartgold'),
|
||||
('Ss', 'soulsilver'),
|
||||
|
||||
('R', 'red'),
|
||||
('B', 'blue'),
|
||||
('Y', 'yellow'),
|
||||
|
||||
('G', 'gold'),
|
||||
('S', 'silver'),
|
||||
('C', 'crystal'),
|
||||
|
||||
('R', 'ruby'),
|
||||
('S', 'sapphire'),
|
||||
('E', 'emerald'),
|
||||
('F', 'firered'),
|
||||
('L', 'leafgreen'),
|
||||
|
||||
('D', 'diamond'),
|
||||
('P', 'pearl'),
|
||||
|
||||
('B', 'black'),
|
||||
('W', 'white'),
|
||||
)
|
||||
|
||||
for line in reader:
|
||||
print ','.join(line)
|
||||
line_dict = dict(zip(column_names, line + [''] * 100))
|
||||
all_places = line_dict.pop('Place').split(',')
|
||||
for p_form_ident in line_dict.pop('Species/Form').split(','):
|
||||
p_form_ident = p_form_ident.strip()
|
||||
for place_ident in all_places:
|
||||
place_ident = place_ident.strip()
|
||||
|
||||
dct = dict(line_dict)
|
||||
|
||||
encounter_type = util.get(session, tables.SpecialEncounterType, dct.pop('Method'))
|
||||
species_ident, sp, form_ident = p_form_ident.partition(' ')
|
||||
species = util.get(session, tables.PokemonSpecies, species_ident)
|
||||
for pokemon_form in species.forms:
|
||||
if pokemon_form.form_identifier == (form_ident or None):
|
||||
break
|
||||
else:
|
||||
raise ValueError('No such pkmn form: %s' % p_form_ident)
|
||||
if place_ident:
|
||||
location_ident, sp, area_ident = place_ident.partition(' ')
|
||||
location = util.get(session, tables.Location, location_ident)
|
||||
for location_area in location.areas:
|
||||
if location_area.identifier == (area_ident or None):
|
||||
break
|
||||
else:
|
||||
raise ValueError('No such area: %s' % place_ident)
|
||||
else:
|
||||
location_area = None
|
||||
se_pokemon = create_with_autoid(tables.EventPokemon)
|
||||
se_pokemon.pokemon_form = pokemon_form
|
||||
se_pokemon.is_egg = bool(dct.pop('Egg'))
|
||||
se_pokemon.cost = dct.pop('Cost') or None
|
||||
session.add(se_pokemon)
|
||||
encounter = create_with_autoid(tables.SpecialEncounter)
|
||||
encounter.event_pokemon = se_pokemon
|
||||
encounter.type = encounter_type
|
||||
encounter.location_area = location_area
|
||||
se_pokemon.level = dct.pop('Lv.') or None
|
||||
se_pokemon.nickname = dct.pop('Name') or None
|
||||
session.add(encounter)
|
||||
if encounter_type == 'starter':
|
||||
print
|
||||
dct.pop('Notes')
|
||||
versions = dct.pop('Version')
|
||||
trade_for = dct.pop('Trade for')
|
||||
if trade_for:
|
||||
encounter.trade_species = util.get(session,
|
||||
tables.PokemonSpecies, trade_for)
|
||||
se_pokemon.original_trainer = trainer(
|
||||
dct.pop('OT Name') or None, dct.pop('OT №') or None)
|
||||
for code, version_ident in version_codes:
|
||||
part1, current_code, part2 = versions.partition(code)
|
||||
versions = part1 + part2
|
||||
if current_code:
|
||||
entry = tables.SpecialEncounterVersion()
|
||||
entry.encounter = encounter
|
||||
entry.version = util.get(session, tables.Version, version_ident)
|
||||
session.add(entry)
|
||||
assert not versions, 'Leftover versions: %s' % versions
|
||||
assert not any(dct.values()), 'stuff left over: %s' % ', '.join(
|
||||
'%s=%s' % (k, v) for k, v in dct.items() if v)
|
||||
|
||||
print 'Dumping!'
|
||||
load.dump(session, verbose=True, tables=[
|
||||
'special_encounters',
|
||||
'event_pokemon',
|
||||
'special_encounter_versions',
|
||||
'location_areas',
|
||||
'trainers',
|
||||
'trainer_names',
|
||||
])
|
||||
|
||||
session.rollback()
|
Loading…
Reference in a new issue