Files
mapwright/README.md
T
slaguru666andClaude Opus 4.8 100e514c4d Mapwright v0.5.0 — procedural battle map generator for Foundry VTT
Buildings (modern/fantasy, multi-floor, footprint shapes), caves, outdoor
biomes, and town/village + city-block settlements. Auto-places Foundry walls,
doors, windows, lighting; furniture as locked tiles; live preview.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 15:05:25 +01:00

76 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Mapwright — Battle Map Generator (Foundry VTT)
One-click procedural battle maps for **any** Foundry world. Generates good-looking
floor plans with Foundry **walls, doors, windows and lighting already placed**, so a
map is playable the moment it's created. Built to be usable with no prior experience.
## Status — v0.4.0
Six map categories. New since v0.3:
- **Town / Village** and **City Block** — top-down tactical maps where buildings
are solid rooftop blocks (perimeter walls block tokens; streets are the open,
token-scaled play space). City = street grid + sidewalks + lane markings;
Village = curved road, scattered houses, gardens, trees, optional pond.
- **Furniture is now locked Tiles** (not painted into the background): room-aware
placement (grid-aligned, against walls, doorways clear), players can't move
them, sprites auto-generated + cached.
- Backgrounds set via the v14 **Level** system; flat/fully-lit by default with
dynamic lighting opt-in.
### Earlier — v0.3.0
Three generator families, all standalone, all auto-placing Foundry walls/doors/lights:
**Buildings** (Modern / Fantasy)
- **Non-rectangular footprints**: Rectangle / L / T / U / Cross.
- **Multi-floor** (1–4): a folder of linked scenes sharing one footprint, with a
vertical-circulation column — **elevator** (modern) or **staircase** (fantasy) —
aligned at the same spot on every floor, plus up/down GM notes.
- **Era-aware door & window artwork**: planked wood doors / metal-slab glass doors
with handles + swing arcs; framed, mullioned windows. The Foundry door/window
walls are placed to match the art exactly.
- **Furniture / props** drawn per room type (beds, desks, meeting tables, server
racks, counters, crates, shelves…). System-agnostic, vector, no external art.
**Caves / Dungeons** (Rough Cave / Crypt / Sewer)
- Organic cellular-automata caverns — flowing, non-axis-aligned walls (contour
traced, smoothed, simplified to diagonal Foundry wall segments). Rock floor,
cast shadows, scattered debris, labelled features + torch lighting.
**Outdoors** (Grassland / Desert / Snow / Badlands)
- Open terrain with organic water bodies (shoreline blocks movement, not sight),
boulder cover, clustered trees, biome ground texture.
Shared: **live WYSIWYG preview**, seeded reproducibility (🎲 reroll), Foundry
Walls / Doors / Windows / AmbientLights / Notes — works in any world.
Planned next: prop/furniture as interactive Tiles, built-dungeon (rooms+corridors)
style, water/elevation in caves, UVTT export.
## Architecture
One geometry model drives **both** the picture and the playable walls, so they can
never disagree (the failing the older generators had):
```
seed → building.mjs (BSP → rooms + region grid)
→ walls.mjs (region grid → merged wall/door/window segments + connectivity)
├─ render-vector.mjs → SVG (preview + scene background)
└─ scene.mjs → Foundry Walls/Doors/Lights/Notes
```
`module/lib/*` is pure and Foundry-agnostic (unit-testable in Node).
`module/app/*` is the dialog. `module/mapwright.mjs` wires the toolbar button.
## Try it
1. Enable **Mapwright** in *Manage Modules* (it's standalone — no dependencies).
2. Open the **Walls** tool group in the scene controls → click the **map** icon
(or run `game.mapwright.open()` in the console, or use the Scenes tab button).
3. Pick a type/size, watch the preview, hit **Create Map**.
## Dev
`node dev/render-sample.mjs` renders sample SVGs (no Foundry needed) for eyeballing
visual quality. On macOS, `qlmanage -t -s 1600 -o . *.svg` rasterises them to PNG.