Making a List, Checking it Twice
In Making a List: Checking it Twice, it has been a bad day at work for Santa. Nutcrackers and Gingerbread men are rioting and have taken the elves hostage! Time to get down and dirty, and let them know who's been naughty and who's been nice. You play as an AK-47-wielding-hot-chocolate-healing Santa Claus! Your mission is to eliminate the hostiles and save your elves. But be careful, as your elves may be caught in the cross fire. Kill too many elves and you'll accumulate naughty points. Save them to keep your nice reputation. Feeling a bit frustrated with their lack of security? Kill them yourself to be an S-rank naughty Santa.







There are several core programming components to this game-jam game that I contributed: inputs, projectiles, collisions, and I-frames. I recommend trying this game out so you can see how nice it feels to control the character! The link should be in the top-right of your screen.
For enemies, I created a base Enemy class that provided standard features necessary for all enemies: sprite updating to face directed angles, firing bullets towards the player, health management, and line of sighting. On the right, you can see part of the script that runs the firing process and updates the facing direction of the sprite.
While we could've created an object pool for the projectiles, there were not nearly enough projectiles in the game to affect performance through instantiation. While this game is somewhat of a bullet-hell, the projectile count is relatively low due to the size of the projectiles.

As part of the core gameplay loop, our character shoots at enemies and rolls out of the way of bullets. When rolling, I-frames are enabled so that the player can roll through projectiles without taking damage. On the right is an example of the code that performs these actions. We use a fixed duration for the rolls, sending the player in the most previously moved direction for the duration of the roll.
One quality of life feature we added was an input buffer time. When we set the roll input time, we increase that time by a small fraction. Then, when we compare that time, there is room for the player to make a mistake in the order of stopping one button presson to start another. We made this quality of life change to each input.


Another feature which you can discern from the gallery images above (and the one to the right) is camera motion and its offset. Because this is a top-down shooter, I made sure that the camera follows the mouse smoothly so that the player can take full advantage of their screen and reduce dead-space. Since the camera follows the mouse and the mouse is used to aim towards the enemies, the camera will always allow the player to see where they're aiming while ensuring enough space is visible around the player to dodge attacks.
