Skip to content
Star

Validation tools

Generated from the battlemap-mcp server at a020c64. Your assistant gets these same names, descriptions and parameters from the server when it connects; the server is named battlemap, so a client may show a tool as battlemap:ping or similar.

validate_scene

Check that the map has ground and that its light has causes. Read-only.

Two failures that a render shows but cannot diagnose, and that no element count can show at all:

bare_ground open ground with no terrain painted on it. Terrain is the one part of a map with no element count, so a building standing in an unpainted void reports as a complete, correct map everywhere else. Cells occupied or enclosed by walls are skipped — an interior is floored with patterns, not terrain, and would otherwise read as bare on a perfectly finished map. lights every light, split into explained (something nearby could be emitting it) and unexplained (nothing could). A pool of warm light on bare boards with no candle, hearth or lantern reads as a mistake immediately, and a viewer notices before they can say why.

Lights match emitters by asset NAME, so read it as a prompt: an oddly named source reads as unexplained. explained names the asset it credited.

arrangement is advice and never affects ok: how many objects sit at scale 1.0 on quarter turns, and how much of the map the build covers. art_families is advice too: objects, walls and terrain slots counted per pack (core is the stock library). Packs are drawn in different styles, so counts outside the family the plan chose are worth a look.

Outdoors, remember the global condition is itself a source. Under daylight the open ground needs no local sources at all; at night it wants the light to come from things that are in the scene.

samples: grid resolution per side for the terrain read, 2-64. Higher is slower and finds smaller gaps.

emitter_reach: how close (in woxels) an emitter must be to account for a light. One tile by default — a light is meant to sit on its source.

ParameterTypeDefault
samplesinteger48
emitter_reachnumber256

validate_floorplan

Check a floorplan's structure BEFORE furnishing it. Read-only.

Answers the questions element counts cannot: is every room reachable, does every door open onto something, and is there a way in from outside. A sealed room and a connected one have identical counts.

Returns the enclosed regions with their area and bounds, which portals each touches, and findings:

sealed_regions enclosed areas with no route from outside, even with every door treated as open. Usually a missing door, or one that missed its wall. portals_not_in_a_wall a door touching no wall — what a failed wall-mount looks like. It cuts no opening in anything. portals_to_nowhere a door whose two sides are the same region, so it connects nothing. exterior_openings portals connecting a region to the outside. A window counts too, so a building listed here may still have no way IN. Check the assets. vtt_reversed_portals a door with closed=false or a window with closed=true: in a VTT export it acts as the other. Delete it and add_portal again without closed.

ok is true when nothing in the first three lists appeared. Treat it as a gate: no furniture, foliage or dressing until it passes, because repairing structure after furnishing means moving everything twice.

Doors are analysed as openings regardless of their closed flag — that controls light, not movement.

cell_woxels: analysis resolution, 64 (a quarter tile) by default. Smaller is more exact and slower; a value above a door's width can seal doorways and report false failures.

min_room_tiles: ignore enclosed areas below this, so the sliver between two nearly-touching walls is not reported as a room.

ParameterTypeDefault
cell_woxelsinteger64
min_room_tilesnumber1

validate_placements

Find objects that intrude on the architecture. Read-only.

Use it after furnishing, before judging the render by eye. These defects look correct in every element count and placement response.

crossing_walls real footprint on BOTH sides of a wall. Flush against a wall is correct and never reported. wall_caps posts and beams on layer 700+ over a wall or a wall join: the caps the skills ask for. Advice. wall_mounted paintings, wall lanterns, curtains on their wall; faces_room false = turned around. blocking_portals an object in a doorway or across a window. unmeasurable no texture_size, so not checked: not the same as clean. stacked two LARGE objects in one place on one layer (crates in crates). Deliberate pairs land here too. Advice. adrift_fixtures torches, tapestries, hearths away from any wall. Matched by name: read the distance and decide. surface_overflow dressing reaching past the table, desk or counter it stands on. A draped cloth lands here too. Advice. lone_kit_parts one part of a multi-piece fixture without its sibling: bedding without a frame, a hearth base without its chimney, a curtain without its rod. Advice.

A tankard on a table is NOT reported: it is on a higher layer. Footprints are rotation-aware. A finding is evidence, not a verdict: a hearth set INTO a thick wall is deliberate and will be reported.

tolerance_woxels: how far past a wall's centre line an object may reach on both sides before it counts as crossing. The default (24) keeps flush furniture quiet; lower it to catch shallower intrusions.

ParameterTypeDefault
tolerance_woxelsnumber24