docs: add tavern in-game scene design spec
This commit is contained in:
145
docs/superpowers/specs/2026-04-14-tavern-scene-design.md
Normal file
145
docs/superpowers/specs/2026-04-14-tavern-scene-design.md
Normal file
@@ -0,0 +1,145 @@
|
||||
# Design: Taverne In-Game-Szene
|
||||
|
||||
Datum: 2026-04-14
|
||||
Status: Genehmigt
|
||||
|
||||
---
|
||||
|
||||
## Kontext
|
||||
|
||||
Die bestehende `tavern.tscn` ist ein einfacher Gastraum-Blockout der als Lobby-Warteraum dient (vor Spielstart). Nach `game_started` müssen Spieler in eine richtige In-Game-Szene wechseln: die vollständige 2-stöckige Taverne, in der die Geschichte beginnt.
|
||||
|
||||
Gleichzeitig wird der Gastraum als wiederverwendbare Sub-Scene extrahiert, damit Lobby und In-Game-Szene dieselbe Geometrie nutzen (keine Duplikation).
|
||||
|
||||
---
|
||||
|
||||
## Grundriss
|
||||
|
||||
**Variante B — Offene Küche:** Gastraum und Küche sind offen verbunden. Spieler können die Küche vom Gastraum aus sehen, aber nicht betreten (Tresen als Grenze). Private Gemächer als abgetrennter Bereich mit verschlossener Tür.
|
||||
|
||||
```
|
||||
OBERGESCHOSS
|
||||
┌─────────────────────────────────────────┐
|
||||
│ [Z1][Z2][Z3][Z4][Z5][Z6][Z7][Z8][Anna]│
|
||||
│ ←————————— Korridor ————————————→ │
|
||||
│ [Treppe] │
|
||||
└─────────────────────────────────────────┘
|
||||
|
||||
ERDGESCHOSS
|
||||
┌─────────────────────────────────────────┐
|
||||
│ [Eingang] [——— Gastraum ———] [Private] │
|
||||
│ [offene Küche hinten] │
|
||||
│ [Treppe] │
|
||||
└─────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
- 8–10 Gästezimmer + Annas Zimmer im Obergeschoss (~9–11 Türen total)
|
||||
- Küche sichtbar, aber nicht betretbar
|
||||
- Private Gemächer: verschlossene Tür, nicht betretbar
|
||||
|
||||
---
|
||||
|
||||
## Szenenarchitektur
|
||||
|
||||
### Neue Dateistruktur
|
||||
|
||||
```
|
||||
scenes/
|
||||
taproom.tscn ← Gastraum als wiederverwendbare Sub-Scene
|
||||
(bisher war das der Inhalt von tavern.tscn)
|
||||
tavern_lobby.tscn ← Lobby/Warteraum; instanziert taproom.tscn
|
||||
tavern.tscn ← In-Game-Szene: vollständige 2-stöckige Taverne
|
||||
(instanziert taproom.tscn + Obergeschoss + Rest)
|
||||
dm_view.tscn ← DM-Szene (Stub; wird in Schritt 7 ausgebaut)
|
||||
```
|
||||
|
||||
### SceneManager-Änderungen
|
||||
|
||||
```gdscript
|
||||
const SCENES := {
|
||||
"lobby": "res://scenes/tavern_lobby.tscn", # war: "tavern"
|
||||
"tavern": "res://scenes/tavern.tscn", # neu: volle In-Game-Taverne
|
||||
"dm_view": "res://scenes/dm_view.tscn", # neu: DM-Stub
|
||||
# "chamber" entfällt — Zimmer sind Teil von tavern.tscn
|
||||
...
|
||||
}
|
||||
|
||||
# _on_root_ready → transition_to("lobby") (war: "tavern")
|
||||
# _on_game_started → Spieler: transition_to("tavern")
|
||||
# DM: transition_to("dm_view")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Szeneninhalt `tavern.tscn`
|
||||
|
||||
### Erdgeschoss
|
||||
|
||||
| Bereich | Betretbar | Notiz |
|
||||
|---|---|---|
|
||||
| Gastraum (`taproom.tscn`) | Ja | Sub-Scene |
|
||||
| Küche | Nein | Vom Gastraum sichtbar, Tresen als Grenze |
|
||||
| Private Gemächer | Nein | Verschlossene Tür |
|
||||
| Ausgang | Ja | Tür → Myzelpfad (nächste Szene) |
|
||||
|
||||
Myzelspur am Boden: Treppe ↓ → Gastraum → Ausgang (als Decal oder farbige Plane-Meshes).
|
||||
|
||||
### Obergeschoss
|
||||
|
||||
| Bereich | Betretbar | Notiz |
|
||||
|---|---|---|
|
||||
| Korridor | Ja | Verbindet alle Zimmer |
|
||||
| Gästezimmer 1–8 (oder mehr) | Ja | Spieler-Zimmer mit SpawnPoint |
|
||||
| Annas Zimmer | Ja | Tür offen, Raum myzelüberzogen |
|
||||
|
||||
Annas Zimmer: Myzelspur führt aus der Tür → Korridor → Treppe ↓.
|
||||
|
||||
### Spawn-Logik
|
||||
|
||||
- Jedes Spieler-Zimmer hat einen `Marker3D` Node namens `SpawnPoint`
|
||||
- Server weist beim `game_started` jedem Peer eine Zimmer-ID zu
|
||||
- Client spawnt Spieler-Kamera/Controller am zugehörigen SpawnPoint
|
||||
|
||||
### Spawn-Sequenz (Spieler-Client)
|
||||
|
||||
1. Fade in from black — "Augen öffnen sich"
|
||||
2. Spieler liegt im Bett — kurze Aufsteh-Animation
|
||||
3. DM hat Zeit für Narration (keine Eingabe nötig)
|
||||
4. Spieler übernimmt Kontrolle (First Person)
|
||||
|
||||
### DM
|
||||
|
||||
`game_started` → `transition_to("dm_view")` — Stub-Szene, wird in Schritt 7 (DM Regiepult) ausgebaut.
|
||||
|
||||
---
|
||||
|
||||
## Detailgrad
|
||||
|
||||
### Jetzt (Blockout)
|
||||
|
||||
Alles als BoxMesh-Placeholder, analog zur bestehenden `tavern.tscn`:
|
||||
|
||||
- Wände, Böden, Decken aller Räume
|
||||
- Treppen (Rampe oder Stufen-Boxen)
|
||||
- Türen als Lücken in der Wand
|
||||
- Betten als flache Box + SpawnPoint (`Marker3D`) darüber
|
||||
- Tresen als Box (Küchen-Grenze)
|
||||
- Collision shapes für alle Geometrie
|
||||
- Myzelspur: einfache farbige Plane-Meshes am Boden
|
||||
|
||||
### Später (eigene Features)
|
||||
|
||||
- Echte 3D-Modelle via Meshy AI / Blender
|
||||
- Myzel-Shader und Partikeleffekte
|
||||
- Kerzen- und Fackel-Beleuchtung
|
||||
- Fade-in + Aufsteh-Animation (AnimationPlayer)
|
||||
- Tür-Interaktionen (öffnen/schließen)
|
||||
- Audio: Gastraum-Atmosphäre, Schritte
|
||||
|
||||
---
|
||||
|
||||
## Abhängigkeiten
|
||||
|
||||
- Bestehende `tavern.gd` und `tavern.tscn` werden refactored (nicht gelöscht)
|
||||
- `scene_manager.gd` bekommt neue Keys und geänderte `_on_root_ready` / `_on_game_started` Logik
|
||||
- `network_manager.gd`: `game_started` Signal bereits vorhanden, keine Änderung nötig
|
||||
Reference in New Issue
Block a user