🎨 Creative
Ink Interactive Fiction Script Writer for inkle's Ink and Inky: Knot and Stitch Scene Map, Once Only and Sticky Choices, Gathers, VAR State Tracking, Conditional Text and Choices, Diverts to END, and a Playtest Path Table
Turn a branching story outline into a working Ink script you can paste into Inky: a knot and stitch map, once only and sticky choices that never leave the player stuck, gathers that fold branches back together, VAR variables for trust and items, conditional lines and choices, clean diverts to END, and a table of paths to playtest before you export to inkjs or Unity.
0Reviews
Prompt
Act as a narrative designer who writes branching dialogue in inkle's Ink language, tests every scene in the Inky editor, and has shipped Ink stories through inkjs on the web and the Ink Unity integration. Inputs: - Story premise, tone, and point of view: [Premise] - Scene outline in order, with the decisions the player makes: [SceneOutline] - State to track (relationships, items, clues, counters): [StateList] - Endings you want and what unlocks each: [Endings] - Target runtime (inkjs web page, Unity, or Inky only) and any tags your engine reads: [Runtime] - Output format: [Format] Generate: 1. A scene map from SceneOutline: one knot per scene with a snake_case name, stitches for sub locations or beats, and a line for each divert between them. Flag any scene with no way out. 2. A variable table from StateList: each VAR with its starting value and type, where it changes, and where it is read. Use temp variables only for values inside one knot. 3. The script in valid Ink: knots with triple equals signs, stitches with one equals sign, choices with an asterisk when they should disappear after use and a plus sign when they must stay available, square bracket text so the choice wording is not repeated in the output when that reads better, and labeled gathers so dialogue loops back cleanly. 4. State changes with tilde lines, conditional choices that show only when a variable allows them, and inline conditional text for lines that change with state. 5. A multi line conditional block that routes to each ending in Endings, and every path ending in a divert to END or to another knot. No path should run out of choices. 6. Tags for Runtime only when the engine reads them (speaker, mood, audio cue), written with a hash mark at line end. 7. A playtest path table: each path as a list of choices, the variables at the end, the ending reached, and what to check in Inky (no dead ends, no repeated choice text, no orphan knots). 8. Export notes: compile with inklecate or Inky's export to JSON, and load the JSON in inkjs or the Unity integration according to Runtime. Constraints: - Every line of code must compile in current Ink. Do not invent functions or syntax; if unsure, keep it simple. - Keep prose lines short enough to read on a phone screen. No em dashes.
Instructions
Replace every [bracket] with your details before running. Works on ChatGPT, Claude, and Gemini.
Generated Output
This image was generated using the prompt above.

Examples
Example Input
Premise: cozy mystery on a foggy island, second person, a ferry vanished overnight SceneOutline: harbor talk with Mara, walk to the lighthouse with or without her, find the key or fail, read the keeper's ledger StateList: trust with Mara (number), has_key (true or false), with_mara (true or false) Endings: ledger ending if the key is found, locked out ending if not Runtime: inkjs on a web page, reads a speaker tag Format: map, variables, full script, path table
Example Output
SCENE MAP
harbor -> lighthouse (with Mara) or lighthouse.door (alone)
lighthouse.door -> ledger or locked_out
ledger -> END; locked_out -> END
VARIABLES
| VAR | Start | Changes | Read |
| trust | 0 | harbor, lighthouse | harbor choice |
| has_key | false | lighthouse.door | ending block |
| with_mara | false | lighthouse | door text and stone choice |
SCRIPT
VAR trust = 0
VAR has_key = false
VAR with_mara = false
-> harbor
=== harbor ===
Fog covers the harbor. Mara waits by the ferry office, lantern in hand.
- (talk)
* [Ask about the missing ferry]
"It left at midnight with no crew," she says. #speaker:Mara
~ trust = trust + 1
-> talk
* [Ask about the lighthouse]
"Old Tobin kept a ledger up there. He stopped writing in May." #speaker:Mara
-> talk
+ {trust >= 1} [Ask her to come with you]
-> lighthouse
+ [Walk to the lighthouse alone]
-> lighthouse.door
=== lighthouse ===
Mara walks beside you up the cliff path.
~ with_mara = true
~ trust = trust + 1
-> door
= door
The iron door is locked.
{with_mara: Mara points at a loose stone by the step.|The step is dark and wet.}
* {with_mara} [Lift the loose stone]
A brass key, green with salt.
~ has_key = true
* [Force the lock]
The lock does not move.
-
{ has_key:
-> ledger
- else:
-> locked_out
}
=== ledger ===
The last page names the ferry captain. Mara reads it twice. #speaker:Mara
-> END
=== locked_out ===
You walk back to the harbor as the fog thickens.
-> END
PLAYTEST PATHS
| Path | Choices | End state | Ending |
| 1 | ferry, come with you, lift stone | trust 2, key true | ledger |
| 2 | ferry, come with you, force lock | trust 2, key false | locked_out |
| 3 | lighthouse, alone, force lock | trust 0, key false | locked_out |
| 4 | ferry, lighthouse, alone, force lock | trust 1, key false | locked_out |
Check in Inky: the sticky choices keep the harbor loop open after both questions, the stone choice never shows when alone, and no choice text prints twice.
EXPORT
Export to JSON from Inky (or run inklecate), load it with inkjs on the page, and read the speaker tag from each line's tags to style Mara's lines.