Banana 2077
README.md
Story
The story slice of Banana 2077. The scene entrypoint attaches it to the mount_story entity in play; nothing else attaches it.
What it does:
-
Cast in the city. It builds a procedural fruit NPC (from
game.story.cast) for everyR.castmember except V and Johnny. Each NPC goes to its home spot, checked with a ground raycast, and is published withR.setCastPosition. Rigs are built lazily, one per frame, the first time V comes near. They are hidden beyondcullDistance(checked at 3 Hz). Within 25 m they breathe and sway at 15 Hz, and within 6 m they turn to face V. When a romance date moves an NPC, the move waits until V is more than 30 m away so nobody teleports on screen. -
Interaction for every slice. Each NPC is registered as a
TALKinteractable (npc_<id>). At 8 Hz the component shows a prompt forR.nearestInteractable, whoever registered it:[F] TALK | JUDY BLUEBERRY, with[RB]after gamepad input. On touch it shows a contextual button labelled with the verb. F, gamepad RB, a tap on the touch button or a click on the prompt callsR.interact. -
Visual-novel dialogue. On
dialogueRequestedit draws letterbox bars, a bottom text box, the speaker's portrait, a name plate in the cast colour and a mood chip, typewriter text (about 20 Hz, one label) and up to 4 choices with[ATTR N]tags. A choice is locked when its check orrequiresfails. Controls:- keyboard: 1-4, arrows or W/S, Enter/Space/F, Esc
- gamepad: dpad, south to confirm, east to close
- mouse and touch: click or tap
- platform Back closes it
It runs node and choice
runfunctions, ends withR.endDialogue, and releases the mouse pointer while open. -
Johnny Silverpeel. On
johnnySaysit shows a glitchy magenta/cyan RGB-split overlay line. The component makes Johnny react to:- the first visit to each place
- level-ups
- flatlining
- boss kills
- low health
- the first quickhack
Ordinary lines are limited to one every 30 s. Story beats skip that limit but wait for the dialogue to close.
-
Talk providers. It installs the priority-0 chatter (
game.story.talk: affection, gifts, attribute checks) and the priority-60 romance arcs (game.story.romance).
Needs:
- the modules
game.rules,game.story.cast,game.story.talkandgame.story.romance - the input maps
game.story.dialogueandgame.story.story - the portrait textures in
game.story.art
It uses UI layers 140–148 only. onDestroy removes every subscription, input binding, screen, interactable and NPC entity it made, so a hot reload or a reset never doubles anything.