Choice menus
How to present and control choice menus in native ink, including once-only, sticky, conditional and fallback choices. Compatible with the Pixi’VN integration.
The ink + Pixi’VN integration supports native ink choices without introducing new choice types. For full details on choice syntax and behavior, refer to the official ink documentation.
You can ask the player to make a choice in ink using a list of * or + bullets, followed by the choice text. The choice text is displayed to the player and they select one option to continue the story.
*indicates a choice that can only be made once.+indicates a choice that can be made multiple times (sticky choice).
=== start ===
* Go to Paris
You decide to visit Paris. -> visit_paris
+ Go to London -> visit_london
* Stay at home
You decide to stay at home. -> DONESuppressing choice text
By default, the text of a chosen option is printed again in the output. If the visible choice text is given in square brackets, that text is shown only in the choice menu and not printed in the subsequent output.
=== start ===
Hello world!
* [Hello back!]
Nice to hear from you!The square brackets split the option content: what appears before is printed in both the menu and the output; what is inside the brackets appears only in the menu; what follows appears only in the output. This is useful for dialogue choices:
=== start ===
"What's that?" my master asked.
* "I am somewhat tired[."]," I repeated.
"Really," he responded. "How deleterious."Varying choices
Fallback choices
Fallback choices are never shown to the player but are automatically chosen by the engine if no other options are available.
A fallback choice is simply a choice without visible choice text:
* -> out_of_options=== start ===
You search desperately for a friendly face in the crowd.
* The woman in the hat[?] pushes you roughly aside. -> find_help
* The man with the briefcase[?] looks disgusted as you stumble past him. -> find_help
* -> // fallback
But it is too late: you collapse onto the station platform. This is the end.
-> ENDConditional choices
You can enable or disable choices with conditions. The simplest test is whether the player has previously visited a particular knot or stitch.
* { not visit_paris } [Go to Paris] -> visit_paris
+ { visit_paris } [Return to Paris] -> visit_paris
* { visit_paris.met_estelle } [Telephone Mme Estelle] -> phone_estelleNote: the test knot_name is true if any stitch inside that knot has been visited. Conditionals do not override the once-only behaviour of * options — use + for repeatable options.