The theme was ‘Waves’. I teamed up with Dziek Dyes Bolt, Callum Fowlie (two members of last year’s team) and Natalie Clayton to make ‘Si the Wave, Be the Wave’, a competitive local multiplayer game in which two players, each controlling a crowd of characters, must race to complete Mexican waves. You can check it out and download it on the Global Game Jam website (Windows only). The final version is a bit broken. If you’re feeling brave, the predictably turgid source code is available on GitHub.
The jam went a bit differently for me this time around. Unlike last year we actually had our mechanic working before the end of Saturday, rather than on Sunday morning, so we had time to rethink our idea and iterate upon it. However, we didn’t quite have enough work for everyone to do, and we had the usual difficulties one has when one tries to make a 2D game in Unity. I’m not quite as pleased with our game this time around – I think last year’s concept was very strong in comparison – but I still had a valuable experience trying new things and getting to write messy code, something that is quite refreshing after 5 months of programming as a day job.
The atmosphere at Abertay was fantastic once again, with the organisers (some of the lecturers from Arts, Media and Games) successfully creating a positive, healthy atmosphere. There’s always a lot of talk about staying up for the whole length of the jam and eating lots of junk food (the keynote video this time around even encouraged it) and I think it’s important to reject that attitude. It doesn’t lead to better games or developers. They also put emphasis on the process and not the product, which is how it should be.
2016 was a pretty positive year for me, even though the world at large seemed determined to produce bad news. Here’s some of the big things that happened in my life this year.
I finished university
I may have graduated in November, but I was done with my time at Abertay after handing in my final project at the end of June. This was about two months after everyone else had handed in theirs. Final year is pretty hard at the best of times, and recovering from a bereavement certainly doesn’t help. At a few points I was ready to give up, but fortunately the staff at Abertay understood and allowed me to delay the final deadline so that I could focus on other stuff, like the maths exam. It simply would not have worked out any other way – I was pushing myself to the breaking point trying to do everything at once.
I made it, and I’m glad I did. The graduation ceremony, while being nothing more than a ceremony, turned out to be a nice way to bookend my time at Abertay. I’m very grateful to my teachers and the other staff, such as the university counsellors, who helped me get there.
I got a job
During my final push to complete university I continued applying to jobs as I had been throughout the year. This was quite depressing, with most applications ignored completely by overburdened hiring departments, but when all of your friends are going through the same process there’s an air of solidarity that helps to keep you going.
Eventually I applied for a junior programming role at Rockstar North, not expecting much, but found myself being offered a job less than a month later. I have not stopped feeling surprised.
I started in August and my first few months have been great. I am very lucky.
I moved back to Edinburgh
It has been very sad to leave Dundee behind. At points I’ve felt very homesick for it. I don’t expect the feeling to go away, but I’m feeling more settled in Edinburgh now that I’ve moved into a flat on the other side of town.
Living at my mum’s for three months was alright – she and I get along pretty well – but I’m glad to have ‘escaped’. There was something uncomfortable about going to work along the same route I used to take to school, or sleeping in the same bed seven year-old me used to sleep in. Now I have my own place in a different part of town and I have something like the feeling of independence I had while I was in Dundee.
My friends were awesome
And I am certain they will continue to be awesome!
It sounds a bit sappy, but it’s true. They have picked me up and put me back on my feet when I’ve been down and brought me many laughs and smiles. They all deserve the very best for 2017.
If you’re reading this, you’re probably one of my friends. If not, maybe you will be one day. Either way: you rock, and I wish you a happy new year!
This post is about what I played in 2016 which, as I see it, was a pretty amazing year for games.
On the tabletop front I enjoyed some fantastic games. The main one that I can think of is, oddly enough, Condottiere. I’ve owned Condottiere for years but in 2016 I spent a few long evenings playing it over and over with the same people and gained a lot of appreciation for it. It’s a tightly-designed blend of strategy, hidden information and bluffing, with nice theming and artwork to boot. It’s also very obviously the main inspiration for Gwent. I’ve a few misgivings about Condottiere – random luck can win the day sometimes and there’s a bit of a snowball effect – but despite any criticisms I have this is one of those games that’s physically small and cheap enough that I think every board gamer ought to have a copy.
This year also introduced me to Codenames. I must have played it more than fifty times so far, and it’s yet to disappoint as a quick, easy way to engage people around a table.
Meanwhile in videogame land The Witcher III continued to amaze me. The Hearts of Stone expansion demonstrated more storytelling finesse on its own than most full games with a refreshingly Witcher-y take on Faust. I’ve yet to play Blood and Wine, the second expansion, but I’m really looking forward to it.
Devil Daggers: a super-intense FPS with a super-intense aesthetic in which the only goal is to see how long you can survive against enormous swarms of enemies. Playing it in front of a crowd at Games Are For Everyone, in a cavernous old wine cellar beneath South Bridge in Edinburgh, with thick red candles strewn about, isn’t something I’ll forget in a hurry. Hopefully in 2017 I’ll live for longer than 150 seconds.
Lieve Oma was also featured at Games Are For Everyone. It’s about going for a walk with your grandmother in the woods. I found it very touching. I won’t say anymore. I hope you check it out.
This year I’ve not had much time to spend on big long games, which has given shorter-form games like Devil Daggers and Lieve Oma a chance to shine while mainstream triple-A releases have fallen to the wayside. I’m currently halfway through a replay of Dishonored, including its excellent DLC, which I want to complete before I get the sequel. As I write this I’m sitting watching Natalie play the new Doom. A lot of demons are exploding. It seems to really capture some of the design spirit of the original Doom games while confidently doing its own thing – a bit like Devil Daggers, I suppose. Also, Oblivion turned 10 this year. Wild.
There’s much more to write about here, other games I’ve played and enjoyed, but there could never be enough time to cover everything, or even remember it all. If 2017 has half as rich a crop of good games I want to play I’ll never be able to catch up. And that’s okay.
We’ve all been there. We learn about a new-ish C++ feature, we consider using it, we weigh our optimism against our wariness of falling into the “use all the features!” trap. We remember the sad times when we or others were a little too eager and back away nervously. Maybe another time, we say, retreating into the darkness – it may be dark, but it’s darkness you’re familiar with.
The argument to adopt new-ish C++ features can be quite difficult, and for good reason. Sometimes the argument practically wins itself, though, in one simple, concise example. This post is about my current favourite.
Here is Herb Sutter talking about dynamic memory management in a talk entitled Leak-Freedom in C++… By Default, going into examples of when and where to use the standard library’s smart pointers. He actually brings up a multithreading-ready version of the weak_ptr/shared_ptr-based resource bank class I showed off in a recent post.
Want fast C++? Know your hardware! is about, well, knowing your hardware. This is one of those annoying harsh realities. You want to not have to think about the metal. The whole point of high-level programming languages like C++ is to get away from worrying about the hardware. Worrying about the hardware is the hardware developer’s job, right? Well, no. At least until languages catch up with the fact that the performance bottleneck in computing is no longer CPU speed but memory speed1, data-oriented code is going to be the way forward for high-performance applications2.
I enjoyed this talk on “Colonies, performance and why you should care”. Basically, a ‘colony’ is a container written for fast insertion, erasure and iteration; the kind of thing you want to put your GameObjects in. This is one of the many nice things coming out of SG14, the ISO-C++ study group focusing on low-latency, real-time applications like games.
That’s all I have time for, but I recommend having a browse around the selection of videos. There are significantly more than there were for Steam Dev Days, and some of them are very focused, so there was no way I could have watched and judged them all. Hopefully the ones I’ve linked here are a good starting point for your own meandering through the archives.
If you know of any languages or features of any language which abstractify data-oriented programming practices, please tell me about them. ↩
Fun fact: Data on CDs/DVDs for games which use streaming for most or all of their assets (so basically any seamless open-world game since GTA 3) have optimized data layouts on disk, with data commonly accessed at around the same time placed physically near each other to minimize the amount of movement needed to move from one asset to the next. ↩