← Back to project summary

Countdown Arena

A closer look at the app, the systems I owned, and the features behind it.

What the game is

  • A top-down 2v2 arena brawler with local and networked play, a character select screen, and a weapon discovery gallery.
  • Two game modes: deathmatch and king of the hill, each with their own UI and scoring.
  • A set of themed maps - a keep, an electrical facility, a fire arena, a willow map - that exist as separate local and networked scenes.

The architecture, which is the point

  • Input is read into a data struct by a ScriptableObject InputReader rather than polled inside gameplay code, so the same character can be driven by a player, by AI, or later by a network packet.
  • Logic and visuals are split deliberately. Logic subtracts health; visuals listen for that change and play the flicker. A headless server with no particle systems does not crash.
  • Abilities use the strategy pattern: an AbilityBase ScriptableObject holds the data, an AbilityController runs the logic, and adding an ability means adding a class and creating an asset.
  • Stats use a modifier system with flat, percent-add, and percent-multiply layers, so buffs stack predictably instead of drifting.
  • Movement is deterministic rather than physics-driven, because floating-point differences between machines are how multiplayer games desync.

What is in it

  • Around forty distinct abilities and passives, from dashes and beams to a tesla coil, a whirlpool, a summoned spectre, and a sphere of denial.
  • A status effect system covering burning, frozen, stunned, silenced, damage-over-time, move speed changes, and stat modifiers.
  • Team management with colors, diamond indicators, team walls, and per-team scoring.
  • AI controllers with their own pathfinding, perception, and state machine, driving the same character rig the player uses.