How to use it
Three steps to a story that runs while you fly.
1 Ask for one, in the Adventures tab or out loud.
2 Fly. The next beat arrives when your journal earns it.
! The one that stops people.
Why it works this way
A story you fly, told by the ship's AI, moved along by your own journal.
1 A story, not a list of stops.
2 Your journal moves it. There is nothing to tick.
3 It cannot spoil itself.
Foreshadowing still happens — it is written into the earlier beats, by the turn that did know the ending. Between beats the ship's AI wonders aloud in character and never states a new fact about the story, so nothing it says on a quiet stretch can contradict a beat you have not reached.
The details
An adventure is a story: someone wants something, there is a belief the events exist to test, a turn where it stops being what it looked like, and an ending that means something. It is told by the ship’s AI, anchored to the galaxy by beats, accepted by you, and advanced by your own journal.
The drive behind it is to add story to a sandbox, which sandboxes deeply lack. It is deliberately not a checklist of things to complete.
Two ways to have one
Write an adventure — the editor is a level of the Adventures tab. A name, an opening, then the five spine questions in order, each skippable. Then the beats: what happens, where, and the line. Every field is a chooser except the prose, so the form cannot compose something the file would refuse.
Ask for one — a short form and D47 writes it, in the voice of whichever core is aboard. Three choosers, each with a default, so pressing Go on an untouched form is a complete ask:
- Reach — how far the story may go: near here, a session’s flying, anywhere. Turned into light years by what you can actually move — your ship’s jump range, or your carrier’s if you have one.
- Length — which structure. Short is three beats, setup and turn and resolution. An evening is five. Long is eight or more. The count follows from the structure rather than the other way round.
- Using — this ship only, or anything I own. Shown only when you have a choice.
And one optional thing said: a brief — a theme, a mood, a place it must include. Empty is fine.
Things it reads rather than asks, because asking would be asking you to describe your own ships: your fleet and what each hull can do, whether you have a carrier and where it is, where you are, who is aboard, and your ranks.
What a beat can be
Five triggers, and every one is a comparison on a structured field rather than on a name:
| Trigger | Matched on | Never on |
|---|---|---|
| Arrive at a system | the system’s id | its name |
| Dock at a station | the station’s market id | its name — a carrier’s name is player-chosen |
| Land on a body | system and body ids | the body’s name |
| Scan a body | system and body ids | the body’s name |
| Reach a rank | career and a number | any rank word |
Nothing a stranger can choose — a ship name, an in-game message, a mission title — can be a trigger. That is the safety property stated as a type rather than as a promise.
People may be invented. Places may not.
A story needs people and the galaxy’s named ones are few, so the AI may invent a contact, a rival, a voice on a wreck’s log. It may not invent a system, a station, a body, a faction, a Power or a game mechanic — every place in a generated story is resolved against the galaxy before you are offered it, and a miss refuses the whole draft by name.
Invented people are told about, never met. The game has no act for meeting anyone, and the only thing you can actually do in a story is fly to the next beat. Ask the core whether one of them was real and it says they are someone in the story.
Where you are in it, and what it says
A beat speaks when it fires, and hands over to the next one in the same breath:
The log's last entry is dated the day the beacon went quiet.
Next: dock at Maren Anchorage in Dyson's Hollow.
The hand-off names the place and the act and nothing else — never the next beat’s title or its
line, which is the spoiler rule holding. A scan’s hand-off says how, because “scan X” sent a
Commander looking for a detailed surface scanner when the ship’s own scanner was what the story
meant. It also says that going there counts: a body already scanned writes no second Scan, so a
scan beat is satisfied by the approach as well, and a story cannot strand a Commander on somewhere
they had already been.
No counts where you read. The card says the story’s name and where it is — not yet begun, the current beat’s title, or finished. Beat 3 of 7 is checklist language and stays off the card.
Stopping, and starting again
Abandon a begun adventure and it stops telling you: no beat fires, the AI drops it from what it knows, and a beat waiting out its settle window is discarded. The record stays, folded away at the foot of the list with what it reached. Begin again on an abandoned one starts from the opening with a fresh stamp — nothing that happened in the gap counts, because a start is a start.
Abandoning is also how a begun adventure gets edited: abandon it, change it, begin again.
Remove deletes the record. For a begun one it asks first, because an adventure three beats in is work you did.
Both are yours alone, reachable from the panel and nowhere else.
Nothing here is callable by the model
Generation, beginning, abandoning and removing are all your acts, on the panel. The ship’s AI can read the story — that is what it is for, so it can play off it — and can change nothing about it. A hostile message arriving in your comms panel cannot propose a story, end one, or delete one.
It also costs nothing: none of this is on the advertised tool surface.
Where it lives
data/adventures.json, beside the executable, per Commander, and hand-editable like everything
else D47 writes. Only two things are stored — the definition, and the moment you began. Everything
else is worked out from your journal each time, which is what lets a story you flew with D47 closed
be up to date the moment you open it.
What it does not do yet
- Branching. One current beat, and only it can match; a beat that would match out of order is ignored rather than banked.
- Importing somebody else’s adventure. The store file is already the format, so this is a copy and a validate when it comes.
- Somewhere I’ve been in the editor — D47 keeps no visited-places list, so the two ways in are Here, which reads your live position, and typing a name.