Files
cobblemon-survival-pack/docs/balance.md
T
claudeandClaude Opus 5.5 70cc2cad50 Phase 5: soft gates instead of guardian flags, shoulder passives
Adrian (2026-10-31): HMs abilities stay open; the ones that get around
zone hazards get soft gates (materials or a high-level Pokemon, never
flags; gifted Pokemon and materials count the same); party passives from
shoulder Pokemon; Cobblebase skills and the Power Block move to soft
gates too.

- Gates: a zone gate passes at the top of the zone's band or while the
  Pokemon holds the zone's material (or a harder zone's). Cobblebase
  skills check the pastured Pokemon and tell the owner once what it needs.
- Progress record, guardian unlock messages, the Power Block placement
  gate and /cobblesurvival progress removed; the Power Block's recipe
  already needs Jungle redstone.
- HmsGate: switches off gated HMs auras (Flash, Dive, Mist, Rock Climb,
  Magnet Rise, Lucky Chant, Lava Plume) whose Pokemon doesn't pass.
- ShoulderPassives: type-based effects from shoulder Pokemon, hazard
  ones (warmth, frigidness, water breathing, night vision) gated.
- Self-tests for all of it; docs, balance table, Phase 5 checklist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 13:41:04 +01:00

16 KiB
Raw Blame History

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.

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 Decided (Adrian, 2026-10-30) world/zones.json → species Basalt's own lines were all too big for its caves
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
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, 1.5× size, uncatchable Decided (Adrian, 2026-10-30) tools/zone_spawns.py (GUARDIAN_*), world/zones.json → guardian.species
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 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
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 50 %, copper 20 %, iron 20 %, redstone 20 %, lapis 15 %, gold 30 %, emerald 15 %, thunder stone 3 %, leaf stone 4 %, water stone 4 %, sun stone 2 %, fire stone 8 %, ice stone 6 %, dawn stone 4 %; cave floor (8 columns searched): amethyst 50 %, diamond 15 %, quartz 50 %, netherite 6 %, shiny stone 15 %, moon stone 25 %, dusk stone 10 %. Radius 0–1 (evolution stones and netherite one block), 80 % filled Placeholder (Adrian, 2026-10-30: small on the surface) world/zones.json → ores → nodes
Underground veins (surface tiers) radius 2–4 (stones 1–2), spacing 6–11 chunks between candidate chunks, 70 % filled, 1–2 tries per candidate chunk Placeholder (Adrian, 2026-10-30: larger but harder to find) world/zones.json → ores → veins Ore blocks in the template (2026-10-31, nodes and veins): copper 33,211, iron 18,275, quartz 13,366, coal 7,363, lapis 6,092, amethyst 3,640, redstone 3,406, gold 2,223, emerald 1,404, shiny stone 1,270, diamond 1,078, moon stone 970, sun stone 684, thunder stone 667, ice stone 435, dusk stone 425, water stone 404, dawn stone 380, leaf stone 352, fire stone 317, netherite 290. 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
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
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).