Puzzle · Maze
Astray
Roll an iron sphere through procedurally generated top-down labyrinths in a Three.js + Box2D physics puzzler, where inertia and wall bounces shape every run toward the exit.
Overview
An iron sphere sits inside a top-down labyrinth, and the only way to move it is to tap directional impulses that it then obeys for far longer than you intended. Astray is a browser maze puzzler by wwwtyro, built in Three.js over a Box2D physics world and released into the public domain. Each level carves a fresh perfect maze with a recursive backtracker and drops the ball at one corner with a lit exit at the far corner; reaching that exit grows the grid by two cells on every side and fades you into a larger one, so the game is an endless climb through expanding labyrinths rather than a fixed set of hand-authored maps. What makes it distinctive is that the maze is not the only obstacle — the physics are. The ball carries real momentum, drifts under a light damping factor each step, and rebounds off brick walls with a touch of restitution, so tight corridors punish heavy inputs and a clean run is a study in measured taps rather than raw steering. It rewards the same patience as a wooden labyrinth marble toy, and appeals to players who like navigation challenges where reading ahead matters more than reflexes.
How to Play
Roll the ball from its starting corner to the lit exit at the opposite corner of the maze. Press the Arrow keys to nudge it up, down, left, and right; vim users get the same axes on H, J, K, and L. There is no jump and no camera control — the top-down view and its point light track the ball automatically. Hold I to toggle the instructions overlay. Each key press fires a small impulse in the matching direction, the ball keeps coasting after you release, and bumping a wall knocks it back with a slight bounce, so a session is a sequence of aim-and-tap decisions that ends when the ball crosses the exit cell and the next, larger maze fades in.
Tips & Strategy
Tap, do not hold. Holding a direction builds velocity that you then have to cancel with a counter-tap, and in a one-cell-wide corridor that means bouncing between brick walls while you lose control of the line. Because damping only subtracts a fraction of your speed per step, the ball keeps most of what you give it, so the disciplined input is one short press followed by a read of where it will settle. Use wall bounces deliberately in wider chambers — a shallow angle into a corner can redirect you down a side passage without a fresh tap — but treat close walls as a tax, since every glancing hit saps control and can spin you into a dead-end branch. Plan two junctions ahead, the way you would on paper: the maze is a perfect recursive carve with exactly one solution path, so when you reach a fork commit to a direction rather than hedging, because backtracking a fast-moving ball costs more than picking wrong and recovering. As the grid keeps growing level over level, the long-run skill is mapping in your head, not speeding up.
Controls
- Keyboard
- Arrow keys — roll the ball up, down, left, and rightH/J/K/L — vim-style roll (left, down, up, right)I — toggle the instructions overlay
- Mouse
- Not used
Features
- Procedurally generated perfect mazes carved by a recursive backtracker
- Three.js rendering over a Box2D physics world with real momentum, damping, and wall restitution
- Endless progression — the grid grows by two cells per side each time you reach the exit
- Top-down camera and a point light that automatically track the ball
- Dual control schemes: arrow keys or vim HJKL