← Technical Manual

TECHNICAL MANUAL // 08

Validation & Publishing

Validation rules, local saves, and publishing to the server

This chapter covers the SAVE tab: the checks your map must pass, the save model, publishing, and sharing drafts with playtesters.

Validation

Before a map can publish, it has to pass a set of checks. They catch the mistakes that would make a map unplayable, confusing, or (on objective maps) quietly broken mid-game.

Open the Save tab and the checks run on their own. A summary badge shows the verdict: errors (red) block publishing, warnings (amber) advise, all clear (teal) means ready.

Validation errors with an attribution line
Errors block publishing. Each finding names the element to fix — here Saltmarsh can't be attacked.
The all-clear validation state
All clear — every check is green and the map can publish.

Every finding that concerns one element names it right below the message: “(Node: Saltmarsh)”, “(Bonus group: Crown Region)”. When several elements share a problem, the line collapses — “(Nodes: Alpha, Bravo, +3 more)”. Map-wide problems (name, image, reachability) carry no name because there’s no single thing to point at.

The Save tab also paints problems on the canvas. Every territory named in a finding gets a halo (red for an error, amber for a warning), and clean territories fade back so the problems pop. A corner note counts them (“2 errors · 1 warning — tap a highlighted node”), and tapping a haloed territory lists its findings in place.

The canvas with red and amber halos on problem territories
Problems painted where they live: red halos block, amber halos advise.
A tapped halo listing that territory's findings
Tap a haloed territory and its findings list right there.

Board checks

CheckBlocks?Why
At least one territoryyesa map needs nodes
At least one connectionyesterritories must link
No orphaned territoriesyesevery node needs a connection
Everything reachableyesevery territory must be reachable from every other
Everything attackableyesevery node needs a connection pointing in — one-way borders can leave a node nobody can attack
At least 6 starting-unit territoriesyesat least 6 nodes must allow starting units
No dead endswarnsa node with no way out limits play
At least one bonus zonewarnsno bonuses, fewer choices

Identity checks

The name must run 5–100 characters, the description at most 500, and the image must exist, be PNG/JPEG/WebP, 1080–3840 pixels per side, and 10 MB or less. All blocking.

Payout shape checks

CheckBlocks?
One payout shape per zone, never both a threshold and a scaled shareyes
The threshold sits between 1 and the zone’s territory countyes
A scaled zone has at least 2 territoriesyes
The counts-as-held ratio is above 0 and at most 1 (scaled zones only)yes
A threshold equal to the territory count (same as All nodes — unset it for clarity)warns

Objective checks

If your map authors Bonus Groups, Constellations, or Victory Categories, a third family kicks in. Every one of these blocks — a half-wired objective either breaks mid-game or silently never fires, and both waste your playtesters’ time.

Bonus Groups. The group needs a name and must pay at least one reward. Its requirement must be well-formed: nested at most 8 levels, at most 32 conditions, every condition naming at least one bonus, counts of at least 1, and every named bonus or type actually on the map. An “All of” or “Any of” with nothing inside it fails. The messages use the editor’s own words — “Requirement is nested too deep”, “A Count from set requirement needs at least one bonus.”

Constellations. Each needs a name, must point at a Bonus Group that exists, and needs Hold Turns of at least 1 (zero would complete the moment a player qualifies). If it overrides the pressure point (the early-warning setting on the Constellation), the override must fall between 1 and Hold Turns. If it names a category, the category must exist.

Victory Categories. Each needs a name. The Categories Needed to Win number must run from 1 to the number of categories you defined; the Constellations Needed number from 1 to the number of Constellations. And a map sets one of the two, never both: Constellations Needed makes a Tier-1 map, Categories Needed a Tier-2 map.

The two checks authors hit most: setting both win numbers (usually a leftover from converting a Tier-1 map to Tier-2 — clear the old one), and the privacy guard (usually from making a group private while a public Constellation still points at it).

Saving — browser, server, disk

The Save tab’s button stack carries six verbs:

A status badge at the top tracks where you stand: PUBLISHED (live, nothing pending), UNPUBLISHED CHANGES (live, with a draft waiting), DRAFT (on the server, never published), UNSAVED TO SERVER (local edits not yet uploaded).

Publishing

Publishing promotes the draft. Save to the server as often as you like; when validation is clean and the draft is ready, Publish Version makes it live, behind a confirmation. A map that’s never been published shows plain Publish, and its first publish puts it in the public map browser.

Players in games on the old version keep playing it; new games use the new one. You never overwrite a live version directly, and Discard Draft is always there if you change your mind.

The save panel with status badge and button stack
The save panel: the status badge tracks draft state; the stack below carries the six save verbs plus publish.

Preview before publishing

The editor never shows you what players see: their default zoom, the panels covering part of the screen, zones and arrows drawn the game’s way. The read-only viewer does. Two buttons sit next to the publish controls:

The share link pins the draft as it stands right now. If you keep editing and saving after sending it, the tester still sees the version you actually sent — send a fresh link when you want fresh eyes on new work. Shared drafts show an UNPUBLISHED badge so the tester knows it’s work in progress.

The viewer header with an UNPUBLISHED badge
A shared draft wears the UNPUBLISHED badge — the tester knows it isn't live.

Use it for playtesting

Ask your tester to walk the map in the viewer before sitting down at a lobby, looking for two things:

Bugs go through the in-app bug-report flow (see the tester landing page); design feedback (“this bonus is too generous”) is better in Discord.

Getting found

When your map publishes, the directory marks whether it carries authored win conditions. Players filter on that mark in the map browser, and the lobby’s map picker shows an objectives badge next to it. The mark is recomputed at each publish from the same data the checks just approved — so if you want your objective work to be discoverable, validate clean and publish.