Logic entities are invisible helper "things" that don't appear in the game world — they exist purely to build map logic. Instead of doing anything on their own, they are wired together with other entities through the I/O (Input/Output) system: an output on one entity (for example a trigger brush's OnTrigger) is connected to an input on another (for example a door's Open).
Logic entities sit between those endpoints and shape the signal — delaying it, gating it on a condition, repeating it, storing a value, or running a command — so you can build behaviour without writing any code.
Add them by right-clicking in the 2D view and choosing from the Logic submenu, then wire them up visually in the Logic Graph Editor (Ctrl+L).
Every connection you make in the graph has three parts, edited in the Property editor:
A simple pass-through switch. When its Trigger input fires, it fires its own OnTrigger output — but only while it is enabled. This lets you turn a whole chain of logic on or off from one place, or fan a single trigger out to many targets from one reusable node.
Fire Once so the relay fires a single time and then stops.Enable / Disable / Toggle gate whether incoming triggers pass through.CancelPending clears any delayed triggers that haven't fired yet.| Input | Description |
|---|---|
Trigger |
Fire the OnTrigger output (if enabled) |
Enable |
Enable this relay |
Disable |
Disable this relay |
Toggle |
Toggle enabled state |
CancelPending |
Cancel any pending (delayed) triggers |
| Output | Description |
|---|---|
OnTrigger |
Fired when the relay is triggered |
A multi-input boolean gate. It remembers the on/off state of each source that feeds its Trigger input and fires OnTrigger only when the combination satisfies the chosen logic type.
Logic Type — one of AND, OR, XOR, NAND, NOR.Initial State — the gate's starting output state (on / off).AND gate), or to branch behaviour.| Input | Description |
|---|---|
Trigger |
Send an input signal into the gate |
Reset |
Reset all remembered input states |
Enable |
Enable the gate |
Disable |
Disable the gate |
| Output | Description |
|---|---|
OnTrigger |
Fired when the gate condition is met |
A countdown / interval timer that fires OnTimer after a set duration — once, or repeatedly. Ideal for delayed actions or things that happen on a beat (spawning waves, flashing lights, timed sequences).
Full details: LogicTimer
Interval — time in seconds before it fires.Start On — start the timer automatically at level load.FireTimer fires it immediately; ResetTimer restarts the countdown.| Input | Description |
|---|---|
Enable |
Start the timer |
Disable |
Stop the timer |
Toggle |
Toggle the timer on/off |
FireTimer |
Fire immediately |
SetTime |
Set the interval in seconds [float] |
ResetTimer |
Reset to the initial time |
| Output | Description |
|---|---|
OnTimer |
Fired each time the interval elapses |
Runs a debug-console command when triggered, letting map logic drive anything the console can do (cam 2, wireframe, ent_fire, spawning, and more).
Full details: LogicConsoleCommand
Command — the command line to run when no parameter is supplied (default cam).Command property.| Input | Description |
|---|---|
RunCommand |
Run a console command (param: the command line; blank uses Command) [string] |
SetCommand |
Set the default command string [string] |
Enable |
Allow this entity to run commands |
Disable |
Prevent this entity from running commands |
| Output | Description |
|---|---|
OnCommand |
Fired after a command is queued (param: the command line) [string] |
A cinematic camera that takes control away from the player and glides along a chain of PathNodes — used for cutscenes and scripted reveals. Control returns to the player when the sequence stops.
Full details: Camera · Demonstrated in
maps/Maze.json
Path Target — the first PathNode of the chain to follow.Speed — travel speed in world units per second.FOV Override — optional field-of-view during the shot.Look Ahead — aim at the next node (true) or follow the path tangent (false).| Input | Description |
|---|---|
Start |
Begin the cinematic sequence |
Stop |
Abort and return the camera to the player |
Pause |
Freeze the camera at its current position |
Resume |
Continue a paused sequence |
SetSpeed |
Override travel speed [float] |
| Output | Description |
|---|---|
OnStart |
Fired when the sequence begins |
OnReachNode |
Fired each time the camera arrives at a PathNode |
OnFinished |
Fired when the camera reaches the last node |
Creates a new entity at a PathNode's position when triggered — monsters, pickups, even another spawner. Great for waves, ambushes and dynamically populated rooms.
Full details: Spawner · Demonstrated in
maps/Spawner_Test.json
Spawn Type — which entity type to create (default Monster).Target Node — the PathNode used as the spawn point.Max Spawn — cap on total spawns (0 = unlimited).Spawn Properties — extra properties merged into each spawned entity.| Input | Description |
|---|---|
Spawn |
Spawn one entity at the target PathNode |
Enable |
Allow spawning |
Disable |
Prevent spawning |
SetTargetNode |
Change the spawn location to a different PathNode [string] |
| Output | Description |
|---|---|
OnSpawn |
Fired each time an entity is spawned |
OnMaxReached |
Fired when the Max Spawn limit is hit |
A small global store (up to 25 key/value pairs) that survives level changes, so events in one map can affect another — quest flags, puzzle state, counters, and simple inventories.
Full details: LogicKeyValueStore
store_name and they share the same data automatically.SetValue writes, GetValue reads, and TestValue compares-and-branches via OnCompareTrue / OnCompareFalse.Increment / Decrement treat values as numbers; ClearKey / ClearAll reset them.| Input | Description |
|---|---|
SetValue |
Store a key=value pair |
GetValue |
Read a key and fire OnValueRead with the value |
TestValue |
Compare a stored key and fire OnCompareTrue / OnCompareFalse |
ClearKey |
Remove a single key |
ClearAll |
Remove all keys |
Increment / Decrement |
Adjust a numeric value up or down |
| Output | Description |
|---|---|
OnValueSet |
Fired when a key is set or modified |
OnValueRead |
Fired by GetValue with the value |
OnCompareTrue / OnCompareFalse |
Result of a TestValue comparison |
OnKeyNotFound / OnStoreFull |
Error signals |
(See the dedicated page for the full input/output list and cross-level persistence details.)