A WIP plugin set for PokeBot-Gen3 that adds “Prof Oak” style shiny-hunting with route quotas and an optional Living Dex variant. NOW WITH NAVIGATION --- !!!!!HEAVY WIP. REPORT ALL BUGS!!!!!
- Learns-as-you-go: tracks species you actually encounter per (map, method) using
EncounterInfo. Working on prebuilt JSON usage - PC + Party scan for owned shinies: counts real shinies from storage & party — no screenshots or manual lists.
- Two hunt modes
- Prof Oak: requires one shiny per evolutionary line (any family member satisfies the line).
- Living Prof Oak: requires one shiny per evolution stage (handles branching families like Wurmple).
- On-quota action: switch to Manual now; Navigate is working but HEAVY WIP.
- Fork-friendly & defensive: plays nice with Emerald/FRLG timing and optional imports; won’t crash if something’s missing.
- Copy these files into your bot folder:
- `plugins/
- Start the bot and pick:
- Prof Oak
- Living Prof Oak (will flip the living-dex flag inside
ShinyQuota) **Can CLI launch in one of these modes with -m "Prof Oak" or -m "Living Prof Oak"
The plugin will create
plugins/ProfOak/automatically and store runtime data there.
- Choose a farming method (grass, rod, surf, etc.) and hunt normally.
- The plugin:
- records encountered species for the current map + method
- scans PC + Party to count owned shinies
- When the route quota is met, the plugin performs your On-Quota action (Manual by default).
You’ll see periodic console lines like:
[ShinyQuota] Standard missing (3): PIDGEY×1, RATTATA×1, SPEAROW×1…
All config is inline and easy to tweak near the top of each file.
ON_QUOTA = "manual"
Behavior when quota is met:"manual"→ switch the bot to Manual mode"navigate"→ try to call a navigator atplugins/ProfOak/navigator.py
GROUP_FISHING_WITH_WATER = False
IfTrue, group rod encounters with SURF/WATER; else use a separateRODmethod.LIVING_DEBUG,DEBUG_DUMP
Verbose console output for tuning.- (Optional) catch-block integration is present behind a flag; defaults off.
PLUGIN_DEFAULT_BASES = ["Spin", "Level Grind"]
Which base mode(s) to try to wrap (first found wins).ASK_ON_FIRST_USE = False
IfTrueand running in a TTY, prompt once to pick the base mode and save it.
The Prof Oak modes will ensure
ShinyQuotais registered and keep its living-dex flag in sync with the chosen mode.
- Key =
(map, method)where:mapis the map/area name fromEncounterInfo.map.namemethodis normalized fromEncounterInfo.type(e.g.,GRASS,ROD,SURF,ROCK_SMASH,STATIC,SAFARI)
- Learned species per key are stored at:
plugins/ProfOak/json/emerald_learned_by_mapmode.json
- Owned shinies (PC + Party) snapshot is stored at:
plugins/ProfOak/json/owned_shinies.json
- Prof Oak (Standard): requires 1 shiny per evolutionary family
- Living Prof Oak: requires 1 shiny per evolution stage across the whole family (branching supported)
When quota is met:
- If
ON_QUOTA = "manual"→ switch to Manual mode (safest default) - If
ON_QUOTA = "navigate"→ call a function inplugins/ProfOak/navigator.py:navigate_after_quota(context, current_map, method, learned, owned_counts)ornavigate_to_next_target(context, current_map, method, learned, owned_counts)- If missing or errors, it falls back to Manual.
- Navigator: call into the bot’s overworld pathing to travel to the next route based on progression flags and a route-order JSON.
- Static encounter data (optional): later we may ship prebuilt encounter JSONs (e.g., from pret decomp) to bootstrap learning.
- Versioning / update helper: simple version file + publish script (local script already prototyped).
- Auto catch-block: add completed species automatically to
profiles/catch_block.yml(implemented, but not yet tested). - Story Handler: add a script to read flags/vars to determine if story progress needs to be made
Issues & PRs welcome. Please avoid committing ROMs or extracted copyrighted assets.
MIT