“Dev diary”. Tch. Sounds a bit… pompous, don’t you think? All I’m doing is making a game, and that’s… that’s not the same as being a developer, somehow. In any case, this log serves two purposes:
- One, to put off actually starting this project for just a tiny bit longer because once I start I know I’ll have to keep working until I finish it.
- Two, to prove in some small way that this was a true scratch-made personal project and not something that just fell out of the sky.
I suppose I should answer a couple of questions first: Why a text adventure (again)? Why in C64 BASIC (again)?
The first answer’s a little practical, a little personal. I like writing, and some people seem to think I’m quite good at it. However you or I feel about the veracity of that statement there’s no doubt my descriptions are better than my drawings. In text I can whip up tales of gleaming buildings that touch clouds shaped like dragons and tell you you’re standing before a million fairies whose wings glow as they catch the light from a billion stars – but I sure as heck can’t draw any of that. So, for me, this is the best way to produce something not awful in the shortest amount of time.
The second question was one I had to ask myself if I’m honest: Why not use a “proper” programming language compatible with modern hardware, or at least modern third-party game makers? Scope is part of it – I can’t even write a long sentence on the C64 without letting one part of a PRINT command fall into the next line of code (lines can only have 80 characters in them at the most) – but just as much of it’s just down to me. I like working this way – and who was I trying to impress, anyway? Why struggle for the sake of some anonymous soul who cares more about “clean code” (of the “right” sort) than whether the adventure I put in front of them is any good?
Oh. Oh no. What if I make a game and it’s no good?
I think that’s why this one is a… not a comedy, but consciously silly. Because I’m really trying this time, and I think it’d sting more if I really tried and was really earnest and it didn’t work out. If it’s daft and unserious then I feel a little protected from whatever comes next because look, it’s just a daft game OK?
The basic skeleton of the program, which drew heavy inspiration from this handy site, (the only tutorial I’ve come across that’s not gone from “And that’s how you print a line of text” to “OK so now it’s just a case of adding a good old INV$34;(#A)+RND**:RET:WTF% here, which as you can see creates a Buffinglot Vortex on line 413“) in three sentences, came together quite quickly. I’ve also earmarked space for three extra “rooms” to my code just in case – maybe I won’t need them, but if I find a reason then they’re there and ready, saving me from the panic of shifting things around at the last minute.
It’s now the end of the first day and I’m feeling quite positive about it all. I’ve got a functional program that looks neat and tidy on the user side of things, I’ve already tested and added uniquely coloured text for key items, and my “What happens if the player tries to input ‘FLORAL CRUSTACEANS’ as a command?” error handler is crude but reliable. There’s just one small problem…
All the design notes I wrote in my notebook are… they’re definitely not useless, but they’re not clearly defined enough to actually implement. I need to sit down with a pen and paper and really straighten this out. I also need to grab some paracetamol, because all this thinking with a side order of maths has given me a headache.
I’ve been calling this game “Alien Mindbenders” for as long as I’ve wanted to make it, because I want to make a cheesy sci-fi sort of game with psychic aliens in it – Flash Gordon with an added dash of nerds. I’ve written aliens mindbending things into the script, I’ve designed puzzles and roadblocks for the player around this power.
I know for a fact I haven’t played that game in this millennium.
I also know for a fact my tiny game can’t work without psychic aliens.
I read a few refreshers on Lucasart’s SCUMM classic and brace for the worst… and somehow, I’m in luck. Bar the name and the idea that aliens might have mind-controlling powers – not exactly a rare or original thought – there don’t seem to be any accidental similarities between the two. So all I need is a thesaurus…
Mindflayers? No, that’s a bit grim. And also an existing copyright.
Mindflexxors? Because they haxx0rs your m-I’ll see myself out.
Mindninjas? Now that’s just silly.
Argh. The trouble is “Mindbenders” a useful title, conveying both “aliens” and “beings who can do weird stuff with their minds” with just two words.
On my son’s advice I’ve gone with “Terror of the Alien Mindmasters”.
Yeah, that’s good.
I think the hardest part are the bits in between what I would consider to be doing stuff. I feel as though if I’m not putting things directly into the code then I’m not really working.
As I type this I look at the rapidly growing sprawl of notes and glued-in pieces of additional paper in my notebook. I know there’s more to this than just typing, and I know even the “gaps” where I’m just thinking things through or letting an idea sit until it either solidifies or gets thrown out by something better are vital – but it’s hard to see it that way at the moment.
As if to prove myself wrong, “not doing stuff” has somehow turned into doing a heck of a lot of stuff all at once. I’ve got a proper plan now. I’ve scrapped something I thought I liked and introduced something I didn’t even know I wanted. Some things have changed, some have stayed the same, and I’ve got a final map drawn on graph paper, every detail in place. This is it – I’m ready to begin.
There’s a lot of unglamorous work today, nuts and bolts stuff. I’ve now got a working, navigable map, one that won’t accept invalid directions or panic if you access the inventory. It’ll need changes and additions down the line for locked doors and special narrative cases, but I’ve got spare lines ready and waiting so that’s fine.
As I brush my teeth in the morning I catch myself wondering if there’s an elegant and automated solution to word wrapping, because out of the box the C64 just spews text across the screen until it runs out of words to display. It turns out the answer is not really, and as an amateur the workarounds aren’t going to be any faster or easier to implement than plain brute-forcing spaces and new lines – not to mention the danger it might break something/anything/everything in the process.
It’s tempting now to start doing the fun stuff, replacing “EXIT SOUTH AND WEST” with “Burning wreckage currently blocks the path leading south, and an imposing metal door with TEST ROOM #1 written across it can be seen to the west” and so on, but I know I need to keep things boring for a bit. I need to make sure Room 4 reliably recognises Object A, and Door 3 really won’t open until Event Flag 2 has been set.
So it’s all baby steps today, but they’re quietly satisfying ones: a simple test to make sure item pickup works as intended, that objects appear and disappear from the room description text when they should. This work reminds me of “The Door Problem” found in what I will call “real” game development – lots of small things that aren’t exciting to make, but absolutely must work properly, 100% of the time.
And speaking of things working 100% of the time… my inventory code stopped working. How? Why? It was working just f-it’s then I realise I changed the command from INV to BAG about an hour ago so of course it wasn’t going to work, because I’m now typing in the wrong thing.
I have earmarked space for three endings. I can’t remember what the last ending was.
Several hours later…
I’ve squashed a ton of bugs/stupid errors and remembered what my endings were going to be. There’s just one problem – they don’t work. I’m worried it’s some sort of structural code thing, which would mean they might never work.
What had actually happened was I’d put in a few quick empty lines (“REM ENDING 1 HERE”, etc.) to mark where the endings were going to eventually go, and then done absolutely stuff all else with them. It’s quite hard for a program to act on code that literally doesn’t exist.
I’m sure the last game didn’t take this long. Anyway, I’ve now got “Terror of the Alien Mindmasters” working as a stable start-to-finish experience, now all that’s left to do is write all the creative text that makes it entertaining, using several pages of notes. It’s an odd position to be in because this is both the “easy” bit – I can literally make stuff up – and also incredibly hard, because there’s no definitive “right” here but still a heck of a lot of ways it can all go wrong. Oh and on top of that whatever I write has to fit within some comparatively tight and mostly non-negotiable spaces too – on the screen and in the program – just for good measure.
My small game suddenly feels very big. There’s a lot to do and it’s all on me to do it.
And so I panic a bit and don’t do much of anything beyond tinker with the title screen text, content to use the convenient twin life issues of my son being a little ill and the A key on my keyboard suddenly deciding its going to intermittently give up the ghost to leave it at that for today.
Today’s a little different. There’s work to be done and I need to start doing it. A new keyboard is due to arrive in the post today and I’m going to try something that should make inserting text much easier – writing it up in a regular PC document first. This will allow me to work a little more loosely, to type out a line and then keep reshaping it until it shines without the worry I’m going to hit Enter at the wrong time and accidently overwrite some vital piece of code. It can’t tell me if I’ve written too much or where the damned line breaks are, but here I can write a line and then chop and change it as I please before pasting it over (the emulator I’m using – Vice – allows you to paste clipboard text into BASIC)
Wait, dammit. I’ve forgotten to fill out the help text section with anything other than “Help text here”. Oops – I’ll go sort that out now.
I have resolved to not move on from a section until it’s done done. Everything in place. All text properly aligned and spaced. It’s hard not to feel like this is fiddling with carriage returns when I could be streaking ahead but I know from my last game how all those little control codes soon add up to precious space that has a direct impact on the lines that follow, and it’s so much harder for all sorts of reasons to really tweak text once it’s “right enough” to do the job.
So it feels like progress is slow but the good news is when I finally move on from one room I know it’s really finished, not just good enough until I circle back around to it sometime never.
However “frustrating” isn’t a strong enough word for this experience, and the work is slow and tedious. I remember now why I just let the text land however it did (mostly) the last time around. Luckily I also remember that lingering whiff of disappointment, of doing all that work and still having to say “Ah just try to not mind the rough edges, OK?” at the end of it. I’m loathe to call what I’m doing “polish” because that implies some level of competence and effort, but I would like to finish this with something to show that’s for better or worse exactly as I wanted it to be.
And just as I’m feeling pleased with myself I remember I’ve grouped the exit description text separately from the room descriptions (this allows for more flexibility, makes it easy to guarantee which text will appear where, and helps on my end of things to keep everything from descending into infinite walls of mush). Ah heck, I’ll have to fill out those too. I eventually manage to get the intro and almost three whole rooms finished, and as there’s only thirteen of them in total I don’t think that’s too bad for a first day on the more creative side of things.
I lose one day’s work to a horrible cold, no doubt the same one my son had a few days earlier. I try to tell myself it’s not a lost day at all but a “creative rest“, only to instantly become annoyed with my own virus-addled BS.
I wake up suddenly at 2am, the horrible realisation the description I wrote for one room doesn’t really work on repeat entries ringing in my mind – it was done, but it’ll have to go.
Unfortunately I’m still too full of cold to dig deep into spacing and character limits but I’m desperate to get started again, and so I decide to take my handwritten notes and use them to sketch out general descriptions for each area in a Word document, so I’ve got something tangible to build the final entries on as soon as I’m better.
I still think I can get this finished in the two weeks I’d promised, but things are suddenly looking very tight… is it unethical to crunch yourself when you’re the only person on the team?
…Yes, yes it is. It perpetuates the idea that crunch is acceptable so long as there’s a “good” reason for it and “nobody minds” (of course nobody minds, not when the boss gets to decide who still has a job next month), and any delay – even for ordinary sickness or other wholly unpreventable outside factors – is simply unfathomable at any personal cost to the people working on the project. A game “must” be released on time, even if it and the people working on it are worse off for the extra push.
So! No crunch or crunch-like cramming here. If this is a little late then it’s just going to be a little late; my tiny and ultimately futile stand against an evil practise that is easy to dress up as passionate people happily working away next to a fresh mug of coffee but in reality costs people their physical and mental health.
I have a quick little playtest of my game just to see how it’s looking, and I realise for the first time I mixed up east and west in the descriptive text. Do you remember that scene in The Simpsons where Homer tries to build a DIY barbeque pit? That’s me. That’s me all day, every day.
I promise myself one (1) proper day off. This actually means I play Final Fantasy XI for five minutes, do loads of housework in an attempt to assuage my guilt, and then polish up some more text anyway.
I catch a few narrative holes along the way, places where the gameplay (ex: “Press this button”) works but doesn’t necessarily land well as part of the story (ex: “Why press that button at all? Does the player know that button exists before I tell them to press it?”) and try to patch them up as best I can. I misspell someone’s name, and decide it looks better “wrong” – happy little accidents like that are a pleasant part of the process.
Less fun is the time I finally do something I’ve been worrying about since I started: I accidentally mix up some line numbers and overwrite a small piece of my program – thankfully I catch myself cocking up before I do too much damage, and am able to recover a save made a few minutes earlier.
Looking over what I’ve got to show so far, it’s a little disheartening to see such a small amount of painfully average work take so long – it all looks so simple now I’ve done it, so why did it take over a week to reach this point? This is of course an idiotic thing to think because I only reached this point by making something rough and then refining it, but I think it anyway.
I’m in a strange sort of limbo now, where the overtly creative half of the game has become strangely workmanlike – it’s nice to imagine strange new worlds and thrilling adventures, but at the same time I need to knuckle down and get this done. Area 10’s room description needs filling in and scratched off my little list and then Area 12’s conditional text needs to be checked to make sure it isn’t too long – there’s no time for any grand ideas that don’t contribute towards the project’s end right now.
It’s distressingly easy to see the “ghosts” of good ideas cast aside here: The word used to fit the character limit over the one I wanted, the change made to avoid a complete rewrite of another segment, the thing I wanted to be different but couldn’t make the room for, the part where my rudimentary programming skills let me down (again). All I can do is hope that what’s left after the game I imagined has been cut down into the game I could create is still worth playing.
My laptop crashed for no particular reason (really – it’s usually very well behaved), the sort of crash that brings up the dreaded blue screen of death and that corrupted all of the C64 work I was working on at the time. It just won’t open. How? Why? Should it have? No, probably not. But it did anyway. My save states, unusable. The (emulated) tape and disc I had been saving to, nowhere to be found.
So I grit my teeth and reload the most recent working saved “tape” I had and… this is from days ago. I am greeted by “Room 6. Exits north, east, and west” instead of a screen’s worth of description about crashed rockets and security doors knocked off their runners in the blast. There’s nothing here.
This has killed my “budget” – the time I’d “saved up” for this project by preparing two whole weeks worth of articles early to cover the gap created by working on this – and I can’t get back to where I was without going way over it, far beyond the “This is a bit late but that’s OK” I was thinking of when I talked about crunch a few days ago and deep into “Even if nobody in the universe minds I’ll still have to stop doing all the other work I should be doing now because of this” territory. I…
This game is over, and I have nothing other than some notes and a few work-in-progress screenshots to show for all that effort. But that’s real gamedev too, isn’t it? Not every project comes to published fruition, not every planning document gets turned into code. It’s a tough, tricky, and fascinating process, and not making a game is just as much a part of it as anything else.
Disappointed? Yes, very. I was looking forward to seeing this through. A little wiser thanks to this experience? I like to think so.