Project Info - Annihilis

Annihilis is a Quake-style shooter made in the Unity Engine. Designed and programmed (C#) by me as a solo project, the game features a custom made movement system that handles jumping, dashing, walking up slopes, and knockback from enemies and explosions. The movement is heavily refined to feel fast, fluid, and satisfying, almost as if the player were gliding through reality.

A playable demo of Annihilis can be found on my Itch page. You can also view this project's source code on my Github.

Gameplay

The Annihilis Version 0 map is made to be a strong but concise showcase of Annihilis's basic mechanics. Basic movement, Lunging, your primary weapon and its charged attacks, your secondary explosive attack, the stunning mechanic, and more are all introduced in a level that takes about 5 minutes to complete.

gameplay

Tutorialized Movement

movement-tutorial

The first few rooms are important not only for letting the player get used to their movement, but showing the player the limits of their character's movement. The first jumps are the highest the player will be expected to jump up without their Lunge. The room following gets the player used to jumping across gaps, first to a platform the same level as them, then to a higher platform, and finally to a level platform farther away. Though this might seem trivial, in the future the player will be required to judge these heights and distances at breakneck speeds where hesitating or misjudging a move could get them killed, so it is important for the player to to have a good feel for the movement.

lunge-tutorial

The next room shows off the "Lunge" mechanic, which acts as this game's dash. Pillars are placed in this room to act as reference points so the player can more easily understand the speed and distance that the Lunge moves them. The area following shows off a feature that distinguishes the Lunge from most game's dashes: The player is able to aim their Lunge upward to reach higher areas following a jump!

The First Arena

arena1-intro arena1-drop

I want to give the player a slight sense of foreboding as they approach their first arena, so I have them walk down a sheer cliffside, where the arena's lightly colored walls peak just above the walls of the valley the player is within. The path at the bottom leading into the arena also has ammo pickups to further drive the tension. The player enters the arena via a long drop into the room, which is not only dramatic, but also serves to show the player that there is no fall damage.

arena1-overview

The first combat's purpose is to teach the player their basic combat mechanics. I introduce ammo pickups right along the path to the arena while things are calm so that the player will recognize them later and won't be confused or overlook them while fighting. The combat itself is against melee enemies in a large room, giving players plenty of time to read the controls and plenty of space to evade the enemies as they fight. The second wave spawns enemies all around the arena but teaches the player an important mechanic for dealing with this: Lunging into an enemy damages them. Since this is enough to kill melee enemies, this means the player can simply Lunge through one if it is in the way. Introducing the Lunge against melee enemies in particular is important as a player might otherwise assume lunging into one would only end in that enemy damaging the player.

Ranged Enemies

arena2-overview

Ranged enemies are introduced in an arena without any cover. I want players that are unfamiliar with movement shooters to understand that they do not need cover to avoid the ranged attacks of these enemies. In fact, the second wave spawns quite a few enemies just as a show of how easily simple strafing can avoid their attacks.

Starbomb

citrine

Starbombs, which use orange Citrine as their ammo, is this game's explosive attack. I think using powerful weapons is fun, so I like to put the player in situations where they feel the need to use Starbombs and feel confident in doing so. I accomplish this in two steps: 1) I send either large waves of enemies or small groups of tough enemies at the player and 2) I consistently give the player ammo so that it does not feel scarce.

I start the player off with 3 Citrine and spawn a large wave of enemies on the way to the Yellow Door they just opened. There is another charge of Citrine where these enemies spawn so that testing a Starbomb or two against these enemies hardly feels like a waste. I want players to consistently feel the joy of blowing things up!

The Stun Mechanic

red-key

I want to curb the tendency for constant action to exhaust the player, so I give a quiet moment as they move to collect the Red Key. I also want their encounter with the final enemy type of the demo, the Elite Ranged (from here on, just the Elite), to feel more impactful.

elites

In the grander scheme of the game's design, the first Elite encounter is meant to show off how the player can deal with power and tough enemies in tense situations. Their arena is the smallest fighting space in the game and the player is trapped with two of them until they are both destroyed. This enemy's attack consists of a barrage of slow moving and inaccurate projectiles that are liable to saturate spaces with bullets if allowed to go on unimpeded. The Elite has much more health than the other two enemy types, so simply killing the pair with primary fire before either can get their attack off is impossible.

The solution to this encounter is presented just before the player enters its room: A message pops up telling them that Lunge attacks and charged shots are good at stunning tough enemies. The tight space serves as an excellent example of when this tactic becomes useful. The explosion of Starbombs is also capable of stunning Elite enemies, so a player who deviates from this tactic still learns something new.

Arena 3

This is my favorite arena in the Annihilis demo.

arena3

Whenever I make an arena in a movement based game, I think of its layout in terms of how fun it will be to loop around, as well as how the enemies I have available and want to use will interact with the player's traversal options.

The purpose of this arena is to be a step up from the first Elite enemy encounter. Whenever I make an arena in a movement based game, I think of its layout in terms of how fun it will be to loop around, as well as how the enemies I want to use will interact with the player's traversal options. One of my first additions to the arena was the central pillar made to give the player some breathing room from the Elites in case the player was not able to stun one of them. The central tension of this arena comes from the melee enemies that are also present, which the player must avoid while also remaining in an advantageous position to evade the Elites. Even with its verticality, the arena is small, so it is never long before the player is forced to reposition.

The bridge is both this arena's entry point and safe space. I've placed a couple of ammo pickups so that a player can resupply themselves easily as the fight begins. However, I've strategically shaped the arena so that the bridge is also a suboptimal space to fight from. The melee enemies coming up onto the bridge can easily force the player off of it as the Elites provide covering fire against the player peeking off the bridge to attack. If the player hops onto the bridge from the raised platform below it, any melee enemies chasing the player will quickly move back under the bridge to reach the ramp on the other side, preventing the evading player from attacking them from above. While the safe area does allow a brief period for the player to catch their breath, as intended, I don't want it to act as a camping spot for the player in lieu of them using good movement and use of their weapons to complete the encounter.

The Final Arena

final-drop final-overview

Here I experiment with a more open space to compliment the player's mobility. The arena is scattered with ammo, health, and plenty of precious Citrine for exploding enemies. Even if evading the enemies themselves does not get the player to move about the arena, the need to collect resources will. I spawn a lot of enemies, especially on the second wave of this fight, but in turn I've given the player more than enough Citrine to dominate the encounter. I've made sure to scatter this resource about the arena so that no matter where the player chooses to fight, some is close on hand.

The Future of Annihilis