{ video game programmer }
Orbs Arena
An arena survival game where every orb is both ammunition and health.
A small GMTK challenge
I started Orbs Arena for the GMTK Game Jam while I was on parental leave. Free time was scarce, so I treated it as a small personal challenge: use the few hours I could find across a couple of days to have fun making something focused and finishable in Unreal Engine.
After the jam, I revisited the project to refactor a few systems, clean up the code, and make the repository easier to follow. I then published the source as a compact, readable example of my Unreal Engine C++ work.
Game loop
Orbs Arena is a compact arena survival game built in Unreal Engine 5.8. You command a ring of orbs that serves as your ammunition, health, and only resource. Deploying an orb gives you another way to attack, but it also opens a gap in your defence. Recalling it restores that protection.
Enemies arrive in increasingly difficult waves and fire their own orbiting spheres. An incoming hit can remove one of your orbs, while a direct hit on your exposed core ends the run. The result is a simple risk and reward loop where every shot changes both your offensive options and your chances of survival.
Gameplay Ability System
The player actions are built around Unreal Engine's Gameplay Ability System. The pawn owns an Ability System Component and receives three C++ gameplay abilities at startup:
- Deploy sends the nearest available orb towards the point under the cursor.
- Retrieve recalls the deployed orb closest to the player.
- Dash commits to a short burst of movement and starts a cooldown.
Enhanced Input does not call those actions directly. Instead, each input asks the Ability System
Component to activate the ability identified by a native Gameplay Tag: Ability.Deploy,
Ability.Retrieve, or Ability.Dash. Each ability follows the GAS activation lifecycle, commits
before changing the game state, and cancels cleanly when its action cannot be completed.
The dash shows how GAS can keep ability state separate from movement code. Its cooldown is a timed
Gameplay Effect that owns the Cooldown.Dash tag. The interface reads the remaining time from the
active effect, so availability and feedback both come from the same source of truth.
The scope of GAS is deliberate. Player action activation and cooldown state belong to the ability system, while orb steering, enemy behaviour, arena growth, and wave scheduling remain in focused C++ actors and components. This keeps the framework useful without forcing unrelated gameplay into it.