BlennomaField
Everything mucous on a plate of the still, and everything sodium.
BlennomaField
Everything mucous on a plate of the still, and everything sodium.
One instance stands on the Growths host entity and builds the whole field of
whichever plate the ketyl is on: the growths, the sodium nodes, and every
transient thing they make — droplets, pools, weals, bursts and scars — as
children of that host.
What it puts on a plate
| Thing | What it is |
|---|---|
| growth | A blennoma. A closed lumpy solid contoured from Blennoma.procGraph, wearing mucus_flesh, with four beads of condensation on it and a bead at the teat that fills before it drips. It pulses, it weeps, it chars and swells with weals as it burns, and it dies in a burst. |
| sodium node | A lump of cut sodium from SodiumNode.procGraph wearing sodium_metal, turning slowly so the knife-cut face catches the light. Taken on contact, and it reforms after Still.SODIUM_RESPAWN. |
| droplet | A bead of water off a teat, falling and stretching as it goes. It soaks the ketyl if it lands on it and leaves a pool if it does not. |
| pool | A spreading film on the plate. It grows, it holds, and it shrinks away after Still.POOL_LIFETIME. |
| scar | What a burned growth leaves where it stood. It stays for the rest of the plate. |
What it reports
It knows nothing about health, charge or the run. It reports what physically happened and lets the core slice price it:
growthCount(alive, total) after a build, and after every death
growthHurt(pos, frac) a growth took damage; frac is the health left
growthBurned(pos) a growth died
dropletSpawn(pos) a droplet left a teat
dropletLand(pos) it hit the plate, or the ketyl
soaked(amount) the ketyl took this much water this frame
sodiumTaken(pos) a node was consumed
What it listens to
plateEnter(n) build plate n's field
runStart() build plate 1
discharged(pos, dir) decide what stood in the arc and burn it
The arc test reads Still.DISCHARGE_RADIUS, Still.DISCHARGE_ARC,
Still.BLENNOMA_BURN and Still.BLENNOMA_FALLOFF, so the reach and the bite of
a discharge are tuned in one place for the whole game.
Sound
Five clips are synthesised into /source/growths/ by bake_sfx.luau and
registered into the shared library under the ids the game names them by —
sfx_drip, sfx_splash, sfx_growth_hurt, sfx_growth_burn, sfx_sodium.
Every noise goes out through audio.Clips, so the sound slice owns the mix.
Where that library is not loaded the component falls back to a voice of its own
rather than going quiet.
Determinism
A plate's layout comes from a generator seeded on the plate number alone, so
every peer in this multiplayer world lays the same growths in the same places.
Nothing here reads math.random.
Rebuilding the assets
execute { file = "/source/growths/bake.luau" } -- the meshes
execute { file = "/source/growths/materials.luau" } -- the materials
execute { file = "/source/growths/bake_sfx.luau" } -- the sounds
Scoped to this part · feeds back into the world's score.