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.
55 lines
3.1 KiB
Markdown
55 lines
3.1 KiB
Markdown
# 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# — no `Node`, no `GD.Print`, no
|
|
> `ProjectSettings`, 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.Vector2` cannot 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
|
|
|
|
1. **Air is the top run.** There is no "air vs solid" height branch, anywhere, ever.
|
|
→ `Scripts/Column.cs`.
|
|
2. **Properties come from the registry, never from storage.** A run stores an identity.
|
|
→ `Scripts/MaterialRegistry.cs`.
|
|
3. **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`
|