feat: curve v2 — per-seed spike normalization, u4 wall, 420 m ceiling (terrain-water task 06)
Per the task-05 hillshade-gate verdict: lowlands frozen (identity/toe/ rise/shoulder/plateau byte-unchanged); the spike now maps [t4, hMaxSeed] — each seed's own raw pre-curve maximum, computed in a new pass-1 over GenerateTopography — onto the peak band, so every island reaches the ceiling (v1's pooled-max domain left mid-range seeds at 110–175 m). Spike stiffened to 0.1u + 0.9u^4; peak cap raised to 420 m above sea (1.82869). Degenerate near-flat guard: spike domain floored at t4 + 0.01. The curve is now SEED-DEPENDENT: hMaxSeed is a pure parameter (D-035), recorded in TCRV (field renamed HMaxCal -> SpikeMax, same byte layout; v1 semantics = pooled max, v2 = per-seed), and the monotonicity assertion runs per generation against the effective curve. TerrainCurve gate: "off"|"v2" (default v2); "v1" retired with a loud config error (task-05 blueprints are regenerable). Classify path untouched — the biome/water oracle must hold unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
46a991f352
commit
ac67c27952
7 changed files with 116 additions and 62 deletions
|
|
@ -200,8 +200,8 @@ public partial class RoundTripHarness : Node
|
|||
}
|
||||
var ca = a.TerrainCurve; var cb = b.TerrainCurve;
|
||||
bool same = ca.Version == cb.Version;
|
||||
float[] fa = { ca.T1, ca.T2, ca.T3, ca.T4, ca.HMaxCal, ca.Sea, ca.OrangeCeil, ca.RedCeil, ca.PlateauLo, ca.PlateauHi, ca.PeakCap, ca.TailSlope };
|
||||
float[] fb = { cb.T1, cb.T2, cb.T3, cb.T4, cb.HMaxCal, cb.Sea, cb.OrangeCeil, cb.RedCeil, cb.PlateauLo, cb.PlateauHi, cb.PeakCap, cb.TailSlope };
|
||||
float[] fa = { ca.T1, ca.T2, ca.T3, ca.T4, ca.SpikeMax, ca.Sea, ca.OrangeCeil, ca.RedCeil, ca.PlateauLo, ca.PlateauHi, ca.PeakCap, ca.TailSlope };
|
||||
float[] fb = { cb.T1, cb.T2, cb.T3, cb.T4, cb.SpikeMax, cb.Sea, cb.OrangeCeil, cb.RedCeil, cb.PlateauLo, cb.PlateauHi, cb.PeakCap, cb.TailSlope };
|
||||
for (int i = 0; i < fa.Length; i++)
|
||||
if (System.BitConverter.SingleToInt32Bits(fa[i]) != System.BitConverter.SingleToInt32Bits(fb[i])) same = false;
|
||||
if (!same) { GD.PrintErr("[Harness] TCRV fields differ."); return false; }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue