Game Programming Portfolio
A Hat In Time
A Hat in Time is a cute-as-heck 3D platformer featuring a little girl who stitches hats for wicked powers.
I joined the Gears For Breakfast team late in development, about 4 months before release, to help with final polish and bug fixing. I worked on the native C++ side of the game's modified Unreal Engine 3 codebase to add some optimization related features, and to move certain performance-critical UnrealScript code into native code.
I also touched many parts of the game in a limited capacity. For instance, I adjusted the player control a bit, and I reworked the ledge hang detection raycasts to prevent the ledge hang or ledge climb from clipping through walls in certain circumstances. I adjusted the difficulty of most of the game's bosses so they get easier if you die while fighting them. I made some visual adjustments for shaders and camera angles, I tweaked some of the user interface, and I fixed a bunch of bugs.
I'm amazed with what the Gears for Breakfast team was able to pull off with this game technically, aesthetically, and emotionally! I'm proud of the small part I was able to play in its release.
Get A Hat In Time
- Also coming to PS4 and Xbox One
Cave Story+ is the enhanced edition of a cult classic indie game, and one of my all-time favorite games!
My role in bringing the game to Nintendo Switch involved a number of gameplay enhancements in addition to typical porting tasks.
One simple change that I'm proud of is the addition of a Strafe button, which allows the player to hold a button to maintain their aim direction, for instance to walk backwards while shooting an approaching enemy. It enables a lot of new aiming control nuance while not over-complicating the gameplay with dual-stick controls.
We wanted to make certain parts of the game less tedious, especially for players who have played the game before. For this reason, I added the ability to carry more than one puppy at a time in the Sand Zone level, greatly improving one of the longest sections of the game while not impacting its challenge. For fun factor, I added physics to allow the puppies stacked on the player character's head to wobble in response to the player movement. I also handled previously problematic cases of leaving Sand Zone while carrying a puppy.
I also added the ability for other inventory items to stack, and used that to enable carrying an extra Jellyfish Juice, which reduces the amount of backtracking in the Bushlands level for savvy players who plan ahead.
Finally, I added the ability to skip character-by-character text printing out in text boxes, so you can press a button repeatedly to get through text-heavy scenes, which used to be incredibly slow and slightly cumbersome control-wise. I was careful to work this into the TSC (textscript) interpreter in a way that wouldn't break existing script command sequences such as cutscenes, since TSC interpretation and text printing are both handled by a large and delicate state machine.
I'm really happy with all the enhancements I was able to fit into this game on a fairly short schedule, and the Switch edition is certainly the definitive version at the moment.
Get Cave Story+
The Binding of Isaac: Rebirth, Afterbirth, and Afterbirth+
Most of my time at Nicalis was spent working on Rebirth and its expansions, Afterbirth and Afterbirth+. I was part of a core team of five programmers who developed the game and its expansions.
I worked on gameplay programming on many in-game items and enemies, but my main contribution was toward the game's bosses. I created or improved roughly half of the game's bosses. One final boss (Spoiler alert!) took about three weeks to develop its huge diversity of unique attacks and phases. It has about 50 or so bullet patterns, many unique mechanics, and some strategic attack selection rules to keep things fresh and challenging.
I added the drop-in/drop-out multiplayer feature. I added AI status effects, such as charm, fear and confusion that affect all enemy types. I added almost all of the game's easter egg seed codes, and the stackable seed system in Afterbirth. I rewrote the player controls to add analog input and fix some inconsistency in diagonal movement compared to axis-aligned movement, while staying true to the slightly slippery feeling of the original Flash game.
- Mac OS (Rebirth, Afterbirth, Afterbirth+)
- Xbox One (Rebirth)
- New Nintendo 3DS (Rebirth)
- iOS (Rebirth)
- Nintendo Switch (Afterbirth+)
Get The Binding of Isaac: Rebirth
- Also available on iOS, PS4, PS Vita, Xbox One, New Nintendo 3DS, Wii U, and Nintendo Switch
|1001 Spikes release trailer. Also check out the Polygon overview with Justin and Griffin McElroy.|
A hardcore puzzle platformer, focused on small levels and one-hit deaths.
The gameplay was developed by a core team of three programmers including myself.
One of my primary contributions was for player control. I precisely matched the player's capabilities to the original Aban Hawkins and the 1000 Spikes physics to ensure the classic level design continued working as originally intended. I also created all of the extra playable characters and their special abilities, including double jumps, wall jumps, ledge grabs, wall slides, machine guns and other unique weapons, jetpacks, melee attacks, and Super Mario Bros style enemy stomping, just to name a few. I also did a lot to improve the feeling of fairness and responsiveness in the controls: Finely tuned buffered inputs across all player states to allow early button presses to register for jumps, wall jumps, ledge jumps, attacks, and more. I also added ledge forgiveness frames to let you jump late after walking off a ledge.
I added the multiplayer features, including the 2-4 player Golden Vase game, and the 1-4 player Tower of Nannar and Lost Levels games. The main story mode is also playable in multiplayer. Players can drop in and out at any time.
A few of my other contributions: I rewrote the physics system, I wrote most of the game's pixel-perfect resolution scaling, and I created many of the game's menus and dynamic cutscenes. I also ported the in-house 2D game engine and the game itself to Mac.
It's a lot of fun once you understand the level design patterns, and all the playable characters add tons of replayability! Some day I want to figure out a way to make a tool-assisted speedrun of it, since it has a ton of really cool frame-perfect tricks.
Get 1001 Spikes
- Also available on PS4, PS Vita, Nintendo 3DS, Wii U, Xbox One, and coming soon to Nintendo Switch
|NightSky running on an iPad. In the video, I play through some of the early areas in the game, then the credits, and finally a few much harder Alternative mode levels, using the swipe control mode.|
For my first professional project, I worked on contract for Nicalis, Inc. to port the PC game NightSky to iOS. I did all of the programming for the port, starting from a PC version (NightSky HD) written in C++.
A large number of aspects had to be tweaked or completely rewritten, including image loading for PNGs, rendering in OpenGL ES, audio streaming, menu functionality, and all of the in-game controls. In the process I also fixed pre-existing bugs and added many iOS-specific features.
- Universal Binary
- Retina optimized
- Unique touchscreen control scheme
- Game Center achievements
- Great compatibility with old devices (2009 and up)
I built three separate control modes to suit the iOS platform: Swipe, tilt, and digital. I added support for analog input in the game's physics. Direct touch control was added to many of the objects in the world, such as cannons, removable blocks, and pinball flippers.
|NightSky running on an iPhone 5.|
As one reviewer describes it, "If you're looking for a game that shows how simple, touchscreen-focused controls can create an elegant, hugely entertaining experience, then NightSky is well worth your time."
The game will run well on any iOS device released in 2009 or later. It achieves 60 frames per second on 2011 and newer devices. I also went to great efforts to make the game's high resolution art assets fit in memory on low-end devices, selecting texture formats and repacking spritesheets for almost every image in the game. At the time of development only 32-bit iOS devices existed, so unfurtunately the game will become unavailable when Apple decides to drop 32-bit support unless Nicalis releases an update.
|A video playlist (five videos) of the front-end, FSR, and PWND games. Use the "Next" button to the right of the Play/Pause control to skip to the next video. Narrated by the project lead, Dr. Tim Chamillard.|
The Imagination Stations were commissioned by the University of Colorado at Colorado Springs in partnership with Peak Game Studios. The goal was to create interesting and interactive displays which would get touring K-12 students interested in science and engineering topics through presentations and educational games.
The games are on display on several HDTVs on campus, in the Science & Engineering building. All the software is controlled via one to four wired Xbox 360 controllers (PWND can be played cooperatively with up to four players).
I was on the teams that developed the front-end, and the PWND and FSR games. Other departments and teams supplied media such as videos, PowerPoint presentations, and simpler games.
Most of my work was on 3D graphics: modeling, texturing, rigging, and animating 3D objects; rendering and batching image sequences for 2D games, and writing rendering code for 3D games. All of the graphics were designed for a 1080p HD resolution.
Rhombi II is a PC puzzle game I built in Game Maker as a student project in about 2008 or 2009. The player moves the blue square using the arrow keys. As the player moves, they leave a trail of blocks behind. Those blocks are consumed over time by a tail of fire. The player's goal is to destroy every block and reach the end of the level.
Rhombi was inspired by a mini-game "Square" in the WiiWare game MaBoShi's Arcade. It was later enhanced to add mouse-controlled power-ups, which can be used to play as a two-player cooperative experience, or for occasional assistance when playing solo. Players can spend points from their score to use powerups that help prevent a game-over.
- Arrow keys - movement
- Left mouse button - Select power-up, use power-up