← 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.