A text RPG runtime

An entire game is one JSON document.

Rules, skills, classes, monsters, places, and quests are written as JSON. The game is derived from it. Write a world, export a file, play it. Aurendel, the world that comes with it, is the first one written for it.

1037fields in the format
47addressable collections
200engine messages you can rewrite
0things hardcoded in the engine

Three things to know

  1. Nothing is hardcoded. No attributes, damage types, conditions, or level curve come with the engine. You declare them. Strength, hit points, and twenty levels are not assumed. Vigor, Wits, and a resource called Vitality work the same.
  2. Runs replay exactly. A save carries the dice with it. The same starting number and the same choices reproduce a run move for move.
  3. The engine states facts, never sentences. It reports a hit for seven. Your world supplies the words, in any language.

The five parts of a world

{
  "id": "my_game", "version": "1.0.0",
  "meta":      { "title": "My Game" },

  "rules":     { /* attributes, resources, conditions, dice, the level curve */ },
  "content":   { /* abilities, items, monsters, NPCs, factions */ },
  "world":     { /* biomes, areas, points of interest, dungeons, maps */ },
  "narrative": { /* text, dialogue, quests, lore, memory */ },
  "start":     { /* party size, character creation, where play begins */ }
}

An unrecognised property is refused when the world loads, with a line number and usually a suggestion. Adding data of your own goes through one of six mechanisms.

One vocabulary for gating

Loot limited by mastery, a door needing a key, dialogue that appears once a faction trusts you, a monster reacting to what it remembers. One requirement object, used in sixteen places.

Where to go

Getting started

  1. Open the studio. Pick New world, Examples, or Open a file.
  2. Build. Worlds save in your browser as you work. Nothing is uploaded.
  3. Export to get a world file.
  4. Open that file in the player.

The studio covers the editor. The document covers writing the JSON directly.