wgt01: add STATUS.md build log + loose-file toolset testing note

STATUS.md: what the generator kit produces, the pipeline commands, what's
verified (build/export/set), first-pass caveats, git state, and next passes.

AGENTS.md §6.3: test tilesets without packing a .hak by dropping loose .set/
.mdl/.wok into ~/Documents/Neverwinter Nights/development/ (toolset reads it).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-04 17:08:24 +02:00
co-authored by Claude Opus 4.8
parent 1284f15595
commit 94abd80ade
2 changed files with 100 additions and 0 deletions
+8
View File
@@ -313,6 +313,14 @@ tracks Blender 3.x4.x, **not** nixpkgs' Blender 5.x. Do not "upgrade" it.
8. **Pack**`nwn_erf` bundles `.mdl` + `.wok` + `.set` + `.itp` + minimaps +
any 2das into `<prefix>.hak`. Ship `doortypes.2da` to clients if custom doors.
### 6.3 Testing without a `.hak` (loose files)
For iteration, skip packing: the toolset reads loose resources from
**`~/Documents/Neverwinter Nights/development/`**. Copy the `.set` + all `.mdl` +
`.wok` (and, once authored, the `.itp`/minimaps/2das) there, then create a small
area with the tileset and walk-test. Much faster than pack→reload; pack the
`.hak` only once the set is validated.
---
## 7. Mapping *our* prototype conventions → NWN
+92
View File
@@ -0,0 +1,92 @@
# wgt01 — Build Status & Notes
Progress log for the **Westgate Urban Foundation MVP** tileset (prefix `twu01`).
Spec: [KICKOFF.md](KICKOFF.md). How NWN needs things shaped: [../AGENTS.md](../AGENTS.md).
_Last updated: 2026-07-04._
---
## What exists — the generator kit (`generator/`)
One source of truth (`tiles.py`) feeds four tools; the two NWN emitters need no
Blender, so they're directly testable.
| File | Role | Needs Blender? |
|---|---|---|
| `tiles.py` | **Single source of truth**: 40-tile table, 12 materials, the 12×12 test map, and all pure derivations (paint / height / walkmesh quads / `.set` corner+crosser mapping). `PREFIX=twu01`. | no |
| `build.py` | Builds `westgate_urban_foundation_mvp.blend` — 40 tile collections (`VIS_`/`WOK_`/`BLOCK_` + edge custom props), `TILE_EDGE_METADATA` text block, `PREVIEW_tile_library_grid`, `PREVIEW_12x12_test_district`. | yes (4.0.2) |
| `export_mdl.py` | Real NWN export via **Neverblender** → 40 `.mdl` + 40 `.wok` (AuroraBase `tile`/`dummy`, `trimesh`, one `aabb` walkmesh; correct surfacemats). | yes + addon |
| `make_wok.py` | Pure-Python ASCII `.wok` emitter (verts+faces+surfacemat+AABB tree). Fallback when Neverblender absent — format **validated identical** to Neverblender's output. | no |
| `make_set.py` | First-pass `twu01.set` (INI, **CRLF**) from the tile grammar. | no |
`flake.nix` exposes these as apps + a dev shell (pinned **Blender 4.0.2**,
`neverwinter-nim`, `cleanmodels`).
## Pipeline (commands)
```sh
cd wgt01
nix run .#build -- out.blend # 1. Blender tile library
nix run .#export -- out.blend mdl/ # 2. real .mdl + .wok (Neverblender)
nix run .#set -- twu01.set # 3. first-pass .set (CRLF)
# nix run .#wok -- wok/ # ASCII .wok fallback only (export_mdl preferred)
```
## Verified (2026-07-04)
- **build**: 40 collections, 144/144 district cells placed, 0 skipped, 12 materials.
- **export**: 40 `.mdl` + 40 `.wok`. Surfacemats correct — CP1 all `wok_Stone`(4),
CN1 all `wok_Nonwalk`(7), BR_1/CE_S walkable+blocker mixed. `.mdl` has
`newmodel twu01_cp1`, `classification TILE`, AuroraBase name == resref.
- **Neverblender**: enabled + working **headless** via the flake's
`blender-4.0.2 --background`, reading `~/.config/blender/4.0` (same config as
the interactive session). Surfacemat = walkmesh face **material slot index**
after `nvb_utils.create_wok_materials(mesh)` — not the material name.
- **`.set`**: CRLF (1224/1224 lines), 40 tiles, 3 terrains (`cobble`/`raised`/
`canal`), 2 crossers (`ramp`/`canal_edge`). Corners/heights derive from each
tile's N/E/S/W edge grammar; ramp N-corners → height 1, canal edges →
`canal_edge` crosser, non-walkable tiles → `PathNode=N`.
## Testing in the toolset — no `.hak` needed
The toolset reads loose files from **`~/Documents/Neverwinter Nights/development/`**
(confirmed present). Drop the build outputs there and they're picked up directly:
```sh
DEV="$HOME/Documents/Neverwinter Nights/development"
cp mdl/twu01_*.mdl mdl/twu01_*.wok "$DEV"/
cp twu01.set "$DEV"/
```
Then in the toolset: create a small area using the `twu01` tileset, place tiles,
walk-test pathing/heights. (Packing a `.hak` with `nwn_erf` is deferred until the
set is validated.)
## First-pass caveats — tune before shipping
- **PathNode** is a placeholder (`A` walkable / `N` non-walkable) — verify creature
routing per tile shape in the toolset; real pathnode letters matter.
- **No `.itp` palette** yet — tiles may not appear in the toolset palette tree
until one is authored (GFF; `neverwinter-nim`'s `nwn_gff`). The `.set` still
loads for area creation.
- **No minimaps** — `ImageMap2D` refs exist in the `.set` but the `.tga`s don't
(skipped by decision; Westgate doesn't use them).
- **Substitutions**: `RA_C` = straight-ramp geometry; `STA` = smooth ramp WOK
proxy over stepped visual; `SW_C/T/X/E` share the straight-sidewalk visual.
- `MAT_void_black` is defined but currently unpainted (11/12 materials realised).
- Corner terrain is a heuristic from edges — hand-tune adjacency in the toolset.
## Git
Branch **`wgt01-tileset-kit`** (`main` still unborn — `git branch -f main
wgt01-tileset-kit` to promote). Commits:
- `60af184` — build guide + 40-tile generator kit
- `1284f15` — real `.mdl`/`.wok` export via Neverblender
## Next passes
1. Author `twu01palstd.itp` palette so tiles show in the toolset palette tree.
2. (optional) A `dev-install` flake app to copy build outputs into `development/`.
3. Walk-test in the toolset → tune PathNodes, crossers, corner terrains.
4. Pack `.hak` (`nwn_erf`) once validated.