Thang is a whimsical shooter party game where you freeze your teammates into powerful weapons. The game loop is simple. You freeze them, you throw them into an oven, you get more powerful popsicle themed weapons that freeze your friends even faster or funnier. This project started with the same Overdawn crew. We wanted a game we could play together so we made one. I was an associate director, 3D modeler, programmer, and designer of this project.
Thang is a whimsical shooter party game where you freeze your teammates into powerful weapons. The game loop is simple. You freeze them, you throw them into an oven, you get more powerful popsicle themed weapons that freeze your friends even faster or funnier. This project started with the same Overdawn crew. We wanted a game we could play together so we made one. I was an associate director, 3D modeler, programmer, and designer of this project.
• Programmer — Unreal Engine C++: server-side rewind, replay system, parrying
• Backend — Next.js + MongoDB on Vercel, then P2P on EOS
• 3D artist — characters and weapons in Blender, cosmetics pipeline
• Designer — TPS/FPS freeze-tag loop, popsicle weapons
• Associate director — the Overdawn crew's party game
• Programmer — Unreal Engine C++: server-side rewind, replay system, parrying
• Backend — Next.js + MongoDB on Vercel, then P2P on EOS
• 3D artist — characters and weapons in Blender, cosmetics pipeline
• Designer — TPS/FPS freeze-tag loop, popsicle weapons
• Associate director — the Overdawn crew's party game
Embarking on this journey, I immediately knew a shooter like this needs lag compensation.
Since this was my first time learning Unreal Engine, I immediately enrolled in Stephen Ulibarri's UE5 Networking course and fell in love with it. After completing the course, I engineered 5+ core systems, including a server-side rewind algorithm for latency compensation that lets shooting, freeze states, and tag mechanics all feel instantaneous regardless of the player's connection.
Embarking on this journey, I immediately knew a shooter like this needs lag compensation.
Since this was my first time learning Unreal Engine, I immediately enrolled in Stephen Ulibarri's UE5 Networking course and fell in love with it. After completing the course, I engineered 5+ core systems, including a server-side rewind algorithm for latency compensation that lets shooting, freeze states, and tag mechanics all feel instantaneous regardless of the player's connection.
This server-side rewind lag compensation is implemented by attaching hitboxes per-bone, recording a 4-second position history each server frame, and performing the rewind algorithm. On a hit claim, the server rewinds the victim's boxes to the reported time, re-traces, and restores them. This is one of the popular lag-compensation algorithms that ensures accurate and reliable hit registration for competitive games, so high-ping players hit what they saw on screen.
The rewind is sub-frame accurate. A claimed hit time is interpolated between the two straddling history frames instead of snapping to the nearest one.
I also extended one rewind core to four weapon lanes. This includes hitscan ray, slow projectile, scatter, and melee sphere-sweep.
This server-side rewind lag compensation is implemented by attaching hitboxes per-bone, recording a 4-second position history each server frame, and performing the rewind algorithm. On a hit claim, the server rewinds the victim's boxes to the reported time, re-traces, and restores them. This is one of the popular lag-compensation algorithms that ensures accurate and reliable hit registration for competitive games, so high-ping players hit what they saw on screen.
The rewind is sub-frame accurate. A claimed hit time is interpolated between the two straddling history frames instead of snapping to the nearest one.
I also extended one rewind core to four weapon lanes. This includes hitscan ray, slow projectile, scatter, and melee sphere-sweep.
I built a match replay system on Unreal's DemoNetDriver. The listen host records from beginning to end into a .replay file, and I also added a menu-side browser that lists, plays, deletes, exports, and imports them. This required no backend and no extra bandwidth for players, which was perfect for the indie multiplayer game, Thang. I also refactored a decent amount of gameplay code to support this replay system. This refactor includes migrating to COND_ReplayOrOwner, mirroring RPCs into COND_ReplayOnly, and adjusting the HUD and widgets to be replay aware.
I built a match replay system on Unreal's DemoNetDriver. The listen host records from beginning to end into a .replay file, and I also added a menu-side browser that lists, plays, deletes, exports, and imports them. This required no backend and no extra bandwidth for players, which was perfect for the indie multiplayer game, Thang. I also refactored a decent amount of gameplay code to support this replay system. This refactor includes migrating to COND_ReplayOrOwner, mirroring RPCs into COND_ReplayOnly, and adjusting the HUD and widgets to be replay aware.
Originally, Thang had a RESTful Next.js / Node.js backend with MongoDB underneath. Identity flowed through Firebase Auth and the backend lived on Vercel. This architecture prepared the game for more competitive settings, allowing matchmaking and hosting dedicated servers. However, this was simply too much for an indie party game, so I had to find a cheaper alternative. We pivoted back to P2P and simplified the networking stack into EOS. This allows us to keep the maintenance cost of the game at $0.
Originally, Thang had a RESTful Next.js / Node.js backend with MongoDB underneath. Identity flowed through Firebase Auth and the backend lived on Vercel. This architecture prepared the game for more competitive settings, allowing matchmaking and hosting dedicated servers. However, this was simply too much for an indie party game, so I had to find a cheaper alternative. We pivoted back to P2P and simplified the networking stack into EOS. This allows us to keep the maintenance cost of the game at $0.
I modeled some weapons and the player characters in Thang. I first started by conceptualizing the character design and iterating based on the team's feedback. I designed the art pipeline from Blender to Unreal Engine, ensuring all new cosmetic items work on the same player model. The end result is a cute and unique player character that can be customized to the player's own unique style.
I modeled some weapons and the player characters in Thang. I first started by conceptualizing the character design and iterating based on the team's feedback. I designed the art pipeline from Blender to Unreal Engine, ensuring all new cosmetic items work on the same player model. The end result is a cute and unique player character that can be customized to the player's own unique style.
Using my favorite art software, Aseprite, I also drew character eyes and animated them in Unreal Engine using its shader graph and linking the logic via a custom eye component.
Using my favorite art software, Aseprite, I also drew character eyes and animated them in Unreal Engine using its shader graph and linking the logic via a custom eye component.
I worked on key gameplay features.
Parrying: players can right click and parry. I ensured this mechanic is network accurate and server authoritative by extending the lagCompensation component.
Popsicles: Players can turn into popsicles when thrown into the oven.
And so much more!
I worked on key gameplay features.
Parrying: players can right click and parry. I ensured this mechanic is network accurate and server authoritative by extending the lagCompensation component.
Popsicles: Players can turn into popsicles when thrown into the oven.
And so much more!