-
-
Notifications
You must be signed in to change notification settings - Fork 2
WorldEditor
A guide to each tab in the World Editor โ what it does, why it exists, and the settings that aren't obvious from the screen.
๐ก Every tab has a ? button beside its search box with a short version of this page. This is the long version.
Sections land here as each tab's help is written, so a tab missing below simply isn't documented yet.
The numbers that describe your player โ health, coin, reputation, whatever your world needs. Each stat holds a value between a Min and a Max, and the AI sees them on every turn.
Prose alone drifts. A stat is a fact the AI has to write around: it can't narrate you sprinting across a rooftop while your Stamina reads 4/100 without the number contradicting it.
The narrator is explicitly told to let stats shape how an action turns out โ a low stat as effort and cost, a high one as ease โ and not to tabulate them or report their changes. A separate step handles the actual numbers. So stats steer the story without it reading like a character sheet.
Each stat's Name is always sent. The Stats chip in your prompt decides what accompanies it:
| Piece | Adds |
|---|---|
| Values | The current value and its ceiling โ 62/100
|
| Status | The matching Stat Descriptor โ a word for the current level |
| Meaning | The stat's Description โ what it represents |
With no piece selected, the line is just the stat's name.
โ ๏ธ Every stat is sent on every turn. Stats are one of the steadiest drains on your context budget โ three meaningful stats beat a dozen decorative ones.
| Field | What it does |
|---|---|
| Name | Also how the AI refers to the stat, and how stat changes are matched back to it. |
| Type | Number. (List exists in the data format but isn't currently offered.) |
| Description | What the stat represents. Sent to the AI when the chip's Meaning piece is on. |
| Min / Max | The range. Values are always clamped to it. |
| Initial Value | Where the stat starts. Ignored when the stat has code. |
| Regen | Added to the value once per turn, then clamped. Positive heals over time; negative bleeds. |
| Body Sliders | Bind body morph sliders to this stat โ its value, from Min to Max, drives each slider. Each slider belongs to only one stat. |
Descriptors turn a number into a word โ Winded, Exhausted โ which is what the AI receives when the chip's Status piece is on.
Each has a Threshold % and a Description. Two things trip authors up:
โ ๏ธ Threshold % is a percentage of the way from Min to Max โ not a raw value. With Min 0 / Max 200, a threshold of50means the value 100.
โ ๏ธ The first descriptor at or below the threshold wins, in list order. List them low to high. If100 โ Finesits first, it matches everything and nothing below it is ever reached.
Four checkboxes stop the AI moving a stat in one direction, while your world's own rules still can:
| Checkbox | Blocks |
|---|---|
| Don't increase | AI raising the value |
| Don't decrease | AI lowering the value |
| Don't increase max | AI raising the ceiling |
| Don't decrease Max | AI lowering the ceiling |
A stat can compute itself from the others. Write JavaScript that returns a number, and it recalculates each turn instead of using Initial Value. Test Code runs it immediately and shows the result or the error.
const health = stats.find(s => s.name === 'Health')?.value || 0;
const strength = stats.find(s => s.name === 'Strength')?.value || 0;
return (health + strength) / 2;Your code runs in an isolated sandbox with a time limit. It sees a read-only copy of every stat โ id, name, type, description, min, max, value, regen โ and nothing else: no other stat's code, no descriptors, no page, no network.
A calculated stat ignores the AI. Its value is recomputed every turn, so anything the AI writes is overwritten. The AI still reads the value and description normally.
๐ Full reference: Stat Code Guide.
Start with two or three stats the story would genuinely turn on, each with a Min, Max and a couple of descriptors. Add Regen, locks and code only when a stat needs behavior the AI shouldn't be inventing.
The people, creatures and things that populate your world โ a ferryman, an eel-smoker, a barred door. An entity belongs to one or more Locations, and the AI is handed the ones that could turn up where the player is.
Left to itself, the narrator invents a stranger, names them, and forgets both by the next turn. An entity is a fixed, reusable character the story can return to โ one the AI is reminded of every time the player is somewhere it lives.
It's framed as a cast list, not a roll-call. The prompt heading is "Characters and things that may appear in this location", so eight entities at a location doesn't force eight into the scene โ the AI casts who the moment needs.
Assignment to a location is the entire gate: an entity in no location never reaches the AI at all.
| Field | Sent? |
|---|---|
| Name | Always |
| AI-Facing Description | Yes โ the main thing the AI knows |
| AI-Facing Summary | Only in prompt slots that ask for the short form |
| Type | Yes, as a plain field |
| Player-Facing Description | Never |
| Image, Image Tags, 3D model, group, order | Never |
๐ก Player-Facing Description is a genuine secret. It's shown to the player in-game and withheld from the AI, which makes it the right home for anything the narrator shouldn't be able to spoil.
Three description fields, with distinct jobs:
- Player-Facing Description โ what the player reads. Never sent to the AI.
- AI-Facing Description โ the full text the AI works from.
- AI-Facing Summary โ a one-line version for slots where the full description is too long. Blank is fine โ it falls back to the full description. The default prompt uses summaries for entities in reachable locations, and full descriptions for the player's current location.
The โจ toolbar beside AI-Facing Summary can draft it from your AI-Facing Description.
The link lives on the location, not the entity โ the entity's Locations picker writes into each location's entity list. Same relationship from either end; assign it wherever you like.
The default prompt feeds entities from three places, as separate blocks: the player's current location, its sub-locations, and reachable locations.
โ ๏ธ Every entity at the player's location is sent every turn. A crowded location is a permanent context bill โ two or three that the scene turns on beat a populated village.
Folders for your own sanity. Nesting and order are editor-only and never reach the AI โ entities feed the AI exactly as if ungrouped, so grouping can never change the story.
The image and 3D model are for the player's screen. Image Tags are booru tags used only for AI image generation โ the โจ toolbar can draft them from the description, and uploading an image with an embedded prompt offers to use it. None of this reaches the narrator.
Write the AI-Facing Description first โ it's the one that does the work. Add a Summary only if the entity turns up in reachable locations, and use the Player-Facing Description when the player and the AI should know different things.
Your world's lorebook. Each book holds entries; an entry injects its content into the AI's prompt whenever one of its keywords appears in the text being scanned.
The AI can't hold your whole world in mind at once โ everything it knows on a given turn has to fit in a limited context window. Writing every detail into your world description spends that budget on every turn, whether it's relevant or not.
The Dictionary is the alternative: lore sits on standby and costs nothing until something brings it up. Mention the Gloamwater, and the AI suddenly knows what it is.
A turn is one action from you and the AI's reply. On each turn, Formamorph scans:
| Scanned | Always? |
|---|---|
| Current scene โ your location, the characters present, and the action you just took | Always |
| Earlier turns โ your actions and the AI's replies | Up to the entry's Scan depth |
Your world description is deliberately excluded. It's present every turn, so terms inside it would fire their entries constantly and defeat the point.
Select an entry to open it. Trigger Keywords (Key) and Value (injected on keyword match) are the whole feature โ everything else is there for a specific problem, and is safe to ignore until you hit one.
Options
| Checkbox | What it does |
|---|---|
| Always inject | Skip the scan; send this entry every turn. Costs context every turn, so use sparingly. |
| Regex | Treat keywords as regular expressions instead of plain text. |
| Whole words | Match on word boundaries, so art stops firing inside cart. |
| Case-sensitive | Off by default. |
| Recursive | Lets the entry be fired by the content of entries that already activated, not just by the scene. |
Scan depth (messages) โ how many earlier messages to search. Leave it blank (all history) to search everything; 0 searches only the current scene.
Secondary Keywords โ an extra condition on top of the trigger. bridge fires only if toll also appears in the scanned text.
| Checkbox | What it does |
|---|---|
| Require all | Every secondary keyword must appear, not just one of them. |
| Exclude (activate when absent) | Inverts the test โ the entry fires only when the secondary keywords are missing. |
Each book splits its entries into two collapsible groups, BACKGROUND and FOREGROUND. They're two separate lore blocks in the system prompt, and an entry's group decides which one it joins. New entries land in Foreground.
To move an entry between them, drag it from one group into the other. There's no dropdown โ the groups are drop zones.
By default Background sits earlier in the prompt than Foreground, but you control placement: both blocks are filled by prompt chips you can move in the prompt editor. If your prompt has no Background chip, those entries fall into Foreground instead.
Books group related entries. Their order sets the order entries are injected, and disabling a book mutes everything inside it at once.
A book's enabled state is a default, not a lock. Before starting, players may see a step where they can toggle and reorder your books โ alongside any dictionaries from their own library. That step only appears when there's a real choice to make: more than one book in the world, or at least one dictionary saved in the player's library.
Start with one book and a handful of plain keyword entries. Everything above exists for a specific problem โ reach for it only when an entry fires when it shouldn't, or fails to fire when it should.
Playing
Reference
Project