Skip to content

feat(Encounters): Add Let's Go Pikachu/Eevee to Encounters CSV#1383

Merged
Naramsim merged 9 commits intoPokeAPI:masterfrom
DJ-Meyers:feature/lgpe-encounter-data
Feb 4, 2026
Merged

feat(Encounters): Add Let's Go Pikachu/Eevee to Encounters CSV#1383
Naramsim merged 9 commits intoPokeAPI:masterfrom
DJ-Meyers:feature/lgpe-encounter-data

Conversation

@DJ-Meyers
Copy link
Contributor

@DJ-Meyers DJ-Meyers commented Jan 27, 2026

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 land
  • overworld-water (39): Pokemon visible on water surface
  • overworld-flying (40): Pokemon visible in the sky
  • catch-combo (41): Rare spawn after catch combo
  • disguised-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

  • Each of the new encounter methods
  • gift
  • npc-trade

New location_areas where necessary

  • 1200 Pallet Town: for gift Pikachu/Eevee)
  • 1201 Lavender Town: trade for Alolan Diglett
  • 1202 Indigo Plateau: trade for Alolan Exeggutor
  • 1203 Saffron City (base area): trade for Alolan Raichu
    • Note that location_areas for the gym where you're given Hitmonchan/lee and silph co where you're given porygon already existed, but this fits neither of those necessitating an addition

Encounter Data

Open Questions

  • There is no encounter method for fossil revival. This means there is no encounter for omanyte, kabutops, or aerodactyl. Is that intended? How do you feel about adding that method?
  • The catch-combo flying encounters (Charizard, Dragonite, and the legendary birds) are repeated on almost every route. Is there a better way to represent this within the confines of the database schema? Note that they are not included in the flying special spawns on Routes 5 and 20.

Caveats

  • Serebii and Bulbapedia disagree on whether the catch-combo flying encounters appear on Route 20, but agree that they don't occur on Route 5 [S][B].
  • Serebii and Bulbapedia disagree on whether psyduck can be found on route 5
  • I am human and may have missed something in my manual verification

Todo

  • Remove condition on charizard + dragonite flying encounters as the flying mechanic itself is locked behind beating th e main story

@Naramsim
Copy link
Member

Since this PR is AI generated I'd like it to be reviewed thoroughly, thus I'd like to ask for the review of @jemarq04 and @WyattC16, if they have some time.

@jemarq04
Copy link
Contributor

Since this PR is AI generated I'd like it to be reviewed thoroughly, thus I'd like to ask for the review of @jemarq04 and @WyattC16, if they have some time.

I've done a quick look, and things look a bit fishy (like ~15 duplicates of a location area with the vague name lgpe-area and others with simply 1f or b1f), but I want to see if the encounter data is otherwise reasonable. I'll respond with a more detailed response soon

@jemarq04
Copy link
Contributor

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 lgpe-area names. Howver, the 1f and 2f names are duplicates of previous location areas and are confusing/unclear (e.g. this adds a second mt-moon-2f location area). Additionally, LGPE is a Kanto remake and would likely need minimal (if any at all) additional location areas, as all of them would be present from RBY, GSC, FRLG, or HGSS. Only encounter data would need to be added. For example, the kanto-route-2-southern-section location area refers to Kanto Route 2 before Viridian Forest, but this is already covered by kanto-route-2-south-towards-viridian-city.

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.

Copy link
Contributor

@jemarq04 jemarq04 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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!)

@DJ-Meyers
Copy link
Contributor Author

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.

@DJ-Meyers
Copy link
Contributor Author

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

@DJ-Meyers DJ-Meyers force-pushed the feature/lgpe-encounter-data branch from e030a02 to 81c5a6a Compare January 29, 2026 04:47
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>
@DJ-Meyers DJ-Meyers force-pushed the feature/lgpe-encounter-data branch from 81c5a6a to b67a296 Compare January 29, 2026 04:50
DJ-Meyers and others added 2 commits January 28, 2026 23:47
- 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>
@DJ-Meyers DJ-Meyers requested a review from jemarq04 January 29, 2026 06:59
@DJ-Meyers
Copy link
Contributor Author

DJ-Meyers commented Jan 29, 2026

Summary of changes since you've reviewed

  • Consolidated locations/areas to re-use existing kanto ids
  • Removed some scripts and extraneous stuff to keep this PR light
  • updated names for new encounter_methods
  • Cleaned up encounters considerably and manually verified them all (I learned a lot from this PR that I've documented for future work)

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!

@Naramsim @jemarq04

Copy link
Contributor

@jemarq04 jemarq04 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@jemarq04
Copy link
Contributor

Ah, I just saw you edited your initial PR description. As far as your open questions go, the fossil revivals are considered gift encounters (see https://pokeapi.co/api/v2/pokemon/140/encounters). And repeated entries is perfectly fine to list them in each relevant location area.

@DJ-Meyers
Copy link
Contributor Author

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.

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.

DJ-Meyers and others added 2 commits January 29, 2026 10:39
- 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>
@DJ-Meyers
Copy link
Contributor Author

DJ-Meyers commented Jan 29, 2026

encounter_methods.csv

  • Renamed: catch-combo (41) → overworld-special (41)
  • Removed: disguised-as-pokeball (42)
  • Added: overworld-flying-special (42), overworld-water-special (43)

encounter_slots.csv

  • Modified: Slot 1178 now maps to method 42 (overworld-flying-special) instead of disguised-as-pokeball
  • Added: Slot 1180 for method 43 (overworld-water-special)

encounter_method_prose.csv

  • Updated: Method 41 prose → “Rare spawn in grass with lure or catch combo”
  • Added: Method 42 prose → “Rare spawn in the sky with lure or catch combo”
  • Added: Method 43 prose → “Rare spawn in water with lure or catch combo”

encounters.csv (250+ encounter changes)

  • Updated: Flying Dragonite, Charizard, Articuno, Zapdos, Moltres changed from slot 1175 (overworld-flying) → 1178 (overworld-flying-special)
  • Updated 4 encounters: Lapras on Routes 19/20 changed from slot 1176 (overworld-special) → 1180 (overworld-water-special)
  • Updated 4 encounters: Voltorb/Electrode at Power Plant changed from slot 1178 → 577 (only-one)
  • Added 6 encounters: Omanyte, Kabuto, Aerodactyl gifts at Cinnabar Lab (Lv.44)230 encounters: Flying Dragonite, Charizard, Articuno, Zapdos, Moltres changed from slot 1175 (overworld-flying) → 1178 (overworld-flying-special)
  • Updated 4 encounters: Lapras on Routes 19/20 changed from slot 1176 (overworld-special) → 1180 (overworld-water-special)
  • Updated 4 encounters: Voltorb/Electrode at Power Plant changed from slot 1178 → 577 (only-one)
  • Added 6 encounters: Omanyte, Kabuto, Aerodactyl gifts at Cinnabar Lab (Lv.44)

Copy link
Contributor

@jemarq04 jemarq04 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks to be fine from my standpoint. Apart from repeating the check of data, things look to be consistent with the API and accurate to LGPE. @Naramsim

@DJ-Meyers
Copy link
Contributor Author

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!

@DJ-Meyers DJ-Meyers requested a review from Naramsim January 29, 2026 18:56
@jemarq04
Copy link
Contributor

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.

Copy link
Contributor

@jemarq04 jemarq04 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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!

@DJ-Meyers DJ-Meyers closed this Jan 31, 2026
@DJ-Meyers DJ-Meyers force-pushed the feature/lgpe-encounter-data branch from 1a911e0 to 3ad79eb Compare January 31, 2026 17:51
@DJ-Meyers DJ-Meyers reopened this Jan 31, 2026
@jemarq04
Copy link
Contributor

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>
@DJ-Meyers DJ-Meyers force-pushed the feature/lgpe-encounter-data branch from 38f3482 to ce7005f Compare January 31, 2026 18:32
@DJ-Meyers
Copy link
Contributor Author

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.

Ran that on workflow on accident, but the history should be restored now

@Naramsim
Copy link
Member

Naramsim commented Feb 2, 2026

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

@phalt
Copy link
Member

phalt commented Feb 2, 2026

I'll have a proper read over this tomorrow.

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.

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.

@jemarq04
Copy link
Contributor

jemarq04 commented Feb 2, 2026

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>
@DJ-Meyers
Copy link
Contributor Author

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.

@jemarq04
Copy link
Contributor

jemarq04 commented Feb 2, 2026

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

@phalt
Copy link
Member

phalt commented Feb 3, 2026

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...

@jemarq04

I’m not too reassured afterwards either

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 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.

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.

@DJ-Meyers

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.

Is there something different I can do for future game data?

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.

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 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:

  • How can we verifiably prove what coding agents produce is correct (that it matches our feature requirements?)
  • Where is the acceptable balance between "it passes tests so yolo" and "the code it produces must be understandable"? I think we all feel at the moment that the code should be readable by a human at the moment, and we can't have yolo code that passes tests and be done with it.
  • If we want to reduce burden on code reviews, what can we provide in PRs / commits messages / tests / scripts to help prove our changes are working confidently? <- We should figure that out, update the PR template and be ruthless on any contributions that don't meet expectations.

cc @Naramsim

@phalt
Copy link
Member

phalt commented Feb 3, 2026

FWIW you set off my side quest trap and now I am embarking on something: #1390

@jemarq04
Copy link
Contributor

jemarq04 commented Feb 3, 2026

I’m not too reassured afterwards either

If this was the case in a professional context, what would you do? Push back probably, right? Do that.

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.

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.

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)

@Naramsim
Copy link
Member

Naramsim commented Feb 4, 2026

Let's merge it! Thanks everyone!

@Naramsim Naramsim merged commit 46295d6 into PokeAPI:master Feb 4, 2026
9 checks passed
@pokeapi-machine-user
Copy link

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 staging branch will be deployed in our staging environment and the entire API will be ready to review.

A Pull Request (master<-staging) will be also created at PokeAPI/api-data and assigned to the PokeAPI Core team to be reviewed. If approved and merged new data will soon be available worldwide at pokeapi.co.

@pokeapi-machine-user
Copy link

The updater script has finished its job and has now opened a Pull Request towards PokeAPI/api-data with the updated data.

The Pull Request can be seen deployed in our staging environment when CircleCI deploy will be finished (check the start time of the last build).

Naramsim pushed a commit to PokeAPI/api-data that referenced this pull request Feb 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants