Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ jobs:
shell: pwsh
run: |
. ./scripts/WorkspaceEnv.ps1
node scripts/verify-public-paths.mjs artifacts/SimplePZMapmaker-0.11.2-win-x64.zip
node scripts/verify-public-paths.mjs artifacts/SimplePZMapmaker-0.12.0-win-x64.zip
if ($LASTEXITCODE -ne 0) { throw 'Public package path check failed.' }
- name: Verify signed basement example
shell: pwsh
Expand Down
21 changes: 15 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

A local visual map and building editor for **Project Zomboid Build 42**, written in C#/.NET 10 with a browser interface. Create maps without programming, assemble rooms from your installed game's resources, import OpenStreetMap geography, and join adjacent sections into one world.

**Current release: 0.11.2.** The Windows x64 download includes the .NET Runtime. The editor supports 24 original editable building plans, up to 32 above-ground levels and basements **−1 to −32** (64 signed levels, **Z −32…31**), game/mod sprites and static models, shared buildings across section boundaries, measured DEM elevation, and MCP planning with a review before changes enter your project.
**Current release: 0.12.0.** The Windows x64 download includes the .NET Runtime. The editor supports 24 original editable building plans, up to 32 above-ground levels and basements **−1 to −32** (64 signed levels, **Z −32…31**), game/mod sprites and static models, shared buildings across section boundaries, measured DEM elevation, and MCP planning with a review before changes enter your project.

[Download releases](https://github.com/DinLemon/SimplePZMapmaker/releases) · [Verification status](docs/STATUS.md) · [Code and data provenance](docs/PROVENANCE.md)

Expand Down Expand Up @@ -45,6 +45,15 @@ A local visual map and building editor for **Project Zomboid Build 42**, written

![Generation studio with two alternatives and coordinate-based quality findings](docs/screenshots/27-generation-studio.png)

## What's new in 0.12.0

- **Build 42 map data:** every native cell gets a biome map (foraging zones), maps get a `thumb.png`, and `spawnpoints.lua` starts players inside houses with all 25 professions and their workplaces.
- **Rooms, zones and parking:** 588 vanilla room names; land use, parking and `pz:zone` tags become game zones, ZombiesType included; parking areas snap to whole 3×5 stalls.
- **TileZed data:** wall sets with real door and window pieces, NW corners and SE pillars; 14 reference fences with gates; furniture against the walls of bedrooms, kitchens, bathrooms and living rooms, the 24 housing templates included; `pz:style=tilezed:<template>` for 25 building templates.
- **Streets:** curbside mailboxes and bins, stop signs on lesser roads, parking wheel stops, village yard props and scarecrows.
- **Command line in the package:** `artifacts/app/simplepzmap.exe` builds, checks and exports maps. `conflicts` lists installed maps on the same cells, and `serve` starts a playtest server; see the [playtest checklist](docs/PLAYTEST.md). The Pilna examples moved to cells 150,150, away from Raven Creek.
- Maps with furniture are saved as map format 14 and world format 9; older editors refuse them instead of dropping the furniture.

## What's new in 0.11.2

- **Automatic game discovery:** startup reads Steam's registered libraries and installation manifests, including libraries on other drives. Stale saved paths fall back to detected installations.
Expand Down Expand Up @@ -154,12 +163,12 @@ Validation for this implementation: **190 C# checks, 129 JavaScript checks and 1
### 2. Download the application ZIP

1. Open [GitHub Releases](https://github.com/DinLemon/SimplePZMapmaker/releases).
2. Select **v0.11.2**, or a newer published release. The project publishes prereleases, so use the release list rather than assuming GitHub's `/latest` page shows the newest build.
3. Expand **Assets** and download **`SimplePZMapmaker-0.11.2-win-x64.zip`**. Example map ZIPs contain game mods, not the editor. GitHub's automatic **Source code** archives are development sources, not the ready-to-run application.
2. Select **v0.12.0**, or a newer published release. The project publishes prereleases, so use the release list rather than assuming GitHub's `/latest` page shows the newest build.
3. Expand **Assets** and download **`SimplePZMapmaker-0.12.0-win-x64.zip`**. Example map ZIPs contain game mods, not the editor. GitHub's automatic **Source code** archives are development sources, not the ready-to-run application.
4. Optionally download the release checksum file and compare the archive's SHA-256 before extracting it. Run this command from the folder containing the downloaded archive:

```powershell
Get-FileHash -Algorithm SHA256 -LiteralPath './SimplePZMapmaker-0.11.2-win-x64.zip'
Get-FileHash -Algorithm SHA256 -LiteralPath './SimplePZMapmaker-0.12.0-win-x64.zip'
```

### 3. Extract the entire archive
Expand Down Expand Up @@ -308,7 +317,7 @@ History is bounded/sparse, so large actions can remove older entries. A world re
4. Create a **new game** using the exported map. Existing saves are not migrated.
5. Enable overlapping example mods separately, or relocate and re-export them.

Exports include Build 42 `mod.info`, `common/`, native `.lotheader/.lotpack/chunkdata_*.bin`, room/building definitions, spawn points, zones, biome maps (`maps/biomemap_X_Y.png`, which Build 42 needs for foraging zones; squares with buildings, roads, fences, decorations or spawns use the featureless `dirt` biome so WorldGen never replaces authored vegetation there with its own jumbo trees), a 256×256 `thumb.png`, world map XML, editable project, attribution and installation instructions. Generated bedrooms, kitchens, bathrooms and living rooms are furnished with TileZed furniture standing against their walls (map format 14); the distributed housing templates keep their single legacy object per room. Imported streets are dressed with Build 42 street props: a mailbox at the curb in front of each house with a garbage bin beside it, a stop sign on every approach of a lesser road to a junction, a concrete wheel stop in each 3×5 parking stall, one to three yard props (chopping block, rain barrel, composter) behind each village house with no pavement nearby, and a scarecrow on farmland (parking zones snap to whole stalls in the direction the cars face). Like the vanilla maps, `spawnpoints.lua` starts players inside houses (the living room, kitchen or bedroom of every building with a bedroom, up to 256), gives all 25 Build 42 professions a key, and adds workplaces such as a police office or a restaurant kitchen for matching professions. Authored spawns are used only when the map has no house. Name/seed determine the mod ID; changing either creates a different ID. Origin defaults to native cell 100,100.
Exports include Build 42 `mod.info`, `common/`, native `.lotheader/.lotpack/chunkdata_*.bin`, room/building definitions, spawn points, zones, biome maps (`maps/biomemap_X_Y.png`, which Build 42 needs for foraging zones; squares with buildings, roads, fences, decorations or spawns use the featureless `dirt` biome so WorldGen never replaces authored vegetation there with its own jumbo trees), a 256×256 `thumb.png`, world map XML, editable project, attribution and installation instructions. Generated bedrooms, kitchens, bathrooms and living rooms are furnished with TileZed furniture standing against their walls (map format 14, building template format 8), including the 24 distributed housing templates. Imported streets are dressed with Build 42 street props: a mailbox at the curb in front of each house with a garbage bin beside it, a stop sign on every approach of a lesser road to a junction, a concrete wheel stop in each 3×5 parking stall, one to three yard props (chopping block, rain barrel, composter) behind each village house with no pavement nearby, and a scarecrow on farmland (parking zones snap to whole stalls in the direction the cars face). Like the vanilla maps, `spawnpoints.lua` starts players inside houses (the living room, kitchen or bedroom of every building with a bedroom, up to 256), gives all 25 Build 42 professions a key, and adds workplaces such as a police office or a restaurant kitchen for matching professions. Authored spawns are used only when the map has no house. Name/seed determine the mod ID; changing either creates a different ID. Origin defaults to native cell 100,100.

## Build from source

Expand Down Expand Up @@ -368,7 +377,7 @@ QA downloads/screenshots/logs stay in `work/qa-results/` or `work/logs/`. Develo
1. Open **Actions** in the GitHub repository and select **Build and verify**.
2. Choose **Run workflow**, select `develop` or the branch to verify, then start.
3. Inspect build/startup/browser steps in the run.
4. Download the completed application artifact for local use. Extract GitHub's outer artifact archive, then extract the contained `SimplePZMapmaker-0.11.2-win-x64.zip` into the application folder and follow the installation steps above. The diagnostic artifact contains startup evidence and screenshots. GitHub may require sign-in for artifacts.
4. Download the completed application artifact for local use. Extract GitHub's outer artifact archive, then extract the contained `SimplePZMapmaker-0.12.0-win-x64.zip` into the application folder and follow the installation steps above. The diagnostic artifact contains startup evidence and screenshots. GitHub may require sign-in for artifacts.

CI runs on pushes to `develop`, pull requests and manual dispatch. The Windows runner uses its mapped checkout as the workspace and keeps task caches there. Its no-game fallback check does not replace local installed-game probes.

Expand Down
1 change: 1 addition & 0 deletions docs/CLI.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ Without `--game`, generated street dressing and vanilla vehicle distributions ar
| `tiles <tileset.json> --out tiles.zip` | Builds a tile mod (`.pack` + `.tiles`) from PNG frames. |
| `probe <mod.zip> --game <path>` | Loads the exported lots with the installed game's own classes (headers, chunks, rooms, every tile sprite; stairs with `--expect-stairs`). Needs the repository's `scripts/` folder and Java from the game. |
| `conflicts <mod.zip\|map\|world> --game <path>` | Lists installed maps that already use one of the map's native cells: the game's own maps (challenge maps excluded), Steam Workshop items next to the installation and the local mods folder (`--mods-dir`), all read only. It fails when the base game is hit. `build --game` runs the same check, and `--strict` then fails on it. |
| `housing-templates <dir>` | Regenerates the distributed housing examples (`examples/HousingTemplates`) from the built-in catalog: each `.pzbuilding.json`, the combined `.pzmap.json` and its mod archive, keeping ids and positions. |
| `serve <mod.zip> --game <path>` | Starts a dedicated server for playtesting in `work/playtest-server/<name>` (`--server-dir`), never in your `Zomboid` folder: the map loads next to Muldraugh with its spawn regions, the window prints the address and admin login, and `quit` stops it. `--fresh` starts a new world, `--port` sets the port (16261). See the [playtest checklist](PLAYTEST.md). |
| `server-check <mod.zip> --game <path>` | Starts the installed Build 42 dedicated server (`zombie.network.GameServer`, `-nosteam`) in a temporary cache folder with the mod and a test-only Lua probe. The probe asks the server's own metagrid for buildings at room tiles taken from the archive's authoring source, plus one empty control tile, and loads the map's spawn regions as the game does (profession keys, spawn points and how many lie in a building); the server is then stopped with `quit`. Your `Zomboid` folder is not touched. |

Expand Down
2 changes: 1 addition & 1 deletion docs/STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
- **Walls and fences (7, 8):** the TileZed wall catalog (175 sets, 42 of them irregular) with NW corner pieces and SE pillars; 14 reference fences with alternation, posts, gate frames and matching wickets.
- **Spawns (13):** `spawnpoints.lua` starts players inside houses, has all 25 profession keys and adds workplaces.
- **Map files (6):** a 256×256 `thumb.png`. A separate `worldmap-forest.xml` is not written: the game merges it with `worldmap.xml` from the same folder, and ours already has the forest polygons.
- **Interiors (9, 10):** TileZed furniture against the walls of bedrooms, kitchens, bathrooms and living rooms (map format 14, world format 9); `pz:style=tilezed:<template>` applies one of 25 building templates. The distributed housing templates keep their legacy furnishing until they are re-exported.
- **Interiors (9, 10):** TileZed furniture against the walls of bedrooms, kitchens, bathrooms and living rooms (map format 14, world format 9); `pz:style=tilezed:<template>` applies one of 25 building templates. The 24 distributed housing templates were re-exported with furniture (`simplepzmap housing-templates`).
- **Streets and villages (11, 15):** curbside mailboxes and bins, stop signs on lesser roads, parking wheel stops, village yard props and scarecrows. Curbs, lane and parking lines and drains are not placed, because their sprites carry no properties that identify them.
- **Tools (14, 16, 17, 18):** `conflicts` and `build --game` list installed maps on the same cells; sections import only their neighbourhood of the source (PilnaVillage build and export: 2:35 → 1:30); `simplepzmap.exe` ships in the release and CI builds a two-section scene with `--strict`; `serve` starts a playtest server, with a [checklist](PLAYTEST.md).
- Real PilnaVillage through `build --strict --game`: 1,640 section and 61 shared buildings, 0 lost, 4,939 tile names found. `server-check`: 25 professions, 256 spawn points, all 256 inside buildings. Cell check: 118 cells shared with Raven Creek from the Workshop.
Expand Down
Binary file modified examples/HousingTemplates/HousingTemplates-B42.zip
Binary file not shown.
2 changes: 1 addition & 1 deletion examples/HousingTemplates/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,6 @@
- `urban-shop-house`:30×28, shops under two smaller residential levels.
- `urban-townhouse-row`:42×20, three independent three-level blocks.

For one building, import its `.pzbuilding.json` through the template JSON control. `catalog.json` lists descriptions and references. Open `housing-templates.pzmap.json` to inspect all 24 plans; `HousingTemplates-B42.zip` exports them together.
For one building, import its `.pzbuilding.json` through the template JSON control. `catalog.json` lists descriptions and references. Open `housing-templates.pzmap.json` to inspect all 24 plans; `HousingTemplates-B42.zip` exports them together. Rooms carry TileZed furniture (template format 8, map format 14); `simplepzmap housing-templates examples/HousingTemplates` regenerates every file from the built-in catalog.

The sample occupies one native cell of 256×256 tiles at origin **100,100**, spawn(4,4). Enable separately from other examples at these coordinates, or move origin and export again. It contains vanilla tile identifiers, not reference photographs or game artwork. Each plan is editable by rooms, edges, levels and resources.
2 changes: 1 addition & 1 deletion examples/HousingTemplates/housing-templates.pzmap.json

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Loading