Metablitz Mechanica
Made for my capstone in UCSC’s Computer Science: Game Design program, Metablitz Mechanica is a platformer with a heavy emphasis on momentum and engaging movement mechanics.
Produced over the course of ten weeks, I pursued development of Metablitz to round out and synthesize my solo dev skillset. Scripting, modeling, texturing, animation, level and game design, and UI/logo design were done by me, with music provided by Kristofer Parsons.
What to expect
Metablitz in its current state provides a fully-working prototype of the core gameplay mechanics, as well as laying the groundwork for core aspects of the design and aesthetic vision a hypothetical full release would deliver. This includes the lowpoly character model, presentation and rendering style of menus and UI elements, and stepped 3D animations ala Guilty Gear Xrd and other Arc System Works titles.
As this animation might tell you, the game is heavily influenced by Jet Set Radio.
What’s a movement game without some good ol’ wallrunning?
Highlights
Metablitz was a major step forward for me both as an artist and a developer, so there’s a lot for me to talk about.
Erika
The main character, Erika, is one of my favorite models to date, incorporating a more complex rendering style for her texture, and utilizing plane geometry to give her dynamic and easily animated expressions to bring out her appeal.
Another major element of Erika’s design is her completely disjointed limb setup. At the time, this was both an aesthetic choice and a logistical choice, both covering my apprehension for tackling lowpoly limb deformations at the time, as well as giving me a significant amount of freedom not only for applying squash and stretch in her animations, but also opening the door for unique gameplay mechanics and character details that could only be afforded by the disjointed style.
The many luminescant elements on her body were meant to rotate at all times, scaling in response to the player’s velocity- though my struggles with Unity’s animation systems led to this mechanic being cut for time.
I even wanted to incorporate light combat mechanics at some point. Though unused, the animation made for good practice and a very cool pose for the poster!
Shader wizardry
Shaders are, to put it lightly, quite daunting! However, I found myself in a position where certain effects I wanted to achieve required creating my own shaders, both in Unity’s shader graph and by writing it myself. I had a very specific vision for my UI presentation and in-game lighting, so figuring out (minimal) shader programming from scratch was a high priority.
Her name isn’t actually Toriyama Kazuka- it’s a red herring, that was meant to tie into a major plot beat and the influence of dreams and memory on the game’s concept.
There are four custom shaders on display here; three of them specifically made to interact with each other. The first shader is applied to the character model on-screen: this shader relies on the base texture being set up as a map, wherein white pixels are treated as a mask, black appear solid, and anything inbetween appears semi-translucent. This effect differs from straight transparency applied to the mesh in that the “masked” faces of the mesh still occlude the mesh’s own faces. Otherwise, the character’s face would simply appear black due to the hair behind it.
The second, third and fourth shaders handle the text inversion effect. When an option is hovered over, a black bar extends out behind the text, and the text appears to be inverted. This effect is actually quite complicated- there’s the base text, with a shader that reads the stencil value written to the pixel it displays over. Then there is an invisible duplicate of the same text, using a different shader to write to the pixels it displays over when the element is hovered. Finally, the black bar has yet another shader that references and writes the stencil value. Through some basic comparison logic, the text determines if it should display the base color and update the Z buffer, or display nothing and leave the buffer alone. This provides the impression of seamlessly inverting in accordance with the black bar passing under it.
That’s a lot of work for a humble menu element!
This solution was necessary as simply trying to set the color or visibility of the base black text once the element was hovered appeared quite cheap, where the text would either appear to change color far too quickly, or appear laggy and unresponsive to the cursor, ruining the illusion of the bar being the cause of the text’s inversion.
Finally, a fifth custom shader is present in the main gameplay. This shader is quite simple, but very important: its function is to light the main character in a way that interacts well with her geometry, while circumventing a full emission or “averaged luminance” approach to shading. While Erika casts no shadow of her own in this build, she is subject to the shadows cast by other objects. It’s hard to find proper terminology for this type of shading where the shadow appears to simply “cut through” and there isn’t any occlusion caused by the mesh on itself, so I usually just refer to it as “Minecraft Lighting” as it’s quite similar. It’s most similar to Minecraft’s smooth lighting, to be specific. It’s also quite simple to implement- the effect is achieved by having all of the model’s normals being set to point straight up at all times.
Development difficulties
As with any game development project, there must be roadblocks. The most difficult aspect of Metablitz’s development and the one I’d like to touch on in this page is level design.
The imagery of a looming tower in the distance was one I absolutely did not want to budge on. Only now does the silhouette start to remind me of a very famous game with a lot of towers to climb…
As it turns out, designing levels that encourage deep interaction and exploration of very fast and liberating movement mechanics, is really, really, hard. I recently encountered a video exploring the oddly facetious and empty environments of old racing games- in it, it was pointed out that racing games, focused on blistering speed and the explicit discouragement of slow exploration and observation, must provide exceedingly large environments for players to interact with. However, filling out these environs beyond a certain level of detail creates increasingly diminishing returns in selling the reality of the game to the player, while creating significant development overheads due to the sheer volume of space needing to be covered. There just isn’t any time or reason for players to try and soak in their surroundings, so long as it looks real enough as they speed by.
This lesson, unfortunately, was not present in my mind at the time of making the level for Metablitz. I tried to model my design more in line with games like Jet Set Radio; however, I failed to learn from JSR’s focus on creating large loops and complex intertwining paths over a relatively smaller space, making the addition of major details and worldbuilding elements much more valuable for the effort expended. My levels were quite linear, and the overall speed of traversal was too fast for the scale JSR was working with. A better solution would have been pursuing levels in the style of games like Sonic Unleashed, or toning down the base movement speed to place more value on pathing and precision than reflexes.
A small area modeled after a Japanese bus station. If I could do it over, I would try to make each element part of a viable path for the player to take, and incorporate an overarching circular layout to encourage and ease looping around the area.
Plans for the future?
While I hold a lot of love for this project, it’s also one of my first forays into solo development of a larger-scale project. As a result, there are a lot of logistical and artistic concerns that have held me back from working on any major updates and content for the project. My hope is to one day find myself with the time and headspace to give the game a proper overhaul and the care and attention it deserves. For now, I have a lot of other projects occupying my mind, and I want to bring my skills to a higher caliber before I give things a do-over.
Thanks for reading. Here’s some bonus outfits that I wanted to put into the game as unlocks. Maybe one day they’ll see some proper use!
That Hsien-Ko influence is striking again!
And a costume paying tribute to Disgaea’s Kunoichi, whose hair served as a core inspiration for Erika’s odd triple ponytail.
Reject skateboarding maids, embrace railgrinding maids.