Commit graph

1327 commits

Author SHA1 Message Date
Andrew Ekstedt
fd5f6e1b65 Fix pokedex search command
Filtering on pokemon name was broken. Not sure why, since the search CLI
was added way after the i18n stuff was added. The error is related to
AssociationProxy, which figures because nothing about association
proxies ever seems to work right. I don't know enough about SQLAlchemy
internals to know if what it was trying to do was supposed to
work, or how to fix it if so. So, fix it by using the same boring
join-based filtering that spline-pokedex uses.

Running `pokedex search --name=gloom` caused the following error with
PostgreSQL and SQLAlchemy 1.3.5:

    sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'ColumnAssociationProxyInstance'

...and this error with SQLite.

    sqlalchemy.exc.InterfaceError: (sqlite3.InterfaceError) Error binding parameter 4 - probably unsupported type.
    [parameters: (9, 9, 9, 9, ColumnAssociationProxyInstance(AssociationProxy('names_local', 'name')), 'gloom')]

Additionaly, the following error would happen with PostgreSQL and SQLAlchemy 0.9.7,
but that's probably unrelated:

    sqlalchemy.exc.ProgrammingError: (ProgrammingError) subquery in FROM must have an alias
    LINE 4: FROM pokemon_species, (SELECT pokemon_species_names.name AS ...
                                   ^

Fixes #296
2020-04-16 17:32:02 -07:00
Andrew Ekstedt
e5c18c4109 Travis CI: check that dump is idempotent
Run git-diff after dumping the database to make sure that there are no
changes to the csv files.

We often get PRs from people who edit stuff by hand and don't know to do
a load/dump of the database afterwards. Usually this means they were
adding game data by hand, which we want to discourage, but even if it's
done for valid reasons it's good to canonicalize the csv files as soon
as possible to avoid interfering with future commits.
2020-03-04 16:19:29 -08:00
Andrew Ekstedt
77e3d9df16 Travis CI: don't pass -l to dump
The help text for pokedex dump -l says

    -l LANGS, --langs LANGS
                        comma-separated list of language codes to load,
                        'none', or 'all' (default: en)

However, the values 'none' and 'all' don't work (they are treated as
language names) and the default is to dump all languages, not just
English.

So `dump -l all` actually dumps no text at all because there is no
language called 'all'.

This is about to cause trouble for Travis CI because the next commit
will start checking that load/dump successfully round-trips... which
definitely isn't the case right now because the dump is missing
all text from translated tables.

The dump command and its documentation should definitely be fixed at
some point, but for now just stop using -l.
2020-03-04 16:19:29 -08:00
Andrew Ekstedt
a166502b45 Load/dump dance
Fixes the order of encounter_condition_value_map.csv after PR #289.
2020-03-04 16:19:29 -08:00
Andrew Ekstedt
51957b9b37 Travis CI: fix some config warnings
`sudo: false` used to be the way to opt in to their container-based
infrastructure. That system was retired in 2018 and so the `sudo` option
no longer does anything. Remove it.

Travi CI supports multiple OSes now. Add `os: linux` to be explicit
about which OS we want to test on.
2020-03-04 15:27:38 -08:00
Andrew Ekstedt
a0b47add63
Update Spanish translations (#271) 2020-03-04 15:24:28 -08:00
Andrew Ekstedt
9c25b268eb
Update README and improve docker support (#294)
* improve python 3, docker support and README

- fix support for python 3.7
- simplify docker support
- update readme
- remove obsolete item-questions file
2020-03-04 15:07:03 -08:00
Andrew Ekstedt
722a4664dd
Generation 2 (GSC) encounters (#289)
Source: https://www.pokebip.com/page/jeuxvideo/dossier_shasse/encounter_slot

This covers the following encounter methods: Walking, Fishing (3 rods), Surf and Rock Smash
2020-03-04 14:52:07 -08:00
Andrew Ekstedt
9c1d1828c9 Re-rip Gen III contest effects
Gen III contest effects were part of the initial data import from brown
veekun and so have probably never gotten a proper rip.

This commit re-rips contest effect stats, types, combos, and the mapping
between contest effects and moves.

None of the stats changed (jam & appeal); a few moves got assigned
different contest effects (specifically: smokescreen, flash, spite, and
shadow ball); and several combos changed.

For example, Hail was listed as comboing into the following moves
(this is also what Bulbapedia says):

    Ice Beam, Blizzard, Aurora Beam, Haze, Powder Snow, Icy Wind,
    Ice Ball, Weather Ball, Sheer Cold, Icicle Spear

However, the actual list is much shorter:

    Blizzard, Powder Snow, Weather Ball

I verified on my Ruby cart that Hail->Ice Beam and Hail->Icy Wind are
not real combos, and that Hail->Blizzard is.

n.b. There are a bunch of unused contest effects in the game: out of 48
effects, 15 are not used by any move. The pokedex doesn't currently
include these. I elected not to add them, partly because i didn't want
to have to rip flavor text for them, but mostly because if i were going
to go that route i would probably reassign contest_effects.id to match
their internal ids, which would have made for uglier diffs.

Fixes #280
2020-03-01 23:25:49 -08:00
KidsDontPlay
cc2ad50752
Fix typo in German name for Physical damage class (#283) 2020-03-01 22:53:02 -08:00
Andrew Ekstedt
0232456433 Load/dump dance
Fixes some out-of-order rows in pokemon_dex_numbers.csv that were
introduced by PR #269 (f8e7637e9).
2020-02-29 20:02:08 -08:00
Andrew Ekstedt
7d5fbaec87 Fix some more issues in German ability effect text
- link to nonexistant `[]{move:shield}` in Color Change (changed to protect)
- invalid syntax `[move:sandstorm]` in Primordial Sea
- invalid syntax `[move:sandstorm]` in Desolate Land
- invalid syntax `[move:sandstorm]` in Delta Stream

Found by test_markdown_values, which is not run by default because it is
slow. It can be run manually with

    py.test pokedex/tests/test_strings.py --all
2020-01-23 12:47:01 -08:00
Andrew Ekstedt
e78f7cbe84 Fix markdown syntax in Flower Veil's German effect text 2020-01-23 12:05:36 -08:00
Alessandro Pezzè
049fa1437b Fix markdown syntax in Cheek Pouch's German effect text (#290) 2020-01-22 19:12:40 -08:00
Andrew Ekstedt
03974e6f22 Travis CI: test Python 3.6 and 3.7 2019-11-15 22:35:12 -08:00
Andrew Ekstedt
8dfbd58688 Regenerate order columns
Updates #282
2019-11-15 22:13:33 -08:00
Andrew Ekstedt
852a4ad06a Fix form_order for arceus-unknown and pikachu-*-cap
Pikachu's Cap forms and Cosplay forms had overlapping orders because i
forgot about Cosplay Pikachu when i set the form_order for the cap
forms.

??? Arceus had form_order=3 so it would go after all the other forms,
which had form_order=2. These were assigned distinct form_orders 2
through 17 at some point during a recent dump, but ??? Arceus was
missed.

Fixes #282
2019-11-15 22:01:12 -08:00
Zroxos
3c550f1425 Add evolution method to Crabrawler (#276)
Added missing `location_id` for Crabrawler. It now references the "Mount Lanakila" row in the `locations` table.

Updates #248
2019-07-21 22:42:19 -07:00
h82258652
087237c9ef Fix US/UM chinese pokemon names (#275)
The Chinese names for some of the pokemon added in US/UM (805-807) seem to have gotten corrupted somehow.
2019-07-21 22:41:02 -07:00
naooooooo99999
310d104533 Fixed the spelling of japanese Generation I. (#267) 2019-07-16 23:26:54 -07:00
ymin1103
ce783fba03 Add Korean translations and missing version names (#266)
This commit adds Korean translations for egg groups, generations, languages, regions, stats, and version names. Also the ??? and shadow types. 

It also fills in some missing foreign version names for S/M and US/UM (from Bulbapedia).
2019-07-16 23:18:02 -07:00
kampfmoehre
10f024a80c Add german ability translations (#181)
Adds german translations for ability description prose and ability
changelog prose. I tried to stay in the same style for all translations.
2019-07-16 22:39:18 -07:00
Andrew Ekstedt
ad429ab128 Fix Roserade's Central Kalos dex number and add tests
Roserade and Roselia were mistakenly sharing dex number 72. Presumably
an error from the original X/Y spreadsheet. I guess we never reripped
these after 3DS rom dumping became possible.

Regardless of how it happened, add a test and some database constraints
to ensure that it doesn't happen again.

- Add a test for gaps in pokedex numbers

- Add uniqueness constraints to pokemon_dex_numbers.  A species can
  only appear once per pokedex, and a number cannot be used more than
  once per pokedex.
2019-07-16 18:12:58 -07:00
Tim Goudriaan
f8e7637e9e Add S/M and US/UM pokedex numbers (#269)
Adds pokedex numbers for the Alola dex and all four island dexes, both original and updated.

Data courtesy of Bulbapedia.

Fixes #217.
2019-07-16 17:52:01 -07:00
Kip Yin
11f972f817 Catch StopIteration explicitly in group_by_object generator (#264)
Python 3.7 changed the behaviour of generators so that a StopIteration exception which bubbles up inside a generator is transformed into a RuntimeException. This means that when calling next() inside a generator, we have to explicitly catch the StopIteration and exit the function instead of relying on it to implicitly stop the generator. Otherwise the program will crash. Sigh.

For more information, see PEP 479.

https://www.python.org/dev/peps/pep-0479/
https://stackoverflow.com/questions/51700960/runtimeerror-generator-raised-stopiteration-every-time-i-try-to-run-app/51701040#51701040
2019-07-15 13:23:37 -07:00
Kip Yin
c63b6522bf Limit construct version to 2.5.3
This project uses `construct` 2.5 and lower, and the latest `construct` version (2.9)
is incompatible with 2.5.

Resolves #265
2019-07-15 13:04:05 -07:00
Andrew Ekstedt
39cecc2f4d Pin markdown version to avoid deprecation warnings
Will fix later. (#257)
2019-07-12 19:40:56 -07:00
Andrew Ekstedt
db824220d0
Merge pull request #238 from jrubinator/record-gift-pokemon
Record gift pokemon
2019-07-12 19:40:29 -07:00
Andrew Ekstedt
b6dfbbcd58 gift-pokemon: rerun script
This removes a few location areas that are no longer needed now that
we've dropped fossil pokemon.
2019-07-12 19:14:59 -07:00
Andrew Ekstedt
8161bd84e4 gift-pokemon: fix Cosplay Pikachu and Sinnoh starter gift locations
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.
2019-07-12 18:48:07 -07:00
Andrew Ekstedt
2fefb9176b Fix documentation for Language.iso639 and iso3166
ISO 639 is the language code and ISO 3166 is the country code, not the
other way around.
2019-07-01 21:33:06 -07:00
Luccas Robert
ef6c588fc6 Add pt-BR to the languages table (#273, #274) 2019-07-01 21:30:33 -07:00
Andrew Ekstedt
53e0fc0085 gift-encounters: fix Yellow gift pokemon
They were being interpreted as being in Y instead.
2018-11-03 17:19:19 -07:00
Seth Taron
18925edcd3 Add Japanese generation names, and fix Gen VII
Add Japanese translations of the generation names, thanks to @SethETaron. I think this marks our first unofficial Japanese translation. 🎉

Also, fix some issues with Gen VII:

* generation names were missing for every language
* the identifier was incorrect — it was sun-moon instead of generation-vii

Fixes #250, #251, and #252.
2018-10-27 21:29:23 -07:00
Andrew Ekstedt
14bcc8f2bf Rerun gift encounters script 2018-10-27 15:19:59 -07:00
Andrew Ekstedt
ada0e9c545 Set rarity for gift encounter slots 2018-10-27 15:19:59 -07:00
Andrew Ekstedt
6fd43b097c Exclude fossil pokemon for now
Fossil pokémon don't fit with the rest of the gift pokemon: rather than
being given a pokémon directly, you get an item which can be exchanged
for a pokémon somewhere else ("revived"). To handle them properly we'd
have to add an item location table. I don't want to figure that out
right now, so just ignore the fossils for now.
2018-10-27 15:19:59 -07:00
Jonathan Rubin
4155bc4459 gift pokemon CSV updates - 3rd time is the charm
use `pokedex dump` to apply CSV changes
2018-10-06 14:38:06 -04:00
Andrew Ekstedt
1d3dd33cbb Sigh, fix Python 3 syntax
Python 3 doesn't allow the ur'' prefix for raw unicode strings.
We want a unicode string here so that we get a unicode regexp,
so drop the r and do the escaping explicitly (the regexp in question
is pretty simple, fortunately).
2018-09-29 11:56:40 -07:00
Andrew Ekstedt
9a8918135f Region-prefix some locations identifiers, and add a test
Unova Routes 19-23 were added in B/W 2 and i forgot to prefix them when
we added the locations. Kalos Victory Road used to have a prefix but it
got dropped when i re-ripped X/Y locations. Kalos Pokemon League gets a
prefix too, since both Sinnoh and Alola also have Pokemon Leagues.

Add a test to ensure that we don't forget again in the future.
2018-09-29 11:35:13 -07:00
Andrew Ekstedt
59fd27c574 Require location identifiers to be unique.
Also require location area identifiers to be unique to their location.

I almost added a duplicate pokemon-league location when adding S/M
locations. This should help.
2018-09-29 10:53:18 -07:00
Andrew Ekstedt
e6b64b8c5a Relax test for nullability of translation columns
The previous commit added a nullable subtitle field to location_names.
This caused a test in test_schema.py to fail because the name field
wasn't also nullable.

A comment above the test says, "If there's more than one text column in a
translation table they have to be nullable, to support missing
translations", but i don't think that logic holds in this case.

The idea is that we might have a translation for the subtitle, but not
the name, or vice versa, so both need to be nullable in case one or the
other is missing. But in this particular case that doesn't make sense:
if you don't have a name, you don't have a location; it may or may not
have a subtitle, but a location will always have a name.

Therefore, add an exception to the test.
2018-09-29 10:12:10 -07:00
Jonathan Rubin
10db4d9d23 gift-pokemon: Rerun with changes
Using the following steps:
* Unroll the previous commit with bulk CSV changes (b7500e92f0)
* remove and re-initialize the database
* follow the steps in that commit
* Only select location_area_prose in English
    (there's a bunch of czech translations tracked separately in pokedex/data/csv/translations/cs.csv)
2018-09-22 21:45:34 -04:00
Jonathan Rubin
305d4f5d0e gift-pokemon: Quoting on location_area_prose
This change implies no functionality, but it was easiest to just
make it - sqlite insists on quoting spaces, though it's not needed.

Not rolling it back, since theoretically someone could run into the
same thing again in the future.
2018-09-22 21:38:39 -04:00
Jonathan Rubin
203b903999 gift-pokemon: Add encounter_method_prose 2018-09-22 13:27:39 -04:00
Jonathan Rubin
5e8ec47256 gift-pokemon: Add new location_area_prose entries 2018-09-22 13:20:51 -04:00
Jonathan Rubin
618aa0064b gift-pokemon: separate gift-egg method
This allows us to indicate eggs by the method,
rather than by the level
(which will now merely reflect the hatch level in that generation)
2018-09-19 13:58:25 -04:00
Jonathan Rubin
b7500e92f0 gift-pokemon: CSV file updates
From sqlite:
.headers on
.mode csv
.output $filename
select * from $table
Then remove all the dumb carriage returns in vim
2018-09-19 13:58:25 -04:00
Jonathan Rubin
8694c8464a gift-pokemon: Document empty encounter_slots
I'm going to record gift-pokemon as having no encounter slot, which I
believe is correct by-and-large (since you always get the same mon).

There are a few randomized gift pokemon which do have some type
of encounter slot (eg. Crystal's Odd Egg). Those aren't tracked (yet).
2018-09-19 13:58:25 -04:00
Jonathan Rubin
61dfeed80f gift-pokemon: Gen VI 2018-09-19 13:58:25 -04:00