storm
The supercell, as the second thing fighting you.
require("game.storm.storm") registers the storm system with the
AnvilDirector at order 20 — between the runner's hands and the threats — and
sets A.claims.storm. The StormHost component beside this module is what
performs that require from the scene.
What it drives
Field on A.state | What it is |
|---|---|
altitude / climbRate | metres climbed, and how fast right now. Altitude is the score and the clock. |
airMul | the updraft/downdraft column, K.STORM.downdraftMin..updraftMax. It multiplies climbBase, so the air decides the pace of the whole run. |
wind | the total signed lateral acceleration on the airframe, units/s². Wander and gust are already in it. |
gust | 0..1 gust intensity, unsigned — a display value, not a force. |
weather | "clear" / "rain" / "hail", in cells that last 5–16 s. |
visibility | eased toward the weather's target; A.rules.sight() folds in the blind. |
boltT / boltPower / boltX | the last strike, its decaying flash envelope, and where in the shaft it hit. |
Events: bolt, weather, hit (kind = "hail"), shake.
The three bands, and why they fly differently
Escalation is not one multiplier. Each band gets its own air, wind, weather deck and strike rhythm, so the shaft changes character rather than just getting harder:
| air | crosswind | weather | strikes | |
|---|---|---|---|---|
| SHELF | mean 0.84 — the air sits on you, the climb is slow | mild, slow to reverse | rain, some clear | far apart, weak |
| CORE | mean 1.02, swings wide and fast | full strength | mostly hail — most of your sight, and it chews the hull | constant, hard |
| ANVIL | mean 1.46 — the whole shaft is thrown past you | the worst shear in the storm | clear; you can finally see | rare, and every one is full power |
The profiles are keyed by band index, and each carries its own wind scale
rather than reading K.BANDS[i].wind. A.K is shared by eight systems and is
read-only only by convention; the storm keeps the numbers it cannot fly
without, and checkIntegrity logs one warning if the shared band table stops
describing the climb.
Lightning
A strike is three things at once, on one envelope so the whole game flickers together:
- the blind —
A.rules.sight()collapses forK.STORM.boltBlind; - the reveal —
A.rules.flash()runs a leader spike, a stutter of restrikes and a decay overK.STORM.boltReveal, and theBoltLightanchor is driven off the square of it, which lights the entire shaft at once; - the channel — a forked discharge drawn in
StormBoltChannel(a pool of 17 bars under theShaftanchor, behind the play plane), thinning as the flash decays and hidden between strikes.
M.strike(x?) fires one on demand. M.report() returns everything the storm
is doing as one table. M.rebuild() remints the channel pool.
Scoped to this part · feeds back into the world's score.