Happy Cyber Monday! I love that that’s a thing that makes sense to say in 2015. Feels like we’re living in some tacky mid-’90s vision of the future.
It’s been five weeks since my last update, and it’s looking like it’ll be a while longer before I can resume any sort of regular development, but I’ve done enough bits and pieces of actual work in between changing diapers, pounding energy drinks, and binge-watching The X-Files to warrant an interim update.
I’m dying to get back to real full-time development, but this break has forced some breathing room into my habits, and I’ve been spending far more time than usual just thinking about development and development philosophies, especially as they pertain to my most immediate Gunmetal Arcadia Zero tasks. I’m trying to be more conscious of and consistent about asking deliberate questions of all my design choices, questions like “How does this serve the narrative?” and “How does this serve the gameplay?”
In trying to answer these, at least on paper, I’ve begun putting together some cheat sheets to keep me on the right path throughout the process of developing art for tilesets, constructing coherent scenes from these tiles, and constructing spaces that are conducive to the core gameplay of the Gunmetal Arcadia games.
I’ve always done doodles on paper for every game I’ve ever made, so it shouldn’t be surprising that having some time off has led to a number of sketches of ideas for enemies and environments.
These in turn fed into the design for some new tilesets I’ve been stubbing out. (If you’ve been following my Twitter feed, these probably won’t be new to you, but it’s the first time they’ve appeared on the blog, so hey.)
Although my intent is still to build my levels first as grayboxes abstract of any actual environment art, I also want to be proactive in ensuring that my tilesets will lend themselves well to composing coherent scenes and identifying setpieces, and to that end, I’ve been doing some mockups, showing how these tiles might look once they’ve been palettized and assembled.
To go off on a short tangent, when I posted this on Twitter, I got a reply suggesting I blur the reflection on the sides of the screen. I had considered this before but rejected had it for being too expensive, as I imagined it would involve an additional render target or two and would function along the same lines as the fullscreen bloom blurring pass. On this particular day, however, an idea for a cheaper implementation came to me. I prototyped it quickly, then realized I could dress it up even further by scaling the blur radius by distance.
These changes are visible in this detail of the scene above (brightened several times to improve visibility). On the left is the reflection as it existed before (and roughly comparable to what shipped in Super Win the Game), and on the right is the reflection with blurring applied. You can see the blur radius gets larger on the right side of the image, to the point that Vireo’s reflection is little more than a dark orange smudge. It’s a subtle effect, especially at its true brightness, but it looks fantastic in motion, and it’s actually no more expensive than the old version, thanks to some discriminating alterations. Notably, the new version no longer applies the shadow mask overlay to the reflected image. This change helps increase the perception of blurriness and frees up enough instructions for the additional textures samples required for the blur.
I’m finding music to be the easiest thing to fit into my current schedule. I previewed a new tune in one of my last few blogs before I went on break, and since then, I’ve begun working on eighteen more ideas. These aren’t all fully realized pieces, and most of them never will be, but I’ll clearly have no shortage of material to choose from when it comes time to finalize the soundtrack for Zero. Here are a few samples:
This one was an experiment in overlapping two identical pulse waves to create a subtle reverb effect. The lead melody that enters at 0:19 is sort of a melange of a few classic tunes.
One of my goals in writing music for Gunmetal Arcadia is to get out of my comfort zone and try weird things that I wouldn’t necessarily expect to work. This is one of those, and I’m not yet sure whether it works or not.
I’ve made a handful of other changes to Gunmetal Arcadia over the last few weeks, things like improving audio perf, adding an on-screen stopwatch, and adjusting my editor layout to fit my laptop, but I’ve already covered the fun stuff. I’ve also been poking at a few dormant side projects as I’ve had the chance, so I’ll rapid fire those real quick.
1. Way way back around Christmas 2007, I started working on a scripting language for my engine, roughly informed by the one I had written for a Guildhall programming class. It never really got off the ground, mostly because I never had a strong use case for it. Recently, though, I’ve been thinking about trying to replace some of my wordy, error-prone XML “scripting” with a real C-like language. This is definitely low priority, “wouldn’t it be cool if” sort of stuff, but since I had some time, I took another look at it and realized it was closer to a functional demo than I had realized. After dinking around with it for a bit, I got a demo with recursive function calls working to calculate and output the Fibonacci sequence. That’s still a long way from being useful for any real-world scenario, but it’s something.
2. I spent a day or two trying to implement my own regex solver on a lark. I didn’t finish it. Womp womp.
3. A few years back, I took a stab at rolling my own task tracking app when I couldn’t find one that fit my needs. I got a prototype off the ground, and though it was functional from a technical perspective, it didn’t feel usable for a number of reasons, and I eventually abandoned it. But the idea stuck around, as did the need. For the last year or so, I’ve done most of my task and bug tracking in emails to myself or in Google Docs, and recently, I’ve started to feel like Gunmetal has outgrown those. It needs a real tracking solution, but I still don’t like most of what’s out there. I’m familiar with JIRA from my Gearbox days, and I considered running my own JIRA server, but there were some hurdles in getting it set up that I didn’t have the patience to resolve, and it kind of feels like overkill for one user.
So of course, I had to roll my own again. But this time, I was starting with the assumption that this would be a locally-hosted service that only had to function correctly on my browser of choice and would have no concept of multiple users, authentication, permissions, and so on. This would be a tool for one user to track their own solo project work and nothing else. I also knew I would need to prioritize look and feel issues if I wanted to be something I’d actually feel compelled to use, so I’ve been drawing inspiration from the sites I tend to frequent. I like the immediacy of Google Docs; there’s no format concept of committing a change to a document; you just type on the page and it gets saved under the hood. So I copied that. I knew I’d need to prioritize issues, but I didn’t want to restrict myself to an arbitrary set of priorities (e.g., P1 – P5), so I chose to use an upvote/downvote interface similar to what you’d see on social networking sites. I’ve spent maybe two weeks on this, off and on, and it’s come together into a pretty nice little demo. You can create issues, edit their text, prioritize them, close and open them, and retrieve a sorted list of issues, loading asynchronously to fill the page as you scroll down.
I’m hoping to be back to a regular development + blogging + vlogging schedule by mid-January, but if work done in the meantime warrants another interim update, I’ll try to get that done when I have the chance. Stay tuned!