(2006) RGB Overdose - university programming contest entry
RGB Overdose was my entry at the GMD game programming competition. Game Making Deathmatch (GMD) is an annual competition (usually spanning three weeks) held by the UTGDDC (U of T Game Design and Development Club), then GPC (Game Programming Club), a university club which I helped found. (By the way, it's awesome to see that the club is still going since 2003, the year of its creation!!) My entry ranked 9th at GMD 2006.


It is available for download here and is about 60Mb in size.
You can also download the source code here (it is a Visual C++ 6.0 project).

The main criticism it received was that it is too difficult, and that the controls could have been better. I balanced the game assuming that
- everyone should be able to complete the first few levels
- even I am expected to fail during the middle levels
- the later levels should be hard enough to cause even myself to fail most times (but still win at least once!)

The game should run on Windows XP or newer. There's documentation that can be found in the doc/ directory.


RGB Overdose borrows from the following sources:

- NeHe Windows basecode (Visual C)
- NeHe TGA loading code (Visual C)
- 10 tracks by the band `The Prodigy`, some are mixed by other DJs.
- fmod library, which provides sound playback routines

RGB Overdose is developed using Visual C 6.0. It uses opengl, and nothing else.

The 'hit' check is performed at the END of the explosion animation of the shot.

The game makes heavy use of randomization. It's possible to have no viruses spawn for a long time, or it's possible that they all spawn within 1-2 seconds. Though both the mentioned cases are VERY rare.

Levels are Notepad-friendly and can be edited. User-created levels are also possible. The template is provided in the /levels directory.


You are a surgeon, in control of an injection mechanism that will inject vitamins in a patient's open wound, attempting to destroy viruses that are looking to damage a red cell. Vitamins are of 3 kinds, Red, Green and Blue.
Viruses spawn around the level and must be destroyed. They can be of many colors, and must be destroyed using vitamins of similar colors. Whenever you inject vitamins, you can see the colour of the charge on the round indicator in the centre. Selecting the charge's vitamins is done using the 3 Red/Green/Blue selectors to the right. Consider the following example:

1. Virus A spawns and looks yellow.
2. You must then modify your charge to contain red and green, causing the charge indicator to turn yellow
3. Firing this charge will kill the virus.

Another example is given below:

1. Virus B spawns and looks yellow.
2. Virus C spawns and looks green.
3. You modify the charge to look green.
4. You fire and hit BOTH viruses B and C.
Virus C is destroyed, while virus B will become red, because all its green color was destroyed by the green charge.

Each level has a stationary red cell that is pulsating. Whenever viruses collide with it, the red cell loses a hit point. On some levels the red cell is more resistant than on others.

Winning conditions:
- All viruses have been destroyed (the black indicator to the left)

Losing conditions:
- Red cell has no more hit points (the white indicator to the left)
- you have run out of vitamins (showed by the indicators in the lower left corner

The possible things that make a level difficult are given below:
- fast, hard to target viruses
- arbitrarily coloured viruses
- large red cell (easy to hit by viruses)
- fast-spawning viruses
- small amounts of vitamins available to the player

Types of viruses

Various types of viruses can spawn. They are described below:
a) Noob -- this virus is stupid and wlil simply bounce around. It looks like a blob
b) Berserker -- this virus is unpredictable and will bounce around, BUT will also change direction sometimes. It looks like a little spinning wheel with spikes. It also accelerates progressively.
c) Seeker -- this virus is aware of the red cell and will try to get to it, but it is error-prone. Seekers look like circles with an arrow on them
d) Terminator -- this is the most dangerous virus. It is aware of the red cell and shortly after it is spawned, will proceed straight for the red cell. It will not stop until it reached the red cell or it is destroyed. Terminators look like skulls.

Every available level is selectable from the main menu.


The controls are as follows:

W, A, S, D -- move the injection targeting mechanism
SPACE -- fire the current charge; The charge's vitamins will be deducted from your total available vitamins

Left click -- select vitamins, using the selector on the right
Right click-- clear current charge to black (R=0, G=0, B=0)

Escape -- exit to menu

Tips for a better playing experience

Keep playing level 1 until you are comfortable with the controls. Many times your attention will have to shift from the targeting mechanism to the charge selector. The mouse pointer basically has no reason to ever leave the charge selector.

Learn to quickly clear current charge then select the next. Sort of in a quick succession `select red` -> `right click` -> `select green`

Kill berserkers early. They accelerate.

If possible, try to hit more than one virus. Even if your charge is green and you're going for a green virus, it certainly doesn't hurt to also hit a cyan, or a yellow one :)

If you're finding that a virus is VERY close to dying (almost black), but you can't quite tell the colour, make your charge dark gray (low Red, low Green, low Blue, Red=Green=Blue) and spam that charge.

Read the level_description.txt file. It provides VERY useful hints for each level, and it describes the intended purpose of each level.

Manage your vitamins by trying to match the colors of viruses. Most of the levels don't allow you to go trigger happy. If you're finding that the virus level is way above your lowest vitamin level, you might be in big trouble.

Learn to efficiently select familiar colors -- if I wanted a brightest yellow charge, I'd position my mouse cursor at the top of the RED selector, then drag it through to the top of the GREEN selector (you don't have to click, just hold the mouse button down). Likewise, if I wanted cyan, I'd drag the mouse through the tops of the GREEN and BLUE selectors. Purple is a bit harder, because you have to mouse an arc AROUND the green selector, touching only the red and blue selectors.

In the same manner, you can select white, which destroys any type of virus but is very costly, by dragging the mouse over the tops of all 3 selectors.

A more advanced selecting technique of color selection includes the following: -- suppose you'd like a color that's a greenish yellow -- you know that yellow is selected by dragging over the RED and GREEN selectors at the same level. But since you want it a bit greener, you can drag the mouse in a RISING DIRECTION, starting at 75% red and ending at 100% green.

If you can't quite identify a color, fix two of the selector, then slowly drag mouse on the third, to see how the charge color changes.

If you have a terminator headed straight for your red cell, with not much hp left, and you can't easily identify its color, perform an emergency move where you set the charge to white and fire. Do this in case of emergencies in general.
If you use the materials on this page, or any other page on this web site, you do so at your own risk. They are provided "as is". No warranty is provided or implied. I neither guarantee that the materials will work, nor that they will not be harmful in any way.

Snowdrop OS assembler and debugger

Electronic circuits - CMOS buffer

Electronic circuits - driving higher current loads through parallel port

Electronic circuits - interfacing a Nintendo NES from Snowdrop OS

Electronic circuits - 3-bit current buffered DAC

Electronic circuits - stepper motor driver controlled by Snowdrop OS

Electronic circuits - parallel port interface

Snowmine - a Minesweeper-like game for Snowdrop OS (in x86 assembly)

Storks - a matching game for Snowdrop OS (in x86 assembly)

Electronic circuits - interfacing with a 16x2 LCD via parallel port

Electronic circuits - square wave vs. sine wave (audio differences)

Electronic circuits - Catch That LED!

Electronic circuits - parallel port light show

Electronic circuits - the Annoizer (555 speaker circuit)

Intellivision development - Hotel Bunny

Coverage of my projects

Interviewed in the Retro Gamer magazine

My homebrew cartridges

ZX Spectrum development - Husband Chores (in Z80 assembly language)

No Snakes! - a multiplayer game over serial port

Sega Dreamcast development - Overbearing Burgers

Snowdrop OS - my operating system from scratch, in assembly language

libzx - ZX Spectrum game programming library (Z80 assembly language)

Compact Pong - game in C# for the Pocket PC (Windows Mobile 2003)

TOTP (time-based one-time password) authenticator in C# (.Net)

aSMtris - Tetris in assembly language (x86, 16-bit)

Balanced Diet (GBA) limited edition

Gameboy Advance development - Balanced Diet

Atari 7800 development - Poetiru

Arcade ROM hacking - Knights of the Round translation

PocketStation development - Pocket Worm

Sega Game Gear development - Burgers of Hanoi GG

Pokemon Mini development - Mini Cookie

Magnavox Odyssey2 development - Red Green

Sega Dreamcast VMU development - Raining Squares

Nintendo GameCube development - Mama Bear Puzzle

Nintendo Wii development - Groundhog Puzzle

Sega Saturn development - Saturnade

Atari Jaguar development - Jagmatch

Sega CD development - Blackjack CD

Nintendo 64 development - Don't Be Square

Commodore 64 development - Tube64

Sega 32x development - Eight Queens

WonderSwan (Mono) development - Swan Driving BW

WonderSwan Color development - Swan Driving

Animal Keeper - a JavaScript and HTML5 Canvas game

3DO development - Space Invaders Invaders

Sony PlayStation development - The 11th Power

Sony PSP development - Newton Voyage

Nintendo DS development - Geoincursion

Gold of the Kingdoms - an XNA/C# homebrew game

Blue Elf 2 309-in-1 JAMMA PCB - troubleshoot controls not working

Fractals in JavaScript and HTML5 Canvas

Angry Video Game Nerd (AVGN) theme song on the Gameboy Advance

Novice calligraphy - Gothic hand, with letter guide

Video compilation of my classic console homebrew games

Seven segment display circuit with the 4511 decoder and the 4029 counter

A simple Atari 2600 joystick tester circuit

555 timer and 4017 decade counter - traffic lights circuit

Catch That LED! - an electronic game circuit

Capacitor study circuit

BlackBerry PlayBook development - Sheepish Bearings (Native SDK, OpenGL)

Neo Geo Pocket Color development - NGCollector

Neo Geo development - Neo Thunder

Atari 5200 development - Shooting Gallery

ZX Spectrum development - simple input/graphics example

Vectrex development - Scalar Ownage

Nintendo Virtual Boy development - Real Danger

Gameboy Color development - Burly Bear vs. The Mean Foxes (GBC version)

Sega Master System development - Burgers of Hanoi

Colecovision development - Mowleco

TurboGrafx-16/PC Engine development - Alddee

Atari Lynx development - Catkanoid

Nintendo NES development - Invaders must die!

Atari 2600 development - Snappy (batari basic)

Super Nintendo development - Bucket

Gameboy Advance development - smgbalib library

Airplane Vegas slot machine

Sega Genesis development - Gen Poker

(2004) Project One - first university game programming club project

Gameboy development - Burly Bear vs. The Mean Foxes

(2006) RGB Overdose - university programming contest entry