← WebMCP Directory

bullet-heaven.ahraz.me

bullet-heaven.ahraz.me

live Unverified (seed import) Media & Personal 20 tools imperative implementation

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_firing_pattern

act imperative

Adds, updates, or removes an emitter firing pattern and returns { action, waveId, emitterId, patternId, pattern, waveCount, emitterCount } with the affected pattern in full. Remove reports the ids and the new counts with no pattern. A pattern is one rhythm, one formation and one projectile; layer several on an emitter for a composite attack. 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

PropertyTypeRequiredDescription
action string yes 'add' generates the patternId and rejects one you supply. 'update' and 'remove' require patternId, and 'remove' accepts nothing but the ids. An emitter must keep at least one pattern, so the last one cannot be removed.
waveId string yes The wave the emitter belongs to.
emitterId string yes The emitter that owns the pattern.
patternId string no The pattern to change. Required to update or remove, omitted to add.
name string no —
enabled boolean no —
initialDelay number no Seconds after the emitter appears before it first fires.
interval number no Seconds between volleys.
burstCount integer no Volleys fired back to back, burstInterval apart, each interval.
burstInterval number no Seconds between the volleys of one burst.
volleys — no How many volleys the pattern fires in total, or 'continuous' to fire for as long as the emitter lives.
formationType string no 'single' fires one projectile, 'fan' spreads formationCount across spreadAngle, 'ring' spreads formationCount over 360 degrees. A fan or ring needs formationCount.
formationCount integer no Projectiles per volley. Requires formationType fan or ring, and is required when creating one; a single formation fires one projectile and rejects it.
spreadAngle number no Total width of a fan in degrees. Requires formationType fan; a ring already covers 360 degrees.
aimMode string no 'at_player' samples the player's position each volley; 'fixed' fires along the emitter's angle.
rotationPerVolley number no Degrees the aim advances per volley; this is what makes a spiral.
speed number no Projectile speed in pixels per second.
acceleration number no Pixels per second squared, up to maxSpeed.
maxSpeed number no Ceiling for an accelerating projectile, in pixels per second. Must be at least speed; omit it and it follows a raised speed up.
angularVelocity number no Degrees per second the projectile curves as it travels.
lifetime number no Seconds a projectile lives before it is culled.
collisionRadius number no Damage circle in pixels, independent of renderRadius.
renderRadius number no Drawn size in pixels. Purely visual.
color string no Projectile color as a six-digit CSS hex value.
Raw JSON schema
{
  "type": "object",
  "properties": {
    "action": {
      "type": "string",
      "enum": [
        "add",
        "update",
        "remove"
      ],
      "description": "'add' generates the patternId and rejects one you supply. 'update' and 'remove' require patternId, and 'remove' accepts nothing but the ids. An emitter must keep at least one pattern, so the last one cannot be removed."
    },
    "waveId": {
      "type": "string",
      "minLength": 1,
      "description": "The wave the emitter belongs to."
    },
    "emitterId": {
      "type": "string",
      "minLength": 1,
      "description": "The emitter that owns the pattern."
    },
    "patternId": {
      "type": "string",
      "minLength": 1,
      "description": "The pattern to change. Required to update or remove, omitted to add."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "enabled": {
      "type": "boolean"
    },
    "initialDelay": {
      "type": "number",
      "minimum": 0,
      "maximum": 3600,
      "description": "Seconds after the emitter appears before it first fires."
    },
    "interval": {
      "type": "number",
      "minimum": 0.05,
      "maximum": 30,
      "description": "Seconds between volleys."
    },
    "burstCount": {
      "type": "integer",
      "minimum": 1,
      "maximum": 99,
      "description": "Volleys fired back to back, burstInterval apart, each interval."
    },
    "burstInterval": {
      "type": "number",
      "minimum": 0,
      "maximum": 30,
      "description": "Seconds between the volleys of one burst."
    },
    "volleys": {
      "anyOf": [
        {
          "type": "string",
          "const": "continuous"
        },
        {
          "type": "integer",
          "minimum": 1,
          "maximum": 999
        }
      ],
      "description": "How many volleys the pattern fires in total, or 'continuous' to fire for as long as the emitter lives."
    },
    "formationType": {
      "type": "string",
      "enum": [
        "single",
        "fan",
        "ring"
      ],
      "description": "'single' fires one projectile, 'fan' spreads formationCount across spreadAngle, 'ring' spreads formationCount over 360 degrees. A fan or ring needs formationCount."
    },
    "formationCount": {
      "type": "integer",
      "minimum": 1,
      "maximum": 128,
      "description": "Projectiles per volley. Requires formationType fan or ring, and is required when creating one; a single formation fires one projectile and rejects it."
    },
    "spreadAngle": {
      "type": "number",
      "minimum": 0,
      "maximum": 360,
      "description": "Total width of a fan in degrees. Requires formationType fan; a ring already covers 360 degrees."
    },
    "aimMode": {
      "type": "string",
      "enum": [
        "at_player",
        "fixed"
      ],
      "description": "'at_player' samples the player's position each volley; 'fixed' fires along the emitter's angle."
    },
    "rotationPerVolley": {
      "type": "number",
      "minimum": -180,
      "maximum": 180,
      "description": "Degrees the aim advances per volley; this is what makes a spiral."
    },
    "speed": {
      "type": "number",
      "minimum": 20,
      "maximum": 2000,
      "description": "Projectile speed in pixels per second."
    },
    "acceleration": {
      "type": "number",
      "minimum": -5000,
      "maximum": 5000,
      "description": "Pixels per second squared, up to maxSpeed."
    },
    "maxSpeed": {
      "type": "number",
      "minimum": 20,
      "maximum": 4000,
      "description": "Ceiling for an accelerating projectile, in pixels per second. Must be at least speed; omit it and it follows a raised speed up."
    },
    "angularVelocity": {
      "type": "number",
      "minimum": -720,
      "maximum": 720,
      "description": "Degrees per second the projectile curves as it travels."
    },
    "lifetime": {
      "type": "number",
      "minimum": 0.05,
      "maximum": 60,
      "description": "Seconds a projectile lives before it is culled."
    },
    "collisionRadius": {
      "type": "number",
      "minimum": 1,
      "maximum": 32,
      "description": "Damage circle in pixels, independent of renderRadius."
    },
    "renderRadius": {
      "type": "number",
      "minimum": 1,
      "maximum": 48,
      "description": "Drawn size in pixels. Purely visual."
    },
    "color": {
      "type": "string",
      "pattern": "^#[0-9a-fA-F]{6}$",
      "description": "Projectile color as a six-digit CSS hex value."
    }
  },
  "required": [
    "action",
    "waveId",
    "emitterId"
  ],
  "additionalProperties": false
}

Similar websites

wfsim.app

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…

live Unverified Media & Personal
101 tools A12 / Act89 / T0 Not yet scored Seen 2026-11-05
enemies_targets_list enemies_target_new enemies_target_copy enemies_target_open enemies_target_set
Inspect tools
commonplace-webmcp.vercel.app

commonplace-webmcp.vercel.app

Commonplace is an editable social reading space built for people and their browser agents.

live Unverified Media & Personal Transact tools
89 tools A10 / Act77 / T2 Not yet scored Seen 2026-11-05
commonplace.get_page_state commonplace_get_page_state commonplace.get_reading_list commonplace_get_reading_list commonplace.get_profile
Inspect tools
pixelforge-studio.appcaster.chatgpt.site

pixelforge-studio.appcaster.chatgpt.site

A professional browser pixel-art editor for drawing, frame animation, palettes, sprite sheets, GIF export, and WebMCP automation.

live Unverified Media & Personal Transact tools
88 tools A12 / Act70 / T6 Not yet scored Seen 2026-11-05
plan_text_creation get_text_creation_status create_from_text claim_text_creation update_text_creation
Inspect tools
pixelite.taskcraft.site

pixelite.taskcraft.site

Pixelite

live Unverified Media & Personal Transact tools
83 tools A4 / Act78 / T1 Not yet scored Seen 2026-11-05
get_document_info list_layers get_active_layer get_selection_info new_document
Inspect tools

Related on Influzer