Sean Kelly - Video Game Engineer

Software Gallery

Building Virtual Worlds Projects
the Galaxxon Sh'm'up Series
Other Game Software
Other Non-game Software

Building Virtual Worlds

A mandatory first-year course at the Carnegie Mellon University Entertainment Technology Center.
LinkDescription
Pennsylvania Jones and the Headdress of Nefertiti Year: 2007

Platform: Panda3D/Python + Playmotion
An IR-camera-driven shadow detection system for a large projector screen.

Info: An Indiana Jones themed adventure performance in which multiple actors perform in front of and interact with environment and props on the Playmotion screen.

Features:
* PM code is tolerant of multiple actors
* Flickering torchlight moves with actors when inside the ruins
* Modified Bamboo project shaders to make this the only shader-utilizing PM world of '07
* Final showing featured giant paper mache boulder crowd-surfed by the audience for the obligatory Indiana Jones boulder gag

What I did (beyond being the only programmer):
Having come fresh off Seasons, another Playmotion acting world, I knew the ropes, so to speak, and could do a much better job managing the content for Pennsylvania. I'm rather proud of hacking up the Bamboo project's CG shader generation code to make a compelling per-pixel lighting system which still ran on the older versions of Panda required for the Playmotion interface. I also did some fine-tuning of models and motion paths, and the parameters and flat art for a very convincing dust/debris particle system. Finally, while the entire group pitched in on refining it, the whole Pennsylvania Jones theme was originally my idea, so I had substantial creative contribution on the various PM interaction gags.
The Four Seasons Year: 2007

Platform: Panda3D/Python + Playmotion
An IR-camera-driven shadow detection system for a large projector screen.

Info: A technological adaptation of an old Russian fairy tale about a girl being sent out into the harsh winter by her evil stepmother. Through the assistance of benevolent seasonal spirits, the girl is able to find flowers, strawberries and apples to infuriate her stepmother, who is ultimately frozen by the final spirit, Winter.

Features:
* Human actor interacting meaningully with virtual characters
* Solid moral story told in "under 3 minutes"
* Video transitions and other film concepts used to speed story

What I did (beyond being the only programmer):
The Playmotion is a much stronger platform than it was in previous years, but for a live performance I still had to coordinate closely with our actress and producer to man numerous hotkeys while following a theater-style cue script. Since most of our virtual scenery elements were cartoon or other animated figures, I wrote up an animated flat subclass to encapsulate the display geometry, frame texture list, animation timing and bilboarding calculations. I also did all the art (anything not already incorporated into a model or flat) for the particles and other visual effects used in seasonal transitions.
Crap Dodger 5000 Year: 2007

Platform: Panda3D/Python + Playmotion
An IR-camera-driven shadow detection system for a large projector screen.

Info: A simple action collect-and-dodge game played live on a large screen.

Features:
* PM detection of hands, head and full shadow edge
* Gradual speed and difficulty increase
* High score recording/display

What I did (beyond being the only programmer):
I was pretty much solely in charge of the design and mechanics of this world, as well as the technical implementation. I produced for this round, so I also served as the hub for getting all the artist, modeller and sound contributions organized. Because our sound designer was focusing mainly on BGM, I found and generated most of the sound effects used in the game. The biggest challenge of the project was probably finding the balance point and rule changes to ensure a novice player could make meaningful progress without making an experienced player wait minutes on end before being challenged. Inserting rule and mechanic caveats to keep the player from, e.g., staying offscreen the whole time was also fun. Requiring the player to grab some items while avoiding others was a good start, but things finally heated up when the mechanic was revised from "game over when hit" to "game over when time's up, getting hit reduces time, collecting items increases it."
Cook it Up! / Grandmama's Kitchen Year: 2007

Platform: Panda3D/Python + Jam-O-Drum
A large round projector table with 4 evenly-spaced stations around the perimiter. Each station contains a spinning ring around an impact-sensitive drum.

Info: A game designed for a "naive user." 4 players participate in multiple rounds of a cooking competition by choosing up to 3 ingredients off a moving belt and stirring them in a virtual pot. Each dish is evaluated by the central chef character and assigned a rating on a 5-star system.

Features:
* Hundreds of ingredient combinations
* Simple, intuitive interface
* Hundreds of voice samples, with model lip-sycing
* Free-play mode at end of game

What I did (beyond being the only programmer):
My biggest contribution to the world was probably the dish naming algorithm. Starting with a large list of ingredient metadata, I was able to design a system which would give any possible combination of ingredients a convincing name, image, and rating based on the number and order of ingredients used. The system featured multiple levels of visual, naming, and rating overrides, so if we weren't satisfied by the algorithmically generated output we could insert our own custom data. I also, for better or worse, put my foot down after the world received scathing reviews at interim, insistig that we yes, fix the big problems, but more than that just settle on one idea, implement it in full, then polish it until it was really fun. To our credit, Cooking World stands to displace Baseball as the premiere JoD demo world for guests and tour groups.
Lego Warehouse Year: 2007

Platform: Panda3D/Python + HMD
A head-mounted stereoscopic display coupled with limited 6-axis motion tracking.

Info: An immersive LEGO action horror puzzle game. The guest performs the role of a crane operator in a LEGO block warehouse and must clear a path for a panicked LEGO worker to reach the exit ahead of a malicious LEGO skeleton monster.

Features:
* Multiple ways of interacting with protagonist/antagonist
* Randomly generated warehouse layout every run
* AI characters balance attempts to steer towards exit with taking any paths the guest may have opened
* High-quality rendered intro video and end screens

What I did (beyond being the only programmer):
I was left in charge of many mechanical details once we decided as a group on the world theme. Our sound designer wanted to code, so I ended up juggling some of the sound effects and attempting to provide specifications for code blocks which I could afford to outsource and integrating what I got back. Unfortunately, some of our sound designer's more advanced AI code relied on changes he'd made to the warehouse data format and simply could not be reconciled with my own code at the last minute, although I did take some of his ideas and behaviors and attempt to reproduce them in the AI I'd written in the meantime.

Galaxxon

My own classic shoot-'em-up IP which I continue to iterate on. Titles below Galaxxon III are provided mainly for context, not as representations of my current skill.
LinkDescription


Galaxxon Legacy (OSX .dmg)

Galaxxon Legacy (Windows .zip)
Year: 2007-2009

Platform: C/C++ Mac OSX, Windows XP (KDE version originally developed, but is presently discontinued)
- PowerPC or Intel processor (500MHz or higher recommended)
- OpenGL graphics card capable of basic texturing (multitexture support recommended)
- Audio hardware recommended

Info: The year is 3107. Generations have passed since the Galaxxon Wars of the late 30th and early 31st centuries. Fact has grown into legend, legend has grown into myth, many tales have been handed down of the great air and space battles waged by enlisted pilots and freelancers, not to mention the Legendary Pilot who almost singlehandedly repelled two invasions and chased the Alien threat back to the Great Rift where they were sealed for many years. The current era of peace does not sit well with the youth who grew up to the stories of yesteryear and are itching for adventures and daring heroics of their own. Join the story of this new generation of pilots as they explore and expand the known universe and carry on the Galaxxon Legacy.

Features:
* Complete chains of plot-driven missions across a wide range of worlds!
* Build your flagship into a unique and incredible fighting machine!
* Amass and arm your own fleet with nearly any ship and weapon in the game!
* Create your own ships, weapons and missions with easy ASCII editing!
* Be blown away by parallax backgrounds and bump-mapped sprite graphics with environmental lighting!
* Rock out to an original soundtrack rendered in real time by the proprietary chiptune audio core!

What I did:
Since my original partner, Matt Fister, dropped off development, I have touched nearly every part of the code. During original development, however, I was responsible for the basic engine / game mechanics, graphics, and pretty much everything connected to the menu system (including shopping, upgrades, save/load, mission hierarchy), and of course, the IP. Matt designed the mission code, enemy AI system and particle system. I have since integrated chiptune audio, revamped the particle system to handle a wider range of effects, and added a couple new AI and level features, plus a few more assets. As a final act on the project, I successfully resurrected the Windows build under Cygwin, which was an exercise in hating Windows, but needed to be done.
Galaxxon IV
(Unreleased)
Year: 2005

Platform: nbasic / Nintendo Entertainment System (emulator)

Info: The aliens have been quiet. Too quiet. As Earth's greatest alien expert, not to mention grade-A pilot, it was your task to pass through the great rift, sealed for so many years behind a class 6 force field, and explore the aliens' home universe. What you find there, however, is enough to change humanity's very concept of the alien threat!

Features:
* Explore a vast, interconnected maze of subterranean caverns as you find your way ever nearer the alien military core!
* Battle swarms of military drones and huge secret boss weapons!
* Discover new technologies beyon Earth's wildest dreams and adapt them to your own use!
* Meet and interact with a host of lifeforms from beyond the rift!

What I did:
Very little, I'm sad to say. The idea was for a hybrid side-scrolling shooter + search-and-explore. Something like Blaster Master or else Metroid meets R-Type. I spent a few weeks hacking away in nbasic trying to prototype an engine. I really wanted to try this on the NES, but for the volume of map data required for my concept, I would need a pretty snazzy compression scheme. What I got almost working was a routine which would take a binary array of tile 'solidity' data from memory and fill in the gaps, smooth the edges, etc. before rendering it algorithmically from a fixed tileset. Graphically the system worked wonderfully, however I couldn't quite get the visual output to line up with the mechanical level map, particularly after turning around and scrolling 'backwards' a ways, and ultimately decided it would be far easier to do the game justice on a platform where I wasn't having to work out brilliantly convoluted solutions to its most fundamental and mundane problems. The game is still on my backburner, indeed it very nearly became Legacy, and I may try it as a 3D PC/Mac sidescroller once I'm satisfied with Legacy.
Addendum: After writing some NES demos in pure 6502 Assembly, I've pinned down some bugs in the NES assembler I was using for Galaxxon IV, notably in the left and right bitshift operations, which were a fundamental part of my map algorithm. Couple that with the fact that nbasic itself has some known flakyness and it could very well be that my algorithms themselves were quite sound, but weren't destined to work short of my embedding actual bytecode in from the start. And again, at this rate I'm more likely to reenvision the game in C++ or Actionscript than pick the nbasic source back up.

Galaxxon III (NES ROM + docs) Year: 2004

Platform: nbasic / Nintendo Entertainment System (emulator)

Info: After confronting the vicious alien fleet twice, the Unified Countries of Earth decide to take the fight to them, liberating the worlds they have overrun and tracking down their home system to put an end to them permanently. To do so, Earth's greatest engineers construct a weapons system capable of eradicating a whole fleet at a time. The catch? It needs to be calibrated. To that end, you have been called back one last time to pilot your trusty GalaxTec Mk. 2 into the fray and stream back data. The fact that Earth isn't expecting you to handle the threat yourself, however, somehow fails to be reassuring as soon as you see what you're still up against...

Features:
* Visit 6 colorful and distinct worlds with original soundtracks!
* Battle waves of up to 6 aliens at once. Be prepared for varieties you've never seen before!
* Achieve up to 5 levels of power with a new upgradable blaster!
* Race against the clock in a unique time-based level system!
* See the MMC3 mapper pushed to its limit to deliver remarkable transparency and color blending effects!

What I did:
The works. Start to finish. In a half-semester. Kudos to Bob Rost for providing and teaching the nbasic and nesmus languages without which I wouldn't have had a clue where to begin. What I'm probably most proud of in Galaxxon III is the MMC3 graphics trick. By bank-switching part of the tile map every frame and creatively using the sprite masking flags I pulled off "transparency" and upwards of 10 perceived colors from a single 4-color palette.
Galaxxon II (zip'd Mac classic binary) Year: 2001

Platform: C++ MacOS

Info: It's happening again. As you step into your brand new enhanced Mk. 2 GalaxTec fighter, you can't help but think back to the great Galaxxon wars of 2996. At least you now have the advantage of the InstaLock homing nuclear mine, a notable step up from the lately retired GalaxTec smart missile. The government is even letting you test a new, top-secret short-range teleport unit, should you find yourself stuck on an alien's windshield with an overheated cannon. You feel rather smug as you scream through the strasosphere. Then you see the aliens...

Features:
* Experience 50 levels of increasingly fast-paced shooter combat!
* Utilize new technologies like the feintwarp and smart mine!
* Play head-to-head against a friend as they take control of the kamikaze alien invaders!

What I did:
Everything. This is the first Galaxxon I made solo. The lack of quality is less to do with my lack of teammates and more to do with I had just learned OpenGL, and had started C++ only a year earier.
GALAXXON
Lost to the ravages of time and the inexorable march of technological progress.
Year: 1996

Platform: LOGOWriter

Info: Pilot your GalaxTec space fighter against wave after wave of invading alien!

Features:
* Enjoy limitless gameplay at ever-increasing difficulty!
* Fight with standard blaster or intelligent homing missiles!
* Experience the thrill of electronic gaming in COLOR (where available) and audio effects from your PC speaker!

What I did:
Honestly, I don't remember point by point. I worked on it with a friend at a summer camp between 5th and 6th grade, and we both had our hands in pretty much everything. It was agreed, however, that this was more my game, whereas others were more his game.

Other Games

Various other playable game projects I have worked on.
LinkDescription


Electric Storm Slots Year: 2009

Platform: Panda3D/Python + Flash AS3

Info: WMS Gaming next-gen video slots prototype.

Features:
* Game-reactive light symphony!
* Eye-catching communal networked bonus event!
* In-game tutorial!

What I did:
I was effectively lead programmer on this, my final ETC project. Out of respect for our client, WMS Gaming, I won't disclose too many technical details (although I still haven't signed anything forefeiting my rights on the project). My biggest contributions were writing the initial working reels (slots) mockup in AS3, implementing nearly all of the 3D communal top-screen scene and bonus event code in Panda, and doing a major streamlining and bugfix on the reels game at the end of the project. However, I also integrated ideas from the entire team and created what became the final project logo, created all the symbols and a collection of other 2D assets for the reels game and top-screen, helped construct and then single-handedly plumbed the electronics (1 server, 3 client PCs, 3 DMX dimmers, 23 light fixtures, 18 Phidgets I/O devices, 12 speakers and a network hub) on the team's physical slots-bank mockup, and composited the first and only video showing the physical cabinets, lights, and all game screens running in parallel.
Steam Roller Year: 2008

Platform: Panda3D/Python + Wiimote (Windows)

Info: A 3D test of speed and navigational skill.

Features:
* Active Wiimote(TM)-driven gameplay! (where available)
* Realistic 'driving' on terrain of all angles- even loops!
* Adaptive sound effects!
* Flexible/rearrangable segmented track implementation!

What I did:
This was the official TA 3D game project for the 2008 National High School Game Academy. I was the only programmer on the game, working with 2 3D modellers. Working from a vague concept given by the program director, we pinned down the game details and aesthetic. I then wrote the engine, mostly from scratch (Panda is giving me collision registration, but I take the physics from there) and adapted the Panda3D Wiimote interface I'd built for Classroom of the Future. I also ended up doing all sound effects for the game, as well as the various flats, font/display elements, title screen and skybox texture.
It is possible to create a packaged installer for Panda3D games, but since this one has different operational modes (with vs without Wiimote) and relies on some external non-Panda background apps, I'm leaving it as a zip archive with teh various source and batch files eneded to run the game. The Panda3D engine required to run the game may be freely downloaded from panda3d.org. Wiimote functionality is contingent upon having a working Wiimote bluetooth setup. Various Bluetooth drivers exist, and compatibility is always fluctuating. I've had the best luck with certain older versions of BlueSoleil, but you'll likely need to google the current best solution.
Toy Story Mania
Year: 2007

Platform: Python/Panda3D

Info: A series of virtual carnival shooting galleries wrapped in a physical Disney park ride.

Features:
* Ask Google.

What I did:
I signed a NDA, for one, so I can't say too much. I wrote some specialty audio code, helped with simulation and debug systems, and tweaked a couple bits of core content. Schell Games in general handled the bulk of the design and implementation and may or may not get / pass on clearance from Disney to say more.

Roto Ninja (QuickTime movie preview - 83.6MB)

If the movie does not work as-is, try downloading it in a zip file
Year: 2007

Platform: C/C++ PC (KDE linux)

Info: A classic ninja puzzle platformer with an unusual spin on gameplay.

Features:
* Run, jump, wall-grab and rotate the whole world to traverse a series of mazes!
* Use your keen ninja senses to find nearby exits!
* Design your own levels to share with friends!

What I did:
This game was a solo project for a Game Programming course- the same one Galaxxon Legacy was born in. The assignment was to take a standard ascii-based level file format containing a mix of walls, windows, floors, open squares, mild hazards, severe hazards, and stairs/doors to adjacent levels and make a game which parsed the level files and did something interesting with them. The general sense was that the level format was designed for FPS-type games, but I've never really been into FPS, so I got creative. Walls became blocks, floors became aesthetic walls, windows became aesthetic blocks, mild hazards became special regions that could not be jumped through or within, and severte hazards became kill traps. Part 2 of the assignment was to implement an A* search process. I didn't really want to bother with enemies since all my level collision code was pretty much hardcoded to be player-centric, so instead I implemented "ninja sense"- a flickering lightning trail which would, briefly, show the shortest clear path to the level exit. If you look closely, you'll also notice that I prototyped Galaxxon Legacy's bump-mapped sprite code on the various background textures in RotoNinja. I have since heard from other students taking the Game Programming class that the professor is still showing RotoNinja off as an example.
NES 6502
If you have a Verilog simulator, let me know and I'll see if I can dig up the source.
Year: 2006

Platform: Verilog, FPGA

Info: The CPU of the NES, reproduced in Verilog and synthesized to a prototyping board.

Features:
* Cycle-accurate instruction handling
* Interface with other NES components
* The ability to run actual cartridge code

What I did:
This was my part of my ECE graduation capstone project. The entire project was to design or reproduce a hardware video game, likely at an '80s level of technological advancement. My group bit off a little more than we could chew- the whole NES on a protoboard- and very nearly made it. We certainly got farther than any other academic team in a single semester. My contribution was the CPU, designed to spec from the most detailed documentation I could find online. To be honest, I did not in fact write the ALU within the CPU, but having written numerous more complex ALUs for other chips in other classes, I used the ALU as an instructional tool for a team member who had never worked with Verilog, and between my suggestions ahead of time, my coaching during development, and my debugging of said team member's final module, the end result was just about as I would have implemented it. We did not have time to debug the final assembly of all components, but we were able to plug in actual NES cartridges and I verified that instructions were executing correctly to the extent of my understanding. Commercial games did not play on the final assembled system, my best guess is because the video chip was not holding the vblank interrupt line long enough for my CPU to see it. This is understandable- no documentation we found was quite clear on whether it was the video chip's responsibility to hold the line for 3 of its own cycles to make 1 of the CPU's cycles, or for the CPU to use special edge logic to latch a signal present for less than its half-cycle, but the logic required either way was going to be ugly by the time we recognized the problem. Since practically all NES timing is done based on the display framerate and vblank interupt, any game we tried quickly found its way into a wait loop which we had no designed way to break.


HexS (NES ROM + docs) Year: 2004

Platform: nbasic / Nintendo Entertainment System (emulator)

Info: HexS is a strategic thinking game in the vein of Go, Othello and Checkers. Starting with a limited number of pieces, you must plan each move to capture as many of your opponant's pieces as possible while leaving your own pieces safe.

Features:
* Experience the game of strategic board conquest!
* Pursue different strategies to yield infinite game variety!
* Play alone against computerized AI, play against a friend, or watch 2 AIs duke it out!
* Edit the board itself for over 4 septvigintillion possibilities! (that's 4 quattuordecillion for you Brits)

What I did:
I implemented HexS from the ground up. The gameplay, however, is almost straight from an old DOS shareware game 'Hexxagon' by Jason Blochowiak. I changed the endgame logic up a bit to make it easier for the NES to assess, and made the board editing more flexible just because I could. Once I'd converted the game's hexagonal grid to a rectangular memory array, I figured I might as well use all the screen realestate. The whole hexagon-to-rectangle thing also proved tricky for the graphics since the game is so color-sensitive but the NES assigns palettes in large rectangular blocks. If you look closely, you'll notice the corners of some border green/teal hex cels have a teensy bit of red/blue coloring, and that the hilight/shadow on the red and blue beads is actually green/teal once they're placed. Another tricky bit was making the AI for the game. The NES has barely enough memory to store one game state, let alone a large search tree. Thus, I make use of a shallow greedy algorithm trying every move the AI can find from the current state and choosing (theoretically) the one with the best pieces-gained to pieces-exposed ratio. There's a glitch somewhere which makes it unpredictable in even this simple decision, but it was still good enough to beat me a few times during development, so I left it. On another tech note, since the only good way to do timing in NES games is by framerate interrupt, I had to break up the AI search loops to distribute them across multiple calls so the vertical blank wouldn't kill the AI and it in turn wouldn't stall the framerate.
JDE core (.zip of .jar and assets)
Won't be much use without Demo dances (.zip of dance directories)
Or just try it!
Year: 2003

Platform: Java (applet)
Demo provided as-is and without warranty. It is known to have odd behavior such as continuing to play music long after being shut down. You have been warned!

Info: A rough and crunchy DDR engine for Java. Intended for use on websites.

Features:
* Play DDR in your web browser!
* Make your own tunes and dances to set up a JDE arcade of your own!

What I did:
I made this between the time I discovered DDR and the time I actually had a DDR rig of my own. Development kinda stopped once I got Playstation 2... Still, the game is playable if you can tolerate a few Java quirks (for instance, click outside the applet box and keypresses stop registering). I'd only had a little formal algo training at this point, so working out how to store the dance data, register timed hits, and not keep steps around hogging memory if the player missed them was challenging. This may be the only game I have made to date for which I designed a content editor (presently lost to posterity), since manually tapping in steps as the music plays is much easier than going through with a stopwatch and a microscope typing out ascii values.


TI RPG (.zip of TI Connect assets) Year: 2000

Platform: TI-83 calculator
TI-83 Plus, Silver or later model strongly recommended for speed.

Info: A semi-graphical Final Fantasy style RPG framework written completely in TI-83 BASIC.

Features:
* One of the only party-based RPGs for the TI-83!
* Fully graphical battles, ASCII graphical maps!
* Fits completely within the original TI-83 memory!
* Written in TI-BASIC, not ASM, so it won't risk locking your entire system!
* Included documentation so you can write your own content!

What I did:
I got bored on a family vacation abroad, so I started making an RPG. I got bored during pit orchestra rehearsals the following semester, so I finished it up. I'm proud to say that of the RPGs available for TI-83 back when I was working on this, my own cleanly trumps pretty much anything else I found, including many games written in TI-83 assembly language. Unlike numerous plot-based TI games, I use significant amounts of ASCII and bitmap art rather than relying solely on menus. Unlike even the best ASM games of the day, I support a full party of 4 characters chosen from 6 distinct classes. The one big downside is that the game runs SLOWLY. This is in large part due to the ways I found to encode and decode large binary arrays without access to any data format other than standard TI calculator floating point variables. Knowing what I know now about operation speeds, optimizing repeat actions, and stack management I could probably speed the code up substantially if I combed through all of it again. Unfortunately, there's so much code and data that if the game is run for too long, a TI OS/interpreter memory leak will cause the game to crash, and because of the constraints of the language that whole huge memory-filling codebase is a hodgepodge of completely uncommented conditionals, gotos, and unnamed variables, so I'm content to call the project dead.

Other Software

Things which are not, strictly speaking, games, but which nonetheless have some entertainment value.
LinkDescription
Mobius Strip Year: 2008

Platform: Irrlicht Engine C++

Info: It's a secret to everybody...

Features:
* Ask in 2013

What I did:
This was my second full project with the ETC. Our client was Sharp Corporation; I was the producer on the team consisting of myself, a single 3D artist, a single sound engineer, and a single interface designer. Primarily, I served as lead programmer, learning the Irrlicht engine as I went. I was also the lead engineer, assistant interaction design, webmaster, campus IT, and assistant video tech. I was also starting my side-project Tekunoma as an elective. Unsurprisingly, this was the only semester during which I found myself devoting all of my cycles to academic work.


Mandelbrot Set (NES ROM + source) Year: 2008

Platform: 6502 ASM / Nintendo Entertainment System (emulator)

Info: Take a point called Z in the complex plane and let Z1 be Z^2+C...

Features:
* Trippy colors!
* For-real fractal rendering via quasi-direct-draw system!
* A whopping 16+ bits of custom-coded mathemtical precision!
* Bad-ass ****ing soundtrack remixed from Jonathan Coulton!

What I did:
I wrote this more or less just because I could. After listening to some Jonathan Coulton, I decided some of his tunes would sound really awesome remixed for NES. The obvious question is what to put in the background so it's not just a dead black screen with music. Mandelbrot Set gave some pretty explicit instructions, so I decided "Why not? I'm decent enough with digital math to hack 16-bit fractional complex algos on an 8-bit integer CPU!" About 5 evenings later, I had the fractal rendering. 3 more evenings and I had controls, palette cycling, a few minor efficiency tweaks, and the soundtrack. Of course, it's all about the soundtrack. The graphics just look pretty and don't interrupt ;)
Gray Box (NES ROM) Year: 2008

Platform: 6502 ASM / Nintendo Entertainment System (emulator)

Info: Back in the 80s, Nintendo released a huge sucess...

Features:
* 8-bit nostalgia

What I did:
I decided that the NES dev scene needed a little fresh something in celebration of the Famicom's 25th anniversary. So here's to 25 years of the blinking gray screen of death!

chiptune (.zip of Intel & PPC command-line binaries with docs) Year: 2005-present

Platform: C/C++ unix (most recent builds currently only available for OSX)
Audio engine also available as a c++ library for other projects.

Info: A simple PCM audio synthesis package designed to recreate the sound of the basic waveform audio chips in classic console games like the NES, GameBoy, GameGear and C64.

Features:
* ASCII parser for an arbitrary number of channels given as separate files
* Rectangular, Triangular and Sine pulse waveforms, plus white noise and 16-step mock-triangle pulse
* Volume, envelope, frequency sweep, and panning control, plus automated vibrato & tremolo
* 8- or 16-bit PCM wav output
* Ring modulation between arbitrary numbers of channels

What I did:
After being a game music enthusiast for many years, I took a student-taught course on NES game development and learned how exactly the NES pAPU sound chip worked. I was then inspired by Pixel-san's .org sound engine used in his Doukutsu Monogatari (Cave Story) PC platformer and available as a stand-alone player for Windows. I decided to create my own simple unix-based sound synthesis tool I could run under OSX and have been gradually fleshing it out ever since. After making it competent enough to create enjoyable music (versions 1.x), I ripped apart the old codebase and split it into an independent library and a CLI wrapper (versions 2.x). The chiptune audio library is currently being used in Galaxxon Legacy.
Raytracer Gallery Year: 2006

Platform: C/C++

Info: A Computer Graphics course ray-tracer which I put some extra effort into.

Features:
* n-bounce raycasting
* transmissive/refractive material handling
* anti-aliasing

What I did:
For the lab we were given just enough stub code to tie our hands as far as how we could implement the raytracer. We were required to do a basic recursive n-bounce raycaster that could output a jpeg, and encouraged to experiment with other more advanced concepts such as reflection, refraction, spatial partitioning and photon mapping. I put all my extra effort into accurate reflection/refraction/transmission modeling, including going back after the project was over to tune a couple equations based on my old high school physics/optics notes. I have also added anti-aliasing since the course ended. If I ever revive the code on my new laptop, I'll probably try to make it multithreaded and possibly add photon mapping / caustics. While I understand spatial partitioning at a concept level and can see how it greatly improves efficiency, I'm not sure I grasp how to implement it without doing more calculations to determine where geometry lies than I gain back by not checking all geometry during casting.