My ten year old 2021 predictions revisited

Back in 2011 I wrote a blog post imagining what game dev might look like in 10 years. I figured I’d take a look at my predictions and see how I did.

1. Kickstarter allows refunds: WRONG!

I’d imagined after a coming spate of crowdfunding failures, on order to maintain trust, Kickstarter would be forced to allow backers to vote for refunds.

Instead people did lose trust in Kickstarter for video games, but Kickstarter didn’t do anything about it. Still works great for board game print runs though!

2. Game engines have deterministic session playback: WRONG!

Some people have implemented this, and it’s really useful, but it’s not the industry standard I thought it’d become. Great swathes on the industry are on Unity and Unreal, and neither seem to especially value determinism.

3. QA can save off VM containers of crashes: WRONG!

What’s better than a stack dump? The whole goddamn machine. While there’s lots of containerisation off in business IT, there’s not much in games. There are some mobile compatibility testing operations that have device farms, but even then you get remote access to real hardware rather than a VM image of the problematic device.

4. Lots of people work remotely: RIGHT!

I wish it could’ve been under better circumstances, but I kinda nailed that one.

5. High DPI displays used to show commit text in a margin: WRONG!

I don’t know what I was thinking. That sounds horrific. Hovering over the blame margin and getting the log in a tooltip works great!

6. Major code subsystems bought second hand: SORTA!

I got the mechanism wrong: when a sizeable game project fails, there are no auctions where they hock all the assets. But every year the asset stores grow, and I imagine a lot of that stuff is from dead projects, so the reuse I envisioned is happening.

7. Bodice rippers become a major game genre: WRONG!

Nope, could still happen though. Maybe next decade?

Score: 1.5 / 7

Dismal! Lotta whizbang technology predictions in here. I think I looked back at the period from 2001 to 2011 and saw the technology go from UE1 and id engines to UE3 and Unity 3, and expected a similar leap.

I guess we’ve had a similar leap for graphics, but I expected the industry was also going to have to become more efficient at debugging. This turned out not to be the case! I suppose on the big projects where you might attempt these things, the big spend is on art instead.

Share Comment Forum

How to read Windows 10 event logs using the Recovery Disk

Can’t get to the Event Viewer because the machine won’t boot?

Short answer:

wevtutil qe <logfile> /lf:true /f:text /rd:true | more

This command will query (“qe”) the logs from a logfile (“lf:true”) in text format (“f:text”) in reverse chronological order (“rd:true”) and pipe them to ‘more’ so they don’t all scroll off the screen. Hit Q to exit more.

The log files are in C:\Windows\System32\winevt\Logs, except in your case it won’t be C: drive because loading the recovery image will have jumbled up the drive letters. D: or E: perhaps?

For diagnostic purposes, the most interesting log files are:

  • System.evtx
  • Application.evtx
  • Setup.evtx

Fun things I discovered about Windows logging:

  • Instead of being plain text, evtx is a binary format that stores the arguments to a format string, but not the format string itself.
  • The string tables available vary between Windows installs.
  • The evtx file doesn’t list the names or revisions of the string tables it refers to.
  • If you read logs from your broken PC on a working PC you may see “N/A” entries where it doesn’t have the same set of string tables.
  • This is fine. This is normal. 95% market share.

Share Comment Forum

Atelier Sophie

I played Atelier Sophie. It’s a cute game where you play a young girl learning alchemy. Witch Simulator 2015, more or less. It’s the first game from the Atelier series I’ve played. A certain Twitter superstar always talks about them in glowing terms, so I figured I should give it a go.

Atelier Sophie is:

  • 20%: a meaty crafting system. So you’re combining your items and the items have modifiers that carry through to the output, but there’s a minigame that determines the quality of that output.
    • In the minigame, you collect values out of grid cells by placing different shapes over the top of them.
    • When you place a shape, all the values around its perimeter increment.
    • If you overlap existing shapes, they pop loose and you lose the value you collected. On the other hand the perimeter increments remain.
  • 80%: the most formulaic JRPG imaginable. Visualise a JRPG in your head. OK. Not quite, it has an offensive/defensive stance mode and the attack menu is a pie menu not a text menu. Uh… yup, you got it. It’s exactly that.

It’s like a dog ate the second half of the GDD so they replaced it with a post-it note that reads “JRPG?” Why do people do this?

  • Is there a tax incentive for orphan protagonists in Japan?
  • Is there a long running dare about who can make a game that you can play for the longest just by pressing ‘A’?
  • Does the editor of Famitsu have a notorious fetish for slimes?

Share Comment Forum

Controls Philosophy

Share Comment Forum

Renovating my site with Hugo

I finally carved out some time to finish redesigning my site. I’ve moved it off Wordpress, now it’s a static site generated by the Hugo site generator. Here are my experiences with it:

Hugo Pros:

  • Easy to install. It is a command line tool, mind you.
  • It’s quite general. Seems to impose fewer blog-shaped conventions than Wordpress.
  • The auto reloader is fast and works well. Remember to turn off caching in developer tools though, because otherwise you’re not gonna see CSS changes.
  • Even a full rebuild takes under a couple of seconds for me.
  • Although it says posts should be in Markdown, you can totally feed it Wordpress’s weird whitespace sensitive HTML and it basically works fine.

Hugo Cons:

  • The expression language inside the templates is kinda odd. Prefix notation for everything. Scoping has some surprises.
  • I’m not seeing an ease-of-use dividend from posts being Markdown instead of template HTML. Switching between two dialects of not-quite-HTML is confusing.
  • You can define functions for use in templates (“partials”), and define them in Markdown content (“shortcodes”), but they’re different kinds of functions and aren’t interchangeable.
  • Putting stuff below the fold via Read More buttons is a mess. There’s a Summary property for the portion before <!–more–>, but if the fold tag is absent, it produces a yucky auto-generated summary which has all the formatting stripped. Even the paragraph breaks! And there’s no way to tell if Summary is garbage or not, so it’s simply unsafe to use.
  • Viewing content by tag: built into Hugo.
    Viewing content by type: built into Hugo.
    Viewing content by year: theme surgery.
  • I started from a rather maximalist theme called Icarus, and that was probably a mistake. It would’ve been an easier learning experience adding stuff to a minimalist theme.
  • Sometimes when theme authors say “minimalist”, they just mean lots of whitespace. Check the network tab of developer tools and see what’s really going down before picking a theme.
  • The documentation encourages you to use file-by-file overrides to customise a theme. This quickly gets very confusing if you’re doing anything substantial. I say just gut the thing. Merging upgrades manually seems easier than continually dealing with brittle partial directories of overrides. Hugo is already a mess of union filesystems before you start putting overrides on the top of that.

Misc. Awkwardness:

  • The Wordpress-to-Hugo exporter is a Wordpress plugin. If you’re using, it’s on you to write a convertor script that processes the export XML.
  • I miss having a UI for recategorising posts en masse.
  • Disqus sucks. It’s hard to find an alternative though. Not Hugo’s fault, but something to bear in mind if you’re going static.

Would I recommend it? If you find a theme that does exactly what you want, it’s OK. If you have to customise, you’re probably going to lose a couple of weeks poking around byzantine nonsense.

I can’t shake the feeling that somewhere there’s a team working on an Offline Site Generator for regular civilians. Not just a word processor with HTML export, but a whole offline CMS. I suspect once they release, the Hugos, Jekylls and Octopresses of the world will look curiously old fashioned.

Share Comment Forum

My new game: Glittermitten Grove! OUT NOW

Here’s what I’ve been working on for the past 18 months with artist Paul Blackford and composer Ryan Ike.

Glittermitten Grove is a game where you build your perfect faerie village in the treetops of an ever-growing forest. Every plant competes with each other for the sunlight it needs to grow and there are a range of unusual species for you to discover., if you wanna tell your friends. You can get it on Steam:

Glittermitten Grove

Share Comment Forum

Looking for a 2D artist

Edit: The position has been filled!

I’m looking for a 2D artist for characters, environments and UI. This is for game assets, although there will be a bit of concept work around characters, animals and buildings.


  • Intermediate-level Photoshop or GIMP knowledge. Or some other program that spits out PSDs.
  • Characters with Western-style animation influences.
  • Flair with nature scenes and foliage.
Extra points for:
  • A lush shading style for backgrounds.
  • Based in Wellington.
This will be a work-for-hire contract gig over the course of several months starting November-ish (I’m flexible on the timing. Let’s chat).

Portfolios to:

Share Comment Forum

Pinballesque v0.05

I’ve put up a new version of pinballesque.

ml2_thumbNew stuff:

  • The game now has ramps, as I mentioned in the last post. Still have a few sorting issues with the visuals.
  • I’ve redone the multi-level table, which is the one to play if you want to try out the ramps. It’s lit and rendered now, and this time in a glowy, emissive style rather than shiny look I used in table 1.
  • I’ve made some colours inherently more valuable than others (Later in the rainbow is higher). This means the top half should be much higher scoring than the lower half. It also gives me the capability to give higher rewards for harder shots. Unfortunately it adds another multiplier to explain and at present the UI isn’t doing a good job of explaining how it arrives at the score. I’ve also made some internal preparations for the goal system.
  • I’m prompting to user to hit a go button before launching the ball. My hope is that it gives people a chance to familiarise themselves with the flipper controls before being under pressure to keep the ball in play.
  • I’ve tweaked the trajectory hint visuals so it’s clearer that you’re seeing an angle range available at that flipper position, and also the angle you’ll get if you flip right now.

Share Comment Forum

Adventures in Dwarf Fortress Adventure Mode v0.40

The last time I played Dwarf Fortress was in 2006, and I was playing fortress mode, so this is a learning experience for me. Some selected highlights:

Rolling a character

Should I put points into ‘Misc. Object User’? Sounds pretty useful.

I decided instead to put all my skill points into ‘Biting’ instead. My character is a level 14 Biter, or a ‘Professional Biter.’ Hopefully this means I’ll get paid to bite.

Starting out

My character description says I have very short ears, which is weird, because I opted to be an elf.

Reviewing the keybindings:

[o] - Show strongest odor.

[I] - Interact with an object in an advanced way.

[W] - Weather. (Note: unspecified if this is a noun or a verb)

I notice that the Get Item command gives you the option to start a fire. Useful!

The adventure mode quickstart guide:

If you are in a private house, you must first ask the owner for permission before you can sleep. If a commoner is blocking you from entering his home, use the [s] key to crawl under his legs, and then the same key to stand back up.


In the starting location there’s another character. I say hello to them. Crash to desktop. This is v0.40.01, the first release after 2 years of feature development, and no QA.

This time I skip the greeting and get this menu:

  • Bring up a specific incident or rumor
    • Spread rumor of Sunkenbear the Misty Root’s presence in Glacialpelts the Sea of Panting.
    • Spread rumor of Migrur Tundrabeach the Tufted Dunes’s presence in Dunesclods.
  • Inquire about any troubles
  • Ask for directions
  • Ask about the local ruler
  • Trade
  • Exchange, give or take personal items
  • Ask favor, place request, make demand or issue order
  • Ask listener to join you
  • Claim this site for yourself
  • Ask about this site’s neighbours and trade partners
  • Ask about the surrounding area
  • Comment on weather
  • Comment on natural surroundings
  • Accuse listener of being a night creature
  • Inquire about listener’s profession
  • Ask about listener’s family
  • Brag about your past violent acts
  • Say goodbye
I have no idea what the procedural rumours relate to. Did I walk past these people?

Me: (Ask about the surrounding area)

Her: “Ask me when I’ve returned to my home!”

Me: (Tell me about the local ruler)

Her: “The Firey Poet rules Lordbear. I am chieftainess. We are in the right in all matters.”

Me: “Are there patrols or guards?”

Her: “You sound like a troublemaker.”

I try the trade option but apparently that’s only for shopkeepers. Exchange brings up a bartering interface. I successfully trade loincloths with the chieftainess.

Me: (Claim this site for myself) “I’m in charge of Lordbear now.”

Her: “This must be stopped by any means at our disposal.”

Her: “Just now, (player character) claimed Lordbear in the name of (player character)”

I get a menu allowing me to react to this startling news:

  • Ask for the whereabouts of (player character)
  • Ask for directions to Lordbear
  • State opinion that it must be stopped with violent force
  • State opinion that it is not your problem
  • State opinion that it was inevitable
  • State opinion that it is terrifying
  • State opinion that you don’t know anything about it
  • State that it is for the best
  • State that you don’t care
  • State opinion that it is sad but not unexpected
  • State opinion that it is terrible
  • State opinion that it is terrific
  • Change the subject
I ask for more information about myself, in the hope that maybe it’ll lead to a self-assassination quest. It doesn’t have any effect. Nor does asking her to join me on my adventures or accept me as her lord. I accuse her of being a night creature but she just tells me to calm down. At no point does she turn hostile.


Having exhausted the charms of the conversation system, I set off into the wilderness. I meet a flock of peacocks that are mingling with a herd of stray cats. Lots of messages appear in the console. The stray cats affectionately head-bump the peacocks. The peacocks eat bugs. I am informed of this bug by bug.

I decide that I need some food and find the attack command. I attack a peacock and get a menu where I choose the target body part, the attack method and the manner of attack (fast, precise, multi-attack…). I bite the peacock in the belly. “You latch on firmly.” I attack again, and this time have an extra option: “Wrestle using upper front teeth.” “You bit the stray blue peacock in the guts from the side, tearing it. The stray blue peacock looks sick!” I bite the peacock some more, and manage to get multiple simultaneous wrestling holds using my upper front teeth, my lower front teeth and my upper right front teeth.

Before I can press my molars into action, the peacock dies of blood loss. I pick up the corpse and check my inventory. Sure enough the peacock corpse is there, along with quantities of peacock blood contained inside each item of clothing I’m wearing. The peacock guts are still in my clenched teeth. I try to interact with them in an advanced way.

Share Comment Forum

Progress Update

What I've been up to lately:

  • I've been pitching a concept for a tree-top city builder game, that's too large for me to self fund.
  • I shifted house.
  • I added ramps to Pinballesque. This turned out to be circuitous. I figured that moving from a 2D to a 3D physics engine would be the simplest way to achieve it, and might get me more realism.
  • After the reimplementation I wasn't very impressed with PhysX. It had trouble with really fast rotation which I ended hacking by making the ball slide instead of roll (And yes, I did crank the max angular velocity). The continuous collision detection in the version I was using wasn't reliable, which is bad news for something as fast as a pinball. Initially I tried to implement habitrails as extruded tubes of collision, but a mess of thin collision geo seemed like a far worse solution that just hacking it with a spline.
  • After I wrote my custom physics for rolling along a spline, I went back to Box2D. Now I have a 2D table surface with 3D ramps and rails, and rail visuals courtesy of Curvy. It works well.

I'll have a new build up after I've built a table that does a decent job of showing off ramps.

Share Comment Forum