Repository navigation
Venue
The venue is the single scene the player lives in. The court (play area), the friend's shop, the tinkerer's workshop, the ball rack, the gear rack, the shipment mat, and any unlocked characters all live in venue.tscn. The camera moves within the scene to focus each interaction.
Other 08 docs are details of systems that live inside this venue.
venue.tscn (renamed from today's main.tscn) is the root.
venue.tscn
├── Court (play area; paddles, ball, walls)
│ ├── VolleyCounter (diegetic scoreboard on the court)
│ ├── PersonalBest (diegetic plaque on the court)
│ ├── SoulLabel (diegetic counter on the court)
│ ├── BallRack (inactive balls; see 08-kit.md)
│ ├── GearRack (inactive equipment; see 08-kit.md)
│ └── ShipmentMat (where boxes land; see 08-shipments.md)
├── Shop (see 08-shop.md; hidden until friend unlocked)
│ ├── FriendCharacter
│ ├── ShopTable
│ ├── ShopCatalog
│ └── ShippingCounter
├── Workshop (see 08-tinkerer.md; hidden until tinkerer unlocked)
│ ├── TinkererCharacter
│ ├── Workbench
│ ├── DoneTray
│ └── DropOffBasket
├── Roles (court-fixture markers; see tech/06-roles.md)
├── DevHUD (CanvasLayer; screen-space dev overlay only)
└── Camera (single framing for the whole diorama)
Everything is reachable at all times by dragging from one area to another. Targets are always visible in the single frame; the player does not move a cursor-avatar.
Some actions require the main character to step off the court (equipping, dequipping). The player calls a timeout to do so; the rally plays out without a defender during the timeout.
One camera holds the whole venue as a readable diorama. Every interactive surface is visible at once; the camera does not pan between them.
Volley counter, personal best, and friendship balance live on the court as world-space elements: a scoreboard, a plaque, a counter. They are children of Court, so they ride with it through milestone redressing. Every one of these is a candidate for replacement by a later system (a partner announcing the streak, a character handing over friendship, etc.); the court-children arrangement is the starting point, expected to evolve.
New-arrival cues (a shipment landing, a commission finishing, a character unlocking) also play in world space: a small pulse on the relevant object, no screen-space banner.
DevHUD is a CanvasLayer child of venue.tscn. Screen-space. Only the developer overlay (FPS counter, state inspection, dev-panel toggles) lives here. Player-facing game state does not.
Stretch: canvas_items with keep aspect ratio. Steam Deck and desktop receive the same root scene at their native aspect; the stretch handles letterboxing.
var unlocked_characters: Array[StringName] = []Persisted. Each character has a key (&"friend", &"tinkerer").
| Character | Trigger | Arrives with |
|---|---|---|
| Friend | First friendship threshold, or scripted early beat | The shop |
| Tinkerer | Later friendship threshold or post-friend beat | The workshop |
| Partners | Existing partner track (see 11-first-partner-unlock.md) |
Themselves |
On unlock: arrival animation plays once, the area becomes visible, future loads start with the character already present.
Starting state: empty court with the ball rack, the gear rack, and the shipment mat.
Migration redresses venue.tscn rather than relocating characters. Shipments and commissions in flight continue ticking through the dressing change.
-
Character areas (shop, workshop). Gated by
unlocked_characters. Top-level child scenes, hidden until unlock. -
Item fixtures (bot dock, jukebox). Gated by court presence of an item with a fixture. Spawned and freed by
FixtureManager(see08-fixtures.md).
All wall-clock systems (kit passive friendship, shipments, tinkerer commissions) share a single offline cap constant:
offline_cap_seconds: int = 28800 # 8 hours
On resume, each system advances by min(elapsed, offline_cap_seconds). Defined once here so future systems use the same value.
- Windowed desktop mode:
SH-51territory. Desktop is secondary.
- Visual density once shop, workshop, bot dock, and partners are all unlocked. Leaning: camera framing tightens on the court during play; periphery rides the edges.
Not filing yet.
-
venue.tscnrebuild: court with diegetic signage children, ball rack, gear rack, shipment mat, character-area markers, role markers, camera, dev HUD. - Character unlock system:
unlocked_characters, arrival beats, show/hide of child scenes. - Diorama layout pass.
- Milestone migration hook.
Contributing
The game
The Cast
Process
Reference