Our rationale for choosing this project was based on our experience with TV signal generation in previous laboratory experiments for ECE 476. Since the video output signal takes up much of the microcontroller's processing power, we decided it would be fun to tear our hair trying to write a highly interactive game while maintaining the timing constraints imposed by the TV.
Given the limitations of the hardware, we decided to be conservative when setting our goals and gradually pushed the hardware to its limits once they had been achieved. We are both double-majors in Electrical & Computer Engineering and Computer Science so we reasoned that a game would give us design experience in both fields. Our conceptual basis, Galaxian, is copyright Namco.
Players can interact with the game using Sega Genesis gamepads. We chose this input device since it provides a good human interface and is easy to work with electrically. We can get all of the input signals with one port of the microcontroller dedicated for each of the two gamepads.
Additionally, the gamepads have a standard female DB9 plug so it was easy to find connectors that we could solder to our board. The game requires six buttons (for: up, down, left, right, fire, start/pause) out of the eight that are on the controller.
The video output signal is based on the RS-170 standard for monochrome video, which gives the appearance of an authentic classic arcade game. Bruce Land's examples provided a basis for generating the signal. The screen is treated as a 128x100 pixel array. Since the signal is black and white, only one bit is needed for each pixel, allowing us to store the video buffer as a vector of 1,600 bytes. Unfortunately, this representation of the screen buffer uses a large portion of the on-chip SRAM and forced us to be conservative when setting goals for our project.
The game starts off at a splash screen that displays the Nova Strike logo and allows the player to select between single player and versus mode. In single player, the player starts with three lives at Level 1, which has a difficulty reminiscent of shooting fish in a barrel. Twenty-five enemy ships appear at the top of the screen and continuously scroll from side to side, randomly shooting at the player. Occasionally, a ship breaks off and tries a kamikaze attack on the player. The player must move side to side to avoid enemy fire while taking shots at the enemies. A level is cleared once the player survives the onslaught and destroys all enemy ships. Successive levels are made more difficult with increasingly aggressive enemies that move faster, have faster weapons, and shoot more frequently. If the player is hit by an enemy ship or enemy fire, a life is lost. A life can be gained for every 100 enemies destroyed, up to a maximum of three lives. To make the game fair, we decided to make the player invulnerable for a few seconds after dying. In effect, the player is given a chance to dodge out of the way of enemies when resuming play. The single player game can be paused (for those times when you reach the threshold of neglecting personal hygiene). A soft reset can also be performed by hitting the correct combination of buttons while paused (holding down the fire button while pressing and releasing start/pause).