[{"data":1,"prerenderedAt":107},["ShallowReactive",2],{"game-astray":3,"article-astray":40},{"slug":4,"title":5,"description":6,"category":7,"subcategory":8,"tags":9,"thumbnail":13,"thumbnailAlt":14,"iframeUrl":15,"iframeWidth":16,"iframeHeight":17,"embedType":18,"developer":19,"developerUrl":20,"releaseDate":21,"lastUpdated":21,"popular":22,"difficulty":23,"controls":24,"features":31,"relatedGames":37},"astray","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.","Puzzle","Maze",[7,8,10,11,12],"Physics","Ball Rolling","Procedural Generation","\u002Fassets\u002Fimages\u002Fgames\u002Fastray.svg","Astray game thumbnail","https:\u002F\u002Fwwwtyro.github.io\u002FAstray\u002F","100%","600","iframe","wwwtyro","https:\u002F\u002Fgithub.com\u002Fwwwtyro\u002FAstray","2026-07-08",false,"Easy",{"keyboard":25,"mouse":29,"touch":30},[26,27,28],"Arrow keys — roll the ball up, down, left, and right","H\u002FJ\u002FK\u002FL — vim-style roll (left, down, up, right)","I — toggle the instructions overlay","Not used","Not supported",[32,33,34,35,36],"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",[38,39],"draw-a-stickman","a-dark-room",{"id":41,"title":5,"body":42,"description":6,"extension":99,"faq":100,"lastReviewed":21,"meta":101,"navigation":102,"path":103,"seo":104,"slug":4,"stem":105,"__hash__":106},"games\u002Fgames\u002Fastray.md",{"type":43,"value":44,"toc":92},"minimark",[45,50,54,58,85,89],[46,47,49],"h2",{"id":48},"overview","Overview",[51,52,53],"p",{},"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.",[46,55,57],{"id":56},"how-to-play","How to Play",[51,59,60,61,65,66,69,70,69,73,76,77,80,81,84],{},"Roll the ball from its starting corner to the lit exit at the opposite corner of the maze. Press the ",[62,63,64],"em",{},"Arrow keys"," to nudge it up, down, left, and right; vim users get the same axes on ",[62,67,68],{},"H",", ",[62,71,72],{},"J",[62,74,75],{},"K",", and ",[62,78,79],{},"L",". There is no jump and no camera control — the top-down view and its point light track the ball automatically. Hold ",[62,82,83],{},"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.",[46,86,88],{"id":87},"tips-strategy","Tips & Strategy",[51,90,91],{},"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.",{"title":93,"searchDepth":94,"depth":94,"links":95},"",2,[96,97,98],{"id":48,"depth":94,"text":49},{"id":56,"depth":94,"text":57},{"id":87,"depth":94,"text":88},"md",null,{},true,"\u002Fgames\u002Fastray",{"description":6},"games\u002Fastray","hu90GGSIhiGvNyiF9M3RlolK5Txic68QE20L0iRYUBU",1783575110651]