feat: task-09 verdict — BALANCED becomes plain "v5", COMPACT retires (terrain-water task 10 prerequisite)

The documented one-liner the task-09 gate triggers: TerrainCurve gate
is now "off"|"v5" (default v5 = the BALANCED preset, id 2);
"v5-compact" retired with a verdict-specific error, "v5-balanced"
redirects to plain "v5". Knots/TCRV encoding unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Stewart Howe 2026-08-08 18:00:21 -04:00
parent 4797086a13
commit c71026fd94
3 changed files with 16 additions and 16 deletions

View file

@ -26,13 +26,12 @@ namespace IslaApocalypse.Core // Change this if your namespace is different
public static string SeaLevelModel = "flat"; public static string SeaLevelModel = "flat";
public static float SeaLevelValue = 0.15f; public static float SeaLevelValue = 0.15f;
// Height-redistribution curve (tasks 0509, graduation M-7): the task-09 taste // Height-redistribution curve (tasks 0510, graduation M-7): "v5" is the
// batch runs a tri-state — "v5-compact" (maximum lowland) vs "v5-balanced" // task-09 gate's winner — the BALANCED terraced ascent with corner easing and
// (task-07/08 lineage), both with the corner fixes; "off" is the raw legacy // modulated shelves; "off" is the raw legacy profile. "v1""v4" and the
// profile. The loser retires after the developer's gate and the winner becomes // taste-batch tri-state ("v5-compact" lost, "v5-balanced" became plain "v5")
// plain "v5". "v1""v4" retired. INTERIM default pending the verdict: // are retired. Default: v5.
// v5-balanced. public static string TerrainCurve = "v5";
public static string TerrainCurve = "v5-balanced";
public static void LoadConfig() public static void LoadConfig()
{ {
@ -107,10 +106,14 @@ namespace IslaApocalypse.Core // Change this if your namespace is different
if (data.ContainsKey("TerrainCurve")) if (data.ContainsKey("TerrainCurve"))
{ {
string curve = (string)data["TerrainCurve"]; string curve = (string)data["TerrainCurve"];
if (curve == "off" || curve == "v5-compact" || curve == "v5-balanced") if (curve == "off" || curve == "v5")
TerrainCurve = curve; TerrainCurve = curve;
else if (curve == "v5-balanced")
GD.PrintErr($"[ConfigManager] TerrainCurve 'v5-balanced' won the task-09 gate and is now plain \"v5\". Keeping '{TerrainCurve}'.");
else if (curve == "v5-compact")
GD.PrintErr($"[ConfigManager] TerrainCurve 'v5-compact' was retired by the task-09 verdict (BALANCED won). Keeping '{TerrainCurve}' — use \"v5\" or \"off\".");
else if (curve == "v1" || curve == "v2" || curve == "v3" || curve == "v4") else if (curve == "v1" || curve == "v2" || curve == "v3" || curve == "v4")
GD.PrintErr($"[ConfigManager] TerrainCurve '{curve}' was retired by a later recalibration (v5, task 09). Keeping '{TerrainCurve}' — use \"v5-compact\", \"v5-balanced\" or \"off\"."); GD.PrintErr($"[ConfigManager] TerrainCurve '{curve}' was retired by a later recalibration (v5, tasks 09/10). Keeping '{TerrainCurve}' — use \"v5\" or \"off\".");
else else
GD.PrintErr($"[ConfigManager] Unknown TerrainCurve '{curve}'. Keeping '{TerrainCurve}'."); GD.PrintErr($"[ConfigManager] Unknown TerrainCurve '{curve}'. Keeping '{TerrainCurve}'.");
} }

View file

@ -47,10 +47,9 @@ public static class HeightCurve
{ {
public const ushort VERSION = 5; public const ushort VERSION = 5;
public static readonly CurveKnots COMPACT = new CurveKnots(1, "compact", // The task-09 taste gate's WINNER: BALANCED (id 2). COMPACT retired with the
0.550982f, 0.646528f, 0.723145f, 0.784045f, 0.903025f, 1.003079f); // P65/77/84/88/94/97 // verdict; its knots survive only in the task-09 report/batch for the record.
public static readonly CurveKnots V5 = new CurveKnots(2, "balanced",
public static readonly CurveKnots BALANCED = new CurveKnots(2, "balanced",
0.515899f, 0.612157f, 0.710472f, 0.784045f, 0.962922f, 1.119118f); // P60/73/83/88/96/99 0.515899f, 0.612157f, 0.710472f, 0.784045f, 0.962922f, 1.119118f); // P60/73/83/88/96/99
// Fixed output anchors — storm ladder + ceiling (frozen). // Fixed output anchors — storm ladder + ceiling (frozen).

View file

@ -88,9 +88,7 @@ public partial class MapGenerator : TextureRect
this.CustomMinimumSize = new Vector2(MapSize, MapSize); this.CustomMinimumSize = new Vector2(MapSize, MapSize);
_heightMap = new float[MapSize, MapSize]; _heightMap = new float[MapSize, MapSize];
_curveKnots = ConfigManager.TerrainCurve == "v5-compact" ? HeightCurve.COMPACT _curveKnots = ConfigManager.TerrainCurve == "v5" ? HeightCurve.V5 : null;
: ConfigManager.TerrainCurve == "v5-balanced" ? HeightCurve.BALANCED
: null;
_curveOn = _curveKnots != null; _curveOn = _curveKnots != null;
// (The monotonicity assertion now runs inside GenerateTopography, against the // (The monotonicity assertion now runs inside GenerateTopography, against the
// effective per-seed curve, once hMaxSeed is known.) // effective per-seed curve, once hMaxSeed is known.)