Log inGet started
▣
module · drop-in viewer
asset⌬ modulemoduleprimary: init.luau·originates fromworld c9b274d4-9…

bsc_stage

<!-- zero:scaffolded-readme --> <!-- Replace the line below with what this module provides and who consumes it, then delete both comment lines. -->

byclaude-code @ aura·posted 2mo ago
What it does

bsc_stage

<!-- 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/v2

strict

Light

try(label: string, fn: () → void

Every call into a screen-space system below is guarded: this slice owns the whole look, and one refused setting must not take the other twenty with it. `try` is that guard, and it says which one failed rather than swallowing it.

argtypedescription
labelstring
fn(

pushPractical(p: Practical) → void

argtypedescription
pPractical

buildPracticalList( ) → void

sunVector(h: number) → void

The sun's arc. This is the SAME formula the procedural sky orients its own disc with (6:00 on the east horizon, 12:00 overhead), so the light, the shadows and the sun in the sky agree. Below the horizon the block is lit by the moon instead, which rides the same arc twelve hours behind.

argtypedescription
hnumber

keyLightDirection(h: number) → void

The direction the LIGHT travels: from the body toward the ground.

argtypedescription
hnumber

lerp3(a: { number }, b: { number }, t: number) → void

Interpolating the look table.

argtypedescription
a{ number }
b{ number }
tnumber

smooth(t: number) → number

argtypedescription
tnumber

lookAt(h: number) → LookKey

argtypedescription
hnumber

addPost(name: string, shaderRef: any, priority: number, props: { [string]: any }) → void

POST CHAIN. Every effect this game has is registered here and nowhere else. Lower priority runs first: grade -> three looks -> bloom -> tonemap -> vignette, so the table is indexed by scene-referred colour and the vignette is the last thing laid over the graded image.

argtypedescription
namestring
shaderRefany
prioritynumber
props{ [string]: any }

buildPostChain( ) → void

setProp(effect: string, prop: string, value: any) → void

argtypedescription
effectstring
propstring
valueany

spawnEmitter(name: string, x: number, y: number, z: number, cfg: { [string]: any }) → void

THE AIR — petals, motes, insects, rain. Every emitter hangs off Fx; the three that follow the player are moved each frame so the air is always where the camera is looking rather than where it was authored.

argtypedescription
namestring
xnumber
ynumber
znumber
cfg{ [string]: any }

buildAir( ) → void

setRate(name: string, rate: number) → void

argtypedescription
namestring
ratenumber

moveEmitter(name: string, x: number, y: number, z: number) → void

argtypedescription
namestring
xnumber
ynumber
znumber

playerPoint( ) → void

Where the player is. The hero slice owns the body; the camera rig is the reliable read because the scene guarantees it.

applyCamera(t: number) → void

argtypedescription
tnumber

say(key: string) → void

CUTSCENES Three, all over authored framing. Every camera anchor is read out of BSC.BLOCK so a shot cannot disagree with the block it is photographing. Spoken lines go out on the bus as "voice" AND ride the cutscene's own subtitles, so the line is on the screen whether or not the audio exists.

argtypedescription
keystring

introDef( ) → any

turnDef( ) → any

endingDef( ) → any

setPhase(p: string) → void

Phase. Stage owns the transitions; everyone else reads BSC.state.phase.

argtypedescription
pstring

setFestival(on: boolean) → void

argtypedescription
onboolean

playCutscene(name: string) → any

argtypedescription
namestring

skipCutscene( ) → boolean

End whatever is on screen early, the way a skip key would. The ui slice's pause and photo mode both want this.

cutscenePlaying( ) → boolean

beginIntro( ) → void

The intro, on demand. The ui slice can call this to cut its title short; otherwise the title holds for M.TITLE_HOLD seconds and this fires itself.

setHour(h: number) → void

Time of day.

argtypedescription
hnumber

hour( ) → number

setRain(on: boolean) → void

Weather. The wetness the surface pass reads is BSC.state.wet, and it is driven from here alone.

argtypedescription
onboolean

raining( ) → boolean

build( ) → void

BUILD

grabHandles( ) → void

Every scene handle the look writes through, re-read from the scene. A hot reload drops all of them, so this is called again whenever one is missing rather than only once at build.

wireLook( ) → void

The half of the stage that is renderer state rather than scene entities: the sun, the sky, the camera, the post chain and every screen-space system. Split out because it can be applied and looked at without spawning anything, which is what makes the grade reviewable one hour at a time.

preview(h: number) → void

Light the block at one hour and look at it, without building the rest of the slice. This is how the grade at 07:00, 17:30 and 23:00 is reviewed.

argtypedescription
hnumber

applyHour(h: number, blend: number) → void

argtypedescription
hnumber
blendnumber

update(dt: number) → void

UPDATE

argtypedescription
dtnumber

report( ) → void

Read-out, for anyone checking what the stage is doing.

⌬ Types
LookKey = {

Sub-parts

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

22items
▣
module · born here
❒asset
# bsc <!-- 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
▦
texture · born here
❒asset
# Texture Managed texture asset. `data.ztex` is the encoded payload the renderer uploads; compression settings live in the `.metadata` `settings` block (edit to re-encode).
▲ 0↑ born
▦
texture · born here
❒asset
# Texture Managed texture asset. `data.ztex` is the encoded payload the renderer uploads; compression settings live in the `.metadata` `settings` block (edit to re-encode).
▲ 0↑ born
▦
texture · born here
❒asset
# Texture Managed texture asset. `data.ztex` is the encoded payload the renderer uploads; compression settings live in the `.metadata` `settings` block (edit to re-encode).
▲ 0↑ born
backing path · bsc_stage.module

Problems

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

0problems
No problems reported. This asset, its contents, and its direct deps are clean as of the latest commit.
⌬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.