Phase 3: Alpha guardians, one per zone, back 5 hours after a defeat
CI / build-and-smoke-test (push) Failing after 7m6s

- 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>
This commit is contained in:
claudeandClaude Opus 5.5 committed 2026-10-29 19:01:21 +01:00
1 parent 398301f0be
commit 73fe71918f
25 files changed
+607 -23

No files matched your search

@@ -0,0 +1,17 @@
{
"_comment": "Generated by tools/zone_spawns.py from world/zones.json; do not edit by hand.",
"zone": "button_isle",
"pokemon": "pachirisu level=15 uncatchable=yes",
"scale": 1.5,
"drops": [
{
"item": "cobblemon:poke_ball",
"count": 10
},
{
"item": "cobblemon:potion",
"count": 4
}
],
"respawn_hours": 5
}
@@ -0,0 +1,17 @@
{
"_comment": "Generated by tools/zone_spawns.py from world/zones.json; do not edit by hand.",
"zone": "deep_dark",
"pokemon": "dusknoir level=65 uncatchable=yes",
"scale": 1.5,
"drops": [
{
"item": "cobblemon:icy_rock",
"count": 3
},
{
"item": "cobblemon:exp_candy_l",
"count": 2
}
],
"respawn_hours": 5
}
@@ -0,0 +1,17 @@
{
"_comment": "Generated by tools/zone_spawns.py from world/zones.json; do not edit by hand.",
"zone": "deep_sea",
"pokemon": "kingdra level=55 uncatchable=yes",
"scale": 1.5,
"drops": [
{
"item": "cobblemon:mystic_water",
"count": 1
},
{
"item": "cobblemon:exp_candy_m",
"count": 3
}
],
"respawn_hours": 5
}
@@ -0,0 +1,17 @@
{
"_comment": "Generated by tools/zone_spawns.py from world/zones.json; do not edit by hand.",
"zone": "frostpeak",
"pokemon": "tyranitar level=60 uncatchable=yes",
"scale": 1.5,
"drops": [
{
"item": "cobblemon:icy_rock",
"count": 3
},
{
"item": "cobblemon:exp_candy_l",
"count": 2
}
],
"respawn_hours": 5
}
@@ -0,0 +1,17 @@
{
"_comment": "Generated by tools/zone_spawns.py from world/zones.json; do not edit by hand.",
"zone": "highlands",
"pokemon": "cinderace level=40 uncatchable=yes",
"scale": 1.5,
"drops": [
{
"item": "cobblemon:icy_rock",
"count": 3
},
{
"item": "cobblemon:super_potion",
"count": 4
}
],
"respawn_hours": 5
}
@@ -0,0 +1,17 @@
{
"_comment": "Generated by tools/zone_spawns.py from world/zones.json; do not edit by hand.",
"zone": "jungle",
"pokemon": "tangrowth level=35 uncatchable=yes",
"scale": 1.5,
"drops": [
{
"item": "cobblemon:pecha_berry",
"count": 8
},
{
"item": "cobblemon:exp_candy_m",
"count": 2
}
],
"respawn_hours": 5
}
@@ -0,0 +1,17 @@
{
"_comment": "Generated by tools/zone_spawns.py from world/zones.json; do not edit by hand.",
"zone": "mire",
"pokemon": "arcanine level=43 uncatchable=yes",
"scale": 1.5,
"drops": [
{
"item": "cobblemon:icy_rock",
"count": 3
},
{
"item": "cobblemon:super_potion",
"count": 4
}
],
"respawn_hours": 5
}
@@ -0,0 +1,17 @@
{
"_comment": "Generated by tools/zone_spawns.py from world/zones.json; do not edit by hand.",
"zone": "southwold",
"pokemon": "sigilyph level=23 uncatchable=yes",
"scale": 1.5,
"drops": [
{
"item": "cobblemon:great_ball",
"count": 6
},
{
"item": "cobblemon:exp_candy_s",
"count": 4
}
],
"respawn_hours": 5
}
@@ -0,0 +1,17 @@
{
"_comment": "Generated by tools/zone_spawns.py from world/zones.json; do not edit by hand.",
"zone": "sunscorch",
"pokemon": "delphox level=50 uncatchable=yes",
"scale": 1.5,
"drops": [
{
"item": "cobblemon:heat_rock",
"count": 3
},
{
"item": "cobblemon:exp_candy_l",
"count": 2
}
],
"respawn_hours": 5
}
@@ -0,0 +1,17 @@
{
"_comment": "Generated by tools/zone_spawns.py from world/zones.json; do not edit by hand.",
"zone": "westmarch",
"pokemon": "carbink level=30 uncatchable=yes",
"scale": 1.5,
"drops": [
{
"item": "cobblemon:pecha_berry",
"count": 8
},
{
"item": "cobblemon:exp_candy_m",
"count": 2
}
],
"respawn_hours": 5
}