Map Editor Documentation

Testing

Launching the map in the real engine, what to check before you call it done, and how to test a map that only misbehaves in multiplayer.

Test & publish · Page 13 of 49

Ctrl+F9 (or the Test Map button) launches the map in the real game, with the map as it currently stands. Not a preview and not a simulation of the engine: the same code path a downloaded map takes, with your roster, your triggers, scripts, simulation profile, custom controller and data overrides installed. It is refused while the map has validation errors.

Test Map opens the game in place of the editor. Before it leaves, it keeps a recovery copy of your work; when you return to /map-editor the status bar says so, and File → Open… restores it. Saving (Ctrl+S) before testing is simpler.

What to check first

A short list that catches most problems, in the order they are cheapest to find.

Does it boot? A map that ends instantly is almost always a one-seat map with standard victory still on. The validator catches it, but if you have turned validation warnings off in your head, this is the symptom.

Does every seat have a base? Missing town halls usually mean a player-owned building somewhere in the map has switched off the automatic bases. Set the rule explicitly instead of relying on the absence of buildings.

Can ground units get everywhere they need to? Walk a unit from each start to each expansion and to each opponent. Elevation problems that the validator classes as warnings rather than errors, like a one-wide terrace, only show up when something tries to walk on them.

Do the triggers fire? Open the Trigger Debug panel (Ctrl+Shift+F9, or the tab at the bottom left) in a Test Map match. It lists every trigger that fired, every condition that came out false, each action that ran, waits, cap hits, cutscenes starting and ending, and every place a trigger read something that was not there (a dead unit, an undeclared variable), filterable by trigger name. The Variables tab shows every global variable's current value. The trace is only recorded in Test Map and never affects the match.

Do scripts run? Select Scripts in Trigger Debug. Check gas, strikes, disabled status, timers and sos.storage. Syntax feedback only proves that source can compile; play the paths that should award points, cancel orders, respond to damage or end a round. Test both wins and losses. Local profiles and arcade controllers must show the timing warning and refuse multiplayer. Test scripted RTS saves and reloads; local arcade rounds do not support mid-round saves.

Do the spawners produce what you expect? Watch a camp respawn at least once. A spawner with a squad entry that is not a real unit id is a publish error, but a spawner producing the wrong unit is a typo the validator cannot see.

Testing a specific situation

There are no separate test settings. For scenario testing, change the map itself and change it back afterwards: give your seat ten thousand of everything in the Players module, and set the fog rule to revealed while you test the second half of a scenario.

Placed entities can be given build progress and health fractions, which is the fastest way to test a mid-match state without playing to it. A map fixture with a full base at 40% health and an army in the field tests the same triggers your players will hit twenty minutes in.

Testing multiplayer behaviour

Anything that involves more than one seat is worth testing with more than one seat, because a whole class of problem only exists there.

The one to watch for is any behaviour that differs between machines. The engine is lockstep: every client runs the whole match and compares hashes, so a difference is not a cosmetic glitch, it ends the match. The trigger set is built so that a map cannot cause this (every node is deterministic, every list is sorted, nothing reads the wall clock), but two authored things can:

  • Time of day, which changes sight radii, is stored in the map and applied before the first tick on every machine. If you find yourself wanting to make it a graphics option, that is the bug.
  • A modified map, where one player's copy differs from the host's. The map is hashed at match start and mismatches are reported, so this arrives as a clear message rather than a desync.

Playing your own map honestly

Two habits that are hard and worth it.

Play the map from a seat that is not seat 0. Authors test their own start position and rarely the mirrored one, and asymmetries in a supposedly symmetrical map turn up immediately from the other side.

Play it against the AI at a difficulty you would lose to. A map that is only balanced against an opponent that never attacks is not balanced.

Reading problems

The Validation module lists every issue with a severity and, where the problem has a location, a jump-to. Errors block saving, testing and publishing. Warnings never block anything.

A warning is not automatically wrong. "Seat 2 has no gold mine within reach" is a mistake on a normal competitive map and entirely correct on a map where seat 2 is a defending player with no economy. The validator does not have opinions about design; every error it reports is a failure you would not otherwise see.

Next: Validation & Tooling.