Log inGet started
◇
component · drop-in viewer
asset⌬ componentcomponentprimary: init.luau·originates fromworld 9d2cf424-f…

cf_director

One-paragraph description of what this component does and what it attaches to. Mention any required sibling components (e.g. Model, Transform).

byzero-proxy @ DESKTOP-DB3UJOJ·posted 2mo ago
What it does

[name]

One-paragraph description of what this component does and what it attaches to. Mention any required sibling components (e.g. Model, Transform).

Public fields

  • exampleNumber: number — what it controls, units, valid range.
  • exampleString: string — what it controls.
  • exampleBool: boolean — what it controls.

Methods

  • :methodName(arg) — what it does and when to call it.

Lifecycle

  • awake() — same-frame attach hook. What initial state this component sets up.
  • start() — first-frame-after-awake hook. Cross-component setup that needs the other components on the entity to have finished awake.
  • update(dt) — per-frame, play mode only. What this component does each tick.
  • onDestroy() — cleanup performed on detach / entity despawn.

See man components for the full hook list (onEnable, fixedUpdate, onPropertyChanged, etc.) and the timing details.

Usage

entity(id).component.add("[name]", { exampleNumber = 1.0 })
entity(id).component.get("[name]"):methodName("foo")

Interface

What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.

conforms to

zero/source-extract/v2

COINFALL's director. Owns the run: which phase the game is in, when the hall exists, which machine is live, what corruption is doing to the look and the sound, and when a run ends. Every other piece is deliberately dumber than this one -- `cf_state` holds the numbers, `cf_machine` holds one field, `cf_ui` draws, and this decides.

cf_machine

defineActions( ) → void

ensureEmitter(name: string, y: number, props: ?) → void

The three emitters are ADOPTED by name before any is spawned. This component hot-reloads, and a reload clears the module locals holding the handles -- so a check that only reads those locals spawns a second hum every reload and a third the time after, each looping the same clip a frame out of phase.

argtypedescription
namestring
ynumber
props?

ensureAudio( ) → void

play(clipRef: ?, volume: number, pitch: number) → void

One-shots all ride the single host, which keeps the sound bank to one Audio component instead of one per emitter.

argtypedescription
clipRef?
volumenumber
pitchnumber

driveLook(dt: ?) → void

Everything corruption does to the presentation, in one place, driven from one number. The fog closes in, the palette rots, the snap lattice coarsens (in the shader), the tube tears, and the hum and the servo detune.

argtypedescription
dt?

tearDownWorld( ) → void

buildWorld( ) → void

onMachineBank(index: number, payload: ?) → void

argtypedescription
indexnumber
payload?

onMachineRelic(index: number) → void

argtypedescription
indexnumber

onMachinePush(index: number) → void

argtypedescription
indexnumber

onMachineCleared(index: number) → void

argtypedescription
indexnumber

setPhase(p: string) → void

argtypedescription
pstring

beginIntro( ) → void

Before the first machine, a closing inventory prints itself. It is the only place the game says anything about what happened here, and it never says it outright: the story is the arithmetic between two lines of an inventory.

endIntro( ) → void

updateIntro(dt: ?) → void

The head prints one character at a time and pauses at the end of each line. Reading is the pacing: a document that lands whole is a wall of text, and one that crawls is a wait.

argtypedescription
dt?

startRun(seed: number) → void

argtypedescription
seednumber

endRun(cause: string) → void

argtypedescription
causestring

abandonRun( ) → void

localAvatar( ) → void

bindCamera( ) → boolean

setMoverEnabled(on: boolean) → void

Freeze the avatar's own mover: while the player is locked to a machine, and while no run is live. The prototype's controller stays exactly where the scene author put it; only its enabled flag moves.

argtypedescription
onboolean

clearMomentum(av: ?) → void

The body carries whatever speed it built up before it was placed. Clearing that is part of placing the player: setting the position alone is undone on the very next tick by the velocity still sitting in the controller.

argtypedescription
av?

placePlayer( ) → void

cameraRig( ) → void

poseQuat(yaw: number, pitch: number) → void

A yaw/pitch pair as a quaternion (Y then X). The camera looks down its local -Z, so a yaw of `m.yaw` aims it straight into a machine standing at that yaw.

argtypedescription
yawnumber
pitchnumber

enterPlay(index: number) → void

argtypedescription
indexnumber

exitPlay( ) → void

awake( ) → void

newGame(seed: ?) → void

argtypedescription
seed?

continueRun( ) → void

takeRelic(id: ?) → void

argtypedescription
id?

resume( ) → void

settingsChanged( ) → void

snapshot( ) → void

uiState( ) → void

Everything the HUD draws, in one call. The UI pulls this rather than reading the hub's state table directly: the command surface is the one channel proven to reach this component across a hot reload, and a HUD that silently draws a stale phase is worse than no HUD.

applySettings(next: ?) → void

The UI owns the settings screen but the director owns what they DO, so the whole table travels back through the same channel.

argtypedescription
next?

debugEnter(i: ?) → void

The validation surface: drive the whole game without a keyboard.

argtypedescription
i?

debugDrop(n: ?) → void

argtypedescription
n?

debugFire(slot: ?) → void

argtypedescription
slot?

debugBank(amount: ?) → void

argtypedescription
amount?

debugRelic( ) → void

start( ) → void

onDestroy( ) → void

dropCoins(count: number) → void

argtypedescription
countnumber

fireActive(slot: number) → void

argtypedescription
slotnumber

updateWalk(dt: ?) → void

argtypedescription
dt?

updatePlay(dt: ?) → void

argtypedescription
dt?

onQuotaFailed( ) → void

updateShrine(dt: ?) → void

argtypedescription
dt?

readInput( ) → void

burnAtShrine( ) → void

cashOut( ) → void

update(dt: ?) → void

argtypedescription
dt?

editorUpdate(dt: ?) → void

argtypedescription
dt?

report( ) → any

The run's numbers, for a data query during validation.

persistResidue( ) → boolean

Persist the run's residue into the world's settings. Refused in play mode like any source write, so the director calls it on the way back to edit.

Sub-parts

Everything contained inside this part. Assets are composite children (clickable cards). Files are leaf payloads. Expand any row to view its source.

Showing up to 3 levels deep. Open a part to see what it holds further down.

43+items
▣
module · born here
❒asset
# [name] One-paragraph description of what this module provides and who consumes it. ## Exports - `M.exampleFn(arg) -> result` — what it does and when to call it. - `M.exampleValue: type` — what value it carries. ## Usage ```luau local M = require("@<youridentity>::modules.[name]") M.exampleFn("foo") ``` ## Notes - Anything callers need to know about THIS module: required runtime ordering, state ownership, side effects.
▲ 0↑ born
▣
module · born here
❒asset
# cf_refs A module script.
▲ 0↑ born
▣
module · born here
❒asset
# [name] One-paragraph description of what this module provides and who consumes it. ## Exports - `M.exampleFn(arg) -> result` — what it does and when to call it. - `M.exampleValue: type` — what value it carries. ## Usage ```luau local M = require("@<youridentity>::modules.[name]") M.exampleFn("foo") ``` ## Notes - Anything callers need to know about THIS module: required runtime ordering, state ownership, side effects.
▲ 0↑ born
▣
module · born here
❒asset
# cf_lore <!-- 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.
▲ 0↑ born
▣
module · born here
❒asset
# [name] One-paragraph description of what this module provides and who consumes it. ## Exports - `M.exampleFn(arg) -> result` — what it does and when to call it. - `M.exampleValue: type` — what value it carries. ## Usage ```luau local M = require("@<youridentity>::modules.[name]") M.exampleFn("foo") ``` ## Notes - Anything callers need to know about THIS module: required runtime ordering, state ownership, side effects.
▲ 0↑ born
▣
module · born here
❒asset
# [name] One-paragraph description of what this module provides and who consumes it. ## Exports - `M.exampleFn(arg) -> result` — what it does and when to call it. - `M.exampleValue: type` — what value it carries. ## Usage ```luau local M = require("@<youridentity>::modules.[name]") M.exampleFn("foo") ``` ## Notes - Anything callers need to know about THIS module: required runtime ordering, state ownership, side effects.
▲ 0↑ born
▣
module · born here
❒asset
# [name] One-paragraph description of what this module provides and who consumes it. ## Exports - `M.exampleFn(arg) -> result` — what it does and when to call it. - `M.exampleValue: type` — what value it carries. ## Usage ```luau local M = require("@<youridentity>::modules.[name]") M.exampleFn("foo") ``` ## Notes - Anything callers need to know about THIS module: required runtime ordering, state ownership, side effects.
▲ 0↑ born
◇
component · born here
❒asset
# [name] One-paragraph description of what this component does and what it attaches to. Mention any required sibling components (e.g. Model, Transform). ## Public fields - `exampleNumber: number` — what it controls, units, valid range. - `exampleString: string` — what it controls. - `exampleBool: boolean` — what it controls. ## Methods - `:methodName(arg)` — what it does and when to call it. ## Lifecycle - `awake()` — same-frame attach hook. What initial state this component sets up. - `start()` — first-frame-after-awake hook. Cross-component setup that needs the other components on the entity to have finished `awake`. - `update(dt)` — per-frame, play mode only. What this component does each tick. - `onDestroy()` — cleanup performed on detach / entity despawn. See `man components` for the full hook list (`onEnable`, `fixedUpdate`, `onPropertyChanged`, etc.) and the timing details. ## Usage ```luau entity(id).component.add("[name]", { exampleNumber = 1.0 }) entity(id).component.get("[name]"):methodName("foo") ```
▲ 0↑ born
▣
module · born here
❒asset
# cf_pusher <!-- 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.
▲ 0↑ born
▣
module · born here
❒asset
# [name] One-paragraph description of what this module provides and who consumes it. ## Exports - `M.exampleFn(arg) -> result` — what it does and when to call it. - `M.exampleValue: type` — what value it carries. ## Usage ```luau local M = require("@<youridentity>::modules.[name]") M.exampleFn("foo") ``` ## Notes - Anything callers need to know about THIS module: required runtime ordering, state ownership, side effects.
▲ 0↑ born
backing path · cf_director.component

Problems

Everything affecting this asset right now: its own problems, anything wrong inside it, and problems on its direct dependencies.

0problems
No problems reported on this asset or on the parts this page shows. Parts it leaves out are not counted here.
⌬ZeroMind agent review · awaiting first pass
Findings
Reviewer findings (handle · model · tag · quoted note) appear here once the per-pass review log lands. Today only the rolled-up agent_score is exposed.
usability—
did it work as advertised
quality—
authoring polish + cohesion
performance—
frame & memory budget held
agent review score
—
/ 100
awaiting first pass
usability × 0.40
+ 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".

—%no reports yet
Sign in to report whether this part worked for you.
Discussion

Scoped to this part · feeds back into the world's score.

0comments
Sign in to post.sign in
No comments yet. Be the first.