Knighty Night

(Please Note: The Video Examples are currently unavailable as the school account Hosting the videos was deleted. The videos will be re-uploaded ASAP)


Production Time: 01/2019-05/2019

Knighty Night Steam Page

Knighty Night was my latest project, where I was one of 15 people working on the game.
Leading up to joining this team, people in my major submitted their games to enter a "Phase 2" of production. I submitted my previous game Skate and Grind alongside 8 other games. Ultimately, Knighty Night was chosen and I was asked to join the game as a programmer. The lead program had me focus on a various gameplay improvements. The first was to learn the boss AI from the games original build, remove some of the its functions, and "remix" other functions. The purpose of this was to create an lead in for the player to learn some of the upcoming boss's moves. We wanted to give a preview of how the upcoming boss fights, but not have the main boss feel repetitive after the mini boss.
The first mini boss took a week of development time for me to learn and edit. Since the previous programmer already set up a switch class, it was easy to remove some functions and add others. My favorite personal touch that ended up in the final game was the name for this mini boss: Gobbly the Morally Ambiguous. I was thinking back on characters that start as bosses but become allies later on (like Knuckles in Sonic 3 or Grey Fox in Metal Gear Solid) and created that name as a place holder. No one bothered to give them an official name, and so my wonderful little Gobbly lives on (however he does not team up with the player later in the game).
Another major addition I created for the game was the secret level mechanic. About half way through the game we all were way ahead of schedule and decided to start adding some fun bonuses for players to find. While another programmer found a way to turn Knight Knight into a variation to the classic game Breakout, I was responsible for creating the way to access these bonus rooms. Inspired by my previous code from Death Escape, I set up a simple interactive lever system where the player hits a lever which opens up a secret entrance. What was different, however, was the hidden hallways and rooms were invisible until the player hit the lever. 
My largest contribution to the game, was its UI system. The pause menu, main menu, fade in and out, and buttons associated were very easy. This was a basic system that allowed controller to freely explore the menu. One somewhat challenging function was adding a loading screen. The game loaded in fairly quickly, but would have some frame rate lag the 1st 3 seconds of the game while everything loaded in. 
My solution to this was to start the next level with a black screen (which later featured a beautiful animation), keep the game paused while everything loaded in, then faded in. I originally intricately had it fade in as soon as the game was 100% loaded, but it would finish loading so quickly the player would never see the great animation. Thus, we made the load wait an extra second or two so the player can see the load screen and have a few seconds to breathe before starting the next level.
The most challenging functions I developed was the settings for video and sound. In previous games, I set up rudimentary video settings like full screen toggling and 3 or 4 video options, but making multiple options for video that all can be adjusted via a controller while fitting within the aesthetics of the game. This took a few weeks of development and testing to get just right. What was even more challenging, but signifigantly more fun, was the audio settings. Originally, the game had one audio channel that was heard no matter how far the player was from the source sound. 
First, I had to completely change this audio system. I created 3D sound that would be louder or quieter depending on how far the player was from the source (in many cases the player would not hear the sound at all until they are in the same room as the sound source.
Next, I added Background music. The background music worked similar to the original sound as you should be able to hear it no matter how far you are. The main challenge for the BG music was changing the song depending on the level you were in.
Finally, I added tags, and turned the volume into adjustible functions. In the settings, the player chose a number between 0 and 10 for the volume of Music, sound effects, or the Master volume (both). In the code, I made to specify the master volume overrode either of the individual volumes.
What I loved about these settings, besides making it more accessible, was it made the game feel more official. So many games developed by individuals or small team will have the basic game and small menu, but adding an in depth menu made the game look closer to one that would be officially release. 
Knighty Knight being on Steam is such a proud achievement, and one of my dreams come true. Knowing my name is attached to a product officially sold on Steam never fails to put a smile on my face.

As a programmer, I worked on:
-Mini Boss Mechanics
-Fade In/ Fade Out
-Loading Screen
-Sound Systems and Sound Triggers
-Lever/ Locked Door Event System
-Adjustable Video Settings
-Adjustable Audio Settings
-Bug Fixing

Audio Code:

Fade Mechanic:

Fade Code:

Audio/ Video Settings:

Settings Code:

Level Select:

Secret Room Lever:

Secret Room Code:

Some Bug Fixes I implemented:
- Making B a Back Button while in menus
- Fixing Music still playing when muted
- Adding Options To the Pause Menu
- Door sound triggering when the levels were reset
- Door sound Being too loud
- Boss Health Staying on the UI when the player respawned
- Fade Out Not always working
- Player "Burying" itself into a wall

Full List Of Code Examples