Home

Implemented Features

I can't list every single thing I did, but I'll try my best to note the features I worked on that a potential colleague might currently be trying to solve.
My general rule of thumb here is to limit myself to talking about 3 topics per category.

Multiplayer Action Features

We hired folks with no multiplayer experience and made them love their jobs working on blueprint logic within a multiplayer game.

  • Data-driven replicated verbs and damage plumbing that could be authored completely in Blueprint (developed before Gameplay Ability Systems were ready for primetime use).
  • Lag-free hit reactions for PvE combat in which the presentation of damage was completely decoupled from the actual replicated effects of damage on the victim's body status. This also included non-intrusive hitstops upon impact that would freeze only the perpetrator and victim and then ramp up time dilation for both up to 2x  to mathematically compensate for the lost time in order to maintain a combat flow that felt good within a multiplayer environment.
  • Pausing multiplayer sim when all players have a menu up - because hey, if everyone agrees to look at their menu at the same time, then the world should freeze until one of them is ready to play again

Online Backend Features

Full disclosure: I don't think I can call myself a back end dev, just yet, but I am confident enough to play one on TV.

  • Matchmaking connectivity to Steam, Xbox, and Playstation  matchmaking providers: We spent a little bit of time exploring third party-cross-platform services, but decided to go for a solution that would not require a monthly fee to maintain
  • In addition to co-op and PvP matchmaking, we also had matchmaking from live service voice actors to players through extensive use of PlayFab and AWS DynamoDB, Lambda, and API Gateways
  • Anti-Cheat/Hacking Countermeasures: Mission success count was a stat we kept track of that granted certain privileges to players. I wrote the anti-cheat systems that made this very difficult to spoof, and in the few cases it was spoofed, my hack detection flagged their account and invalidated any rewards they might receive

Local Splitscreen Features

As much as couch co-op is close to my heart, I understand the ROI calculation that goes into why most multiplayer games don't support it. For my own solo projects, I decided to make split screen a first class feature.

  • Drop in/drop out at anytime: With sufficient guidance and telegraphing in the UI as well as smooth player addition/removal transitions that won't confuse existing players in the middle of intense combat
  • Inspired by Hazelight Studio's It Takes Two and Split Fiction, I have situational merging of split screens into shared screens, like when two players merge into one connected entity
  • Horizontal/Vertical split as an Option: After my family gave conflicting complaints about horizontal versus vertical split, I supported both in the options... with instant feedback when that setting is changed

AI Systems

I am that developer who talks about AI in first person because that's how I think when I'm coding their behaviors: "What would I do in that situation". I tend to develop systems in which NPC and player bodies are interchangeable in order to enable workflows that share plumbing between players and NPCs. This philosophy also has the side effect of making NPC possession by a player and vice versa a somewhat trivial feature.

  • Smart object based ambient behaviors, like in the Sims: Warm your hands by the fire, pause on a patrol route to admire a painting. Yeah, that's my jam. 
  • Patrol Routes: It starts with walking in a loop, but then you eventually need to solve for areas feeling empty because the player has "solved" that area. That's when you introduce global patrol managers with load balancing heuristics, among other things
  • Factions: He hates you, but he also hates that other guy, but maybe you killed a lot of that other guy's friends, and that makes him like you. All of this would need to be set and managed by non-engineers in a world where dogs and cats might actually decide to live together

Combat AI

I am the NPC. It's the player versus me, and my job is to make the player look as cool as possible!

  • Combat/Search Positioning: Where to stand when you're holding a gun vs. holding a sword? Do you use a ticket system to keep things fair for the player? Where do you stand if you don't have a ticket? How far are you willing to chase the player? Where to search for a player that you've lost track of but still want to generate sufficient drama to satisfy players with voyeuristic tendencies. These are the things I think about, at night.
  • Attack Selection & Timing: Verb data lives on the weapon, and AIs know how to use them. Maybe they add their own flavor to its usage based on their current emotional state... or based on what somebody else in their formation is already doing.
  • Predictive Aim: Hitscan weapons from NPCs tend to have the problem of tuning through "intentional misses". Not as cool as dodging a thrown projectile that you can see moving in your impending direction. I wrote an article about predictive aim to share my formula with everyone on the internet, and I use it to make ranged enemies fun.

Non-Blocking Cinematics

This one thing gets its own section because it might be the thing I am most proud of in my career.

This video is a spoiler for the game, so feel free to not play it if you wish to avoid this scene from the game.

In Dishonored, you can stop time, possess an NPC, teleport within striking distance before an NPC can react, place traps, and do any combination of things to curate your own player expression of vengeance.

There are a few situations in which a non-blocking cinematic cutscene with branching story outcomes can happen while you have all of these powers. This video was the result of my collaboration with the cutscene artist and designers to make sure all possibilities would be supported without compromise.

    Locomotion, Pathfinding, and Traversal

    For both, Players AND NPCs...

    • Parkour! NPCs and players can both parkour around. Most recently, I've started using UE5's chooser table and warp targets for different situational mantle/vault presentations.
    • The Door Problem: NPCs on The Blackout Club knew how to use doors. Pathfinding would respect when they were locked. Only during combat situations would they path through windows and ladders to get to you with their fancy climbing animations. Some NPC types also navigated through teleporting doorways using autogenerated NavLinks.
    • Flying creature navigation: Like many AI programmers, I have my own A* implementation lying around in my back pocket for special occasions. I used this on The Magic Circle to ensure that flying creatures can navigate unpathed geo without a navmesh because they dynamically generate their own 3D grid to reach otherwise unreachable islands. No level markup necessary. 

    Tools and Workflow

    I like to make content folks happy.

    • Just about every gameplay system I write has not just tunability, but an entire library of content creation functionality exposed to non-engineers in order to iterate on ideas without the need for engineering (or producer) intervention.
    • Just about every gameplay system I write has extensive debugging and cheats built in that allow content creators to freeze time and see into the matrix of "why that thing is happening in this situation". If a debugging framework doesn't exist, I build it. I detail the use of these debugging tools as part of my documentation delivery on a feature.
    • UI: I love working on UI because it becomes a pure problem in complexity management through data structures. I am often the person on the team to write a layer on top of an engine's bare bones UI system (Unreal's UMG or CommonUI, Unity's UI Layer) in order to ensure that one can just bring up UI screens without having to worry about every other possible screen. I then go on to build on top of this to enable functionality ranging from menus to conversation trees to subtitles with those very long German words.

    Master Generalist

    My focus on gameplay comes from my design literacy, but I can easily switch roles ranging from DevOps to rendering code within the engine, as needed... especially if no one else wants to do it.

    • After creating an automated process that opens every map to generate memory reports, I took on the role of the team's resident "performance police", catching memory budget overuns and frame hitching hotspots.  Optimizing can sometimes lead to meaningful discussions with art and design before emotional investments raise the cost of subsequent fixes at the 11th hour trying to get the game running at 60fps on consoles with weaker CPUs than our development PCs.
    • I am often the person to implement DLC, Achievements, and Rich Presence on Steam and Consoles, logging in as an admin on the backend to set up those localized string names and descriptors.
    • Camera Systems: I build data-driven camera systems that can support smooth transitions between modes. Lots of math involved. I like math, and I tend to do this math with minimal raytraces.