crown
The mesocyclone at 3000 m — the thing turning at the top of ANVIL CROWN, and the fight that ends the run.
crown
The mesocyclone at 3000 m — the thing turning at the top of ANVIL CROWN, and the fight that ends the run.
It registers one system with the shared spine (game.anvil, order 40) and is
ticked by the AnvilDirector like every other slice. It builds onto the
CrownMount anchor and touches nothing else in the scene.
What it is
A landmark. For the whole climb the Crown hangs above the shaft and descends into frame as the altitude closes, so the climb has a destination you can see rather than a number counting up.
A fight. Three phases, each with its own attack grammar, and a hitbox that pays you for flying in the column under the eye — which is exactly the column its heaviest attacks fall down.
| Phase | Below | Grammar |
|---|---|---|
| 1 · GATHER | — | Hail leaves the turning wall wherever the wall happens to be. Where it lands is the rotation's decision, not a dice roll. |
| 2 · SHEAR | 62 % hull | The wall tightens and the vanes come down far enough to cut. It also charges a lance: it tracks your lateral position while the wind-up runs up the wall, then commits. |
| 3 · COLLAPSE | 30 % hull | It descends into the runner's band, spins up, and throws all three at once. |
A death. The wall opens out and thins to nothing, the vanes tear off with
the rotation, and the core over-brightens and collapses. crownDead fires as it
begins, so the director moves the run to its resolution while the Crown is still
coming apart on screen.
The hitbox
A round that passes inside the throat (|x| ≤ C.throatRadius) does
C.throatBonus× damage; one that hits the wall further out does normal damage.
Flying under the eye is the whole risk/reward of the fight.
Rounds are read two ways. The primary reading is the real cannon rounds under
the Bullets anchor — read only, never moved or despawned, and each round is
counted once. When no round entity is present the fire event is integrated
forward instead with the cannon's own constants from A.K.GUN, so the Crown is
a real fight whether or not the flight slice's rounds are entities.
Blackboard
Owns crownHp, crownPhase, crownAlive. Fires crownPhase
({ phase, name, hp }), crownDead, hit ({ amount, kind, x, y } — kinds
crown_hail, crown_lance, crown_shear) and shake. Reads altitude,
phase, runnerX, runnerY and A.rules.flash().
Files
crown.module— this system.crownmesh.module— the geometry builders (shell, vane, rock, spire).shaders/crown_eyewall.shader— the turning wall, lit from within.shaders/crown_ember.shader— the solid half: core, debris, slugs.materials/—crown_wall,crown_veil,crown_vane,crown_core,crown_debris,crown_slug.
Tuning
Everything the fight runs on is in the C table at the top of init.luau —
geometry, phase thresholds, spin, attack cadence, damage. Nothing about the
fight is spread through the file.
Persistent state lives on A.__crown rather than in file locals, because a
world can hold more than one live copy of a module (a hot-reload, a second
require path) and the rig has to be the same rig for every copy. The system
also stands itself back up after a mode flip or scene reload, which destroys the
entities it spawned while leaving the module — and the director's built flag —
in place.
Scoped to this part · feeds back into the world's score.