# 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: ```bash 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 ```bash 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.