Super short update today, as I’m right in the middle of an exciting tools-related task, and I don’t want to lose momentum on it. Also this week has largely been spent on bug fixes, and those are difficult to write about in any sort of compelling manner except when they’re exceedingly complex to isolate and resolve.

I’ve been working on bringing a few features over from Super Win, including locked doors and pickups. Coins, bombs, ammo, keys, and health can now be collected in the field and are represented on the HUD. The next step will be to drop these from enemies and environmental objects (think Castlevania torches and sconces), and then after that, I’ll probably start implementing NPCs and shops. At some point, factions should start coming into the picture, which is exciting since the faction tug-of-war has been a core promise of Gunmetal since its inception.


I made a small change to the audio synthesizer to reduce pops when notes are played by introducing a brief (1/200 sec.) fade-in and fade-out time on volume changes. This is most noticeable on headphones. A comparison is available here:

In preparation for launching a public game feel test build sometime in the near future, I built Gunmetal for Mac and Linux a few days ago for the first time in months. Fortunately, nothing too major had changed or broken; I ran into a case where my GL implementation was failing to set blend modes correctly, but it was an easy fix.

Despite my comments last week on not worrying about scheduling, I’ve been curious where exactly I spend most of my development time — logging hours and estimating tasks have never been a part of my workflow, so by and large, I consider any schedule I could write to be inaccurate by an order of magnitude and wholly worthless. But if I can throw science at that problem, it gets way more interesting. I’ve been tracking my productivity as a function of SVN commits over time since launching Minor Key Games, but I’ve never had any sort of an accurate metric for how long an individual task might take. Starting today, I’m going to be spending some time developing tools to hopefully give me a clearer picture of my moment-to-moment development habits.


I’ve mostly spent this week tuning and fixing bugs in the features that I discussed last week, so rather than go into detail about what I’ve been working on, I thought I’d share some of my ideas for Gunmetal Arcadia‘s road to launch.

As I discussed in that game’s postmortem, Super Win was not the success I’d hoped it would be. A few months later, it looks like it might not be a complete failure either, but at best, it’s a slower burn than is sustainable. I theorized a bit in that article why that might be, and I’m taking steps on Gunmetal to make sure this game performs better. Keeping this devlog is the first of those; implicit in that is that I’m also not being so wary of showing the game in early or incomplete states. Between wanting to show representative “final” Super Win content very early (e.g., for the announcement and teaser trailer barely two months after conception) and not wanting to show too much of “the cool stuff” like the dream sequences and final level, I found myself in a state of constantly crunching to meet deadlines that did little to benefit the game’s visibility in the long run.

For Gunmetal, I’m doing an about-face on that attitude. My modus operandi this time has been to show everything, regardless of how broken and unpolished it is, hence all the placeholder art stolen from Zelda 2 and Faxanadu I’ve been putting on display in this devlog. (Happy news: as of today, I’ve replaced all “borrowed” art with original content. Still placeholder, but not so litigious.)


The next step is to start putting the game in players’ hands as early as possible. To that end, I’ll be uploading a short demo soon which will serve to illustrate the current state of core game mechanics. My intent with this demo is to collect feedback related to the feel of these core systems. Does the player move too fast or too slow? Does jumping feel too floaty or too heavy? Does combat feel solid and tactile or papery and insubstantial? Nailing the game feel is absolutely crucial, perhaps moreso than any other single aspect of the gameplay experience, and the longer I wait before gathering and reacting to this feedback, the harder it will be to make changes without inducing unwanted side effects on other parts of the game.

If this is successful, I’d like to continue making these sorts of iterative drops as more high-level systems start coming online. My expectation is that each of these builds would focus on some subsection of the game (e.g., randomized levels, item synergies, and so on), eventually culminating in a more complete, cohesive vertical slice experience.

Looking further down the road, once the game is fully playable and in a position to be polished and tuned, I could turn my attention to pre-release plans. I’ve been debating whether it makes sense to put Gunmetal into Early Access on Steam. My gut reaction to Early Access in the past has been an immediate NUH-UH, but recently I’ve been feeling like it might make sense for Gunmetal due to its roguelike aspects. It will be a while before I can fully commit to that plan; whether it makes sense will depend on a number of factors that won’t be fully visible for some time, and I would want to be careful about properly messaging what that version of the game was (e.g., a nearly complete game, not a partially functional tech demo) and what it wasn’t (e.g., a blank slate awaiting any and all input), but I think it could give me the opportunity to “soft launch” the game in a form that were technically complete and theoretically ready for release but with some extra buffer time built in to respond more aggressively to player feedback, bug reports, and suggestions.

In the meantime, I expect I will be showing Gunmetal Arcadia in some form at events this summer.  I took a playable demo of Super Win to several events last year, including RTX, SGC, and QuakeCon. I’m planning to attend some of these again, and possibly others as well. (I’ll announce dates as soon as anything is confirmed.) Whether I bring a playable build of Gunmetal depends largely on what state the game is in at the time. The worst case scenario is that it’s simply not ready to show and I just demo Super Win again (and maybe also Neon Struct), but at the very least, I should be able to bring a trailer and some promotional materials. I have the advantage this year of being able to fall back on that option, meaning I won’t have to crunch to complete a demo, an experience that I felt was severely harmful to Super Win. I spent the entire dev cycle on that game worrying about development time and crunching towards milestones only to land ahead of schedule and unsure of what to do next. This time I’m just not worrying about that, or really anything else. I know how to make games. I know I work fast. I’m not going to beat myself up over it.


I’m back! Well technically, I was back from my honeymoon last Monday, but I had already scheduled that post in advance, so this is the first new material I’ve written since getting married and traipsing around Europe.

I chose to spend this week knocking out a few tasks that had been looming overhead for a while, the last few things that need to happen before I feel like the complete set of immediate player actions exists in some form. The first of these was to alter the size of the player’s bounding box in response to crouching and standing. Historically, my entities have had one primary collision primitive that never changes in size or relative location, which is why holding the down button in Super Win just makes the character tilt his head down rather than crouching. For Gunmetal, I wanted to have a proper crouch that could be used to avoid enemy shots, and that meant tackling this issue.


My editor now has a list of primitives which may be associated with animation sequences. At runtime, the game looks for changes to this setting whenever the current topmost animation sequence changes (as I mentioned in a previous blog, multiple prioritized sequences may be playing at once, with the highest priority sequence being the one seen on the screen) and toggles the appropriate collision primitive for that sequence.


There are still a few lingering issues left to solve here. For instance, I’m not doing any checks to see whether the new collision primitive is fully encompassed by the previous one; if it’s not, we run the risk of intersecting solid geometry and falling out of the world. (Consider the case of standing up after being crouched beneath a low ceiling. In this case, the full-size standing collision primitive would intersect the ceiling, and, in the absence of any proper handling, we could walk or jump through those blocks.) But in the general case, at least, this is working correctly, and I’ve been able to prove that crouching under projectiles will function as intended.

The next major feature I worked on this week is an extension of the palette swapping feature I implemented for sprites a couple months ago. I can now apply this same process to every 8×8 tile of each tileset in order to palettize environments. This is another feature that I contemplated for Super Win but rejected due to time constraints. For Gunmetal, this should be a huge win in terms of coaxing a variety of aesthetics from a smaller number of tilesets.


On the game side, this works a little differently than sprite recoloring. Each sprite is rendered in a separate draw call, so I can simply set each of the three palette colors as shader parameters prior to drawing. By contrast, each layer of the environment is drawn all at once in a single draw call, which means all the colors for each 8×8 tile must be specified somehow. My solution is to aggregate all the palettes into a texture atlas (shown below in PIX) and then index into this texture with a new texture coordinate channel added to the environment’s vertex buffer.


In fact, with a little more work, this pattern could be generalized to encompass sprite rendering as well, such that I could draw all the on-screen sprites in a single draw call. This would depend on packing every sprites’ sheet into another texture atlas and maintaining a fixed-size dynamic vertex buffer whose vertices could be allocated to each sprite’s quad, in much the same way I handle  font rendering. Sprite rendering isn’t a bottleneck at the moment, however, so I probably won’t go down this road, but it’s certainly interesting to think about.

I did some minimal work on Saturday to faciliate vertical attacks while airborne, a la the downthrust and jump thrust attacks from Zelda 2 (or the pogo attack from Ducktales, or from Shovel Knight, or whatever). I’m not 100% sure this feature will make the cut — this depends largely on whether it feels necessary once I have more representative combat spaces blocked out — and it will need some further attention to make it feel good, but I wanted to hack it in there in some form, as it’s one of the last immediate player actions I’ve been considering.


Finally, I’ve started implementing a HUD. I don’t know for sure yet what information I’ll want here, in part because I haven’t yet decided how some game systems will work (e.g., will secondary weapons consume ammunition?), but since I’ve been working on combat recently, it’s important to at least have health represented in some fashion. I’m toying with the idea of displaying enemy names and health on the HUD, which isn’t necessarily in keeping with the style of the classic games I’m imitating, but I think it could be nice for bosses at the very least. Theoretically, a minimap might be a better use of that space, although depending on the size and topography of the levels, a minimap might not be necessary for this game.


I’m reaching an exciting point where the individual systems I’ve been working on are starting to coalesce into something that resembles a game. I suspect sometime within the next few weeks, I’ll be able to publish a small demo as a means of collecting feedback on the feel of core mechanics, the first step in a plan to involve players in the development of Gunmetal Arcadia all the way to launch. I’ll be talking more about this plan and a roadmap for the future next week, so stay tuned!

Implicit Narrative

There’s a question that comes up all the time when one is presenting a new game, and it can be a surprisingly difficult one to answer: “What’s this game about?” The reason this can be such a difficult question is because it is often implicitly asking, “What is this game’s story about?” And the answer to that question is almost completely orthogonal to what I find most exciting about games.


Super Mario Bros. doesn’t have a story — when I say “story,” I’m referring to an explicit narrative, what we might think of as “plot.” Super Mario Bros. has a premise: “King Koopa has kidnapped Princess Toadstool and Mario has to save her.” But what that game is really about at any given moment is running, jumping, stomping on enemies, and avoiding hazards. Yes, the premise provides some motivation and context for the platforming action, but I’d be hard-pressed to say the game is really about its premise.

What we know of the story in Super Mario Bros., we know because we see it while playing. We know that King Koopa has imprisoned others besides the princess because we encounter them at the end of each castle. If we dig deep enough, we even find that the “King Koopas” encountered at the end of each castle are decoys, although this is never explicitly stated in the game itself.

Classic games often employ this sort of implicit narrative. Perhaps this is because gaming originated as something closer to a sport (think Pong), or perhaps it’s because the fidelity to convey more intricate narrative simply wasn’t available to early developers. Certainly the NES had its fair share of narrative-driven RPGs, and the SNES even more so, but it wasn’t until the CD-ROM era, when characters could be fully voiced, that I thnk we started seeing a trend towards the majority of games having an explicit narrative.

To be clear, I’m not saying either one of these is better than the other, but as both a gamer and a developer, the elements of games that I value the most tend to be external to explicit narrative. There are always exceptions, and I think some of my favorite moments in gaming have been when the narrative and gameplay integrate seamlessly, as in Portal‘s false ending. But if I had to pick a side, it would always be gameplay over narrative. This is perhaps obvious in the context of the Win the Game titles, particularly the first, in which only the names of rooms and occasional messages on the walls provide any sort of establishing context. I tried to inject a little bit of explicit narrative in Super Win because I felt like I had to, but I’ll be the first to admit that I’m neither interested in nor terribly capable of writing interesting characters or events.


Let’s look at another example. Super Metroid has a premise: “Ridley has stolen the last Metroid and taken it back to Zebes.” That is, if memory serves, the only explicit context provided for the adventure that follows. When we encounter the remains of Mother Brain’s glass chamber, we understand very clearly that this is the same location as in the original Metroid, some years later — a great example of mise-en-something storytelling, probably. When we reach Tourian and see Metroids again, we understand that Ridley has been breeding or cloning these creatures, and we encounter one of the game’s few narrative moments, albeit one that is told without words. The baby Metroid, now mutated to monstrous size, recognizes Samus as its mother and spares her life, returning again to aid her in the final battle.


I’ll mention one last example, because it’s apparently the only game I play anymore and one that is highly relevant to Gunmetal Arcadia. The Binding of Isaac has a premise: “Isaac is hiding in the basement to escape his fanatical mother.” As in many classic games from which Isaac clearly drew influence, our protagonist does not speak, nor do we encounter any friendly speaking NPCs to give context to the environment. But where Isaac does a fantastic job of establishing its lore is in the design of its items. It would be easy to simply name items after their functional role: “damage up,” “health up,” etc. But in abstracting items from their functional use, Isaac crafts a richer and more interesting world. Isaac uses tears as a projectile weapon, so many weapon upgrades are things that might make him cry, from toothpicks to keep his eyes pried open to a torn photograph of what we may assume was his family prior to some separation. The use of pills as unidentified items (think potions in classic Rogue-likes) lends some flavor in its own right, but we when find the “Mom’s Purse” item, and it’s full of pills, that tells us something about her character as well. Isaac‘s lore is often grim, offputting, and offensive, but it’s revealed in a way that is smart and effective, and I think that’s worth celebrating.


Gunmetal Arcadia has a premise: “Arcadia is being invaded by aliens, and we have to take the fight back to them.” This is just about as barebones of a premise as it gets, and it’s for that reason I find it difficult to say what the game is about. To me, it’s about 2D hack-and-slash combat in procedurally generated environments. I understand the importance of a strong premise as an emotional hook that potential players can latch on to, but I’m far more interested in building a world and developing a lore organically through the things the player encounters than I am in plotting out a narrative arc or writing robust characters.

That’s not to say I have zero vision for Gunmetal‘s world. There are some core underpinnings on which I hope to build a tangible in-game lore. The premise involves the player’s homeland being attacked by alien invaders, and my intent is that over the course of a run, the player will venture out into the wild and ultimately destroy the alien menace at its core. (And then maybe they’ll return home, just to put a nice pretty bow on the obvious hero’s journey.) But then we have to ask, what is the world of Gunmetal Arcadia about when it’s not at war? And that’s where I’m hoping to establish an interesting implicit narrative through the use of items, locations, NPCs, and so on. The world is divided into rough halves of those who favor technology and those who favor magic. These factions are not in direct conflict with each other, or at least not right at this time, but they have a tense and tenuous balance. The ongoing war provides a unifying catalyst for those who can put their differences aside, while the most zealous among each group see it as reason to cling even more rigidly to their tenets. (Putting it into writing, I realize that perhaps this sounds like a fairly on-the-nose metaphor for a real-world science-vs-religion debate, so to be clear, that’s not my intent, nor am I interested in making those kinds of statements in a video game.) What’s exciting to me about this concept is the world it will allow me to build, one in which steampunk tanks piloted by heavily armored marines can exist alongside elves and pixies and spellcasters. As I may have mentioned before, Faxanadu is my primary point of reference for Gunmetal‘s art style, and I think that sort of dark fantasy (or at least as close to dark fantasy as the NES could muster) will play well with the lore I want to build.

So, what is Gunmetal Arcadia about? Take your pick.