Log inGet started
World

The Eighth Ketyl

Branchmain
Branchesmain
Commite99ff0a216

README.md

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

ThingWhat it is
growthA 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 nodeA 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.
dropletA 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.
poolA spreading film on the plate. It grows, it holds, and it shrinks away after Still.POOL_LIFETIME.
scarWhat 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