This commit is contained in:
2026-07-05 01:46:27 +02:00
parent 0a939e3a85
commit 08f544b358
23 changed files with 970 additions and 217 deletions
+33 -1
View File
@@ -92,6 +92,14 @@ Keep the terrain/crosser vocabulary **small and deliberate** per tileset.
Decimals allowed. BioWare original content used **5 m**; custom sets use **23 m**.
- **wgt01 uses a raised tier at Z = 1.5 m**, so its `Transition = 1.5` and the
raised tiles sit at corner height `1`.
- **"Raised" is a height, NOT a terrain type.** Verified vs `tcn01`: every raised
corner is still `cobble` with `…Height=1`; only cobble ever carries a non-zero
height (water/building stay at 0). Raise/Lower is the toolbar height tool acting on
cobble corners — do **not** add a `raised` entry to `[TERRAIN TYPES]`. Making it
paintable requires three things together: `HasHeightTransition=1`, a set of
**ungrouped transition tiles** covering the cobble:0 ↔ cobble:1 corner patterns
(ramps / retaining edges), and the `[PRIMARY RULES]` that let the brush step a
corner's height. Any one missing and Raise/Lower is inert.
- Walkable ground can only be *raised* in whole steps, never lowered below Z=0.
Visual water/void may dip (e.g. canal at Z = 0.3) **only under a non-walkable
walkmesh** — never a playable under/over space (matches `KICKOFF.md`).
@@ -114,10 +122,34 @@ It needs, in the `.set`:
`Floor` (the terrain the **eraser** paints), `HasHeightTransition=1` (turns on
Raise/Lower).
`[PRIMARY RULES]` only *refine* auto-picking (cascading corner transitions) and are
**optional**stock custom sets ship `Count=0` (verified: `wut01.set`). **Eraser,
**optional even for multi-terrain paint** — verified: stock `wut01.set` paints **6
terrains** with `[PRIMARY RULES] Count=0`. What actually makes a terrain paintable is
having a `[TILE#]` for **every corner pattern the brush can request** (all rotations),
each **ungrouped**. Rules just smooth cascading auto-transitions; stock `tcn01` (City,
5 terrains + heights) ships **76** for polish, but you can ship `Count=0` and add them
later. **Eraser,
Raise/Lower, and fill are built-in toolbar actions driven by those `[GENERAL]`
fields — they are not palette entries.**
**The random-fill pool (verified vs `tcn01`, 2026-07-04).** For a given corner
pattern the brush picks a **random tile among the ungrouped tiles that match**
**membership in any `[GROUP#]` removes a tile from that pool.** So the ungrouped
same-corner tiles *are* the fill: the cobble the `Default` terrain spawns a new area
with, the variants the brush scatters, the tile the eraser resets to. Consequences
that bite:
- Grouping **every** tile empties the `Default` pool → the New Area wizard
null-derefs (`Access violation … Write of 00000040`). Keep ≥1 ungrouped tile per
paintable corner pattern.
- **Every terrain/transition tile must stay UNGROUPED** to take part in painting.
`[GROUP#]` is only for click-place **prefabs** (streets, bridges, statues) that the
builder should *not* get at random. A "canal edge" you want the brush to auto-lay is
a terrain tile (ungrouped), not a feature.
- `tcn01`'s 513 tiles collapse to **58 distinct corner-tuples** — the surplus is art
variety. A geometry-only set needs roughly **one tile per corner-tuple**, and one
model can serve all four rotations of a tuple as four `[TILE#]` entries differing
only in `Orientation` (0/90/180/270) and the correspondingly-rotated corners/edges
(the engine rotates model **and** walkmesh together).
**System 2 — the palette (`.itp`): Features & Groups only.** The right-side
"Standard" tree click-places **prefabs**: a *feature* (1×1) or a *group* (N×M). A
palette entry is placeable **only if it is backed by a `[GROUP#]` in the `.set`**