Perhaps the essential foundation course for the game programming degree at DePaul, is Action Games Programming. My first true training in the use of OpenGL, the course utilized Professor Linhoff's QE Engine completing assignments and projects using the core OpenGL pipelne from immediate draw mode to the use of Vertex Buffer Objects, mapping and lighting. In addition to learning how to use the graphic system, the objective of the course was to teach us the fundamentals of gameplay and mechanics, requisite linear algebra, collision, physics + motion, control, sound, and heads up display.
Each week a new assignment was completed with three small game projects as milestones which reiterated the weekly lessons leading up to them. Each of the three games were realized as fully 3d environments with 2d focused game mechanics
The first week long project was to create a two player pong game. The keyboard is used for the control of both paddles. Physics of the ball includes collision with walls and paddles, including “english” with off center hits. Two different power ups become intermittently available, one changes the size of the receivers paddle the other increases the speed of the ball. A simple hud keeps track of scores, wins, and title screens.
The second week long project was a recreation of asteroids, playable by keyboard or joystick and as a single player or two player game. Consistent with the classic game, the world wraps the edges with asteroids and players able to drift from one side of the screen to the opposite fluidly. A successful shot into an asteroid will break the rock into smaller pieces once the third smallest size is shot it is destroyed. Players change the orientation of ship with left and right arrows, thrusting with down arrow and firing with up. Space bar engages hyperspace transporting the player to a different but random location on the screen. Player art inspired and derived from Muybridge.
In the final project short project, we were able to design our own game. I opted to complete the game individually rather than in a group. At the time I was logging a lot of time in the iPhone version of Canabalt, a fantastically simple 2d game of rooftop running. Inspired by the game and considering how it would logically be made I began thinking about the opposite approaches of player moving in static space vs. player staying in place and objects moving. While the former is of course the logical narrative model for such a game, and given that I could never do such a perfect game justice, it became more interesting to think about the space just out of frame of the camera and how my version of the game might add a gameplay mechanic, while also revealing (in a kind of extra diegetic moment) a mildly humorous narrative twist. As in the original, the players character is running, and staying alive depends on the players ability to time jumps across the gaps between buildings, with speed increasing as time goes on. In my version however, players are provided with the ability to climb back up (in a Prince of Persia inspired ricochet jump between buildings) when falling in the gap. Should players continue to fall they eventually encounter a ground plane. If they aren't careful, they will then soon realize that the ground plane is actually a conveyor belt on which the buildings are placed. This conveyor belt will carry a player backwards from their objective direction and eventually to their death when they collide with the wall of death.
I would also like to mention that this particular course was by far and away the most tightly organized and delivered course that I have had the opportunity to experience as either a student or fellow teaching colleague. anThe way in which each weeks lecture enabled the week's assignment and the way each assignment coherently built on top of the prior week was very impressive. It makes complete sense that Professor Linhoff has been crafting a textbook from his course content and when it's complete I highly recommend others check it out. Thanks Joe!