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) <noreply@anthropic.com>
This commit is contained in:
@@ -56,6 +56,83 @@ alle Phasen 1–7 grün. Ziel: deutlich mehr Tiefe und Politur.
|
|||||||
- Ausbau Richtung: mehrstufige Quests, Bedingungen, NPC-"Memory" (Zustand),
|
- Ausbau Richtung: mehrstufige Quests, Bedingungen, NPC-"Memory" (Zustand),
|
||||||
Quest-Log, evtl. Win-Condition daran gekoppelt.
|
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: <dateiname>`), 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 <raum>`, 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)
|
## Offene Designfragen (zu klären)
|
||||||
|
|
||||||
- Wie weit darf die `GameIO`-Abstraktion aufgebohrt werden, ohne dass Konsole
|
- Wie weit darf die `GameIO`-Abstraktion aufgebohrt werden, ohne dass Konsole
|
||||||
|
|||||||
Reference in New Issue
Block a user