Build one room that asks the player to use the same dash in two directions. A flat approach can reach the first ledge. The next landing sits lower, so the player has to choose a downward path. Keep the inputs small enough that a failed attempt tells the player something about the room.
In the fictional Canopy Transfer, a maintenance runner crosses two gaps inside a suspended greenhouse. The middle ledge restores one dash charge. Use a small coordinate grid to check where each dash goes, what it can hit, and where the runner lands.

Learn from a small movement vocabulary
The Extremely OK Games Celeste page describes jumping, air-dashing, climbing, and quick respawns. The official game site presents a mountain climb through hand-crafted platforming. That combination points to a level-design question you can take into a different game. How can the next landing ask for a new use of an input the player already knows?
Give your own room a different runner, setting, and route. Here the glass service bay uses a fixed jump and a three-cell dash. The first gap teaches horizontal alignment. The second asks whether the player can aim at a landing below the end of the jump.
Define where the dash goes and when it ends
Number columns from 0 to 8 going right and rows from 0 to 5 going up. Put the start at (0,1), the recharge ledge at (4,2), and the exit at (8,0). Those are the only marked landing tiles. A beam blocks (3,4). The runner starts grounded with one dash charge.
| Action or check | Original rule |
|---|---|
| Jump | From the start or middle ledge, move one cell right and one up. Set the runner airborne. |
| Dash | While airborne with a charge, spend it and step three cells east, northeast, or southeast. Check each new cell in order. |
| Land | After a clear dash, land only at a marked endpoint. Recharge on the middle ledge and finish at the exit. |
| Fail or reset | A blocked or out-of-bounds cell fails the dash. A clear dash ending away from a landing tile misses. Both return to the grounded start with one charge. |
Reject a grounded dash, a jump while airborne, or a dash without a charge. Keep the position and state unchanged on rejection. The room waits for a command, so you can check direction and collision before adding any continuous movement.

Walk the four inputs and two failure paths
Use the same start for each replay. The first dash ends exactly on the recharge ledge. The second ends three rows below its launch point. The ledge is what makes the second dash available.
| Input | Cells entered | Expected result |
|---|---|---|
| Jump from start | (1,2) | Airborne with one charge. |
| Dash east | (2,2) → (3,2) → (4,2) | Land on the middle ledge and recharge. |
| Jump from middle | (5,3) | Airborne again with one charge. |
| Dash southeast | (6,2) → (7,1) → (8,0) | Land at the exit and finish. |

From the first jump, try northeast. The dash enters (2,3) and then hits the beam at (3,4). It should reset before considering (4,5). From the second jump, try east. That path reaches (8,3) without hitting anything, then misses because the exit is at (8,0). Separate collision feedback from landing feedback so the player knows whether to avoid an obstacle or change direction.
Give AI one room to build
Use a readable layout and a visible charge state before animating the dash. SEELE’s prompt-led creation gives you a starting point for a small browser build. Compare its step log with the route table.
Build an original side-on browser platformer called Canopy Transfer.
Use columns x=0–8 rightward and rows y=0–5 upward.
Landing tiles are start (0,1), recharge ledge (4,2), exit (8,0).
Block cell (3,4) with a beam. Start grounded with one dash charge.
Jump from start or middle moves (+1,+1) and sets airborne.
Allow one dash while airborne with charge. Accept E (+1,0),
NE (+1,+1), or SE (+1,-1). Spend the charge and try three cell
steps in order. A blocked or out-of-bounds cell fails immediately.
After a clear dash, land only if its endpoint is a landing tile.
Landing on the middle ledge restores one charge. The exit wins.
An unmarked endpoint is a missed landing.
Reject ground dash, air jump, and dash without charge without moving.
A failed dash or missed landing resets to the start, grounded, with
one charge. Show a different result for each failure.
Allow Reset from any state. Stop taking movement inputs after a win.
Wait for input between steps. Show position, charge and dash cells.
Use an original greenhouse, runner, platforms and interface.
Check that a ground dash leaves the charge alone, that the beam stops a dash before its third cell, and that the middle ledge restores the charge on contact. Replay a win and a miss, then confirm that reset restores the same start in both cases.
Change only the landing rule
After a complete unobstructed dash, allow the runner to settle up to three cells straight down. Check the endpoint first. If it is unmarked, scan downward in the same column, stop at any blocked cell, and land on the nearest marked tile within range.
Replay the second east dash. Its path and endpoint stay the same, but the new scan finds the exit three cells below. The first northeast dash still hits the beam. The original east then southeast route still finishes. This version accepts another approach and removes the need to aim downward in this room. Use the guide to revising one rule and rerunning the loop to check the two builds from the same starting state.
Start with one room you can replay
Give each landing a reason to sit where it does. Start your original precision platformer with SEELE’s AI Game Maker and check the two dash paths before expanding the level.
Frequently asked questions
Do I need to keep the movement grid in the finished game?
Use it to establish the path and state changes you expect. You can later use continuous movement, but replay the same cases to check that an intervening obstacle still stops the dash and that contact with the ledge still restores the charge.
When should the dash charge come back?
Restore it when the runner lands on the designated recharge surface. If the interface shows a charge before contact, players may try the next dash too early. Keep the cue tied to the same state change that permits the next dash.
How do I show why an attempt failed?
Show a blocked path at the first cell the dash cannot enter. When the path is clear and the endpoint misses the landing, point to the landing instead. Keep the reset quick so players can change one input and try again.
When should I add another movement action?
Add one when the existing jump and dash leave a clear design problem unresolved. Try changing the placement of a landing first. If that creates the desired decision, the current controls may already do enough for the room. Test the new placement with the same input trace.


