using Godot; namespace IslaApocalypse.Tools { /// /// A print-and-quit diagnostic: reports this engine build's /// CONSTRUCTOR DEFAULTS, and checks them against the values the ported terrain expects. /// /// ═══ WHY THIS EXISTS ═══ /// /// The reference prototype set only three noise properties — NoiseType, Seed, Frequency — and /// left fractal type, octaves, gain, lacunarity and weighted-strength untouched. So the island's /// entire fractal character was Godot 4.7.1's CONSTRUCTOR DEFAULTS, not code. Nothing in that /// repo recorded what they were. (chat1/00 §4.1.) /// /// now pins every one of them explicitly, so the terrain no longer /// depends on an engine default. This probe is the other half of that guarantee: it makes a /// silent default change VISIBLE on an engine upgrade instead of quietly reshaping the island. /// /// Run it after any Godot version bump: /// /// Godot_v4.7.2-stable_mono_linux.x86_64 --headless \ /// --path ~/celerNexus/islaApocalypse-v2 res://Tools/Scenes/NoiseDefaultsProbe.tscn /// /// Exits non-zero if this engine's defaults have drifted from the recorded baseline — so it /// works as a pre-flight check, not just by eye. A non-zero exit is NOT "the terrain is broken": /// the terrain is pinned and fine. It means the baseline note below needs updating, and that /// anyone reading old code which relied on defaults should be warned. /// public partial class NoiseDefaultsProbe : Node { // The defaults measured on Godot 4.7.2.stable.mono (this project's pinned engine), which // match the Godot 4 documented defaults the reference implicitly rode on 4.7.1. private const FastNoiseLite.FractalTypeEnum BaselineFractalType = FastNoiseLite.FractalTypeEnum.Fbm; private const int BaselineOctaves = 5; private const float BaselineGain = 0.5f; private const float BaselineLacunarity = 2.0f; private const float BaselineWeightedStrength = 0.0f; public override void _Ready() { var n = new FastNoiseLite(); GD.Print("=================================================================="); GD.Print(" FastNoiseLite CONSTRUCTOR DEFAULTS — this engine build"); GD.Print("=================================================================="); GD.Print($"engine : {Engine.GetVersionInfo()["string"]}"); GD.Print("------------------------------------------------------------------"); GD.Print($"NoiseType : {n.NoiseType}"); GD.Print($"Frequency : {n.Frequency}"); GD.Print($"FractalType : {n.FractalType}"); GD.Print($"FractalOctaves : {n.FractalOctaves}"); GD.Print($"FractalGain : {n.FractalGain}"); GD.Print($"FractalLacunarity : {n.FractalLacunarity}"); GD.Print($"FractalWeightedStrength : {n.FractalWeightedStrength}"); GD.Print($"Seed : {n.Seed}"); GD.Print("------------------------------------------------------------------"); GD.Print(" DRIFT CHECK vs the recorded 4.7.2 baseline"); GD.Print("------------------------------------------------------------------"); bool drift = false; drift |= Check("FractalType", n.FractalType.ToString(), BaselineFractalType.ToString()); drift |= Check("FractalOctaves", n.FractalOctaves.ToString(), BaselineOctaves.ToString()); drift |= Check("FractalGain", n.FractalGain.ToString(), BaselineGain.ToString()); drift |= Check("FractalLacunarity", n.FractalLacunarity.ToString(), BaselineLacunarity.ToString()); drift |= Check("FractalWeightedStrength", n.FractalWeightedStrength.ToString(), BaselineWeightedStrength.ToString()); GD.Print("------------------------------------------------------------------"); GD.Print(drift ? " ⚠ DRIFT — this engine's defaults differ from the recorded baseline.\n" + " The PORTED TERRAIN IS UNAFFECTED: TerrainNoise pins every value explicitly.\n" + " Update the baseline constants in this probe, and note the delta." : " ✓ NO DRIFT — defaults match the recorded baseline."); GD.Print("=================================================================="); GetTree().Quit(drift ? 1 : 0); } private static bool Check(string name, string actual, string expected) { bool differs = actual != expected; GD.Print($" {(differs ? "✗" : "✓")} {name,-24} actual={actual,-12} baseline={expected}"); return differs; } } }