# Der Ruf der Pilze — Projekt-Kontext für Claude Code

## Was wir bauen

Ein atmosphärischer Multiplayer One-Shot für D&D 5e, gespielt über Godot 4.
Kein klassisches Spiel — eher eine interaktive Bühne für eine Gruppe von 3–5 Spielern + 1 DM.

**Kernmechanik:** Sporen-induzierte asymmetrische Wahrnehmung. Jeder Spieler sieht eine
andere Realität. Die Rätsel sind nur durch Kommunikation zwischen den Spielern lösbar.
Das Spiel verrät den Spielern nie direkt, dass sie verschiedenes sehen — sie entdecken
es selbst im Gespräch.

---

## Tech Stack

- **Engine:** Godot 4.x (GDScript)
- **Multiplayer:** Godot native MultiplayerAPI (ENet/WebSocket), kein Mirror
- **MCP:** @satelliteoflove/godot-mcp (Screenshot-Feedback-Loop mit Claude Code)
- **Hosting:** VPS, Godot Dedicated Server (headless)
- **Plattform:** Arch Linux
- **3D-Modelle:** Meshy AI (Generierung), Blender (Nachbearbeitung via blender-mcp)

---

## Architektur

```
VPS — Godot Dedicated Server (headless)
├── SceneManager    — Autoload; verwaltet Szenen-Wechsel via transition_to("name")
│                     pending_room_index: int — gesetzt vor game_started, gelesen von tavern.gd
├── GameState       — welcher Spieler welche Realität sieht (Dictionary peer_id → state)
├── RoomManager     — Türen, Trigger, Rätsel-States pro Raum
└── SporeLevel      — Sporennebel-Dichte pro Raum (0.0 – 1.0)

Spieler-Client (Ego-Perspektive, First Person)
├── PlayerController — Bewegung, Interaktion
├── OverlayManager   — empfängt per rpc_id() nur seinen eigenen Overlay-State
├── AudioManager     — direktionaler Audio lokal berechnet
└── DiceRoller       — d20 + Modifier, Ergebnis wird an alle gebroadcastet

DM-Client (Top-Down-Ansicht)
└── RegiepultUI
    ├── Spieler-Positionen live
    ├── Overlay-Toggle pro Spieler
    ├── Sporennebel-Slider pro Raum
    ├── Türen/Geometrie manipulieren
    ├── Audio-Trigger (Annas Spieluhr-Lied, direktional)
    └── DC-Anzeige bei Würfelwürfen
```

**Asymmetrische Wahrnehmung** läuft über `rpc_id()` — der Server schickt jedem
Spieler nur seinen eigenen Overlay-State:

```gdscript
# Nur an einen bestimmten Spieler schicken
rpc_id(peer_id, "show_overlay", "living_monastery")
```

---

## Szenen-Struktur (aktuell)

```
scenes/
  tavern_lobby.tscn  ← Lobby/Warteraum (instanziert taproom.tscn + CanvasLayer UI)
  taproom.tscn       ← Gastraum-Geometrie, Geometrie-Only, kein Script
  tavern.tscn        ← In-Game-Taverne: 2 Stockwerke, taproom + Obergeschoss mit Zimmern
  dm_view.tscn       ← DM-Stub (wird in Schritt 6 ausgebaut)
```

Room-Zuweisung: `room_assignments: Dictionary` als Parameter in `start_game` RPC —
nicht als separaten RPC danach (würde Timing-Problem mit `tavern.gd`'s `_ready()` verursachen).

---

## Story

Die Spielergruppe verbringt einen Abend in einer Taverne. Am nächsten Morgen
ist **Anna** verschwunden — Robe halb zersetzt auf dem Boden, eine Myzelspur
führt aus dem Zimmer in den Wald.

Das Kloster am Waldrand trägt das Symbol von Annas Orden. Die Spieler erkunden
es, erleben Sporen-induzierte Halluzinationen, sehen verschiedene Realitäten
und müssen zusammenarbeiten um zu Anna zu gelangen.

Am Ende finden sie Anna — lächelnd, verbunden mit dem Myzel, vollständig ruhig.

> _"Ich bin nicht verloren. Immer gefunden. Ich bin ja schon groß."_

Alle wachen in der Taverne auf. Anna sitzt beim Frühstück. Lächelt. Sagt nichts.
Die Spieler schauen auf ihre eigenen Hände — Dreck unter den Fingernägeln.
War es ein Traum? Hat **Putrescor** sie kurz ins Netzwerk gelassen?

**Offen. Für immer.**

### Putrescor

Annas Patron (Spore Druid / Great Old One Warlock). Ein Myzel-Bewusstsein das
alles verbindet was je gewachsen und verrottet ist. Kommuniziert nicht in Worten
— in Verbindung. Das Kloster ist kein Ort, es ist eine Erinnerung im Netzwerk.

---

## Raumstruktur

```
[START] Taverne → Myzelpfad → Klostertor
                                    │
                          ┌─────────▼─────────┐
                          │   EINGANGSHALLE   │  ← Atmosphäre, kein Rätsel
                          └─────────┬─────────┘
                    ┌───────────────┼───────────────┐
                    ▼               ▼               ▼
             REFEKTORIUM      BIBLIOTHEK         KAPELLE
           "Zwei Welten"    "Flüsternetz"      "Spiegelbild"
                    └───────────────┼───────────────┘
                                    ▼
                          ┌─────────────────┐
                          │    KREUZGANG    │  ← Optionaler Wächter
                          └────────┬────────┘
                                   ▼
                          ┌─────────────────┐
                          │     SANCTUM     │  ← "Annas Lied"
                          └────────┬────────┘
                                   ▼
                                  ANNA
```

Die drei mittleren Räume (Refektorium, Bibliothek, Kapelle) können in
**beliebiger Reihenfolge** gespielt werden. Erst wenn alle drei gelöst sind,
öffnet sich der Kreuzgang.

---

## Rätsel im Detail

### 🍽️ Refektorium — "Zwei Welten, ein Raum"

- **2 Spieler** sehen lebendiges Kloster: Mönche, Kerzen, Gesang
- **2–3 Spieler** sehen Ruinen: Skelette, Schimmel, Mondlicht
- Ein Mönch (nur Gruppe A sichtbar) klopft an einen Stein in der Wand
- Gruppe B sieht nur verwitterten Stein — aber der Stein ist hohl
- Dahinter: **Schlüssel Nr. 1**
- DM-Toggle: welche Spieler welche Realität sehen
- Checks: Investigation DC 12 (Gruppe B), Perception DC 10 (alle)

### 📚 Bibliothek — "Das Flüsternetz"

- Myzelfasern in den Regalen flüstern — jeder Spieler hört ein anderes Fragment
  - Spieler A: _"...wenn der erste Mond..."_
  - Spieler B: _"...das Feuer erlischt..."_
  - Spieler C: _"...sprich ihren Namen..."_
  - Spieler D: _"...und der Kreis sich schließt"_
- Zusammen: _"Wenn der erste Mond das Feuer erlischt, sprich ihren Namen und der Kreis sich schließt."_
- Kerzenkreis im Raum: alle Kerzen löschen + "Anna" sagen → Geheimfach → **Schlüssel Nr. 2**
- Bei hoher Sporendichte: Fragmente leicht verzerren (ein Spieler hört "deinen" statt "ihren")
- Checks: Perception DC 13 (verzerrt), Arcana DC 11 (Ritual)

### ⛪ Kapelle — "Das ehrliche Spiegelbild"

- Großer Spiegel am Altar, jeder sieht etwas anderes:
  - Spieler A: eigenes Gesicht, Augen geschlossen
  - Spieler B: den Raum ohne sich selbst
  - Spieler C: Anna, die winkt
  - Spieler D: Spiegel mit Riss — dahinter Licht
- Nur einer sieht die Wahrheit: hinter dem Spiegel ist ein Hebel → **Schlüssel Nr. 3**
- Falsche Aktion: 3-Sekunden-Halluzination für alle — sie sehen Anna, die lächelt
- **Kein mechanischer Hinweis** wer die Wahrheit sieht — reines Rollenspiel
- Checks: Insight DC 14, Investigation DC 12

### 🌿 Kreuzgang — Optionaler Wächter

- Alle drei Lösungen an drei Symbolen an der Wand einsetzen
- Wächter (Mönch aus Pilzgeflecht) erscheint wenn Gruppe zu laut/hastig war
- Checks: Nature DC 13 (Vorteil für Druid/Ranger), Persuasion DC 15, Stealth DC 12 (alle)
- **Kein Kampf** — nur Skill Checks

### 🌑 Sanctum — "Annas Lied"

- Dunkel, nur Biolumineszenz der Pilze
- Spieluhr-Melodie klingt für jeden aus anderer Richtung
- Wenn alle gleichzeitig in ihre Richtung schauen: bilden sie einen Kreis
- In der Mitte: Anna
- **Kein Check** — reines Erzählen

---

## Sporennebel

Steigt mit jeder Ebene. DM-steuerbar per Slider im Regiepult.

| Raum                               | Dichte  | Effekt                      |
| ---------------------------------- | ------- | --------------------------- |
| Taverne                            | Gering  | Atmosphäre, keine Checks    |
| Refektorium / Bibliothek / Kapelle | Mittel  | Checks können verzerrt sein |
| Kreuzgang                          | Hoch    | Stärkere Overlays möglich   |
| Sanctum                            | Maximum | Reine Erzählung             |

---

## Würfel

Nur ein einfacher d20-Roller nötig:

```
[ 🎲 d20 ]  Modifier: [+3]  →  Ergebnis: 17
```

- Wurf sichtbar für alle Spieler + DM
- DM sieht DC im Regiepult (Spieler nicht)
- Kein Kampfsystem, kein Initiative-Tracker, kein vollständiges Charsheet ingame

---

## Anna (Spieler-Charakter, wird vom DM gespielt)

- **Klasse:** Circle of Spores Druid 3 / Great Old One Warlock 2
- **Patron:** Putrescor (das Myzel-Netzwerk selbst)
- **Erscheinung:** zerfetzte Ordensroben durchwoben mit Myzel, gräuliche Haut,
  Pilze die auf ihr wachsen, Myzelfäden aus den Fingern, Augen etwas zu groß,
  Lächeln etwas zu lang gehalten
- **Persönlichkeit:** enthusiastisch fröhlich, distanzierte Neugier gegenüber
  Leid und Verfall, kein Böswille — alles ist natürlicher Prozess
- Im One-Shot: NPC, taucht erst im Sanctum auf

### 3D-Modell

Verzeichnis: `../Anna_Model/` (außerhalb von `ruf-der-pilze/`, im Repo-Root)

- **Referenzbilder:** `Anna_Front/Back/Left/Right.png`, `Anna_Pose.png`, `Anna_Pose_2.png`
- **Textured Model:** `Meshy_AI_Mushroom_Maiden_0413192046_texture_obj/` (.obj + .mtl + .png)
- **Workflow:** Meshy AI generiert → Blender (blender-mcp) für Nachbearbeitung → Import in Godot
- Rohe untexturierte OBJs und ZIPs werden **nicht** eingecheckt (`.gitignore`)

---

## Entwicklungs-Reihenfolge

1. ✅ MCP eingerichtet (@satelliteoflove/godot-mcp, Claude Code verbunden)
2. ✅ Multiplayer Grundgerüst (Server, Clients verbinden, rpc testen)
3. ✅ Lobby + Rollen (Spieler mit Name + Rolle, DM-Sonderrechte)
4. ✅ Tavern Lobby — 3D-Taverne als Warteraum, SceneManager Autoload
5. ✅ Taverne + Szenen-Wechsel — 2-stöckige In-Game-Taverne (Blockout), taproom.tscn
   als Sub-Scene, game_started → Spieler in Zimmer (SpawnPoint), DM → dm_view.tscn
6. ✅ DM Regiepult Basics — GameState, Overlay-RPC, EG+OG-Viewports nebeneinander, Marker, Player-Cams, Overlay-Panel
--- Mechaniken ---
7. ⏳ Tavern Lighting — Beleuchtung, Kerzen, Ambient
8. ⏳ Dice Roller — d20 + Modifier, für alle sichtbar, DM sieht DC
9. ⏳ Basic Player Interaction — WASD + Maus-Look, Raycast + Interact-Taste (E)
10. ⏳ Spore Overlay — Screen-space Shader pro Spieler, DM-togglebar
11. ⏳ Sporennebel Slider — DM Panel → SporeLevel → Overlay-Intensität
--- Charaktere + Assets ---
12. ⏳ Lite Charakterbogen — CharName, Rasse, Klasse, 6 Skill-Modifier; Archetypes für Dev
13. ⏳ Charakter-Platzhalter — farbige Capsules pro Archetyp
14. ⏳ Tavern Art Pass — echte Props via Polyhaven/Sketchfab/Meshy AI
--- Klosterwelt ---
15. ⏳ DM Story Control + Türen-System — Regiepult-Panel, DM öffnet Türen
16. ⏳ Myzelpfad / Reise-Szene — DM-getriggert, atmosphärisch
17. ⏳ Monastery Blockout — monastery.tscn: Eingangshalle + alle Räume
18. ⏳ Monastery Art Pass — Steinbögen, Altar, Bücherregale, Kerzenleuchter
19. ⏳ Eingangshalle — freie Exploration, DM öffnet Türen
20. ⏳ Dunkelsicht-System — Rassen-Flag → Dunkelheit-Shader
--- Rätsel + Story ---
21. ⏳ Refectorium — "Zwei Welten", asymmetrische Wahrnehmung, Schlüssel 1
22. ⏳ Bibliothek — "Flüsternetz", individuelle Audio-Fragmente, Schlüssel 2
23. ⏳ Kapelle — "Spiegelbild", asymmetrischer Spiegel, Schlüssel 3
24. ⏳ Kreuzgang — Wächter-Puzzle (Angriffe wirkungslos, Sporen eskalieren, Skill Checks)
25. ⏳ Sanctum + Anna — Spieluhr, Kreis-Formation, reines Erzählen
--- Polish ---
26. ⏳ Aktions-Selektor — klassen-spezifische Zauber/Angriff-Effekte (nur visuell)
27. ⏳ Full Spore Effects — Nebel-Partikel, Bewegungsverzerrung
28. ⏳ Soundscape + Spieluhr-Melodie — direktionaler Audio, Annas Lied

---

## Arbeitsweise

### Dokumentation & Planung

- **Aktueller Stand:** `../docs/STATUS.md` — nach jedem abgeschlossenen Schritt updaten
- **Pläne (aktiv):** `../docs/plans/` — Spec + Implementierungsplan pro Feature
- **Pläne (archiviert):** `../docs/plans/archive/` — abgeschlossene Pläne hierhin verschieben
- Vor jeder Implementierung prüfen ob ein Plan existiert — falls nicht, erst einen erstellen

### Git

- Repo liegt unter `DnD_Anna_OneShot/` (deckt `docs/` und `ruf-der-pilze/` ab)
- Nach jedem abgeschlossenen Task committen
- Commit-Format: `scope: imperative subject` (z.B. `net: add NetworkManager`, `docs: update STATUS`)
- Pläne committen wenn erstellt; archivieren wenn Feature abgeschlossen

---

## Wichtige Designprinzipien

- Das System sagt den Spielern **nie** dass sie verschiedenes sehen
- Die soziale Kommunikationsschicht **ist** die Mechanik
- Das Ende (Dreck unter den Fingernägeln) bleibt **für immer offen**
- Kein Kampf — die Atmosphäre ist das Spiel
- DM hat volle Kontrolle über alle Wahrnehmungen in Echtzeit

## Festgelegte Design-Entscheidungen

- **Voice Chat:** Noch offen — In-Game (GDVoip/WebRTC mit räumlichem Audio) oder Discord extern
- **Kampf:** Kein Kampfsystem. Wächter = Skill-Check-Puzzle; Angriffs-Versuche eskalieren Sporen,
  sind mechanisch wirkungslos — das ist das Rätsel
- **Monastery:** Eine Szene (monastery.tscn), alle Räume räumlich getrennt
- **Türen:** DM-gesteuert per Regiepult-Button
- **Charaktermodelle Dev:** Archetyp-Capsules mit Farbe; Production: Spieler-TTS-Modelle
  via Meshy AI rigging → Blender (blender-mcp) → Godot
- **Aktions-Effekte:** Rein visuell (GPUParticles3D), kein Schadenssystem
