{"ok":true,"site":{"host":"cheneytsai.github.io","url":"https://cheneytsai.github.io/maze95/","type":"live","desc":"Maze 95","tools":[{"name":"maze_get_state","kind":"answer","impl":"imperative","description":"Read the current maze: seed, grid size, the player's cell and heading, which of the four sides of that cell are open, the exit cell, and how many steps remain to the exit.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/maze95/"},{"name":"maze_look","kind":"act","impl":"imperative","description":"Describe what is visible straight ahead: how far the corridor runs, side openings along it, and whether the exit is in view. Use this to navigate without screenshots.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/maze95/"},{"name":"maze_get_map","kind":"answer","impl":"imperative","description":"Return an ASCII floor plan of the maze. '@' is the player, 'S' the start, 'X' the exit, '?' an unexplored cell. Set reveal to true for the whole plan even where the player has not walked.","inputSchema":{"type":"object","properties":{"reveal":{"type":"boolean","description":"Show unexplored cells too (default false)"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/maze95/"},{"name":"maze_move","kind":"act","impl":"imperative","description":"Walk whole cells relative to the current heading, at a pace the viewer can watch. Returns while the camera is still walking; call again to queue more and the walk continues without a jump. Stops early at a wall and reports how far it got.","inputSchema":{"type":"object","properties":{"direction":{"type":"string","enum":["forward","back","left","right"],"description":"Direction relative to the current heading"},"cells":{"type":"integer","minimum":1,"maximum":64,"description":"How many cells to walk (default 1)"},"wait":{"type":"boolean","description":"Block until the camera arrives instead of returning while it walks (default false)"},"instant":{"type":"boolean","description":"Skip the walk and arrive at once. The viewer sees a jump, so prefer leaving this off"}},"required":["direction"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/maze95/"},{"name":"maze_turn","kind":"act","impl":"imperative","description":"Turn the camera. Either a relative turn (left, right, around) or an absolute compass heading.","inputSchema":{"type":"object","properties":{"turn":{"type":"string","enum":["left","right","around"],"description":"Relative quarter turn"},"heading":{"type":"string","enum":["north","east","south","west"],"description":"Absolute heading instead of a relative turn"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/maze95/"},{"name":"maze_goto","kind":"act","impl":"imperative","description":"Walk the shortest route to a given cell, turning corners on the way, at a pace the viewer can watch. Routes are planned from where the camera will be once any queued walk finishes, so calls chain smoothly. Coordinates are zero-based, x across and z down, matching maze_get_map.","inputSchema":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"description":"Target column"},"z":{"type":"integer","minimum":0,"description":"Target row"},"wait":{"type":"boolean","description":"Block until the camera arrives instead of returning while it walks (default false)"},"instant":{"type":"boolean","description":"Skip the walk and arrive at once. The viewer sees a jump, so prefer leaving this off"}},"required":["x","z"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/maze95/"},{"name":"maze_solve","kind":"act","impl":"imperative","description":"Walk the shortest route to the exit portal, at a pace the viewer can watch. Returns while the camera is still walking unless you pass wait:true; either way the walk finishes on its own.","inputSchema":{"type":"object","properties":{"wait":{"type":"boolean","description":"Block until the camera arrives instead of returning while it walks (default false)"},"instant":{"type":"boolean","description":"Skip the walk and arrive at once. The viewer sees a jump, so prefer leaving this off"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/maze95/"},{"name":"maze_wait_for_arrival","kind":"act","impl":"imperative","description":"Wait until the camera finishes the walk already queued, then report where it ended up. Use it when you want to look around or decide only once it has actually arrived.","inputSchema":{"type":"object","properties":{"timeoutSeconds":{"type":"number","minimum":1,"maximum":300,"description":"Give up waiting after this long (default 120)"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/maze95/"},{"name":"maze_new_maze","kind":"act","impl":"imperative","description":"Generate a fresh maze. Optionally set the grid size or pass a seed to reproduce a specific maze.","inputSchema":{"type":"object","properties":{"size":{"type":"integer","minimum":6,"maximum":32,"description":"Cells per side"},"seed":{"type":"string","description":"Reuse a seed to get the same maze back"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/maze95/"},{"name":"maze_set_options","kind":"act","impl":"imperative","description":"Change how the maze looks and plays: wall style, torch range, field of view, wall height, walk speed, loop density, and the on-screen extras.","inputSchema":{"type":"object","properties":{"theme":{"type":"string","enum":["brick","stone","tile","circuit","hedge"],"description":"Wall style"},"floor":{"type":"string","enum":["classic","auto","checker","concrete","carpet","marble","grate","soil"],"description":"Floor style; auto follows the wall style"},"ceiling":{"type":"string","enum":["classic","auto","panels","concrete","girders","stars","neon"],"description":"Ceiling style; auto follows the wall style, stars makes the maze roofless"},"fog":{"type":"integer","minimum":15,"maximum":200,"description":"How far the light reaches, in world units"},"lighting":{"type":"string","enum":["classic","torch"],"description":"classic is the original's gentle fade, torch falls off sharply"},"fov":{"type":"integer","minimum":55,"maximum":105,"description":"Field of view in degrees"},"wallHeight":{"type":"integer","minimum":6,"maximum":20,"description":"Wall height in world units"},"speed":{"type":"integer","minimum":4,"maximum":40,"description":"Walk speed"},"braid":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of dead ends opened into loops"},"decor":{"type":"boolean","description":"Wall plaques"},"drift":{"type":"boolean","description":"Drifting polyhedra"},"exitPortal":{"type":"boolean","description":"Show the exit portal"},"scanlines":{"type":"boolean","description":"CRT scanline overlay"},"revealMap":{"type":"boolean","description":"Reveal the whole map instead of only explored cells"},"showMap":{"type":"boolean","description":"Show the map panel"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/maze95/"},{"name":"maze_set_driver","kind":"act","impl":"imperative","description":"Choose who is walking. The maze never moves on its own: it waits until a driver is set or a movement tool is called.","inputSchema":{"type":"object","properties":{"driver":{"type":"string","enum":["stop","screensaver","agent","player"],"description":"stop leaves the camera still and waiting, screensaver runs the automatic wall follower, agent holds it for tool-driven moves, player hands control to the keyboard"}},"required":["driver"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/maze95/"},{"name":"maze_goto_cell","kind":"act","impl":"declarative","description":"Walk to a specific cell of the maze. x is the column and z is the row, both zero-based, matching the ASCII plan from maze_get_map.","inputSchema":{"type":"object","properties":{"x":{"type":"number"},"z":{"type":"number"}},"required":["x","z"]},"__source":"spec","__declarative":true,"page":"/maze95/"},{"name":"maze_generate","kind":"act","impl":"declarative","description":"Generate a fresh maze. Give a seed to reproduce a specific maze, or leave it blank for a random one.","inputSchema":{"type":"object","properties":{"seed":{"type":"string","description":"seed (optional)"}}},"__source":"spec","__declarative":true,"page":"/maze95/"}],"category":"Media & Personal","apiSurface":"spec","toolCount":13}}