RhFx
A module script.
Interface
What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.
conforms to
zero/source-extract/v2Railhead: Dust Sea — visual effects. Every transient the battle throws: the rail arcs and muzzle bloom on firing, the ionised tracer and its shock ring in flight, the crater / fireball / rubble / smoke column on impact, and the dust devils that ARE the wind readout. Two rules keep it cheap. Geometry effects reuse the engine's shared primitives, so a tracer or a rubble chunk allocates nothing. Particle effects come from a POOL: every `ParticleEmitter` owns a dynamic GPU mesh, so spawning one per impact churns the renderer's mesh slab hard during a wave — instead each burst kind keeps a small ring of emitters that are re-seated, re-tuned and re-fired.
setRoot(id: string) → void
Parent every effect under `id` so a scene teardown takes them all. Any pooled emitters left over from a previous root (a scene reload, a hot reload of this module) are dropped first, so the pools never double up.
| arg | type | description |
|---|---|---|
| id | string |
newEnt(name: string) → any
| arg | type | description |
|---|---|---|
| name | string |
retire(e: any, seconds: number, kind: string?, a: number?, b: number?, c: number?) → void
| arg | type | description |
|---|---|---|
| e | any | |
| seconds | number | |
| kind | string? | |
| a | number? | |
| b | number? | |
| c | number? |
setModel(e: any, mesh: string, mat: string, shadows: boolean?) → void
| arg | type | description |
|---|---|---|
| e | any | |
| mesh | string | |
| mat | string | |
| shadows | boolean? |
alignY(e: any, dx: number, dy: number, dz: number) → void
Orient an entity so its local +Y axis points along (dx, dy, dz). Primitive cylinders and cones are built along Y, so this is what aims a tracer.
| arg | type | description |
|---|---|---|
| e | any | |
| dx | number | |
| dy | number | |
| dz | number |
lookAt(e: any, tx: number, ty: number, tz: number) → void
Aim an entity's forward (-Z) at a world point.
| arg | type | description |
|---|---|---|
| e | any | |
| tx | number | |
| ty | number | |
| tz | number |
poolFor(kind: string, size: number, make: (any) → void
| arg | type | description |
|---|---|---|
| kind | string | |
| size | number | |
| make | (any |
takeSlot(p: Pool) → any
| arg | type | description |
|---|---|---|
| p | Pool |
emitterOf(e: any) → any
| arg | type | description |
|---|---|---|
| e | any |
makeDust(e: any) → void
The four pooled burst kinds. Each `make` builds an idle emitter once; the burst functions below only ever re-seat and re-tune them.
| arg | type | description |
|---|---|---|
| e | any |
makeSpark(e: any) → void
| arg | type | description |
|---|---|---|
| e | any |
makeSmoke(e: any) → void
| arg | type | description |
|---|---|---|
| e | any |
makeMuzzle(e: any) → void
| arg | type | description |
|---|---|---|
| e | any |
railArcs(parentId: string, count: number) → void
Electricity crawling the rails. Returns the arc entities so the caller can scale them with charge and drop them on release.
| arg | type | description |
|---|---|---|
| parentId | string | |
| count | number |
driveArcs(arcs: { any }, charge: number, t: number, railLen: number, railSep: number) → void
Animate a set of rail arcs for a charge level in 0..1.
| arg | type | description |
|---|---|---|
| arcs | { any } | |
| charge | number | |
| t | number | |
| railLen | number | |
| railSep | number |
muzzleFlash(x: number, y: number, z: number, dx: number, dy: number, dz: number, power: number) → void
The muzzle event: blinding plasma bloom, a light flash, a shock ring and a cone of ejecta along the barrel axis.
| arg | type | description |
|---|---|---|
| x | number | |
| y | number | |
| z | number | |
| dx | number | |
| dy | number | |
| dz | number | |
| power | number |
slugBody( ) → void
The glowing slug itself plus the light it drags through the haze.
smokeColumn(x: number, y: number, z: number, radius: number, life: number) → void
A lingering smoke column marking a hit.
| arg | type | description |
|---|---|---|
| x | number | |
| y | number | |
| z | number | |
| radius | number | |
| life | number |
groundImpact(x: number, y: number, z: number, radius: number, power: number) → void
A full ground impact: fireball, flash light, scorch decal, ejecta rim, rubble with real physics, a dust ring and a smoke column that lingers.
| arg | type | description |
|---|---|---|
| x | number | |
| y | number | |
| z | number | |
| radius | number | |
| power | number |
machineDeath(x: number, y: number, z: number, scale: number, tint: { number }) → void
A machine dying: hull fragments, a bright secondary detonation and smoke.
| arg | type | description |
|---|---|---|
| x | number | |
| y | number | |
| z | number | |
| scale | number | |
| tint | { number } |
dustDevil(name: string, x: number, y: number, z: number, height: number) → any
A dust devil: a tall lazily-rotating column of lifted dust. These are the wind indicator — their lean and drift ARE the crosswind readout, so the game moves them with the same vector it applies to the slug.
| arg | type | description |
|---|---|---|
| name | string | |
| x | number | |
| y | number | |
| z | number | |
| height | number |
canyonHaze(x: number, y: number, z: number, extent: number) → any
Drifting haze that sits in the canyon bottom, giving the Dust Sea its name.
| arg | type | description |
|---|---|---|
| x | number | |
| y | number | |
| z | number | |
| extent | number |
shellBody( ) → void
A mortar shell arcing toward the battery. The trail is a pooled emitter, so a barrage never allocates.
releaseTrail(trail: any?) → void
Stop a shell trail without despawning its pooled emitter.
| arg | type | description |
|---|---|---|
| trail | any? |
update(dt: number) → void
Advance every timed effect. Called once per frame by the world component.
| arg | type | description |
|---|---|---|
| dt | number |
clear( ) → void
Drop every live effect and every pooled emitter (scene teardown).
liveCount( ) → number
poolCount( ) → number
Visual effects for a hypervelocity gun: rail arcs, muzzle bloom, shock rings, ionised tracer segments, deforming craters with physics rubble, secondary detonations, lingering smoke columns, dust devils and canyon haze. Particle emitters are pooled so a heavy wave never churns the mesh slab.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.
Inside
1 problem across 1 itemagent_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.