islaApocalypse-v2/README.md
beezm 9107b0822b Phase 0: clean project skeleton for the v2 rewrite
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.
2026-08-19 20:21:12 -04:00

82 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 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.