I recently started developing a game in my spare time, and discovered Ink, which has tremendously simplified development of conversations and managing conversational state.
I've found Ink to be quite flexible, If someone wanted to, they could manage their entire game state with Ink.
Live recompilation of my ink script in Unity will be very helpful!
I wrote my "portfolio" page[1] in a choose-your-own-adventure style with Ink. Documentation would be pretty cool, might experiment with that at some point.
Because ink is a type of markup language, using it to write narrative is very easy. You're writing the script for your game and ink will handle how parts of it connect to eachother. It is also very portable owing to being plaintext with relatively simple syntax. There are currently ports of it in both Unity and Unreal, and many developers have used it in some capacity for html/css/javascript games. Procedural generation can be done in ink, however you may need to use the frontend language to save them for later; ink does procedural text very well but has a weak concept of objects.
Inform7 is a declarative programming language with english-like syntax. It's quite good compared to ink at simulating objects with a lot of metadata. However, the runtime isn't quite as portable as ink; as a result, Inform7 has no easily located Unity or Unreal packages. Ordinarily, I would recommend Inform7 where you need to process lots of content and randomly generate things. But it seems in addition to having an arbitrary runtime entity limit of 1000 things, those things must exist before you randomize them. Although counterintuitive, procedural generation is more challenging in Inform7 than ink!
Use Inform7 when you need a language that can reason "because Alice's relation to Bob is at -50, Alice hates Bob. Because she hates Bob and he is walking nearby, she can trip him. If she does, he will take a random amount of damage and Bob's relation to Alice is reduced by 20."
Use ink when you need a highly portable language that can script /other/ frontend frameworks or languages. Ink has been used in 2d games, 3d games (notably Heaven's Vault), on the web, and on three different game engines (Unity, Unreal, Godot). Ink is also very good at making variations on text and tracking how often parts of the story have been visited.
They're both excellent tools for interactive fiction, but they excel at wildly different things.
Wow! Thanks for that response. I will check out Ink. Back in the 1980’s, I wrote a choose your adventure system based on plain text. I rewrote the system a number of times to learn new languages. Probably been 20 years since I touched my system. Maybe I will try using Ink with some of my narratives. Ink is obviously servers like orders of magnitude more powerful than anything I ever built.
I haven't played with either of them much, but they seem to take two fundamentally different narrative approaches.
Inform is primarily simulation driven: You describe a world model. Every user input translates into some action that affects the world, and the world changing produces relevant output.
Ink is primarily narrative driven: You write the text as a branching story, with a set of explicit options for each branching point. Variables can be read and changed arbitrarily, but have no meaning other than how the narrative uses them.
I am familiar with inform and zork (which auto-corrects to dork ;-) but not with how that is different than branching narrative software. How are they different or similar?
On the software side, ink is open source and has C# and JavaScript compilers, a Unity plugin and a separate IDE called inky.
Inform7 is not open source yet, although they had plans in 2019. As far as I can tell, it's a single app that outputs its own format that can be uploaded to https://www.ifarchive.org/
Disclaimer: I've never used either, ink just seemed more legible.
To add some detail, Inform 7 compiles to reasonably well-documented portable binary formats that have been standardized for decades, with the earliest versions dating back to Infocom days. There are a variety of emulators, including web-based. This is why games uploaded to ifarchive many years ago still work. Even if an old game’s source were available, they were sometimes written in obscure genre-specific programming languages that nobody uses anymore.
The binary formats are specific to the genre, which is pretty niche. Casual users are unlikely to have downloaded an emulator even if it’s easy to do, so a game will be bundled with one when it’s published to an app store.
But as formats go, it seems like a pretty remarkable success story for the long-term preservation of games, and it would be neat if there were a similar file format that were more general-purpose and more popular, much like we have for images, music, and video.
Very cool. I’m working on an interactive fiction engine in my spare time, and it’s interesting to see how someone else chose to manage the complexity that exponential branching starts to cause. Their concept of knots makes a lot of sense for a video game with narrative “hubs”. Definitely like the text based approach, the flow graphs that other engines use look like they get really messy really fast.
or kotobee or Twine which is from the Interactive Fiction Technology Foundation. .. and used to make this cool interactive browser experience burnt matches. more here"
Ink – Scripting language for interactive stories - https://news.ycombinator.com/item?id=26147329 - Feb 2021 (15 comments)
The Intercept (2012) - https://news.ycombinator.com/item?id=23244812 - May 2020 (4 comments)
Writing web-based interactive fiction with Ink - https://news.ycombinator.com/item?id=21794981 - Dec 2019 (9 comments)
The Intercept - https://news.ycombinator.com/item?id=21538414 - Nov 2019 (1 comment)
Ink – inkle's narrative scripting language - https://news.ycombinator.com/item?id=16925588 - April 2018 (22 comments)
Ink: the scripting language behind 80 Days and Sorcery - https://news.ycombinator.com/item?id=11269782 - March 2016 (18 comments)
https://github.com/paulloz/godot-ink
and a emacs major mode -
https://github.com/Kungsgeten/ink-mode
There is an lsp implementation -
https://github.com/ephread/ink/tree/language-server/inklecat...
Seems like I should spend some time with ink!
I recently started developing a game in my spare time, and discovered Ink, which has tremendously simplified development of conversations and managing conversational state.
I've found Ink to be quite flexible, If someone wanted to, they could manage their entire game state with Ink.
Live recompilation of my ink script in Unity will be very helpful!
I think it would be really cool to write some documentation or more interactive education using this tool.
[1]https://maxsond.github.io/
Inform7 is a declarative programming language with english-like syntax. It's quite good compared to ink at simulating objects with a lot of metadata. However, the runtime isn't quite as portable as ink; as a result, Inform7 has no easily located Unity or Unreal packages. Ordinarily, I would recommend Inform7 where you need to process lots of content and randomly generate things. But it seems in addition to having an arbitrary runtime entity limit of 1000 things, those things must exist before you randomize them. Although counterintuitive, procedural generation is more challenging in Inform7 than ink!
Use Inform7 when you need a language that can reason "because Alice's relation to Bob is at -50, Alice hates Bob. Because she hates Bob and he is walking nearby, she can trip him. If she does, he will take a random amount of damage and Bob's relation to Alice is reduced by 20."
Use ink when you need a highly portable language that can script /other/ frontend frameworks or languages. Ink has been used in 2d games, 3d games (notably Heaven's Vault), on the web, and on three different game engines (Unity, Unreal, Godot). Ink is also very good at making variations on text and tracking how often parts of the story have been visited.
They're both excellent tools for interactive fiction, but they excel at wildly different things.
can you give an example? I have zero familiarity with IF programming, but I would be very interested in understanding this.
Inform is primarily simulation driven: You describe a world model. Every user input translates into some action that affects the world, and the world changing produces relevant output.
Ink is primarily narrative driven: You write the text as a branching story, with a set of explicit options for each branching point. Variables can be read and changed arbitrarily, but have no meaning other than how the narrative uses them.
GET covid. GO WEST etc.
Ink is more comparable to Branching narrative software like Twine, or Visual Novel software like Ren'Py.
Also, Inform6 is better suited for a "logical old-school" programmer than if7, where using it for non-English languages can be a huge mess.
Inform7 is not open source yet, although they had plans in 2019. As far as I can tell, it's a single app that outputs its own format that can be uploaded to https://www.ifarchive.org/
Disclaimer: I've never used either, ink just seemed more legible.
The binary formats are specific to the genre, which is pretty niche. Casual users are unlikely to have downloaded an emulator even if it’s easy to do, so a game will be bundled with one when it’s published to an app store.
But as formats go, it seems like a pretty remarkable success story for the long-term preservation of games, and it would be neat if there were a similar file format that were more general-purpose and more popular, much like we have for images, music, and video.
" pubcoder[1] or apple ibook(killed)
or kotobee or Twine which is from the Interactive Fiction Technology Foundation. .. and used to make this cool interactive browser experience burnt matches. more here"
1 https://docs.pubcoder.com/new/pubcoder_widgets_intro.html
2 https://www.kotobee.com/blog/how-create-interactive-ebook-gu...
3 https://twinery.org/
4 https://pippinbarr.com/games/burntmatches/
5 https://www.pippinbarr.com/2016/11/29/burnt-matches/
https://yarnspinner.dev/
Does this "cool interactive browser experience" only work in Chrome? I tried it in firefox and when i click on "snow" nothing happens.
Edit: Ah, okay. One of the "snow." boxes has a bg color of #fee instead of #aaa.