Skip to main content

Ben Gottemoller

Computer Engineering · Graphics Programming · Systems Development

Welcome to the archives. A collection of my programming projects from the age of awe and wonder.

Projects

Worst Game Ever
32 photos

Worst Game Ever

December 2002 C++ / DIRECTX 8.1 / 3D GRAPHICS

3D space shooter featuring particle engine, procedurally-lit planets with atmospheres, gravity simulation, multiple weapon systems, and 3DS model support. First complete 3D game project demonstrating fundamentals in rendering and game architecture.

Read more

About six months ago, when I last had a chance to work on this project, things finally started coming together. As far as gameplay goes, it is still the WorstGameEver but that will hopefully change when I get some freetime. For now at least it looks a bit nicer.

A lot of changes have been made this time around. Among the things I can still remember implementing (since last time), there's a particle engine, warp drive effect, planets, atmospheres, lighting, gravity (if you turn it on), several weapons, a sky sphere, 3ds file support, semi-scripted worlds, an analysis routine to help setup the game for your hardware, and probably a few other things I've forgotten about.

The game (which has turned into a space shooter) has 8 weapons (there will be at least 50 when I'm done). Planets are rendered with atmospheres and correct lighting etc. Gravity calculations are working out pretty well too. It still has a long ways to go but It's not nearly as crappy as it used to be. 3DS models now load correctly, you can alt-tab in and out of the game, there's sound, a pretty cool warp drive effect and a few other things.

The controls are described in the readme file. This is my first attempt at a professional 3d game and I'd love to hear any comments whether good or bad.

Development Log

December 14, 2002
Well, It's only been 6 months since I last updated everything but I finally got around to it. What better time could there be than finals week =:) The current projects page is updated and the latest (6 month old) version of WorstGameEver is available. I'm hoping I'll get some time to code over christmas break, I haven't worked on WGE for waaay too long.
June 20, 2002
It's been way too long since I made any changes here but I'll get around to it eventually. The WorstGameEver project has come a long ways in the past month. I finally had a little time to work on it and I think it's starting to look somewhat decent. When I get a few more things in place I'll toss an updated demo up. Right now the game (which has turned into a space shooter) has 8 weapons (there will be at least 50 when I'm done). I just started the summer session at UIUC so time may become a little more scarce (again) but I'll do my best to put in a little work on the project every so often. Cheers.
Linux Alan Parsons Project
24 photos
Playable

Linux Alan Parsons Project

December 2002 X86 ASSEMBLY / SDL / SOFTWARE RENDERING

Complete game written entirely in x86 assembly in under two weeks for ECE 291. Originally Windows-based, ported to Linux using only LibC and SDL. Runs at 25 FPS on 800MHz Athlon with fully software-rendered graphics.

Play Online
Read more

This one was a lot of fun. I worked on it with 3 of my friends for the final project of our ECE 291 (Computer Architecture II) class over the summer. The entire game was written in x86 assembly in just under 2 weeks and it took me a 3rd week to port it to linux during break.

The game originally ran under windows using several helper libraries provided for the class. Now it only makes use of LibC and SDL. The game is completely done in software and runs at around 25FPS on my 800MHZ Athlon which isn't too bad for our first assembly game.

The artwork and audio for the project total ~300MB, but you can now play the full game directly in your browser via WebAssembly.

Downloads

DIY Projector
52 photos

Digital Projector Project

June 2003 HARDWARE / DIY / OPTICS

Homemade digital projector built from a Viewsonic VG150 LCD panel and 3M 9700 overhead projector. LCD mounted directly on fresnel lens with PC fan cooling. Total cost ~$500. Gaming on a wall-sized display.

Read more

These are the pics of my homemade digital projector and the results so far. The LCD panel I sacrificed was a Viewsonic VG150 and the overhead projector was a 3M 9700. The 2 PC fans are connected in parallel to the backlight connection on the LCD's driver board and the LCD is now mounted directly on the fresnel lens to maximize pixel coverage.

The LCD panel and frame construction was the most expensive part, coming to about $300 for materials and the LCD monitor itself. Construction went smoothly but I was pretty lucky. Mounting the LCD panel once it was out of the monitor was fairly scary because the main ribbon cables seem very fragile, not to mention the glass panel itself.

As far as gaming goes, I think my addiction was bad enough before I built this. The shots are a bit blurry but you can't pause the game (Freelancer) without the menu popping up. I am really impressed with gaming though on this. I plan to install a TV card within the next week so hopefully by the time the fall semester begins I'll have the setup perfected for the PS2, cable tv, movie server, and music vizualization plugin.

Well, that's pretty much everything. The whole project ended up costing around $500. If you're looking to do this yourself I'd recommend using ebay for everything, as the LCD monitors can be found used for a lot less, and projectors can actually be found at reasonable prices. One other thing I'd highly recommend is to use something other than a wrinkled bed sheet for your screen :P

Raytracer
1 photo

Raytracer

December 2002 C++ / CS318 / COMPUTER GRAPHICS

Raytracer implementing reflection, refraction, and lighting models for CS318 machine problem. Demonstrates fundamental rendering techniques with significant optimization potential through fixed-point mathematics and algorithmic improvements.

Read more

This was written for the 4th mp (machine problem) in my CS318 class. It actually ended up being fairly easy except for a small bug gamedev helped me with.

When I get some freetime I'm going to try this again in assembly and see how close I can get to real time. There's a LOT of room for optimization in this project. Especially considering the project framework (not written by me) uses doubles for everything instead of float. I think fixed point along with a faster less accurate sqrt function could speed things up quite a bit too.

Downloads

Note: Scene files are included in the source code package.

MP3 Visualizer

MP3 Particle Visualizer

CS318 C++ / PARTICLE SYSTEMS / ANIMATION

3rd machine problem for CS318. Particle engine with spring particles, collision detection, gravity, key frame interpolation using Catmull-Rom splines, and hierarchical motion support.

Read more

This was my 3rd mp for CS318. I kinda got carried away on it though, since I could have made it look half as nice and still gotten full credit.

The demo includes several things. There's a particle engine with a few little features like spring particles, collision detection, and gravity. There's support for key frame interpolated motion using catmul-rom splines. There's Hierarchical motion support which ended up looking pretty cool. And a few other small things.

There's a few animation sequences already with the demo. I had a pretty good time writing this one, even if I did spend a little more time than necessary. Enjoy.

Raycaster

Raycaster

~2000 C++ / SOFTWARE RENDERING

Implementation of Wolfenstein 3D-style raycasting algorithm. Demonstrates elegant efficiency of 2.5D rendering technique that enabled early first-person games. Includes collision detection and real-time navigation.

Read more

This is one of my favorite programs. To this day I can't believe how simple raycasting is. Whoever thought of it is a genius. The program was easy to write and I had awesome results.

If you don't know this, raycasting is what made Wolfenstein3D possible. It's extremely efficient when you do it right (Note: this does not mean mine's optimized. Mine doesn't hold a candle to Wolf3d.). Hope you like it.

Also, if you recompile with collision detection off you can run around your on ram chip (LOL...You'll have to look at how the map is stored/drawn if you want to figure out what I mean by this.).

Terrain Generator

Terrain Generator

~2000 C++ / DIRECTX / PROCEDURAL

Fractal terrain generator using Diamond-Square algorithm. Software-rendered with DirectX 2D engine. Procedurally generates infinite terrain variations.

Read more

While you may notice a *cough* few bugs with this program (No z-buffer), it's still pretty neat. It uses the "Diamond-Square" fractal algorithm (I don't remember where I learned it) to generate the random terrain.

Everything you see is rendered in software and It was all done with my 2D DirectX engine. It took me a lot of work but It was worth it. It's fun to play around with. Be careful not to up the iteration count too high though or your machine will come to a screeching halt. I forget the formula but I think 7 iterations requires something like 300MB of RAM.

BioKey

BioKey

Summer 2000 C++ / MFC / BIOMETRIC SECURITY

Biometric fingerprint-based building security system integrating Veridicom scanners with relay-controlled electronic locks. Server application monitors multiple USB scanners, validates against database, and triggers access control.

Read more

This is probably my least favorite program. I wrote it during the summer of 2000 for a company that found my resume on monster.com. It's a biometric locking system for building entrances.

The program runs on a central server. A relay board (I wish I still knew the model #) is connected to COM1 and some number of Veridicom fingerprint scanners is connected to a USB port through a USB hub. The software recognizes the scanners and allows them to be named as well as associated with relay switches.

From there it monitors the scanners for a finger. If one is found and validated with the database, the appropriate relay is triggered. This activates an electronic locking mechanism on the door the person is at granting access to the building.

There are a few reasons why I don't care for the program. First, It was my first hardcore MFC experience and the architecture is horrible (If it crashes it's because I didn't know about semaphores when I did my multithreading). Second, I got a $1000 dollar payment (scattered over a year) which I'm greatful for but never heard another thing from the company afterwards. It would have been nice to see the system in action. I guess that's just the way it goes sometimes.

Downloads

NetBackup

NetBackup

Summer 2000 C++ / WINDOWS / OPEN SOURCE

Automated network backup system supporting wildcard file selection and scheduled intervals. Files backup to any network location with appropriate permissions. Released under GPL.

Read more

I wrote this around the same time I wrote Biokey (for the same company in fact). It's actually somewhat useful for a company that needs to back files up on a daily basis.

It allows files to be selected (wildcards included) and regularly backed up at a given interval. The destination can be anywhere as long as the user name you provide for it has the correct permissions.

I was never paid or contracted for this program so I've GPL'd the source. It's yours if you want to mess with it.

Deepsky

Deepsky

~1998 DOS / BORLAND C++ / 2-PLAYER

DOS-based two-player game written on a 486 laptop during family vacation to California. Runs acceptably under Windows emulation. Includes custom drawing program for artwork creation.

Read more

The name doesn't really fit the game play but it's still not bad. I wrote this during my family's California vacation on a 486 laptop.

It's written for DOS but the windows emulation seems to be ok with it. The "Draw" (horrible name there too) program I wrote was actually to create the artwork for this game.

While I don't think this will be game of the year, it's still a fun 2 player game. One more thing. I used Borland to compile this and I have no idea if it will work with MSVC in case you're interested.

RemoteControl

RemoteControl

2000-2001 C++ / INDUSTRIAL MONITORING

Monitoring and control application for warehouse refrigeration systems. Developed for InterFaces to provide remote oversight of industrial cooling units.

Read more

A monitoring and control application for a warehouse refrigeration unit, developed for InterFaces during 2000-2001. The system provides remote monitoring capabilities for industrial refrigeration systems, allowing operators to track temperature, status, and control settings from a centralized interface.

UIUC NetBitch

UIUC NetBitch

2001-2002 C++ / WINDOWS 2000/XP / BANDWIDTH MONITORING

Bandwidth monitoring utility for UIUC's 750MB daily limit. Uses Windows performance counters to track network usage and prevent automatic cutoff. Custom skinned interface.

Read more

UIUC limits student bandwidth to 750MB per 24-hour period. Exceeding this quota results in automatic disconnection. After my roommate and I were cut off twice (a common problem among computer science students), I developed this monitoring tool to prevent future incidents.

The application uses Windows performance counters to measure bandwidth consumption in real-time, making it compatible with Windows 2000 and XP. The system can automatically cut off internet access when approaching the daily limit, preventing forced disconnection by the university.

Significant effort went into the custom window skinning—arguably more time than the actual bandwidth measurement functionality. The project remains unfinished but functional for its primary purpose.

Defender

Defender

High School (~1999) C++ / FIRST PROJECT

First game project, created as final project for high school computer science class. Early exploration of game programming fundamentals and C++ development.

Read more

Please don't laugh ;) and for the love of God don't look at the source code. Actually, don't look at the source code for any of the stuff on this site. I swear, I didn't know what the heck I was doing when I wrote half of the things on here ;).

This is actually the first game I ever made. It was for my CS class in high school. I got sick of doing the same old "Hello World" like projects everyone has to do when they learn to program. Since we got to make up our final project I decided to go with a game and I think it turned out ok.

Draw

Draw

~1998 DOS / GRAPHICS TOOL

Custom DOS drawing program created specifically to generate artwork for Deepsky. All ".q" art files in the Deepsky game were created with this tool. Written during California vacation.

Read more

Possibly the worst drawing program in history—but it accomplished its purpose. All the ".q" files used in the Deepsky game were created and can be edited with this software.

Written during the same family vacation to California as Deepsky itself, specifically to generate artwork for that game. The tool-building-for-tool approach proved valuable despite the rough implementation.

Warning: This is a DOS application and significantly less stable than my other DOS programs. It crashes fairly hard on Windows 2000. Proceed with appropriate caution.

GSM System Control

GSM System Control Environment

Summer 2001 C++ / INDUSTRIAL CONTROL / MFC

Control environment for coil winding machines developed at George Stevens Manufacturing internship. Interfaced with Emerson Drives UD70 drive controller for industrial automation.

Read more

I developed this mainly during the summer of 2001 at my Geo. Stevens internship. It was a lot of fun and I learned quite a bit about the coil winding industry along the way.

The company was recently sold and I don't know if the SYPT drive layer code was ever completed by Addison Electric, but it was starting to come together when I left. The software seems to be working pretty well.

One more thing. The password to the admin panel is "napster" and the password to exit is "gsm".

Downloads

WinClock

WinClock

~2000 C++ / WINDOWS / UTILITY

Alarm clock application for Windows. Supports multiple simultaneous instances with 8 different alarm sounds. Perfect for college dorm life.

Read more

Even though this is a really simple program It's still one of my favorites. The program is basically an alarm clock for your computer. It's good for college where you've got the computer in the same room that you sleep.

The nice thing is that you can run multiple instances of the program (click the icon multiple times). This allows you to have a few alarm clocks go off at different times of the day or have a whole slew of them go off at the same time.

There are 8 alarm sounds to choose from and if you have them all go off at the same time I guarantee it will scare the crap out of you. You will dive clear across the room to turn the awful thing off.

WinSleep

WinSleep

~2000 C++ / WINDOWS / UTILITY

Shutdown timer that automatically turns off the computer after a specified duration. Useful for listening to music while falling asleep without leaving the computer running all night.

Read more

A simple timer application that automatically shuts down the computer after a specified period. The primary use case is listening to music or other media while falling asleep, ensuring the computer doesn't run unnecessarily throughout the night.

Straightforward functionality with minimal complexity—exactly what a utility should be.

D3D Umbrella

D3D Umbrella

~2000 C++ / DIRECT3D / LIGHTING

First exploration of Direct3D. Umbrella demo with hardware lighting effects. Spent a day dissecting D3D sample code until achieving understanding of the rendering pipeline.

Read more

This application resulted from my first experience with Direct3D. I spent approximately one day systematically dissecting one of the D3D sample programs until I developed a working understanding of the rendering pipeline and API structure.

The umbrella model demonstrates hardware lighting with interesting hue effects. However, the demo requires graphics hardware with lighting support—it will look terrible on systems without this capability. Developed on a GeForce 2; compatibility with lower-end hardware was not a consideration.

Derivatives

Derivatives Visualizer

~2000 C++ / DIRECTX 6.0 / MATH VISUALIZATION

Mathematical visualization of derivatives. DirectX 6.0 application with 2D engine. Includes hidden particle engine accessible via spacebar + arrow keys.

Read more

I have no clear recollection of why I created this. When first learning calculus derivatives, visualizing them seemed interesting. The implementation uses DirectX 6.0 with my 2D engine (source included, though somewhat outdated).

Beyond the key commands displayed on screen, there's an Easter egg: holding spacebar while pressing arrow keys (left/right) reveals an old particle engine I was developing. Why I embedded it in this particular demo remains unclear.

Magic Lantern

Magic Lantern

~2001 C++ / SATIRICAL

Satirical program parodying the FBI's Magic Lantern surveillance system. Harmless but annoying demonstration. Close via left arrow + right arrow + shift simultaneously.

Read more

More of a joke than a serious application. Written to satirize the FBI's Magic Lantern keystroke logging system. We already have spyware; a government-engineered virus seems redundant.

The program won't damage your computer, but it will be annoying for a while. If it becomes intolerable, close it by pressing left arrow + right arrow + shift simultaneously. You can also uninstall it normally.

Disclaimer: I take no responsibility for any misuse of this software by others.

Experience

George Stevens Manufacturing

Software Development & System Administration Intern

2001–2002 / Elk Grove Village, IL

  • Programmed front-end user interface for coil winding machines
  • Researched and wrote communications code to allow the front end user interface to communicate with an Emerson Drives UD70 drive controller
  • Networked the office computers, setup a server to centralize data, and connected the network to the Internet

InterFaces

Software Developer

2000–2001 / Aurora, IL

  • Developed BioKey, a biometric fingerprint based building security system
  • Developed NetBackup, an automated, Internet based, file backup system
  • Developed RemoteControl, a monitoring and control application for a warehouse refrigeration unit

About

Computer Engineering graduate from the University of Illinois at Urbana-Champaign with expertise in low-level programming, 3D graphics, and systems development. This portfolio showcases early work in C++, x86 assembly, DirectX, and OpenGL, representing foundational experience in computer graphics and software engineering.

Education

University of Illinois at Urbana-Champaign

B.S. Computer Engineering, May 2004

Recognition

  • Eagle Scout, 1998
  • First Place, UIUC Engineering Open House 2003 — Asymmetric Capacitor Thrusters
  • Bitzer-Slottow Award, 2003

Contact

Email:

Resume

Resume