Log inGet started
World

Banana 2077

Branchmain
Branchesmain
Commit49a1306fab

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 every R.cast member except V and Johnny. Each NPC goes to its home spot, checked with a ground raycast, and is published with R.setCastPosition. Rigs are built lazily, one per frame, the first time V comes near. They are hidden beyond cullDistance (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 TALK interactable (npc_<id>). At 8 Hz the component shows a prompt for R.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 calls R.interact.

  • Visual-novel dialogue. On dialogueRequested it 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 or requires fails. 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 run functions, ends with R.endDialogue, and releases the mouse pointer while open.

  • Johnny Silverpeel. On johnnySays it 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.talk and game.story.romance
  • the input maps game.story.dialogue and game.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.