Inkling
Limited Rust implementation of the Ink
markup/scripting language for game dialog.
Ink is a creation of Inkle. For more information about the language, see their website.
Using Ink you can easily write a story or create a dialog tree.
* Branching is very simple[]: <>
just start your line with an asterix or plus marker.
Want nested choices? Add more markers!
* * A branching choice contains all information below it
of the same level or higher.
* * * [I see.]
* * Pretty cool, huh?
- - Use gather points like this to return all nested choices <>
to a single path.
* * [Cool!] -> fin
* You can organize the story using knots <>
and divert (move) to them, like this:
-> next_knot
=== next_knot ===
Simple and fun.
-> fin
=== fin ===
Ink is very powerful and has a lot more features than shown here. <>
Do note that `inkling` only implements a subset of all its features. <>
Hopefully more in the future!
-> END
Features
Currently and likely for the foreseeable future the feature set is very limited compared to Inkle's own implementation. Available features are:
- Knots, stitches, glue and diverts, ie. basic story structure
- Choices, of sticky and non-sticky kinds, plus fallback choices
- Nesting choices and gather points
- Simple conditionals for which choices are presented, but only for checking against how many times knots have been visited
- Tagging of lines and choices
- Optional: De/serialization of finished stories through
serde
Likely candidates for further development:
- Line text variations: sequences, cycles, variables, conditionals
- Includes of other files
Difficult features for which I doubt my skill level to implement:
- Advanced flow control: tunnels and threads
- Verifying that all story branches are complete
- Mathematics and heavy logic
Usage
See the documentation or the provided example for a minimum viable story processor. Enable serde
de/serialization by activating the serde_support
feature. This feature derives Deserialize
and Serialize
for all required structs.
Contributions
Writing this has mostly been for fun and to create a simple game, hence the lack of features. Contributions are welcome!