Phase 5: breeding with Cobbreeding, Ditto a rare Deep Dark find

Adrian (2026-10-31): add Cobbreeding without a gate; only Ditto should
be rare, in an endgame area or gated behind something else.

- Cobbreeding 2.4.1 (Modrinth only) and Cloth Config (client) in the
  pack; Cobblebase's hatchery takes Cobbreeding's eggs.
- Ditto moved from Button Isle to the Deep Dark with both of Cobblemon's
  entries (rare in slime chunks, ultra-rare elsewhere): zone_spawns.py
  pins take {"zone", "all_entries"}; Deep Dark target +1, Button Isle -1
  so no other line moved; Southwold and Frostpeak guardians pinned (they
  tie on base stats and flipped between runs).
- HMs' Trainer Ditto is made uncatchable; it still trades.
- check_deps.py skips other-side dependencies; Cobbreeding's harmless
  client-mixin log line allowlisted.
- Self-tests cobbreeding_eggs_fit_the_hatchery, trainer_ditto_cant_be_caught;
  docs, balance table, Phase 5 checklist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
claudeandClaude Opus 5.5 committed 2026-10-31 19:13:55 +01:00
1 parent 5b304025c6
commit 5cae9252c3
20 files changed
+274 -148

No files matched your search

+10 -1
View File
@@ -148,7 +148,7 @@ Order of play the bands suggest: Button Isle → Southwold → Westmarch or Jung
**Unique drops.** Only Pokémon live on the island, so a mob's drop needs another source. `tools/drop_audit.py` checks every item a Pokémon or a vanilla mob drops that a recipe or brewing consumes, and writes `docs/pokemon-drops.md` (item, wild Pokémon with zone and chance, other sources, consumers). Gaps it found, filled through Cobblemon species additions (`datapacks/core/data/cobblesurvival/species_additions/`, placeholders): Blaze Rod (Carkol in Westmarch, Torkoal in the Basalt Furnace; needed for brewing stands, blaze powder and Eyes of Ender), Ghast Tear (Drifloon, Dusclops), Breeze Rod (Whimsicott), Shulker Shell (Shuckle, Cloyster), Nether Star (Charizard). The tide armour trim and the wither skeleton skull stay without a source (cosmetic here). A zone spawn with its own drops overrides the species' drops, so the audit also fails if an addition targets such a spawn (Magmortar's and Centiskorch's did). Self-test: `drop_additions_apply`.
**Base jobs and power.** [Cobblebase](https://modrinth.com/project/cobblebase) (Pokémon in a pasture work: harvesting, producing, finding, buffs, ...) and [Cobblemon Poke Power](https://modrinth.com/project/lIn7oRFm) (Electric-type Pokémon in a Power Block make Forge Energy; nothing in the pack uses the energy yet, Phase 6 machines). Phase 4 first gated them with flags: a skill or the Power Block opened once its owner had beaten a zone's Alpha guardian. **Replaced by soft gates on 2026-10-31** (Adrian: guardians must not set flags; see "Soft gates" under Phase 5). The companion mod still puts every Cobblebase skill executor behind the gate, by reflection, when the server starts (`progress/CobblebaseGate.kt`); a skill missing from the table stays off, so an update can't add ungated skills. Cobbreeding is not installed, so Breeder and Egg Hatcher do nothing.
**Base jobs and power.** [Cobblebase](https://modrinth.com/project/cobblebase) (Pokémon in a pasture work: harvesting, producing, finding, buffs, ...) and [Cobblemon Poke Power](https://modrinth.com/project/lIn7oRFm) (Electric-type Pokémon in a Power Block make Forge Energy; nothing in the pack uses the energy yet, Phase 6 machines). Phase 4 first gated them with flags: a skill or the Power Block opened once its owner had beaten a zone's Alpha guardian. **Replaced by soft gates on 2026-10-31** (Adrian: guardians must not set flags; see "Soft gates" under Phase 5). The companion mod still puts every Cobblebase skill executor behind the gate, by reflection, when the server starts (`progress/CobblebaseGate.kt`); a skill missing from the table stays off, so an update can't add ungated skills. Breeder and Egg Hatcher work since Cobbreeding came in (Phase 5, "Breeding").
**Catching high-level Pokémon** (Adrian, 2026-10-30). Measured against the trainer's strongest party Pokémon (`catching/Catching.kt`, values in `datapacks/core/data/cobblesurvival/catching/rules.json`):
@@ -204,6 +204,15 @@ Self-tests: `gates_cover_every_cobblebase_skill`, `cobblebase_skills_need_level_
Self-tests: `gated_jobs_are_taken_back`, `base_jobs_dig_their_zones_ores`.
**Breeding** (Adrian, 2026-10-31: add Cobbreeding without a gate; only Ditto should be rare, in an endgame area or gated behind something else). Cobblebase's hatchery only takes [Cobbreeding](https://modrinth.com/mod/cobbreeding)'s eggs, so its Breeder and Egg Hatcher did nothing before.
- Cobbreeding 2.4.1: two compatible Pokémon (or one and a Ditto) in a Pasture Block, breeding switched on with the pasture's button, lay an egg in its nest now and then (every 8,000–14,000 ticks); an egg hatches in a player's inventory (about 10 minutes for 20 egg cycles). Defaults kept: two Dittos make no random eggs, Masuda shiny boost ×4, hoppers may pull eggs out of a pasture. Open from the start, no gate; Cobblebase's Breeder and Egg Hatcher stay behind the Deep Dark gate. Cloth Config comes along for its client config screen.
- **Ditto** moved from Button Isle to the Deep Dark (Lv 45–60), with both of Cobblemon's entries: rare bucket in slime chunks, ultra-rare elsewhere. `world/zones.json` → `species` takes the long form `{"zone": "deep_dark", "all_entries": true}` for it, because when no stage fits a band `tools/zone_spawns.py` keeps one entry, which was the slime-chunk one. The Deep Dark's line target went up by one and Button Isle's down by one, so no other line moved; the Southwold and Frostpeak guardians are pinned (Pinsir, Tyranitar), since they tie on base stats with Hawlucha and Archaludon and the tool's pick between ties changed from run to run.
- HMs' visiting **Trainer Ditto** is made uncatchable (`world/SpecialPokemon.kt`); it still trades TMs.
- Cobbreeding lists a mixin into Cobblemon's client-only pasture screen among its common ones, so a dedicated server logs one harmless "invalid dist" error at start; allowlisted in `tools/smoke_allowlist.txt`. `tools/check_deps.py` now skips dependencies meant for the other side (Cobbreeding needs Cloth Config on clients only).
Self-tests: `cobbreeding_eggs_fit_the_hatchery` (Cobblebase's bridge takes Cobbreeding's eggs), `trainer_ditto_cant_be_caught`.
## Notes for Phase 6 (researched 2026-10-31)
Adrian asked for existing mods for the multiblocks, or at least their logic. Phase 6's machines need a pattern-checked structure with a controller, a Pokémon stored inside (keeping its data, visible), safe return when the structure breaks, and state that survives unload and restart. Power is already Poke Power's (Phase 4), so the first machine is the Large Furnace. Nothing on NeoForge 1.21.1 puts a Pokémon into a multiblock; the structure part has several options: