Skip to content

Let the ship explode before the debrief - #8

Merged
sbddesign merged 1 commit into
ATLBitLab:mainfrom
jordan-bravo:feat/death-explosion
Aug 6, 2026
Merged

Let the ship explode before the debrief#8
sbddesign merged 1 commit into
ATLBitLab:mainfrom
jordan-bravo:feat/death-explosion

Conversation

@jordan-bravo

Copy link
Copy Markdown
Contributor

Taking the fatal hit spawned a fireball and called finish in the same frame, and finish calls clearArena, which calls fx.clear. The explosion existed for one frame and was then wiped by the thing that replaced it. In practice the hull vanished and the stat screen appeared.

A loss now seals its result and hands the next 2.4 seconds to the wreck:

  • 0.00s the hull is still there. Dead, unsteerable, coasting on its last velocity, tumbling, venting sparks, cooking white-hot, with two small ruptures walking across it.
  • 0.55s the ship goes. Big detonation, hard camera shake, hull hidden.
  • 0.95s cook-offs out in the debris, then it burns down.
  • 2.40s debrief.

The tumble is applied to the visual only. The chase camera sits in the ship's own frame, so rotating player.quaternion would spin the shot rather than the hull and make the last two seconds unwatchable. The squadron keeps flying and bolts keep travelling underneath it — freezing the arena on the death frame reads as the game crashing rather than as a kill — and none of it can touch the player, since step and takeDamage both bail on a dead hull and bolts skip anything untargetable.

Two things fell out of it:

  • The result is sealed at the moment of death rather than read at finish. The arena runs for two more seconds, which is long enough for a hostile to fly into the star and post a bounty to a pilot who is already dead. elapsed stops too, so a loss no longer records the length of its own explosion as flight time.
  • The game refuses to pause while dying. Escape mid-explosion — or the pointer lock the browser drops when you press it — otherwise parks a pause menu in front of the fireball with a debrief queued behind it.

ending is gone: dying covers the death path and active already covered the win path, so it guarded nothing.

Verification: npm run check green — typecheck, the existing simcheck suite including the seeded end-to-end run, the balance contract, plus ten new assertions driving a real run onto a mine and checking the handoff. Not verified in a browser; there is no display on this box.

@vercel

vercel Bot commented Aug 5, 2026

Copy link
Copy Markdown

@jordan-bravo is attempting to deploy a commit to the Delineator Team on Vercel.

A member of the Team first needs to authorize it.

Taking the fatal hit spawned a fireball and called `finish` in the same
frame, and `finish` calls `clearArena`, which calls `fx.clear`. The
explosion existed for one frame and was then wiped by the thing that
replaced it. In practice the hull vanished and the stat screen appeared.

A loss now seals its result and hands the next 2.4 seconds to the wreck:

- 0.00s  the hull is still there. Dead, unsteerable, coasting on its last
         velocity, tumbling, venting sparks, cooking white-hot, with two
         small ruptures walking across it.
- 0.55s  the ship goes. Big detonation, hard camera shake, hull hidden.
- 0.95s  cook-offs out in the debris, then it burns down.
- 2.40s  debrief.

The tumble is applied to the *visual* only. The chase camera sits in the
ship's own frame, so rotating `player.quaternion` would spin the shot
rather than the hull and make the last two seconds unwatchable. The
squadron keeps flying and bolts keep travelling underneath it — freezing
the arena on the death frame reads as the game crashing rather than as a
kill — and none of it can touch the player, since `step` and `takeDamage`
both bail on a dead hull and bolts skip anything untargetable.

Two things fell out of it:

- **The result is sealed at the moment of death** rather than read at
  `finish`. The arena runs for two more seconds, which is long enough for
  a hostile to fly into the star and post a bounty to a pilot who is
  already dead. `elapsed` stops too, so a loss no longer records the
  length of its own explosion as flight time.
- **The game refuses to pause while dying.** Escape mid-explosion — or
  the pointer lock the browser drops when you press it — otherwise parks
  a pause menu in front of the fireball with a debrief queued behind it.

`ending` is gone: `dying` covers the death path and `active` already
covered the win path, so it guarded nothing.

Verification: `npm run check` green — typecheck, the existing simcheck
suite including the seeded end-to-end run, the balance contract, plus ten
new assertions driving a real run onto a mine and checking the handoff.
Not verified in a browser; there is no display on this box.

Co-authored-by: Jordan Bravo <jordan@bravo.cc>
Signed-off-by: Jordan Bravo <jordan@bravo.cc>
@jordan-bravo
jordan-bravo force-pushed the feat/death-explosion branch from eed386a to 975c3c1 Compare August 5, 2026 21:40
@vercel

vercel Bot commented Aug 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
neon-orbit Ready Ready Preview Aug 6, 2026 11:07am

Request Review

@sbddesign
sbddesign merged commit 0074a0d into ATLBitLab:main Aug 6, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants