Repainting the Framework

David Shaw, 1:29 am 23rd July 2009
Posted under: Blog Babble

A brief update on what I’ve been up to in the last few weeks:

I’ve been having trouble getting started, what with all the various options transfixing me and being cause for much procrastination, so I spend a bit of time reviewing my plan and getting my priorities straight. I think I was aiming too hard to make things near perfect, which is too hard in my current position, hence cause for anguish and feet dragging. Many people suggest it’s better and quicker to throw something together and then refine it, and I think they’re right – at the least, it gets me over the road block of getting things started.

Another issue is that I’m trying to run a few different projects at once, and I’ve been putting off some hard decisions for all of them. I’m reaching the point where I have to pull the trigger for some of them, and I’ve been putting that off for a bit too long. This is a nice timely reminder to myself that if you have to decide between two reasonable options, both decent but hard to tell which is better, havering indecisively between the two is actually taking the third, worse option. Your choices are actually A) good option B) good, different option and C) do nothing but build up stress between making the wrong choice between A and B. Memo to self: if in that situation, just flip a coin and go with A or B; don’t pick C by default.

Programming-wise, I’ve put Python aside for a while. I don’t know why, but I’m finding it hard to go beyond simple demos. It could just be that I’ve thought of the C family of languages as my game programming language for so long I’ve hard-wired it in there.

Instead, I’m in the process of resurrecting the code I was using for my hobby games a couple of years ago and reworking it into a new framework. I’m keeping the original framework name of “Diagonal”, because I like it, although I’ll give different version names to each iteration (the current one is “Scalene”). My main aim at the moment is to get the framework working while also refresh my memory as to how the system is put together and refreshing my programming skills, all in one swoop. Looking through the code at first glance it isn’t actually that bad.. I guess after several iterations I’d ironed out most of the kinks.

I’m also converting the framework from C++ to C, which is I admit a fairly retrograde action. I’ve never been that comfortable with C++, sticking mainly towards the C side of things in my own code save for a classes and the odd template. In my current framework code, I don’t actually use the C++ features that often. There’s very few classes and I rarely had the need to use the standard library. The bulk of memory management is handled within critical modules which guard it jealously. Really, the biggest thing I lose is namespaces, which is a bit of a bummer but I can live with. In return, I’m hoping to avoid all those pesky annoyances I’ve had working with C++ code, such as easier debugging, profiling and no error messages that go for fifteen pages due to compound templates.

The other justification for a lower level language like C is that I am planning soon to integrate my framework with a scripting language of choice. Admittedly that can be done with C++ and many other languages as well, but I like the contrast between scripting languages and C. Lua and Python are the two choices I’ve flagged, and while I’m stronger in Python I’m leaning towards Lua; I find its simplicity to be appealing, and it’s been designed for embedding. Python is going to be my tool language.

All this said, things are going a bit too slowly for my tastes, and I’m a bit worried. It’s taking me a while to switch from postgraduate algorithm prototyper to game engineer/programmer, remembering some aspects of C, how to use Xcode etc. I do have a few years of my own code to crib off, so I know that what I have should fundamentally work as a starting point. If I don’t have a screenshot of a basic prototype up by the end of the month, then something must have gone seriously wrong.

Gone Shopping

David Shaw, 2:30 am 12th July 2009
Posted under: Blog Babble

I apologise for neglecting the blog again. I have been trying to kickstart a few of the activities I need to get running to kick this Trazoi show going, but I don’t think I’ve done a good job on any of them thus far. I’m currently taking a step back, staring at the diagrams pinned to my corkboard, reading informative books and coming up with a new approach for next week. I will try to factor in more blogging into the plan, if only to push myself to get to the point where I’ve got pretty pictures to share.

My absense from blogging over the last fortnight is partly due to me settling a few mental hang-ups from finishing my thesis. The mid-year milestone triggered off a little voice in my head that said “Hey, remember all that cool stuff you were drooling over last year but said you couldn’t get until your disseration was handed in? Well, it’s been three months already. Where’s the presents?” So I decided to open my piggy-bank and go shopping.

I considered getting a new desktop PC, a usual thing I salivate over, but I couldn’t justify the purchase. My iMac is good enough for work. My secondary WinXP machine might be completely outdated and sounds like a sick leaf blower, but it’s good enough for older games and watching the occasional DVD – which is all I really need it for. So instead I split the purchase money and got a netbook for more mobile productivity, plus an Xbox 360 for current-gen console gaming that doesn’t involve waggling a remote.

I’m pretty happy with the netbook. I got a Dell Inspiron Mini 9, as reviews said the model was quite sturdy and it would be easier to service the parts myself if need be. This model also has the neat benefit that it has no moving parts; the hard disk is solid state and as it’s low power there’s no cooling fan. I’ve installed Ubuntu Netbook Remix on it and it works rather well; it’s no powerhouse with an Intel Atom but it does what I need it to do. Currently I’m using the netbook as a digital notepad, taking notes in WikidPad as I read books, and it does that very well. And unlike expensive laptops which always seem so fragile to me, I don’t mind so much if a netbook breaks down in a couple of years because they’re not so expensive.

The Xbox 360 is an Xbox 360 – there’s not much more to say. I’ve used it a little bit and it seems good. I’m a bit miffed that the wireless adapter is an expensive add-on – hey, it came already installed in the Wii and the netbook – but I can rig up a wired connection when I need to go on-line. I’m not big on multiplayer gaming that doesn’t involve all players being within Nerf ball range.

It also twigged that since I now have an internet connection that isn’t completely pants, I can now use services like Steam and Good Old Games – great for both catching up on games I missed on playing the last few years and for researching games in themes I’d like to explore myself. I got Half Life 2: Orange Box, Psychonauts, the X-COM pack and Fallout Tactics – all combined for less than the standard full price shrink-wrapped game. I’m still downloading them a week after ordering them – my connection isn’t great – but it’s nice to experience the buzz that Steam has caused for myself.

The big downside to all these great priced game packages is that 1) I already have a back catalog of games I want to play, and 2) I’m currently finishing a game every two months. It’s going to take me until 2012 to actually play them all. Sigh. Well, a few Game Appreciation evenings a week won’t hurt to help work through my playlist and to eventually figure out why everyone on the internet keeps claiming the cake is a lie.

Review: Braid

David Shaw, 5:45 am 1st July 2009
Posted under: Reviews

It took me a while due to my sporadic play schedule, but I finally finished Braid yesterday. I know I am extremely late to the party with Braid, what with me waiting for the Mac port, but as one of the big indie game names it’s something I had to play for a game design focused mini-review.

Braid is a 2D puzzle platformer, a genre where the challenge lies more in figuring out how to solve a problem rather than on twitch reactions (although there’s a bit of that in the game). The main theme of Braid’s puzzles are different variations on time manipulation, such as reversing time, replaying time, slowing time down, or variable time dependent on the movement of the player. The objective of all these puzzles is to collect puzzle pieces, which combine to form material for a rather surreal backstory (more on that later).

Screenshot of Braid

The time puzzles were, for the most part, extremely well done. They were at the right amount of difficulty to be rather challenging but not so much so that I felt permanently stuck. The variations on time manipulation were clever and led to great puzzle variations while still being tied to the same overall theme. The ability to reverse time to get out of deaths made many of the twitch puzzles and jumping less about reactions and muscle memory and more of a thought exercise.

There were however a few puzzles that were too frustrating, all of which involved a component that removed the inability to rewind time to reverse the mistake. The classic example would be in the scenarios where time direction depends on horizontal position and you are offered two doors leading to the same puzzle piece with a key that is unaffected by time. If you pick the wrong door, your movement will reverse time back to when the door was closed – and you’ve now lost your hard earned key and have to start allll the way back from the beginning again.

I also liked how the actions and interactions with the game were very clearly shown in the game. As shown in the screenshot (which also shows how pretty Braid is; very nice painterly style to the levels), the early tutorial levels make it very obvious how you are meant to interact with objects in the game. I think this style of tutorial is extremely good and something to learn from.

The main criticism I would have with the game is the story. The story is told mostly through books which display text on the screen, but also through the imagery in the jigsaw puzzles and through events in the last level. But it was all extremely surreal and I never put all the pieces together. Strangely, some of the story text is also a hidden secret that you have to work at to decipher – and even then it’s all still very confusing.

It seems designed that you have to work rather hard to piece together the story in Braid, and I’m not sure if it’s worth the effort. I wouldn’t mind so much if the story was just subtext, something you could happily ignore if you wanted to focus on the puzzles. However the game is called “Braid” – an entirely story related term – and the story elements seem to be treated as extremely important – but not important enough to be clear to the player. Unfortunately the impression I’ve got from Braid’s story was that it was trying too hard to be clever in structure rather than wanting to convey its message to me directly.

Braid is definitely worth picking up, especially if you’re a developer with an interest in puzzle games, platformers or both.