Commit graph

5 commits

Author SHA1 Message Date
ae97e48229 feat: drainage-network promotion analysis — the river PLAN (terrain-water task 21, C0b part 1)
Pure analysis over the ERODED render map: changes zero terrain, adds zero water.
Priority-flood (task-03 family, Barnes heap+pit, 8-connected) with a one-ulp
epsilon so every filled pit keeps a strictly descending routing path — the ~16.5k
erosion pits route through; depressions >= 2 m deep and >= 10k px survive as
terminal basins (70 on the working seed). D8 flow directions on that routing
surface (D8 as a COMPUTATION, not the reverted carving use), Kahn-propagated flow
accumulation, then promotion: TRUE-ocean outlets (WBID 1 only — two of the first
draft's three 'sea-reaching' trunks actually ended in enclosed lagoons, which is
exactly the overclaim the gate must not inherit) ranked by drainage area, top ~3
with outlet separation become trunks; max-accumulation stems; mountain-exit from
sustained along-stem grade; lean deduped tributaries; lean endorheic terminals
credited with per-basin TOTAL inflow (acc at the deepest cell undercounts flat
lagoon beds 10x — measured).

Output: console report + a JSON plan sidecar next to the source blueprint —
deliberately NOT a blueprint section, so the plan cannot masquerade as realized
water. The source .dat is never written (md5-verified). Headless tool, ~21 s
analysis on 8K; RIVERPLAN_* env dials.

Seed 1280587109 findings for the gate: 3 ocean trunks spread west/north/east
(436k/409k/325k px); the island's five LARGEST systems (1.1M-2.3M px) are all
endorheic — three end in big enclosed lagoons (classify lakes, 19-20 m basins),
two in dry pans; 62.9% of land does not drain to the open ocean, the drainage
restatement of task 18's 'erosion cannot cut the lowlands'. The 2.27M-px giant
terminates in the SE lagoon ~1.1k px from the southernmost town (filed south
report, not enforced).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 18:06:21 -04:00
a7e6c17422 docs: BLUEPRINT_FORMAT.md + README updates for the v2 container (terrain-water task 02)
Byte-accurate v2 contract (magic/version, tagged sections, registered
FourCC table, validation rules, re-encode sentinels, extension path)
plus the v1 legacy summary — v1 stays live per the safety-net plan.
READMEs updated additively: parser dispatch, dual-write outputs,
harness usage, server params cross-check, wire-format hazard rewording
(u8 on v2 path, range-checked; append-only rule unchanged).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 07:31:03 -04:00
c305fd6565 feat: blueprint v2 envelope — writer, dual-write, round-trip harness (terrain-water task 02)
v2 tagged-section container (D-030): raw ISLA magic + u32 version gate,
[u32 tag][u64 length][payload] sections — params (resolved generation
inputs incl. impact centre), heights f32, biomes u8, towns with the
highway-node flag, four road tiers identified by tag not position.

- BlueprintFormat.cs: the single tag/constant registry.
- BlueprintWriter.WriteV2: blueprint-typed, callable outside a
  generation run; generator and harness are both just callers.
- ExportMapData dual-writes: v2 under the primary seed name, legacy v1
  beside it as _v1.dat (safety net; removal is a future task).
- MapDataParser: LoadMapDataFromPath entry point; v1 parse body
  extracted intact as LoadV1 (v2 reader lands in the next commit).
- RoundTripHarness scene: load v1 -> write v2 -> load v2 -> semantic
  equality, headless, seconds per cycle.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 07:24:08 -04:00
d72ffc0183 docs: bring all READMEs current with actual code (post-sweep-10 truth pass)
Every README was read first, checked against the code in its directory, then
rewritten to describe what the code actually does now.

Corrected throughout: map size is config-driven (8192 default) not a fixed
4096; chunks are 24x24x256 not 32x32; road carving is implemented for all four
tiers, not a 'next step'; Data/ and Resources/ are empty, not populated.

Also fixed MATH_MARCHING_CUBES.md, which documented the density sign convention
exactly backwards — it claimed positive was underground, where the code treats
positive as above the surface and counts a corner inside when density < iso.
Getting that backwards inverts every normal, a bug this project has hit before.

The root README now carries accurate run steps: F5 runs the map generator (not
the game), F6 on Scenes/Main.tscn runs the 3D world, and ChunkRadius is a load
radius that should be dropped to 4-8 while iterating.

Docs only. No code changed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 05:23:58 -04:00
7f0f43b5fb baseline: working salvaged prototype on Godot 4.7.1 (pre-F1)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 01:45:41 -04:00