[HN Gopher] Ink 1.0 - Open-source scripting language for interac...
___________________________________________________________________
Ink 1.0 - Open-source scripting language for interactive narrative
Author : Kinrany
Score : 296 points
Date : 2021-04-10 12:49 UTC (10 hours ago)
(HTM) web link (www.inklestudios.com)
(TXT) w3m dump (www.inklestudios.com)
| WhatIsDukkha wrote:
| Looks like there is an actively developed godot integration -
|
| 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!
| hackily wrote:
| Congrats on 1.0!
|
| 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!
| mellosouls wrote:
| Very cool. I wonder if there is an avenue for using this with
| something like GPT3; be interesting perhaps to see what it might
| come up with, or how it might add speed/scale to the process in
| some cases?
| jeeva wrote:
| Tom Kail (of Inkle) did a neat workshop on writing stuff in Ink
| at a recent coding festival, if anyone wanted to try it out -
| https://www.youtube.com/watch?v=SKlz2hcy8wU
| travisluis wrote:
| How does this differ from Twine?
| jmd42 wrote:
| Twine exports to HTML, while Ink plugs in to other game
| engines/code as a kind of backend engine for handling narrative
| and text
| fudged71 wrote:
| Isn't twine also being used as a backend engine for games as
| well?
| xrd wrote:
| Is anyone doing something similar , or using this as-is, with
| comics and graphic novels? Is this a different form of narration
| when it is applied to video games? I'm curious if there are
| discussions about how this is different or the same.
| NortySpock wrote:
| Check out Ren'Py
| dang wrote:
| Past related threads:
|
| _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)
| leejoramo wrote:
| Can anyone compare Ink to Inform? I played with Inform many many
| years ago and have always wanted to return to it.
| Multicomp wrote:
| Inform 7 is used to make Zork-style games.
|
| GET covid. GO WEST etc.
|
| Ink is more comparable to Branching narrative software like
| Twine, or Visual Novel software like Ren'Py.
| irrational wrote:
| 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?
| megameter wrote:
| Branching narratives are like Choose Your Own Adventure
| books. You can get 80% of the way to what Ink does with a
| carefully programmed static website. But this is an
| environment designed to author that, and to publish to game
| engines as well.
|
| The main competition is Twine, which is more focused on a
| self-contained deployment. Twine also got a huge update
| recently with its "Harlowe" theme supporting storylets -
| scenes that trigger from a pool or "deck" based on logic
| you program.
| jccalhoun wrote:
| zork and other "parser" games would say something "you are
| in a room with a table and a door to the north" and there
| would be a cursor.
|
| Twine and "choice" games would say something like "you are
| in a room with a table and a door to the north. Do you want
| to look at the table or go to the door?"
| anthk wrote:
| You can omit "GO", the parser will understand "west" fine.
|
| 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.
| Kinrany wrote:
| 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.
| skybrian wrote:
| 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.
| gHx8 wrote:
| 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.
| riffraff wrote:
| > It's quite good compared to ink at simulating objects with
| a lot of metadata
|
| can you give an example? I have zero familiarity with IF
| programming, but I would be very interested in understanding
| this.
| gHx8 wrote:
| In inform7, you can do this:
|
| > A race is a kind of person. Dwarf, elf, and half-elf are
| kinds of race.
|
| > A town has numbers called friendliness, services,
| comfort, and population. Leadership relates a person to a
| town. The verb to lead implies the leadership relation. "F
| [friendliness] / S [services] / C [comfort] / P
| [population]".
|
| > Rivalry relates various towns to each other. The verb to
| be rivals with implies the rivalry relation. The verb to be
| rivals of implies the rivalry relation.
|
| Then you can make a town like this:
|
| > Bremen is a town in Ten-Towns. "Founded by dwarf
| prospectors, the sleepy town of Bremen sits on the west
| bank of Maer Dualdon, at the mouth of the Shaengarne
| River.". It has friendliness 3. It has services 1. It has
| comfort 2. It has population 150.
|
| > Dorbulgruf Shalescar is a dwarf. Bremen is led by
| Dorbulgruf Shalescar.
|
| And now inform7 can be used to query or act on all this
| metadata:
|
| > Every turn when the player is in a town: repeat with town
| running through towns: say "Rivals of [town]: [list of
| towns that are rivals with town][line break]";
|
| This is the kind of thing you have to work hard to
| represent in ink because you only have functions,
| variables, and lists (a hashmap<variable, boolean>). As you
| add more metadata to inform7, it can make EXTREMELY
| sophisticated queries or conditions like "list of weapons
| that were in hidden rooms which are gilded". So for very
| little work, you can have inform7 reason about whether a
| player can 'wear' a specific item by checking what they're
| wearing, how the item affixes to things, and what
| attachment points you've defined (which can be as broad or
| granular as you want). And as a bonus, it's also very
| little code to comment on the player wearing a strange
| thing (like pants on their head) or wearing colours a
| specific character thinks clash with eachother.
|
| This kind of query is one of ink's notable weaknesses (and
| requires quite a lot of lists or very clever lookup
| functions to achieve). But, ink can leverage its frontend
| (often a general purpose programming language like C# or
| javascript) to provide that functionality.
| gHx8 wrote:
| Apologies that I forgot this line for the example above:
|
| > Bremen is rivals with Lonelywood, Targos, and
| Termalaine.
|
| When you write it, you effectively get 3 pieces of
| metadata for 'free' without any extra code:
|
| > Lonelywood is rivals with Bremen. Targos is rivals with
| Bremen. Termalaine is rivals with Bremen.
| kd5bjo wrote:
| 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.
| solson4 wrote:
| 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.
| offtop5 wrote:
| I absolutely love the ink team, for releasing this. They have a
| fairly decent Unity which is free and is more than good enough
| for creating basic narrative games. It would still probably be a
| good idea, to have a good grasp of unity before integrating it
| though
| asimpletune wrote:
| Wow this is awesome.
|
| I think it would be really cool to write some documentation or
| more interactive education using this tool.
| 094459 wrote:
| I have been thinking the same thoughts...now I've seen ink I
| might need to give it a go
| indigochill wrote:
| 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.
|
| [1]https://maxsond.github.io/
| daniellarusso wrote:
| Your soundcloud link did not work for me.
| indigochill wrote:
| Whoops, thanks for the heads up. I'd changed my Soundcloud
| profile name and hadn't updated the site. Fixed now.
| psyklic wrote:
| Ink is great, and very extendable. I used it as the scripting
| engine for a machine-learning-powered chat bot.
| gHx8 wrote:
| That sounds amazing! Where would be a good place to start
| digging into chatbot tech? Specifically, I'm wondering how to
| dynamically rewrite scripted dialogue and it is a deceptively
| deep topic.
| chrisweekly wrote:
| This looks _amazing_! Thank you for sharing!
| jackalo wrote:
| Maybe I'm just old at this point, but I honestly thought this was
| a reference to Inkscape which had it's v1.0 about a year ago, and
| I became very confused.
| jackalo wrote:
| Just wanted to quickly add that I am in no way trying to steal
| the thunder from this news, just referencing where my brain had
| gone.
|
| All that aside, this looks like an incredible language to use
| for some of my own projects. I have always been a fan of text
| based adventures, and have played MUD's off and on for at least
| 25 years at this point. Maybe I can put this language to good
| use. :)
| totetsu wrote:
| from my blog notes on ink see also:
|
| " 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/
| nrjames wrote:
| Also Yarn and Yarn Spinner
|
| https://yarnspinner.dev/
| nottorp wrote:
| > and used to make this cool interactive browser experience
| burnt matches. more here
|
| Does this "cool interactive browser experience" only work in
| Chrome? I tried it in firefox and when i click on "snow"
| nothing happens.
| totetsu wrote:
| It seems to work kind of okay in Firefox mobile. you've gotta
| click on the colored snow.
| tyingq wrote:
| Chrome desktop, I don't see any colored snow. Here's a
| screenshot: https://imgur.com/a/MovaQ1t
|
| Clicking on the little boxes with the word "snow." does
| nothing.
| totetsu wrote:
| Row 6 column 2?
| tyingq wrote:
| Ah, thanks. Had to get my glasses. The background is #fee
| where the other ones are #aaa, which is a bit too subtle
| for my old eyes and monitor.
| nottorp wrote:
| Youngsters... turns out i had the same problem.
|
| Prolly designed for kids with perfect eye sight.
| skybrian wrote:
| I got a bit further and then it was just a hum and
| clickable foreign(?) text, which when clicked shows other
| foreign text, so I stopped.
| tyingq wrote:
| Clicking on "snow" does nothing in Chrome either. Clicking on
| "home" does lead you to "end". I can't tell if that's what is
| supposed to happen.
|
| Edit: Ah, okay. One of the "snow." boxes has a bg color of
| #fee instead of #aaa.
| totetsu wrote:
| I think that means we always have the choice in life to
| just open the door and look around and chose to stay home
| and not start anything. There should be a snow with a
| slight glow to the BG colour.
___________________________________________________________________
(page generated 2021-04-10 23:00 UTC)