February 13, 2015
How Projects Run Late, in the small
Today I was working on a project and I've been doing my best, given recent events, to do some reasonable thinking about how things will go before I do them, and then jot down an estimate which I compare to real time after the fact¹. Here's the story of one of those tasks, a tiny little task which is a microcosm of game programming (and indeed, game development as a whole).
It was simple. I just wanted to add a little close box in the upper right hand of a dialog box, and make it so that when I clicked on it, it closed that dialog box. These dialogs are rendered by my own code, rather than an operating system, and so I'm responsible for that sort of thing.
The code for this project is *dead simple* at this point, and so I estimated this task at about 15 minutes. Five to draw a little box with an X in it, and five to deal with the mouse-handling logic, and five of buffer because hell, something always goes a little bit wrong. Sure, I could have doubled it, but I didn't. This couldn't really go *that* wrong, could it?
Well, I tossed in the logic to draw the box and all that and it worked first time so I was already ahead of schedule, it took about three minutes to do that. Excellent! Here I am, ahead of schedule and half-way done.
I threw in the logic next to handle the mouse click. This was really simple code: if the mouse position is in the box when clicked, change the state of the game to not display that dialog. (Like I said, this project is *dead simple* at this point.)
Huh. That didn't work. That should have worked, shouldn't it? Well, double-check the code, run with the debugger and we'll have it sorted in no time.
Now, I'm working on my Mac and using DLLs for my game logic (inspired by Handmade Hero) and between not being a long-time Mac dev and some stuff with Xcode of which I'm not fond, just stepping through this code sensibly takes a little bit of time. Sure, it might have been better on my PC, but I'm not working on the PC today, oh well, better remember next time to pad my estimates a little more when I'm working on the Mac. Still, this is maybe two minutes of fiddling, still plenty of time left.
I step through the response to the mouse click and it just jumps over my test and says I haven't clicked the button and I scratch my head with the hand that hasn't just clicked the button. UI stuff is always fiddly, too, because you sort of need to hold the mouse down while you step over your event processing stuff, because while you're in the debugger, those things are going to queue up and so I do it a few more times to make sure I'm doing the right thing here, just getting a down event and not an up, all that.
Huh, well, we've reached that 15 minutes and we have no idea why.
So I look a little more closely at the input logic. I mean, I've used this code on this other project I'm working on and it's just fine there, I don't know why it wouldn't... oh dear.
See, I had copied that logic out of that project before I found this exact same bug over there, and while the details of the bug aren't relevant, the way your mind plays the trick on you of thinking a bit of code is tested and ready is. It takes me another five minutes having figured that out to dig out the code I really want, remove the broken code, and get it all going so I can show that it is now working as promised.
But of course, it isn't. Because my double-click logic in this new project is eating up these mouse clicks (in error) and the single-click I actually want isn't getting through to this code. Ok, tidy that up... and... yes, okay, there, it works. Lovely. I check that in, look at the clock and see that here we are, just over thirty minutes into a 15 minute task.
I've been programming professionally for almost twenty years and I can't estimate reliably a 15 minute task. I mean, sure, most of the time I probably do, but there's no knowing when I'll miss. To a degree, too, I generally estimate better at less granularity, but properly figuring out how long a bigger task will take involves lots of little tasks like these. And this is an example where I know *everything* about the code, I've written it all myself. Add in a team of coders and fixing even a simple bug without breaking something else rapidly becomes a danger-ridden process.
Of course, these are the simple problems. One little bug in a 15 minute task doubles its time, and you can't know which one of those simple tasks it'll be. This isn't even a particularly creative problem, where you might spend a fair bit of time on a solution and discover that the solution you've designed just doesn't work -- because it's a design that is meant to be fun, and in the end it isn't, and you have to figure out where to go from there and the schedule is blown.
This is not a business of products. We are not simply making widgets more efficiently to increase profits by .001 cents per unit. We're making things, usually new things, and because we're chasing the technology dragon² the years of experience we have often amounts to very little. All the experience in the world can't help you when the measures are enormous and enormously subjective.
I can tell you how many lines of code I can write in a day; it's quite a lot. But I can't tell you how long it'll take me to write the lines you actually want. Not even after all these years.
¹I've also strained today to mostly avoid social media, so that my undivided attention is on these tasks as I do them.
²Every few years, drastically new hardware. Every few months, increased expectation from those who play our games. It's Sisyphean.
February 12, 2015
Ultima 2 Complete
Sadly, I finished this game a couple of weeks ago and forgot to post, so you'll get a couple of these in short order.
As I'll probably remark too many times, Ultima ][ is my least favorite of these first three games, but it's a step in the direction of more world-building and narrative that will produce Ultima IV and of course, the rest of the series (including a couple of very richly themed offshoots in the Adventures line, and also a return to much more systemic stuff in Underworld).
So I got through it pretty quickly; the grinding is pretty tedious and it's not worth going into the dungeons, so we don't do too much of that. We'll do quite a bit more of that (or at least I will) for Ultima ]|[.
Thanks for joining me!
February 04, 2015
Notes on This War of Mine
As with any post here, there may be spoilers for games under discussion. Caveat lector. Also, CW: this game is a game about war in an urban environment, and can feature suicide and rape as part of its procedural events, and I will touch on that briefly.
This semester I'm co-teaching a course at Wabash College with my friend and now colleague, Michael Abbott (aka Brainy Gamer). We are both designing and playing games, and so once we've had an opportunity to discuss games in class, I'm going to try and come back here and jot out some notes about what came of that.
If you're unfamiliar with it, This War of Mine¹ takes place in what seems to be an eastern European country, torn by civil war. It presents as a sort of sim game -- you are looking at a cross-section of a burned out house, and you can direct three characters within to perform tasks over the course of the day. Initially, this is simply scrounging for materials within the house, clearing away space, and maybe trying to make a bed so that you can get a bit of rest at night. Once night falls, however, you have the opportunity to send a character out of the house to scavenge at locations marked on an overhead map. The game takes place over about a month of time, and various thematic events can occur.
We had a really great in-class discussion about this game, starting off listing the emotions you feel when playing a blockbuster war shooter (e.g. Call of Duty) and then the mechanics that are characteristic of those games. We did the same for This War of Mine. And then we went and drew lines between the emotions and the mechanics which tended to engender them.
It's encouraging to play a game like This War of Mine, because the emotions that turned up on that side of the blackboard stood in stark contrast to those for the empowering first-person fantasy, despite being ostensibly about the same subject. Fear and anxiety vs. adrenaline. Drudgery vs immediacy. Regret rather than empowerment. But also ingenuity and hope on the This War of Mine side, and really nothing similar or comparable over on the warshooter side.
Mechanically speaking, we spent a lot of time talking about the procedural nature of This War of Mine vs the linear nature of the blockbusters, and that brought about a good discussion of various player stories. Students asked whether I thought that the game explicitly set up situations as a result of earlier encounters -- for example, if you chose to raid for food, that humanitarian aid might come the next day, making you feel guilty and wish that you had waited². We talked about some of the events that students saw in their play: one lost a member of his little band of survivors to suicide via depression, and another witnessed a rape that he tried to interrupt (leading to the character's death, as the rapist was a heavily armed soldier).
All of this brought us over to talk a little bit about complicity in games, how mechanics and thematic elements can teach us to do things of which we may not be proud in retrospect, even in a safe space like this. In the example above, the risk of intervention was brought home in a mechanical way that might lead to a player making a very different choice on a subsequent playthrough. It's also fair to reflect, though, that This War of Mine doesn't explicitly set goals, not even of survival -- a reasonable approach to play would be to maintain a moral stance even in the face of the horror of war, and to prefer death to a degradation of one's moral principles. The goal of survival is one the player implicitly brings to the game, but it's not necessarily required of you.
On the whole, a very interesting game and one I'm very glad I played, as disturbing as the subject matter can be. War is a failure, but This War of Mine is most definitely not.
¹Developed by Polish developer 11 Bit Studios. I played it via Steam, it's also available on the Mac App Store and other venues.
²For what it's worth, I suspect that it's random. I feel like we maybe should have explored this part of it a little bit more -- would one feel differently about the game if one knew one was being explicitly manipulated in this way rather than such outcomes happening as a result of systems?
January 21, 2015
Ultima 1 Complete
I've finished streaming the first of the Ultima games, which features the arch-evil Mondain.
It's a fun game with more systems than I expected when I started out down this path, which is something I talk about in the videos a bit. There are multiple points of view (well, top-down and first-person, but on land and in space). The dungeons are randomly generated at start-up, and you're pushed into going into at least one of them. Combat is certainly somewhat bland, though there are a variety of vector graphic monsters underground and dungeons can be treacherous. There's space travel and real-time space combat. There are quests. There's also a fair amount of grind, no lie, but not nearly as much as in the next two titles.
What I especially liked about it, besides it being pretty system-y, was the reflection of Lord British's interests right there in the game -- clearly, this was a designer who liked a lot of the sorts of things I liked when I was a kid, Dungeons and Dragons and Star Wars. Seeing that in the games I played then are a large part of why I'm a game developer today, and so I closed out the series talking a little bit about that, how it would be kind of great if there were such games for every sort of interest that young people have, regardless of gender or race or neurotypicality or what-have-you. As a result, we'd have a greater variety of game developers and we'd be able to grow the audience of games significantly.
Anyway, the four videos are linked below. I've started off on Ultima ][ and you can follow that on my YouTube channel.
Episode 1: Manual, character creation, and dungeoning
Thanks for watching!
January 05, 2015
Streaming Mt. Ultima
The Ultima series is one that covers kind of an important era of my life, in terms of game development: the first one came out around the time I was first gaming (the very early 80s, though I didn't actually play the first) and lasting just until I was actually a game developer myself, in the very late nineties.
I didn't play them all, though I have fond memories of hours of puzzling away at III and IV especially, on the Apple ][+ and then later, spending a significant amount of time (including one weekend marathon with a friend) finishing Ultima VII, which needed more horsepower than either of us had at the time. I read the review of Ultima VIII by Scorpia (not kind), and so skipped it. I dabbled with the Ultima Adventures and the Underworld, and I remember playing the demo for Ultima IX when it came out. "Avatar, you can't leave the house without your pants!"
It's a long and storied franchise, and I find it interesting in the various ways it changed over the course of its life.
So, I'm going to stream it all -- I picked them all up on GOG a few months ago. I thought about getting into streaming a wee bit as the end of the year neared, and it really fit the bill -- a series with which I have reasonable (though not exhaustive) familiarity, covering lots of eras of my own programming and gaming background. They also mostly run on a Mac, so while I'm traveling this spring, I should be able to take them on.
I'll skip the grindy bits and try to show the highlights for the most part, sticking to those parts which are illustrative and jumping ahead off-screen.
I hope you'll join me! I'll be on my Twitch channel and keeping an eye on the chat window in the meantime. I'll post back here with my YouTube channel once I've got those up, too, I'll be recording and streaming at the same time for those who miss it.
January 03, 2015
The Year in Review: 2014
Each year I like to run down how I spent my time -- my free time, in terms of entertainment and such -- and write it up for the blog.
When it came to how I spent my free time, this past year was mostly about one thing: reading. I read a fairly staggering 182 books in 2014, substantially more than I normally read, averaging a book about every two days.
I'm pleased to say, too, that I read pretty widely, with a mix of genres and literary fiction. Here were a few trends:
- I read Robert B. Parker, who passed away a couple of years ago, prompting me to read or re-read all of the Spenser novels written by him. It was interesting to read them in a compressed way like this. I think my favorites are dotted in amongst the early stuff, though there are some series extras whose entries are all pretty good, such as the Gray Man. I quite enjoyed the lead-up to Spenser and Susan establishing themselves as each other's great love, though there are several missteps in terms of representation along the way. Anyway, I wrote about genre a few years back and about how PI novels attain their meaning through clashing a single world-view with a series of challenges, and it's kind of nice that Spenser's world-view has space for a deep and abiding love. Anyway.
- I read all of the extant Harry Hole novels, by Jo Nesbo, a Norwegian author. These are quite different from the Spenser novels, denser, richer, though you start to get a feel for their rhythms maybe a half-dozen books in. Still, completely worthwhile and absorbing.
- I tackled quite a lot of Alice Munro (something I'll continue in 2015) after her Nobel Prize win. She's definitely describing a sort of way of life, and you feel richer for having read her stories.
- I also tackled quite a few of the NY Times Notable Fiction from 2013's list, and that's something I'll probably try to do again in 2015, albeit only the women authors, for now.
- I read Van Der Meer's Southern Reach trilogy, and I found them thoroughly strange and darkly wondrous, reminding me strongly of the feeling of the film version of Stalker. Highly recommended for science fiction or weird horror fans, I'm not sure where exactly it fits in. I saw this in Entertainment Weekly, I think, which I get as a supporter of the American Film Institute.
- My second big discovery of the year were these four books in a series by SJ Bolton (now attributed as Sharon Bolton), featuring a London police officer named Lacey Flint. They really hooked me, and I have no idea who to thank for turning me on to her. I look forward to more. (Maybe also EW?)
Anyway, turning to 2015 for books I've decided to make it a year of reading entirely women authors. I felt like there wasn't sufficient diversity in the reading I was doing in 2014 from a gender perspective (between 20 and 25% were women), and so I'm going to make a concerted effort to only read women. (I'll have to make an exception in some cases, because I expect to be doing more reading in games writing this year, mostly because I'm teaching that course at Wabash. But that'll be the exception that proves the rule.) I have a few specific women I want to spend a lot of time with: Ursula K. LeGuin, Agatha Christie (mostly the Poirot, but I may also delve into the Miss Marple), Toni Morrison, finishing off Munro's oeuvre, Ruth Rendell, lots of stuff. If anyone has any suggestions for women who write horror, I'm game.
I'd like to do a tumblr about this "year of reading women" so look for a link to that in the future.
I did watch slightly less TV this year, in favor of more movies -- 25 seasons of TV (down from 33 in 2013), and 149 movies. I saw a lot fewer at the theater this year... I've become very curmudgeonly about the distractions of crowds. (It seems like you can't go anywhere without seeing people checking their phones. I was at a musical performance Saturday night and across the aisle there was a woman checking text messages or something in the middle of a number. I just... why go out?)
That said, the movies I did see in the theater were mostly pretty good! I was once again surprised by the quality of a Planet of the Apes movie, and similarly with the latest Captain America -- my favorite films of that increasingly enormous franchise, because of the earnestness of the hero. Snowpiercer was really great, featuring my favorite Korean star, and Blue Ruin stood the revenge picture on its head in a way, with some beautiful and clever shots. Plus I saw a handful of old favorites on the big screen again, which is always a treat.
The big stories in streaming for me this year were finishing off Star Trek: The Next Generation with my son (no idea what we'll do next, maybe BSG?) and my "31 Nights Streaming Screaming" that I did a tumblr for throughout October. I might try to do another marathon like that this year, we'll see... it turns out to be pretty grueling and take a fair amount of time away from everything else, but who knows.
Not listed in my viewing but a substantial amount of time was watching Casey Muratori live-program a game from scratch. I've watched maybe 20 hours of that stream and it's great fun. Highly recommended for streamers.
In terms of games, I finished slightly fewer than in 2013; I think I finished 25 in 2013, and I only made it through 17 this year, still mostly going through my back catalog. The games that grabbed me most were Deadly Premonition (just typing out the name makes me want to go and spend more time there), Super Mario Galaxy (which I finished first as Mario, and then as Luigi, making it the first Super Mario game where I've actually gotten all the stars), and Fez, which occupied a week or so of sick time in September and which is just a masterpiece of design.
This year, I've decided to at least play 14 games: I'm going to stream the Ultima series a couple of times a week. I've already finished playing through the first three to familiarize myself with them and hope to get set up with streaming this week. At the moment, especially with the early games, I intend to skip around to the best bits -- there's quite a lot of grinding, especially in the first few games. I'm also using various Internet resources to familiarize myself with the game, though I'll give viewers a sense of how you were supposed to solve these games back in the day.
The big thing I failed at in 2014 was making a game a month -- I did one in January and one in February, and then I abandoned it because I was working full-time on Sixty Second Shooter. It's something I'd like to do more of in 2015, but I don't know honestly if I'll find the time. I have a more substantial code base of my own, now, and if there are things on my general tech to-do list that could support a game of its own (or be a central feature) but at the same time move forward my code-base in support of my more ambitious projects, I'll do that. I don't know... it's possible I'll be able to do more. We'll see.
One last thing -- a former co-worker and friend of mine and I are going to give a podcast about indie life a go, more on that as it develops. That's yet another project for this year. I guess I'll be busy.
Cheers, and a great 2015 to you all.