A Lua implementation of the Ink narrative scripting language parser and runtime for interactive storytelling in games.
Narrator is a Lua library that implements the Ink narrative scripting language parser and runtime. It allows developers to write interactive stories in Ink and execute them within Lua-based game projects, providing tools to manage branching narratives, choices, and game state.
Game developers using Lua-based engines (like LÖVE or Defold) who want to integrate interactive, branching narrative systems into their projects.
It offers a native Lua implementation of Ink, eliminating the need for JSON intermediaries and providing direct integration with Lua game code, along with features like state migration and external function binding.
The Ink language parser and runtime implementation in Lua
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Allows binding Lua functions directly to Ink scripts and observing variable changes, enabling tight coupling between narrative and game logic, as shown in the bind() and observe() methods.
Includes save/load functionality with migration support, ensuring player progress can be preserved across story updates without corrupting saves, detailed in the migrate function documentation.
Supports most Ink language features like branching, choices, variables, and tags, with a detailed supported list in the README, making it viable for many interactive stories.
Parses Ink to Lua tables for runtime efficiency, with recommendations to use pre-parsed books in production to avoid performance hits, as noted in the installation section.
Does not support threads, divert target variables, or multiple parallel flows, limiting narrative complexity for projects that rely on these features, as admitted in the unsupported list.
Relies on lpeg for parsing Ink files, adding an installation step and potential compatibility issues in environments where Lua libraries are hard to manage.
Exclusively designed for Lua-based engines like LÖVE and Defold, making it unsuitable for projects using other programming languages or game development frameworks.