top of page

About
The Game
Role: Technical Designer
Duration: Oct-2020 to Dec-2025
Project Status: On Hold
Tools: Unreal Engine 4/5, Visual Studio, Perforce
Team: 35+
The Tech
I am covering our Network Replication Model very briefly here as I will be making references to it throughout the page, but you can skip this if you don't care about the tech details.
A few years into the Project we switched to a Network Replication Model called SnapNet, which is a Plugin made by veteran network programmers from for instance Call Of Duty.
This plugin supported Server Rewind, Smooth Physics, Instant Kill Cams, Replays and highly optimized network traffic.
It is what enables you to play with 100 Ping and still feel like your bullets are hitting where you expect them to, since it can rewind to a time stamp and check where physics meshes and characters etc. was and what poses they had and do Traces based on that.
All of this works out of the box as long as you got an understanding of the various SnapNet Properties, Events and its World Structure, where it uses Entity Actors that exists in an Entity World, that the Server and Client has. This world consists of the actual Collision and Game Logic, such as Traces when players are shooting etc..
Each Entity has a Renderer Actor that is it's Visual Representation, that exists in a Presentation World, that only exists for the Clients and is the world that they see, but has only logic related to visual representation, such as Bullet VFX if Shooting.
Heart Electric is a First-Person Hero Shooter with a 3v3v3v3 Game Mode Format where your Crews Energy is the amount of Respawns they have, which can be increased by downing enemies or utilizing a Heart to Steal Energy from the other crews by planting it on their bases. A crew gets eliminated when they have no energy left and all of the players are dead as they cannot Respawn.
When there is only two crews remaining there is a Battle Royale style Final Showdown where a Damage Bubble appears that slowly shrinks into the center. The crew with the most energy when entering the final showdown is rewarded with super shields as an advantage over the other crew.
The Mechanics
The game features a Magnet as the players Main Mechanic, which they can use to Pull themselves to Metal Points, or to Pull Metal Physics Objects toward them which they can use as shield or to attach to walls or throw onto enemies.
The Heroes can utilize any weapon in the game and can customize their loadout to use any of them except Hyper Weapons.
Each Hero have a their own Primary, Passive and Ultimate Ability. Some heroes may lean more into Movement and Stealth and others more into aggression.
My Contribution
Abilities
Abilities
7 out of the 10 Heroes
The abilities were made with a mix of Blueprint and C++, where if an Ability wanted to for instance Sphere Trace, then it could utilize a C++ Async Trace Component solution to save performance.
For our gliding ability, the blueprint side only sets the character to start gliding and handles when it should get cancelled like when stalling. The actual gliding is handled all in code in the character movement component.
The visual representation on almost all of them was made in code since it's cheaper when ticking, and SnapNet is a Tick based solution where the Ability Renderers has to Tick and be able jump back to an earlier state and represent that, for instance if watching a Kill Cam or Replay.
Movement
Movement
Characters Movement Abilities such as Sprinting, Sliding, Mantling, Wall Bouncing, Coyote Jumping, Gliding and Hovering.
They where made with thoughtful prediction in mind so it feels smooth even at 150 Ping!
It was all made in Code in character movement component.
Unfortunately since SnapNet doesn't support replicated UObjects we had to put everything into the component rather than splitting the different abilities up to UObjects which would've been cleaner.
Recorded with 150 Ping
Physics
Physics
The New Magnet hasn't been adjusted for constrained physics meshes yet.
Enabled Constrained Physics Meshes that could swing around a point, and an True Attachment Component so even with SnapNet, the Physics Meshes could get Attached to other Static and Skeletal Meshes, which SnapNet didn't support out of the box.
Also things such as Ignoring Collisions amongst Physical Static and Skeletal Meshes. A lot of optimizations as usual so for instance they only Tick when awake and CCD turns on if over a Minimum Velocity.
Components
Components
I try to build things as modular as possible utilizing components which supports replication with SnapNet (unlike UObjects).
So several things such as Ability, Projectile, Debuff, Attachment, Perspective and even an Async Trace solution was made as a component, so we could Async Trace in Blueprint with different shapes to save performance and get callbacks event of the result.
So for instance if we wanted to re-add the physics based Flying Drone from the old project, we would just have to add a Perspective Component to it to enable support for the available perspective options. The Drones renderer would ofc. has to be setup with cameras etc.. Then if for instance an ability, called to change the perspective, we can easily avoid dependencies to whatever class that owns the ability (like our character or drone), and instead just check if owner Has the component, if so, call it to Change Perspective with whatever settings that the Ability wants it to be in.
Since some components require a visual representation, we also had to have separate component for the Renderer Actor that handled that.
For instance the Debuff Component where it's Debuff Renderer Component had to be added in the Renderer Actor, like the character renderer, and handled things if Visually or Audio Debuffed, like adding a Post Process Effect or changing sound mixes.
De-buff on Abilities, Weapon, Vision etc. for a Duration
Different Perspective Settings, one over the Should and one where you can freely rotate with no offsets
World Interactables
World Interactables
Implemented several interactables in the World. For instance the Spawn Wall, Damage Bubble, Triggers and Magna Objects, which are Physics Meshes that had our Ability Component so they could also use abilities.
Old Project
Old Project
When I joined Modoyo (at the time called NAG) back in 2020, just a few months after initial funding, we used Unreals Replication Model and I prototyped the initial versions of many things that we would later move down to Code with SnapNet.
Here are just some of the things I contributed to back then.
The Initial Magnet Prototype with the Battery Overheat System
The Initial Zipline Spline that things could attach to and sway around on with a Custom Camera Modifier that added a sense of weight and speed.
Did some game mode phase logic in the first couple of years related to the UX such as Intermission between Rounds with the widgets presenting Results from the round and Buy Menus
Was responsible for a lot of the in-game UI in the first few years such as Crew, Kill Feed, Ability, On-Screen Indicator and Chat Widgets to name a few.
World Map Widget which was initially made in blueprint but I eventually moved it down to code for improved performance
Interaction System with Component on the Interactable with whatever settings they required such as Hold Duration.
Constrained Physics Meshes, some dangling, some constrained to a Wall, with different weights, detachment and destroy rules.
Also some Prop Destruction with a lot of attention to detail.
120 Server Tick with 32 Players, a lot of Physics Meshes and much of our logic in Blueprint. Accomplished by using a Network Optimization component that Turned Off Replication on Sleeping Meshes.
If someone hot joined we Turned it back on which meant the FPS went down temporarily, but in a Final Solution they would've stayed off and we would just sent what the Hot Joiner needed to them.
Team Spawn Lobby that split from the center and goes out to each side of the Map
The Cannon Base was generalized with a launch queue and could be used for Respawning, or Spawning Loot from a phone we had for a while.
The humble beginning of the Magnet very early on in the project when it was two separate ones that you launched that attracted each other.
Old Hero Abilities, and a very old Physics Based Drone players could Tag enemies with, or give players a ride.
bottom of page
