game
<!-- zero:scaffolded-readme --> <!-- Replace the line below with what this module provides and who consumes it, then delete both comment lines. -->
game
<!-- 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/v2strict
setSubscriber(owner: string?) → void
| arg | type | description |
|---|---|---|
| owner | string? |
buildTag( ) → string
clearSubscriptions(owner: string) → void
| arg | type | description |
|---|---|---|
| owner | string |
on(name: string, fn: (any) → void
| arg | type | description |
|---|---|---|
| name | string | |
| fn | (any |
emit(name: string, payload: any) → void
| arg | type | description |
|---|---|---|
| name | string | |
| payload | any |
setPhase(p: Phase) → void
| arg | type | description |
|---|---|---|
| p | Phase |
clearHolds( ) → void
addHold(h: { pos: { number }, normal: { number }?, kind: string?, grip: number?, anchor: boolean? }) → number
| arg | type | description |
|---|---|---|
| h | { pos: { number }, normal: { number }?, kind: string?, grip: number?, anchor: boolean? } |
holds( ) → void
hold(id: number) → Hold
| arg | type | description |
|---|---|---|
| id | number |
pickHold(from: { number }, dir: { number }, radius: number?, skipId: number?) → Hold
Nearest hold to `from`, biased toward `dir`, inside `radius`. Returns the hold and its score, or nil. This is the ONE place the reach rule lives, so the HUD's highlight and the hand's actual grab can never disagree.
| arg | type | description |
|---|---|---|
| from | { number } | |
| dir | { number } | |
| radius | number? | |
| skipId | number? |
registerPart(name: string, p: Part) → void
| arg | type | description |
|---|---|---|
| name | string | |
| p | Part |
parts( ) → void
lerp(a: number, b: number, t: number) → number
Small shared helpers, so six slices do not write six of each.
| arg | type | description |
|---|---|---|
| a | number | |
| b | number | |
| t | number |
clamp01(v: number) → number
| arg | type | description |
|---|---|---|
| v | number |
approach(current: number, target: number, rate: number, dt: number) → number
damped approach that behaves the same at any framerate
| arg | type | description |
|---|---|---|
| current | number | |
| target | number | |
| rate | number | |
| dt | number |
v3add(a: { number }, b: { number }) → void
| arg | type | description |
|---|---|---|
| a | { number } | |
| b | { number } |
v3scale(a: { number }, s: number) → void
| arg | type | description |
|---|---|---|
| a | { number } | |
| s | number |
v3len(a: { number }) → number
| arg | type | description |
|---|---|---|
| a | { number } |
v3norm(a: { number }) → void
| arg | type | description |
|---|---|---|
| a | { number } |
gripColor(fraction: number) → void
grip colour for a stamina fraction — HUD, suit emissive and hold highlight all read the same ramp so they never disagree about "in trouble".
| arg | type | description |
|---|---|---|
| fraction | number |
windAt(y: number) → number
wind at an altitude, before the gust envelope
| arg | type | description |
|---|---|---|
| y | number |
Phase = "boot" | "title" | "intro" | "climb" | "fall" | "won" | "lost"HandState = {Hold = {Part = {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.