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>
1056 lines
23 KiB
JSON
1056 lines
23 KiB
JSON
{
|
|
"_comment": "Zone plan for Phase 3 (model approved by Adrian 2026-10-29; levels are placeholders, see docs/balance.md). tools/zone_layout.py assigns each surface cell of the island to the first zone whose rule matches, in this order, and renders build/zone-map.png. Rules: 'within' = distance from 0,0 in blocks; 'biomes' = cells of these biomes, clusters smaller than min_cells dropped, plus 'absorb' = cells of other biomes within that many blocks of the cluster; 'region' = what is left, by half-plane (x/z bounds in blocks); 'water' = sea cells of these biomes, with 'beyond' only that many blocks or more from 0,0 (Adrian, 2026-11-09: the channels between the islands stay low level, the surrounding sea is high). Biomes in 'inherit' (rivers) take the zone of the land around them. Cave zones follow the cave biome everywhere under the island and are not drawn. 'lines' = how many evolution lines tools/zone_spawns.py aims to give the zone (scaled to the lines available); 'species' pins a line to a zone by hand. 'guardian': the zone's Alpha guardian (tools/zone_spawns.py picks the strongest Pokémon spawning in the zone unless 'species' is given, at the band's top level + 5) and its drops, which help with the next zone; it stands at the zone's sample point and returns guardian_respawn_hours after it is beaten (Adrian, 2026-10-29: fixed spots, 5 hours). 'ores': Phase 4 ore tiers (tools/zone_ores.py writes Regenerating Ore Veins' config and the companion mod's node table from them). Each tier lives in exactly one zone, higher tiers in higher zones; Cobblemon's evolution stones are tiers too. Adrian (2026-10-30): small nodes on the surface, larger veins underground that are harder to find, and the cave zones' ores as nodes on the cave floor, not in the walls. 'nodes': 'chance' per chunk, 'radius' in blocks (0 = one block); cave tiers also 'tries' (columns searched per chunk) and 'y' (where their cave biome lies). 'veins' (surface tiers only, underground): 'radius', 'y', 'spacing' in chunks between candidate chunks, 'attempts'; 'stone'/'deepslate' split them into an upper vein (y >= 0) and a lower one, 'blocks' is a weighted list. 'regen_minutes' of real time, plus 'jitter', 'fill' (veins) and 'node_fill' (nodes bigger than one block) from 'ore_defaults'. 'wanderers': a wild Pokémon more than 'grace_levels' above the band of the zone it stands in despawns (Adrian, 2026-10-30: a Lv 61 from the Basalt Furnace turned up in the Lush Caves); not in battles, not while angry at someone, never a guardian. 'level_pressure': a Pokémon more than grace_levels above the band of the zone its trainer stands in gets per_level less experience per extra level, down to minimum (Exp. Candy and commands excepted).",
|
|
"min_cells": 6,
|
|
"inherit": [
|
|
"minecraft:river"
|
|
],
|
|
"guardian_respawn_hours": 5,
|
|
"level_pressure": {
|
|
"grace_levels": 5,
|
|
"per_level": 0.1,
|
|
"minimum": 0.1
|
|
},
|
|
"wanderers": {
|
|
"grace_levels": 10
|
|
},
|
|
"ore_defaults": {
|
|
"fill": 0.7,
|
|
"node_fill": 0.8,
|
|
"attempts": 1,
|
|
"jitter": 0.1
|
|
},
|
|
"ores": {
|
|
"coal": {
|
|
"zone": "button_isle",
|
|
"item": "minecraft:coal",
|
|
"stone": "minecraft:coal_ore",
|
|
"deepslate": "minecraft:deepslate_coal_ore",
|
|
"regen_minutes": 20,
|
|
"nodes": {
|
|
"chance": 0.3,
|
|
"radius": [
|
|
1,
|
|
2
|
|
]
|
|
},
|
|
"veins": {
|
|
"radius": [
|
|
3,
|
|
5
|
|
],
|
|
"y": [
|
|
-32,
|
|
100
|
|
],
|
|
"spacing": 8,
|
|
"attempts": 2
|
|
}
|
|
},
|
|
"copper": {
|
|
"zone": "southwold",
|
|
"item": "minecraft:raw_copper",
|
|
"stone": "minecraft:copper_ore",
|
|
"deepslate": "minecraft:deepslate_copper_ore",
|
|
"regen_minutes": 30,
|
|
"nodes": {
|
|
"chance": 0.12,
|
|
"radius": [
|
|
1,
|
|
2
|
|
]
|
|
},
|
|
"veins": {
|
|
"radius": [
|
|
3,
|
|
5
|
|
],
|
|
"y": [
|
|
-32,
|
|
100
|
|
],
|
|
"spacing": 10,
|
|
"attempts": 2
|
|
}
|
|
},
|
|
"iron": {
|
|
"zone": "westmarch",
|
|
"item": "minecraft:raw_iron",
|
|
"stone": "minecraft:iron_ore",
|
|
"deepslate": "minecraft:deepslate_iron_ore",
|
|
"regen_minutes": 40,
|
|
"nodes": {
|
|
"chance": 0.12,
|
|
"radius": [
|
|
1,
|
|
2
|
|
]
|
|
},
|
|
"veins": {
|
|
"radius": [
|
|
3,
|
|
5
|
|
],
|
|
"y": [
|
|
-48,
|
|
90
|
|
],
|
|
"spacing": 10,
|
|
"attempts": 2
|
|
}
|
|
},
|
|
"redstone": {
|
|
"zone": "jungle",
|
|
"item": "minecraft:redstone",
|
|
"stone": "minecraft:redstone_ore",
|
|
"deepslate": "minecraft:deepslate_redstone_ore",
|
|
"regen_minutes": 45,
|
|
"nodes": {
|
|
"chance": 0.12,
|
|
"radius": [
|
|
1,
|
|
2
|
|
]
|
|
},
|
|
"veins": {
|
|
"radius": [
|
|
3,
|
|
4
|
|
],
|
|
"y": [
|
|
-56,
|
|
60
|
|
],
|
|
"spacing": 12,
|
|
"attempts": 1
|
|
}
|
|
},
|
|
"lapis": {
|
|
"zone": "highlands",
|
|
"item": "minecraft:lapis_lazuli",
|
|
"stone": "minecraft:lapis_ore",
|
|
"deepslate": "minecraft:deepslate_lapis_ore",
|
|
"regen_minutes": 45,
|
|
"nodes": {
|
|
"chance": 0.09,
|
|
"radius": [
|
|
1,
|
|
2
|
|
]
|
|
},
|
|
"veins": {
|
|
"radius": [
|
|
3,
|
|
4
|
|
],
|
|
"y": [
|
|
-56,
|
|
80
|
|
],
|
|
"spacing": 12,
|
|
"attempts": 1
|
|
}
|
|
},
|
|
"gold": {
|
|
"zone": "sunscorch",
|
|
"item": "minecraft:raw_gold",
|
|
"stone": "minecraft:gold_ore",
|
|
"deepslate": "minecraft:deepslate_gold_ore",
|
|
"regen_minutes": 60,
|
|
"nodes": {
|
|
"chance": 0.18,
|
|
"radius": [
|
|
1,
|
|
2
|
|
]
|
|
},
|
|
"veins": {
|
|
"radius": [
|
|
3,
|
|
4
|
|
],
|
|
"y": [
|
|
-48,
|
|
120
|
|
],
|
|
"spacing": 9,
|
|
"attempts": 2
|
|
}
|
|
},
|
|
"emerald": {
|
|
"zone": "frostpeak",
|
|
"item": "minecraft:emerald",
|
|
"stone": "minecraft:emerald_ore",
|
|
"deepslate": "minecraft:deepslate_emerald_ore",
|
|
"regen_minutes": 75,
|
|
"nodes": {
|
|
"chance": 0.09,
|
|
"radius": [
|
|
1,
|
|
2
|
|
]
|
|
},
|
|
"veins": {
|
|
"radius": [
|
|
2,
|
|
3
|
|
],
|
|
"y": [
|
|
-16,
|
|
320
|
|
],
|
|
"spacing": 10,
|
|
"attempts": 2
|
|
}
|
|
},
|
|
"amethyst": {
|
|
"zone": "dripstone",
|
|
"item": "minecraft:amethyst_shard",
|
|
"blocks": [
|
|
[
|
|
"minecraft:amethyst_block",
|
|
3
|
|
],
|
|
[
|
|
"minecraft:budding_amethyst",
|
|
1
|
|
]
|
|
],
|
|
"regen_minutes": 120,
|
|
"nodes": {
|
|
"chance": 0.3,
|
|
"tries": 8,
|
|
"radius": [
|
|
1,
|
|
2
|
|
],
|
|
"y": [
|
|
0,
|
|
40
|
|
]
|
|
}
|
|
},
|
|
"diamond": {
|
|
"zone": "deep_dark",
|
|
"item": "minecraft:diamond",
|
|
"deepslate": "minecraft:deepslate_diamond_ore",
|
|
"regen_minutes": 90,
|
|
"nodes": {
|
|
"chance": 0.09,
|
|
"tries": 8,
|
|
"radius": [
|
|
1,
|
|
2
|
|
],
|
|
"y": [
|
|
-64,
|
|
-24
|
|
]
|
|
}
|
|
},
|
|
"quartz": {
|
|
"zone": "basalt",
|
|
"item": "minecraft:quartz",
|
|
"blocks": [
|
|
[
|
|
"minecraft:nether_quartz_ore",
|
|
1
|
|
]
|
|
],
|
|
"regen_minutes": 60,
|
|
"nodes": {
|
|
"chance": 0.3,
|
|
"tries": 8,
|
|
"radius": [
|
|
1,
|
|
2
|
|
],
|
|
"y": [
|
|
-64,
|
|
40
|
|
]
|
|
}
|
|
},
|
|
"netherite": {
|
|
"zone": "basalt",
|
|
"item": "minecraft:ancient_debris",
|
|
"blocks": [
|
|
[
|
|
"minecraft:ancient_debris",
|
|
1
|
|
]
|
|
],
|
|
"regen_minutes": 180,
|
|
"nodes": {
|
|
"chance": 0.036,
|
|
"tries": 8,
|
|
"radius": [
|
|
0,
|
|
1
|
|
],
|
|
"y": [
|
|
-64,
|
|
40
|
|
]
|
|
}
|
|
},
|
|
"thunder_stone": {
|
|
"zone": "westmarch",
|
|
"item": "cobblemon:thunder_stone",
|
|
"stone": "cobblemon:thunder_stone_ore",
|
|
"deepslate": "cobblemon:deepslate_thunder_stone_ore",
|
|
"regen_minutes": 60,
|
|
"nodes": {
|
|
"chance": 0.018,
|
|
"radius": [
|
|
0,
|
|
1
|
|
]
|
|
},
|
|
"veins": {
|
|
"radius": [
|
|
2,
|
|
3
|
|
],
|
|
"y": [
|
|
-48,
|
|
100
|
|
],
|
|
"spacing": 14,
|
|
"attempts": 1
|
|
}
|
|
},
|
|
"shiny_stone": {
|
|
"zone": "lush_caves",
|
|
"item": "cobblemon:shiny_stone",
|
|
"stone": "cobblemon:shiny_stone_ore",
|
|
"deepslate": "cobblemon:deepslate_shiny_stone_ore",
|
|
"regen_minutes": 60,
|
|
"nodes": {
|
|
"chance": 0.09,
|
|
"tries": 8,
|
|
"radius": [
|
|
1,
|
|
2
|
|
],
|
|
"y": [
|
|
-16,
|
|
40
|
|
]
|
|
}
|
|
},
|
|
"leaf_stone": {
|
|
"zone": "jungle",
|
|
"item": "cobblemon:leaf_stone",
|
|
"stone": "cobblemon:leaf_stone_ore",
|
|
"deepslate": "cobblemon:deepslate_leaf_stone_ore",
|
|
"regen_minutes": 60,
|
|
"nodes": {
|
|
"chance": 0.024,
|
|
"radius": [
|
|
0,
|
|
1
|
|
]
|
|
},
|
|
"veins": {
|
|
"radius": [
|
|
2,
|
|
3
|
|
],
|
|
"y": [
|
|
-48,
|
|
100
|
|
],
|
|
"spacing": 14,
|
|
"attempts": 1
|
|
}
|
|
},
|
|
"water_stone": {
|
|
"zone": "mire",
|
|
"item": "cobblemon:water_stone",
|
|
"stone": "cobblemon:water_stone_ore",
|
|
"deepslate": "cobblemon:deepslate_water_stone_ore",
|
|
"regen_minutes": 60,
|
|
"nodes": {
|
|
"chance": 0.024,
|
|
"radius": [
|
|
0,
|
|
1
|
|
]
|
|
},
|
|
"veins": {
|
|
"radius": [
|
|
2,
|
|
3
|
|
],
|
|
"y": [
|
|
-48,
|
|
100
|
|
],
|
|
"spacing": 14,
|
|
"attempts": 1
|
|
}
|
|
},
|
|
"moon_stone": {
|
|
"zone": "dripstone",
|
|
"item": "cobblemon:moon_stone",
|
|
"blocks": [
|
|
[
|
|
"cobblemon:dripstone_moon_stone_ore",
|
|
1
|
|
],
|
|
[
|
|
"cobblemon:moon_stone_ore",
|
|
1
|
|
],
|
|
[
|
|
"cobblemon:deepslate_moon_stone_ore",
|
|
1
|
|
]
|
|
],
|
|
"regen_minutes": 60,
|
|
"nodes": {
|
|
"chance": 0.15,
|
|
"tries": 8,
|
|
"radius": [
|
|
1,
|
|
2
|
|
],
|
|
"y": [
|
|
0,
|
|
40
|
|
]
|
|
}
|
|
},
|
|
"sun_stone": {
|
|
"zone": "highlands",
|
|
"item": "cobblemon:sun_stone",
|
|
"stone": "cobblemon:sun_stone_ore",
|
|
"deepslate": "cobblemon:deepslate_sun_stone_ore",
|
|
"regen_minutes": 60,
|
|
"nodes": {
|
|
"chance": 0.012,
|
|
"radius": [
|
|
0,
|
|
1
|
|
]
|
|
},
|
|
"veins": {
|
|
"radius": [
|
|
2,
|
|
3
|
|
],
|
|
"y": [
|
|
-48,
|
|
100
|
|
],
|
|
"spacing": 14,
|
|
"attempts": 1
|
|
}
|
|
},
|
|
"fire_stone": {
|
|
"zone": "sunscorch",
|
|
"item": "cobblemon:fire_stone",
|
|
"stone": "cobblemon:fire_stone_ore",
|
|
"deepslate": "cobblemon:deepslate_fire_stone_ore",
|
|
"regen_minutes": 60,
|
|
"nodes": {
|
|
"chance": 0.048,
|
|
"radius": [
|
|
0,
|
|
1
|
|
]
|
|
},
|
|
"veins": {
|
|
"radius": [
|
|
2,
|
|
3
|
|
],
|
|
"y": [
|
|
-48,
|
|
120
|
|
],
|
|
"spacing": 12,
|
|
"attempts": 2
|
|
}
|
|
},
|
|
"ice_stone": {
|
|
"zone": "frostpeak",
|
|
"item": "cobblemon:ice_stone",
|
|
"stone": "cobblemon:ice_stone_ore",
|
|
"deepslate": "cobblemon:deepslate_ice_stone_ore",
|
|
"regen_minutes": 60,
|
|
"nodes": {
|
|
"chance": 0.036,
|
|
"radius": [
|
|
0,
|
|
1
|
|
]
|
|
},
|
|
"veins": {
|
|
"radius": [
|
|
2,
|
|
3
|
|
],
|
|
"y": [
|
|
-16,
|
|
320
|
|
],
|
|
"spacing": 12,
|
|
"attempts": 2
|
|
}
|
|
},
|
|
"dawn_stone": {
|
|
"zone": "frostpeak",
|
|
"item": "cobblemon:dawn_stone",
|
|
"stone": "cobblemon:dawn_stone_ore",
|
|
"deepslate": "cobblemon:deepslate_dawn_stone_ore",
|
|
"regen_minutes": 75,
|
|
"nodes": {
|
|
"chance": 0.024,
|
|
"radius": [
|
|
0,
|
|
1
|
|
]
|
|
},
|
|
"veins": {
|
|
"radius": [
|
|
2,
|
|
3
|
|
],
|
|
"y": [
|
|
-16,
|
|
320
|
|
],
|
|
"spacing": 13,
|
|
"attempts": 2
|
|
}
|
|
},
|
|
"dusk_stone": {
|
|
"zone": "deep_dark",
|
|
"item": "cobblemon:dusk_stone",
|
|
"deepslate": "cobblemon:deepslate_dusk_stone_ore",
|
|
"regen_minutes": 75,
|
|
"nodes": {
|
|
"chance": 0.06,
|
|
"tries": 8,
|
|
"radius": [
|
|
1,
|
|
2
|
|
],
|
|
"y": [
|
|
-64,
|
|
-24
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"species": {
|
|
"durant": "basalt",
|
|
"torkoal": "basalt",
|
|
"heatmor": "basalt",
|
|
"ditto": {
|
|
"zone": "deep_dark",
|
|
"all_entries": true
|
|
}
|
|
},
|
|
"zones": [
|
|
{
|
|
"id": "button_isle",
|
|
"guardian": {
|
|
"drops": [
|
|
[
|
|
"cobblemon:poke_ball",
|
|
10
|
|
],
|
|
[
|
|
"cobblemon:potion",
|
|
4
|
|
]
|
|
]
|
|
},
|
|
"lines": 19,
|
|
"name": "Button Isle",
|
|
"levels": [
|
|
2,
|
|
10
|
|
],
|
|
"hazard": "none",
|
|
"color": "#a6d96a",
|
|
"rule": {
|
|
"within": 300
|
|
}
|
|
},
|
|
{
|
|
"id": "frostpeak",
|
|
"guardian": {
|
|
"species": "abomasnow",
|
|
"drops": [
|
|
[
|
|
"cobblemon:icy_rock",
|
|
3
|
|
],
|
|
[
|
|
"cobblemon:exp_candy_l",
|
|
2
|
|
]
|
|
]
|
|
},
|
|
"lines": 30,
|
|
"name": "Frostpeak Range",
|
|
"levels": [
|
|
40,
|
|
55
|
|
],
|
|
"hazard": "cold (Cold Sweat): needs wool insulation",
|
|
"color": "#f2f7ff",
|
|
"rule": {
|
|
"biomes": [
|
|
"minecraft:jagged_peaks"
|
|
],
|
|
"absorb": {
|
|
"minecraft:windswept_hills": 96,
|
|
"minecraft:cherry_grove": 144
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "sunscorch",
|
|
"guardian": {
|
|
"species": "flygon",
|
|
"drops": [
|
|
[
|
|
"cobblemon:heat_rock",
|
|
3
|
|
],
|
|
[
|
|
"cobblemon:exp_candy_l",
|
|
2
|
|
]
|
|
]
|
|
},
|
|
"lines": 25,
|
|
"name": "Sunscorch",
|
|
"levels": [
|
|
30,
|
|
45
|
|
],
|
|
"hazard": "heat (Cold Sweat): needs heat insulation",
|
|
"color": "#f4a443",
|
|
"rule": {
|
|
"biomes": [
|
|
"minecraft:desert",
|
|
"minecraft:badlands"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"id": "mire",
|
|
"guardian": {
|
|
"drops": [
|
|
[
|
|
"cobblemon:icy_rock",
|
|
3
|
|
],
|
|
[
|
|
"cobblemon:super_potion",
|
|
4
|
|
]
|
|
]
|
|
},
|
|
"lines": 25,
|
|
"name": "Mangrove Mire",
|
|
"levels": [
|
|
25,
|
|
38
|
|
],
|
|
"hazard": "poison area effect (companion mod)",
|
|
"color": "#3cb5a0",
|
|
"rule": {
|
|
"biomes": [
|
|
"minecraft:mangrove_swamp"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"id": "jungle",
|
|
"guardian": {
|
|
"drops": [
|
|
[
|
|
"cobblesurvival:mire_waders",
|
|
1
|
|
],
|
|
[
|
|
"cobblemon:pecha_berry",
|
|
4
|
|
],
|
|
[
|
|
"cobblemon:exp_candy_m",
|
|
2
|
|
]
|
|
]
|
|
},
|
|
"lines": 30,
|
|
"name": "Verdant Jungle",
|
|
"levels": [
|
|
18,
|
|
30
|
|
],
|
|
"hazard": "none (warm and humid, below Cold Sweat's damage)",
|
|
"color": "#5a8f1e",
|
|
"rule": {
|
|
"biomes": [
|
|
"minecraft:jungle"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"id": "highlands",
|
|
"guardian": {
|
|
"species": "mudsdale",
|
|
"drops": [
|
|
[
|
|
"cobblemon:icy_rock",
|
|
3
|
|
],
|
|
[
|
|
"cobblemon:super_potion",
|
|
4
|
|
]
|
|
]
|
|
},
|
|
"lines": 35,
|
|
"name": "Highland Meadows",
|
|
"levels": [
|
|
25,
|
|
35
|
|
],
|
|
"hazard": "none",
|
|
"color": "#e3b7d6",
|
|
"rule": {
|
|
"region": {
|
|
"z_max": 0,
|
|
"x_min": -250
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "westmarch",
|
|
"guardian": {
|
|
"drops": [
|
|
[
|
|
"cobblesurvival:mire_waders",
|
|
1
|
|
],
|
|
[
|
|
"cobblemon:pecha_berry",
|
|
4
|
|
],
|
|
[
|
|
"cobblemon:exp_candy_m",
|
|
2
|
|
]
|
|
]
|
|
},
|
|
"lines": 35,
|
|
"name": "Westmarch",
|
|
"levels": [
|
|
15,
|
|
25
|
|
],
|
|
"hazard": "none",
|
|
"color": "#2f8f4e",
|
|
"rule": {
|
|
"region": {
|
|
"z_max": 0,
|
|
"x_max": -250
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "southwold",
|
|
"guardian": {
|
|
"species": "pinsir",
|
|
"drops": [
|
|
[
|
|
"cobblemon:great_ball",
|
|
6
|
|
],
|
|
[
|
|
"cobblemon:exp_candy_s",
|
|
4
|
|
]
|
|
]
|
|
},
|
|
"lines": 35,
|
|
"name": "Southwold",
|
|
"levels": [
|
|
8,
|
|
18
|
|
],
|
|
"hazard": "none",
|
|
"color": "#7cc576",
|
|
"rule": {
|
|
"region": {
|
|
"z_min": 0
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "deep_sea",
|
|
"guardian": {
|
|
"drops": [
|
|
[
|
|
"cobblemon:mystic_water",
|
|
1
|
|
],
|
|
[
|
|
"cobblemon:exp_candy_m",
|
|
3
|
|
]
|
|
]
|
|
},
|
|
"lines": 20,
|
|
"name": "Deep Sea",
|
|
"levels": [
|
|
30,
|
|
50
|
|
],
|
|
"hazard": "none",
|
|
"color": "#1f4e8c",
|
|
"rule": {
|
|
"water": [
|
|
"minecraft:ocean",
|
|
"minecraft:lukewarm_ocean",
|
|
"minecraft:warm_ocean",
|
|
"minecraft:deep_ocean",
|
|
"minecraft:deep_lukewarm_ocean"
|
|
],
|
|
"beyond": 1500
|
|
}
|
|
},
|
|
{
|
|
"id": "shallows",
|
|
"lines": 30,
|
|
"name": "Shallows",
|
|
"levels": [
|
|
5,
|
|
20
|
|
],
|
|
"hazard": "none",
|
|
"color": "#5aa9e6",
|
|
"rule": {
|
|
"water": [
|
|
"minecraft:river",
|
|
"minecraft:beach",
|
|
"minecraft:ocean",
|
|
"minecraft:lukewarm_ocean",
|
|
"minecraft:warm_ocean",
|
|
"minecraft:deep_ocean",
|
|
"minecraft:deep_lukewarm_ocean"
|
|
]
|
|
}
|
|
}
|
|
],
|
|
"caves": [
|
|
{
|
|
"id": "lush_caves",
|
|
"types": [
|
|
"grass",
|
|
"bug",
|
|
"fairy",
|
|
"poison",
|
|
"water"
|
|
],
|
|
"lines": 20,
|
|
"name": "Lush Caves",
|
|
"biome": "minecraft:lush_caves",
|
|
"levels": [
|
|
12,
|
|
28
|
|
],
|
|
"hazard": "none"
|
|
},
|
|
{
|
|
"id": "dripstone",
|
|
"types": [
|
|
"rock",
|
|
"ground",
|
|
"steel",
|
|
"fairy",
|
|
"psychic",
|
|
"dragon"
|
|
],
|
|
"lines": 20,
|
|
"name": "Dripstone Depths",
|
|
"biome": "minecraft:dripstone_caves",
|
|
"levels": [
|
|
22,
|
|
38
|
|
],
|
|
"hazard": "none"
|
|
},
|
|
{
|
|
"id": "deep_dark",
|
|
"types": [
|
|
"ghost",
|
|
"dark",
|
|
"steel",
|
|
"poison",
|
|
"psychic",
|
|
"rock"
|
|
],
|
|
"guardian": {
|
|
"species": "regigigas",
|
|
"drops": [
|
|
[
|
|
"cobblemon:icy_rock",
|
|
3
|
|
],
|
|
[
|
|
"cobblemon:exp_candy_l",
|
|
2
|
|
]
|
|
]
|
|
},
|
|
"lines": 21,
|
|
"name": "Deep Dark",
|
|
"biome": "minecraft:deep_dark",
|
|
"levels": [
|
|
45,
|
|
60
|
|
],
|
|
"hazard": "darkness (vanilla sculk; no Warden)"
|
|
},
|
|
{
|
|
"id": "basalt",
|
|
"types": [
|
|
"fire",
|
|
"rock",
|
|
"ground",
|
|
"steel",
|
|
"dark"
|
|
],
|
|
"guardian": {
|
|
"species": "moltres",
|
|
"drops": [
|
|
[
|
|
"cobblemon:exp_candy_xl",
|
|
3
|
|
],
|
|
[
|
|
"minecraft:netherite_scrap",
|
|
2
|
|
]
|
|
]
|
|
},
|
|
"lines": 15,
|
|
"name": "Basalt Furnace",
|
|
"biome": "minecraft:basalt_deltas",
|
|
"levels": [
|
|
55,
|
|
70
|
|
],
|
|
"hazard": "heat (Cold Sweat)"
|
|
}
|
|
],
|
|
"homeless": {
|
|
"_comment": "Adrian, 2026-11-09: every implemented Pokemon must be obtainable. These lines only spawn in biomes the island doesn't have (savanna, frozen ocean, mushroom fields, ...), or not at all (Rotom). Each gets a home in the zone closest to its habitat, as a rare spawn at the zone's levels, on top of the zone's own lines (tools/zone_spawns.py). An entry with a form ('vulpix alolan') is a regional form that no line of the island brings (Adrian, 2026-11-09: those must be obtainable too).",
|
|
"bucket": "rare",
|
|
"weight": 10,
|
|
"zones": {
|
|
"southwold": [
|
|
"nidoranf",
|
|
"nidoranm",
|
|
"smoliv",
|
|
"meowth galarian",
|
|
"zigzagoon galarian"
|
|
],
|
|
"lush_caves": [
|
|
"foongus"
|
|
],
|
|
"westmarch": [
|
|
"dedenne",
|
|
"emolga",
|
|
"pineco",
|
|
"rotom",
|
|
"geodude alolan"
|
|
],
|
|
"jungle": [
|
|
"komala",
|
|
"pancham",
|
|
"stufful",
|
|
"slowpoke galarian"
|
|
],
|
|
"dripstone": [
|
|
"aron"
|
|
],
|
|
"highlands": [
|
|
"blitzle",
|
|
"doduo",
|
|
"diglett alolan",
|
|
"tauros paldean bull_breed=combat"
|
|
],
|
|
"mire": [
|
|
"hatenna",
|
|
"toedscool",
|
|
"tauros paldean bull_breed=aqua",
|
|
"stunfisk galarian"
|
|
],
|
|
"sunscorch": [
|
|
"girafarig",
|
|
"kangaskhan",
|
|
"litleo",
|
|
"tauros paldean bull_breed=blaze",
|
|
"growlithe hisuian"
|
|
],
|
|
"deep_sea": [
|
|
"piplup",
|
|
"seel",
|
|
"spheal"
|
|
],
|
|
"frostpeak": [
|
|
"bergmite",
|
|
"cetoddle",
|
|
"cubchoo",
|
|
"eiscue",
|
|
"stantler",
|
|
"swinub",
|
|
"sandshrew alolan",
|
|
"vulpix alolan",
|
|
"darumaka galarian",
|
|
"zorua hisuian"
|
|
],
|
|
"deep_dark": [
|
|
"impidimp",
|
|
"litwick"
|
|
],
|
|
"basalt": [
|
|
"charcadet"
|
|
],
|
|
"shallows": [
|
|
"qwilfish hisuian"
|
|
]
|
|
}
|
|
},
|
|
"dimensions": [
|
|
{
|
|
"id": "the_end",
|
|
"name": "The End",
|
|
"dimension": "minecraft:the_end",
|
|
"levels": [
|
|
50,
|
|
70
|
|
],
|
|
"hazard": "none",
|
|
"biome_tags": [
|
|
"#cobblemon:is_end",
|
|
"#minecraft:is_end"
|
|
],
|
|
"bucket": "common",
|
|
"line_weight": 10,
|
|
"rare_factor": 0.2,
|
|
"_comment": "Adrian, 2026-11-02: the End was barren. Every line Cobblemon spawns in End biomes spawns there too, at this band, on top of its island home (tools/zone_spawns.py). Cobblemon has them all uncommon or rare, and it rolls the bucket before the Pokemon, so they move to `bucket`; each line's heaviest entry weighs `line_weight`, Cobblemon's rare ones `rare_factor` of that."
|
|
}
|
|
]
|
|
}
|