Skip to content

Finish transfer items: small and attached buildings, building tags, shared seams, mod export and headless CLI - #8

Merged
DinLemon merged 2 commits into
developfrom
claude/simplepzmapmaker-functionality-e254b9
Oct 17, 2026
Merged

DinLemon merged 2 commits into
developfrom
claude/simplepzmapmaker-functionality-e254b9

Conversation

@DinLemon

Copy link
Copy Markdown
Owner

What

Finishes the work left open after the streamed world editor and the real-place transfer contract.

Streamed-world gaps

  • Buildings from 2×2 tiles. Footprints under 6 tiles on a side are one room; stairs fit only along a side of at least 6 tiles. Imports no longer inflate small outlines to 6×6. One-room presets (shed, kiosk, booth) and geometry drafts accept them.
  • Imported fences across seams. The OSM world import moves every fence line whose edges reach two or more sections into the world fence layer once, merges the gates found near each section, and keeps only the owning section's copy of a line that merely touches a neighbour. Preserve edits keeps authored world fences (they were dropped before).
  • Shared decorations (world format 8). Decoration groups are stored once in world tiles and clipped into each section. They are protected in isolated editing, survive section workspaces, preserve-edits reimport and both exporters. A world inspector panel promotes, moves and removes them.

Transfer items 2, 4–7, 9 and the contract §3 seam check

  • Building tags: pz:kind, pz:style, roof:colour (named or #rrggbb, matched to roof sets by colours measured from the installed sprites), pz:wall, pz:trim. Unknown pz:* keys and bad values are reported, never fatal.
  • Attached buildings (pz:attached, pz:door-to, map format 13): the larger building owns the single shared wall, the smaller one keeps its own entrance, an optional door joins them.
  • Mod export options on every export: mod id, map folder, title, common/media/maps layout, install into Zomboid/mods. Install replaces only folders the editor created and is accepted only on same-origin POST.
  • simplepzmap CLI (src/SimplePZMapmaker.Cli): build from a JSON scene, validate --game (every exported tile name against the installed game), export, tiles (.pack/.tiles from PNG frames, properties copied from installed tiles) and probe (installed game classes load the export). Guide: docs/CLI.md.
  • Seam check: every source building and fence is placed once in a section, once at world level, or kept as evidence with a reason.

Verification

  • 405 C# and 262 JavaScript tests pass; Release build has no warnings.
  • Real Pilna OSM extract via simplepzmap build --strict --game: 26 sections, 1,640 section and 61 shared buildings, 0 lost or duplicated, all 2,471 tile names found in the game. The installed game's classes loaded 416 cells, 425,984 chunks and 9,565 rooms (1,429 upper, 249 stair tiles).
  • Browser session against the installed game catalog: 3×3 kiosk placed; a real two-tile bed promoted across a seam, moved, removed and exported.

Notes for review

  • New formats: map 13 (attached buildings), world 8 (shared decorations). Older editors refuse these files instead of dropping data.
  • The editor has no manual "attach two buildings" control yet; attachments come from imports. That is editor UI work.
  • The Pilna extract has no barrier lines, so fence promotion is covered by tests (including an end-to-end OSM world import with mocked HTTP), not by the real build.
  • scripts/verify-game-runtime.ps1 now accepts absolute archive paths and a -NoStairs switch; a PowerShell bug that split single-element probe arguments into characters is fixed.

🤖 Generated with Claude Code

DinLemon and others added 2 commits October 17, 2026 15:54
Streamed-world gaps:
- Buildings from 2x2 tiles: footprints under 6 tiles on a side are one room;
  stairs only along a side of at least 6 tiles. Imports no longer inflate
  small outlines; one-room presets and geometry drafts accept them.
- OSM world import promotes imported fence lines crossing section seams
  once into the world fence layer, merges per-section gates and keeps only
  the owning section's copy of a line that merely touches a neighbour.
  Preserve edits keeps authored world fences.
- Shared world decorations (world format 8): stored once in world tiles,
  clipped into each section, protected in isolated editing, kept by
  section workspaces, preserve-edits reimport and both exporters; world
  inspector panel to promote, move and remove them.

Transfer contract items 2, 4-7, 9 and the section 3 seam check:
- Building tags pz:kind, pz:style, roof:colour (colours measured from the
  installed roof sprites), pz:wall and pz:trim; unknown pz:* keys reported.
- Attached buildings (pz:attached, pz:door-to, map format 13): one shared
  wall owned by the larger building, own entrance for the smaller one.
- Mod export options on every export: mod id, map folder, title,
  common/media/maps layout and install into Zomboid/mods.
- simplepzmap CLI: build from a JSON scene, validate --game (every tile
  name against the installed game), export, tiles (.pack/.tiles from PNG
  frames) and probe (installed game classes load the export).
- Seam check: every source building and fence placed once or kept as
  evidence with a reason.

Verified: 404 C# and 262 JS tests; real Pilna OSM built with --strict
(26 sections, 0 lost or duplicated features, all 2471 tile names found)
and loaded by the installed game's classes (416 cells, 9565 rooms).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A GET export with install=true could be triggered by any web page (a link or
image pointing at the local editor) and write into Zomboid/mods. Installing
now needs POST, which the host middleware limits to JSON requests from the
editor's own origin; workspace exports and job downloads also accept POST.
A GET can still rename the returned archive, which has no side effects.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@DinLemon
DinLemon merged commit c0fb1fa into develop Oct 17, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant