Ascend through the ranks of Babushka’s vampiric guild of demon slayers as you take revenge for her brutal demise. Eviscerate torsos, impale heads, and wield supernatural blood powers to vanquish the demons that killed your granny. Pay tribute to the almighty Babushka by unveiling masterpieces of blood and dismembered corpses. Splatter the walls sanguine and demonstrate your power as the last living descendant of the Dhampir lineage.

Here is our gameplay trailer on YouTube!

A Demon Killed My Babushka is a first-person action game all about slaughtering demons in style. The project was built by a small team of five as a Master’s level capstone project on both a custom C++ game engine and the Unity game engine.

As a gameplay engineer, my primary responsibilities on the team were to focus on designing and implementing a prototype of the game’s core mechanics. Leveraging Unity, we made a two-pronged development plan that allowed both the game idea and the engine to undergo parallel development. Having the prototype early on was crucial because it allowed us to “find the fun” in a core gameplay loop via playtesting before implementing any game-specific features in our engine.

The team’s objective was to create fast-paced gameplay that fed into our narrative of vengefully slaying demons, so the player needed mechanics to deliver that retribution skillfully and pervasively. These mechanics also needed to be implemented while keeping our animation requirements as simplistic as possible because we lacked in-house animators. Given that we aimed to build the game on a custom engine, it became crucial to mitigate scope creep early on and prioritize solutions that could easily be translated from the prototype. Therefore, we deemed it best to develop a first-person game featuring weapons, skills, and enemies, whose animations could be driven by simple code.


Prototype level showing the initial weapon ideas and a boss enemy.

Our first weapon, the sword, set the tone for the type of action combat mechanics we have in the game. The idea of quick, clean cuts went hand-in-hand with the demonic bloodbath that we envisioned for our world. We experimented with using detailed mesh colliders for simulating accurate slicing, but balancing it became tedious and inefficient. Animations needed to be extremely reliable for this approach, and that led to enemies not being hit when they should or being hit during unexpected parts of the animation. Even the speed of the swinging could get too fast for the physics system to register collisions. After playtesting, we decided it didn’t improve the player experience enough to try and solve these problems in place of simply defining a kill zone and applying cuts to enemies that died within it. This was a useful exercise in learning not to over-engineer features when they do not add to the core experience, especially when the goal is rapid prototyping a vertical slice of your game.

Weapon models used in the final custom engine build.

Additionally, we added the blood orb, a type of diegetic UI that displays the player’s primary resource, blood. It is what facilitates the core gameplay loop centered around expelling blood resources to slaughter enemies and collecting new blood to continue the onslaught. Blood levels determine the player’s health and whether they can use the rest of their toolkit, including things like projectiles, dashes, and chain swinging. Chaining together the sword swings with the other mechanics creates these satisfying moments during which the player can eliminate large numbers of enemies quickly while skillfully weaving their way through the blood puddles to sustain their killing spree.


The second major pillar in my work on the team revolved around designing and implementing enemies that could bring to life the narrative themes. We implemented low-poly demon enemies that charge the player, teleport around the player, shoot the player with projectiles, or try to overwhelm the player by surrounding them. Each of the enemy types employs only one or two mechanics so that groups of them could be layered to create challenges. Again, the key driver behind the decisions around enemies was the idea that all of these enemy models and behaviors could satisfy our animation constraints while still creating engagement.

Enemy models used in the final custom engine build.

One of the defining characteristics of our enemies is their intense blood splatter upon death. Since the blood left behind by fallen enemies replenishes the player’s blood orb, there needed to be a lot of it used across our levels to create the pacing we wanted. We used a decal system along with a particle system to make the demons spew blood upon death. Initially, this presented a challenge because after a certain point, spawning decals became expensive and lowered the game’s frame rate significantly. To solve it, we ended up leveraging object pooling to avoid expensive operations like creating new objects at runtime. This brought us to a sweet spot where we had a death trail covered in blood created by the player while maintaining a smooth frame rate for snappy gameplay.

Check out the custom engine and Unity repositories!

Back to view posts →

Leave a comment