Occasional PAXsims contributor Sally Davis has been working on a little something (again) during lockdown. Read about what she’s done, and then try the demo at the link at the end of her blog post!
Hey look where we are! It’s the Western Approaches Tactical Unit and it’s digital and it’s an interactive story all about their marvellous work!
Figure out the school layout from stills. Turns out, there are two distinct buildings. This ties up with the contradictory talk of WATU being based in a temporary building on Exchange Square due to bomb damage, and WATU being based in Derby House which is definitely not a temporary building (but it took bomb damage to the roof in early 42). Here’s the first pass at the geography:
And some comparisons to the real thing:
The Tactical School Duty Officer’s desk (centre) I think is actually out the WATU door (bottom right in the plan view). I think it may have a second door off-camera in front of Roberts (seated) that is the door in in the bottom left shot, between the missing wall section and the right-hand curtain/screens (there’s actually a door there, opened and forming part of the screen under the curtain. But it’s wildly difficult to tell from the available photos, so I cheated and put it behind the white wall in that photo instead.
It was looking pretty good till I added people…and then the accidentally vast length of the hall became apparent…and it wasn’t till I had my player walking around that I realised the screen peep holes are about 7ft off the ground. WATU: standing on the shoulders of giants ? (I’ll get my coat).
I’ve got a lovely pack of low-poly WW2 artwork. It’s D-Day-focused, so mostly US Army and French civvies, but it’s perfect for prototyping. I love all the period posters in it. I will be adding my own, and tidying up the gash posterisation of the WATU logo. My next challenge is to get to grips with Blender and start hacking the characters to make WRNS and RN uniforms. Not quite as simple as just re-colouring the texture’s PNG since the ladies are wearing the wrong kind of hat. I’ve posed them by pulling around their mecanim rigs, which works pretty well.
How do we move? I’ve gone for an old-school point-and-click mouse adventure feel. So I set up a nav mesh and let unity worry about route planning. I hooked up the player character animation so she walks while she moves. I’ll hook up some interaction animations later on, so she talks when you’re interacting with people etc.
Blue areas are walkable. You can see a couple of snafus I need to sort out still, like you can walk through Higham. And I need to make a “look at this thing” call for when you click on something interactable. I’m still figuring out how the camera/click-to-move will work. At the moment you can’t turn her round, you have to click near her feet to make her turn to get a view of the direction you want to move her in. But I don’t really want to go first-person-shooter AWSD to move. Once I’ve got cinemachine hooked up I’ll be able to fix some of that and make it less top-down shooter and more discrete ‘scenes’ in the room where the camera pans around as you move more than follows you. That and the cut-to-dialogue shots will help balance out “I need to see where she can go” vs “but now I can’t really see what’s right in front of her.” There are a couple of places you can stand and the camera is on the wrong side of the wall, too
Challenge the Third
Let’s make this interactive. I’m using Ink for this, the interactive story engine behind 80 Days (this is a marvellous game, play it if you haven’t already!), and the Unity Ink Integration package. Ink is a really interesting scripting language meant for writers rather than coders. It’s really simple to get to grips with, and entirely focused on making Choose Your Own Adventure narratives. What’s really exciting is how well they’ve implemented the unity package, so you can write a story in Inky (a nice little app that compiles-as-you-write so you can test out the story)…and then hook it up to anything in your unity scene: the story can control game objects…or you can use game objects to control the story. The vanilla setup is to have the ink story written to a UI canvas, offer you buttons for your choices, and use your button click to tell ink the choice you made (exactly like the vanilla compile-to-html Inky output). But you can do much more awesome things with it. I’m drawing inspiration from three places:
- The Intercept: a really pleasing but simple re-skin to suit a story set at Bletchley Park. When I say inspired by, I mean to steal the typewriter skinning (it’s under MIT licence, they encourage such things) for some of my game.
- JRPG example: here’s a nice presentation showing off a bunch of off-label uses for ink in unity. The JRPG bit blew my mind (link to the project files at the start). I started with this and I’m slowly replacing the artwork/functionality with my 3D version. I’m going to take it further and tie animation to the choices you make, too, so if something in the room gets mentioned, say, the character doing the mentioning can look towards it (and by doing it in scripting, it’ll work for dynamic locations…so a view-giving from a Wren will point to where things really are on the plot).
- Cinemachine‘s state-driven camera system and magical shot-blending-wizardry (I firmly believe inside this package is an homunclus cameraman) means I can use the ink story state to drive cinematic dialogue without having to create cut-scenes. My player can wander up to a character, JRPG-stylee with a follow-camera, and switch to a close-up shot/reverse-shot while they talk. My player can choose to take a view-giving during the tactical game and we’ll switch to a peephole view of the plot.
Here’s my JRPG logic so far: it’s placeholder stuff at the moment, just proving the point that I can make you steer the story by who you physically talk to rather than text-based choices.
At the moment the “game” is that you need to speak to Roberts. If you haven’t spoken to Roberts yet, everyone else you interact with will say go see him. The first time you speak to Roberts he gives you the dit and sends you off to learn about the problem. Now the other characters will speak to you. Eventually you’ll be able to interrogate Higham about his experience on convoy HG76 to win knowledge about what the U-Boats are up to. The second time you speak to Roberts he challenges you to test your theories against the tactical game.
All the -> ENDs are telling ink to yield control to unity again, and unity uses the = interact knots in the story to pick up where things left off. Here’s Higham in unity:
Higham (temporarily a pilot…he was XO of an aircraft carrier, does that count ?) and Tooley- Hawkins are waiting for you to enter the green box Trigger Volume. It’s a trigger collider, and there’s a player controller script listening for OnTriggerEnter and OnTriggerExit events. Update is listening for you to hit space to interact, and will ask ink to resume the story at the knot associated with the trigger volume you’re in. In this example we’ve got a character you can talk to. But you can also interact with the gramophone (it doesn’t cue up story, but you can put on some period music) and the filing cabinet (this is where I’m going to use The Intercept’s typewriter skinning and let you look through the red books).
In this bare-bones version the text doesn’t give you choices yet (because I haven’t implemented buttons in the dialogue box). Once that’s done you’ll be able to have conversations with people and pick what to say. I’m also going to make this context-aware text. Ink allows me to declare variables to keep track of stuff in-game, and then change the options you get and colour the text based on the value. It’s another way ink goes off-label from the book-based CYOA branching narrative; it allows you to keep the narrative fairly linear (the same stuff happens) but change who does it or how they feel about things. This is a great blog explaining the concept. It feels like the right answer for an Explainer game about WATU where you don’t want the story to go off the rails (they have to follow the history) but you want it to still feel like they have agency. Here’s the next- step in my prototyping, where Roberts gets increasingly irritated with you for talking to him but not accepting his challenge. Ink’s a bit messy down in the weeds, so I’m using yED to keep track of my game logic as I go.
Eventually I’ll have something as complex as this crime scene example. My plan is to implement a dictionary of knowledge very much like this, to track what you’ve learnt about convoy HG76. If you have noticed certain things from talking to Higham and other characters, or reading the Confidential Books, you’ll get the option to try that out in the tactical game. If you don’t know these facts you won’t see those branches of the story, and Roberts will get annoyed at you. I want to balance the game nicely so you can’t win by blind-guessing (or knowing the answers already!), and you don’t have to sit through endless chatter to learn the one thing you’re missing, and you come away having uncovered the facts without it seeming to railroad you into a linear narrative.
That sounds super-complicated and weeks-of-coding to pull off, right? But no! With ink all I have to do is come up with the text of that branching narrative. I’ve got my knowledge dictionary planned out (I’ve been red-penning the HG76 narrative, thank you Ed Butcher and the Maritime Warfare Centre for scanning the not-Confidential-any-more Books for me), and I’m deciding who/what to give the nuggets to, and what flags I need to keep track off…one of the things I want to capture about the story is how the Wrens made it work. Roberts was kind of a dick towards some people, so I intend to use that impatience tracker as a marker for how much of a yes-man you currently are. If Higham can see Roberts has been sharp with you, he’ll open up a bit more about HG76 (he was sunk out of Audacity on this convoy, it’s how he ended up at WATU, and probably why he didn’t make a good impression with Roberts).
Try out the barest-bones concept demo!
You can play the super-simple demo here (or click the WATU crest below), at simmer.io …health warning: it takes a while to load, and I’ve found (at least on my Mac) you need to toggle full-screen mode to get it to work (you can toggle out again; for some reason it starts paused and won’t un-pause except by full-screen-ing). The game isn’t really meant for WebGL but it’s a convenient and platform-agnostic way to share a sneek peek.
Click the WATU crest to give it a try.
- When there’s dialogue on-screen, left-click to continue the story.
- Left-click anywhere on the floor to move (if you click on a wall it will interpret that as the floor on the other side of the way if there is any).
- When you’re standing near a person or the gramophone, press space to interact.
- Heads up, the gramophone plays music, so put your headphones in if you need to. (Actually, do it anyway, because the sound is spatially-aware and it’s a cool effect!)