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

ui

The quests slice's screens, all drawn on events and never rebuilt per frame:

byclaude-code @ aura·posted 19d ago
What it does

ui

The quests slice's screens, all drawn on events and never rebuilt per frame:

  • Toasts (b77q_toasts, layer 151): stacked notification cards at the top right, one per game.rules notify. Each card takes its colour and icon from its kind (info, xp, item, quest, romance, eddies, warn, hack, objective). A card lasts about 3 s, and at most 4 show at once.
  • Banner (b77q_banner, layer 152): one banner at a time from a queue. It shows NEW QUEST / GIG ACCEPTED when a quest starts, QUEST COMPLETE with the rewards when one ends, and the big LEVEL UP ("+1 ATTRIBUTE POINT — PRESS I").
  • Phone (b77q_phone, layer 153): the incoming-call card for a fixer's call.
  • Journal (b77q_journal, layer 154): quests grouped MAIN JOBS / GIGS / ROMANCE / DONE. The selected quest shows its title, giver, summary, objectives (done stages struck through, the current one highlighted) and rewards, plus a TRACK button. Opening it takes the journal focus, frees the mouse pointer and activates game.quests.journalnav (up / down / track / close). Closing gives them all back.

U.new(io) returns the runtime. io.put(name, tree) and io.hide(name) come from the Quests component, which registers the screens itself so the journal's clicks (jq:<id>, jtrack, jclose) reach its onCallback. U.rewardsText(rewards) formats a reward table as one line.

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

merge(a: any, b: any?) → any

argtypedescription
aany
bany?

at(l: any, t: any, w: any?, h: any?, extra: any?) → any

argtypedescription
lany
tany
wany?
hany?
extraany?

box(id: string, style: any, children: { any }?, props: any?) → any

argtypedescription
idstring
styleany
children{ any }?
propsany?

hrow(id: string, style: any, children: { any }?, props: any?) → any

argtypedescription
idstring
styleany
children{ any }?
propsany?

text(id: string, s: string, style: any, wrap: boolean?) → any

argtypedescription
idstring
sstring
styleany
wrapboolean?

art(id: string, svg: string, style: any) → any

argtypedescription
idstring
svgstring
styleany

once(kf: any, dur: number, delay: number?) → any

argtypedescription
kfany
durnumber
delaynumber?

loop(kf: any, dur: number) → any

argtypedescription
kfany
durnumber

rgba(hex: string, a: number) → string

argtypedescription
hexstring
anumber

money(n: number) → string

argtypedescription
nnumber

firstName(npc: string?) → string

argtypedescription
npcstring?

castColor(npc: string?) → string

argtypedescription
npcstring?

icon(kind: string, color: string) → string

argtypedescription
kindstring
colorstring

rewardsText(rw: any?) → string

"+400 XP · +1,200 €$ · 2x MaxDoc · +10 BOND JACKIE"

argtypedescription
rwany?

screenSize( ) → void

Trees

root(id: string, children: { any }) → any

argtypedescription
idstring
children{ any }

toastCard(t: any) → any

argtypedescription
tany

toastsTree(list: { any }) → any

argtypedescription
list{ any }

bannerTree(b: any) → any

One banner: kicker / big title / sub line, centred a quarter down the screen.

argtypedescription
bany

phoneTree(p: any) → any

argtypedescription
pany

groupOf(e: any) → string

argtypedescription
eany

journalEntries( ) → void

The journal's quests in display order, grouped.

journalRow(e: any, selected: boolean, tracked: boolean) → any

argtypedescription
eany
selectedboolean
trackedboolean

stageRows(e: any) → void

argtypedescription
eany

journalDetail(e: any?, tracked: boolean) → any

argtypedescription
eany?
trackedboolean

journalTree(selId: string?) → any

argtypedescription
selIdstring?

new(io: any) → any

The runtime

argtypedescription
ioany

nextN( ) → number

drawToasts( ) → void

toasts

toast(textS: string, kind: string?, color: string?) → void

argtypedescription
textSstring
kindstring?
colorstring?

notify(e: any) → void

R "notify" events. Quest start / complete and level-ups get a banner instead.

argtypedescription
eany

showNextBanner( ) → void

banner(b: any) → void

argtypedescription
bany

hold(secs: number) → void

Keep the banner area clear for `secs` (another slice's banner owns it).

argtypedescription
secsnumber

questStarted(id: string) → void

argtypedescription
idstring

questCompleted(id: string) → void

argtypedescription
idstring

levelUp(e: any) → void

argtypedescription
eany

phone(call: any) → void

phone

argtypedescription
callany

drawJournal( ) → void

journal

ensureSel( ) → void

closeJournal( ) → void

move(d: number) → void

argtypedescription
dnumber

select(id: string) → void

argtypedescription
idstring

track( ) → void

openJournal( ) → boolean

toggleJournal( ) → void

refresh( ) → void

Quest state changed while the journal is open.

selected( ) → string

stop( ) → void

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.

15+items
·
inputmap · born here
❒asset
# journalnav Moving through the open quest journal: - **up / down**: Arrow keys or W/S, or the gamepad D-pad. - **track**: Enter or Space, or gamepad South (A), tracks the selected quest. - **close**: Escape or gamepad East (B). It has no touch bindings, because on touch the journal's rows and buttons are tapped directly. The `Quests` component activates the map only while the journal is open. It suppresses the `hud`, `combat` and `player` groups so the D-pad and W/S do not also open the map or move V.
▲ 0↑ born
▣
module · born here
❒asset
# game.rules Banana 2077's one shared module: palette, the Peel Kabuki street layout every slice builds to, tuning for the player, baton and enemies, the controls list, the live game state (`R.state`, kept across hot reloads), the event bus (`R.on` / `R.emit`) and the rule functions that change state (`damagePlayer`, `healPlayer`, `addEddies`, `setSunglasses`, `registerTarget`, `hit`, `reportKill`, `setPhase`, `startRun`). Required by every slice; owned by the lead. See `/zero/source/design/spec.md`.
▲ 0↑ born
·
inputbinding · born here
❒asset
# close.inputBinding One control of the quest journal; see the map README for what it does on each device.
▲ 0↑ born
·
inputbinding · born here
❒asset
# down.inputBinding One control of the quest journal; see the map README for what it does on each device.
▲ 0↑ born
·
inputbinding · born here
❒asset
# track.inputBinding One control of the quest journal; see the map README for what it does on each device.
▲ 0↑ born
·
inputbinding · born here
❒asset
# up.inputBinding One control of the quest journal; see the map README for what it does on each device.
▲ 0↑ born
backing path · game/quests/ui.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 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.