NB. This is not a tech article. If you’re interested in the how the editor was made have a look at the GitHub repo and keep an eye out for a more technical blog post which I’ll be writing soon.

Editor with message panel on left and content area on right The new editor

The editor is split into two parts, the side panel and the content area. The side panel (left) is used to edit the currently selected message(s), and the content area (right) shows each message and how they connect to other messages.

Each box in the content area represents a single email in the game. They all have a name, subject, from, to, and body. They also contain information describing how they connect to other emails - not only which email(s) to send next, but under which conditions, and after what time delay. This is where the magic happens, how a set of disparate emails are combined into an interactive experience!

The data describing the connections are represented by a message’s fallback, reply options, and children.


Fallbacks describe the next message to be sent if no replies are received by a certain time (or if replies are not supported for this email). The fallback describes not only the next email to send but how long to wait before sending it.

Reply options

Reply options allow branching based on a player choice. They allow you to specify a different response if, for example, the player replies ‘yes’ or ‘no’.


Children allow the game to spawn multiple concurrent email threads. Each child starts a new thread in parallel to the current one. This allows the narrative to not only branch but to have multiple branches alive all at once.

All together these provide a way for Top Secret’s narrative to be:

  • branching
  • concurrent (multiple live branches at the same time)
  • real-time

Ok, let’s use our new arsenal to understand our original thread:

Messages and their connections in an example thread

A sample thread showing emails (boxes), fallbacks (solid arrows), reply options (dashed arrows), and children (partially dashed arrows)

From left to right the first few emails (from going_postal_0) take place sequentially, and unconditionally using fallbacks. At going_postal_2 the player is presented with a three-way choice. If they don’t reply in time the fallback kicks in and they are sent to going_postal_3 which gives them the same identical choices and another bite at the apple. One of the choices leads to a new thread editor, and this also begins a new child thread crypto 101 in parallel.


Ok, that probably sounds a bit confusing and complicated. Imagine trying to hold all these connections in your head or on a piece of paper - now you understand why the visual editor is so useful.

Not only is the new editor easier, and quicker to use than the previous one, it also allows you to see unconnected messages and errors instantly.

The editor is still a work in progress and I’ll be tweaking it as I go along. If you have any cool ideas, or thoughts on the implementation let me know.

Thanks for reading!

« Back to blog