bullet-heaven.ahraz.me
An agent-ready bullet hell maker built with Phaser and WebMCP.
First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com
Answer 4 · Act 15 · Transact 1 · Score: Not yet scored
Tool inspector
edit_wave
Adds, updates, or removes an encounter wave and returns { action, waveId, wave, waveCount, emitterCount }, where wave is an outline: the wave's own settings and its emitter ids, not the emitter bodies. Remove reports the id and the new counts with no wave. Use edit_emitter to populate a wave this adds. The result reflects the state after this call, so no follow-up read is needed. The result's 'evaluation' reports whether the project has been measured since it changed; on verified: false, run evaluate_encounter before calling the edit an improvement. This returns to the editor first, on its own. From a landing page or shared play link that needs a page load, it opens the editor and asks you to retry once WebMCP reconnects rather than editing during teardown. Call get_maker_state immediately before this: the person edits the same live state you do.
Page: /editor
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
action |
string | yes | 'add' generates the waveId and rejects one you supply. 'update' and 'remove' require waveId, and 'remove' accepts nothing else. |
waveId |
string | no | The wave to change. Required to update or remove, omitted to add. |
name |
string | no | — |
enabled |
boolean | no | A disabled wave is skipped, by both the playtest and evaluation. |
startType |
string | no | What starts the wave, and which timing fields apply: 'encounter_start' takes delay, 'at_time' requires time, 'after_wave_cleared' requires sourceWaveId and takes delay, 'defeat_count' requires sourceWaveId and takes defeatCount. Required whenever you change any of those fields, and each type rejects the ones that are not its own. On update, a timing field you omit keeps its current value. |
sourceWaveId |
string | no | The wave this one waits on. Required by startType after_wave_cleared and defeat_count, and must name an earlier wave. |
delay |
number | no | Seconds to wait after the start condition is met. For startType encounter_start or after_wave_cleared. |
time |
number | no | Seconds from the start of the encounter. Required by, and only valid with, startType at_time. |
defeatCount |
integer | no | How many of the source wave's emitters must be defeated first. Only valid with startType defeat_count. |
Raw JSON schema
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"add",
"update",
"remove"
],
"description": "'add' generates the waveId and rejects one you supply. 'update' and 'remove' require waveId, and 'remove' accepts nothing else."
},
"waveId": {
"type": "string",
"minLength": 1,
"description": "The wave to change. Required to update or remove, omitted to add."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"enabled": {
"type": "boolean",
"description": "A disabled wave is skipped, by both the playtest and evaluation."
},
"startType": {
"type": "string",
"enum": [
"encounter_start",
"at_time",
"after_wave_cleared",
"defeat_count"
],
"description": "What starts the wave, and which timing fields apply: 'encounter_start' takes delay, 'at_time' requires time, 'after_wave_cleared' requires sourceWaveId and takes delay, 'defeat_count' requires sourceWaveId and takes defeatCount. Required whenever you change any of those fields, and each type rejects the ones that are not its own. On update, a timing field you omit keeps its current value."
},
"sourceWaveId": {
"type": "string",
"minLength": 1,
"description": "The wave this one waits on. Required by startType after_wave_cleared and defeat_count, and must name an earlier wave."
},
"delay": {
"type": "number",
"minimum": 0,
"maximum": 3600,
"description": "Seconds to wait after the start condition is met. For startType encounter_start or after_wave_cleared."
},
"time": {
"type": "number",
"minimum": 0,
"maximum": 3600,
"description": "Seconds from the start of the encounter. Required by, and only valid with, startType at_time."
},
"defeatCount": {
"type": "integer",
"minimum": 1,
"maximum": 999,
"description": "How many of the source wave's emitters must be defeated first. Only valid with startType defeat_count."
}
},
"required": [
"action"
],
"additionalProperties": false
}
Similar websites
wfsim.app
A Warframe calculator that simulates the fight instead of estimating it — builder, simulator, optimizer. Every formula cites its source, and the golden tests ar…
commonplace-webmcp.vercel.app
Commonplace is an editable social reading space built for people and their browser agents.
pixelforge-studio.appcaster.chatgpt.site
A professional browser pixel-art editor for drawing, frame animation, palettes, sprite sheets, GIF export, and WebMCP automation.
pixelite.taskcraft.site
Pixelite