Choose how you want to export your adventure
Complete project with all data - reimport to continue editing
Source code ready to compile to .z3 with Inform 6 compiler
Compile to playable .z3 for any Z-machine interpreter
Web page with embedded interpreter (coming soon)
Import games from other text adventure formats. Each import creates a new Z3TA adventure you can then edit natively.
Build a hint system for your players. Generate a skeleton from your game data, then annotate each step with spoiler-controlled hints.
No walkthrough yet. Click Generate Skeleton to build one from your game data, or load an existing one.
The skeleton analyses your rooms, items, exit conditions, and win events to suggest a traversal order.
Track game state: flags, counters, and story variables.
SET flagname or SET varname = value to change a variable. Type FLAGS to see current values. Variables can be set automatically by item events (take, examine, use).
Set the maximum possible score for this game (shown as "X / MAX" to the player). Leave 0 to hide score.
Events are triggered by gameplay actions (onTurn, onEnterRoom, onTakeItem, etc.) and can execute actions when their conditions are met.
onTurn - Every turnonGameStart - When game startsonEnterRoom - Entering a roomonExitRoom - Leaving a roomonTakeItem - Taking an itemonUseItem - Using an item
{
"id": "escape_timer",
"trigger": "onTurn",
"conditions": [{ "var": "escape_started", "equals": true }],
"actions": [
{ "incrementVar": "timer" },
{ "ifVarEquals": { "timer": 10 }, "then": { "endGame": "Time ran out!" } }
]
}
Rules are reusable logic blocks evaluated continuously after each turn. When conditions are met, their actions execute automatically.
{
"id": "power_rule",
"conditions": [{ "var": "generator_fixed", "equals": true }],
"actions": [{ "setVar": "power_on", "value": true }]
}
Customise how your game looks for the player. Changes apply in Play and Playtest mode.
This is how your game will look to players.
Click below to launch the full playtest screen and test your adventure as a player.
Tip: Save your game before playtesting to make sure all your latest changes are included.
Z3 Adventure Studio lets you build text adventure games in your browser — no coding required. Players type commands like EXAMINE DESK or UNLOCK DOOR and your world responds.
Version 3.0.5 is a stability release. It fixes NPC placement display (rooms now refresh correctly after adding or removing an NPC), exit creation refresh, game reset integrity (locked exits, changed room descriptions, and the start room setting all reset correctly on restart), orphaned reference cleanup on item/room delete, a recursion guard for circular event chains, import validation, and counter-based id generation. Version 2.0 introduced the reactive engine: events, rules, dynamic descriptions, and text interpolation.
New Adventure: Library → + New Adventure. Name it. You land on the Map tab.
Saving: Press Ctrl+S (Cmd+S on Mac) anywhere in the editor, or click 💾. Your browser will warn you if you try to leave with unsaved changes.
Keyboard Shortcuts: Ctrl+S saves, Escape closes modals.
Importing: Export → Import a .z3ta file. Projects auto-upgrade to v2.0+ format on load.
| Tab | Purpose |
|---|---|
| Map | Visual overview. Add rooms, see connections, inspect contents. |
| Room | Edit selected room — descriptions, exits, scenery, dynamic text. |
| Library | All items and NPCs in one list. |
| Variables | Declare flags and counters. Set max score. |
| Events v2.0 | Logic that fires on triggers — produces player-visible output. |
| Rules v2.0 | Silent logic evaluated every turn — for persistent world state. |
| Theme | Colours, fonts, 10 built-in presets. |
| Export | Download as .z3ta JSON or Inform 6 source. |
| Playtest | Full-screen test with output, inventory, exploration %. |
Add on the Map tab with +. Click a room, switch to Room tab to edit. Use 📋 Duplicate This Room button (above Delete) to copy a room with all properties, scenery, and dynamic descriptions. Duplicated rooms start with no NPCs — add them explicitly.
lockedExits to gate on carrying an item; exitConditions to gate on a flag.Scenery — background objects players EXAMINE. Not takeable. Use 🔍 Suggest from Description to auto-detect scenery from room text, then edit with the ✎ button.
| Property | Effect |
|---|---|
isScenery: true | Examinable only — never listed |
takeable: false | Fixed — still examinable |
readable + readText | Enables READ command |
openable + isOpen | Enables OPEN / CLOSE state |
isContainer | PUT [item] IN [this] |
isSurface | PUT [item] ON [this] |
wearable | WEAR / REMOVE |
lightSource | Illuminates dark rooms when carried |
flagOnTake/Use | Sets that variable to true |
scoreOnTake/Examine/Use/Drop | Points once per action |
Dialogue is structured as nodes — each has speech and response options that chain onward. Every NPC must have a node with id: "greeting". Use next: "" to end a branch.
onTalkNPC events to trigger actions (give item, set flag) when the player talks to an NPC.Item Editor → ⚡ Custom Verbs. One word or short phrase; any response text. Checked before ambient verbs — always takes priority for that item.
| Item | Verb | Response |
|---|---|---|
| Cipher | decode | "The grid resolves to TR 214 419." |
| Altar | kneel | "The stone beneath your hands is warm." |
| Telescope | look through | "The coastline swims into focus." |
50+ synonyms map to engine actions. Adverbs stripped automatically — CAREFULLY OPEN THE BOX = OPEN BOX.
| Category | Synonyms |
|---|---|
| Examine | Study, Scrutinise, Survey, Observe, Inspect |
| Take / Drop | Acquire, Collect, Retrieve, Pocket / Discard, Abandon, Ditch |
| Mechanical | Press, Hit, Activate, Trigger, Yank, Rotate, Crank |
| Sensory | Sniff, Inhale, Feel, Stroke, Hear |
| Social | Speak to, Chat with, Converse with, Greet, Hail |
| Wear | Don, Put on / Take off, Doff, Strip off |
TAKE ALL / DROP ALL — covers all items; scenery skipped. Unknown verb + known object falls back to USE response.
Global intransitive actions — no object needed. 30 built in. Override or add more in Settings → 🗣️ Global Ambient Verbs.
Prepositions handled naturally: CRY INTO HANDKERCHIEF or LEAN AGAINST WALL both parse cleanly.
Genre starter packs from Settings → Verb Packs:
Export vocabulary as a .z3verbs file to reuse across projects.
Events fire on a trigger and produce visible output. Rules evaluate silently every turn — for world logic that should always hold.
| Trigger | Fires when… |
|---|---|
onTurn | Every player turn — for countdowns, timers |
onGameStart | Game initialises |
onEnterRoom | Player enters any room |
onExitRoom | Player leaves any room |
onTakeItem | Player takes any item |
onUseItem | Player uses any item |
onTalkNPC | Player talks to any NPC |
Conditions: var equals/notEquals, inventoryHas, roomVisited, itemState, flagTrue, scoreAtLeast (array = AND).
Actions: setVar, incrementVar, decrementVar, movePlayer, unlockExit, lockExit, giveItem, removeItem, addScore, changeDescription, endGame, triggerEvent, output.
triggerEvent chain that loops back to itself (A→B→A). The engine will stop at depth 10 and log a warning, but the game may behave unexpectedly. Always trace event chains before publishing.Room Editor → Dynamic Descriptions. Add conditional text appended to the base description when conditions are met.
Use {{variableName}} in any text to show the current value: "The counter reads {{timer}} seconds."
Declare all flags and counters in the Variables tab before use. turnCount is auto-incremented — no declaration needed.
Set Max Score in Variables. Award via scoreOnVisit (rooms) and scoreOnTake/Examine/Use/Drop (items). Total must equal Max Score exactly.
| Category | Commands |
|---|---|
| Movement | N S E W NE NW SE SW U D IN OUT |
| Looking | LOOK (L), EXAMINE (X), EXITS |
| Items | TAKE, DROP, INVENTORY (I), READ, OPEN, CLOSE, LOCK, UNLOCK, PUSH, PULL, TURN, SMELL, LISTEN, TOUCH, USE, WEAR, REMOVE, TAKE ALL, DROP ALL |
| Talking | TALK TO, GIVE [item] TO, SHOW [item] TO, ASK [npc] ABOUT |
| Game | SCORE, HINT, UNDO, SAVE, RESTORE, WAIT (Z), FLAGS, HELP (?), QUIT, RESTART |
A locked cottage. A hidden key. A ghost who knows too much. Four rooms, one puzzle, one NPC, proper ending. About 20 minutes.
Click New Adventure. Name it The Locked Cottage. Save.
Map → + four times. Click each room → Room tab:
iron key.Library → Add Item:
Library → NPCs → Add NPC. Name: The Woman. Location: Sitting Room.
Greeting: "You took your time... The key is in the garden. Take what you came for and go."
Add response "Who are you?" → second node where she reveals herself.
Settings → Global Ambient Verbs → + Add:
wait → "You stand still. The garden is very quiet."pray → "From inside, a faint sound — almost like a chair shifting."Settings → Story: "A cottage. A locked door. Someone left something for you."
▶ Test Play — walk the critical path:
| Feature | Why |
|---|---|
| Short descriptions | Full desc won't repeat on every visit |
| Scenery entries | Rewards players who EXAMINE everything |
| Locked exit | Real puzzle, no code required |
| NPC with 2+ nodes | World feels inhabited |
| WAIT ambient verb | Grounds the player in the atmosphere |
light custom verb to the hearth.burn custom verb.onTakeItem event when the document case is picked up.