[Music] so thanks very much for coming um i really appreciate it um my name is joe i'm co-founder of inkle we're an independent studio based here i'm not basically here based in cambridge in the uk um we specialize in narrative so we like to tell good stories that's basically it so up until now we've primarily worked in the area of interactive fiction um inkle's over five year years old now and um right from the start our focus has been to take interactive fiction which we believe to be this really rich medium and make it a bit more just accessible for both gamers and not in games alike because interactive fiction is a beautiful medium and can do some amazing things but not everyone has the inclination to use a
parser based game is quite hard to get into so this is a clip from 80 days which is perhaps our most well-known game to date along with the sorcery series um and as you can see it has this uh prose-based flow at its heart um you could call it the core game loop it's in halo terminology you could call it the the kind of the 30 seconds of fun and there is the wider game of course there's there's a whole kind of board game like leia where you can explore any way you want to go there's um almost 200 cities in the game and you can go around the world any way you like so there is the strategic layer but at its core at its heart is the narrative and so clearly narrative narrative is really important to us in fact it's so important that we built our own scripting language for it our narrative scripting language which we call inc and all of our games
so far including 80 days were written in inc and in fact inc is a language that we open sourced last year at gdc and it's gone on to be used on in a few projects um that we're really excited to see actually so this is what um uh seen a city in 80 days looks like in ink um you don't need to obviously read all the text but if you just pay the attention to the kind of the rough ratio between just the prose the core text and all the little coloured bits so the blue and the green they're they're this kind of the syntax and the logic which drive it and if you look at the ratio between those two things it really is focusing on the core text flow um it's allowing writers to just focus on the writing with just this lightweight markup to add the layer of interactivity so we sort of like to think of it as markdown for uh interactive text
but now we're making a game that looks more like this which i'm really super excited to show you because this is actually the first time that we've talked about it publicly this is heaven's vault it's a science fiction adventure featuring an archaeologist called um aaliyah alasra or l to her friends it's set in a beautiful nebula scattered with the ancient ruins of a lost civilization the player can fly anywhere between different moons explore ruined cities explore dig sites uncover lost artifacts with the story constantly unfolding around them as they go and they can go to between not just these kind of desolate locations but also bustling markets and places with loads of different um interesting characters to talk to and so as you can see it's a lot more graphical this is actually a real screenshot from the game with just the the text overlaid
so we have 3d uh worlds we have 2d characters and the structure superficially it kind of resembles a point and click in that you you can explore a space you can interact with props and objects and you can talk to characters [Music] and the text is presented as kind of lightweight dialogue bubbles and occasionally we also have narrated audio sections but fundamentally we're we're authoring this in exactly the same way as 80 days so we still have this basically a text adventure going on underneath the game that's kind of behind the scenes driving what what happens in the game so back to the talk's title what do i mean by an interactive film script so whereas 80 days had uh that prose-based flow that it was like it was like writing a novel with a bit of interactive markup similarly heaven's fault is more like an interactive film script so
it has a film script but with interactive markup which changes the direction of the way that the script flows and as it plays behind the scene it sort of generates as you make choices through the game it generates more of a linear film script which drives the action in the game and that sort of becomes like our blueprint or the blueprint for what happens in the game so if we look at an example of a real film script so this is page 24 from the screenplay of 2001 a space odyssey as well as the lines of dialogue which are in the format you can see at the top there are also instructions about how the scene is structured and even editing decisions like that dissolve too which says exactly how the scene should be cut together in the final edit and in the same way the heavens vaults script has these has a mixture of dialogue it has a bit of narration and it also has those instructions and
and those can be both interactive so the choices that you make through the scene but also just things like that just the information about some of the transitions now i should say we're well aware of the dangers of getting too obsessed with the film industry and i know that a lot of game developers can be quite susceptible to it so i would just like to say it is just a cute metaphor but it's quite a useful one nonetheless so first of all what i want to do is demonstrate exactly what our script editing workflow actually looks like using our ink editing tool which is called inky which is also the name of my neighbor's cat but that's it's just a bit of fun inky is a custom ink script writing tool that we built in the past year it's also open source along with the ink language but with the main benefit that you can play as you write so there are i'll show you in a moment there are two
panes basically with one with the written text and one with the kind of the text flow that you're you're playing through and making choices and i should also uh warn you that you might have heard of programmer art well this is going to be programmer writing so i do apologize for that so here we go this is this is just a quick example using the character names from heaven's fault so there's l and six uh her robot sidekick um and so far this example has just got dialogue it's got dialogue it's got a few choices um and we can see an example of making a choice and you can see what happens as it drills into those kind of bullet points which form the choices so that's the kind of the linear film script on the right hand side that's generated and that drives the machinery of what happens in the game and we have a custom uh and quite a simple actually interpreter
for how to interpret that um text behind the scenes and uh produce the the visual um game which i'll show you right now so this is from the same script here you can see we've got the 3d environments we've got the 2d characters and the simple dialogue bubbles you can see what it looks like when you make choices and by the way this isn't a real this isn't even a real environment from the game this is from a unity sample environment that i've hacked up just to put the characters in and as you can see it's pretty simple stuff so far so we take this is just a literal piece of text that gets passed straight through from the ink directly into the game and it's a really simple syntax as you can see we just have a we can just look for the position of the colon and separate it into which which character is speaking and
what do they say another cute thing that we do and something that we've added to ink in the last year is the ability to add hashtags to um individual lines and what we also what we're using this for here is the ability to just put a little smiley on the end or an emoticon and that will change the the particular piece of art that that we show so we can put a little smiley on on the end of the line and the character will smile um so we've got a whole range of emoticons that we can use for that um something else we can do that's really a really very natural way to write but again it's just part of the game specific syntax so we can put these parenthesized little additional pieces of metadata to just say right this character is speaking to that character and in the case of our protagonist when she speaks she most of the time she actually doesn't talk directly to the sidekick robot because actually she's a bit aloof and she's actually more interested in the environment so she
kind of looks out into the world she talks to six and he's there he looks at her by default but if we really want her to go and turn and look at him then we can do that as well and then we could also change the pose so when when you put that in parenthesis parentheses um it will just choose a particular piece of art that our artist has um drawn for that particular moment and it's just really easy and natural to write this stuff and here's a genuine piece of ink syntax finally when you put an asterisk on the front it's just just adding that one thing will turn that line of dialogue into a choice so we'll have a number of choices that look like that and when you pick that line that's what the character will say but what happens if you have a choice with a character name that isn't your character that isn't the protagonist well they also get the opportunity to
say a line and so whereas previously we were always using choices in the inc to allow the player to make choices in the game we can also provide choices to allow other characters to contribute and so what we use this for is that kind of you've probably seen it in other games before when you have a timeout when if you don't say anything then another character might interject with something so it's really simple to add these extra little details so all this dialogue is fine but what we'd really like our protagonist to be able to do is explore a scene now and that's not an obvious thing that you can do in a text adventure or at least not in a way that would synchronize with a 3d explorable space so this can be modeled in ink as well and what we do is we take this idea of choices that aren't kind of directly associated with visible concrete choices the player makes and we use that so if you have a
location that you want to walk to on the ground you can choose to walk in exactly the same way that you would in any other game whether it's through direct control on the left stick or by clicking on a marker within the world and what the game will do behind the scenes it will say well you made the choice to move therefore we will pick that move choice and so this the the dash in the middle is a piece of ins ink syntax which um is a way to control the flow so once you've made a choice then after you've made the choice then it will it'll choose that as the point to go to to join join the flow together so what's happening here is you could actually put a piece of content in between moving and arriving so the arrive choice is another choice but it's even less direct directly related to the player making a specific decision and it's just something that the game engine will tell the ink engine to to do when you actually arrive at your
target destination but in between you might choose to um say something or just kind of speak some lines of dialogue or or do anything else which is available within the story engine so here's a really simple example again you'll notice by the way that all of these examples are extremely linear um obviously this is purely for the sake of demonstrating so in the real example in a real example from the game you see a number of choices and actually they stack up and we use quite complex ink constructs to inject choices from various places from various conversation topics that you might be able to have throughout the game but in this example we've just we're just going to explicitly give these these particular choices so in this example we've got a line of dialogue the player chooses to move somewhere we don't actually care very much where they decide to move and we do have ways to query where the
player is but most of the time we actually don't we just we want to know when they decide to move so that we can decide to talk about something as they go but actually the destination isn't always the most important thing so what does this look like in game we have a line of dialogue now in this example we decide to move somewhere by clicking on a spot on the ground they decide to talk about something on the way over there and once they've arrived they continue their conversation actually completely naturally because the game has automatically chosen an arrived choice and seamlessly kind of gathered the flow back together and taken it to the point after that arrived choice so what that allows us to do is actually insert arrive choices at various points in the flow in order to catch different points throughout the conversation where they might naturally finish up their conversation so next we need to be able to interact
with our environment not just walk around interacting with objects or props is really just a matter of adding more choices and and using more game specific syntax on top of the ink engine so again we have choices and we have a really simple syntax of just having the object name or the prop name and the action that you want to do with it so on the left we have two examples um either you can touch the wall or look at the view and the way we represent that in the game is the the the object name is looked up as a game object within the unity scene and then the verb just becomes the label that's applied within within the 3d space and then once you choose that we just carry on with the ink flow we have lines of dialogue or whatever we want to have a more complex example that actually uses exactly the same system is that um we can also do more complex navigation object options
like this so um most of the time when you're exploring the space like i said you don't really care about exactly where the player is but when you really do care and or if you want to insert some extra dialogue into the flow you can mark up a prop so it looks like you're just interacting with an object in the distance but actually what you're doing is the the game presents that to the player as a navigation choice just like any other um except now but all you're doing is making a promise to the player with that style of choice that they will um go somewhere at some point and so as an author you then have the opportunity to insert a line of dialogue and then fulfill the promise by providing another kind of implicit choice which the game will automatically take in order to go to the the place where the player expected to go
so what does this look like in inky we've got a couple of simple examples you can see we can just make some simple choices on the right hand side and all of this stuff is can be written completely independently of the main game so a writer can get started with writing an entire scene before it even touches the game engine and let's see what that looks like in game so we've got this hot spot on the object with the verb that we pick we have the line of dialogue we then interact with the the object again and finally we're going to have a navigation option that looks just like
the normal navigation option which we would have had from a move choice except this time she says a line of dialogue before she sets off so we can we can be really flexible in in the way that we decide to set this up so within a within heaven's vault we don't have full voice over most of the game is represented using those simple dialogue bubbles um and the majority of the um the dialogue is presented that way but we do um also provide the opportunity to um uh put sections of narration narration in with audio as well so we have these two we have two different constructs we have narration that's presented as text and then we also have narration that can be presented as audio and the text is hidden when we do that so again we have another really simple syntax we do mark these up using a triple chevron but you could even if
this is purely a matter of taste you could also just have normal narration without the triple chevron and that would just be like normal pros that you might have had in 80 days it's just because it's actually quite rare in heaven's fault we prefer it to visually stand out on the page so this is just our personal choice to add this extra syntax to make it more visible and then if we decide we want to have uh voiceover for that section then we can record um a piece of audio and stick it on the end as a tag and so that tag is just metadata a bit like the the emoticons i showed you earlier and all it does is check to see whether the text within the tag has an audio file name and then it will play that audio now we can also start to have more abstract scene instructions like you saw in the 2001 example so again with the triple chevron syntax we we can also have bespoke
camera shots where we position the camera at a particular angle within unity we position characters we give them bespoke art then we give that game object a name that contains all of this information within the scene and then we can trigger it and because it's all just referenced by name it's really flexible and easy to set this stuff up on both ends independently so the writer in this case my co-founder john ingold is able to write a scene where he thinks oh it might be nice to have a custom shot here he can name it and this is before we've even started building the scene and that will just get passed through his straight text so that we know that that's something that we need to author we can also outside of shots which are one specific case we can also have the most generic case where we say something's happened and that could trigger animations it could trigger more camera work or it or it
could do it could trigger sound effects particle effects whatever we want but again it's not really something that the writer wants to care about while they're writing they just know that something's happening and so they they write this scene instruction in so let's jump into inky for the fast last time and and see kind of an example of all of these concepts working together so again we have this depart option so that can be used as an instruction to the game to simply go somewhere and it is a choice but it's a choice that the game will always take automatically if they see it then we have that example of narration with the triple triple shed chevron um and finally we have another choice and a few scene events that will kind of have a particular
setup and finally we have another narration example but in this example we're going to have a bit of audio and let's see that in action so we get the line of dialogue uh this is the depart command being called and we have the light the another line of dialogue from the robot now we have a piece of narration which is just represented as simple text on screen and this is the custom camera shot we also have an event that fired switching on the light we have a bit more dialogue and then we have another another departure choice we step between the rubble of fallen buildings empty doorways opened onto the broken rooms and that's how we do audio and that's basically how we're building the entirety of heaven's vault with ink it's all really built out of quite simple objects that
kind of combine together in more complex ways and we are using more complex ink construct in order to weave all of this stuff together but that pretty much is the gist of how we can build a fully 3d game using what's basically a text adventure underneath so john's really drafting a lot of scenes outside of the main game and slowly redrafting them until he can pass them on to a level designer an artist and then once you've got the script and you've got a gray box environment you can combine those together in quite simple ways actually you once you've got in a grey box environment it takes just about half an hour just to make sure that the props and the the the waypoints that connect everything together all sync up and that allows us to iterate on scenes really quickly it allows us to have independence between the writing process
and the the art and design process and it really is surprisingly straightforward so if you want to hear a bit more about the way that john um is uh constructing the open world and the way that he especially the way he did it for sorcery he's going to be talking about that tomorrow at 10 a.m in room 2005 i think but otherwise thanks for listening and i think we've got a few minutes for questions hello hello so after your talk last year i played around with uh inc for a bit on my own and actually wrote my own parser off the language spec and one of the things that i was trying to figure out how to do and it applies here especially is inc is great when it is in control of the narrative where you are
where you are in the uh um you know along kind of a linear or a branching narrative but as soon as you get into a situation where uh you're provided with an environment where you could go to one of several places you could go to like eight different let's say npcs and strike up a conversation with them depending on where you walk to in the world i was wondering what your thoughts are on if you've tried to take ink and have multiple entry points into different conversations while still maintaining your uh your running game state which which you're able to do normally in inc because you're also controlling the position in the narrative yeah um so it's a difficult question to answer in in the abstract in some ways because every game is has different requirements in a way and the way that we're we'll we're building that in heaven's
vault um we are binding the the ink with the game quite quite directly but you could also imagine so for example in 80 days we had the way that you go to cities in 80 days is um we we didn't actually do that entirely within the ink engine so we would have a json file that specified all of the the cities and the connections between all the other cities we could have modeled that using choices for example so in your example you could model going to talk to these different characters as a choice block it would be quite a kind of a coded choice block that might depend on certain conditions and things it's it's hard to understand your specific example i think but you could model it as a choice block so when you decide to go over to this character it actually takes a choice within the game even if the the player didn't specifically kind of choose that um but yeah they're just there are quite
a lot of different approaches so maybe we could talk afterwards and thank you your example cool thank you uh hi i'm just uh i'm just quite curious about on the other side like the unity side of all of this because for instance you had a depart and then another depart and then an event so for the writer they can just write that but how is on on the other side is each for instance the first and the second the part they worked quite differently and of course the event had the animation and the light switching on and all of that were all of those hooks like hard-coded specifically to each thing or do you have like a dynamic system or so the the the syntax of the the part choice was simply that you have the location name which is a waypoint within unity and then a dash and then just the depart word that's that's that's all it is really so when it sees that choice
there's a kind of uh an event loop in in the game that looks at what choice is available and if there's a choice block and there is a depart within it it will just do it immediately and it will instruct the character to walk to that location um if the depart choice was missing then the rest of the choices might become more relevant um does that answer your question and in case of the event that is more something that's kind of right so that's again that's it's it's just uh it's just a keyword really it's just so um it's just a tag basically that uh it's got a specific name it's just a string and we fire off an event using our own hand-rolled event system in unity and we have different types of objects that can respond to that named event and do different things okay cool thank you cool okay thank you very much
you
Auto-generated captions from YouTube — names and numbers may be misheard.
Distilling the key insights…
Game Developers Conference · 2026
Game Developers Conference · 2026
The Game Business · 2025
Comments