Reinforcement learning
GeoDashML
Can a reinforcement learning agent learn to beat Geometry Dash, and how many attempts does it need? Before any of that, I had to make the game hold still.
- Timeline
- Public repo · Oct 2026 – present
- Role
- Independent developer
- Scope
- Game modding, Gymnasium environment, search, PPO
- Status
- Stereo Madness cleared · more seeds training
What it does
A C++ mod, built with Geode, pauses Geometry Dash and steps it one 240 Hz physics tick at a time over a local socket. A Gymnasium environment wraps that. A deterministic search bot cleared the first level, Stereo Madness, in 3,956 attempts with 164 inputs.
Its run then became a backward curriculum for a PPO agent I wrote in plain PyTorch: start just before the end, and move the start back as it learns. The first PPO run cleared the level from the start after 183,634 attempts, 46 times what the search bot needed.
What was hard
Getting the same run every time. The same inputs have to give the same result, and that took fixing a macOS frame hook and two audio livelocks, where the game spun forever loading music, before 1,000 replays gave 1,000 identical runs at 35,000 ticks a second.
The game kept fighting back after that. It slows down about 570 times over a long session, and its end-of-level animation only plays while the window is in front, which quietly moved the player between episodes and wrecked two training runs before I found it.
Where it goes next
Two more seeds are training, so the 46 times figure is not one lucky run. Then testing how much reaction delay the agent can handle, and more levels.
Where it landed
Curious about something here? Ask me about it
Next projectClimbing Beta Perception and search · Python