Files
cobblemon-survival-pack/docs/balance.md
T
claudeandClaude Opus 5.5 d29e177f9d Phase 9: safe start island, better quest book, every useful item obtainable
- 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>
2026-11-10 15:04:09 +01:00

100 lines
28 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. 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 |
| --- | --- | --- | --- | --- |
| Island radius | 1,500 blocks | Placeholder | `tools/pokeball_preset.py --radius` | Test value from the roadmap; final size after Phase 1 review |
| Poké Ball band | 160 blocks wide channel across the middle | Placeholder | `tools/pokeball_preset.py --band` | |
| Poké Ball button | centre island r 280, ring channel 120 wide | Placeholder | `tools/pokeball_preset.py --button --ring` | The world spawn lands on the button |
| Coastline roughness | 0.03 (smooth, so the ball reads as a circle) | Placeholder | `tools/pokeball_preset.py` | |
| Raw ore blocks in structures | raw iron → tuff, raw copper → terracotta, raw gold → yellow terracotta | Placeholder | `tools/clean_structures.py` (`RAW`) | Look-alikes only; ores in structures become stone/deepslate/netherrack |
| World seed | chosen by `tools/seed_search.py` | Placeholder | `world/world.json` | Decides where each biome lands on the island |
| Seed-search targets | ≥5% land share per surface biome (3% for cherry grove, mangrove swamp, windswept hills, jagged peaks); no biome above 35%; gentle land within 350 blocks of 0,0 | Placeholder | `tools/seed_search.py` | Scoring weights, not gameplay values |
| Revival Charm recipe | 2 gold ingots, 2 Revives, 1 Max Revive (shaped) | Decided (Adrian, 2026-10-29) | `kubejs/server_scripts/revival_charm.js` | Meant to be expensive; gold comes from veins (Phase 4) and loot chests |
| Healing Machine recipe | 3 gold ingots, 4 iron ingots, 1 Max Revive, 1 diamond (shaped; Cobblemon: 3 copper, 4 iron, Max Revive, redstone) | Decided (Adrian, 2026-10-29) | `kubejs/server_scripts/healing_machine.js` | Roadmap: make Healing Machines expensive |
| Healing Machine recharge | 3,600 s from empty to full (6 charge, one per full Pokémon heal; Cobblemon: 900 s) | Decided (Adrian, 2026-10-29) | `config/cobblemon/main.json` → `secondsToChargeHealingMachine` | So a machine heals a full party about once an hour of play |
| Fainted Pokémon auto-recovery | never (`defaultFaintTimer` 1e9 s) | Decided (permadeath) | `config/cobblemon/main.json` | |
| Zone level bands | Button Isle 2–10, Southwold 8–18, Westmarch 15–25, Verdant Jungle 18–30, Highland Meadows 25–35, Mangrove Mire 25–38, Sunscorch 30–45, Frostpeak 40–55, Shallows 5–20, Deep Sea 30–50, Lush Caves 12–28, Dripstone 22–38, Deep Dark 45–60, Basalt Furnace 55–70 | Decided (Adrian, 2026-10-30) | `world/zones.json` → `levels`, then `tools/zone_layout.py` and `tools/zone_spawns.py` | Zone shapes approved (Adrian, 2026-10-29) |
| Evolution lines per zone (targets) | 15–35 per zone, scaled to the 377 lines available | Decided (Adrian, 2026-10-30) | `world/zones.json` → `lines` | Result per zone in `docs/zone-species.md` |
| 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 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 |
| Guardian strength | strongest Pokémon spawning in the zone, band top + 5 levels, scaled to stand about 8 blocks tall (1.5× to 12× its normal size), uncatchable | Decided (Adrian, 2026-10-30) | `tools/zone_spawns.py` (`GUARDIAN_*`), `world/zones.json` → `guardian.species` | Pinned by hand: Southwold Pinsir, Highland Meadows Mudsdale, Sunscorch Flygon, Frostpeak Abomasnow, Deep Dark Regigigas, Basalt Furnace Moltres (Lv 75; drops 3 Exp. Candy XL + 2 netherite scrap, placeholder) (Adrian, 2026-11-02: guardians fit their zone, a legendary for the Deep Dark) |
| Guardian drops | Button Isle 10 Poké Balls + 4 Potions; Southwold 6 Great Balls + 4 Exp. Candy S; Westmarch and Jungle Mire Waders + 4 Pecha Berries + 2 Exp. Candy M; Mire and Highlands 3 Icy Rocks + 4 Super Potions; Sunscorch 3 Heat Rocks + 2 Exp. Candy L; Frostpeak and Deep Dark 3 Icy Rocks + 2 Exp. Candy L; Deep Sea Mystic Water + 3 Exp. Candy M | Decided (Adrian, 2026-10-30) | `world/zones.json` → `guardian.drops` | 3 rocks make one full fur or hide set |
| Mire poison | Poison I for 7 s, renewed every 5 s while in the Mire without Mire Waders, down to 10 blocks below the surface (Adrian, 2026-11-10: not far underground) | Decided (Adrian, 2026-10-30) | `datapacks/core/data/cobblesurvival/zone_hazards/mire.json` | Vanilla Poison stops at half a heart |
| Field moves (Cobblemon HMs) | mod defaults: all 39 abilities on, no level minimum, no fullness or friendship cost; Rock Smash breaks up to 32 connected ore blocks with no cooldown | Placeholder | `config/cobblemon_hms.json` (generated by the mod; the pack ships none yet) | Rock Smash mines any ore, whatever pickaxe the player has. HMs' `minLevel` is the player's XP level, not the Pokémon's |
| Breeding (Cobbreeding) | mod defaults: an egg every 8,000–14,000 ticks per breeding pasture, hatch multiplier 1.0 (about 10 min for 20 egg cycles), Masuda shiny boost ×4, no random eggs from two Dittos, no gate | Placeholder | `config/cobbreeding/main.json` (written by the mod; the pack ships none) | Adrian, 2026-10-31: breeding without a gate |
| Machine shells | 3×3×3, core in a wall, chamber in the centre; casing: Heat bricks/mud bricks/deepslate bricks; Dynamo copper blocks; Synthesis iron/gold/diamond/netherite blocks; Altar obsidian/crying obsidian/blackstone/polished blackstone bricks; Rebirth amethyst/quartz/calcite; glass allowed at the window spots | Placeholder | `datapacks/core/data/cobblesurvival/machines/*.json`, `tags/block/*_casing.json` | Adrian, 2026-10-31 (Phase 6) |
| Core recipes | Heat: 4 bricks, 4 iron ingots, blast furnace; Dynamo: 4 copper blocks, 4 redstone, thunder stone; Synthesis: 4 iron blocks, 2 redstone blocks, 2 hoppers, crafter; Altar: 4 obsidian, 4 gold blocks, echo shard; Rebirth: 4 amethyst blocks, 4 diamonds, shiny stone | Placeholder | `datapacks/core/data/cobblesurvival/recipe/*_core.json` | |
| Large Furnace | furnaces heated: 1 + level/15 (max 8); cooking speed 2 + 0.08 × level + 0.02 × Special Attack (e.g. Lv 50, SpA 70: 7.4×; doubled, Adrian 2026-11-02); no fuel | Placeholder | `machines/heat_core.json` | |
| Generator | 50 FE/t per level × (1 + 0.005 × Special Attack) (Lv 30, SpA 50: 1,875 FE/t); stores 200,000 FE, pushes up to 16,000 FE/t | Placeholder | `machines/dynamo_core.json` | After Poke Power's 50 FE per level |
| Drop Synthesizer | 2,000,000 FE per drop roll, takes up to 32,000 FE/t (one roll a minute at most), stores 4,000,000 FE; looting by casing tier: iron 0, gold I, diamond II, netherite III (+0–1 per drop per level; 25 % per level for a second roll); 9 output stacks | Placeholder | `machines/synthesis_core.json` | |
| Sacrifice Altar | from Lv 20: 3 Exp. Candy S; 35: 3 M; 50: 3 L; 65: 2 XL + Ability Capsule; 80: 3 rare candies + 2 XL; 90: 5 rare candies + Ability Patch; 100: 8 rare candies + Ability Patch + nether star; Lv 100 Dragon type: + dragon egg; confirm within 5 s | Placeholder | `machines/altar_core.json` | Rare candies above the highest natural level (Lv 75 guardians) |
| Rebirth Chamber | 144,000 ticks (2 hours of server time); 3 IVs raised to 31; an Ability Patch comes with it | Placeholder | `machines/rebirth_core.json` | |
| Boss attacks (guardians) | by guardian level: up to Lv 20 a circle under the player; up to 35 + a line from the boss; up to 50 + a cone; up to 65 + a ring around the boss at half HP; above + a wide ring at a quarter HP. Telegraph 2.5 s at the lowest tier down to 1.5 s; damage level/6 health points (Morpeko 3, Moltres 12); circle every 7.4 s down to 5.6 s, line and cone less often; Fire types burn, Ice types freeze, Poison types poison | Placeholder | `tools/zone_bosses.py` → `datapacks/core/data/cobblesurvival/bosses/*.json` | Adrian, 2026-11-02: every guardian, harder in harder zones |
| Boss arena | 24 blocks around where the boss stood; Basalt Furnace 32; the End 40; leaving it or dying loses the fight | Placeholder | same files, `arena` | |
| End boss | Eternatus Lv 80, 2.5× size (15 blocks tall; it was 0.2×, about a block, until Adrian found it too small, 2026-11-02), back 5 hours after a win; 12,000 XP the first time, 500 after | Placeholder | `bosses/end.json` (`tools/zone_bosses.py` → `END`) | Stands in for Giratina, which Cobblemon 1.8.4 has no model for |
| End spawns | the End is a zone, Lv 50–70; Cobblemon's End lines spawn there (Beheeyem, Reuniclus, Metagross; Gothitelle and Sigilyph in End cities; Malamar and Unown with a Poké Snack), all in the common bucket, each line's heaviest entry weight 10, Metagross 2 | Placeholder | `world/zones.json` → `dimensions` (`levels`, `bucket`, `line_weight`, `rare_factor`), then `tools/zone_layout.py` and `tools/zone_spawns.py` | Adrian, 2026-11-02: the End was barren; Lv 50–70 his pick |
| Boss size | guardians about 8 blocks tall (Morpeko 4.9 at the 12× cap, Moltres 8, Regigigas 9.8 at the 1.5× floor); Eternatus 15 blocks; a cave guardian's spot needs that much air above it, else the roomiest floor within 24 blocks | Placeholder | `tools/zone_spawns.py` (`GUARDIAN_HEIGHT`, `GUARDIAN_SCALE_MIN`, `GUARDIAN_SCALE_MAX`), `tools/zone_bosses.py` (`END_HEIGHT`) | Adrian, 2026-11-02: way bigger. Area attacks that start at the boss reach half its width further |
| Boss toughness | perfect IVs and 170 EVs each in HP, Defense and Sp. Def (510, the games' limit), nothing in Attack, Sp. Atk or Speed; in battle the Guardian's Ward: Defense and Sp. Def ×2 while defending, and one attack (all hits of a multi-hit move together) takes at most 25 % of max HP | Placeholder | `BossToughness.EVS`; `datapacks/core/data/cobblesurvival/held_items/guardiansward.js` (`DEF_FACTOR`, `SPD_FACTOR`, `HP_SHARE`) | Adrian, 2026-11-02: tougher, not stronger; the 25 % cap is his number. Applies to guardians, the End boss and practice copies |
| Guardian boss bar | shown to each player within 128 blocks of a living guardian, updated every half second: name, zone, distance in blocks, HP | Placeholder | `GuardianBars.RANGE` | Adrian, 2026-11-03: like the Wither's, and it leads players to the guardian |
| Machine look | a working core glows (light 10), its front animates (8 frames, 3 ticks each) and particles show; it keeps looking busy 2 s after the work stops; the Pokémon inside flinches (red flash, hit sound, no damage) about every 15 s while it works | Placeholder | `MachineBlock.ACTIVE_LIGHT`, `tools/machine_assets.py` (`FRAMES`, `FRAME_TICKS`), `MachineEffects` (particle and sound chances), `MachineBlockEntity` (`ACTIVE_LINGER`, `FLINCH_ONE_IN`) | Adrian, 2026-11-02. Working means: a heated furnace has something to cook, the generator isn't full, the synthesizer gets energy, a rebirth runs, the altar holds a Pokémon |
| Level pressure | full experience up to 5 levels above the zone's band, then 10 % less per level, at least 10 % (Exp. Candy and commands exempt) | Decided (Adrian, 2026-10-30) | `world/zones.json` → `level_pressure` | E.g. on Button Isle (up to Lv 10): Lv 15 full, Lv 20 half, Lv 24+ a tenth |
| Strong flyer | ridable through the air with top speed ≥ 60 or top stamina ≥ 85 (Cobblemon ride stats) | Decided (Adrian, 2026-10-30) | `tools/zone_spawns.py` (`STRONG_FLYER_*`) | 29 species |
| High zone for strong flyers | band starts at Lv 30 or more (Sunscorch, Frostpeak, Deep Sea, Deep Dark, Basalt Furnace) | Decided (Adrian, 2026-10-30) | `tools/zone_spawns.py` (`HIGH_ZONE_LEVEL`) | |
| Ore tiers per zone | Button Isle: coal; Southwold: copper; Westmarch: iron, thunder stone; Verdant Jungle: redstone, leaf stone; Highland Meadows: lapis, sun stone; Sunscorch: gold, fire stone; Frostpeak Range: emerald, ice stone, dawn stone; Dripstone Depths: amethyst, moon stone; Deep Dark: diamond, dusk stone; Basalt Furnace: quartz, netherite; Lush Caves: shiny stone; Mangrove Mire: water stone | Fine for now (Adrian, 2026-10-30) | `world/zones.json` → `ores` → `tools/zone_ores.py` | Each tier in exactly one zone; evolution stones are tiers (their natural ores are off) |
| Vein regrowth | 20 min: coal; 30 min: copper; 40 min: iron; 45 min: redstone, lapis; 60 min: gold, quartz, thunder stone, shiny stone, leaf stone, water stone, moon stone, sun stone, fire stone, ice stone; 75 min: emerald, dawn stone, dusk stone; 90 min: diamond; 120 min: amethyst; 180 min: netherite; ±10 % jitter; real time | Fine for now (Adrian, 2026-10-30) | `world/zones.json` → `ores` (`regen_minutes`, `ore_defaults.jitter`) | Counts while the server is off too |
| Ore nodes | chance per chunk of the zone — surface: coal 30 %, copper 12 %, iron 12 %, redstone 12 %, lapis 9 %, gold 18 %, emerald 9 %, thunder stone 1.8 %, leaf stone 2.4 %, water stone 2.4 %, sun stone 1.2 %, fire stone 4.8 %, ice stone 3.6 %, dawn stone 2.4 %; cave floor (8 columns searched): amethyst 30 %, diamond 9 %, quartz 30 %, netherite 3.6 %, shiny stone 9 %, moon stone 15 %, dusk stone 6 %. Radius 1–2 (evolution stones and netherite 0–1), 80 % filled | Placeholder (Adrian, 2026-11-09: more sporadic but bigger; 2026-10-30: small on the surface) | `world/zones.json` → `ores` → `nodes` | New numbers apply to a newly generated island only |
| Underground veins (surface tiers) | radius 3–5 (stones 2–3), spacing 8–14 chunks between candidate chunks, 70 % filled, 1–2 tries per candidate chunk | Placeholder (Adrian, 2026-11-09: more sporadic but bigger) | `world/zones.json` → `ores` → `veins` | Ore blocks on the island (2026-11-09, nodes and veins): copper 53,334, iron 28,509, quartz 21,350, lapis 12,319, coal 11,652, redstone 7,536, amethyst 5,839, gold 4,973, shiny stone 3,514, emerald 3,290, moon stone 2,936, diamond 2,015, thunder stone 1,800, sun stone 1,612, dusk stone 1,261, leaf stone 849, dawn stone 814, water stone 696, ice stone 660, fire stone 536, netherite 533: 1.5–3× the old totals, since the larger size outweighs the wider spacing. Per zone in `build/island-report.json` after `tools/make_world.py` |
| Regenerators breakable by players | no; explosions don't hurt veins | Fine for now (Adrian, 2026-10-30) | `tools/zone_ores.py` → `global.json` | Otherwise a player could remove a vein for good |
| Respawn block (regenerator) | the player's aim passes through it unless sneaking, so ore behind it can be mined; no collision (the mod's own); glass about 9 % opaque with a 27 % edge (was stained glass, about 50 %) | Adrian, 2026-11-09 | `mod/src/main/java/.../RegeneratorBlockMixin.java`; `pack/kubejs/assets/regenerating_ore_veins/` | Sneak-use still shows its info |
| Homeless lines | 31 lines with no matching biome on the island: rare bucket, weight 10, at the zone's levels, anywhere in the zone | Placeholder (Adrian, 2026-11-09: rare, in fitting zones) | `world/zones.json` → `homeless` → `tools/zone_spawns.py` | Which zone each lives in is listed there and in `docs/zone-species.md` |
| Legend summons | 22 Sigils; tier 1 Lv 70: 4 zone material, 4 diamonds, netherite ingot; tier 2 Lv 80: 4 material, 4 diamonds, nether star; tier 3 Lv 90 (Rayquaza, Mewtwo, Eternatus): 4 material, 4 netherite ingots, nether star; one at a time within 96 blocks; fight as a boss with the Guardian's Ward, arena 32 | Placeholder (Adrian, 2026-11-09: crafted summons) | `world/summons.json` → `tools/summons.py`, `tools/zone_bosses.py` (`SUMMON_ARENA`) | Nether stars come from the Sacrifice Altar at Lv 100 |
| Vein Locator | compass + copper ingot; 75 % chance to break per use (the mod's default) | Fine for now (Adrian, 2026-10-30) | `tools/zone_ores.py` → `vein_locator.json` | The mod's default recipe needs netherite |
| Drops for mobs the island lacks | Blaze Rod: Carkol 10 %, Torkoal 25 % ×1–2; Ghast Tear: Drifloon 5 %, Dusclops 10 %; Breeze Rod: Whimsicott 10 %; Shulker Shell: Shuckle 10 %, Cloyster 10 %; Nether Star: Charizard 5 % | Fine for now (Adrian, 2026-10-30) | `datapacks/core/data/cobblesurvival/species_additions/` | Every drop and what consumes it: `docs/pokemon-drops.md` (`tools/drop_audit.py`) |
| Cobblebase skill gates | start: gatherer, harvester, irrigator, producer, furnace fuel, water fill, extinguisher, scout, guard; Button Isle: fishing, forager, botanist, collector, snow fill, brewing fuel, craftsman; Southwold: pharmacist, scholar, mentor (passive XP), lava fill; Westmarch: mining, excavator, architect, armorer, diving; Verdant Jungle: alchemist, trainer, smith, prospector, growth aura; Highland Meadows: speed, jump, haste, night vision, water breathing, saturation buffs; Mangrove Mire: resistance, strength buffs; Sunscorch: friend recruiter, aura boost; Frostpeak: healer, lucky charm; Deep Dark: breeder, egg hatcher | Placeholder | `datapacks/core/data/cobblesurvival/progression_gates/base.json` → `cobblebase_skills` | A zone means its soft gate, checked on the pastured Pokémon (see "Soft gate levels and materials") |
| Power Block gate | none of its own: Poke Power's recipe takes 4 redstone blocks (Verdant Jungle ore), 4 iron blocks and an Electirizer | Placeholder | Poke Power's recipe | The Phase 4 guardian flag is gone (Adrian, 2026-10-31) |
| Soft gate levels and materials | a Pokémon passes a zone's gate at the top of its band (Button Isle 10, Southwold 18, Lush Caves 28, Westmarch 25, Jungle 30, Highlands 35, Mire 38, Dripstone 38, Sunscorch 45, Deep Sea 50, Frostpeak 55, Deep Dark 60, Basalt 70), or holding a material: coal; raw copper/copper ingot; shiny stone; raw iron/iron ingot/thunder stone; redstone/leaf stone; lapis/sun stone; water stone; amethyst shard/moon stone; raw gold/gold ingot/fire stone/Heat Rock; Mystic Water; emerald/ice stone/dawn stone; diamond/dusk stone; quartz/netherite scrap. A harder zone's material counts too | Placeholder | `progression_gates/base.json` → `zones` (an optional `level` overrides the band top) | Adrian, 2026-10-31: soft gates, no flags |
| Gated field moves (Cobblemon HMs auras) | Flash: Dripstone; Dive, Mist: Mire; Rock Climb: Highlands; Magnet Rise: Sunscorch; Lucky Chant: Frostpeak; Lava Plume: Deep Dark | Placeholder | `progression_gates/base.json` → `field_moves` | Checked on the Pokémon giving the aura |
| Base job loot (Cobblebase Mining, Ore Finder, Evolution-item Finder) | ores and evolution stones only from the pasture's zone (by the zone of their tier); Mining adds quartz (uncommon, weight 8) and the evolution stones (rare, weight 3) and drops the type gems; Cobblebase's other entries and weights unchanged | Placeholder | `tools/cobblebase_loot.py` → `datapacks/core/data/cobblebase/loot_table/` | Adrian, 2026-10-31. Rerun the tool after changing ore tiers in `world/zones.json` |
| Shoulder passives | Flying slow falling, Electric speed, Rock/Ground/Steel haste; gated: Fire warmth (Highlands), Ice frigidness (Jungle), Water water breathing (Mire), Ghost/Dark night vision (Dripstone); all level I | Placeholder | `datapacks/core/data/cobblesurvival/shoulder_passives/base.json` | Warmth and frigidness are Cold Sweat's effects |
| Poke Power output | 50 FE/t per Pokémon level, block stores 120,000 FE, 16,000 FE/t out; cable 32,000 / 16,000 | The mod's defaults | `pack/config/poke_power/server.toml` | Nothing uses the energy before Phase 6 |
| Cobblebase jobs | the mod's defaults (finder cooldown 240 s, passive XP 5 % a minute with a Mentor, recruiter rates, buffs) | The mod's defaults | `pack/config/cobblebase.json` (skill cooldowns in its own skill data) | Tune after play-testing |
| Catch rate against stronger Pokémon | full up to the trainer's strongest party level, then falling linearly to 2 % of the normal rate at +20 levels and beyond | Placeholder (Adrian, 2026-10-30: 20+ levels higher very improbable) | `datapacks/core/data/cobblesurvival/catching/rules.json` → `catch_rate` | E.g. +10 levels: about half the normal rate |
| Failed catch | the Pokémon attacks the thrower; while it has a target, thrown balls don't catch it | Decided (Adrian, 2026-10-30) | same file, `failed_catch_enrages`; `config/fightorflight.json5` | Pokémon below Lv 5 never fight back (Fight or Flight `minimum_attack_level`) |
| Hostile to weaker trainers | a wild Pokémon above a player's strongest party Pokémon attacks that player within 16 blocks | Decided (Adrian, 2026-10-30); range placeholder | same file, `hostile_when_stronger`, `hostile_range` | |
| Ride stats (speed, stamina, ...) | Cobblemon's own | To tune after play-testing | species `riding` via `species_additions` | |
| Healing while sleeping | off (`healPercent` 0) | Decided (roadmap) | `config/cobblemon/main.json` | |
| Loot container refresh | 1 hour (72,000 ticks of game time) after first opened, all containers | Decided (Adrian, 2026-10-29) | `config/lootr-common.toml` | Tiering by structure/biome later |
| Loot per player or shared | shared: one inventory per container for everybody (Lootr `team_loot`, all players in the team `islanders`) | Decided (Adrian, 2026-10-30) | `config/lootr-common.toml`, `world/SharedLoot.kt` | Gilded chests: rolled once, shared, don't refill |
| Stray wild Pokémon | despawn when more than 10 levels above the band of the zone they stand in | Placeholder (Adrian, 2026-10-30: a Lv 61 in the Lush Caves) | `world/zones.json` → `wanderers` | Not in battles, not while angry, never guardians |
| Deep layer split | temperature of the land above up to −0.1: Deep Dark; from 0.4: basalt deltas; between: ordinary caves | Placeholder (Adrian, 2026-10-30: Deep Dark scaled back, some basalt) | `world/biomes.json` → `split` → `tools/biome_layout.py` | y −52: Deep Dark 14 %, basalt 7 %, ordinary 9 % of land (was 30 % Deep Dark) |
| Cave zone types | Lush Caves grass, bug, fairy, poison, water; Dripstone rock, ground, steel, fairy, psychic, dragon; Deep Dark ghost, dark, steel, poison, psychic, rock; Basalt fire, rock, ground, steel, dark | Placeholder | `world/zones.json` → caves → `types` | Fills each cave zone up to its `lines` from the lines that spawn nearly anywhere |
| Gamerules in the template | `doMobSpawning false` | Decided (Adrian, 2026-10-28; may be reverted later) | `world/world.json` → `gamerules` | Pokémon spawning is Cobblemon's own `doPokemonSpawning` |
| Border margin | 96 blocks of sea past the outermost coast | Placeholder | `world/world.json` | |
| Pregeneration circle | radius 1,700 around 0,0 | Tooling | `world/world.json` | Must cover the land plus `border_margin`; `make_world.py` stops if it doesn't |
| Server heap for smoke test | 4 GB | Tooling | `tools/smoke_test.py` | Not a gameplay value |
| 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/` |
| Peaceful start | on Button Isle a wild Pokémon only fights a player who hit it first: no hunting weaker trainers, no anger from failed catches, other attacks cancelled (Adrian, 2026-11-10) | Decided | `tuning/server.json` → `peaceful_zones`, `zone/PeacefulZones.kt` | A fail-safe for a player who lost everything |
| Poké Ball from the start island | 4 apricorns of any colour + coal or charcoal → 1 Poké Ball; Cobblemon's 4 red apricorns + copper ingot → 4 stays (Adrian, 2026-11-10: the start island must make at least one kind of ball) | Placeholder | `datapacks/core/data/cobblesurvival/recipe/poke_ball_from_coal.json` | Button Isle has about 250 apricorns on its trees and 11,600 coal ore, no copper; `tools/world_report.py` checks for at least 100 and 500 |
| Battles between players | never cost a Pokémon: one that faints there stays fainted until healed (Adrian, 2026-11-10) | Decided | `defaultconfigs/cobblehardcoremon/server.toml` → `trackPlayerBattles = false`; `permadeath/Permadeath.kt`, `mixin/HardcoreBattlesMixin.java` for worlds made before | |
| Items given a source (Adrian, 2026-11-10: every item with a use is obtainable) | Shell Helmet from Shelmet (10 %), Malicious Armor from Armarouge (5 %), Tasty Tail from Slowpoke (10 %), Chameleon Molt from Kecleon (15 %), Soul Sprout from Lampent (10 %), the terrain flowers from Comfey and the Oricorio flowers from Cutiefly (5 % each); recipes for the Cherish Ball (pink and red apricorns, gold), Ancient Origin Ball (Master Ball in tumblestone) and Netherite Upgrade template (diamonds, netherite scrap, obsidian) | Placeholder | `datapacks/core/data/cobblesurvival/species_additions/`, `.../recipe/` | `tools/item_audit.py` keeps it so |