Adrenaline is an intense music based game where user-supplied songs are played and analyzed in real-time; The intensity of the song controls aspects of gameplay, namely how many enemies are spawning. When you are attacked by an enemy you lose adrenaline but you also gain adrenaline each time you kill an enemy. If you run out of adrenaline you lose the game! There are various power-ups that can be dropped by killed enemies which can help you out of tight situations.
Adrenaline was built from the ground up in C++ in about 3 weeks worth of development time. The game uses DirectX 9 for rendering and FMOD for both audio playback and analysis. The game originally started out as a program that could analyze a song that FMOD was currently playing and display information back to the user; I knew I wanted to do something with music, so I built that first and designed the rest of the game later. A lot of time was also spent balancing the game as there are many aspects of it that factor into the difficulty. Most of the art and sound effects used in the game are taken from Fallout 2 and Van Buren (cancelled Fallout 3); This was done simply because it was a school project and I had serious time constraints (however I do love the gameplay and wish to flesh it out into a full game some day).
The player’s ‘health’ is the adrenaline bar along the bottom of the screen. While playing, your adrenaline level is always slowly dropping and can actually fall all the way to 0. However, the only way for the player to die is to get hit by an enemy while having 0 adrenaline. There are 5 levels to the bar at the bottom (each overlays on top of the other and the bars change color from green to red) with the idea being that, when full, the player has ‘500% adrenaline’. The player loses adrenaline when in contact with an enemy (whether they are attacking or not). The only way for the player to gain more adrenaline is to kill enemies. Therefore, while slower songs do result in less enemies spawning, you still have to worry about your adrenaline levels as it is constantly dropping and there are less enemies to refill it.
There are five different power-ups that can help the player out of tough situations. Power-ups are dropped randomly as enemies are defeated and are activated on pick-up (if not picked up they will disappear eventually). The time left on these power-ups are represented by circles in the bottom left hand side of the screen. The five power-ups are invincibility, faster rate of fire, faster player movement, double damage, and slow motion (slowing everything but the player). These power-ups are a really important part of balance; As songs hit very intense parts there can be a large onslaught of enemies. As you kill these enemies they will be dropping power-ups which will help you deal with the other enemies that are spawning. Slower songs tend to be more about avoiding getting hit (constantly lower levels of adrenaline, but less enemies and power-ups) and faster songs are about getting power-ups and staying alive (higher levels of adrenaline, but more enemies and power-ups).
Music analysis is done by using FMOD to get spectrum data for the currently playing section of the song. The spectrum is processed each time it should consist of completely new data (which depends on the sample rate of the song). The entire spectrum is then added together to create the instant intensity. That intensity is then put onto a history of the last 48 instant intensities and then those 48 intensities are averaged to create the average intensity. Beat detection is done by looking at how high the instant intensity is over the average intensity of the last 48 samples. This method of beat detection is not perfect, but works in many situations (good beat detection is incredibly hard). Finally, the instant intensity is added to the current music intensity with a bit of massaging, making it create the smooth graph that the player sees for the music intensity. All together the instant intensity is used to control the number of enemies that spawn, the music intensity is what is shown to the player for the intensity level (as it’s a much smoother looking graph), and the beat detection is used to pulse an overlay on the screen (which also gets more visible as the player’s adrenaline level climbs).