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:
@@ -313,6 +313,14 @@ tracks Blender 3.x–4.x, **not** nixpkgs' Blender 5.x. Do not "upgrade" it.
|
|||||||
8. **Pack** — `nwn_erf` bundles `.mdl` + `.wok` + `.set` + `.itp` + minimaps +
|
8. **Pack** — `nwn_erf` bundles `.mdl` + `.wok` + `.set` + `.itp` + minimaps +
|
||||||
any 2das into `<prefix>.hak`. Ship `doortypes.2da` to clients if custom doors.
|
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
|
## 7. Mapping *our* prototype conventions → NWN
|
||||||
|
|||||||
@@ -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.
|
||||||
Reference in New Issue
Block a user