Phase 9: reproducible builds, balance from the server, spark check, play feedback
Build: every tool pinned (JDK, packwiz, Gradle plugins, Python packages), exports normalised, tools/check_reproducible.py proves two clean builds are byte-identical. Server-side balance: a server can load config/cobblesurvival/datapack.zip in place of the jar's data, /reload applies it, tools/server_update.py packages it and refuses when a client change is needed. JEI drop pages are sent by the server. Code-held balance numbers moved to tuning/server.json. Performance: spark in the pack (server only), tools/perf_test.py with fake players whose chunks really are active, docs/performance.md. Adrian's feedback: default keys R, U, J, §; drop pages link to Cobblemon Info and show real chances; bosses only hurt in battles; battle XP halved; channels between the islands low level; temperature ×3 with insulation doubled; hazards start at once; no item dots on the map; a wild attack starts a battle; the starter only faints; quest book on join with a basics page and an HMs page; regional forms obtainable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0741c84077
commit
4083791944
133 files changed
+8350
-3273
No files matched your search
@@ -62,6 +62,7 @@ JEI declares Minecraft `[1.21, 1.21.1)` in every 1.21.1 build, which a strict re
|
||||
| Cobblemon Info for REI / JEI / EMI | 8 | 2.32.14+neoforge (MR `bxd0xXZI`) | MR | ✅ Declares Cobblemon `[1.7.1,)`. **In the pack** (2026-11-03, Adrian), on both sides: it reads the server's live spawn pool (the pack's zone pools); a client on a server without it falls back to Cobblemon's own spawn files. Shows spawns, drops, evolutions; doesn't know the pack's zone rule, so it lists a spawn's biomes, not its zone. Self-test `jei_addon_shows_island_spawns` |
|
||||
| Quests & Teams Fixes (flexible-mode soft-lock fix) | 8 | — | MR | ❌ Only 1.20.1 builds exist. Test the soft-lock on FTB Quests 2101.1.37 ourselves |
|
||||
| Iris Shaders | 9 | 1.8.14-beta.1+1.21.1-neoforge (MR `KduFYu4t`) | MR + CF | n/a (no Cobblemon dependency). **In the pack** (2026-11-09), client only. A beta, and the only NeoForge 1.21.1 build for Sodium 0.8; built against the pack's Sodium 0.8.13 |
|
||||
| spark | 9 | 1.10.124 (MR `v5qtqRQi`, CF file `6225208`) | MR + CF | n/a (no Cobblemon dependency). **In the pack** (2026-11-09), server only: `tools/perf_test.py` and profiling during playtests |
|
||||
| Complementary Reimagined (shader pack) | 9 | r5.9.3 (MR `Bqen1mJX`) | MR + CF | n/a. **In the pack** (2026-11-09), off by default; client only |
|
||||
| spark | 9 | 1.10.124 (MR `v5qtqRQi`, CF `6225208`) | MR + CF | n/a |
|
||||
|
||||
|
||||
+13
-2
@@ -1,6 +1,6 @@
|
||||
# Balance values
|
||||
|
||||
Every tunable lives in a config file or in this table. **Placeholder** means guessed and not yet approved by Adrian; never treat a placeholder as decided.
|
||||
Every tunable lives in a config file or in this table. **Placeholder** means guessed and not yet approved by Adrian; never treat a placeholder as decided. Anything applied in `datapacks/core`, `config/` or a KubeJS server script can be changed on a running server without players updating: see "Balancing on a running server" in the README.
|
||||
|
||||
| Value | Current | Status | Where it is applied | Notes |
|
||||
| --- | --- | --- | --- | --- |
|
||||
@@ -20,7 +20,7 @@ Every tunable lives in a config file or in this table. **Placeholder** means gue
|
||||
| Lines pinned to a zone | Durant, Torkoal, Heatmor → Basalt Furnace; Ditto → Deep Dark, rare bucket in slime chunks and ultra-rare elsewhere (Placeholder; Adrian, 2026-10-31: rare, in an endgame area) | Decided (Adrian, 2026-10-30) | `world/zones.json` → `species` | Basalt's own lines were all too big for its caves. Ditto breeds with anything, so it's an endgame find; Deep Dark target 21 lines, Button Isle 19, so nothing else moved |
|
||||
| Comfortable temperature range | 0.25–1.51 (Cold Sweat units; Cold Sweat: 0.4–1.51) | Decided (Adrian, 2026-10-30) | `config/coldsweat/main.toml` | Keeps the lowlands' nights livable without gear |
|
||||
| Windswept hills temperature | 45–72 °F (Cold Sweat: 24–58 °F) | Decided (Adrian, 2026-10-30) | `config/coldsweat/world.toml` | They lie in the starter lowlands too |
|
||||
| Insulating armour | fur set (cold 10/14/12/10), hide set (heat 10/14/12/10), as Cold Sweat; leather armour none (Cold Sweat: 5/7/6/5 both) | Decided (Adrian, 2026-10-30) | `config/coldsweat/item.toml` | Frostpeak at noon: about 1 min bare, 14 min in fur; Sunscorch at noon: about 2 min bare, 25 min in hide |
|
||||
| Insulating armour | fur set (cold 20/28/24/20), hide set (heat 20/28/24/20), twice Cold Sweat's, to keep the protected time when body temperature went ×3 (2026-11-09); leather armour none (Cold Sweat: 5/7/6/5 both) | Decided (Adrian, 2026-10-30) | `config/coldsweat/item.toml` | Frostpeak at noon: about 1 min bare, 14 min in fur; Sunscorch at noon: about 2 min bare, 25 min in hide |
|
||||
| Sewn-in insulation | goat fur 2 cold, hoglin hide 2 heat, wool 0.5 cold, leather 0.5/0.5 (Cold Sweat: wool 1.5, leather 1/1, rabbit hide 1.5 heat) | Decided (Adrian, 2026-10-30) | `config/coldsweat/item.toml` | |
|
||||
| Goat Fur / Hoglin Hide recipes | 8 wool + 1 Heat Rock → 8 Goat Fur; 8 leather + 1 Icy Rock → 8 Hoglin Hide (a set takes 24) | Decided (Adrian, 2026-10-30) | `kubejs/server_scripts/insulation.js` | Heat and Icy Rocks come from the guardians before Frostpeak and Sunscorch (archaeology finds too) |
|
||||
| Guardian respawn | 5 hours of game time after being beaten | Decided (Adrian, 2026-10-29) | `world/zones.json` → `guardian_respawn_hours` | Fixed spots |
|
||||
@@ -82,3 +82,14 @@ Every tunable lives in a config file or in this table. **Placeholder** means gue
|
||||
| Dev client heap (Prism) | 6 GB | Tooling | `tools/prism_instance.py --memory` | Not a gameplay value |
|
||||
|
||||
Sections to fill as phases land: hazard damage (Phase 3), field-move cooldowns and caps (Phase 5), machine output (Phase 6), boss attack damage and telegraph times (Phase 7).
|
||||
| Boss training | 170 EVs each in HP, Defense, Sp. Def | Placeholder | `tuning/server.json` → `boss_evs` | |
|
||||
| Guardian and End boss wake range, leash | guardians 96 / 24 blocks, End boss 160 / 24 | Placeholder | `tuning/server.json` | |
|
||||
| Summon spacing | one summoned legend per 96 blocks | Placeholder | `tuning/server.json` → `summon_spacing` | |
|
||||
| Wanderer range | 64 blocks | Placeholder | `tuning/server.json` → `wanderer_range` | |
|
||||
| Battle XP | ×1 (Cobblemon: ×2), half of before (Adrian, 2026-11-09) | Placeholder | `config/cobblemon/main.json` → `experienceMultiplier` | |
|
||||
| Body temperature speed | ×3 (Cold Sweat: ×1), so heat and cold bite sooner (Adrian, 2026-11-09) | Placeholder | `config/coldsweat/main.toml` → `Rate Multiplier` | |
|
||||
| Attacked by a wild Pokémon | starts a battle instead of hurting; a player with no Pokémon able to fight is hurt (Adrian, 2026-11-09) | Decided | `catching/AttackBattles.kt`; after fleeing 5 s of grace: `tuning/server.json` → `attack_battle_grace_ticks` | |
|
||||
| Bosses' damage | only from battles; players, fire, falls and drowning do nothing (Adrian, 2026-11-09) | Decided | `boss/BossToughness.kt` | |
|
||||
| Sea levels | channels between the islands are Shallows (Lv 5–20), everything beyond 1,500 blocks from the centre is Deep Sea (Lv 30–50) (Adrian, 2026-11-09) | Decided | `world/zones.json` → `deep_sea.rule.beyond` | Run `tools/zone_layout.py`, `zone_spawns.py`, `zone_bosses.py`, `zone_ores.py` after changing it |
|
||||
| Starter | only faints: never removed, can't be released or sacrificed, a Revival Charm on it isn't used up (Adrian, 2026-11-09) | Decided | `permadeath/Permadeath.kt`, `mixin/HardcorePartyMixin.java` | Cobblemon's own record of each player's starter |
|
||||
| Regional forms | a rare spawn (`homeless`) unless a line or an evolution brings them; Galarian Zapdos, Articuno, Moltres from Sigils, tier 2 (Adrian, 2026-11-09) | Placeholder | `world/zones.json` → `homeless.zones`, `world/summons.json` | Five regional evolutions got an island biome: `data/cobblemon/tags/worldgen/biome/evolution/regional/` |
|
||||
@@ -12,8 +12,27 @@
|
||||
- **Shaders:** Iris and Complementary Reimagined are installed, off by default.
|
||||
- **Left-out Pokémon:** 31 lines (67 species) spawn rarely in fitting zones (`docs/zone-species.md`). Automated: `spawn_pools_are_zoned`, `drop_sources_match_the_server`.
|
||||
|
||||
- **Reproducible build:** `tools/check_reproducible.py` compares two clean builds byte for byte.
|
||||
- **Balance on the server:** `tools/server_update.py` updates a server without touching clients. Automated: `tools/check_server_update.py`, `drop_sources_reach_the_client`.
|
||||
- **Performance:** `docs/performance.md`, from `tools/perf_test.py`.
|
||||
|
||||
- **Adrian's list of 2026-11-09:** shortcuts, drop pages link to Cobblemon Info, real drop chances, bosses only hurt in battles, half the battle XP, low channels, quicker hazards, no item dots on the map, attacks start battles. Automated: `drop_chances_match_cobblemon`, `starter_only_faints`, `regional_forms_are_obtainable`, `new_players_get_the_quest_book`, `bosses_only_take_battle_damage`, `wild_attack_starts_a_battle`, `wild_attack_hurts_without_a_party`, `mire_poisons_without_waders`.
|
||||
|
||||
## In game (Prism instance)
|
||||
|
||||
- [ ] Let your starter faint: it stays, fainted, and a Healing Machine wakes it. Try to release it and sacrifice it: both are refused. Any other Pokémon is still lost.
|
||||
- [ ] A new player spawns with the quest book. Its first page walks through the basics; the second lists every HM.
|
||||
- [ ] Are the regional forms' zones and rarity right? They're in `docs/zone-species.md`.
|
||||
- [ ] R on an item shows recipes, U its uses, J the map, § the quest book (left of 1 on a Swiss keyboard).
|
||||
- [ ] On JEI's Island Drops, click the Pokémon in the corner: Cobblemon Info's pages for it open.
|
||||
- [ ] Hit a guardian with a sword, set it on fire: nothing happens.
|
||||
- [ ] Anger a wild Pokémon: its attack starts a battle, you lose no hearts. With no Pokémon able to fight it hurts you.
|
||||
- [ ] Walk into Sunscorch or Frostpeak: temperature moves about three times as fast. Into the Mire: poison starts within half a second.
|
||||
- [ ] Dropped items show no dot on the minimap.
|
||||
- [ ] The channels between the islands have Lv 5–20 Pokémon, the open sea around the island Lv 30–50.
|
||||
|
||||
- [ ] Join a dedicated server with this pack: JEI's Island Drops, Boss Rewards and the rest are filled in. Change a drop, run `tools/server_update.py --install`, `/reload`: the page changes without relogging. (The client side of this can't be tested without a game window.)
|
||||
|
||||
- [ ] In the new save, mine into an ore node or vein: the mined blocks turn into faint glass, and you can keep aiming and mining the ore behind them. Sneak and use one: its info still shows.
|
||||
- [ ] Do nodes and veins feel right: fewer, bigger? The island has 1.5–3× the old ore; tell me if that's too much.
|
||||
- [ ] Give yourself a Sigil from JEI (creative) and use it outside its zone: it refuses and says where it works. Use it in its zone: the legend appears with a sound and particles. Fight it: area attacks, at most a quarter of its HP per attack. Weaken it and catch it; afterwards it's an ordinary Pokémon in your party (no quarter-HP limit in later battles).
|
||||
|
||||
+16
-4
@@ -81,8 +81,8 @@ A zone decides **which Pokémon spawn** and **at what levels**: Cobblemon's own
|
||||
| Highland Meadows | north-east around the peaks (20 %) | plains, forest, cherry grove | 25–35 | none | leather (Ponyta) for heat insulation, Hard Stone (Larvitar) | Rapidash, Lv 40 |
|
||||
| Sunscorch | the desert and badlands pockets: north of the ring channel, the north-east and north-west coasts (3.4 %) | desert, badlands | 30–45 | **heat** (Cold Sweat): heat insulation, Fire Resistance potions | armadillo scutes (Sandshrew), Soft Sand, magma cream (Numel) | Hippowdon, Lv 50 |
|
||||
| Frostpeak Range | the jagged peaks plus the windswept hills and cherry groves right next to them (6 %) | jagged peaks | 40–55 | **cold** (Cold Sweat): wool insulation; warming food and potions | Never-Melt Ice (Snover), Razor Claw (Sneasel) | Abomasnow, Lv 60 |
|
||||
| Shallows | coast and beaches | ocean, lukewarm and warm ocean, beach | 5–20 | none | fish, kelp | none |
|
||||
| Deep Sea | ring and band channels, outer sea | deep ocean | 30–50 | none | Heart Scale-type rarities | Lapras or Wailord, Lv 55 |
|
||||
| Shallows | coast, beaches and the channels between the islands | ocean within 1,500 blocks, beach | 5–20 | none | fish, kelp | none |
|
||||
| Deep Sea | the sea surrounding the island (Adrian, 2026-11-09: the ring and band channels moved to the Shallows) | ocean beyond 1,500 blocks | 30–50 | none | Heart Scale-type rarities | Lapras or Wailord, Lv 55 |
|
||||
| Lush Caves | under the whole island | lush caves | 12–28 | none | glow berries, mushrooms (Paras) | none |
|
||||
| Dripstone Depths | under the whole island | dripstone caves | 22–38 | none | Dragon Fang (Bagon, Gible) | none |
|
||||
| Deep Dark | under the cold and temperate land, deep (since 2026-10-30) | deep dark | 45–60 | darkness (vanilla sculk; no Warden) | | Sableye or Spiritomb, Lv 62 |
|
||||
@@ -306,7 +306,7 @@ Adrian's choices: Cobblemon tasks come from **Cobblemon Quests Reloaded** (a mai
|
||||
|
||||
**The quest book** is written in `docs/quests.yaml` and generated by `tools/quests.py` (run by `tools/build.py`) into `pack/config/ftbquests/quests/` in FTB Quests 2101's format (`data.snbt`, `chapter_groups.snbt`, `chapters/*.snbt`, every title and text in `lang/en_us.snbt`). Chapter, quest and task ids are derived from their names in the YAML, so they stay the same across regenerations and players keep their progress. The whole book is in flexible progression with lock icons off: dependencies show as lines but never block. No rewards.
|
||||
|
||||
- **Chapters** (18, 74 quests on 2026-11-03): Getting Started (welcome, first catch, Poké Balls, a full team, the Revival Charm and permadeath, healing, level 10, drops and JEI, evolution, on to Southwold); one per zone and the End; Pokémon Machines (how to build one, then each of the five); Base and Jobs (Pasture Block, PC). A zone chapter (`zone: <id>`) starts with the template quests `zone_chapter`, filled from the zone's data: reach it (levels, hazard), catch three of its Pokémon (any species of its spawn pool), mine its ores (one item task per vein), beat its guardian (species, level, drops, the boss bar). Chapters add their own quests (Mire Waders for the Mire; Eyes of Ender and Eternatus for the End).
|
||||
- **Chapters** (20 with the HMs page of 2026-11-09, listing all 39 field moves): Getting Started (welcome, keys, the starter, battling, first catch, Poké Balls, a full team, the Revival Charm and permadeath, healing, level 10, drops and JEI, evolution, on to Southwold); one per zone and the End; Pokémon Machines (how to build one, then each of the five); Base and Jobs (Pasture Block, PC). A zone chapter (`zone: <id>`) starts with the template quests `zone_chapter`, filled from the zone's data: reach it (levels, hazard), catch three of its Pokémon (any species of its spawn pool), mine its ores (one item task per vein), beat its guardian (species, level, drops, the boss bar). Chapters add their own quests (Mire Waders for the Mire; Eyes of Ender and Eternatus for the End).
|
||||
- **Tasks:** Cobblemon actions through Quests Reloaded (catch, defeat, evolve, level up), items, and the pack's own events: hidden advancements `cobblesurvival:events/zone/<zone>`, `guardian/<zone>`, `machine/<core>` and `end_boss` (no display, no toast; written by `tools/quests.py`), granted by the companion mod (`QuestEvents`: a player's zone once a second, a guardian's battle winners, a machine's owner when a Pokémon goes in, the End boss's winners). They unlock nothing.
|
||||
- **Node positions:** Adrian moves nodes in the in-game editor; `tools/quests.py --pull <folder>` records every node that isn't where the generator would put it in the `layout` block at the end of `docs/quests.yaml`. `tools/prism_instance.py` does that from the instance before each sync, and rebuilds if something moved, so a sync never undoes his layout (docs/quests.yaml then needs committing). Titles, texts, tasks and dependencies edited in game are overwritten.
|
||||
- **Self-tests:** `quest_book_loads` (FTB Quests on the server has the book in flexible mode, every task type is known, every item and advancement exists), `quest_events_mark_zones`, and the guardian and furnace tests check their events.
|
||||
@@ -320,7 +320,7 @@ Adrian's choices: Cobblemon tasks come from **Cobblemon Quests Reloaded** (a mai
|
||||
|
||||
The pages sit next to Cobblemon Info's own, and Adrian likes having both, so they share its look (2026-11-09): the same dark panel with a thin border, a header with icon, white title, warm tag on the right and a divider, the same text colours and spacing. Long text wraps. JEI gives all pages of a category the height of the tallest.
|
||||
|
||||
JEI runs on the client, which on a dedicated server doesn't have the server's data, so the pages are built from `assets/cobblesurvival/jei/drop_sources.json` inside the mod, written by `tools/jei_sources.py` from the pack's own files (Cobblemon's species drops with the pack's species additions, the zone spawn pools, guardians, the End boss, the machines, `world/zones.json` ores, Cobblebase's zone tables). Which ore a vein gives now lives in `world/zones.json` → `ores` → `item` (the quest book reads it too). Self-tests: `drop_sources_match_the_server` compares the file with the live server (every listed Pokémon's drops and zones, spawns with own drops, guardians, the End boss, altar tiers) and fails when it's stale; `jei_pages_build` builds every page with the same code JEI calls and checks every item exists.
|
||||
JEI runs on the client, which on a dedicated server doesn't have the server's data, so the server sends the pages' data to each player on joining and after `/reload`: `data/cobblesurvival/drop_sources/pages.json`, written by `tools/jei_sources.py` from the pack's own files (Cobblemon's species drops with the pack's species additions, the zone spawn pools, guardians, the End boss, the machines, `world/zones.json` ores, Cobblebase's zone tables). Which ore a vein gives now lives in `world/zones.json` → `ores` → `item` (the quest book reads it too). Self-tests: `drop_sources_match_the_server` compares the file with the live server (every listed Pokémon's drops and zones, spawns with own drops, guardians, the End boss, altar tiers) and fails when it's stale; `jei_pages_build` builds every page with the same code JEI calls and checks every item exists.
|
||||
|
||||
## Phase 9: balancing and release (Adrian, 2026-11-09)
|
||||
|
||||
@@ -341,6 +341,18 @@ Self-tests: `every_implemented_pokemon_is_obtainable` (every implemented species
|
||||
|
||||
**The respawn block** (Regenerating Ore Veins' regenerator, the placeholder where a mined vein block grows back) no longer stops the player's aim, so the ore behind it can be mined; it never had collision. While sneaking the player can still target it, which is how its info opens. A mixin returns an empty outline shape (`RegeneratorBlockMixin.java`, the mod's only one, targeting the class by name). Its model and glass come from `pack/kubejs/assets/regenerating_ore_veins/`, much fainter than the stained glass it had. Self-test `regenerator_lets_the_aim_through` casts a real ray at it.
|
||||
|
||||
### Drop chances on the JEI pages (Adrian, 2026-11-09)
|
||||
|
||||
The pages first showed each table's raw percentage, which isn't what a player gets. Cobblemon's `DropTable.getDrops` makes `amount` picks; in each it walks the table in order and takes the first entry that passes its percentage, so later entries are rarer than written. A count of 0 gives nothing. `tools/jei_sources.py` now works out the real chance of getting at least one, and the self-test `drop_chances_match_cobblemon` rolls Cobblemon's own code 4,000 times for every Pokémon and compares. The Pokémon in a page's corner is Cobblemon Info's own JEI ingredient, so clicking it opens that mod's pages.
|
||||
|
||||
### Balancing without a client update (Adrian, 2026-11-09)
|
||||
|
||||
Playtesters shouldn't have to reinstall for a number change. The server is the authority for everything that isn't drawn: Cobblemon, recipes, quests and Cold Sweat send clients what they need, and the pack's data pack now does too. A server can hold `config/cobblesurvival/datapack.zip`, which the companion mod loads in place of the copy in its jar, under the same pack id, so a world keeps it enabled. One file, so nothing left over from an older version; `/reload` applies it.
|
||||
|
||||
The JEI pages were the one thing clients took from the jar. Their data moved into the data pack; the server gzips it and sends it on joining and on `/reload` (`DropSources`). JEI can start before or after that packet, so the plugin both builds from what has arrived and swaps pages in the running JEI (`hideRecipes` and `addRecipes`). Numbers that only lived in Kotlin moved to `data/cobblesurvival/tuning/server.json` (`Tuning`).
|
||||
|
||||
`tools/server_update.py` packages this. It hashes what clients run or draw against `tools/client-baseline.json`, the last pack handed out, and refuses when they differ, rather than letting players find out from a crash or a missing texture.
|
||||
|
||||
## Open decisions for Adrian (proceeding with the default, flagged)
|
||||
|
||||
| Decision | Default used for now |
|
||||
|
||||
@@ -46,6 +46,7 @@ Read each license before adding a mod, and add a row here in the same change.
|
||||
| Cobbreeding | Ludichat, Fuzuki | "MIT, no AI, no reupload" ([text](https://fuzuki.dev/~fuzuki/mit-no-ai-no-reupload.txt)): MIT terms, but the mod may not be used to train or improve machine-learning models, and may not be reuploaded unchanged to CurseForge or Modrinth except bundled in a modpack | [Modrinth](https://modrinth.com/mod/cobbreeding), [source](https://gitlab.com/ludichat/Cobbreeding) | Phase 5: breeding (both). Referenced only, never copied. Not on CurseForge by the authors' choice |
|
||||
| Cloth Config API | shedaniel | LGPL-3.0-only | [Modrinth](https://modrinth.com/mod/cloth-config) | Cobbreeding dependency (client) |
|
||||
| Iris Shaders | IrisShaders (coderbot, IMS and contributors) | LGPL-3.0-only | [Modrinth](https://modrinth.com/mod/iris) | Phase 9: runs shader packs (client) |
|
||||
| spark | lucko and contributors | GPL-3.0-only | [Modrinth](https://modrinth.com/mod/spark) | Phase 9: server profiler for playtests (server only) |
|
||||
| Complementary Shaders - Reimagined | EminGT (Complementary Development) | [Complementary License Agreement](https://github.com/ComplementaryDevelopment/ComplementaryReimagined/blob/main/License.txt) | [Modrinth](https://modrinth.com/shader/complementary-reimagined) | Phase 9: the included shader pack, off by default (client). Allowed in modpacks unmodified and only through Modrinth's or CurseForge's own systems, never as an uploaded file |
|
||||
| Cobblemon Quests Reloaded | WinterWolfSV (original); community fork | CC-BY-NC-4.0 (jar metadata; the CurseForge page says "custom", the fork keeps the original's non-commercial license) | [CurseForge](https://www.curseforge.com/minecraft/mc-mods/cobblemon-quest-reloaded) | Phase 8: Cobblemon task types for FTB Quests (both). Not on Modrinth. Non-commercial: fine for this free pack |
|
||||
| Cobblemon Info for REI / JEI / EMI | Akkiruk | MIT | [Modrinth](https://modrinth.com/project/qekxLrOP) | Phase 8: spawns, drops and evolutions in JEI (both) |
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
# Performance
|
||||
|
||||
Generated by `tools/perf_test.py`: the island world template, a 6G heap, 120 s to settle, then 180 s measured tick by tick with spark profiling the server thread.
|
||||
Players are the self-tests' fake clients: the server ticks them, loads their chunks and spawns Pokémon around them. One walks a long ring round the island when there are several. They send and encode no packets and fight no battles, so read this as the cost of the world, not of the network.
|
||||
|
||||
A tick has 50 ms; over that, the server falls behind.
|
||||
|
||||
| Scenario | Players | Pastures × Pokémon each | Machines each | Mean tick | p95 | p99 | Worst | Ticks over 50 ms | Pokémon pastured / wild | Working machines | Loaded chunks |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| solo | 1 | 0 × 0 | 0 | 4.6 ms | 6.4 ms | 9.8 ms | 216 ms | 1 of 3900 | 0 / 18 | 0 of 0 | 2731 |
|
||||
| group | 5 | 4 × 8 | 5 | 19.2 ms | 25.7 ms | 33.3 ms | 269 ms | 2 of 3900 | 113 / 175 | 16 of 25 | 8704 |
|
||||
| stress | 8 | 6 × 16 | 10 | 38.3 ms | 50.4 ms | 54.9 ms | 322 ms | 215 of 3900 | 558 / 246 | 46 of 80 | 10763 |
|
||||
|
||||
## Where the server thread's busy time goes: solo
|
||||
|
||||
| Part | Share |
|
||||
| --- | --- |
|
||||
| Minecraft | 46.2 % |
|
||||
| Other mods | 39.0 % |
|
||||
| JVM and Kotlin | 11.4 % |
|
||||
| Cobblemon | 3.1 % |
|
||||
| Companion mod | 0.3 % |
|
||||
|
||||
Companion mod, heaviest methods including what they call:
|
||||
|
||||
- `dev.cobblesurvival.selftest.PerfLoad$$Lambda.0x000000080138d638.accept`: 2.02 %
|
||||
- `dev.cobblesurvival.selftest.PerfLoad.register$onTickDone`: 2.00 %
|
||||
- `dev.cobblesurvival.selftest.PerfLoad.onTickDone`: 2.00 %
|
||||
- `dev.cobblesurvival.progress.HmsGate$$Lambda.0x0000000801380c60.accept`: 0.12 %
|
||||
- `dev.cobblesurvival.progress.HmsGate.register$onServerTick`: 0.10 %
|
||||
- `dev.cobblesurvival.progress.HmsGate.onServerTick`: 0.10 %
|
||||
- `dev.cobblesurvival.progress.HmsGate.check`: 0.07 %
|
||||
- `dev.cobblesurvival.progress.QuestEvents$$Lambda.0x000000080137b338.accept`: 0.07 %
|
||||
|
||||
## Where the server thread's busy time goes: group
|
||||
|
||||
| Part | Share |
|
||||
| --- | --- |
|
||||
| Minecraft | 61.4 % |
|
||||
| Other mods | 20.6 % |
|
||||
| JVM and Kotlin | 13.2 % |
|
||||
| Cobblemon | 4.5 % |
|
||||
| Companion mod | 0.2 % |
|
||||
|
||||
Companion mod, heaviest methods including what they call:
|
||||
|
||||
- `dev.cobblesurvival.selftest.PerfLoad$$Lambda.0x0000000801394200.accept`: 1.34 %
|
||||
- `dev.cobblesurvival.selftest.PerfLoad.register$onTickDone`: 1.32 %
|
||||
- `dev.cobblesurvival.selftest.PerfLoad.onTickDone`: 1.32 %
|
||||
- `dev.cobblesurvival.selftest.PerfLoad.walk`: 0.24 %
|
||||
- `dev.cobblesurvival.machine.MachineBlock$$Lambda.0x00000008022acee8.tick`: 0.13 %
|
||||
- `dev.cobblesurvival.machine.MachineBlock.getTicker$lambda$1`: 0.13 %
|
||||
- `dev.cobblesurvival.machine.MachineBlockEntity.serverTick`: 0.13 %
|
||||
- `dev.cobblesurvival.progress.CobblebaseGate$Gate.invoke`: 0.08 %
|
||||
|
||||
## Where the server thread's busy time goes: stress
|
||||
|
||||
| Part | Share |
|
||||
| --- | --- |
|
||||
| Minecraft | 58.4 % |
|
||||
| Other mods | 18.9 % |
|
||||
| JVM and Kotlin | 17.0 % |
|
||||
| Cobblemon | 5.5 % |
|
||||
| Companion mod | 0.2 % |
|
||||
|
||||
Companion mod, heaviest methods including what they call:
|
||||
|
||||
- `dev.cobblesurvival.selftest.PerfLoad$$Lambda.0x0000000801386618.accept`: 1.02 %
|
||||
- `dev.cobblesurvival.selftest.PerfLoad.register$onTickDone`: 1.02 %
|
||||
- `dev.cobblesurvival.selftest.PerfLoad.onTickDone`: 1.02 %
|
||||
- `dev.cobblesurvival.machine.MachineBlock$$Lambda.0x00000008022c2988.tick`: 0.31 %
|
||||
- `dev.cobblesurvival.machine.MachineBlock.getTicker$lambda$1`: 0.30 %
|
||||
- `dev.cobblesurvival.machine.MachineBlockEntity.serverTick`: 0.30 %
|
||||
- `dev.cobblesurvival.selftest.PerfLoad.walk`: 0.27 %
|
||||
- `dev.cobblesurvival.machine.MachineWork.tick`: 0.15 %
|
||||
+222
-7
@@ -83,16 +83,50 @@ chapters:
|
||||
This island has no zombies, no creepers and no cows: only Pokémon. Their drops are your food, string, leather and much more.
|
||||
The island is split into zones, each with its own Pokémon, levels, ores and a guardian. You start on Button Isle; the further out you go, the stronger everything gets.
|
||||
|
||||
This book suggests what to do next. Nothing in it is locked and it gives no rewards: do things in any order you like.
|
||||
This book suggests what to do next. Nothing in it is locked and it gives no rewards: do things in any order you like. This first page walks through how the island works; the next one lists every field move your Pokémon can lend you.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Read this
|
||||
- id: first_partner
|
||||
title: A Partner
|
||||
- id: keys
|
||||
title: Keys Worth Knowing
|
||||
icon: minecraft:tripwire_hook
|
||||
after: [welcome]
|
||||
text: |
|
||||
§ (left of 1) opens this book. J opens the map.
|
||||
R sends out the Pokémon selected on the left of your screen, or calls it back. Up and down arrows pick another. N opens its summary.
|
||||
Over an item in your inventory or JEI, R shows how to get it and U what it's used for.
|
||||
V shows more detail on what you're looking at. M switches shaders on and off. Everything can be changed in Options > Controls.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Got it
|
||||
- id: starter
|
||||
title: Your First Partner
|
||||
icon: cobblemon:poke_ball
|
||||
after: [welcome]
|
||||
text: |
|
||||
Weaken a wild Pokémon in battle, then throw a Poké Ball at it.
|
||||
When you first arrive you choose a starter. Look after it: it is the only Pokémon on the island that can never be lost.
|
||||
When it faints it stays with you, fainted, until you heal it. It can't be released or sacrificed.
|
||||
Every other Pokémon is gone for good when it faints.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Read this
|
||||
- id: battling
|
||||
title: Battling
|
||||
icon: minecraft:iron_sword
|
||||
after: [starter]
|
||||
text: |
|
||||
Look at a wild Pokémon and press R: your Pokémon goes out and the battle starts.
|
||||
Wild Pokémon can also come to you. One that attacks you starts a battle instead of hurting you, unless none of your Pokémon can fight: then you take the hit yourself.
|
||||
Pokémon stronger than your team hunt you; weaker ones keep their distance. In a battle you can run, and you get a few seconds' head start.
|
||||
tasks:
|
||||
- cobblemon: defeat
|
||||
amount: 1
|
||||
- id: first_partner
|
||||
title: Your First Catch
|
||||
icon: cobblemon:poke_ball
|
||||
after: [battling]
|
||||
text: |
|
||||
Weaken a wild Pokémon in battle, then throw a Poké Ball at it. The weaker it is, the easier it is to catch, and a Pokémon far above your team's level is much harder.
|
||||
tasks:
|
||||
- cobblemon: catch
|
||||
amount: 1
|
||||
@@ -105,6 +139,15 @@ chapters:
|
||||
tasks:
|
||||
- item: cobblemon:poke_ball
|
||||
count: 16
|
||||
- id: pc_pasture
|
||||
title: PC and Pastures
|
||||
icon: cobblemon:pasture
|
||||
after: [first_partner]
|
||||
text: |
|
||||
A PC holds the Pokémon that don't fit in your party. A Pasture Block lets them out to roam around your base.
|
||||
Pastured Pokémon also work: open the pasture and give them a skill, such as mining or gathering, and they bring in items. What they can find depends on the zone the pasture stands in, and JEI's Pasture Finds pages list it.
|
||||
tasks:
|
||||
- item: cobblemon:pasture
|
||||
- id: full_team
|
||||
title: A Full Team
|
||||
icon: cobblemon:great_ball
|
||||
@@ -119,8 +162,8 @@ chapters:
|
||||
icon: cobblesurvival:revival_charm
|
||||
after: [first_partner]
|
||||
text: |
|
||||
A Pokémon that faints is gone for good once the battle ends. Revives only help within that battle.
|
||||
A Pokémon holding a Revival Charm is saved once instead: the charm is used up and the Pokémon is healed. Give one to your most valuable partner.
|
||||
Apart from your starter, a Pokémon that faints is gone for good once the battle ends. Revives only help within that battle.
|
||||
A Pokémon holding a Revival Charm is saved once instead: the charm is used up and the Pokémon is healed. Give one to your most valuable partner. Your starter doesn't need one.
|
||||
tasks:
|
||||
- item: cobblesurvival:revival_charm
|
||||
- id: healing
|
||||
@@ -128,7 +171,7 @@ chapters:
|
||||
icon: cobblemon:healing_machine
|
||||
after: [first_partner]
|
||||
text: |
|
||||
Sleeping doesn't heal your Pokémon. A Healing Machine does, but it is expensive and recharges slowly; potions and berries help in between.
|
||||
Sleeping doesn't heal your Pokémon. A Healing Machine does, and it also wakes a fainted starter, but it is expensive and recharges slowly; potions and berries help in between.
|
||||
tasks:
|
||||
- item: cobblemon:healing_machine
|
||||
- id: level_10
|
||||
@@ -158,6 +201,46 @@ chapters:
|
||||
tasks:
|
||||
- cobblemon: evolve
|
||||
amount: 1
|
||||
- id: zones
|
||||
title: Zones and Guardians
|
||||
icon: minecraft:filled_map
|
||||
after: [level_10]
|
||||
text: |
|
||||
Each zone has its own Pokémon and level range; the book has a page for each. The channels between the islands are gentle, the open sea around them is not.
|
||||
Most zones have a guardian: a giant Pokémon with a health bar at the top of your screen when you are near. Only a battle can hurt it, and it can lose at most a quarter of its health to one attack. Beat it for its rewards; it comes back hours later.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Read this
|
||||
- id: hazards
|
||||
title: Heat, Cold and Poison
|
||||
icon: minecraft:leather_chestplate
|
||||
after: [zones]
|
||||
text: |
|
||||
Some zones hurt to be in. Sunscorch is hot and Frostpeak is cold: your body temperature climbs or falls quickly there, so wear hide against heat and fur against cold.
|
||||
The Mangrove Mire poisons you unless you wear Mire Waders. Look these up in JEI with R.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Read this
|
||||
- id: ores
|
||||
title: Ore Comes from Veins
|
||||
icon: minecraft:raw_iron
|
||||
after: [zones]
|
||||
text: |
|
||||
There is no ore in ordinary stone. Each zone has its own nodes and underground veins, which grow back after you mine them. JEI's Ore Veins pages show what grows where.
|
||||
A Pokémon that knows Rock Smash can mine a whole vein with one punch: see the HMs page of this book.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Read this
|
||||
- id: machines
|
||||
title: Pokémon at Work
|
||||
icon: cobblesurvival:heat_core
|
||||
after: [zones]
|
||||
text: |
|
||||
Machines are small buildings with a Pokémon inside: a Large Furnace, a Generator, a Drop Synthesizer, a Sacrifice Altar and a Rebirth Chamber. Craft a core, use it, and ghost blocks show how to build around it.
|
||||
JEI lists each core's recipe, and each machine's own page says what it makes.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Read this
|
||||
- id: beyond
|
||||
title: Beyond Button Isle
|
||||
icon: minecraft:compass
|
||||
@@ -168,6 +251,127 @@ chapters:
|
||||
- event: zone/southwold
|
||||
title: Reach Southwold
|
||||
|
||||
- id: hms
|
||||
title: HMs
|
||||
subtitle: Every field move your Pokémon can lend you
|
||||
icon: minecraft:iron_pickaxe
|
||||
quests:
|
||||
- id: how
|
||||
title: How HMs Work
|
||||
icon: minecraft:iron_pickaxe
|
||||
size: 1.5
|
||||
text: |
|
||||
Any Pokémon of yours that has learned one of these moves can use it for you outside battle. There is nothing to craft or learn yourself.
|
||||
Send the Pokémon out, sneak and right-click it, and pick Field moves. It lists what that Pokémon can do; hover over one to read about it. The top left of your screen shows what is active.
|
||||
|
||||
Partner HMs go to your empty hand: one per Pokémon, fired with a click.
|
||||
Auras and weather work on you while the Pokémon is out and within 24 blocks.
|
||||
Mount toggles help the Pokémon itself while you ride it.
|
||||
|
||||
Working makes a Pokémon hungry. Right-click it with any berry to feed it. If it works on an empty stomach it loses friendship, and at none it refuses.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Read this
|
||||
- id: gathering
|
||||
title: Gathering and Building
|
||||
icon: minecraft:iron_axe
|
||||
after: [how]
|
||||
text: |
|
||||
Cut: fells a whole tree, or clears the plants in front of you.
|
||||
Rock Smash: breaks a stone block, or mines up to 32 connected ore in one punch, and veins still grow back.
|
||||
Dig: takes dirt, sand, gravel, clay and snow in one hit.
|
||||
Leafage: grows nearby crops, saplings and berry trees at once, and covers bare ground in flowers. Sneak to till soil instead.
|
||||
Stockpile: drinks water or lava, then spits it back out where you aim.
|
||||
Strength: pushes the block you aim at one block, in any direction, along with anything inside it.
|
||||
Tail Whip: sweeps suspicious sand or gravel clean in one go.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Read this
|
||||
- id: handy
|
||||
title: Handy Tricks
|
||||
icon: minecraft:ender_pearl
|
||||
after: [how]
|
||||
text: |
|
||||
Teleport: blinks you up to 30 blocks to where you look (30 seconds to recharge).
|
||||
Charge: turns a block into a lasting redstone power source. Use it again to switch it off.
|
||||
Camouflage: makes you look like the creature you aim at for 15 minutes.
|
||||
Celebrate: fireworks over your head, for no reason at all.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Read this
|
||||
- id: changing
|
||||
title: Changing a Pokémon
|
||||
icon: minecraft:nether_star
|
||||
after: [how]
|
||||
text: |
|
||||
Growth: makes the Pokémon you aim at one size bigger for good; aim elsewhere and you grow for 5 minutes.
|
||||
Minimize: the same, but smaller.
|
||||
Outrage: turns an XL Pokémon of yours into an Alpha.
|
||||
Calm Mind: settles an Alpha of yours back into an ordinary Pokémon.
|
||||
Decorate: one roll at making the Pokémon you aim at shiny for good, once an hour.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Read this
|
||||
- id: exploring
|
||||
title: Exploring Auras
|
||||
icon: minecraft:spyglass
|
||||
after: [how]
|
||||
text: |
|
||||
Flash: lets you see in the dark. Needs the Dripstone gate.
|
||||
Dive: breathe, walk and mine at full speed underwater. Needs the Mire gate.
|
||||
Rock Climb: walls work like ladders, on foot or riding. Needs the Highlands gate.
|
||||
Magnet Rise: slow flight for building. Double-tap jump to lift off. Needs the Sunscorch gate.
|
||||
Lava Plume: the same as Dive, for lava, with fire immunity. Needs the Deep Dark gate.
|
||||
Jump: jump higher and land safely. Comes from Splash.
|
||||
Shadow Sneak: walk silently, unseen by pressure plates and sculk, at a reduced speed.
|
||||
Snowscape: snow under your feet, and still water freezes as you walk across it.
|
||||
|
||||
A gate means the Pokémon must have reached the top level of that zone, or hold one of its materials: its ore, evolution stone or guardian's drop.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Read this
|
||||
- id: helping
|
||||
title: Helping Auras
|
||||
icon: minecraft:honey_bottle
|
||||
after: [how]
|
||||
text: |
|
||||
Absorb: loose items drift toward you.
|
||||
Lucky Chant: more from what you break and fish. Needs the Frostpeak gate.
|
||||
Sweet Scent: draws a wild Pokémon of the area about once a minute, like a Poké Snack. What the Pokémon holds works as seasoning.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Read this
|
||||
- id: weather
|
||||
title: Weather
|
||||
icon: minecraft:snowball
|
||||
after: [how]
|
||||
text: |
|
||||
Only one weather runs at a time: the last one switched on wins.
|
||||
Rain Dance: real rain around you, anywhere; it puts out fires and counts for rain evolutions and spawns.
|
||||
Thunder: a thunderstorm around you.
|
||||
Sunny Day: keeps the sky clear.
|
||||
Blizzard: real snow falls and settles around you.
|
||||
Sandstorm: soul sand and honey don't slow you, and sand, gravel and clay break four times as fast.
|
||||
Mist: anything hunting you loses you once you're 8 blocks away. Needs the Mire gate.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Read this
|
||||
- id: mounts
|
||||
title: Mount Toggles
|
||||
icon: minecraft:saddle
|
||||
after: [how]
|
||||
text: |
|
||||
Switch these on from the Field moves of the Pokémon you ride. They stay on for that Pokémon.
|
||||
Surf: much faster through water.
|
||||
Tailwind: faster through the air.
|
||||
Agility: faster on land.
|
||||
Swift: reaches top speed twice as quickly.
|
||||
U-turn: turns far more sharply.
|
||||
Endure: double the stamina.
|
||||
tasks:
|
||||
- checkmark: true
|
||||
title: Read this
|
||||
|
||||
- id: button_isle
|
||||
zone: button_isle
|
||||
title: Button Isle
|
||||
@@ -359,3 +563,14 @@ chapters:
|
||||
Your PC holds every Pokémon not in your party. There is no remote access: you have to stand at a PC block.
|
||||
tasks:
|
||||
- item: cobblemon:pc
|
||||
|
||||
layout:
|
||||
getting_started/beyond: [6.0, 0.75]
|
||||
getting_started/drops: [4.0, 3.0]
|
||||
getting_started/evolve: [6.0, -0.75]
|
||||
getting_started/first_partner: [2.0, -0.75]
|
||||
getting_started/full_team: [4.0, -3.0]
|
||||
getting_started/healing: [4.0, 0.0]
|
||||
getting_started/level_10: [4.0, 1.5]
|
||||
getting_started/permadeath: [4.0, -1.5]
|
||||
getting_started/poke_balls: [2.0, 0.75]
|
||||
@@ -193,6 +193,8 @@ Goal: a quest book that points players onward, laid out like a research tree who
|
||||
- **Every implemented Pokémon is obtainable** (Adrian, 2026-11-09). Every species Cobblemon has a model for must be reachable somewhere in the world, even if rarely or through crafting: a wild spawn, evolving a wild line, a fossil, or a crafted or summoned encounter. Legendaries and the like count too; they can be very rare or expensive. Checked on 2026-11-09: 95 of 905 implemented species are not reachable by a wild spawn or by evolving a wild line (legendaries, fossils, and lines the zone assignment left out, such as Aron, Litwick and Piplup). Report what is missing with a tool or self-test so new Cobblemon versions can't reopen the gap.
|
||||
- **A shader pack included** (Adrian, 2026-11-09). Ship [Iris](https://modrinth.com/mod/iris) (client only) and [Complementary Reimagined](https://modrinth.com/shader/complementary-reimagined), installed but off by default; players switch it on with a key or in Video Settings. Iris 1.8.14-beta.1+1.21.1-neoforge (MR `KduFYu4t`) is built against Sodium 0.8.13, which the pack already pins; it is the only NeoForge 1.21.1 build for Sodium 0.8, and a beta. Complementary r5.9.3 (MR `Bqen1mJX`) has the most downloads of the common shader packs and keeps a vanilla-like look, which suits Cobblemon's models. Its license allows modpacks if it is left unmodified, credited where the pack is described when it's on by default (it isn't; it's credited anyway), and added through Modrinth or CurseForge's own systems, never as an uploaded file: the private pack has to download it from Modrinth. Check that Cobblemon's models, the machine and boss particles and the see-through blocks render properly with it on, and measure the frame-rate cost.
|
||||
- **Performance.** Profile with spark on a server with realistic pen and machine counts; cap entity density through pasture config if needed.
|
||||
- **Reproducible builds** (Adrian, 2026-11-09). The same commit gives the same bytes: pinned JDK, packwiz, Gradle plugins and Python packages; `tools/check_reproducible.py` proves it.
|
||||
- **Balancing on the server** (Adrian, 2026-11-09). Balance changes reach playtesters without a client update: `tools/server_update.py`, a server-held data pack, JEI pages sent by the server.
|
||||
- **Multiplayer test** with Adrian's group.
|
||||
- **Release.** Final `docs/licenses.md`, credits and non-affiliation disclaimer; publish client and server packs on Modrinth and CurseForge as dependency-based packs.
|
||||
|
||||
|
||||
+20
-20
@@ -2,45 +2,45 @@
|
||||
|
||||
Generated by `tools/zone_spawns.py` from Cobblemon's spawn data and `world/zones.json`; do not edit by hand. Each evolution line spawns in one zone of the island; the stages listed are the ones whose levels reach the zone's band. Pin a line to another zone in `world/zones.json` → `species`. The End's lines spawn there as well as in their island zone.
|
||||
|
||||
## Button Isle (Lv 2–10, 25 lines)
|
||||
## Button Isle (Lv 2–10, 24 lines)
|
||||
|
||||
Bidoof, Bonsly, Caterpie (Butterfree, Caterpie, Metapod), Combee, Gimmighoul, Hoothoot, Kricketot (Kricketot, Kricketune), Ledyba, Meditite, Meowth, Morpeko, Nincada, Pachirisu, Rattata, Sableye, Scatterbug (Scatterbug, Spewpa), Skitty, Smeargle, Spinarak, Sunkern, Tarountula, Weedle (Beedrill, Kakuna, Weedle), Wooper, Wurmple (Beautifly, Cascoon, Dustox, Silcoon, Wurmple), Wynaut
|
||||
Bidoof, Bonsly, Caterpie (Butterfree, Caterpie, Metapod), Combee, Gimmighoul, Hoothoot, Kricketot (Kricketot, Kricketune), Ledyba, Meditite, Morpeko, Nincada, Pachirisu, Rattata, Sableye, Scatterbug (Scatterbug, Spewpa), Skitty, Smeargle, Spinarak, Sunkern, Tarountula, Weedle (Beedrill, Kakuna, Weedle), Wooper, Wurmple (Beautifly, Cascoon, Dustox, Silcoon, Wurmple), Wynaut
|
||||
|
||||
## Frostpeak Range (Lv 40–55, 49 lines)
|
||||
## Frostpeak Range (Lv 40–55, 53 lines)
|
||||
|
||||
Axew (Fraxure, Haxorus), Basculin (Basculegion, Basculin), Bergmite (Avalugg), Budew (Roselia, Roserade), Cetoddle (Cetitan), Cherubi (Cherrim), Chespin (Chesnaught, Quilladin), Chikorita (Bayleef, Meganium), Chimchar (Infernape, Monferno), Cryogonal, Cubchoo (Beartic), Cufant (Copperajah), Delibird, Duraludon (Archaludon, Duraludon), Eiscue, Elekid (Electabuzz, Electivire), Gossifleur (Eldegoss), Larvitar (Pupitar, Tyranitar), Machop (Machamp, Machoke), Makuhita (Hariyama), Mankey (Annihilape, Primeape), Mienfoo (Mienshao), Minior, Rhyhorn (Rhydon, Rhyperior), Riolu (Lucario), Rockruff (Lycanroc), Rowlet (Dartrix, Decidueye), Rufflet (Braviary), Salandit, Sawk, Skiddo (Gogoat), Smoochum (Jynx), Sneasel (Sneasel, Sneasler), Snom (Frosmoth), Snorunt (Froslass, Glalie), Snover (Abomasnow), Spinda, Spoink (Grumpig), Sprigatito (Floragato, Meowscarada), Spritzee (Aromatisse), Stantler (Stantler, Wyrdeer), Starly (Staraptor), Swinub (Mamoswine, Piloswine), Throh, Togedemaru, Togepi (Togekiss, Togetic), Tyrogue (Hitmonchan, Hitmonlee, Hitmontop), Vanillite (Vanillish, Vanilluxe), Wooloo (Dubwool)
|
||||
Alolan Sandshrew (Sandshrew), Alolan Vulpix (Vulpix), Axew (Fraxure, Haxorus), Basculin (Basculegion, Basculin), Bergmite (Avalugg), Budew (Roselia, Roserade), Cetoddle (Cetitan), Cherubi (Cherrim), Chespin (Chesnaught, Quilladin), Chikorita (Bayleef, Meganium), Chimchar (Infernape, Monferno), Cryogonal, Cubchoo (Beartic), Cufant (Copperajah), Delibird, Duraludon (Archaludon, Duraludon), Eiscue, Elekid (Electabuzz, Electivire), Galarian Darumaka (Darumaka), Gossifleur (Eldegoss), Hisuian Zorua (Zorua), Larvitar (Pupitar, Tyranitar), Machop (Machamp, Machoke), Makuhita (Hariyama), Mankey (Annihilape, Primeape), Mienfoo (Mienshao), Minior, Rhyhorn (Rhydon, Rhyperior), Riolu (Lucario), Rockruff (Lycanroc), Rowlet (Dartrix, Decidueye), Rufflet (Braviary), Salandit, Sawk, Skiddo (Gogoat), Smoochum (Jynx), Sneasel (Sneasel, Sneasler), Snom (Frosmoth), Snorunt (Froslass, Glalie), Snover (Abomasnow), Spinda, Spoink (Grumpig), Sprigatito (Floragato, Meowscarada), Spritzee (Aromatisse), Stantler (Stantler, Wyrdeer), Starly (Staraptor), Swinub (Mamoswine, Piloswine), Throh, Togedemaru, Togepi (Togekiss, Togetic), Tyrogue (Hitmonchan, Hitmonlee, Hitmontop), Vanillite (Vanillish, Vanilluxe), Wooloo (Dubwool)
|
||||
|
||||
## Sunscorch (Lv 30–45, 36 lines)
|
||||
## Sunscorch (Lv 30–45, 38 lines)
|
||||
|
||||
Bramblin (Brambleghast), Cacnea (Cacnea, Cacturne), Capsakid (Capsakid, Scovillain), Cubone (Cubone, Marowak), Drampa, Dwebble (Crustle, Dwebble), Ekans (Arbok), Falinks, Fennekin (Braixen, Delphox, Fennekin), Flittle (Espathra), Fuecoco (Crocalor, Fuecoco, Skeledirge), Girafarig (Farigiraf, Girafarig), Helioptile (Heliolisk), Hippopotas (Hippopotas, Hippowdon), Kangaskhan, Klawf, Larvesta, Litleo (Litleo, Pyroar), Maractus, Nacli (Garganacl, Naclstack), Numel (Camerupt, Numel), Pawniard, Phanpy (Donphan, Phanpy), Poltchageist (Poltchageist, Sinistcha), Rellor (Rabsca), Sandile (Krokorok, Krookodile), Sandshrew (Sandshrew, Sandslash), Scraggy (Scrafty, Scraggy), Shinx (Luxio, Luxray), Silicobra (Sandaconda, Silicobra), Skarmory, Skorupi (Drapion, Skorupi), Spearow (Fearow), Totodile (Croconaw, Feraligatr, Totodile), Trapinch (Flygon, Vibrava), Tympole (Palpitoad, Seismitoad)
|
||||
Bramblin (Brambleghast), Cacnea (Cacnea, Cacturne), Capsakid (Capsakid, Scovillain), Cubone (Cubone, Marowak), Drampa, Dwebble (Crustle, Dwebble), Ekans (Arbok), Falinks, Fennekin (Braixen, Delphox, Fennekin), Flittle (Espathra), Fuecoco (Crocalor, Fuecoco, Skeledirge), Girafarig (Farigiraf, Girafarig), Helioptile (Heliolisk), Hippopotas (Hippopotas, Hippowdon), Hisuian Growlithe (Growlithe), Kangaskhan, Klawf, Larvesta, Litleo (Litleo, Pyroar), Maractus, Nacli (Garganacl, Naclstack), Numel (Camerupt, Numel), Paldean Tauros (Tauros), Pawniard, Phanpy (Donphan, Phanpy), Poltchageist (Poltchageist, Sinistcha), Rellor (Rabsca), Sandile (Krokorok, Krookodile), Sandshrew (Sandshrew, Sandslash), Scraggy (Scrafty, Scraggy), Shinx (Luxio, Luxray), Silicobra (Sandaconda, Silicobra), Skarmory, Skorupi (Drapion, Skorupi), Spearow (Fearow), Totodile (Croconaw, Feraligatr, Totodile), Trapinch (Flygon, Vibrava), Tympole (Palpitoad, Seismitoad)
|
||||
|
||||
## Mangrove Mire (Lv 25–38, 20 lines)
|
||||
## Mangrove Mire (Lv 25–38, 21 lines)
|
||||
|
||||
Arrokuda (Arrokuda, Barraskewda), Croagunk (Croagunk, Toxicroak), Dondozo, Ducklett (Ducklett, Swanna), Flamigo, Froakie (Froakie, Frogadier, Greninja), Hatenna (Hatenna, Hattrem), Illumise, Karrablast (Escavalier, Karrablast), Misdreavus, Mudkip (Marshtomp, Mudkip, Swampert), Shelmet (Accelgor, Shelmet), Slowpoke, Sobble (Drizzile, Inteleon, Sobble), Surskit (Masquerain, Surskit), Tadbulb (Bellibolt, Tadbulb), Tatsugiri, Toedscool (Toedscool, Toedscruel), Volbeat, Yanma (Yanma, Yanmega)
|
||||
Croagunk (Croagunk, Toxicroak), Dondozo, Ducklett (Ducklett, Swanna), Flamigo, Froakie (Froakie, Frogadier, Greninja), Galarian Stunfisk (Stunfisk), Hatenna (Hatenna, Hattrem), Illumise, Karrablast (Escavalier, Karrablast), Misdreavus, Mudkip (Marshtomp, Mudkip, Swampert), Paldean Tauros (Tauros), Shelmet (Accelgor, Shelmet), Slowpoke, Sobble (Drizzile, Inteleon, Sobble), Surskit (Masquerain, Surskit), Tadbulb (Bellibolt, Tadbulb), Tatsugiri, Toedscool (Toedscool, Toedscruel), Volbeat, Yanma (Yanma, Yanmega)
|
||||
|
||||
## Verdant Jungle (Lv 18–30, 29 lines)
|
||||
## Verdant Jungle (Lv 18–30, 30 lines)
|
||||
|
||||
Aipom, Bellsprout (Bellsprout, Weepinbell), Bounsweet (Bounsweet, Steenee, Tsareena), Bulbasaur (Bulbasaur, Ivysaur), Chatot, Darumaka, Exeggcute (Exeggcute, Exeggutor), Fomantis, Grookey (Grookey, Thwackey), Jangmo-o, Kecleon, Komala, Litten (Litten, Torracat), Natu (Natu, Xatu), Pancham, Panpour (Panpour, Simipour), Pansage (Pansage, Simisage), Pansear (Pansear, Simisear), Pikipek (Pikipek, Toucannon, Trumbeak), Shroodle (Grafaiai, Shroodle), Slakoth (Slakoth, Vigoroth), Snivy (Servine, Snivy), Stufful (Bewear, Stufful), Stunfisk, Tangela (Tangela, Tangrowth), Treecko (Grovyle, Treecko), Tropius, Unown, Woobat (Swoobat, Woobat)
|
||||
Aipom, Bellsprout (Bellsprout, Weepinbell), Bounsweet (Bounsweet, Steenee, Tsareena), Bulbasaur (Bulbasaur, Ivysaur), Chatot, Darumaka, Exeggcute (Exeggcute, Exeggutor), Fomantis, Galarian Slowpoke (Slowpoke), Grookey (Grookey, Thwackey), Jangmo-o, Kecleon, Komala, Litten (Litten, Torracat), Natu (Natu, Xatu), Pancham, Panpour (Panpour, Simipour), Pansage (Pansage, Simisage), Pansear (Pansear, Simisear), Pikipek (Pikipek, Toucannon, Trumbeak), Shroodle (Grafaiai, Shroodle), Slakoth (Slakoth, Vigoroth), Snivy (Servine, Snivy), Stufful (Bewear, Stufful), Stunfisk, Tangela (Tangela, Tangrowth), Treecko (Grovyle, Treecko), Tropius, Unown, Woobat (Swoobat, Woobat)
|
||||
|
||||
## Highland Meadows (Lv 25–35, 41 lines)
|
||||
## Highland Meadows (Lv 25–35, 43 lines)
|
||||
|
||||
Abra (Abra, Alakazam, Kadabra), Blitzle (Blitzle, Zebstrika), Bouffalant, Buizel (Buizel, Floatzel), Chewtle (Chewtle, Drednaw), Cottonee (Cottonee, Whimsicott), Cyclizar, Cyndaquil (Cyndaquil, Quilava), Doduo (Dodrio, Doduo), Electrike (Electrike, Manectric), Fletchling (Fletchinder, Fletchling, Talonflame), Golett, Hoppip (Hoppip, Jumpluff, Skiploom), Igglybuff (Jigglypuff, Wigglytuff), Lechonk (Lechonk, Oinkologne), Lickitung (Lickilicky, Lickitung), Mareep (Ampharos, Flaaffy, Mareep), Miltank, Mudbray (Mudbray, Mudsdale), Nymble (Lokix), Oddish (Bellossom, Gloom, Oddish, Vileplume), Pidgey (Pidgeotto, Pidgey), Poliwag (Politoed, Poliwag, Poliwhirl, Poliwrath), Ponyta, Poochyena (Mightyena), Psyduck (Golduck, Psyduck), Quaxly (Quaxly, Quaxwell), Scorbunny (Cinderace, Raboot, Scorbunny), Seviper, Sinistea (Polteageist, Sinistea), Spiritomb, Squirtle (Squirtle, Wartortle), Stonjourner, Tauros, Tepig (Pignite, Tepig), Tinkatink (Tinkatink, Tinkatuff), Torchic (Combusken, Torchic), Turtwig (Grotle, Torterra, Turtwig), Vulpix (Ninetales, Vulpix), Zangoose, Zorua (Zoroark, Zorua)
|
||||
Abra (Abra, Alakazam, Kadabra), Alolan Diglett (Diglett), Blitzle (Blitzle, Zebstrika), Bouffalant, Buizel (Buizel, Floatzel), Chewtle (Chewtle, Drednaw), Cottonee (Cottonee, Whimsicott), Cyclizar, Cyndaquil (Cyndaquil, Quilava), Doduo (Dodrio, Doduo), Electrike (Electrike, Manectric), Fletchling (Fletchinder, Fletchling, Talonflame), Golett, Hoppip (Hoppip, Jumpluff, Skiploom), Igglybuff (Jigglypuff, Wigglytuff), Lechonk (Lechonk, Oinkologne), Lickitung (Lickilicky, Lickitung), Mareep (Ampharos, Flaaffy, Mareep), Miltank, Mudbray (Mudbray, Mudsdale), Nymble (Lokix), Oddish (Bellossom, Gloom, Oddish, Vileplume), Paldean Tauros (Tauros), Pidgey (Pidgeotto, Pidgey), Poliwag (Politoed, Poliwag, Poliwhirl, Poliwrath), Ponyta, Poochyena (Mightyena), Psyduck (Golduck, Psyduck), Quaxly (Quaxly, Quaxwell), Scorbunny (Cinderace, Raboot, Scorbunny), Seviper, Sinistea (Polteageist, Sinistea), Spiritomb, Squirtle (Squirtle, Wartortle), Stonjourner, Tauros, Tepig (Pignite, Tepig), Tinkatink (Tinkatink, Tinkatuff), Torchic (Combusken, Torchic), Turtwig (Grotle, Torterra, Turtwig), Vulpix (Ninetales, Vulpix), Zangoose, Zorua (Zoroark, Zorua)
|
||||
|
||||
## Westmarch (Lv 15–25, 27 lines)
|
||||
## Westmarch (Lv 15–25, 30 lines)
|
||||
|
||||
Applin (Appletun, Applin, Dipplin, Flapple), Buneary, Corphish, Dedenne, Deerling, Dewpider (Araquanid, Dewpider), Dratini, Emolga, Flabébé (Flabébé, Floette), Gible (Gabite, Gible), Goomy, Magikarp (Gyarados, Magikarp), Munchlax, Nickit (Nickit, Thievul), Petilil (Lilligant, Petilil), Phantump, Pichu (Pichu, Pikachu), Pineco, Rotom, Scyther, Seedot (Nuzleaf, Seedot), Sewaddle (Sewaddle, Swadloon), Shroomish (Breloom, Shroomish), Skwovet (Greedent, Skwovet), Stunky, Tandemaus (Maushold, Tandemaus), Teddiursa
|
||||
Alolan Geodude (Geodude), Applin (Appletun, Applin, Dipplin, Flapple), Buneary, Corphish, Dedenne, Deerling, Dewpider (Araquanid, Dewpider), Dratini, Emolga, Flabébé (Flabébé, Floette), Gible (Gabite, Gible), Goomy, Happiny (Chansey, Happiny), Magikarp (Gyarados, Magikarp), Munchlax, Nickit (Nickit, Thievul), Noibat, Petilil (Lilligant, Petilil), Phantump, Pichu (Pichu, Pikachu), Pineco, Rotom, Scyther, Seedot (Nuzleaf, Seedot), Sewaddle (Sewaddle, Swadloon), Shroomish (Breloom, Shroomish), Skwovet (Greedent, Skwovet), Stunky, Tandemaus (Maushold, Tandemaus), Teddiursa
|
||||
|
||||
## Southwold (Lv 8–18, 53 lines)
|
||||
## Southwold (Lv 8–18, 54 lines)
|
||||
|
||||
Audino, Azurill (Azumarill, Azurill, Marill), Bunnelby, Burmy, Chingling, Corsola, Drifloon, Dunsparce, Eevee, Farfetch'd, Furfrou, Gastly, Glameow, Goldeen, Grimer, Grubbin, Happiny (Chansey, Happiny), Hawlucha, Heracross, Koffing, Lillipup (Herdier, Lillipup), Lotad (Lombre, Lotad), Magnemite, Minccino, Minun, Nidoran♀ (Nidoran♀, Nidorina), Nidoran♂ (Nidoran♂, Nidorino), Noibat, Patrat, Pidove, Pinsir, Plusle, Porygon, Pumpkaboo, Relicanth, Sentret (Furret, Sentret), Shuppet, Smoliv, Squawkabilly, Swablu, Taillow, Tentacool, Timburr, Toxel, Tynamo, Venonat, Voltorb, Whismur, Wimpod, Yamask, Yamper, Yungoos, Zigzagoon
|
||||
Audino, Azurill (Azumarill, Azurill, Marill), Bunnelby, Burmy, Chingling, Corsola, Drifloon, Dunsparce, Eevee, Farfetch'd, Furfrou, Galarian Meowth (Meowth), Galarian Zigzagoon (Zigzagoon), Gastly, Glameow, Goldeen, Grimer, Grubbin, Hawlucha, Heracross, Koffing, Lillipup (Herdier, Lillipup), Lotad (Lombre, Lotad), Magnemite, Meowth, Minccino, Minun, Nidoran♀ (Nidoran♀, Nidorina), Nidoran♂ (Nidoran♂, Nidorino), Patrat, Pidove, Pinsir, Plusle, Porygon, Pumpkaboo, Relicanth, Sentret (Furret, Sentret), Shuppet, Smoliv, Squawkabilly, Swablu, Taillow, Tentacool, Timburr, Toxel, Tynamo, Venonat, Voltorb, Whismur, Wimpod, Yamask, Yamper, Yungoos, Zigzagoon
|
||||
|
||||
## Shallows (Lv 5–20, 21 lines)
|
||||
## Deep Sea (Lv 30–50, 24 lines)
|
||||
|
||||
Alomomola, Bruxish, Carvanha, Chinchou, Clobbopus, Crabrawler, Cramorant, Finizen, Finneon, Inkay, Krabby, Luvdisc, Mareanie, Pincurchin, Pyukumuku, Qwilfish, Sandygast, Shellos, Wiglett, Wingull, Wishiwashi
|
||||
Alomomola, Arrokuda (Barraskewda), Binacle (Barbaracle, Binacle), Clamperl (Clamperl, Gorebyss, Huntail), Clauncher (Clauncher, Clawitzer), Dhelmise, Dreepy (Drakloak), Frillish (Frillish, Jellicent), Horsea (Horsea, Kingdra, Seadra), Inkay (Malamar), Lapras, Mantyke (Mantine, Mantyke), Oshawott (Dewott, Oshawott, Samurott), Piplup (Empoleon, Piplup, Prinplup), Popplio (Brionne, Popplio, Primarina), Remoraid (Octillery, Remoraid), Seel (Dewgong, Seel), Shellder (Cloyster, Shellder), Skrelp (Dragalge, Skrelp), Spheal (Sealeo, Walrein), Staryu (Starmie, Staryu), Veluza, Wailmer (Wailmer, Wailord), Wattrel (Kilowattrel)
|
||||
|
||||
## Deep Sea (Lv 30–50, 21 lines)
|
||||
## Shallows (Lv 5–20, 20 lines)
|
||||
|
||||
Binacle (Barbaracle, Binacle), Clamperl (Clamperl, Gorebyss, Huntail), Clauncher (Clauncher, Clawitzer), Dhelmise, Dreepy (Drakloak), Frillish (Frillish, Jellicent), Horsea (Horsea, Kingdra, Seadra), Lapras, Mantyke (Mantine, Mantyke), Oshawott (Dewott, Oshawott, Samurott), Piplup (Empoleon, Piplup, Prinplup), Popplio (Brionne, Popplio, Primarina), Remoraid (Octillery, Remoraid), Seel (Dewgong, Seel), Shellder (Cloyster, Shellder), Skrelp (Dragalge, Skrelp), Spheal (Sealeo, Walrein), Staryu (Starmie, Staryu), Veluza, Wailmer (Wailmer, Wailord), Wattrel (Kilowattrel)
|
||||
Bruxish, Carvanha, Chinchou, Clobbopus, Crabrawler, Cramorant, Finizen, Finneon, Hisuian Qwilfish (Qwilfish), Krabby, Luvdisc, Mareanie, Pincurchin, Pyukumuku, Qwilfish, Sandygast, Shellos, Wiglett, Wingull, Wishiwashi
|
||||
|
||||
## Lush Caves (Lv 12–28, 22 lines)
|
||||
|
||||
|
||||
Reference in new issue
Block a user