cast
The procedural fruit cast of Banana 2077: Jackie Watermelon, Judy Blueberry, Panam Pomelo, River Radish, Kerry Kiwi, Dex DeCoconut and the five vendors (Noodle Nana, Doc Kumquat, Hiro Durian, Misty Mango, Byte Banana).
game.story.cast
The procedural fruit cast of Banana 2077: Jackie Watermelon, Judy Blueberry, Panam Pomelo, River Radish, Kerry Kiwi, Dex DeCoconut and the five vendors (Noodle Nana, Doc Kumquat, Hiro Durian, Misty Mango, Byte Banana).
Cast.build(id, parentEntity, name?) builds one character rig out of shared
part meshes and the story/enemy materials, returning root (ground pivot,
+Z forward), body (hip pivot), armL/armR, legL/legR and comps
(its Model components, for culling). Cast.SPECS[id] holds each rig's
proportions and Cast.IDS lists every buildable id.
Called by game.story.Story (the NPCs you talk to) and the shops slice
(vendors behind their counters).
Interface
What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.
conforms to
zero/source-extract/v2game.story.cast — the procedural fruit cast of Banana 2077: Jackie Watermelon, Judy Blueberry, Panam Pomelo, River Radish, Kerry Kiwi, Dex DeCoconut and the vendors (Noodle Nana, Doc Kumquat, Hiro Durian, Misty Mango, Byte Banana). local rig = Cast.build(id, parentEntity, name?) rig.root ground pivot, +Z forward (move / yaw this) rig.body hip pivot for the whole upper body (bob, lean) rig.armL / rig.armR shoulder pivots, the arm hangs along -Y rig.legL / rig.legR hip pivots, the leg hangs along -Y rig.comps every Model component (visibility culling) Cast.SPECS[id] hipY, armRoll, height, radius, shoulder, hipX Cast.IDS every buildable cast id Same construction as game.enemies.crew (whose shape helpers are copied below): one mesh per part per material, shared by every instance.
matRef(m: string) → string
| arg | type | description |
|---|---|---|
| m | string |
at(g: any, pos: { number }?, rot: { number }?, scl: { number }?) → any
| arg | type | description |
|---|---|---|
| g | any | |
| pos | { number }? | |
| rot | { number }? | |
| scl | { number }? |
ball(rx: number, ry: number, rz: number, rows: number?, cols: number?, e: number?) → any
| arg | type | description |
|---|---|---|
| rx | number | |
| ry | number | |
| rz | number | |
| rows | number? | |
| cols | number? | |
| e | number? |
qa(axis: { number }, a: number) → void
| arg | type | description |
|---|---|---|
| axis | { number } | |
| a | number |
torus(R: number, r: number, rows: number?, cols: number?) → any
Torus around +Y (ring radius R, tube radius r).
| arg | type | description |
|---|---|---|
| R | number | |
| r | number | |
| rows | number? | |
| cols | number? |
cone(r: number, h: number) → any
Cone along +Y, base radius r, height h.
| arg | type | description |
|---|---|---|
| r | number | |
| h | number |
sphereProf(r: number) → void
| arg | type | description |
|---|---|---|
| r | number |
tube(pts: { { number } }, radii: { number }, rows: number?, cols: number?, opts: any?) → any
| arg | type | description |
|---|---|---|
| pts | { { number } } | |
| radii | { number } | |
| rows | number? | |
| cols | number? | |
| opts | any? |
surface(profile: { { number } }, sz: number?, lobe: any?) → any
A surface of revolution with helpers to put things ON it.
| arg | type | description |
|---|---|---|
| profile | { { number } } | |
| sz | number? | |
| lobe | any? |
R(y: number) → number
| arg | type | description |
|---|---|---|
| y | number |
at(y: number, th: number, off: number?, smooth: boolean?) → void
| arg | type | description |
|---|---|---|
| y | number | |
| th | number | |
| off | number? | |
| smooth | boolean? |
normal(y: number, th: number) → void
| arg | type | description |
|---|---|---|
| y | number | |
| th | number |
front(x: number, y: number) → number
| arg | type | description |
|---|---|---|
| x | number | |
| y | number |
fp(x: number, y: number, off: number?) → void
point + normal on the front at sideways offset x
| arg | type | description |
|---|---|---|
| x | number | |
| y | number | |
| off | number? |
lathe(rows: number, cols: number, uScale: number?, vScale: number?) → any
| arg | type | description |
|---|---|---|
| rows | number | |
| cols | number | |
| uScale | number? | |
| vScale | number? |
sheet(rows: number, cols: number, fn: any, off: number, smooth: boolean?) → any
an open sheet on (off metres above) the surface: fn(u, v) -> y, theta
| arg | type | description |
|---|---|---|
| rows | number | |
| cols | number | |
| fn | any | |
| off | number | |
| smooth | boolean? |
cord(pts: { { number } }, off: number, r: number, cols: number?) → any
a tube lying on the surface through (y, theta) control points
| arg | type | description |
|---|---|---|
| pts | { { number } } | |
| off | number | |
| r | number | |
| cols | number? |
_angryEye(put: any, s: any, side: number, y: number, x: number, r: number, lidMat: string, cyber: boolean) → void
| arg | type | description |
|---|---|---|
| put | any | |
| s | any | |
| side | number | |
| y | number | |
| x | number | |
| r | number | |
| lidMat | string | |
| cyber | boolean |
_brow(put: any, s: any, side: number, y: number, x: number, r: number, thick: number) → void
| arg | type | description |
|---|---|---|
| put | any | |
| s | any | |
| side | number | |
| y | number | |
| x | number | |
| r | number | |
| thick | number |
sp(xx: number, yy: number) → void
| arg | type | description |
|---|---|---|
| xx | number | |
| yy | number |
mouth(put: any, s: any, y: number, w: number, curve: number, thick: number, skew: number?) → void
| arg | type | description |
|---|---|---|
| put | any | |
| s | any | |
| y | number | |
| w | number | |
| curve | number | |
| thick | number | |
| skew | number? |
_cuteFace(put: any, s: any, y: number, x: number, r: number, mouthY: number) → void
| arg | type | description |
|---|---|---|
| put | any | |
| s | any | |
| y | number | |
| x | number | |
| r | number | |
| mouthY | number |
legs(put: any, c: any) → void
| arg | type | description |
|---|---|---|
| put | any | |
| c | any |
_arms(put: any, c: any) → void
| arg | type | description |
|---|---|---|
| put | any | |
| c | any |
chain(put: any, part: string, mat: string, pts: { { number } }, n: number, size: number) → void
| arg | type | description |
|---|---|---|
| put | any | |
| part | string | |
| mat | string | |
| pts | { { number } } | |
| n | number | |
| size | number |
spikes(put: any, s: any, mat: string, pts: { { number } }, off: number, r: number, h: number) → void
Spikes along a set of (y, theta) points on a surface.
| arg | type | description |
|---|---|---|
| put | any | |
| s | any | |
| mat | string | |
| pts | { { number } } | |
| off | number | |
| r | number | |
| h | number |
vest(put: any, s: any, c: any) → void
Open leather vest: an open front of half-angle `open`, its top running from yFront at the opening to yBack behind.
| arg | type | description |
|---|---|---|
| put | any | |
| s | any | |
| c | any |
top(th: number) → number
| arg | type | description |
|---|---|---|
| th | number |
fn(u: number, v: number) → void
| arg | type | description |
|---|---|---|
| u | number | |
| v | number |
belt(put: any, s: any, y: number, off: number, buckle: string?) → void
| arg | type | description |
|---|---|---|
| put | any | |
| s | any | |
| y | number | |
| off | number | |
| buckle | string? |
eye(put: any, s: any, side: number, y: number, x: number, r: number, lidMat: string?, lidAmt: number?) → void
| arg | type | description |
|---|---|---|
| put | any | |
| s | any | |
| side | number | |
| y | number | |
| x | number | |
| r | number | |
| lidMat | string? | |
| lidAmt | number? |
brow2(put: any, s: any, side: number, y: number, x: number, r: number, thick: number, tilt: number) → void
tilt > 0 frowns (inner end low), tilt < 0 worries
| arg | type | description |
|---|---|---|
| put | any | |
| s | any | |
| side | number | |
| y | number | |
| x | number | |
| r | number | |
| thick | number | |
| tilt | number |
sp(xx: number, yy: number) → void
| arg | type | description |
|---|---|---|
| xx | number | |
| yy | number |
face(put: any, s: any, o: any) → void
| arg | type | description |
|---|---|---|
| put | any | |
| s | any | |
| o | any |
patch(put: any, s: any, mat: string, yc: number, thc: number, ry: number, rt: number, off: number) → void
an oval patch lying on the surface (needs a cull: none material)
| arg | type | description |
|---|---|---|
| put | any | |
| s | any | |
| mat | string | |
| yc | number | |
| thc | number | |
| ry | number | |
| rt | number | |
| off | number |
band(put: any, s: any, mat: string, y0: number, y1: number, off: number, cols: number?) → void
a band over the whole circumference from y0 to y1 (u: theta, v: y)
| arg | type | description |
|---|---|---|
| put | any | |
| s | any | |
| mat | string | |
| y0 | number | |
| y1 | number | |
| off | number | |
| cols | number? |
panel(put: any, s: any, mat: string, y0: number, y1: number, w: number, off: number, part: string?) → void
a front panel between theta pi/2 - w .. pi/2 + w
| arg | type | description |
|---|---|---|
| put | any | |
| s | any | |
| mat | string | |
| y0 | number | |
| y1 | number | |
| w | number | |
| off | number | |
| part | string? |
ring(s: any, y: number, th0: number, th1: number, n: number) → void
| arg | type | description |
|---|---|---|
| s | any | |
| y | number | |
| th0 | number | |
| th1 | number | |
| n | number |
onS(s: any, y: number, th: number, off: number) → void
| arg | type | description |
|---|---|---|
| s | any | |
| y | number | |
| th | number | |
| off | number |
arm1(put: any, side: number, c: any) → void
| arg | type | description |
|---|---|---|
| put | any | |
| side | number | |
| c | any |
arms2(put: any, c: any) → void
| arg | type | description |
|---|---|---|
| put | any | |
| c | any |
leaf(put: any, mat: string, base: { number }, dir: { number }, len: number, w: number) → void
| arg | type | description |
|---|---|---|
| put | any | |
| mat | string | |
| base | { number } | |
| dir | { number } | |
| len | number | |
| w | number |
bananaLobe(th: number, _t: number) → number
| arg | type | description |
|---|---|---|
| th | number | |
| _t | number |
jackie(put: any) → void
| arg | type | description |
|---|---|---|
| put | any |
judy(put: any) → void
| arg | type | description |
|---|---|---|
| put | any |
swoop(th: number) → number
hair: dark cap, a long side swoop over her right with teal tips
| arg | type | description |
|---|---|---|
| th | number |
bottom(th: number) → number
| arg | type | description |
|---|---|---|
| th | number |
panam(put: any) → void
| arg | type | description |
|---|---|---|
| put | any |
river(put: any) → void
| arg | type | description |
|---|---|---|
| put | any |
kerry(put: any) → void
| arg | type | description |
|---|---|---|
| put | any |
dex(put: any) → void
| arg | type | description |
|---|---|---|
| put | any |
nana(put: any) → void
| arg | type | description |
|---|---|---|
| put | any |
kumquat(put: any) → void
| arg | type | description |
|---|---|---|
| put | any |
hiro(put: any) → void
| arg | type | description |
|---|---|---|
| put | any |
misty(put: any) → void
| arg | type | description |
|---|---|---|
| put | any |
byte(put: any) → void
| arg | type | description |
|---|---|---|
| put | any |
bend(g: any, b: any) → any
a banana's curve: z += k (y - yc)^2, normals follow the shear
| arg | type | description |
|---|---|---|
| g | any | |
| b | any |
meshes(id: string) → any
| arg | type | description |
|---|---|---|
| id | string |
put(part: string, mat: string, g: any) → void
| arg | type | description |
|---|---|---|
| part | string | |
| mat | string | |
| g | any |
v3(p: { number }) → any return
| arg | type | description |
|---|---|---|
| p | { number } |
build(id: string, parent: any, name: string?) → any
| arg | type | description |
|---|---|---|
| id | string | |
| parent | any | |
| name | string? |
node(n: string, par: any, pos: { number }) → any
| arg | type | description |
|---|---|---|
| n | string | |
| par | any | |
| pos | { number } |
fill(e: any, part: string) → void
| arg | type | description |
|---|---|---|
| e | any | |
| part | string |
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.