GUTS has had three bosses designed and none implemented. This is the first, and the framework the other two should reuse. Built to LANE_C_NOTES §Boss specs, phase table and all. WHY IT IS SMALL. A boss here is not a parallel entity system, it is a SCHEDULE over the enemy pool. The nodes and vents are ordinary enemies, so weapons hit them, the InstancedMesh draws them and enemy:die reports them for free; the fight's identity lives entirely in WHEN they can be hurt, which is two flags (`invuln`, `armor`) honoured by enemies.hurt(). boss.js is a state machine and nothing else. Faithful to C's table: P1 4 rim nodes, iris opens 2.5s every 8s P2 4 nodes, opens 1.8s every 5s, TWO armoured — and only the antacid torpedo strips them P3 the core alone, 60hp = C's "x5 hits", plus the 25s doom timer that kills you if you stall Telegraphs are C's too: a "deep gulp" 2s before each window (boss:telegraph + audio), and nodes go amber -> white-hot exactly when they become shootable — one uniform driven off `invuln`, so the thing that glows IS the thing you can hurt, always. Vents are turrets at fixed arcs: a turret already fires a telegraphed homing projectile on a cooldown, which is what an acid vent is. hp is B's call (C: "numbers need B's framework to tune against"). 150 per rim node means a ring outlives its first window, so you must come back for it — which is what lets the stomach's coat-drain be the real clock. C's pillar, verified: parked in the lair for 20s without fighting back, coat goes 100 -> 0. "A race against your coat, not its hp." Verified end-to-end: a paced pilot (11 shots/s, ~70% uptime) wins in 38.8s across 9 windows at 0.38 open-duty (spec: 31-36%); phases report 4/0 armoured, 4/2 armoured, 1 core; damage is refused while the iris is shut; the two armoured nodes consumed exactly 2 torpedo strips. Not included: C's arena churn (a force on the player, the one part of the spec that is a feel change rather than a schedule) — noted for the round that tunes it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
101 lines
1.7 KiB
JSON
101 lines
1.7 KiB
JSON
{
|
|
"version": "0.0.1",
|
|
"configurations": [
|
|
{
|
|
"name": "guts",
|
|
"runtimeExecutable": "python3",
|
|
"runtimeArgs": [
|
|
"-m",
|
|
"http.server",
|
|
"8140",
|
|
"--directory",
|
|
"web"
|
|
],
|
|
"port": 8140
|
|
},
|
|
{
|
|
"name": "guts-f",
|
|
"runtimeExecutable": "python3",
|
|
"runtimeArgs": [
|
|
"-m",
|
|
"http.server",
|
|
"8141",
|
|
"--directory",
|
|
"web"
|
|
],
|
|
"port": 8141
|
|
},
|
|
{
|
|
"name": "guts-a",
|
|
"runtimeExecutable": "python3",
|
|
"runtimeArgs": [
|
|
"-m",
|
|
"http.server",
|
|
"8145",
|
|
"--directory",
|
|
"web"
|
|
],
|
|
"port": 8145
|
|
},
|
|
{
|
|
"name": "guts-e",
|
|
"runtimeExecutable": "python3",
|
|
"runtimeArgs": [
|
|
"-m",
|
|
"http.server",
|
|
"8146",
|
|
"--directory",
|
|
"web"
|
|
],
|
|
"port": 8146
|
|
},
|
|
{
|
|
"name": "guts-b",
|
|
"runtimeExecutable": "python3",
|
|
"runtimeArgs": [
|
|
"-m",
|
|
"http.server",
|
|
"8142",
|
|
"--directory",
|
|
"web"
|
|
],
|
|
"port": 8142
|
|
},
|
|
{
|
|
"name": "guts-boss",
|
|
"runtimeExecutable": "python3",
|
|
"runtimeArgs": [
|
|
"-m",
|
|
"http.server",
|
|
"8143",
|
|
"--directory",
|
|
"web"
|
|
],
|
|
"port": 8143
|
|
},
|
|
{
|
|
"name": "guts-boss2",
|
|
"runtimeExecutable": "python3",
|
|
"runtimeArgs": [
|
|
"-m",
|
|
"http.server",
|
|
"8144",
|
|
"--directory",
|
|
"web"
|
|
],
|
|
"port": 8144
|
|
},
|
|
{
|
|
"name": "guts-boss3",
|
|
"runtimeExecutable": "python3",
|
|
"runtimeArgs": [
|
|
"-m",
|
|
"http.server",
|
|
"8148",
|
|
"--directory",
|
|
"web"
|
|
],
|
|
"port": 8148
|
|
}
|
|
]
|
|
} |