Stands up the CODE_REPO the rewrite is written into (D-049, D-058). Godot 4.7.2 /
.NET 8 / Godot.NET.Sdk 4.7.2. Nothing is generated, meshed, or ported — this is the
shell and the two data contracts.
Four layers, each with its boundary stated in a directory README:
Core/ math + data only, and engine-free — depends on nothing above it
Server/ authoritative logic (empty this phase)
Client/ rendering (empty this phase)
Tools/ the offline generator — may NOT reference Client (Phase 1 fills it)
Contracts (compiling stubs, no algorithms):
- Column model (D-053): a 2D grid of columns, each a stack of (material, thickness)
runs, any material at any depth. Air is the TOP RUN — there is no air-vs-solid
height branch, and no surface-height accessor exists to reintroduce one. Water is
not a band; it stays an overlay.
- Material schemas (D-054): terrain and building as two append-only registries,
bridged by a recipe seam that is deliberately EMPTY. Identity is a registry key,
never a serialized ordinal. Mesh style is per-ORIGIN and is not a material field.
Rails, so Phase 1 inherits them rather than rediscovering them:
- GenerationScale: MapSize is a parameter, everything derives from it, nothing uses
a raw pixel number. Tightening over the reference — decorrelation offsets are
declared in map widths, not pixels (chat1/00 §4.2).
- ToolingPaths: config/blueprint/output paths all env-overridable, resolved in one
place, so a batch cannot touch the developer's live files.
- FileSafety: the permanent no-deletion rules as throws rather than sentences.
user:// isolation: project name and use_custom_user_dir both pin the runtime dir to
~/.local/share/islaApocalypse-v2/, away from the old prototype's preserved seeds and
batches. Tools/Scenes/UserDirProbe.tscn confirms it rather than assuming it.
3.6 KiB
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 1–5 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.