EECS-205-game
Final Game for EECS 205, Winter 2018, Northwestern University
Controls
- Right/Left arrow keys control rotational velocity
- Up arrow key accelerates the player
- Left Click/Space fire the blaster
- It is recommended to use leftclick, as space interrupts motion commands
- P pauses/unpauses the game
- R restarts the game, only when the player has died
- Escape exits the game
Scores
Score is granted on both a time basis and on a per-kill basis.
1 point is awarded each time the game advances a frame.
Each type of asteroid (there are currently eight, although some share sprites) has its own score bounty, ranging from 50 points for the first spawned asteroid to 1000 points for the respawned last asteroid:
- is worth 50 points
- is worth 100 points
- is worth 75 points
- is worth 150 points
- (first spawn) is worth 200 points
- (respawns) is worth 500 points
- (first spawn) is worth 750 points
- (respawns) is worth 1000 points
Score will be granted to the player for the frame they die on, and for killing an asteroid if they do so with their fighter - They will not, however, gain any points for blaster shots which impact on the last frame of the game.
Sound effects
Sound effects are stored in the sound
folder. They can be freely deleted (they will be replaced with silence) or replaced.
Credits
All sprites are either mine, edited versions of public domain images, or given by the EECS 205 course. The binary library libgame.obj
was also given to me by the EECS 205 course, as was starter versions of the assembly files and includes, and the build script make.bat
.
Sounds
There are three "fundamental" sounds:
- For the Damaged Coda
engineloop
blast
The two RCS sound effects are modifications of engineloop
to stereo.
For the Damaged Coda is a song by Blonde Redhead, from their album "Melody of Certain Damaged Lemons", which can be purchased on Amazon. It is used here under US Fair Use law as I understand it, for non-commercial, educational purposes only. That is, neither I nor anyone else may profit from this game so long as this file is present, and this game is produced as an educational project. It has been trimmed to fit its purpose in the game.
engineloop
is sourced under the CC0 license from freesound user qubodup. This user has no outside affiliation with me, or with this project, and has not in any way endorsed this project. The file has been edited to reduce its volume.
blast
was created by me. It is a short sine wave, chirping from 800Hz to 200Hz over 0.3 seconds.
Details
Bitmaps
Here is a list of all bitmaps and their sources:
- is used for the general
asteroid0
, and was given by EECS 205
- is used for the general
asteroid1
, and was given by EECS 205
- is used for both types of
asteroid3
, and was given by EECS 205
- is used for the initial
asteroid0
, and was given by EECS 205
- is used for the initial
asteroid1
, and was given by EECS 205
- is used for both types of
asteroid2
, and was made by me, editing togther the general asteroid0
and initial asteroid0
sprites
- is used as the background for the game.
- It is a cropped and downscaled version of the public domain Hubble Ultra Deep Field, with colors brought down to those available to the game.
- It is the only bitmap to bypass the
blit.asm
drawing routines - Instead, for performance (as it doesn't require transforms or transparency, and covers the whole screen, and is drawn every frame), it is copied over the screen buffer at the beginning of every frame using rep movsb
.
- is used as the projectile fired by the fighter, and was made by me from scratch.
- is the 'resting' fighter sprite, and was given by EECS 205
- is the first frame of the fighter's engines animation, and was given by EECS 205
- is the second frame of the fighter's engines animation, and was given by EECS 205
- is the fighter overlay for firing thrusters for counter-clockwise rotation, and was made by me from scratch.
- is the fighter overlay for firing thrusters for clockwise rotation, and was made by me from scratch.
- is overlaid on the fighter to show that it is shielded, and was made by me from scratch.
- is the sprite for the collectible shield powerup, and was made by me from scratch.
- is overlaid on the game when the game is paused, and was made by me from scratch - The used font is IBM CGAThin
- is overlaid on the game after the player dies, and was made by me from scratch - The used font is Butcherman
Game Mechanics
This is a short list of certain game mechanics which are worth pointing out.
- Everything wraps around the screen. But while it does so, it spends a brief period entirely offscreen - Do not assume that things just disappeared!
- Blaster shots kill you if they hit you. Use them sparingly, and don't take too many risky shots - You might get swarmed.
- Asteroids always respawn on set timers (relative to framerate), at set locations. Be careful staying near spawn locations if an asteroid might spawn soon - There is no grace period.
- Your blaster has a cooldown of about 2 seconds. Don't use it if you're going to need it soon.
- Your rotation doesn't stop by itself. Don't spin the ship too fast - There's a limit to how fast it will spin, but you'll lose control before you hit it.
- Your shield can and will be hit by your blaster if you fire while shielded. Don't fire unless you need to - But if you need to, plan ahead!
- The shield pickup respawns on a set timer, starting from when you last collected it. Using it effectively will mean using your shield offensively just before you can collect a new shield - They don't stack.
- Asteroids do not destroy each other. Instead, they bounce off each other. Don't expect to be safe in the vicinity of two asteroids that might hit each other.