Files
iron-requiem/src/data/patterns.js
Kay Kayyali 4bef8e66df
Some checks failed
Iron Requiem CI/CD / test (push) Failing after 11s
Iron Requiem CI/CD / deploy (push) Has been skipped
Build & Deploy / build-and-deploy (push) Has been cancelled
Fix Recovery Phase 4: Single bundle script, correct Traefik network
- build.sh: Remove old bundle tag before injecting hashed version
- index.html: Remove duplicate script tag from template
- docker-compose.yml: Fix network name (hermes-net, not litellm_hermes-net)
- Deployment verified: HTTPS 200 via Cloudflare + Traefik
2026-05-24 04:30:06 +00:00

108 lines
3.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Iron Requiem — Bullet Hell Pattern Definitions
*
* Every pattern MUST document a provable safe zone. This is non-negotiable:
* bullet-hell fairness requires that the player can always identify and
* reach a position where they won't take damage.
*
* @module src/data/patterns
*/
export const patterns = {
/**
* infantry_wall — Horizontal line of projectiles sweeping across screen.
*
* Used by: Type 62 (Light tank), Zone 1-3
*
* Safe zone: A 60px vertical gap exists above and below the projectile
* line. The wall is a single horizontal row — projectiles have no
* vertical spread. Standing at y = lineY ± 60 guarantees safety.
*/
infantry_wall: {
patternId: 'infantry_wall',
projectileCount: 40,
spawnInterval: 50,
telegraphTime: 1500,
telegraphAudio: 'plaa_bugle',
direction: 'left-to-right',
spacing: 12,
safeZone:
'Above or below the horizontal wall line by >=60px — ' +
'projectiles form a single row with no vertical spread.',
},
/**
* tank_destroyer_beam — Narrow cone beam from a heavy tank.
*
* Used by: Type 59 (Heavy), Zone 2-3
*
* Safe zone: Outside the 45° cone spread. The beam fires in a fixed
* direction from the enemy toward the player's last known position.
* There is no tracking after launch — any position more than 22.5°
* off the beam axis is safe.
*/
tank_destroyer_beam: {
patternId: 'tank_destroyer_beam',
projectileCount: 12,
spawnInterval: 80,
telegraphTime: 2000,
telegraphAudio: 'beam_charge',
direction: 'targeted',
spreadAngle: 45,
spacing: 16,
safeZone:
'Outside the 45° cone spread — beam fires in a fixed direction ' +
'with no tracking after launch. Any position >22.5° off axis is safe.',
},
/**
* artillery_ring — Expanding ring of projectiles from a static emplacement.
*
* Used by: Artillery Emplacement, all zones
*
* Safe zone: The center of the ring at the moment of spawn (radius
* 020 px). All projectiles travel radially outward from a single
* origin point. Standing at the exact spawn center places the player
* in the eye of the storm. The safe zone shrinks to zero as the first
* wave exits — timing is everything.
*/
artillery_ring: {
patternId: 'artillery_ring',
projectileCount: 24,
spawnInterval: 30,
telegraphTime: 2000,
telegraphAudio: 'mortar_whistle',
direction: 'radial_out',
spacing: 15,
safeZone:
'The center of the ring at time of spawn (radius 020 px) — ' +
'all projectiles travel radially outward from a single origin. ' +
'Safe zone shrinks to 0 after first wave exits.',
},
/**
* heli_sweep — Helicopter gunship strafing run.
*
* Used by: Helicopter Gunship, Zone 2-3
*
* Safe zone: The opposite screen edge from the sweep entry side.
* The helicopter crosses the screen in a straight line, firing
* projectiles in a 60° forward cone. The area behind the entry
* point (opposite edge of the screen) is completely safe during
* the sweep.
*/
heli_sweep: {
patternId: 'heli_sweep',
projectileCount: 30,
spawnInterval: 40,
telegraphTime: 1500,
telegraphAudio: 'rotor_wash',
direction: 'left-to-right',
spreadAngle: 60,
spacing: 14,
safeZone:
'The opposite screen edge from sweep entry — projectiles fire ' +
'in a forward cone; the area behind the entry point is completely safe.',
},
};