I worked on several games at PerBlue, from core gameplay and deterministic simulation to designer and QA tooling.
Unreleased Game
This game started as a multiplayer hack-and-slash game. I led the engine team for the duration of the project.
Wall Brawl
This is a live service wall defense game. Things I worked on:
Many of the core gameplay mechanics
PvP mode: the view could detach from the simulation to watch other players
Game automation to assist designers with game balance
A replay system that QA and devs could use to share and diagnose crashes and issues
Hex Empires
A live service, turn-based strategy game. I worked on:
All of the core gameplay mechanics
A cross-platform, deterministic custom simulation for fights
Used for server validation and future replays
Triumph: GO Infinite
As part of a contract deal with N3TWORK, I worked on this game for a few months. My biggest contribution was implementing the front end for the game’s player market.
I joined Tentworks Interactive in March of 2021 to work on their tycoon game: City Block Builder. For more info about the game, check out the link below.
The first thing I worked on was a traffic system. The existing system had the following issues:
No model for acceleration/deceleration.
Improper pivots, cars slide around turns
Cars used navmeshes and raycasting for navigation, poor performance
After replacing the car system, I added the ability for the cars to navigate the town using Dijkstra’s algorithm. My efforts resulted in more natural looking and more performant cars.
URP/HDRP Post Processing Effects
The team needed effects for highlighting objects in the world and blurred UI panels. I first built these for URP then ported them over to HDRP when we made the switch.
URP to HDRP Conversion
The project was using URP when I joined. After our art lead described what he wanted, it seemed to me they had chosen the wrong pipeline. They wanted high fidelity graphics with a lot of lights. We needed deferred rendering. At the time URP did not support this. I pitched HDRP then wrote some scripts to start the conversion process. The bulk of the work was done in a few days. Our art lead was super happy. Performance was on par with URP and eventually superseded.
Art Cleanup
It was the wild west when it came to art assets. Each artist had their own pipeline. Most of what was delivered was incompatible with our render pipeline or any Unity pipeline for that matter. I created a workshop to walk the artists on the team how to create the deliverables we needed. I also created scripts and tools to assist in the process. It was a huge success! The assets delivered were much cleaner and fit the project’s requirements. Below are the slides I made for that workshop.
This is a mod that renders Terraria in 3D. The constraints of the shader model made this a challenging project. I got the render function sub 1ms making gameplay butter smooth.
Terraria 3D was originally an unreleased feature from my paid Terraria modding work in 2014 (see Terraria Modding and Rendering Terraria in 3D). In January 2019 I dusted off the idea and rebuilt it from scratch for tModLoader, the dominant mod loader for the game. This rendition was better than the original in almost every way. The big issue was performance.
It was running in a few days, and a few more days after that it was running smoothly. The biggest hurdle was being limited to SM2 in XNA. I spent about another 3 weeks adding features and squashing bugs.
The Poor Man’s Ambient Occlusion
I came up with a super cheap set of instructions to do AO in my shader. I’m stuck with SM2/3 and instruction count is super limited. Pretty pleased with how much depth it adds to the image.
Virtual Reality
Started playing with this mod in VR. I couldn’t render the headset view on a separate thread. This is an issue because Terraria is capped at 60 fps. For a smooth VR experience it should be 90fps+. Here is a puketastic capture from my experiments.
I joined the team on this project in June of 2018. I did all of the programming for it: Fight mechanics, UI, AI, etc. I spent a lot of time building tools and pipelines for creating content for the game:
World Creation: Created a pipeline for level editing, sprite ordering, and automatic collision authoring.
In Game Cutscenes: I made some tools that made it easy to direct the actors and events in our scenes.
Enemy AI: More great tooling to define enemy AI logic.
I wish I had better visuals to show for this one. This sizzle reel is a bit boring. 😁
Team
Everyone worked part time and as needed on this project. We had a project manager, QA, artists, and a sound designer.
Video Documentation
I did a lot of video documentation for in game tools. Here is an example of some of that documentation I did for the team.
Electronics, AutoCAD, 3D Printing, C++ (ATmega328P), C# Windows application
A friend challenged me to beat his score in a mobile game. I was not up to the task so I built a robot to do it for me 😈
In early 2017 a friend challenged me to beat his 20% high score on what was then the hardest level of Rolling Sky. The robot reaches 100% while getting all of the collectibles. The first prototype was cardboard; once I got a 3D printer I redesigned it, with a custom board holding the electronics.
Singing 3D Printer
I wrote a program that converted MIDI into gcode for my 3D printer to play back.
Drawing 3D Printer
Is it just a 2D printer with extra steps? Yeah. Is it cool? I think so.
Faye and the Wondrous Flame is an action-adventure side-scrolling platformer. The game was going to be combat heavy: the player would unlock four new forms as they progressed, each unlocking new combat and locomotion abilities. Our goal was to build a demo to submit to Epic’s grant program.
I joined this project for a few months back in 2016. I was responsible for all of the programming and for learning UE4. I mostly worked on player locomotion: getting moving around to feel nice, wall jumps, ledge grabs, sliding, etc. I had a ton of fun working on it.
Team (2ndborne)
The bulk of the project was done by a 3D artist and me, with support from a concept artist and an animator. Everyone worked on it in their free time. It was an amazing group of people to work with.
Time
Started in late November 2016; my last commit was mid February 2017.
Postmortem
This was my favorite project I’ve worked on. It was my first UE4 project and I’m proud of what we made. Unfortunately our group disbanded before we were able to submit for grant consideration.
I worked on several trailers for Paradox Interactive as a subcontractor. My contribution was modding the games to give us more control over our gameplay footage.
I added XInput so we could control the camera with a gamepad: pan and zoom with smoothing filters, and record camera moves to play back while the user controlled the in-game actors. I also added the ability to force actors into specific animations and to move or delete them, so we could choreograph our shots. I also did some smoke effects and handled production management in the final week of the Tyranny trailer.
Time for a rapid fire round. Here are some miscellaneous game jams / side projects.
Cooties
Ian Strandburg and I set out to build a shopping simulator where sick shoppers can sneeze and spread infection.
Voxel RPG Game… Thing
🤷
Voxel Destruction Tech Demo
C#, Unity, Heavy Optimization, Custom Asset Pipeline
A voxel destruction tech demo for a game concept where each voxel type had special properties. An enemy might have armor voxels that take more force to break; once the skin was broken it would start taking damage, and hitting an organ voxel was fatal. There was also a concept for using the tech in a VR mech 1v1 boxing game.
The challenge was updating meshes and colliders as quickly as possible: characters with over 100,000 voxels had to be recalculated in fractions of a second. I solved it with a multithreaded solution with models split into chunks. Voxelized models came in as binary files; meshes and materials were built on import and at runtime when destruction occurred, with voxel textures driven by Substances so we could quickly stylize them.
The destruction took a few days to get running with mesh and collider builders on their own thread. I spent a day exploring rendering with a geometry shader instead of rebuilding meshes, but it required SM4 and had limitations, so I abandoned it. About a week went into iterating on the asset pipeline.
Squirm Food
C#, Unity, iOS, Android, Web Services
Another game Ian Strandburg and I worked on, started at the beginning of 2015. A puzzle game where the player navigates levels to get monster parts to the bottom of the machine. Built for iOS and Android and ran great on both, but was never released.
I was responsible for everything that required programming: gameplay, art-pipeline tools, a level editor, UI, and a web version where testers could play levels. Our web server collected data about playthroughs and tester feedback for each level. My counterpart shared game design and did all of the art.
Zelda Dungeon Recreation
In November 2017 I took a challenge to clone a Zelda dungeon in 7 days. I was solo, so I did all the gameplay, all the glorious programmer art, and the level. I finished within the 7 days, then took 3 extra days for polish.
An 8 hour VR game jam in 2015: a spooky first-person Frogger with a single level and cars as obstacles. Another jammer provided the art. Easter egg: look behind you into the sky and you’d see the window of an arcade machine, as if you were inside it, with a creepy face peering in that mirrored your headset’s head movement.
I spent about a year getting paid to mod Terraria, a side-scrolling sandbox game, starting in late 2013.
Role
I was hired to add a suite of new features under the direction of my employer, including:
Creative Mode: item browser, infinite reach to make building easier, detached camera, NPC spawner, godmode / toggle enemies / control weather, and too much more to list
Multiplayer (custom server): login system; admin tools (peek player inventory; kick/ban/teleport to players; undo a player’s modifications; see who last modified a block to find griefers); protected regions; groups with custom permissions