Bloom
Everything the zyme LOOKS and SOUNDS like, on the scene's `bloom` anchor.
Bloom
Everything the zyme LOOKS and SOUNDS like, on the scene's bloom anchor.
It simulates nothing. The rules slice owns FL.state.plots; this component is a
reading of it, and every visual on the hill is a function of a plot's state
and its zyme level.
What it puts on the hill
| Thing | Where | Driven by |
|---|---|---|
| a froth mound | a child named bloom under plot_<col>_<row> | plot.state == "zyme", plot.zyme |
| steam + embers + a short light | over the plot | the burn event |
| a scorch mark that cools | a child named scorch under the plot | the burn event, until the plot leaves scorched |
| a swell, once, at the plot | spatial one-shot | a plotChanged into zyme |
| the bubbling bed | one spatial source at the ferment's weighted centre | how much ferment stands on the hill |
| the mass over the shrine | under shrine | the lost event |
The mound is dissolved in, not scaled up. Five flattened spheres share one
material, game.zyme.zyme_bloom, and the level travels to the shader in a
per-instance lane. The shader draws a fragment only where the level has paid for
a creep field running from the plot's downhill lip toward the uphill wall — so a
rising level walks a ragged front up the plot, and the mound never pops into
existence at a size. The burn runs a second field the same way, so the beam eats
holes through the mass instead of shrinking it.
Fields
showZyme turns the whole slice off. frothGlow / threatGlow are the froth's
emissive gain with and without the shrine under threat — this component is the
authority on zyme_bloom's glow, and writes it whenever the threat moves.
ambienceVolume / ambienceRange / ambienceRolloff / loudAt shape the
bubbling bed: the camera sits some twenty metres up the hill from the lowest
terrace, so the range has to reach well past the hill for the bed to be heard at
all. burnParticles and scorchMarks each switch off one half of a burn.
Reading it back
observe() reports how much ferment stands on the hill and where — the two
numbers the bed's volume and position are taken from. plotBloom(col, row)
reports one plot's level, burn and world centre, or nil where that plot carries
no bloom, which is the read behind "does the picture match the data".
Two names, one word
The scene's anchor and this slice's per-plot child are both called bloom — the
name the spec reserves for each. A global entity.find("bloom") therefore
reaches whichever comes first in the scene, so resolve the anchor by the one
with no parent, and expect a mount that landed on a mound to take itself off
again and say so in the log.
Scoped to this part · feeds back into the world's score.