No description
Find a file
beezm 9af5c73b04 Phase 1: port the crown-jewel noise and pass-1, and render the island
Ports MapGenerator.GenerateTopography's pass-1 loop (reference ~:553-619 at tag
pre-rewrite-reference / ab78883) into Tools/. Working code and its tuned constants
carried over verbatim, read from source rather than re-derived from a design
summary (D-050). Six elements, in the reference's execution order — the order is
load-bearing: the sinker lands before the Pow (superlinear), the Trench after it
(a raw additive wall), preTrenchFalloff captured between them.

The fractal config is now PINNED. The reference set only NoiseType/Seed/Frequency,
so the island's entire fractal character was Godot 4.7.1 constructor defaults that
nothing recorded. Measured on 4.7.2 (NoiseDefaultsProbe): Fbm / 5 / 0.5 / 2.0 / 0.0
— identical to the 4.7.1 values, so pinning reproduces the look with no delta. The
terrain no longer depends on an engine default, and the probe makes a future drift
visible instead of silent.

Two deliberate departures from the reference's literals, both flagged in-code:
  - the latitude noise offset is expressed in map widths, not the reference's raw
    +1000 px, so a resize no longer samples a different slice of the noise field
    (chat1/00 §4.2). Pinned to 1000/8192 so the 8K realization is unchanged.
  - the `if (temperature < 0.65f)` spine gate is dropped as the provable no-op it
    is — southernFade already reaches exactly 0 at 0.65. Bit-identical.

The reference's "temperature" is ported as a latitude field and deliberately NOT
named temperature: it is stage-1-local input to terrain geometry, and climate is
stage 3 (D-049 §2, D-056). The ±0.1 wobble is kept — it is what stops the spine's
southern terminus being a ruler-straight line.

Deferred to Phase 2 with the seam open: coast shelf and offshore islets (below-sea,
judged once water renders). Pass1Result exposes PreTrenchFalloff at their exact
consumption point, plus HMaxSeed for the seed-dependent curve.

Render is a direct Godot.Image, not the SubViewport capture path — that machinery
exists to composite vector overlays and is why --headless hangs; Phase 1 has none.
Hypsometric above 0.15, bathymetric below, fixed ramp anchors so seeds and ablation
rungs are comparable. No biome words anywhere.

Verified: land fraction 51.5% identical at 1024, 2048 and 10240 — the scaling
discipline holds across a 10x resize. Full-size 10240 pass: 36.3 s.

No curve, erosion, rivers, water, crater, biomes, roads, or mesher.
2026-08-19 21:27:20 -04:00
Client Phase 0: clean project skeleton for the v2 rewrite 2026-08-19 20:21:12 -04:00
Core Phase 0: clean project skeleton for the v2 rewrite 2026-08-19 20:21:12 -04:00
Server Phase 0: clean project skeleton for the v2 rewrite 2026-08-19 20:21:12 -04:00
Tools Phase 1: port the crown-jewel noise and pass-1, and render the island 2026-08-19 21:27:20 -04:00
.gitattributes Phase 0: clean project skeleton for the v2 rewrite 2026-08-19 20:21:12 -04:00
.gitignore Phase 0: clean project skeleton for the v2 rewrite 2026-08-19 20:21:12 -04:00
islaApocalypse-v2.csproj Phase 0: clean project skeleton for the v2 rewrite 2026-08-19 20:21:12 -04:00
islaApocalypse-v2.sln Phase 0: clean project skeleton for the v2 rewrite 2026-08-19 20:21:12 -04:00
project.godot Phase 0: clean project skeleton for the v2 rewrite 2026-08-19 20:21:12 -04:00
README.md Phase 0: clean project skeleton for the v2 rewrite 2026-08-19 20:21:12 -04:00

Isla Apocalypse — v2

The rewrite (D-049). A post-apocalyptic survival voxel game: one island, generated once offline, loaded by everyone.

Status: Phase 0 — foundation. This repo is a skeleton. It builds, it resolves its own runtime directory, and it carries the two data contracts and the tooling rails. It generates nothing.


⚠ Two repos. Never one.

Repo Role
~/celerNexus/islaApocalypse-v2/ (this) The rewrite. Every line of new code is written here.
~/celerNexus/islaApocalypse/ READ-ONLY. The pre-rewrite prototype, archived at ab78883, tag pre-rewrite-reference. Ported FROM; never written to.
~/celerNexus/islaApocalypse-vault-v0.1/ The design vault — the source of truth for WHAT and WHY. The vault leads.

The old codebase is a spent quarry (D-050): mined, never tracked, never synced, never canon'd. Writing rewrite code into it would corrupt the very thing being ported from.

⚠ Runtime data isolation — do not weaken

This project pins its user:// directory away from the old prototype's, which holds the preserved reference seeds, blueprints and batches:

user:// → ~/.local/share/islaApocalypse-v2/          ← this project
          ~/.local/share/godot/app_userdata/islaApocalypse/   ← ⛔ the OLD prototype. Never touch.

Pinned two ways in project.godot (distinct project name and use_custom_user_dir). After any change to that block, re-run the probe:

Godot_v4.7.2-stable_mono_linux.x86_64 --headless \
  --path ~/celerNexus/islaApocalypse-v2 res://Tools/Scenes/UserDirProbe.tscn

Layout

Core/     math + data only, ENGINE-FREE   — depends on nothing above it
Server/   authoritative logic             — may use Core          (empty: Phase 0)
Client/   rendering                       — may use Core          (empty: Phase 0)
Tools/    the offline generator           — ⚠ may NOT use Client  (Phase 1 fills it)

Each layer has a README.md stating its role and its boundary. Read the one for the layer you are about to write in — they carry the reasons, not just the rules.

The contracts this phase establishes

  • ★★ The column model (D-053) — the world as a 2D grid of columns, each a stack of (material, thickness) runs. Air is the top run; there is no air-vs-solid height branch.Core/Scripts/Column.cs
  • The material schemas (D-054) — terrain and building, two schemas bridged by a transformation seam that is deliberately empty. Identity is a registry key, never an ordinal. Mesh style is per-origin, never a material property. → Core/Scripts/MaterialRegistry.cs
  • The scaling discipline — nothing uses a raw pixel number. → Core/Scripts/GenerationScale.cs
  • Tooling safety — every path env-overridable, deletion refused by code. → Core/Scripts/ToolingPaths.cs, Core/Scripts/FileSafety.cs

Build

dotnet build
Godot_v4.7.2-stable_mono_linux.x86_64 --headless --import --path .

Godot 4.7.2 (mono) · .NET 8 (net8.0) · Godot.NET.Sdk/4.7.2

The reference repo is Godot 4.7.1. This repo deliberately targets 4.7.2 — clean rewrite, current tooling. 4.7.1 is the port source, not a constraint on new code.

What this phase is NOT

No generation, no mesher, no stratigraphy, no biomes, no water, no algorithms of any kind. The pipeline is 2D-maps-first (D-056): stages 15 are flat maps, gotten completely right before a single 3D vertex exists. Building the mesher before the data is right is the specific trap this rewrite exists to undo.