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.
|
||
|---|---|---|
| .. | ||
| Scripts | ||
| README.md | ||
Core — math and data only
Holds: the column model, the material schemas, the scaling discipline, tooling path resolution and the file-safety rails. Constants and contracts.
Boundary: Core depends on nothing above it. Not on Server/, not on Client/, not on
Tools/. The dependency arrow points one way into this folder and never out of it.
⚠ Additional boundary, tighter than the layer rule: Core is engine-free.
No
using Godot;anywhere in this folder. Core is plain C# — noNode, noGD.Print, noProjectSettings, no engine types in any signature.Two reasons, both load-bearing. (1) D-049 commits to "C# for fast iteration, with C++-ready seams… port path-by-path when settled and hot" — the hot paths that get ported first are exactly the ones in here, and a type that names
Godot.Vector2cannot cross that seam. (2) It keeps the column model testable and reviewable without standing up an engine.Where Core genuinely needs something the engine knows — the resolved
user://directory — the engine layer hands it in (ToolingPaths.Configure), rather than Core reaching for it. If you find yourself wanting an engine type here, the type belongs one layer up.
What is in here
| File | What it is |
|---|---|
Scripts/Column.cs |
★★ The load-bearing contract (D-053). A column as run-length bands; MaterialRun; RunOrigin. Read its header before touching anything that stores world data. |
Scripts/ColumnGrid.cs |
The 2D grid of columns. Shape only — chunking and streaming are later phases. |
Scripts/MaterialKey.cs |
Material identity — a registry key, never an ordinal. |
Scripts/TerrainMaterial.cs |
A row in the terrain schema (D-054). |
Scripts/BuildingMaterial.cs |
A row in the building schema (D-054). |
Scripts/MaterialRegistry.cs |
Both registries, append-only, seed rows only. |
Scripts/RecipeRegistry.cs |
The transformation seam — deliberately empty. |
Scripts/GenerationScale.cs |
⭐ The scaling discipline. MapSize, ScaleFactor, normalized offsets. |
Scripts/ToolingPaths.cs |
Every tooling path, env-overridable, resolved in one place. |
Scripts/FileSafety.cs |
The permanent file-safety rules, as throws rather than sentences. |
The three rules this layer exists to make unbreakable
- Air is the top run. There is no "air vs solid" height branch, anywhere, ever.
→
Scripts/Column.cs. - Properties come from the registry, never from storage. A run stores an identity.
→
Scripts/MaterialRegistry.cs. - Nothing uses a raw pixel number. Every distance is a fraction of
MapSize. →Scripts/GenerationScale.cs.
Not here, and not by accident
- No water. Water is an overlay over the columns (levels-not-cells), never a band.
- No biomes. Biomes are a later classification of finished shape, not an input to it (D-049).
- No algorithms. Phase 0 is shape. Stratigraphy, feature passes, meshing and run-splitting on dig are later phases.
→ Design - Data - Column Model.md, Design - Data - Material Schema.md,
Design - Tooling - Scaling Discipline.md