ink version 1.0 release!
We're proud to announce that ink, our open-source scripting language for interactive narrative, has now officially reached version 1.0!
What's new in Version 1.0?
Version 1.0 is a stable release of "the story so far". The core features are well-tested and well-used, and the current integration has powered two full inkle releases: 2019's 3D adventure game, Heaven's Vault, and 2020's procedurally narrated tactics game, Pendragon.
But there's one big new feature: we've introduced the concept of parallel, shared-state story-flows - allowing the game to, say, switch between different simultaneous NPC conversations, while still allowing one conversation to affect the other.
We've also improved error handling and improved the way ink calls game-side functions. Inky now has a dark mode (see above!), zoom, a word count and stats menu, and better syntax highlighting. The default web player has new features for links and audio. And the Unity integration now allows live recompilation mid-game.
Full details can be found on the release notes page for ink, Inky and the ink-Unity-integration plugin.
What is ink?
ink is designed from the ground up to be "Word for interactive fiction". Open it up, and start writing. Branch when you need to, rejoin the flow seamlessly, track state and vary what's written based on what came before - without any need to plan, layout, or structure in advance. Organise your content when you know what shape it wants to take, not before.
It was recently awarded an Epic Megagrant, and we're otherwise supported by a Patreon.
A Different Approach To Interactive Writing
ink takes a different approach from other interactive fiction writing software in several ways.
It's entirely script-based, with no diagrams or flow-charts. Instead of being optimised for loops, it allows writers to quickly and robustly create heavily branching flow that runs naturally from beginning to end - as most interactive stories do.
All code and technical information is added as mark-up on top of text, making it easy to scan, proof-read, redraft and edit. It's also easy to see what's been changed in a file when using source-control.
Another key concept is global, always-on state tracking: every line the player sees in the course of the game is remembered, automatically, by the engine, without the need to define variables. This allows for fast iteration on game-logic and the easy implementation of cause-and-effect, without the need for "boilerplate" code.
Flexible and Powerful
But that doesn't mean ink is limited: it has variables, functions, maths and logic should you need them, and can also hand off complex decision-making to the game-code itself.
ink is also deliberately layout-agnostic. By handing the UI over to the game, it can be used to make hyperlink games, visual novels, RPGs, chatbots, FMV games, or simply to deliver highly-responsive barks in an first-person action game.
Over on the engine side, ink comes with a run-time debugger that allows reading and poking of variable state, and a profiling tool to help developers in frame-rate dependent environments to find and fix story-side slowdowns.
Uptake
ink has been adopted by game studios and other developers all around the world. It's been used on big indie games such Haven, NeoCab, Over the Alps, Falcon Age, Signs of the Sojourner and others.
For people looking to learn more about using ink, we've got several talks on our approaches, including this on from GDC 2017 on how Heaven's Vault drives its 3D world from a text-based script:
Development History
Here at inkle, ink has been our bedrock. We've used ink on every single title we've released over the last ten years, expanding and developing the feature set of the language over that time from quick mark-up for authoring branching choice-based narratives (Sorcery!) to authoring open-world, responsive, go-anywhere-and-do-anything narratives (er, Sorcery! 3. Also, Heaven's Vault.)
And we're continuing to find new ways to use the engine, like last year's experiment in procedurally narrating a chess-like game.
Originally released as an open source beta in 2016, ink quickly accrued an editor, inky, for easily writing and testing content, and a dedicated Unity plug-in to assist with integrating and testing stories at run-time.
Community Development
Since its release, a wide community of developers and enthusiasts have contributed to the project. There is a full javascript port, built into inky, which allows the editor to produce stand-alone web-playable games. There is a port for the popular Godot engine, and work is progressing on a C port that will ultimately enable Unreal integration.
We've had contributions in the form of bug fixes and features requests to the main ink code base, and too many contributions to ink to list - from Dark Mode, through auto-complete, to an integrated version of the "Writing With Ink" documentation and, most recently, an "open recent project" menu listing.
Looking back, we think these developments have justified our decision to make ink fully free and open source: the development around the system that's taken place would never have happened without the efforts of other developers, and we'd like to take this opportunity to thank everyone who's offered contributions, both large and small, over the last five years.
The core meeting point for ink developers has been the inkle Discord, which is now the go-to place on the internet for assistance with implementing ink features, and contains a wealth of tips and ideas.
Looking forward!
As inkle continues to develop games, we're continuing to develop and extend both ink and the Unity integration to allow us to tackle new problems.
Though we're naturally more cautious with new languages features now the codebase is mature, we have an internal roadmap of issues and features we'd like to address.
The more support we get - both financially, and in terms of bug and community support - the more we can push forwards.
Meanwhile, ink will continue to be free to use and available to all for as long as we are able to support it!
Happy writing!