Programming Projects

These projects represent my individual work for various classes at DigiPen.

Click HERE to download Visual Boy Advance to play DigiBoy and The Founding Patriot



Shader Programming Project - CS510

My shader project consisted of 3 things, water rendering, terrain rendering, and a Mario Galaxy style rim lighting effect. The water has many features including reflection, refraction, specular highlights, animated geometry, and interactive spume (the white foam around the edges). The terrain was textured based on the Y component of the normals. The dinosaurs in the scene are sporting shiny, bump-mapped skin with rim lighting.

Programmed in C++ and HLSL

Download the project!

Gameboy Advance Game - CS315

The Founding Patriot

At the end of CS315, everyone in the class had to create a Gameboy Advance game with at least two special features. I decided to go crazy and put in ...6? This game features music, sound, sprite animation, sprite rotation and scaling, rotated background, and parallax scrolling backgrounds. The feature that stands out the most is the stretchy legs of the Patriot himself which was done using look-up tables for sine, cosine, and tangent. The game character was inspired by the Primus song "The Phantom Patriot."

Programmed in C

Download The Founding Patriot!

Gameboy Color Game - CS315

The Adventures of DigiBoy

CS315 was one of my most favorite classes at DigiPen and I really got into my projects. This is a Gameboy Color game that can run on a real Gameboy. You can walk around, jump, bounce on the green pads, and die from touching the tank or the fire it shoots out. The goal is to touch the key at the end. It also features side-scrolling. The arced jumping was done using a look-up table.

Programmed in GBC Assembly

Download DigiBoy!

A-Star Path Finding - CS380

What's the quickest path from point A to point B? That's what the A-Star algorithm solves better than any other path finding algorithm out there. This project required that we not only implement A-Star, but path smoothing and string-pulling to make the resulting path even shorter by in effect "pulling the strings" tight around the corners.

Programmed in C++

Watch a video!

Bezier Curves - MAT300

In Math 300, students had to program a project that could render Bezier curves 3 different ways, Nested Linear Interpolation, BB-Form, and Midpoint Subdivision. Bezier curves are useful for things such as animation in games and can be used for bullet trajectories, movement, path-smoothing, and more.

Programmed in C++

Download the project!

BSP Tree - CS300

BSP Trees have been used many times in games. In this case, the BSP tree is used to display some 3D geometry without the use of a z-buffer. Back in the old days, memory was much too expensive so the z-buffer algorithm was out of the question. If you want to know more about BSP Trees and their uses, I suggest visiting the BSP Tree FAQ

Programmed in C++

Polygon Renderer - CS350

What would you do without a 3D-accelerated graphics card? Not much. Back in the old days, 3D games had to be rendered using purely software. In CS250 sudents had to Implement a 3D triangle renderer with texturing. In CS350 students had to implement a 3D arbitrary polygon renderer. Through these projects students can understand how a 3D card works and better understand what they are actually doing when programming shaders on the current generation of 3D hardware.

Programmed in C++

Specular Highlights - CS350

In order to make something look shiny in games, a lighting technique called the Phong Lighting Model is often used to create specular highlights on objects depending on the angle you look at them and the position of the light. The technique is well-known but this version was programmed entirely in software without the use of a 3D accelerated graphics card.

Programmed in C++

Bump Mapping - CS350

You want something to look detailed and bumpy but you just can't spare the extra geometry. That's where our old friend bump-mapping comes in. Bump-mapping is a technique where you perturb the surface normals of an object and render it using those new normals with whichever lighting model (usually phong) that you want. The downfall of bump-mapping is that the bumps do not occlude eachother or have shadows and don't show up in a sillouette. Modern techniques such as parallax occlusion mapping and relief mapping attempt to solve these problems.

Programmed in C++

Spherical Environment Mapping - CS350

Spherical Environment Mapping is a technique which allows an object to reflect its environment. The normals of an object are used to look up into a spherical image and that color is displayed on the object's surface. Although this version was programmed entirely in software, Microsoft has a good link which describes how it works.

Programmed in C++

Javascript Game - CS420

Stop The Dancers!

Javascript can be used to make web-based games and that was what this project was all about. This game has whack-a-mole style gameplay with dancers instead of moles. You have to click as many as you can before time runs out. Your high score is displayed on the left.

Programmed in HTML and Javascript

Play the game!

Flash Game - CS420


This is a simple Breakout game I made in my CS420 class. Flash is widely used on the internet for all kinds of games, banners, and streaming videos.

Click START to play!