Game Programming Portfolio

Sticky Chunks

Sticky Chunks is a puzzle game about arranging colorful shapes on a grid. Drop two chunks of the same color next to each other and they permanently stick together, forming a larger chunk! Chunks can be moved and rotated even after placing them in the play area. Make fat chunks to increase their value, then sell them off for points when you need to free up space. Once you use up all the shapes you're given, the game ends and your score is tallied.

The game challenges the player with its large possibility space. The experienced player manages the game's simple resources - space and chunks - in order to maximize their future options and their scoring potential.

I've found that play-testers with gaming literacy are able to quickly grasp the game's rules quite quickly without any explanation or tutorial.

I built Sticky Chunks by myself in my spare time in early 2021. I wrote it for the PICO-8 "fantasy console," using Lua.

I consider Sticky Chunks to be one of my finest game design achievements. I feel like it captures much of the elegance of a game like Tetris, though the mechanics and pacing give it its own identity.

Play Sticky Chunks

God of War Ragnarök

God of War Ragnarök is a blockbuster cinematic action-adventure about a warrior father and his teenage son.

I ended up working on an assortment of game systems that feels impossible to summarize.

As a combat programmer I worked closely with combat designers to provide and maintain many of the scripting features at the core of combat. In the process I learned plenty about melee-action combat design minutia from the combat design team, though I still have plenty to learn since I wasn't often hands-on with implementing or tuning characters.

I built plenty of debug tools. One of my early tasks involved building a replayable "Branch Debugger." In the game's character state machine, a "branch" describes a transition between "moves." The Branch Debugger displays every branch that the selected character considered. It shows which branches were taken, buffered, or invalidated. It shows the exact reason why each branch passed or failed by showing the values of the "Dynamic Expression" terms. All of this is replayable. This means the developer-user can scrub back through time to the frame that they saw something unexpected happen, and view the info that was captured on that frame.

I added a system for allowing projectiles to move while following a 3D spline. This provided plenty of characters' ranged attacks with a unique flavor while still meeting combat needs in terms of controlling range, targeting, speed and homing.

I built tons of features related to the Draupnir Spear and other weapons. I maintained the spear's animation state machine. I worked on features related to spear cloning, weapon embeds, spear elemental siphons, detonation, and special moves.

I designed the arc of the spear throw. The spear is designed to have a longer throwing range than the axe and has a wind element. I gave it a unique feel by inverting the spear's trajectory so it "swoops" just below the aiming reticle for a moment. This is unlike the axe which flies slightly above the reticle when thrown and then enters projectile motion. This adjustment also fixed issues with an especially "floaty" feel the spear throw had when using tuning values that gave the spear the desired throw range.

I resolved sound issues and VFX performance issues related to the spear detonation sequence ("Draupnir's Call") by tuning the sequence of spear detonations.

I maintained the "dynamic expression" scripting system that designers use to determine what character state machine transitions are possible, which in turn affects player controls and enemy decision making. My work on adding these expressions to the Branch Debugger in a highly readable yet efficient way was a complicated ordeal that I'm super proud of pulling off.

I was the owner and point of contact for PS5 haptics technical implementation. Since our combat designers are picky about feel, I built a system that allowed them to design vibrations using the same scripting environment they were already comfortable working in, rather than requiring they use audio-based tools. Audio designers added vibrations for non-gameplay moments such as cinematics using the audio pipeline, so I provided a tool to determine if a given vibration came from the my vibration system or from an audio designer.

I designed and implemented motion sensor aiming functionality. The feature was a personal initiative, and might not have been in the game if I hadn't added it. I paid close attention to the elements of motion sensor aiming that the die-hard motion sensor players swear by and was sure to focus on those features. I used a natural sensitivity scale. I ensured the control was applied at the correct point in the camera-input-processing pipeline to avoid conflicts with aim assists. I came up with a way of applying acceleration that required minimal explanation in the settings menu. I added a slider I called "reduce small motions" based on the "tightening" concept provided by some gyro mapping tools.

Valhalla

The Valhalla DLC expansion was an exciting opportunity to revisit the game's combat and build upon the story's conclusion.

I was brought on to backfill for a departing UI implementer, and to occasionally provide bits of combat support. It was stressful to ship another product so soon after finishing work on the base game but I think the expansion turned out well.

Ragnarök was my first experience shipping a "triple-A" game. I'm proud to have worked with fantastic colleagues who trust and rely on me and I think the game really shines in almost every possible way.

Get God of War Ragnarök

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

  • Steam
  • Also coming to PS4 and Xbox One

Cave Story+

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 was removed from the game's credits in a patch shortly after the game's release.

I'm really happy with all the enhancements I was able to fit into this game on a fairly short schedule, making the Switch edition the definitive version at the time of its release.

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.

I was removed from the credits of the game's later expansions.

Ports developed

  • Mac OS (Rebirth, Afterbirth, Afterbirth+)
  • Xbox One (Rebirth)
  • New Nintendo 3DS (Rebirth)
  • iOS (Rebirth)
  • Nintendo Switch (Afterbirth+)

Get The Binding of Isaac: Rebirth

  • Steam
  • Also available on iOS, PS4, PS Vita, Xbox One, New Nintendo 3DS, Wii U, and Nintendo Switch

1001 Spikes

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! It has a ton of really cool frame-perfect tricks. I'm a big fan of the 1001 Spikes tool-assisted speedruns by Keylie.

Get 1001 Spikes

  • Steam
  • Also available on PS4, PS Vita, Nintendo 3DS, Wii U, Xbox One, and coming soon to Nintendo Switch

NightSky

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.

Features

  • Universal Binary
  • Retina optimized
  • Unique touchscreen control scheme
  • Game Center achievements
  • Great compatibility with old devices (2009 and up)

Controls

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 reviewer Harry Slater 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."

Compatibility

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.

The game became unavailable when Apple decided to drop 32-bit support. Nicalis seems unlikely to release an update to get the game re-listed, so there are no legal means to play the game as of this writing.

I was asked to remove names from the iOS version's credits and did so reluctantly.

Get NightSky

Imagination Stations

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.

Related links

Rhombi II

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.

Controls

  • Arrow keys - movement
  • Left mouse button - Select power-up, use power-up

Download