A Foundry VTT (V13/V14) module that quickly generates Ultimate Dungeon Terrain style battle maps — concentric range zones for narrative / theater-of-the-mind combat — as plain PNG images. Maps are saved to your Foundry user data directory (udt-maps/), so they are fully portable to any VTT that displays images, and a ready-to-play Scene is created automatically.
From the manifest URL (recommended): in Foundry, go to Add-on Modules → Install Module and paste:
https://github.com/AlexSledge/udt-map-maker/releases/latest/download/module.json
Manually: download module.zip from the latest release and extract it into Data/modules/udt-map-maker/.
Then enable UDT Map Maker in your world's Manage Modules dialog.
| Zone | Meaning | Size (configurable per map) |
|---|---|---|
| Inner circle | Close range | radius in squares (default 6) |
| Middle ring | Near range | width in squares (default 9) |
| Outer ring | Far range | width in squares (default 3) |
| Corners | Border fill | squares up the round map |
Map size = 2 × (inner radius + middle width + outer width) squares, at Foundry's standard 100 px/square grid. The defaults produce a 3600×3600 PNG (36×36 squares).
Each map gets a unique number from a world-scoped counter: the default scene name is UDT MAP ##### and the file is saved as UDT-#####.png (a custom scene name saves as <slug>-#####.png). The counter only advances on successful creation.
- Open the Scenes sidebar tab and click Create UDT Map.
- In the dialog, pick images for the inner, middle, and outer zones, and set each zone's size in grid squares (center = radius, rings = width). Each picker opens Foundry's file browser, which also lets you upload images from your disk. Images are tiled at their native resolution across their zone — seamless texture images work best. Any zone left blank gets a flat fallback color.
- Optionally set wedge segments for the middle and outer rings (default 6 each; 0 disables). Alternating segments get a darkening shadow overlay (strength configurable, default 20%) over the same texture, with radial dividers drawn in the border color; the outer ring is offset half a segment so dividers interleave. Use even segment counts for clean alternation.
- Pick the border/fill color (default dark grey
#303030) — used for the separator rings, radial segment dividers, and the corner fill — and optionally adjust the separator width (default 10 px). - Click Create. The PNG is rendered, saved to
udt-maps/in your user data, and a Scene is created with a 100 px square grid, zero padding, token vision off, fog exploration off, and global illumination on — ready for narrative combat.
A tabletop play style (popularized by Professor Dungeon Master's Dungeon Craft channel) that replaces detailed battlemaps with concentric range zones — Close, Near, and Far — so combat stays fast and narrative while still tracking relative positioning. This module brings that table format to your VTT.
Other modules and macros can use:
const api = game.modules.get("udt-map-maker").api;
api.open(); // open the create dialog
api.renderUDTMap(canvas, opts); // pure renderer (no Foundry dependencies)
api.computeGeometry(opts); // derived pixel geometryscripts/renderer.mjs is dependency-free and runs under node-canvas (@napi-rs/canvas), which is how render output is tested outside Foundry. Options accepted by renderUDTMap: gridSize, innerRadiusSquares, middleWidthSquares, outerWidthSquares, middleSegments, outerSegments, shadowAlpha, separatorWidth, images: {inner, middle, outer, border}, colors.
- Foundry VTT V13 and V14 (verified on V14). Uses only ApplicationV2-generation APIs (
DialogV2, namespacedFilePicker), and handles V14's move of scene backgrounds onto embedded Level documents with a V13 fallback. - System-agnostic; no dependencies.
Apache-2.0 © Curtis Turner
