islaApocalypse-v2/Client/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

22 lines
1.1 KiB
Markdown

# Client — rendering and presentation
**Holds:** rendering, meshing, UI, input, everything the player sees.
**Boundary:** may use `Core/`. Must not depend on `Server/` internals.
> ### ⚠ Nothing in `Tools/` may reference this folder. The wall runs one way.
> → `Tools/README.md`, `Design - Tooling - Offline Generation.md`.
## Empty this phase — deliberately
Phase 0 has no renderer. The mesher (SN/DC smooth terrain + greedy-cube builds with seam-blend,
→ D-052, `Design - Rendering - Mesher.md`) is a much later phase, and building it before the data is
right is explicitly the trap the rewrite exists to undo (D-056: *"the data is perfected before the
mesher"*).
## One thing already decided, so it is not re-litigated later
**Mesh style is per-ORIGIN, not per-material.** Natural runs mesh smooth, player-placed runs mesh as
cubes, and the same material can be both. The flag the mesher reads is `RunOrigin` on the run — there
is no mesh-style field on any material row, and adding one would be a design regression.
`Core/Scripts/Column.cs`, D-054.