Inspiration

I've been a fan of bullet hell games since I can remember, and I've even tried making a few. It's tedious, difficult, error-prone and very time consuming; from designing the level to play testing, things take a lot of time. The goal of this experiment is to see if I can make it easier, more accessible and fun to create bullet hell games.

What it does

Bullet Heaven is a browser-based bullet-hell level editor where a person and an agent build, test, and share levels together. Describe a level. Watch it appear. Simulate it. Tune it together.

Most agent tools let an agent change something. Bullet Heaven also lets it measure whether that change worked.

Through 20 WebMCP tools, an agent can create waves, emitters, formations, player settings, and complete encounters directly in the same editor you use. Its changes appear live, enter the same undo history, and can be reverted with Ctrl-Z.

The key loop is:

Author → simulate → measure → revise.

evaluate_encounter runs a deterministic headless playthrough and reports clearance, survival time, hits, waves reached, projectile density, dodge margin, and the fatal wave. The agent can use that evidence to tune a level instead of guessing at difficulty.

Bullet Heaven can also record real play sessions and analyse them to derive a player-conditioned pilot. The agent can iteratively fit that pilot against recordings, save it, and use it to help balance future encounters for that player rather than only against generic novice, average, or expert tiers.

How I built it

Bullet Heaven uses Phaser for gameplay, React for the editor, and Zustand with undoable project history. The simulation is framework-independent: Phaser renders it, while headless evaluation and bot pilots run the same rules.

WebMCP tools do not have a separate agent-only path. They use the same store and domain operations as the inspector and canvas, so agent edits are immediately visible, undoable, and attributed to the agent.

The tool surface was designed for efficient collaboration. apply_encounter can build a complete level in one call, while focused edit tools handle refinement. Mutating results return only the changed object and useful IDs, reducing a one-field edit response from roughly 56 KB to about 1 KB on a large project.

Published levels are immutable, content-addressed /play/<hash> documents stored through Cloudflare Pages and R2.

Challenges I ran into

The first challenge was replacing repeated manual playtesting with useful, deterministic evaluation. That led to the headless simulation and bot pilots.

The other challenge was less expected. Individually correct tools can still create a slow workflow if they return too much state, require too many round trips, or expose actions at the wrong level of abstraction. I iterated heavily on bulk authoring, focused edits, concise results, freshness requirements, undo behavior, and safe transitions between Play and Edit modes.

Accomplishments that we're proud of

  • A real shared editor where human and agent changes use the same state and undo history.
  • Deterministic headless evaluation, so the agent can measure level difficulty without interrupting play.
  • Three reference pilot tiers for repeatable balancing.
  • Replay analysis and player-conditioned pilot fitting for personalized balancing.
  • A complete WebMCP authoring workflow: create, evaluate, revise, undo, and share.

What we learned

WebMCP is a powerful tool for accessibility and empowering people to build and create things that they want. With Bullet Heaven, even a completely inexperienced game developer is able to craft levels that they find fun.

WebMCP is particularly relevant for complex user interfaces; providing agents with low-level tool access and enabling users to bypass the chore of menus, keyboard shortcuts and a learning curve is a genuine accessibility innovation that will improve efficiency for complex tasks in complex systems.

Evaluation and optimization remains a challenge for agents; particularly when it comes to evaluation metrics that are very "human", such as level difficulty. It is important to provide "cost functions" as tools to agents that they can use to get feedback about what they have done; this enables powerful collaborative capabilities and greatly reduces the number of iterations required to reach a fun outcome. Mutation tools alone get you an agent that changes things confidently and has no idea whether it helped.

And sharing state rather than mirroring it is what makes the collaboration feel like collaboration. Because the agent writes to the same store, the same undo history and the same evaluation panel that I use, I never have to wonder what it did or take its word for it.

What's next for Bullet Heaven

More of the level editor; more movement and formation types, better boss authoring, improving the graphics and project import/export so levels are properly portable. I'd also like to take the calibration idea further, since a pilot fitted to a player is the beginning of a level that tunes itself to whoever opens the link rather than to whoever wrote it.

Mostly though, I want to see if people like it, and hopefully spread the love of bullet hells even further.

Share this project:

Updates

Submission history