← Back to projects

Dungeon Brawl

A four-player local-multiplayer arena platformer.

Dynamic camera framing all four players, zooming to fit as they spread across the arena and clamping to the level bounds.
A sample of the 19 heroes, each with distinct movement and abilities driven from a single parameterized class.
Four-player combat with summoned pets and multiple enemy types active at once.

Art and tileset assets are third-party. All systems, code, and design are my own.

Role

Solo Developer

Engine

Unreal Engine 4

Tools & Tech

  • Blueprints
  • Local Multiplayer
  • Dynamic Camera
  • Gameplay Systems
  • Spawn Systems
  • Level Design

A solo 2D arena platformer for up to four players on a single keyboard, built over about a year in Unreal Engine 4 using Blueprints. The roster is 19 playable heroes, each with its own sprite, controls, and hard-coded abilities ranging from guns and bows to melee and a hero that heals by absorbing fallen bodies. Rather than building 19 separate character Blueprints, I drove the whole roster from one player class parameterized by a hero enum, so a single class handles every hero's visuals, input response, and abilities, and each hero can summon from a pool of 10 pet types. The eight hand-built arenas play under a data-driven difficulty system set at the level-select screen, which composes a tier, an override that can force the match to a single one of the four enemy types, and a strength modifier into custom matches.

The most interesting problem was the camera, since four players sharing one screen can scatter to opposite corners of a level. Each frame it finds the two players who are farthest apart, centers on the midpoint between them, and then zooms in as tightly as it can while still leaving padding around every player so no one gets pushed off screen. It lerps toward that target instead of snapping, which keeps motion smooth as players spread out and close back in, and it clamps against the level bounds so the view never reveals past the edge of the map, with a minimum zoom that stops the framing from getting too tight when everyone clusters together. Input feeds into this from four fixed key clusters, arrows, WASD, IJKL, and the numpad, each normalized to four directions so the scheme stays minimal and playable one-handed.

The feature I most want to add is letting players switch heroes mid-match, since moving between 19 very different characters is the most fun part of the game. The groundwork is mostly there: hero behavior is recalculated from a single enum on every input, so changing a player's hero is largely a matter of reassigning that value. The natural place to allow it is the window after a player dies and before they respawn, which also sidesteps any state questions since health and stamina reset on respawn regardless. The main work left is presentation rather than logic, since a few things like the sprite are set once at spawn rather than recalculated, so a clean swap would mean re-running that spawn-time setup and adding a trigger to the respawn flow. It is a small amount of work for the feature I think would most change how the game plays.