feat(Encounters): Add Let's Go Pikachu/Eevee to Encounters CSV#1383
feat(Encounters): Add Let's Go Pikachu/Eevee to Encounters CSV#1383Naramsim merged 9 commits intoPokeAPI:masterfrom
Conversation
I've done a quick look, and things look a bit fishy (like ~15 duplicates of a location area with the vague name |
|
Looking at this further, I realize now that the location area entries are appended to the location name, so there is no ambiguity in the duplicate For the Route 1 location area, things seem fine initially but Pidgey is listed as a rare spawn alongside Charizard, Dragonite, and the legendary birds. This happens again in the next three location area's encounters (up to Route 3), so this mistake (and others) may have been present throughout the AI generated CSV. I can write a script and do a more thorough check side-by-side with Serebii, but this would take me some time. Plus, I would rather do this thorough check after the location areas have been corrected, as I don't want to do the check twice. |
jemarq04
left a comment
There was a problem hiding this comment.
I've added a few comments in the code regarding my comment on the PR itself.
(First time using this review feature on GitHub, so I hope it didn't spam with comments/notifications!)
|
Thanks for the feedback I'll take a look today :) I wasn't sure how to handle the replicated locations but I probably could've used FRLG as a template. |
|
I'm going to manually verify encounters grouped by area today or tomorrow and then push the changes. I'll link my verification documentation when I do |
e030a02 to
81c5a6a
Compare
Add encounter data for Pokemon Let's Go Pikachu and Let's Go Eevee (version IDs 31 and 32, version group 19). ## New Encounter Methods (IDs 38-41) - overworld (38): Pokemon visible in the overworld on land - overworld-water (39): Pokemon visible on water surface - overworld-flying (40): Pokemon visible in the sky - special-spawn (41): Special spawn after catch combo ## Encounter Data - 1,306 new encounter records covering all Kanto locations - Static encounters (Mewtwo, legendary birds, Snorlax) - Gift Pokemon (starters, Magikarp, Aerodactyl, etc.) - Overworld encounters for all routes and dungeons ## Data Sources - Bulbapedia encounter tables for Let's Go Pikachu/Eevee - Cross-referenced with Serebii for validation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
81c5a6a to
b67a296
Compare
- Add Psyduck to Route 5 overworld encounters - Add flying encounters (Charizard, Articuno, Zapdos, Moltres, Dragonite) to Route 5 - Add encounter conditions for flying Pokemon - Verify proper sorting by location_area > encounter_slot Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove Route 5 Psyduck and flying encounters (Charizard, Articuno, Zapdos, Moltres, Dragonite) - Remove Route 5 flying encounter conditions - Remove Aerodactyl gift from Pallet Town (fossil revival, not gift) - Add Voltorb disguised-as-pokeball at Power Plant (Lv.40) - Fix Electrode level to Lv.43 at Power Plant - Rename special-spawn method to catch-combo Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
Summary of changes since you've reviewed
I also left some open questions that I'd love your input on. I intend to tackle encounter data for BDSP, SwSh, PLA, SV, and PLZA so please let me know if there's something I can do in the future to make my contributions easier to review. If you want to do something with version tagging with this data to avoid breaking existing api usage I'm open to that! |
jemarq04
left a comment
There was a problem hiding this comment.
I've made a few comments again on the PR, though I'd like to voice a concern on the manual check over all of the encounters. After checking Route 1 I immediately found a mistake that was introduced after the previous review (special encounters moved to flying spawns). It looks like your manual check simply used the AI to generate a checklist that you went through, but the checklist from the AI was inaccurate.. I would recommend sources PokeAPI consider reputable like Serebii and Bulbapedia. They are listed there and you can check over your encounters manually that way.
|
Ah, I just saw you edited your initial PR description. As far as your open questions go, the fossil revivals are considered |
To be clear I did manually verify each spawn against serebii (cross referenced bulbapedia if the data didn't match) made updates, then built the script to verify one more time against bulbapedia in the verification doc I linked. The discrepancies you've pointed out are design decisions (e.g., flying spawn vs special spawn) rather than data inaccuracies. |
- Rename catch-combo to overworld-special (method 41) - Add overworld-flying-special (method 42) for rare flying spawns - Add overworld-water-special (method 43) for rare water spawns - Remove disguised-as-pokeball method; use only-one for Voltorb/Electrode - Update flying Dragonite/Charizard/Articuno/Zapdos/Moltres to overworld-flying-special - Update Lapras on Routes 19/20 to overworld-water-special - Add fossil revival gifts at Cinnabar Lab: Omanyte, Kabuto, Aerodactyl (Lv.44) - Update encounter method prose descriptions Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add overworld-flying-special encounters for Route 20 (Charizard, Articuno, Zapdos, Moltres, Dragonite) to match Route 19. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
encounter_methods.csv
encounter_slots.csv
encounter_method_prose.csv
encounters.csv (250+ encounter changes)
|
|
Thanks for your thorough review! I have a much better idea of the db schema and how to add encounters now. Expect another PR with BDSP data soon. I think this api is awesome and I want to help get encounters data up to date! |
|
Apologies for re-opening this, but I'm doing a careful check and I'm finding some initial inconsistencies (e.g. with encounter conditions). I'd like to continue this thorough check (if that's fine with you Naramsim) and get back on this. I have a script I've written that parses these files into some readable text which is making this a bit easier as well. |
jemarq04
left a comment
There was a problem hiding this comment.
Ok - this is my actual final review, apologies again for the back and forth. I rushed myself a bit on the first review to get it through, but I wanted to take some time to review the encounters. Thank you for your patience!
1a911e0 to
3ad79eb
Compare
|
I would recommend avoiding rebasing/force pushing over the commit history - it makes it difficult to track the changes that were requested in the review and means that we would need to review the entirety of the file over again, since its history was overwritten. These are small changes here, but it will likely help for SWSH and onwards if you move forward with that as well. |
…y-one - Arcanine trade now exclusive to Let's Go Eevee (was LGP) - Persian trade now exclusive to Let's Go Pikachu (was LGE) - Removed only-one Voltorb encounters from Power Plant Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
38f3482 to
ce7005f
Compare
Ran that on workflow on accident, but the history should be restored now |
|
Hi! I read all the comments and reviews. It was a huge job. I want to thank @jemarq04 for all the efforts he put reviewing something AI generated, the most difficult the review. Secondly also to @DJ-Meyers that was able to integrate the comments received into the proposed code. Being (myself) not knowledgeable enough over encounters/locations/... I'll wait for the approval of @jemarq04 before merging this in. These AI contributions are a pain in the *** to review and most of the time the time taken by the reviewer greatly surpasses the time taken by the submitter. I'm not sure how we want to continue this process (reviewing and merging AI gen PR) but surely without people like @jemarq04 we cannot address it. Please @phalt take a look so to see what's going on |
|
I'll have a proper read over this tomorrow.
Yeah it's a crisis across all open source projects. CURL has straight up said they'll publicly ridicule and block contributions from AI. Other projects embrace it. I'm not really sure what to do to be honest. I personally appreciate disclosures like this one. I'm leaning towards "AI disclosure + reasonable size to review" so anything huge and sloppy can be dropped immediately. If it's not the type of PR we'd accept in a real professional project then it's not what we should accept here. PokeAPI is big, has literally billions of calls a month. We should expect a high level of quality. End of. This one feels well intended though so I'll read it over then see how I feel. I think the only thing we can do about slop is be ruthless and close them. |
|
I was definitely apprehensive about it before/during the review, and I’m not too reassured afterwards either. I’m fairly certain that this PR shouldn’t have any issues, but it did take a lot of effort to parse when I had to be wary of every line. I took a day to write up a script to parse things into human-readable terms, but it still took some time to be sure things were reasonable even with the tool. The comment @Naramsim made about it taking more time for reviewers is definitely accurate, and I worry how that’ll progress for encounter data for more complex situations like SWSH/SV. I will of course review things in line with the project’s guidelines, but I thought I’d weigh in On a separate note, I’ll approve once the final comment regarding the Elite Four encounter condition is addressed. Otherwise, everything I mentioned was corrected or addressed. |
…ard and Dragonite Charizard and Dragonite sky encounters in LGPE do not require any prior conditions to spawn - they appear unconditionally (with rarity determined by encounter slot). This removes the erroneous condition 35 mappings. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
Is there something different I can do for future game data? I'm much more familiar with the way the data is set up now, so I can definitely avoid some of the misunderstandings I had about location re-use/encounter conditions. Also to be clear on the usage of AI, I'm not just putting "hey chat gpt what are the encounters?", I'm using the same tools that I use to write production code at my job to create scripts to do web scraping. I think any PR adding encounter data is going to need exhaustive review and verification regardless of whether AI is used to speed up the script writing. |
|
Your initial PR description does mention that the AI is involved in more than just web scraping, and not all of the issues were with an unfamiliarity with PokeAPI formatting. The initial data was unverified, and then the commit history was completely altered and a lot of data was modified outside of validation (e.g. handling special encounters). And yes, PRs with encounter data will of course require time to validate, regardless of AI or not, but because AI is used to generate the data it does mean a more rigorous check would be needed. I'm very biased against AI and find it unreliable and often harmful, but aside from that it does require more attention in the reviews. As far as what would make it easier, the comment I had previously on avoiding rebasing definitely helps (so that we can keep track of our resolved/unresolved comments on the code). Taking the time to familiarize yourself with the files you're changing before the update would also speed things up as well, but this PR will have helped in that regard for future changes. These are opinions of myself as a reviewer, so if any of the maintainers wanted to add on please do so. Otherwise, the changes I requested look to be addressed so I'll give my approval for the PR |
|
I'm gonna stick my eng manager / lead eng hat on now and reply to a bunch of bits in one go 🎩 I will state this: There is no blame, we should all be objective. Everyone has good intentions here. Please remember that.Right, some comments...
If this was the case in a professional context, what would you do? Push back probably, right? Do that. It is up the the author of the PR to confidently prove to you that what they have done works. Code review has an element of trust. OSS makes this difficult because 90% of the time you have never met the author, so you have no prior trust or relationship built with them.
I think this was a well intended thing to do, but I would have pushed the author to do this instead, and for you to request this. Hey, first of all: thanks for your contribution and enthusiasm. I think you just drew the short straw on this project dealing with a sudden paradigm change that is affecting practically all software in the world. It'll be a good learning experience for all of us.
Generally game data PRs are very simple changes, or at least "glanceable with confidence" - the problem arises with technical changes and extensions to the data. My suggestion - keep changes small, organise them per commit (so we can read each commit one by one like a story), and use commit messages to explain changes.
I think your disclosure was correct and welcome, as I said before - it's just the first time we've explicitly encountered this, so we're on a new path and figuring things out. Some questions for all of us to think about in the future:
cc @Naramsim |
|
FWIW you set off my side quest trap and now I am embarking on something: #1390 |
That's fair, I think I mostly meant these in the context of how I feel about AI in the PR, less about the PR itself. I'll definitely keep these things in mind though going forward - thanks for the feedback! (And thank you @DJ-Meyers for bearing with me through the whole review as well lol) |
|
Let's merge it! Thanks everyone! |
|
A PokeAPI/api-data refresh has started. In ~45 minutes the staging branch of PokeAPI/api-data will be pushed with the new generated data. |
|
The updater script has finished its job and has now opened a Pull Request towards PokeAPI/api-data with the updated data. |
This PR adds encounter data for Pokemon Let's Go Pikachu and Let's Go Eevee (version IDs 31 and 32, version group 19).
AI Assisted Coding Disclosure
I'm working on a personal project with Claude Code that is using the PokéAPI and want location data for newer games. I understand this data is much more complicated, so I wrote up a plan to parse the data and massage it into the existing structures of the PokéAPI codebase.
[HUMAN] Original plan for parsing data with examples
[AI] Design considerations, progress tracking, and contribution guidelines
[AI] Necessary additions/changes to add new gen encounters
Changes
New Encounter Methods (IDs 38-41)
overworld(38): Pokemon visible in the overworld on landoverworld-water(39): Pokemon visible on water surfaceoverworld-flying(40): Pokemon visible in the skycatch-combo(41): Rare spawn after catch combodisguised-as-pokeball(42): There wasn't really an appropriate "interact" encounter method and there's a distinct method for encountering feebas so it felt reasonable to add for the Electrodes on the ground in LGPE.New Encounter Slots for LGPE
giftnpc-tradeNew location_areas where necessary
1200Pallet Town: for gift Pikachu/Eevee)1201Lavender Town: trade for Alolan Diglett1202Indigo Plateau: trade for Alolan Exeggutor1203Saffron City (base area): trade for Alolan RaichuEncounter Data
Open Questions
Caveats
Todo