Gravity-flip traversal
One action that changes routing and timing decisions, letting the player “save” a run by switching tracks at the last moment.
Game Case Study
Endless gravity-flip runner where you switch orientation instead of jumping, built to explore telegraphing, difficulty curves and procedural chunk design.

Out of Sight is an endless, forward-scrolling precision runner where the camera never stops moving. You only steer left and right, but you also flip gravity to switch tracks and survive gaps and hazards as the pace ramps up. The design goal was sustained tension through speed and spatial pressure, while keeping every death readable and deserved—short recovery windows, clear telegraphs, and instant restarts that make “one more run” feel natural.
What I was trying to achieve.
Design a game where one simple action—gravity flip—produces interesting decisions over time.
Create modular level pieces that can be recombined without unfair, unreadable obstacles.
Use spacing, speed and obstacle patterns to alternate between calm stretches and sharp, focused sections.
What I personally owned.
Designed the gravity-flip rules, fail states and how speed ramps over time.
Implemented modular chunks and logic for stitching them together while avoiding impossible combos.
Tuned speeds, camera and timing to give players enough information to react without removing pressure.
How the project evolved and what I took away.
Most iteration on Out of Sight was about fairness under pressure. In an endless runner, players retry dozens of times, so any unclear hazard, bad spawn, or timing edge case shows up immediately. I tuned readability first (minimum reaction windows, consistent silhouettes, and safe recovery beats), then used speed and spacing to raise difficulty without introducing cheap deaths.
Procedural generation needed strict guardrails—chunk-based assembly plus validation rules—so runs stayed surprising but never impossible.
The moment-to-moment flow I focused on.
Read the upcoming track → steer into safe lanes → flip gravity to transition between tracks → recover into a stable lane → repeat as speed and density ramp up.
Movement is limited to left/right to keep inputs simple under stress. Gravity flip is the expressive action: it turns a “dead end” into a new route. Failure happens when you leave the camera bounds or miss the track, followed by an instant restart.
What’s implemented in the prototype right now.
One action that changes routing and timing decisions, letting the player “save” a run by switching tracks at the last moment.
Modular chunks stitched together with rules so patterns stay learnable and readable, even as layouts vary run to run.
Difficulty increases primarily through camera speed and spacing, preserving clarity while tightening reaction windows.
How I kept runs surprising without creating impossible layouts.
Tracks are built from hand-authored modules with clear “entry/exit” expectations, keeping navigation consistent across combinations.
I enforced constraints like minimum landing space, maximum gap length, and “no double-threat” zones to avoid unwinnable spawns.
Patterns include brief safe beats after high-intensity moments so players can reset their position and re-read the next hazard.
In procedural endless games, the generator is effectively a designer. If the rules are weak, players read failures as bugs. Strong constraints and a consistent pattern language make randomness feel intentional—and keep players willing to retry.
The levers I used to increase challenge without adding noise.
Speed is the primary driver. As runs progress, I adjust camera velocity, obstacle spacing, and decision density, while keeping telegraph distance above a minimum threshold so reactions remain possible.
I treated obstacles as a small “vocabulary” and built sequences that escalate logically (easy → mixed → tight), so players feel like they’re improving—not just surviving randomness.