ridge
Saddle 3400 — the place *Fire For Effect* happens on. The snow col the battery is dug into, its two rock horns, the cloud deck 140 m below that fills the valley and reads as ground, the pour that comes over the col's west lip, the emplacements, the ammunition dump, the spotting m…
ridge
Saddle 3400 — the place Fire For Effect happens on. The snow col the battery is dug into, its two rock horns, the cloud deck 140 m below that fills the valley and reads as ground, the pour that comes over the col's west lip, the emplacements, the ammunition dump, the spotting mast, and the valley floor at y = -900 with the scree fan the rounds land on.
Serves shots 1, 2, 8, 12, 14 and 16, and the ground under 6 and 7.
Exports
M.build(root)— called byFilmDirector. Re-entrant: every piece asks the world whether its entities are still there rather than trusting a flag, and everything it makes is marked temporary, because all of it is rebuilt on the next load and none of it belongs in the saved scene.M.tick(t, dt)— film seconds, fixed 1/24. Also pumps the massif and the deck a few patches a frame until they stand.M.reset()— onFilm.restart().M.groundHeightAt(x, z) -> y— the snow's world height at a point. Anything that stands on the saddle asks this rather than guessing.M.valleyHeightAt(x, z) -> y— the same for the floor under the deck.M.deck— the tearing surfaceordnancedrives:tear(i, x, z, radius, heat),setHoles({ {x, z, radius, heat}, ... }),close(i),holes(),setUnderglow(v). Up todeck.MAX_HOLES= 8.M.setUnderfire(v)— how much fire the cloud is catching from below; drives the pour and the deck's general orange wash together.M.setSoot(v)— force the snow's soot instead of letting it rideFilm.ruin.M.mast()/M.dump()— the spotting mast and the ammunition dump, by ref.M.ground/M.pour/M.works— the submodules, for anything finer.
Usage
local Ridge = require("ffe.ridge")
Ridge.deck.tear(1, -1750, 120, 90, 1.4) -- open a hole in the sky-floor
Ridge.setUnderfire(0.8) -- and light the cloud from under it
local y = Ridge.groundHeightAt(-4, -22.5) -- where the snow is under Gun One
Notes
- Everything this slice owns also stands on a
ridgerender layer besidedefault, socapture { renderLayers = "ridge sky" }shows the place on its own while three other agents fire effects through the same frame. - The massif is one height function sampled into meshes. It is meshed a few
patches a frame from
tick, not from a spawned task: a task started inside a component's update is bound to that call's script context and is cancelled when the call returns. - The deck's churn rides the ENGINE clock (
uniforms.time) because a vertex stage cannot read per-instance data; everything else in the slice — the pour, the plumes, the tarp, the mast, the racks — is a pure function of film time.
Scoped to this part · feeds back into the world's score.