May 10, 2020
I’ve just released a new version of the Elm Narrative Engine. This makes a minor change to the rules system to allow for non-entity rule triggers. In other words, you can now trigger rules by matching a specific string, or by using an entity matcher as before.
Why is this useful? It allows for more flexibility for triggering rules. For example, if you want to trigger a rule programatically, such as a “next-day” or “wait” rule, now you can. I am working on a game currently where I had that exact need, which is what prompted this change.
January 23, 2020
I’ve been busy the last few months working on a game that I entered into last year’s IntroComp. This game is built with the Elm Narrative Engine, and I’ve been adding new tooling to make it easier to write and debug. The tooling has now stabilized, so I’ve moved it all over into the engine and released it as version 5.0.
Most notably, I’ve added an authoring syntax for describing the world model and for building queries and rules. I’ve also added syntax for dynamic narrative text. This new syntax is much nicer and intuitive to use than the Elm code equivalent that it gets parsed into, and also makes it possible to import all game content, rules, and narrative from an external source, like a spreadsheet.
I’ve added some more advanced queries for comparing entities, and a debug bar that uses the new syntax to easily search your world model see which rules are getting triggered as you test play your game.
You can play around with these new features in a live sandbox example, or clone the starter repo, or review the full API docs.
Details of the new features are below.
July 5, 2019
I am exited to announce that version 4.0.0 is officially released. This version includes huge changes and a lot of work to make the Elm Narrative Engine better than ever.
Everything! All changes are geared towards making the engine way more flexible, powerful, and embeddable.
See the full docs. You can also experiment with a live example.
May 19, 2019
Two years ago I made a story game with the Elm Narrative Engine called “Darkness”. It was a small story, exploring some feelings around finding hope in dark times. I also wanted to see if I could make a Twine-like interface using my engine. This is something the Elm Narrative Engine was never designed for, but given the engine’s flexibility in the presentation layer, I thought it might be possible.
February 2, 2018
I have not updated this development blog for a while, but that does not mean that this project is dormant. On the contrary, I continue to work on new, exciting features, which make this engine more flexible and powerful than ever:
- Update the engine for Elm 0.19 - this has already been released.
- Remove all internal state from the engine, allowing it to work as a “plugin” rather than a “framework”. Coupled with the previous removal of the view and content layers, this continues the theme of allowing greater flexibility.
- Replace the hard-coded item/location/character categories with a totally flexible “salience-based” system. This allows you to “tag” entities however you see fit. You could add tags for “items”, “locations” and “characters”, but you could also work with “memories” or “families” or any kind of categorization you can come up with. You can also create “links” to other entities for dynamic relationships. (See Emily Short’s blog post Beyond Branching: Quality-Based, Salience-Based, and Waypoint Narrative Structures for more about this, and the point below.)
- Added a “quality-based” (or “stats”) system to give you more control over building your rules, and to enable powerful structural patterns like “delayed branching”. (See more about this in Choice of Games’s article).
- Working on a visual editor and new “query syntax” (something similar to CSS) to simplify authoring your manifest and rule sets, with the ability to see an immediate visualization of potential pathways through your rules, as well as preview the story with a debug mode.
At the moment, most of these features are in an internal testing phase, but I will report more as they get released, and if you are interested in experimenting with the latest features, feel free to reach out.