ordFx
<!-- zero:scaffolded-readme --> <!-- Replace the line below with what this module provides and who consumes it, then delete both comment lines. -->
ordFx
<!-- zero:scaffolded-readme --> <!-- Replace the line below with what this module provides and who consumes it, then delete both comment lines. -->TODO: describe this module.
Interface
What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.
conforms to
zero/source-extract/v2ffe.ordnance.ordFx — the ordnance slice's substrate. Emitters, lights, decals and child entities, all created once and driven by the FILM clock. Every emitter this makes runs with `autoUpdate = false` and is stepped by `Fx.update(dt)` out of `ffe.ordnance.tick`, so the whole weather system advances by exactly 1/24 s per rendered frame and the film reads the same twice. Owned by the `ordnance` slice. Nobody else writes it.
clamp01(x: number) → number
Maths the whole slice shares
| arg | type | description |
|---|---|---|
| x | number |
lerp(a: number, b: number, k: number) → number
| arg | type | description |
|---|---|---|
| a | number | |
| b | number | |
| k | number |
ramp(x: number, a: number, b: number) → number
0 below a, 1 above b, smooth in between.
| arg | type | description |
|---|---|---|
| x | number | |
| a | number | |
| b | number |
spike(t: number, at: number, rise: number, fall: number) → number
1 at the peak, falling to 0 by `fall` seconds after it, 0 before it.
| arg | type | description |
|---|---|---|
| t | number | |
| at | number | |
| rise | number | |
| fall | number |
mix3(a: { number }, b: { number }, k: number) → void
| arg | type | description |
|---|---|---|
| a | { number } | |
| b | { number } | |
| k | number |
scale3(a: { number }, k: number) → void
| arg | type | description |
|---|---|---|
| a | { number } | |
| k | number |
rng(seed: number) → void
A deterministic stream. Seeded by an integer, never by time, so the layout a build scatters is the same layout on every rebuild and in every take.
| arg | type | description |
|---|---|---|
| seed | number |
tex(name: string) → string
Assets A texture this slice ships, by leaf name: "puff", "glow", "soot", "grain", "ring".
| arg | type | description |
|---|---|---|
| name | string |
node(name: string, parent: any, pos: { number }?) → any
Entities Find-or-spawn a named child under `parent`. Always temporary: a slice's runtime spawns must not land in the scene as pending entity edits, because the commit gate is world-wide and would refuse every other agent's push too.
| arg | type | description |
|---|---|---|
| name | string | |
| parent | any | |
| pos | { number }? |
light(name: string, parent: any, opts: { [string]: any }) → any
A point light this slice owns. `intensity` is written every tick, so the component is fetched once and cached on the returned record.
| arg | type | description |
|---|---|---|
| name | string | |
| parent | any | |
| opts | { [string]: any } |
tint(rec: any, rgb: { number }) → void
A Light's colour lives on three channels; the composite `color` is an alias the component accepts at `add` time and refuses on the sealed proxy after it. Every per-frame colour change goes through here.
| arg | type | description |
|---|---|---|
| rec | any | |
| rgb | { number } |
decal(name: string, parent: any, opts: { [string]: any }) → any
| arg | type | description |
|---|---|---|
| name | string | |
| parent | any | |
| opts | { [string]: any } |
emitter(key: string, spec: { [string]: any }) → any
Emitters Create an emitter under `key`, or return the one already made. The spec is forced onto the film's own clock: never `autoUpdate`, because the film advances by a fixed step per rendered frame and an emitter on the scheduler's delta would drift off it within a second.
| arg | type | description |
|---|---|---|
| key | string | |
| spec | { [string]: any } |
get(key: string) → any
| arg | type | description |
|---|---|---|
| key | string |
origin(sys: any, v: { number }) → void
`particles.create` takes `origin` / `direction` as a vec3 table; the setters of the same names take three loose numbers and store whatever they are handed without checking. Passing the table the create spec wanted writes it into `originX`, and the emitter then raises inside its own bounds maths on every later frame, blaming a line in the particle engine. Every move in this slice goes through these two so that cannot happen here.
| arg | type | description |
|---|---|---|
| sys | any | |
| v | { number } |
aim(sys: any, v: { number }) → void
| arg | type | description |
|---|---|---|
| sys | any | |
| v | { number } |
pump(key: string, channel: string, origin: { number }, direction: { number }?, perSecond: number, dt: number) → void
| arg | type | description |
|---|---|---|
| key | string | |
| channel | string | |
| origin | { number } | |
| direction | { number }? | |
| perSecond | number | |
| dt | number |
burst(key: string, origin: { number }, direction: { number }?, count: number) → void
A one-off burst from a named place.
| arg | type | description |
|---|---|---|
| key | string | |
| origin | { number } | |
| direction | { number }? | |
| count | number |
clearCarry( ) → void
update(dt: number) → void
Step every emitter by one film frame. Called once, from the slice's tick.
| arg | type | description |
|---|---|---|
| dt | number |
clearParticles( ) → void
Empty every emitter. Called when the film rewinds, so a take starts with no smoke left over from the last one.
destroyAll( ) → void
Release everything. Called when the slice rebuilds from scratch.
count( ) → number
report( ) → void
What every emitter is producing right now, as one line per emitter. The read that answers "is this actually on screen" rather than "did the call return".
Sub-parts
Everything contained inside this part. Assets are composite children (clickable cards). Files are leaf payloads. Expand any row to view its source.
Problems
Everything affecting this asset right now: its own problems, anything wrong inside it, and problems on its direct dependencies.
agent_score is exposed.+ quality × 0.35
+ performance × 0.25
± compat factor
Usability ratings
Did the part work as advertised when consumers tried to drop it in. Separate from upvotes: those are taste; this is "did it function".
Scoped to this part · feeds back into the world's score.