Maps and Ghosts

It’s been another week with a minimum of work on Gunmetal Arcadia, so today I’ll be covering the ongoing updates to Super Win the Game in greater depth.

xan_valk_update_1

For starters, I’ve added a highly-requested mapping feature to Super Win the Game. As in most Metroidvania titles, the map is automatically filled in by traversing the environment. Regions containing gems that have not yet been collected will be flagged on the map with a red dot. A minimap sits in the corner at all times and can be expanded to full size with the press of a button.

Initially, my hope was that I could automatically generate the map images from game data. I even got as far as prototyping an algorithm that would do a flood fill through the world looking for adjacent rooms and drawing the map as it went. Unfortunately, this was insufficient for a number of reasons. It was too slow to accurately determine rooms that the player could walk between; to do this, I would have needed to do a flood fill of each tile in every room, marking space as inside or outside the walls, in order to correctly identify paths between rooms. Furthermore, it would have been impossible for this algorithm to flag rooms as secret areas, as this decision is often based on context and not something that could be easily determined by examining a room algorithmically.

For these reasons, I’ve had to draw each map by hand. In fact, there are two versions of each map, one with secret areas revealed and one without. Once the player has traversed a secret area, the map will show this path, but until then, it may appear as a wall.

I was initially considering only showing the map within dungeons, but I’ve had to expand the scope for a variety of reasons. This decision was based on the fact that many areas of the game (towns, building interiors, various caves and forests accessible from the overworld map) are trivially small and don’t warrant a map, but as I began drawing maps, I realized some areas that I don’t technically consider dungeons — for instance, the icy lake outside the glacial palace, or the exterior facade of the desert ruins — could still benefit from having a map. The final nail in the coffin was the inclusion of gem markings on the map; once I knew for sure I would be supporting that feature, it pretty much meant I would need a map everywhere. The one exception is the dream sequences. These never contain gems, so I feel I can get away with not having a map during these sequences, and I think the exclusion of a map may help to further clarify the delineation between the real world and dreams.

One of the reasons I rejected a minimap when I was originally developing Super Win last year was because the game’s regions are not always logically represented by its map files. Many seemingly disparate locations may exist within the same map file, such as the tutorial, all dream sequences, and the hidden region within Subcon, or the interiors of many buildings across a few different towns. Likewise, some areas that are logically connected, such as the Lair of the Hollow King and the Hollow Heart at its conclusion, actually exist in separate map files. I knew that one of my first tasks would be solving this disparity. This involved tagging every map file or region with an identifying name.

xan_valk_update_2

Ultimately, I ended up breaking down maps into the smallest possible discrete regions, even when these are just a single room, as in the case of many building interiors. This decision led to another problem: once I began marking gems on the map, I found that I wanted to be able to see the total number of gems in a region, but the regions I had defined were too small to provide a meaningful count. To address this, I added another layer of markup to define regions that were part of the same larger logical space. In this way, I could keep track of, e.g., how many gems existed in a town, even when this space spanned multiple maps.

Calculating the number of gems within each region is done at runtime when the game starts up. This is a somewhat intensive process, as the contents of each room must be examined to see whether it contains any gems, whether those gems have been collected, and so on. In the future, once I’ve finished building the new speedrun courses and am certain that content is locked down, I may cache these results for faster loading, but in the event that I don’t, I’ve added a loading screen such that the game doesn’t appear to have crashed or frozen.

There is one remaining problem that I haven’t solved yet, and that is how to handle saved games that were made prior to this update. As it stands, the game would be loaded with no minimap data, so any rooms the player had already traversed would have to be revisited in order to fill in the map. As a partial fix-up, it would be easy to automatically fill in rooms from which the player had previously collected a gem, as I would know for sure they had been there already. Any further fix-ups would have to be guessed at, possibly by attempting to pathfind through the world from known visited rooms to known entry points. Alternatively, I might simply pop up a notification when loading an older saved game explaining that the minimap will not be filled in. We’ll see.


The second order of business is speedrun courses. This goes back to an idea I had early in the development of Super Win, but eventually the underworld region I had set aside for this purpose ended up becoming something of an epilogue to the main campaign instead, and I shelved the speedrun idea for a time.

I’m planning to have a number of speedrun courses, probably five or so, and these will be accessible from the Town of Lakewood right at the start of the game. Each speedrun course will prescribe its own set of gear, so the playing field will be level regardless of how far you’ve advanced in the campaign. You may also find familiar powerups on the course that will last for the duration of the run and will be forfeited upon its completion. Finally, I’ve added one new powerup: a coffee cup which provides a speed boost for a short duration.

I’m currently in the processing of grayboxing speedrun courses, and I’m pretty excited about the results so far. I’m aiming for difficult platformer challenges more in the vein of the original You Have to Win the Game. I also want to provide multiple paths through each course. My hope is that these paths will provide a good balance between difficulty and speed and incentivize repeated playthroughs in the interest of finding and perfecting the optimal path.

From the start, I knew that if I were implementing a speedrun feature, I would want ghosts, but it took some time to figure out a good implementation. I had previously implemented input recording for Gunmetal Arcadia as a solution for an attract mode and possibly for saving and replaying full game sessions. I ported this code back to Super Win, but it turned out not to be useful for ghosts, as wholesale input recording is only useful in the absence of ongoing player input. Eventually, I decided to implement this feature in the simplest way I could imagine, by saving off snapshots of the player’s position at regular intervals. I’m still playing around with the exact rate, but currently I take a snapshot every tenth of a second while the player is moving and also in response to significant events such as jumping, landing, wall hugging, dying, and respawning.

Ghost data is saved to file when the player finishes a speedrun course and chooses to overwrite their previous best time. This ghost data will automatically be replayed the next time the player enters that course, allowing the player to compare their current performance against their previous best.

The next step, and one that I’ve prototyped far enough to have confidence in being able to ship it, is to associate ghost data with online leaderboard scores such that players can choose to race against each other’s best results. Naturally, this feature will only be available for Steam players, but for non-Steam versions, local results can still be saved and replayed.


I don’t yet have a release date for this new content, but as I’ve mentioned previously, it will be available free of charge to all current players and will coincide with a relaunch of the game at a new lower price. Hopefully this will be sooner rather than later; I’m a little over three weeks into this work and itching to get back to Gunmetal Arcadia, but I also want to make sure this is a substantial piece of high-quality content, so I’m trying not to take any shortcuts or do anything halfway.

Meet Your Factions

One of the core promises of Gunmetal Arcadia since its announcement has been the idea of faction conflict. There are two major players in the realm of Arcadia, each with its own set of characteristics and values. As you play the game, the choices you make will affect your standing with each of these factions, and over the course of multiple sessions, the concatenation of previous outcomes will sway the narrative in different directions.

Let’s take a look at these groups and what each represents. But first, an introduction to the race you’ll be playing in Gunmetal Arcadia!

xan_faction_elves

Tech elves are the native inhabitants of the land of Arcadia. They have an innate affinity for tools, technology, and weapons, and they also possess the ability to outfit themselves with biological augmentations.

Elves may choose to assist one of Arcadia’s factions, or they may remain unaligned. Each of these options comes with its own risks and rewards; factions can provide equipment and upgrades for their followers, but some citizens may respond negatively to members of an opposing faction or those who do not commit to any cause at all.

In the face of a greater threat, however, there is no open war between these factions. Whatever conflicts or tensions exist in that space must take a  back seat to the duty of defending the land.

xan_faction_vanguard

First up, we have the Gunmetal Vanguard.

The Vanguard stands for strength and honor. These brutish warriors value military might above all else. They pride themselves on crafting the finest weapons and armor in all the land.

Members of the Vanguard are well-versed in melee combat and prefer to approach combat situations directly, sword in hand.

As an unaligned tech elf, you may pledge your allegiance to the Vanguard and receive their sigil, the Vanguard’s Hammer. This item imbues its holder with great strength and constitution.

xan_faction_seekers

On the other side of the coin, we have the Seekers of Arcadia.

The Seekers represent knowledge and intellect. They are scientists and engineers, keenly interested in understanding, manipulating, and augmenting the inner workings of all things.

Acolytes of the Seekers prefer to analyze combat encounters and choose the smartest approach from all available options.

A neutral tech elf who choses to be allied with the Seekers will be granted their sigil, the Lens of the Seekers. This item amplifies the abilities and stats of its wearer.


In the future, I hope to do more of these short lore posts — this week, my return to Super Win necessitated it, but it also aligned with some writing and narrative development I’ve been doing as I start planning promotional material for future events. Maybe next time I’ll take a look at the rogues gallery of the Unmade Empire, the primary antagonists of  Gunmetal Arcadia.

The Lucas Factor

Between the new game modes, Mac and Linux ports, and updated Steam release I did for You Have to Win the Game and the free DLC David did for Eldritch,  a common trait that’s emerged across Minor Key’s releases to date is substantial post-launch support. When I finished Super Win the Game, I had no intention of adding any new content; the game said what I wanted it to say, and that was that. Nevertheless, opportunities have arisen in the months since launch to bring me back to that game, from the anaglyph 3D mode for the IndieBox release to recent changes to better support fan translations. I haven’t been documenting that work on this blog because it’s not directly related to Gunmetal Arcadia and I wanted to stay on message.

This week, though, I’ve found myself with nothing to write about because I haven’t done any work on Gunmetal Arcadia. I’ve been focused on some new stuff for Super Win, and as that has impacted the development of Gunmetal Arcadia, I want to  discuss it. I don’t know what form this blog will take next week, or whether I’ll have returned to Gunmetal by that time, but I have another few days to figure that out.

I’m planning to showcase Super Win the Game at regional events this summer just like I did last year. This time, though, since the game is already complete and released, I’m in a place where I can be more flexible in how I choose to demo it. Last year, the demo was essentially just the current build of the game with saving and loading disabled. It would always start from the beginning, optionally with a tutorial, but without a clear indication of what the game would become, either in terms of mobility upgrades and platforming challenges or in terms of narrative.

In discussing ideas for a new demo with David, I first considered launching the demo build in a state where the player already has a few upgrades and starts at the entrance to one of the dungeons, as this would be a better representation of the gameplay experience. Then I thought about building a new demo level, possibly cobbled together from scenes from the actual game, that would be a small, finite space that could more immediately convey the experience of the full game.

A few days later, I woke up in the middle of the night and had the idea to promote Super Win at shows by turning this demo level into a competition. Beat the best time and win a free Steam key! And then that quickly turned into, hey, as long as I’m tracking the time that the player spends in a level, why not turn that into a real game feature? And that led me to write up a design document for a new speedrun mode, and for the first time in six months, I was excited about Super Win the Game again.

I prototyped the skeleton of a speedrun mode in a day, with options to choose from a number of courses, each of which may prescribe a number of upgrade abilities that may be granted or removed for the duration of the course. In this way, I can build levels with specific abilities in mind and not have to worry about when the player might visit an area or which upgrades they might or might not have and whether they could get stuck. This opens the door to a purer experience, less diluted by adventure/RPG trappings and more directly focused on the fast-paced platforming challenges that have been the core of the Win the Game titles.

So I guess that’s the official announcement. A new speedrun mode is coming to Super Win the Game! I don’t know when this content will be ready for release, but I’ll be figuring out that messaging in the near future. I’m obviously motivated to get back to working on Gunmetal as soon as possible, but I also want this content to be substantial enough that it’s not just a blip on the radar. It’s easy to imagine this would be a “major update” in Steam terms, and it could be timed alongside a sale, but I’ve already seen how Super Win performs on sale, and it’s not amazing. It’s enough to get by, maybe, but that’s it. (Thanks to the magical intersection of statistics and public-facing APIs, you can see how well it’s doing on SteamSpy.) So then I started thinking, how could I make this a bigger deal? And one of the things that came to mind would be to go back, address some of the most frequent complaints with the game, make it the best, most polished version I can, add some new content for everyone who’s played the game already, and then relaunch it at a new low price.

So, that’s an interesting thing. I feel like I’m well outside the window of a price drop looking like an upfront pricing failure, but of course I’ve talked in the past about how I think the original launch price probably was misguided. And no matter how many reviews and reviewers agree that Super Win is worth its asking price — and most have — I just can’t seem to shake the disconnect with the public perception that a pixel art platformer is an easy thing to make and should be cheap, if not free, by necessity. Hopefully this new price, whatever it may be, will better align with consumer expectations. But that’s only half the story. Lowering the price also makes sense in the context of Gunmetal Arcadia. After seeing how Super Win performs (and also observing numbers of other genre-similar titles on Steam Spy and getting a feel for where the ceilings lie), I’ve been feeling like Gunmetal needs to debut at a lower price than Super Win initially did if it’s going to be any sort of a success. But that’s a difficult and confusing thing to do in light of the fact that Gunmetal will be a larger game than Super Win in terms of scope and ambition, and pricing it lower risks creating the perception of less value, of this one being a step down from the last. My hope is that by preemptively dropping the price on Super Win, I can then launch Gunmetal at an appropriate price: higher than where Super Win is now because it is a bigger, better game, but lower than where Super Win originally was because I’m starting to think that’s just too much to ask in 2015 for what I do.

I don’t have a timeline or a specific list of features for this relaunch. I’m going to run with this idea for as long as it’s exciting and try to make it the best thing I can. I can say for sure that by popular demand, I’m adding a minimap. It’s already done. I finished it on Saturday. More may be coming depending on how I feel. But there are a few things this won’t be, and I want to establish that as early as possible. I’m not doing a hardcore mode. I’m not doing a cat mode. I’m not doing a remixed campaign. Those ideas worked in You Have to Win the Game, but they aren’t things that I consider to be core to the series, and I’m more interested in finding things that work for this game rather than retreading the same ground.

Likewise, there’s always the fear of running into “the Lucas factor” and wanting to fix up every little rough edge while I have my hands back in that codebase. I’ve made a few tweaks to the CRT sim between Super Win and Gunmetal, and it’s easy to imagine that I might want to port those changes back to Super Win. But the danger is, if I’m constantly sharing every relevant change among all associated games, then it will take me longer to finish new games, the new games won’t be as fresh and exciting as they could be, and it will be harder to pin down a definitive version of each game. It’s probably better to save the new stuff for the new game and allow each shipped title to remain representative of what I wanted to make at the time it was made. It feels a little silly to talk about my games in these terms when, for instance, I’m only a few months out from releasing Super Win, but at the same time, it really hammers home just how much progress I’ve made on Gunmetal in that time, that Super Win feels like such a distant memory.

To ramble a little bit longer, I was certain in early 2012 when I was closing in on the finish line of You Have to Win the Game that it would be the last indie game I ever made. Once I finished that one, I thought, I would be done, I would have made that one game that I’d be known for, and I wouldn’t have to kill myself crunching all the time like I’d been doing. And to be fair, nearly three years later, it’s easy to think that You Have to Win the Game will in fact be the game I’m known for, if I’m known for one at all. And that’s cool. I still think it’s a great game. I think it’s a more concise, more focused experience than its sequel was, and I think it hit a sweet spot where it was substantial enough that its low, low price of free felt generous and attractive.

I didn’t think I could ever feel good about Super Win the Game after its launch. I was burned out on working on it, talking about it, and trying unsuccessfully to promote it. It was anathema for a long time. It’s hard to say what changed, but I’m happy to be over that. It took half a year, but I’m finally proud of Super Win again and excited to be revisiting and updating it.

Player Awareness

Today’s update is going to be super short because I spent the majority of the week doing some post-launch work on Super Win the Game. But I’m making up for it with a ton of GIFs, so.

This week, I continued working on new enemy designs which have brought with them a handful of new AI features.

GunArc 2015-04-06 02-29-32-590

First up is some sort of bug thing. It spits acid? I’m still trying to figure out what the common theme among the enemies is going to be. I’m thinking some sort of insectoid alien species, but we’ll see.

GunArc 2015-04-06 02-38-19-943

Turrets also spit acid, at least for now. They will also turn to face the player, which is the first bit of player-aware AI code I’ve written. My expectation is that enemies will largely be able to function autonomously with no need to be aware of where the player is or what they’re doing, but there will be a few exceptions, and this is one of them.

GunArc 2015-04-06 02-38-43-284

Likewise, I’ve added player proximity tests to allow these hanging slime spawners to trigger when the player walks underneath them. I also used this functionality to create a spider enemy that behaves similarly, waiting until the player passes by to drop and attack. This required an extra bit of AI work to support a change in state from hanging motionless to dropping and moving around. To solve this, I add the ability to nest behavior sets within other behavior sets, effectively producing something akin to a standard behavior tree.

GunArc 2015-04-06 02-50-34-269

Finally, I’ve been reacting to feedback from the first playable test build. I’ve reduced the intensity of falling gravity, tweaked movement inertia a bit, removed player knockback when striking enemies with a melee weapon, and made bombs way less bouncy. I don’t yet know when the next public test build will be ready, but hopefully these changes will be a step in the right direction.