You know how I was working on that pseudo-3d game engine, Quiver? That I was so well stuck into that I even did a presentation about it? A whole year and a half ago? Well, it may be no surprise… but it ain’t really happening any more.
Making stuff in your personal time is a big challenge. You’re at the mercy of:
Your dwindling energy levels when working in the margins of a day’s work or a busy weekend day.
The cruel march of time. It can be so hard to find enough, and even if you can, can you find the long, unbroken stretches of time you need to really get things done?
Your own whims. As your enthusiasm for an existing project dwindles, new interests take flight. And you’d be a fool not to pursue them, really. Life is short.
The last thing I did on Quiver was very satisfying, however. All I did was break apart the game, Quarrel, from the engine, so that it now lives in its own repository. While I’m not sure I’ll ever return to Quarrel, I’m still attached to the idea of returning to the engine and seeing what else I can do with it, or expanding it a little1. This separation will make that return easier.
It’s past time for me to finally say farewell, then, at least for now. Bye-bye little project!
The outstanding major features I wanted to implement were textured walls, ceilings and floors, a scripting system, and a pathfinding and navigation-graph-generation system. ↩
It has never really gone away and I don’t expect it ever will. I didn’t move past or through the pain of loss so much as accept it into myself and change around it. I didn’t heal; I became a different person.
We’re always changing, from year to year, month to month, day to day, down to the nanosecond. We’re never who we used to be. Sometimes the sadness, the resistance, is just that last remaining part of our old selves, clinging on, fighting for the world to stay the same. Fighting, without success and without hope, to go back.
As time has stretched away from the event (at the end of July it will have been four years) it has become easier. My mind has become less and less occupied with the how and the why, less aware of the missing pieces, less conscious of the parts of me that are different now. Most days are just normal days: I get up, I am grateful, I do what I can and I keep moving. Then there are the days like today.
I’m not sure why I am like I am today. Perhaps it’s just the weather. Thick fog, unrelenting rain and distant thunder, finally unleashed after gathering ominously for the past few days. Maybe being at Edinburgh Pride on Saturday, meeting old friends in the sunlight, stirred the pot of memories and emotions and let grief come bubbling to the surface. It could be a subtler mix of things, built up over the weeks and months since my last low point, carefully suppressed, dodged and hurdled until it became unavoidable.
When Danielle died my mother looked after me in the immediate aftermath, making sure I ate, slept, bathed. She watched me and held me. She’d just returned from a trip to China and had brought a gift for me with her: a small metal necklace-watch. It wasn’t well made but I wore it every day until the clasp broke and the lid wouldn’t close any more. I wore it until the lid fell off. I even wore it for a while after it stopped telling the time accurately. Around my neck, close to my heart, held tightly as I took deep breaths, it reminded me simply that time was passing. While the seconds crawled by, it ticked. While I couldn’t move, it turned. It showed me that the world was changing around me, that I was changing, even though I felt trapped in one long, eclipsing moment of stasis. I could look at it and feel hope that the day would come when this dark period would be behind me, that the tunnel had an end.
It wasn’t just the passage of time that let me change. It took work. It took counselling. It took the support of strong friends and caring family. I am so, so grateful for it all. When I look at my life I don’t hesitate to think of it as blessed, lucky, so goddamn fortunate I struggle to put it into words or know what to do with it.
I didn’t sleep much last night, and when finally it was time to get up and go to work, I couldn’t. I cried. Natalie held me and we cried together. A dam had burst. After the first rush of tears, the rest will trickle out over the coming hours. I will rebuild the dam. I will build it stronger. I will build a better spillway. I will tend to the refilling lake and the rivers that feed it. Again, and again. It will be a reservoir of life, of good things, both happy and sad. As it fills with droplets of sorrow, it will ripple with the echoes of her laugh.
Last weekend I was lucky enough to attend Feral Vector with Natalie. Feral is a 3-day event about games and game-adjacent things, taking place in the leafy valley village of Hebden Bridge (in Yorkshire, I think?). Over the course of the days a variety of talks and presentations are given, videogames are demoed, creative workshops are run, role-playing sessions are held, and the evenings are given over to socialising with your fellow attendees – who are, to a fault, nice as heck.
A professional wrestling match between Videogames and Art. Really.
A game of Ghost Court lasting the whole afternoon, with six or so different judges cycling in and out as cases came and went. Oh, and it took place in the town’s actual courtroom. Me and Natalie played a couple of living divorcees disputing who should take custody of our pet ghost dog.
Making new friends and catching up with old ones!
If you get the chance to go to this thing next year or another, please do. Highly recommended.
(There should be a photo here, but I did a terrible job of taking any.)
I was very lucky to be able to attend C++ On Sea this week. It’s been an absolute blast. Let’s see:
Everyone I interacted with was so interesting and pleasant.
The talks I attended were engaging and thought-provoking.
I got to meet a whole bunch of new people I’d never met before and people I’d only ever met or followed online and discover what a nice lot they all are in real life.
It wasn’t too big! (Although the venue was definitely at capacity.)
There were at least 10 other game developers there (of different stripes). I expected fewer, so I was very glad to not be alone. Fun to talk about our silly jobs.
Travel was nice and straightforward.
I ate a lot of good food.
I felt very safe and… #included… there was a strong emphasis on the Code of Conduct and being nice and inclusive and all that good stuff, and there were discussions and talks that weren’t just about purely technical issues.
I’ve never been to any other C++ conferences, but I still think I can safely say this was a very good one.
I found it very difficult to choose which talks to go to, so I ended up making snap decisions. Thankfully all the ones I didn’t go to should be up on YouTube in a few weeks. Here are some quick things about the ones I did attend:
TODO: Update these summaries with YouTube links/embeds
Kate Gregory: Keynote: Oh! The Humanity!
Kate spoke about how to recognise the different emotions we can feel in codebases, like fear in commented-out sections, or happiness in well-maintained, readable code. Well worth a watch, and not just because of what a great speaker Kate is.
Juanpe Bolivar: Postmodern Immutable Data Structures
You like to work with values. You like to write pure functions. But how do you reconcile this with a world in which copying big blocks of data around is expensive and wasteful? Well, you figure out a way for mutations of an array to share data with the original copy of the array, like a god damn wizard.
I need to re-watch this and read through the library to understand it better. I could totally use it, or at least apply the ideas, in a little personal project I was working on recently. I think it’s really cool.
Adi Shavit: What I Talk About When I Talk About Cross-Platform Development
Stuff to think about when writing libraries. I think I read a blog post about the approach outlined in this talk a while ago.
Jason Turner: Practical Performance Practices Revisited
Compilers are cool. And Jason is a very good speaker. Lots of good insights into performance pitfalls.
Patricia Aas: Deconstructing Privilege
It bums me out that some people still need to hear about the idea that everyone is coming to the table from different situations, and that some of those situations come with disadvantages, and that’s all that the idea of ‘privilege’ means!
Good talk though.
Simon Brand: How to Write Well-Behaved Value Wrappers
Rainclouds interspersed with rays of hope. The language is very complicated.
I think we probably want things like optional and variant to be in the language rather than in the standard library. They’re that fundamental. And then nobody would have to fight all the battles Simon outlines when they try to implement them as library components.
Viktor Kirilov: The Hitchhiker’s Guide to Faster Builds
Really thorough overview of different ways builds can be slowed down and, happily, how they can be sped back up. Also a brief and inconclusive talk about modules at the end.
Guy Davidson: A linear algebra library for C++23
Guy is doing great work. I hope more games people become as engaged with the standardisation process as he is. C++ could really do with an out-the-box way to talk about vectors, matrices, and the library he’s working on seems like a really good approach.
Clare Macrae: Quickly Testing Legacy Code
I found the insights in this talk very interesting but I’ve been struggling to think about how to apply them to my world. What hope is there for we whose applications are totally non-deterministic in so many ways? Woe is us.
Matt Godbolt: Keynote: What Everyone Should Know About How Amazing Compilers Are
Wow. Compilers are COOL.
I learned so much assembly in this talk. Admittedly I know very little assembly and keep forgetting what I learn, but Matt’s enthusiasm for investigating the low-level stuff is infectious. And he’s excellent at explaining.
I am extremely grateful to those who made it possible for me to come, especially Simon, and Philip for organising such a great event. I really hope I get to see the people I met again sometime soon.
I come away feeling refreshed, energised, inspired about the language, the community, and where we’re headed. A much-needed morale boost.
They represent my second, much more successful attempt at the technique I said I wanted to get the hang of in my hobby goals post.
First, I primed them black using my airbrush. Then I airbrushed a very light grey from above. Then I left them in a drawer for a month or so. When I was finally ready to paint them, I started by completing the ‘value sketch’. This just meant going in with black paint in recesses the airbrush had missed, while bringing up the brightness on areas like the face with white paint. I also did all my edge highlighting in white at this stage – it’s really nice to be able to do this step earlier on, when the cost of mistakes is much lower. At the end of all this I had a greyscale representation of the final result.
Then I began glazing, that is, applying paint that has been thinned down to the extent that it only tints the layer beneath. In my previous attempts at glazing I used Citadel Lahmia Medium, but this time I tried out Vallejo Glaze Medium. I was able to do this for most of the models apart from the skin and metal parts. Both required a thicker application, and I had trouble mixing the medium with these paints without them getting runny. Finally I needed to apply washes and highlights to these areas the old-fashioned way for them to look right.
Having done these I strongly want to do more minis this way. It’s so fast and freeing. No painstaking application of basecoats, no time-consuming layering process. I estimate each model took little more than an hour of painting by hand. Amazing.
Also painted this weekend: a tracker and her dog! I’d zenithal primed the dog and it’s quite small and simple, so it went quickly, but the tracker longer. I’m really pleased with how my colour choices turned out, especially the lovely warm crimson-shaded leather parts. (Skrag Brown, shaded with Carroburg Crimson.)
The North Star Frostgrave range is fantastic. Diverse and characterful, even the wonkier sculpts have a certain charm. And it keeps getting better - there’s a plastic Wizards kit on the way :D
Other than these I’ve painted a few scraps of terrain, made a start on the Chosen Axes, magnetized some bases, organised my bits and pieces, and invested in a spraying booth for my airbrush. 2019 is off to a flying start.