inkling 0.10.4

Limited implementation of the Ink markup language.
Documentation

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
  • Line text alternative sequences (sequences, cycle, once-only)
  • 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 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 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!