Skip to main content

World editor

The same editor appears from the Worlds page, inside a roleplay session, and in an authoring chat. The source determines what changes mean:

  • editing a world changes future sessions;
  • editing a session changes only that story;
  • an authoring chat writes the world files on disk.

The world editor showing a world's general information and opening text

Sections​

An authored world also has parts that belong to the world as a whole and are not in a session's editor:

  • About: name, tags, description, the rules of the world (one short rule per line), the opening message (plain text; an opening with lines spoken by characters is shown read-only), other openings (a title and a narration each; the player picks one when starting a session), author and link, a version label (recorded in the sessions started from the world), the time zone and starting time of the story clock, the preset and the lorebooks new stories start with. Saving changes only the fields that changed and keeps the rest of world.json.
  • Daily life: each character's routine: windows of the day with an activity, optional weekdays or calendar rules, place, spot and position, and whether the character would drop it for something that comes up. Times are HH:MM; a window that ends before it starts runs past midnight. Windows are checked as the world is read at a start, so a wrong time, day, holiday, place or spot is refused with the reason and nothing is written.
  • Calendar: the hemisphere the seasons follow and the holidays of the world, each with an id, a name and the days it falls on (the same day tokens as routines). A holiday that a character's routine or a trigger still names cannot be removed. A world with no holidays and northern seasons has no calendar.json.
  • Dice: the world's dice checks (dice.json): for each, when the game master rolls it, the dice, whether the roll is read as a total or as a count of dice that hit, whether it is compared with a difficulty or a skill, a quality of the character it adds, and its result bands. Saving checks the checks as a story start does, including that no value the dice can give is left without a band and that a quality the check adds is a number about characters declared in Tracked values. Removing the last check removes the file.
  • Tools: the optional tools each kind of agent has (game master, characters, record keeper), as switches kept in world.json; a story starts from them and can change them in its own Chat settings. Tools this version does not know are kept and not shown. The same section lists, folded under each kind of agent, the tools other plugins registered for everyone (file or shell tools, MCP servers), which are off until switched on.
  • Tracked values: the variables the world declares (variables.json): a number, flag or choice about characters, things, places or the world, with limits, a starting value, how it is told in words (bands) and who can tell. A variable that a character, thing, place or the world still gives a value to cannot be removed, and a limit that an existing value breaks is refused.
  • Prompts: every prompt the models are given, in a chosen language, marked Style (persona and prose) or Rules (the game and its tools). A prompt the world carries replaces the shipped one in sessions started afterwards; Use the shipped one moves the world's own version to .trash. The same checks as the authoring assistant apply: the placeholders of the original must stay. Save as preset copies the prose prompts the world carries into a new preset in your library.
  • Images: the world's image library, like a session's gallery. Pictures added here, or fetched when a card is imported, are copied into every session started from the world. A picture a session has not described yet can be described by hand.

The parts of the cast and the story are:

  • Characters: identity, role, personality, speech, initial state, emotion, intents, routines, voice and visual identity.
  • Places: descriptions, containment, features, exits, visual identity and a reference picture (generated from the identity, or a PNG you upload).
  • Things: descriptions, quantity, condition, ownership, placement, equipment properties, visual identity and a reference picture.
  • Factions: values, structure, members, goals and faction relationships.
  • Relations: directional character relationships and explicit entity knowledge.
  • Lore: canonical entries, who knows each one (everyone in the story, or only the characters listed, by id, name or alias), subjects, related entries and sources. In a running story, changing the list changes which characters have learned the entry. In an authored world entries can be added by title and removed (moved to .trash); an entry that other lore or a plot still names cannot be removed until those references are gone.
  • Plots: plot definitions and, in a session, current progress.
  • Variables: authored deterministic state.
  • Interface: the interface packs of an authored world: what each holds and asks for, every problem with its file, and a preview of each surface as a story of the world would start (see interface packs). You can make a pack, and edit, add or delete its text files (html, css, js, json, txt, svg) here; the pack is checked again after each save, and what is wrong with it is listed even when the file was kept. Pictures and fonts are put in the folder by hand.
  • Triggers: what the world does by itself, in sentences: what each waits for and does, in a story whether and how often it fired, and what it names that the world does not have. In a world's own editor each trigger can be edited as its document, added, or removed (the removed document is kept in the world's .trash); a document is checked as a story start checks it, and refused with every problem when it names something the world does not have. A story's triggers are shown only. The authoring assistant and the file triggers.json work too.

Each panel validates before saving. Keep IDs stable after other records refer to them. Names may change without breaking links; IDs are the links.

The character editor keeps identity, role, starting state and longer descriptive fields in one scrollable form.

The character editor for a playable character

Relationships can also be inspected as a graph before editing the selected connection.

The relationship graph with one directional relationship selected

External file edits are not watched continuously. Refresh the world catalogue or editor after changing files outside DSH.

Translating a world​

A world is played in the language it is written in: the names, descriptions and the characters' speech come from its files, whatever language the instructions to the models are in. When the editor finds that a world is written in a different language than the one you use, it says so above the sections, and the dialog that starts a story says it too. Which language a world is written in is read from the script of its text; only English and Chinese are told apart.

Translate into… opens the world's authoring chat and asks it to make a copy of the world in your language, next to the original. The original is never changed. The copy is a world of its own, with a new id, its translated name, and a folder named like the original with the language added.

  • Names (people, places, things, groups, holidays) are translated first, once, so that every file calls each of them the same way. A character's or faction's original name is kept as an alias, so a player can still type it.
  • The words of every file are then translated file by file: names, descriptions, speech, goals, relationships, lore, plots, rules, openings, routine activities, what triggers say and what tracked values are called.
  • What is not words is kept exactly: ids, references, times, day rules, tokens such as {character:key}, numbers and the settings of variables. What a visual identity says about how someone looks is translated (its tags are kept), and the world's own prompt files are written in the new language beside the old ones, with their ${...} variables kept; a prompt file the new language already has is left alone. Interface packs and images are copied as they are: a pack reads the interface language from rp.theme() and carries its own texts.
  • Every translation is checked before it is accepted: one for each text, the tokens in braces unchanged, and not left in the original language. A text that fails is asked again once; if it still fails the translation stops and the chat says why.
  • The copy is then checked as a story start checks a world. Any problem is listed in the chat.

It takes several minutes, in the background of the chat, and uses the model of the authoring chat: a local model keeps the world on your machine, while a translation by a large online model is faster and usually better. Read the result before you play it: a local model sometimes renders a name differently from how you would.