← All Game Design Projects

Designing a Wallrun That Survives Real Geometry

A Prince of Persia: The Sands of Time-inspired traversal system with a tunable arc, adaptive surface safety, curved-wall support and designer controls that never require code.

RoleTechnical Designer / Developer
ProjectZero Protocol
EnginesUnreal Engine 5 / Godot 4
DisciplineTraversal / Gameplay Systems
Design Goal

Recreate the rising, momentum-led feel of the Sands of Time wallrun without letting its arc drive the player into ceilings, off wall tops or through irregular geometry, then turn it into a reliable component that designers can reshape entirely from the Inspector.

8 mDefault run distance
9 m/sDefault run speed
1.25 mDefault arc peak
0Code edits to retune

The arc was the point

I first built the mechanic in Unreal, then recreated and expanded it in Godot for Zero Protocol. The reference was the wallrun in Prince of Persia: The Sands of Time. What made that movement memorable was not simply travelling sideways along a surface. The character rose and fell through a visible arc, turning the wall into a brief continuation of the jump.

A flat wallrun worked mechanically but read like sliding. The parabolic arc made it feel like momentum. The player attaches while airborne, travels forward in their existing direction, crests above the attach point and descends into an authored exit. There is no wallrun button or special mode: jump toward a valid wall while moving along it and the world catches you.

The first success created the real problem

Once the arc felt right, it started breaking against real levels. Under a roof, the curve drove the player into the ceiling. Near the top of a wall, the upper-body samples lost the surface and ended the run at exactly the moment the player expected to flow onto the ledge. Segmented walls produced false detachments, while corners and curved surfaces could redirect or strand the player.

Removing the arc would have removed the feel I was trying to preserve. The solution was to keep the authored curve as the intention, then let the component negotiate that intention with the surrounding geometry every frame.

01 · Ceiling

Clamp the rise

Sphere sweeps cap the target height below a roof, so the run preserves forward momentum without pushing the capsule through geometry.

02 · Wall top

Brake before the edge

Look-ahead probes recover the top surface and a last-safe-height cache prevents noisy samples from kicking the player out of the run.

03 · Wall lost

Carry through seams

A 0.12-second grace window bridges shallow gaps and segmented facades, detaching only when the surface has genuinely ended.

Reliable on walls that are not simple

The component can be restricted to surfaces tagged for wallrunning or allowed to evaluate any valid wall. Zero Protocol uses the authored option so level designers decide exactly where the verb exists, but the policy is one Inspector switch rather than a code fork.

Curved-wall support can also be enabled or disabled. With it on, the wall normal is resampled fifteen times per second and the travel direction follows the changing surface. Convex tanks, concave barriers and round industrial structures become usable traversal space. Distance-adaptive magnetism closes the attachment gap without a visible first-frame yank, keeping the player held to the surface while the direction changes.

One component, thin states

In Godot, a single WallRunComponent owns detection, arc physics, surface safety, wall-jump math and exit reasons. Thin state-machine states handle animation and transitions for the unarmed and melee stances, so the mechanic behaves identically whether Ryker has a weapon drawn or not. Every airborne state quietly polls for a runnable surface, which makes attachment feel systemic rather than command-driven.

The component emits start, end and wall-jump signals for audio, VFX, camera response, scoring and progression. Those systems can react without being coupled to the movement code.

A designer tool, not a hard-coded move

The system has grown from one specific wallrun into a configurable traversal framework. A designer can create a short, flat tactical run, a long rising set piece, a sprint-gated skill check or an unlimited chaining route without touching the script.

ArcFlat to high rainbow curve
Surface policyTagged walls or any valid wall
GeometryFlat only or curved support
MovementDistance, speed and rise response
AttachmentApproach angle and sprint gate
ChainingUnlimited or capped per airtime
Wall jumpHeight, speed and launch angle
AvailabilityMaster toggle for scripted use

Every ending is shaped

The component does not have one generic detach. A player-initiated wall jump keeps full control and can catch the next wall. Completing the distance produces an up-and-away dismount. Reaching a wall top pushes onto the surface and hands off to the mantle system. A forward blocker becomes a readable rebound, a ceiling clamps the rise before exit, and reaching the floor transitions directly into grounded movement.

That exit taxonomy gives animation, sound and follow-up states a stable design surface. More importantly, it means the system preserves momentum even when the environment forces the ideal path to change.

What the system enables

The wallrun is now one third of Zero Protocol's high-flow movement kit alongside dash and mantle. It is used on the M1S1 critical path, where the player jumps from a vehicle roof, runs a billboard face and lands beyond a blockade. From there it supports alternate routes, vertical ascent chains, curved industrial set pieces, combat flanks and arena mechanics that turn the floor into a temporary hazard.

The important result is reliability. The move began as an attempt to recreate one specific arc. It became a flexible, surface-aware component that protects that feel across real geometry and gives level designers control over where the verb exists and what each run asks of the player.

Need a level or technical designer?

I can take a feature from intent and diagrams through implementation, iteration and balance.