← Back to projects

The Circle of Life

A puzzle platformer where you cooperate with replayed recordings of your past selves.

Art assets are from the Kenney Game Assets All-in-1 bundle by Kenney, released under the CC0 1.0 license.

Role

Solo Developer

Engine

Unreal Engine 4

Tools & Tech

  • Blueprints
  • Input Recording & Replay
  • Puzzle Design
  • Game Jam

A solo puzzle platformer built in Unreal Engine 4 with Blueprints for the Game Dev Network 2021 jam, a 10-day event themed "Rebirth." The core mechanic is a deterministic input-replay system: as you control a character its inputs are recorded frame by frame, and when you switch to another character the previous one becomes a ghost that replays those exact inputs while you solve the level alongside it. Up to two ghosts run at once, so a level becomes a cooperation between your current self and your past selves, and the goal is to get every character into the fire. The eight levels build puzzles from portals, springs, and button-activated doors, and a timer and action counter let players speedrun a level or coordinate movements with their ghosts against the clock.

The decision that defines the game is recording inputs rather than positions. Storing positions would have been simpler, but a ghost replaying a saved path would clip through a world that had changed since its run, breaking the puzzle. Replaying the actual button presses instead keeps every ghost subject to the live level: it cannot walk through a door that was open on its original run but is closed on this one, so the same recorded run produces different outcomes as the world around it changes. That faithfulness is the whole basis of the puzzles.

It comes with one cost, and it is the thing I would fix first. Because inputs are captured once per frame, the number of samples in a recording depends on the frame rate, while some game elements advance on real time instead. When a ghost replays at a different frame cadence than its original run, its inputs and those time-based elements fall out of step and it drifts off the path it should retrace. The current workaround is to nudge into a corner now and then to re-sync your position, which a player should not have to do. With more time I would decouple the recording from the frame rate, fixing the simulation to a stable timestep so a recorded run replays identically regardless of performance. It is the first thing I would fix, because it is the foundation everything else in the game depends on.