The *u died* post-mortem devlog
I built u died, a game that mixed sinister, atmospheric and hopefully deep text adventure with challenging old-school platforming, wrapped up in a neat lil package.
It's now been over a week since the deadline, and I've finally found myself with enough time to write an incredibly long-wided piece about my first game jam experience, and what I learned from the whole thing.
Part 0: Understanding your limitations
Waking up on saturday morning to see the theme was a mixture of emotions for me. Throughout the previous week I ha started thinking about what I could be doing to prepare, was there anything I could make in advance that would fit any theme? Was there an engine or framework I should familiarise myself with? How am I going to create art? It can't be that hard... right?
But I had never really made any plans, any creative blocks or little worries about how I was actually going to execute something I would just defer it and kick the can down the road to "something I'll sort out at the time". So saturday morning was tough, because I suddenly realised I would have to confront these questions and the reality of the immense amount of work I would need to do to finish an entire game I would be proud of in less than three days dawned on me. I started brainstorming ideas and linking them to the theme. My first three plans were:
1) A resource-gathering game
2) A strategy game which involved protecting something
3) A text adventure revolving around protecting someone
Obviously each of these approaches followed the theme in a slightly different way. It became clear really early in, scanning online repositories of free art assets, that I'd either make art myself or not have any - and I have no artistic talent whatsoever, so I settled on doing something with pixels and/or text. I decided that, actually, I could combine the second two ideas: a text adventure, but replacing the horrible combat system that cripples many of my favourite games like Zork with a strategy minigame. I wanted it to be a little bit of a homage to John Conway too - someone else whose work deserves to be kept alive - so I sketched out some ideas for something with minimal graphics based on cellular automata. A bit later, I got worried that a text adventure combined with essentially turn-based strategy would get a little too tedious, and decided to introduce a platforming minigame as well which would add a bit of that "one more try" phenomenon to the game.
I've been trying to complete SMB1 warpless recently... not that that's relevant
Here was my first mistake/limitation I failed to understand... time. The project was quickly becoming very ambitious, essentially implementing three different games from scratch - and it was already past midday on day 1. I wanted everything, and didn't accept I wouldn't have time to make everything. But now we're at the point in the story where development starts.
Dawn of the first day: 60 hours remaining
well... closer to midday but, you know, its the thing
I would probably argue that this was my most productive day. I've always loved the feel of the terminals in the Fallout games - the way they have that phosphor glow, the subtle bulge of the CRT display; they're really quite entrancing, so I wanted to have the main game interface along those lines. I opened Unity and couldn't wait to get started on building these graphics.
That was when I remembered. I have no clue how to use Unity. I last used it three years ago to make an arcade game about explosive goats called CS:GOAT. I like to think I've matured a lot since the age of 14, and I've definitely forgotten any semblance of the knowledge I built up on how to use the engine since then. That was my first crisis of confidence, and another limitation I needed to understand. I hadn't prepared at all, I was going in blind and trusting my future self to figure it out as I went along.
I got up, made some coffee, and sat back down again with a fresh piece of paper to brainstorm technologies I knew how to use. It quickly emerged that the only thing I could actually build graphics in would be HTML5 - so that was what I did. I tried to replicate as much as possible the text effect I had wanted to make in a proper graphics engine, but just using pure CSS. Unfortunately, I couldn't get a good looking CRT bulge to work, and decided that a monochrome terminal was fine for occasional encunters in an expansive open-world RPG, but maybe not for an entire game. So, I switched to drawing RGB channels of everything on screen seperately, and having them move subtly out of sync to get a VHS-like "glitch" effect.
Once I had got a basic terminal I could write to and read from up and running, I moved on to building the platformer. I knew I wanted it to be as uncomplicated as possible. The best feeling playing any retro platformer for me is fluidly executing tricky jumps, uncluttered by anything else - so that's what I wanted to aim for, as well as reducing the complexity of implementing it. I began writing my 2d physics engine, starting with objects that can move around, adding collision detection, then gravity, friction and acceleration. At about 11pm that night, I jumped around in SMB1, timing mario's jumps, how long it took for him to come to a stop, the difference between a small jump and a big jump until I had fine tuned the gravity, friction and input acceleration into something that felt really good to just slide the rectangle around.
So by the end of today I was feeling pretty accomplished, I had got all the boilerplate written to start making the first two aspects of the game - or so I thought, and here's learning experience 3: boilerplate is not a framework. I could read and write to a console, but I was nowhere near controlling the narrative flow of a text adventure, I could move a rectangle around another rectangle, but I couldn't build levels or anything like that yet.
I started playing around with sequencing audio as I fell asleep that night but, alas, I never finished the 8-bit tracks I started composing :( maybe another time.
Dawn of the second day: 41 hours remaining
this time it was like... 9am, so closer i guess
This was the really challenging day. I had an informatics olympiad round from 12-4 and if you know what that's like, you can probably tell why I wasn't massively psyched to get going on writing code again afterwards. In the morning I fit in a bit of work, getting the camera to follow the player around the platformer inbetween segment tree practice problems. My basic idea was that, by the end of the day, I would have the boilerplate finalised for the strategy game element, and restructured the platformer and terminal code into something properly useable. Spoiler alert: I didn't
I decided to prioritise the platformer and text adventure over the strategy game, at this point I was starting to come to terms with the fact I hadn't started it yet, and would need most of monday to actually put content in the game. Somehow I managed to spend the entire rest of the day, working until midnight, refactoring some of the existing code and finalising the layout of the platformer. It was at this point that the way I wanted the text adventure to work really crystallised, I would have a dialog system combined with console commands hailing back to the first adventure games to control the character, such that the words on the screen, the dialog, the commands and your movement were very interchangeable, trying to build an atmosphere of not knowing what was truly real.
To quote Super Hans: "What we really need to do is create a powerful sense of dread"
I wanted something very atmospheric, that felt like you could be playing dungeons and dragons but also made you profoundly uneasy. I wanted player choice, but also one that railroaded them into a certain course of action, with a single ending. It definitely felt like programming fatigue today meant I spent more time hypothesising than I did actually working, which was very, very, very slow. It's writing this that I wish I had used git - I must have done something on sunday but it kind of escapes me.
Lying in bed, I drew out a map of three floors of the game, two of which made it into the finished product. Learning experience from today? REASSESS, REASSESS, REASSES. I kept on blindly thinking of cool twists I could add to the stragtegy game component when I hadn't started it yet instead of actually working on building a story for the bit of the game that would end up being finished.
Dawn of the final day: 17 hours remaining
So monday morning, I realised that the three-part model of the game was a pipe dream. I sat down and wrote out an hour-by-hour schedule for the day. It looked a bit like this
9:30-11:30: Write text adventure framework
11:30-12:30: Design + Implement first platformer level
12:30-1:30: Encode ground floor as text adventure
1:30-2:30: Over lunch, encode landing area and ground floor dialog in text adventure
2:30-3:30: Room 1
3:30-4:30: Room 2
4:30-5:30: Room 3
5:30-6:30: Boss fight level
6:30-9:30: Top floor (dinner)
9:30-11:30: Final boss (+ ending)
11:30+ Bugfixes, audio
Yeah, there's no way I'm adding another gamemode. I wish I had done this at the very start of the project, looking REALISTICALLY at what I wanted to achieve and itemising it. Learning experience 5: itemise. As you can see if you've played the game: this was also wildly optimistic - I didn't get to do a top floor, I didn't get to do a third platformer level, I didn't get to do audio, I didn't really do much bugfixing! Let's talk final bits of code and then I want to talk about actually writing this thing.
I looked over documentation for ZIL, Inform and Ink to see how they handle interactive fiction. Broadly, I went for something like ZIL for the text adventure bit, and something like Ink for the dialog. The dialog was state-based, events in the game would trigger state changes, and every action had a chance of eliciting a dialog response based on the state and also demeanour of the speaker - demenaour could be changed by being nice or aggravating the speaker. The text adventure aspect was based on rooms, connections and objects, with flags denoting their possible interactions, and specific routines to run in the case of certain interactions to override the default. Fairly standard if a little bit hacky.
Writing the story and "what's it even about?"
Next time I do a game jam, I think I'll stay away from story-driven. I love narrative, I love video games conveying narrative - but I don't think its right for here. Allusions to a story - yes! Making it thought provoking? Also yes! But actually trying to convey a story? Maybe not.
SPOILERS FROM HERE ON OUT. If your interest had been piqued, play the game now! If you don't want to play it, or don't mind having the story revealed, read on
BEGIN NEEDLESS PHILOSOPHISING
I wanted to really add detail, flavour and atmosphere to the world of the game. Every object was meticulously described to add a little bit more to that atmosphere. Ever read the yellow wall-paper? If you haven't, you should, and if you have - I referenced it in here. The last line isn't mine either, and I'm not comparing u died to The Waste Land, but I didn't reference Hamlet for the sake of it, the last line Hamlet speaks is so important to the play. Fortinbras arrives in Denmark as a revenging son, to continue the cyclicality of the narrative, but it is nearly completely eclipsed by Hamlet's, the audience's touchstone for the play, death and deprivation of a voice to focus us on. The words in the line sound cool in my game, but I was trying to use that reference as a shorthand for something that can't be conveyed in just four words removed from their context. I don't know how effective this was, and I'd love to explore it more developing the game further.
You never use your inventory, there are four collectables in the game and you use zero of them, but they're there to feel like you're doing something. The bag of coins is the adventurer's reward you expect the fantasy RPG to give you, the pen teaches you how to use a system that is never relevant, and the dagger gives you a sense of progression; the acquisition of your first weapon is a milestone in any game, but really you are nearly at the end, and the dagger will never be used. You can say anything you want, but the person you're speaking to never really interacts. I can't decide how much I would change that. If I had infinite resources, I don't think the character would ever properly react - they might change more based on dialog, but not change the game's linear pathway. You're given freedom to move how you want, but revisting rooms doesn't really help you. You are part of a narrative that never changes, no matter how hard you try. This is something I really really wanted to explore: I would have loved to in more detail, and I would love any feedback on how I could do it more effectively building on the game in future.
END NEEDLESS PHILOSOPHISING
After that interlude, let's get back to writing the story and my learning experiences. The grand vision of branching dialog I had had was never going to happen, I really wanted the experience of feeling like you're not alone on this adventure, but ultimately my construction of dialog was minimal, moving the action along in points, and reminding you of their prescence and the prescence of your quest if you got distracted. I feel like I managed my expectations of this pretty well, but I think it ended up being one of the worst and least polished bits of the game - pretty essential to my vision and immersion, but the hardest to get right. I might adapt it to more of a choice-based system like other RPGs, but I'm not sure. Possibly "suggested" choices which will always get a meaningful response, but you can type whatever you wish. I'd appreciate feedback on this too.
Now to the rooms. MANAGE EXPECTATIONS. Coloasal Cave Adventure is 100 odd rooms. Going to bed on sunday night I thought: "well I'm not going to do that many but maybe 20 or so? That sounds about right.". I managed 5. The troll battle was the first battle as I wanted to set it up as a traditional adventure game where the troll is always the first fight, the shadow was originally intended to be just a smiling man who you were encouraged to kill and could spare or not - the "fighting yourself" level would have been his - he was defenseless. It was meant to be your first sign that this wasn't going to be a normal game. You'd then go through and have 5 or so more fights before the final boss being the voice (aka yourself). I wanted to drop hints throughout the game that he was really you, but I was constraned by time too much :/ - again, definitely something I'll build on later. I knew the dialog system wasn't going to be great but I was always more optimistic about the actual rooms, wanting to add more floors even as close as a couple of hours to the deadline. So it goes.
So what's it about? It's about being trapped in a fictional prison of your own creation, the dagger represents feeling like you can destroy the parts of yourself you hate, but its always futile. The yellow wall-paper is more important to the plot than you might have originally thought! So mny of my favourite things, text adventures and Peep Show included, are forever slightly tainted by an association with my emotional low points where I've turned to them for comfort, so there's that association for me too. But really, it's a metaphor for whatever unsettles you most, that was more the aim.
Thanks for indulging my philosophising once more
Part -1: Pride and a conclusion
So I'm really, really proud of managing to get through my first jam experience with something I'm pretty pleased with coming out of the end. Final tip: don't judge yourself by the metrics of others. There are teams of developers out there, some of them might even be professionals with degrees in helpful fields. Play and enjoy their games, but don't put yourself down because yours isn't theirs! This is, first and foremost, fun, and that's something I've come to realise with a little bit of hindisght now. There are things I would do differently, of course, and I hope you've come away with a bit more of an insight into me and how I did things, and how it can help you out in the future, but I know that the next time will be just a little better than this one.
Thanks for entertaining my ramblings, if you want me to play your game, go ahead and recommend it to me and if you liked or didn't like my game, drop me some feedback!
Peace
Source: ldjam.com archive