Skip to content

The simulator

ChatMapper has two ways to run a story. ▶ Play is what a player sees — full-screen, paced, with pictures and portraits. Simulate is what a writer needs — the same playthrough as a transcript with the logic laid bare. Both run your conditions and scripts in real Lua, so if it behaves here it behaves in the engine.

Click the ▾ beside Play and choose Simulate (author debugger). The panel opens on the right, the canvas dims everything except the current path, and the story starts at the conversation you have open.

The simulator: transcript, choices, variables and a Lua console

  • Conversation selector — which conversation to run. Switching mid-run keeps your variables (that is how you test “the guard remembers what I said in the lobby”); Restart wipes them and starts over.
  • Transcript — every line as it plays, with the speaker’s portrait, and media players for any audio or video on the line (Auto media plays them as they arrive).
  • Choices — the menu the player would see. Click one to take it.
  • Step controls — ⏮ start, ◀ back, ▶ forward, ⏭ end, with a 3/7 position counter.

Every choice is a step in a history you can walk. Step back rewinds one step — variables, statuses and transcript all go with it — and the choices you had at that point are offered again. Take a different one and the history forks from there. This is the fastest way to check every branch of a decision without replaying the opening each time.

The canvas follows along: the path you have taken is highlighted, the current node is centred, and clicking a node on the canvas still selects it for the Inspector, so you can fix a line the moment you see it wrong.

Open Variables ▸ to see every variable and its current value, updating as scripts run. When a condition does not do what you expected, this is the first place to look.

Console ▸ opens a prompt at the bottom of the panel where you can run Lua against the live playthrough:

The simulator with Variables and the Lua console open

Variable["trust"] -- read a value
Variable["trust"] = 5 -- set one, to test a late branch now
Dialog[12].SimStatus -- has node 12 been shown?
Variable["trust"] >= 2 and not Variable["angry"] -- try a condition

Enter runs a line; ↑ / ↓ recall earlier ones. The badge above the console says which engine is running: Lua 5.4 (the full language) or the built-in subset if the Lua runtime could not load.

A line containing [?Name] asks the player to type something. The simulator pauses, shows an input box in place of the choices, and resumes with the value stored in the variable when you submit — so a scenario that asks for the player’s name, or a password, is fully testable here.

At the foot of the simulator, ✦ AI plays your scenario as… hands the choices to an AI persona — pick an actor, or describe anyone — and watches how the story unfolds for that kind of player. See AI persona playtesting.

▶ Play runs the project full-screen from the beginning, paced like a game (Realtime, Brisk or Instant), with the place picture as the backdrop, actor portraits, and speech bubbles you click to advance. Play from this conversation in the same menu starts at the open one.

Play mode: a line of dialogue over the scene picture

The player link in the Share dialog opens exactly this view on its own, with no editor — the right thing to send a reviewer’s phone.

It runs the ChatMapper semantics precisely — conditions, priorities, passthrough, groups, [f], SimStatus. It does not know what your engine does with the result: cutscene sequences, voice timing, camera. For those, export and test in the engine; see Exporting and delivering.