- Button Isle is peaceful: wild Pokémon only fight a player who hit them first
(tuning/server.json peaceful_zones); its apricorns and coal make Poké Balls
(4 apricorns + coal or charcoal), and the world report checks it has enough.
- Quest book: no boilerplate; each zone page says what is particular to it, and
every zone that needs gear or a field move to be safe has its own quest. New
page on the bigger mods (Cold Sweat, Fight or Flight, Cobblebase, breeding,
veins, shared loot, maps and info).
- The Mire's poison stops 10 blocks below the surface.
- Player battles never cost a Pokémon (CobbleHardcoreMon config, mixins, and the
companion mod's own permadeath).
- tools/item_audit.py: every item with a use has a source on the island; new
sources for the gaps it found (species additions, three recipes).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
Adrian, 2026-11-09: set up the shader but keep it disabled by default. Iris
1.8.14-beta.1 (built for the pack's Sodium 0.8.13) and Complementary Reimagined
r5.9.3, both client only and fetched from Modrinth. Default Options' extra
folder ships config/iris.properties with shaders off and Complementary
preselected, copied only when a player has none. Toggle Shaders is on M, the
only free letter; Iris's other keys are unbound. tools/build.py fails if the
settings name a shader file the pack doesn't install.
Smoke test passes; client dependencies are satisfied. Not launched on a client.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adrian, 2026-11-09: legendaries, mythicals, Ultra Beasts and Paradox Pokemon
come from crafted summons. 22 Sigils (Naganadel evolves from Poipole), one
item told apart by custom data, from world/summons.json through
tools/summons.py: late-game recipes in three tiers (Lv 70, 80, 90), each used
in a fitting zone. A summoned legend fights as a boss (area attacks by level
and type, arena 32, the Guardian's Ward) but can be caught; on capture it
loses every boss mark. One at a time within 96 blocks.
Quest book: a Legends chapter, one quest per Sigil (97 quests). JEI lists each
Sigil as its own item, and Island Drops says where a legend is summoned; drops
Cobblemon names but doesn't have (Ho-Oh's Sacred Ash) get no slot.
Self-tests every_implemented_pokemon_is_obtainable (spawn, fossil or Sigil for
every implemented species) and sigil_summons_a_catchable_legend. Self-tests
and the island check pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Phase 8 approved (2026-11-09). Adrian's Phase 9 answers: left-out Pokemon rare
in fitting zones; legendaries from crafted summons; no public release.
- Ore veins more sporadic but bigger: nodes about 40 % rarer, veins about 30 %
further apart, each one block larger in radius. 1.5-3x the ore overall; a
new island is needed to see it. World check on the regenerated island passes.
- The respawn block (Regenerating Ore Veins' regenerator): the aim passes
through it unless sneaking (mixin, the pack's first), so ore behind it can be
mined; much fainter glass through KubeJS assets. Self-test
regenerator_lets_the_aim_through casts a real ray.
- 31 lines (67 species) with no matching island biome, or no spawn data
(Rotom), get rare homes in fitting zones (world/zones.json -> homeless).
Existing spawns and guardians don't change. JEI data and quests regenerated.
- surface_nodes_lie_in_the_ground checks the node's centre column: a wider
node's edge can lie under a tree or a slope.
- Roadmap: every implemented Pokemon obtainable; Iris and Complementary
Reimagined as the default shader.
Self-tests and the island check pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- tools/quests.py writes pack/config/ftbquests/quests/ in FTB Quests 2101's
format (data.snbt, chapters/*.snbt, texts in lang/en_us.snbt) with ids
derived from the YAML names, so progress survives regeneration. Flexible
progression, no lock icons, no rewards (Adrian, 2026-11-03). tools/build.py
runs it.
- docs/quests.yaml: 18 chapters, 74 quests. Getting Started; one chapter per
zone and the End from a zone template (reach it, catch three of its
Pokemon, mine its ores, beat its guardian) plus chapter extras (Mire
Waders, Eyes of Ender, Eternatus); Pokemon Machines; Base and Jobs.
- Node positions: --pull reads them from an FTB Quests folder into the
layout block (only moved nodes); tools/prism_instance.py pulls from the
instance before each sync and rebuilds if something moved.
- The pack's own events as hidden advancements (cobblesurvival:events/...),
granted by QuestEvents: zone reached, guardian beaten, machine filled, End
boss beaten.
- Self-tests quest_book_loads and quest_events_mark_zones; the guardian and
furnace tests check their events. Self-tests and island check pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adrian's Phase 8 answers (2026-11-03): Cobblemon tasks from Cobblemon Quests
Reloaded; JEI gets the Cobblemon Info for REI/JEI/EMI add-on, its spawn info
checked against the pack, plus our own pages; no quest rewards; quests
generated from docs/quests.yaml with in-game node moves read back.
- Cobblemon Quests Reloaded 2.0.2+1.8 (CF only, CC-BY-NC-4.0): declares
Cobblemon 1.8+ and FTB Quests 2101+; adds cobblemon_tasks:cobblemon_task.
Its bundled MongoDB client is an optional storage backend, off by default.
- Cobblemon Info for REI/JEI/EMI 2.32.14 (MIT, both sides): reads the live
spawn pool, so it shows the zone pools' species, levels and rarity; it lists
biomes, not zones (our pages will add the zone). Without it on the server a
client falls back to Cobblemon's own spawn files.
- crosslink.py found the same Cobblebase and Cobblemon HMs files on CF.
- Self-tests quests_have_cobblemon_tasks and jei_addon_shows_island_spawns
(every entry the add-on shows is one of the pack's, at the zone's levels,
none missing). Smoke test, self-tests and the island check pass.
- Docs: design.md Phase 8 section and plan, checklists/phase-8.md,
addon-status.md, licenses.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
Adrian (2026-10-31): use Cobblemon HMs; mining ore is the one hard
requirement, furnaces get lit by a Pokemon inside a Phase 6 machine.
- Cobblemon HMs 4.1.0 in the pack (Modrinth), default config.
- Self-test rock_smash_mines_veins: HMs' Rock Smash breaks a
regenerating vein, the ore drops and the vein becomes a regenerator.
- HMs' Trainer Ditto (a wild Ditto underneath) is exempt from the
hostility scan and the stray despawn (world/SpecialPokemon.kt).
- Docs: licenses, addon status, design, balance, roadmap note,
Phase 5 checklist with the open questions for Adrian.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From Adrian's play-test (2026-10-30):
- The Deep Dark no longer fills the deepslate layer: world/biomes.json
splits it by temperature (Deep Dark under cold and temperate land,
basalt deltas under the hottest, ordinary caves between); at y -52 it
drops from 30 % to 14 % of the land, basalt 7 %.
- Cave zones fill up to their targets with lines whose primary type fits
the cave; top stages spawn up to the band's top (Deep Dark Lv 60, Basalt
70); no time-of-day conditions underground.
- Wild Pokemon more than 10 levels above the band of the zone they
wander into despawn (zone/Wanderers.kt).
- Loot is shared: all players in one scoreboard team, Lootr team_loot.
- Basalt ore nodes reach the deep basalt.
Self-tests strays_despawn and loot_is_shared; the catching rules from the
previous commit are now tested too. Template rebuilt (world check passed),
island quick check passed (36 self-tests and the restart test).
Shoulder Pokemon noted for Phase 5.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Done and checked: surface and cave-floor ore nodes (companion mod
ore/OreNodes.kt), bigger and rarer underground veins; template with nodes
passed the world check and the island quick check (node self-tests).
Built, not yet tested: catching rules (catch rate falls with the level
gap to the trainer's strongest Pokemon, failed catch enrages, strong wild
Pokemon hunt weaker trainers; catching/, Fight or Flight config), bee
nests emptied when their bee is turned away.
In progress: the Deep Dark no longer fills the deepslate layer (split by
temperature: cold = Deep Dark, hot = basalt deltas, warm = ordinary caves;
world/biomes.json), zone layout regenerated; cave zone types added to
world/zones.json but tools/zone_spawns.py doesn't use them yet; template
not rebuilt for the new caves.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adrian (2026-10-30): Cobblebase's skills stay in but gated behind
progression, power from an existing mod (Poke Power) also gated,
evolution stones as ores fine for now, balance fine and configurable.
Progression is the zones whose Alpha guardian a player helped beat
(Progress saved data; a guardian win records it and lists the unlocks).
The gate table is data (progression_gates/base.json): each of
Cobblebase's 44 skills needs a zone (or none), the Power Block needs the
Verdant Jungle. The companion mod wraps every Cobblebase skill executor
in a gate by reflection; a skill missing from the table stays off.
Operator command /cobblesurvival progress. Cobblebase's and Poke Power's
configs ship in the pack. Self-tests: gate coverage, a locked skill only
runs after its guardian, the Power Block waits for the Jungle guardian,
a guardian win counts as progress.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ore veins: make_world.py loads the island again row by row until
Regenerating Ore Veins has filled every chunk (/cobblesurvival veins
unfilled), cave tiers sit at their biome's depths, small zones get denser
veins, showcase veins are full size. The world report checks surface
tiers against the zone grid, cave tiers within two biome cells of their
cave, and fails on unfilled chunks; the template passes (37,689 chunks).
Drops: tools/drop_audit.py checks every creature drop a recipe or brewing
needs (docs/pokemon-drops.md). Blaze rods, ghast tears, breeze rods,
shulker shells and nether stars now drop from Pokemon through species
additions (self-test drop_additions_apply). The field guide counts vanilla
mobs as absent, applies species additions and reads the veins as sources.
Cobblebase tried (loads, self-tests pass) and left out until Adrian
decides its scope. Phase 4 checklist with the open questions.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Regenerating Ore Veins 1.4.0 (CurseForge only, MIT). tools/zone_ores.py
writes its config from world/zones.json: surface zones as boxes from the
zone grid, cave tiers by cave biome, 21 tiers including Cobblemon's
evolution stones (their natural ores are off). The world report now
allows ore only in tracked veins inside their tier's zone. Self-tests:
a mined vein regrows after its chunk unloads and after a restart (new
after_restart pass in selftest.py and quick_check.py). make_world places
showcase veins.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Companion mod zone hazards (zone/ZoneHazards.kt, data in
data/cobblesurvival/zone_hazards/): in the Mire a player without an
item from #cobblesurvival:mire_protection gets Poison every 5 seconds,
with a one-time warning. Potions, milk and golden apples still help.
- Mire Waders: KubeJS leather boots, dropped by the Westmarch and Verdant
Jungle guardians (the zones before the Mire), per Adrian's boss rule.
- Self-test mire_poisons_without_waders.
- Allow-list Cobblemon's misspelt jigsaw state in
habitats/parched_peat_bog7.nbt, which test players now reach.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Companion mod (zone/Guardians.kt): each zone's guardian stands at the
zone's sample point, appears when a player is within 96 blocks, stays
within 24 blocks, is uncatchable and half again as big. Beating it in a
battle gives every player in the battle its drops; it returns after 5
hours of game time (Adrian: fixed spots, 5 hours). State lives in the
world save; /cobblesurvival guardians lists it.
- tools/zone_spawns.py writes data/cobblesurvival/guardians/<zone>.json:
the strongest walking (or swimming) Pokemon of the zone at band top + 5,
with the drops from world/zones.json. Boss drops follow Adrian's rule:
Icy Rocks before Sunscorch, Heat Rocks before Frostpeak.
- Goat Fur and Hoglin Hide recipes make 8 per rock, so one guardian's 3
rocks pay for one full insulating set.
- Self-test guardian_appears_and_returns; hazard tests cleaned up; the
zone generator reads Cobblemon's own entries from the field guide's
hidden_spawns.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Free NeoForge 1.21.1 modpack on Cobblemon 1.8.4 built with packwiz, plus
the Kotlin companion mod (cobblesurvival) and its built-in data pack.
- Phase 0: packwiz pack with Modrinth/CurseForge cross-links, build and
export tooling, Prism instance sync, test server with smoke checks.
- Phase 1: Poke Ball shaped island (WorldGen Editor preset, seed isle-26),
Adrian's biome list, no natural ore, structures without ore or vanilla
mobs, no Nether portals, world template builder and world report.
- Phase 2: permadeath (CobbleHardcoreMon plus the companion mod's gap
fixes), Revival Charm, expensive Healing Machine, Lootr refreshing
loot, in-game self-tests on Minecraft's GameTest framework.
- Phase 3 so far: 14 zones with their own spawn pools and level bands
(tools/zone_layout.py, tools/zone_spawns.py, "zone" spawn condition),
Cold Sweat heat and cold as gates with boss-drop insulation recipes,
spawn survey and hazard self-tests in tools/quick_check.py.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>