From 0b9f55d0b1f90c9a28e4f5857426e2507cfb7308 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Sun, 31 May 2026 19:54:29 +0200 Subject: [PATCH] docs: flesh out enhancement backlog (menu, save, music, mechanic spine) - decisions: standard collections only, libraries allowed - main menu + settings + saved-games list - save/load system - GUI music: per-room via YAML, external folder, compressed + streamed - game core: "restore the power" main goal, 5-piece mechanic spine, quest chain routing the player room-by-room, condensed by design Co-Authored-By: Claude Opus 4.8 (1M context) --- Semesterprojekt/docs/enhancement-ideas.md | 77 +++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/Semesterprojekt/docs/enhancement-ideas.md b/Semesterprojekt/docs/enhancement-ideas.md index 36dee82..903a5c3 100644 --- a/Semesterprojekt/docs/enhancement-ideas.md +++ b/Semesterprojekt/docs/enhancement-ideas.md @@ -56,6 +56,83 @@ alle Phasen 1–7 grün. Ziel: deutlich mehr Tiefe und Politur. - Ausbau Richtung: mehrstufige Quests, Bedingungen, NPC-"Memory" (Zustand), Quest-Log, evtl. Win-Condition daran gekoppelt. +### 5b. Spielkern: zentraler Bogen + Mechanik-Spine + +**Leitidee (bestätigt):** Bewusst *kondensiert* – wenige Mechaniken, die sich +vielfach kombinieren, statt vieler Einzel-Gimmicks. Ein 60-Min-Spiel soll +*designt* wirken, nicht gestreckt. + +**Hauptziel:** *Den Strom wieder anschalten* (`power_on`). Der Weg dahin ist eine +**Quest-Kette, die den Spieler Raum für Raum führt** (Raum X freischalten → führt +zu Raum Y → … → Generator/Sicherungskasten). Das Hauptziel selbst ist das Ende +des Bogens; einzelne Teilziele schalten je den nächsten Bereich frei. + +**Mechanik-Spine (5 Bausteine, die sich kombinieren):** + +1. **World-Flags / Zustand** – Rückgrat (`power_on`, `cellar_drained`, + `ghost_banished`). Beschreibungen, Exits und NPC-Reaktionen lesen/schreiben sie. +2. **Verschlossene Exits & Schalter** – Türen brauchen Schlüssel *oder* Flag; + Hebel/Ventile setzen Flags und öffnen Bereiche. +3. **Licht & Dunkelheit** – dunkle Räume brauchen eine brennende Lichtquelle, + sonst keine Sicht auf Exits/Items (Atmosphäre, einfach umzusetzen). +4. **Item-Kombination** – z.B. `match + candle → lit candle`. Achtung: v1.0 hat + bewusst argloses `use X` ohne Targets gewählt → Command-Grammatik muss erweitert + werden (jetzt erlaubt, da über MVP hinaus). +5. **Quest-Ketten + mehrere Enden** – Teilziele referenzieren Flags; Kette + abschließen = Win; *welche* Flags gesetzt sind, entscheidet das Ende. + +**Beispiel-Puzzle (zeigt das Stapeln):** *Strom wiederherstellen* – Sicherung im +gefluteten Keller; erst Ventil → `cellar_drained`; Sicherung einsetzen → Schalter +→ `power_on` → oberes Stockwerk/Tür öffnet sich. Ein Puzzle, drei Mechaniken, +schaltet einen ganzen Flügel frei. + +*Weitere Puzzle-Ideen im Backlog (optional, nach Bedarf):* Zahlenschloss mit +Code aus Lore, Caesar-Chiffre-Brief (`decode`), Geist bannen (Reliquien-Fetch), +Melodie-/Sequenz-Rätsel, dunkler Gang. Resource-Meter (Sanity/Öl) **offen** – +vorerst puzzle-fokussiert ohne Survival-Druck. + +### 6. Hauptmenü & Settings + +- **Hauptmenü** vor der Spielschleife: *Neues Spiel*, *Spiel laden*, *Einstellungen*, *Beenden*. +- **Spielstände-Liste**: gespeicherte Spiele mit Metadaten (Name, Raum, Zugzahl, + Zeitstempel) anzeigen und hineinladen. +- **Settings-Untermenü**: z.B. Farben an/aus, Typewriter-Tempo, Musik-Lautstärke + an/aus, ASCII vs. Unicode. +- Sollte in beiden Modi funktionieren: Konsole = nummeriertes Textmenü, GUI = + Buttons/Liste. Architektur: Menü-Schicht *oberhalb* des Game-Loops. + +### 7. Speichern / Laden + +- Spielstand serialisieren (Player-Zustand, Inventar, World-Flags, besuchte Räume, + Quest-Fortschritt) – Format z.B. YAML/JSON. +- Mehrere Speicherstände, benennbar; Anbindung an die Spielstände-Liste im Menü. + +### 8. Musik (GUI) + +- Hintergrundmusik **nur in der GUI**. +- **Pro Raum definierbar via YAML**: in `rooms.yaml` ein optionales Feld + (z.B. `music: `), Dateien in *einem* Ordner. +- **Dateigröße** ist ein Thema → Lösungsrichtung: + - Audiodateien **nicht** in JAR/Repo bündeln, sondern externer `music/`-Ordner; + Audio ggf. via `.gitignore` ausschließen + dokumentieren, wo Dateien hinkommen. + - **Komprimierte Formate** (OGG/MP3) statt WAV, **gestreamt** statt komplett geladen. + - Bibliothek erlaubt → kleinen Audio-Decoder einbinden (Java `javax.sound` kann + OGG/MP3 nicht nativ). + - Loop pro Track, sanfter Wechsel beim Raumwechsel, graceful fallback bei + fehlender Datei, Lautstärke aus den Settings. + - Architektur: `MusicPlayer`-Komponente hinter Interface; Konsole = No-Op. + +## Festgelegte Erweiterungs-Entscheidungen + +| Entscheidung | Wert | +|---|---| +| Eigene `uebung`-Datenstrukturen verwenden? | **Nein** – Standard-Collections (vom Prof bestätigt) | +| Algorithmen-Showcase | weiterhin willkommen, aber mit Standard-Datenstrukturen (z.B. BFS `go to `, Trie-Autocomplete) | +| Bibliotheken erlaubt? | **Ja** (Pflichtteil war bewusst ohne; Erweiterung darf welche nutzen) | +| Hauptmenü | ja: Neues Spiel / Laden / Settings / Beenden | +| Speichern/Laden | ja, mehrere benannte Spielstände | +| Musik | ja, **nur GUI**, pro Raum via YAML, externer Ordner, komprimiert + gestreamt | + ## Offene Designfragen (zu klären) - Wie weit darf die `GameIO`-Abstraktion aufgebohrt werden, ohne dass Konsole