islaApocalypse/Core/Scripts
beezm 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
..
BiomePalette.cs roads: enable Rugged+Trail carving + per-tier character (D-022) 2026-08-05 03:53:32 -04:00
BiomePalette.cs.uid baseline: working salvaged prototype on Godot 4.7.1 (pre-F1) 2026-08-05 01:45:41 -04:00
BlockData.cs baseline: working salvaged prototype on Godot 4.7.1 (pre-F1) 2026-08-05 01:45:41 -04:00
BlockData.cs.uid baseline: working salvaged prototype on Godot 4.7.1 (pre-F1) 2026-08-05 01:45:41 -04:00
BlockRegistry.cs baseline: working salvaged prototype on Godot 4.7.1 (pre-F1) 2026-08-05 01:45:41 -04:00
BlockRegistry.cs.uid baseline: working salvaged prototype on Godot 4.7.1 (pre-F1) 2026-08-05 01:45:41 -04:00
BlueprintFormat.cs feat: blueprint v2 envelope — writer, dual-write, round-trip harness (terrain-water task 02) 2026-08-06 07:24:08 -04:00
BlueprintWriter.cs feat: blueprint v2 envelope — writer, dual-write, round-trip harness (terrain-water task 02) 2026-08-06 07:24:08 -04:00
ChunkData.cs roads: enable Rugged+Trail carving + per-tier character (D-022) 2026-08-05 03:53:32 -04:00
ChunkData.cs.uid baseline: working salvaged prototype on Godot 4.7.1 (pre-F1) 2026-08-05 01:45:41 -04:00
ConfigManager.cs fix: restore comment marker on WorldSeed line (build blocker) 2026-08-05 22:43:19 -04:00
ConfigManager.cs.uid baseline: working salvaged prototype on Godot 4.7.1 (pre-F1) 2026-08-05 01:45:41 -04:00
Constants.cs roads: enable Rugged+Trail carving + per-tier character (D-022) 2026-08-05 03:53:32 -04:00
Constants.cs.uid baseline: working salvaged prototype on Godot 4.7.1 (pre-F1) 2026-08-05 01:45:41 -04:00
Enums.cs roads: enable Rugged+Trail carving + per-tier character (D-022) 2026-08-05 03:53:32 -04:00
Enums.cs.uid baseline: working salvaged prototype on Godot 4.7.1 (pre-F1) 2026-08-05 01:45:41 -04:00
MapDataParser.cs feat: blueprint v2 envelope — writer, dual-write, round-trip harness (terrain-water task 02) 2026-08-06 07:24:08 -04:00
MapDataParser.cs.uid baseline: working salvaged prototype on Godot 4.7.1 (pre-F1) 2026-08-05 01:45:41 -04:00
MarchingCubes.cs roads: enable Rugged+Trail carving + per-tier character (D-022) 2026-08-05 03:53:32 -04:00
MarchingCubes.cs.uid baseline: working salvaged prototype on Godot 4.7.1 (pre-F1) 2026-08-05 01:45:41 -04:00
MATH_MARCHING_CUBES.md docs: fix MATH_MARCHING_CUBES §4 polarity + dims 2026-08-05 21:32:51 -04:00
README.md docs: bring all READMEs current with actual code (post-sweep-10 truth pass) 2026-08-05 05:23:58 -04:00

/Core/Scripts

Pure C# data structures, shared enums, and static maths. Compiled into the shared assembly used by both /Server and /Client.

"Pure data, zero state." These scripts define what things are and how to calculate them. They never track live game events — who is online, which chunks are loaded, what time it is.

What's actually here

Voxel materials

  • BlockData.cs — struct describing one block type (ID, name, IsSolid, BaseColor).
  • BlockRegistry.cs — the byte-ID master list (AIR 0, BEDROCK, STONE, DIRT, SAND, the three grasses, SNOW, WASTELAND_DIRT, ASPHALT) with a safe GetBlock lookup.
  • BiomePalette.cs — decides which material sits where, given biome, depth, and whether the column is roadbed. Two paths on purpose: an integer classification that decides what is stored in each voxel, and a float-depth version used for rendering that returns the two materials either side of a boundary so colours fade rather than snap.

⚠ Note that BlockRegistry and the mesher's colour table hold different RGB values for some blocks. The mesher's table is what you actually see; BlockData.BaseColor is currently unused by rendering.

Shared identifiers

  • Enums.csBiome, TownTier, MapHalf, RoadTier.

    Biome and TownTier are the .dat wire format. They are declared without explicit values, so each member's ordinal is the number written to disk, with no version gate and no validation on read. Append only, at the end — never reorder or insert. Doing so silently reinterprets every pixel and every settlement in every existing blueprint. RoadTier is exempt: road tiers live in separate sections of the file, so it is never serialized.

World data

  • MapDataParser.cs — decodes the .dat blueprint into a WorldBlueprint (heightmap, biome map, towns, four road tiers).
  • ChunkData.cs — one chunk's density and block-ID fields, +1 padded on every axis so the mesher can reach into the neighbouring chunk, plus the per-column data the renderer needs.
  • Constants.cs — chunk dimensions, ISO_LEVEL, VOXEL_SCALE, and the visual/road tunables (material blend band; per-tier road width, shoulder, grade smoothing and surface).

Maths

  • MarchingCubes.cs — density field → ArrayMesh, with analytical normals and deterministic integer-keyed vertex welding.
  • MATH_MARCHING_CUBES.md — an explainer of the algorithm.

Rules

  1. No Godot node inheritance. Pure classes, structs and statics.
  2. No _Process / _Ready. Nothing here is attached to a live scene object.
  3. Dependencies flow inward only. /Server and /Client reference /Core; /Core never references them.