Explosion_der_Spiele/DESIGN.md

179 lines
10 KiB
Markdown
Raw Normal View History

# Explosion der Spiele – DESIGN (kanonische Wahrheit)
> **Single source of truth.** Alle Implementierung, Quests, Kampf und UI folgen diesem Dokument.
> Mündliches Diktat (User) + technische Entscheidungen. Bei Konflikt gewinnt dieses File
> (nicht Chat-Zusammenfassungen, nicht alte Scaffold-Kommentare).
**Repo:** https://forgejo.fsociety00.cc/copilot/Explosion_der_Spiele
**Engine:** Godot 4.3+ GDScript, PC
**Grafik:** 3D-Welt, Charaktere meist **Mario-Baum-Billboards** (+ GLB-Props). Referenzgröße **Spieler 1,74 m** (`SpriteFit.WORLD_PLAYER_HEIGHT`); Häuser/Tiere/Props realistisch relativ dazu.
---
## 1. Title Screen
- Ganz verpixelt: **Mario + Sonic** sichtbar (verpixelt), **Burger-Regen** (verpixelt). Art: User-Fotos / echte Sprites — bis dahin Platzhalter.
- Links unten: verstörter Mensch + Sprechblase: *„Oh mein Gott, es wird so verrückt. Hongkong ist ein weiser Mann.“*
- Titel: **Explosion der Spiele**
Untertitel: **Pay2Win (um reiche Leute anzulocken, hihihihi)**
- **Extrem laute** gesungene Musik; der **Sänger** singt: *„Hey, das hier ist so eine laute Musik extra. Damit du direkt auf Starten drückst…“* — **nicht** als UI-Text auf dem Titel. Lautstärke **nicht** runterdrehbar.
- Layout sonst so lassen, bis Grafik-Pack kommt.
- **Burger-Cham** alle **2 Minuten** solange man auf dem Title ist: Bild (70-jähriger Mann beißt in Burger) + *„Burger! Beste Qualität von der Explosion der Spiele.“*
- **First-Run Sprachwahl** DE / EN / BY (auch später in Optionen umstellbar):
- BY → Stimme/Rülps + *„Schulz“*
- EN → *„I drink my garden in the cinema“*
- DE → *„Am deutschen Wesen soll die Welt genesen.“*
- Optionsmenü: Sprache, SFX; Musik-Slider gesperrt laut.
## 1b. Charakterwahl (nur Optik)
> **supersedes** frühere Idee „Mischung aus ganz vielen Spielecharakteren als Spieler“. Stattdessen **eine von vier** festen Figuren wählen. **Nur Look / Idle-Animation** — Stats, Kampf, Quests identisch.
Auswahl nach Sprachwahl / vor oder mit Start (UI TBD). Speichern in Save.
| ID | Name | Look | Idle / Gag |
|----|------|------|------------|
| `flintenbuerger` | **Flintenbürser** | Mensch, Bauer: Stroh im Mund, Kappe, Lederzeug | Klatscht dauernd mit der Hand gegen den eigenen Fuß (bayerisch; Referenz-Video vom User folgt) |
| `stroh_dilos` | **Stroh-Dilos / Kanodilos** | Sehr muskulös | **Augenschappe** (Augenklappe) — Pflicht-Detail |
| `gorilla_zunge` | **Gorilla mit der Zunge** | Gorilla | Zunge hängt **immer** raus |
| `npc` | **NPC** | Ganz normaler Mensch | Absichtlich langweilig / „nur NPC“ |
Billboards: `player_flintenbuerger.png`, `player_stroh_dilos.png`, `player_gorilla_zunge.png`, `player_npc.png` (Platzhalter später). Idle-Frames/Animation für Flintenbürser-Klatscher wenn Art da ist.
## 2. Intro
- Tisch + Konsole.
- Sprecher sanft/episch: *„Du sitzt an deinem Tisch und spielst dein Lieblingsspiel…“*
- Konsole explodiert.
- Sprecher: *„Du musst es schaffen. Du musst es schaffen – sonst kommt der Hongkong.“*
## 3. Village / Hauptwelt (Animal-Crossing-Dorf + Wiese)
- **Eine contiguous Hauptwelt** (`scenes/village.tscn`, `current_scene_id = "village"`): Dorf und Wiese liegen **nebeneinander**, getrennt durch einen **Zaun mit Tor**.
- Verpixelt, kaputt; **random 3D-Häuser** aus `assets/3DModelle/houses/*/` (jedes Laden neu gemischt; **nicht** `massour/`).
- **Masseur-Haus** = Deko `houses/massour/massourhaus.glb`; **Masseur-Kuh** davor (`animals/cow/cow.glb`) — [E] Massage/Secret-Milch **im Dorf** (keine Extra-Szene).
- **Random-Tiere** aus `animals/*/` außer **`cow/`**.
- Tisch/Knopf: `props/table/table.glb`, `props/button/Button.glb` — Knopf klein/unauffällig, [E] → **Reif-Kampf vor Ort** (kein `goto_scene("shoe_boss")`).
- **Zaun + Tor** Richtung Wiese: solange Reif lebt → Tor **zu** (Kollision). Sieg über Reif → Tor **öffnet** (Animation, Kollision aus) → Spieler **läuft** zur Wiese.
- Legacy-IDs `shoe_boss` / `meadow` / `massage_studio` redirecten auf `village`.
- Weiter-Haus im Dorf: [E] → Catscene **erst nach** Schlangen-Massage (sonst Hinweis Knopf/Tor/Wiese).
## 4. Shoe Boss – Schuhmacher Reif (lokal in der Hauptwelt)
- Kampf startet **im Dorf** am Tisch (gleiche Szene), keine Teleport-Arena.
- Normaler Mensch, Stock, Schuh am Schnürsenkel.
- Schreit/ruft: *„Wenn du noch nicht reif bist, muss ich dir einen Schuh schenken!“*
- **Kampf-KI:** verfolgt Spieler, Nahkampf, **wirft Schuhe** (Projectile, ausweichen / zerschlagen möglich).
- Tod durch Schuh → `death_shoe`: *„Da hat dir wohl wer 'nen Schuh geschenkt.“*
- Sieg → **Tonne Tiramisu**; Essen → **10 Minuten zu fett** + Shorts-Stimulation; Flag `reif_defeated` + **Tor zur Wiese öffnet**.
## 5. Meadow (Wiese) — Zone neben dem Dorf
- Teil derselben Hauptwelt (östlich hinter dem Zaun), **kein** Scene-Wechsel und **kein** Exit-Teleport zurück.
- Großteils gemäht; an einer Stelle nicht: **Eisbär** wird von **Schlangenmähdrescher** gewürgt.
- Rettung: Schlangen ins **Inventar** → **zu Fuß zurück** zur Masseur-Kuh im Dorf → Schlange schläft ein.
- Schlange jammert (*verspannt / tut weh*); Dorfbewohner erinnern an Massage.
- Belohnung: Eisbär reißt sich einen **Zahn** aus → Inventar. Zahn = Glitzos schneller tot.
- Lore: Hongkong (später Glitschkönig) verwandelte den Rasenmäher in Schlangen.
- Tod durch Mäher: `death_mower`.
### Glitzos (nur auf der Wiese-Zone)
- Verglitschte Pixelwesen; spawnen wiederholt aus dem Boden.
- **4 Treffer** tot; **4 Treffer am Spieler** = Tod.
- Nach **3 Treffern** am Spieler: verglitscht / langsam.
- Mit **Eisbärzahn**: Spieler braucht nur **2 Stiche**.
- **KI:** jagen den Spieler (nicht nur stehen).
- Außerhalb der **Meadow-AABB/Zone** (nicht ganze Szene): können nicht bleiben → **Pixel-Sprühnebel** und weg.
- Todestext: Quadrat-Emoji `⬜` (`death_glitzo`).
## 6. Masseur-Kuh (im Dorf)
- Masseur = **Kuh** vor dem Masseur-Haus — 3D `animals/cow/cow.glb` (nicht im Random-Tier-Pool).
- Keine separate Studio-Szene; Wiese und Dorf sind **dieselbe Map** — zurücklaufen genügt.
- Option A: Schlange jetzt massieren → Quest.
- **Secret:** erst viel trinken lassen → betrunken → melk sich selbst → **Milch**. Milch trinken = Skip zum **Endboss**.
## 7. Catscene (Katzin / Catscene-Wortwitz)
- Sprecher: Dorf verlassen, Open World wäre zu viel Arbeit → **keine Open World**. Traurig? Egal.
- **Skip versuchen** → Strafe: *„…überspringen, spinnst du?“* + **voller Reset** von vorne (Intro).
## 8. Farm Path (enger Weg, Anti-Open-World)
- Gerade, eng; Weggabelung mit Pfeil nach **links** (Hof).
- **Rechts:** dunkelgrauer Magier zieht zurück / wirft nach links.
- Sofort links → Bauer: brav, gleich gekommen.
- Erst rechts → Bauer holt Magier; Dialog *fast schwarzer / dunkelgrauer Magier* → Magier wütend → **Planet weg** → Spawn im **Weltall/Mond**.
## 9. Farm (Bauernhof)
- Bauer spricht **immer Bayerisch** (unabhängig von Spielsprache).
- Quests: (1) Schweine füttern (2) Kühe melken (3) Hühner sneaken ins Inventar.
- **Urhahn:** mächtig, pickt tot; **10 s Schock** vorm Respawn; Spieler kann sich kaum wehren.
- Hühner → **Lava-Chicken-Farm**.
- Belohnung/Paywall-Satire: *1,99* / **Dresslerpunkte** im Shop (1 Punkt ≈ 1€ Mock).
- Weiter spielen? „Zahl…“ → **Spaß, du darfst weiter** (Pay2Win nur um Reiche anzulocken).
- **Schein der Uralten:** essen = Tod/Ausstieg (*zu verrückt*).
## 10. Dressler-Boss (nach Hof / Paywall)
- Riesenapfel auf Feld; Augen öffnen: *„Dresslauf die Eins!“*
- Mähdrescher von der Seite → **hineinspringen, Fahrer rauswerfen**, Apfel dreschen.
- Drop: **zertresselter Apfel** – Aufschrift *ESSEN NICHT, außer du willst durchspielen* → Essen = Teleport Endboss.
- Boss kommentiert unkreativen Weg.
## 11. Moon
- Käseverkäufer stellen Tische → **Käsekatapulte** (verschimmelt) → Mund treffen = Tod.
- **Käse erstechen** (nicht Verkäufer) → sterben vor Trauer.
- **Mondschwert** im Stein → Käseverkäufer/Minis one-hit (viele).
- Mondforscher: Sonnenbrille für Dresslerpunkt → **Spaß, gratis**.
- **Fake Bowser** hält Huhn gefangen (Hochzeit mit Hof-Huhn → **Hochzeitsei**).
- Kampf: rollt zur Kugel; **3 Hämmer** raten; falscher Hammer = frisst dich; richtige Kugeln einschlagen = Sieg.
- Hochzeitsei werfen = **Whiff** (Fortnite-artig) → Flug zum Endboss.
## 12. Final Boss – Glitschkönig (ex „Hongkong“)
- Epische Musik (TBD).
- Vor Kampf: alle Charaktere: Hongkong war **Prank** → echt **Glitschkönig**; Belohnung **Banane** (heilen) + **Wartchen** (Kampfitem).
- Riesiger Pixelhaufen; spawnt **Quirxels** (fliegende Vierecke, die schießen).
- Schlagen → teilt sich wie Minecraft-Schleim; letzter Rest **flieht**; zerschlagen → fliegt weg: *„Ich werde wiederkommen!“*
- Eisbär (ein Zahn weniger): Welt gerettet, aber wütend wegen Zahnarztkosten → **schlechtes Gewissen**.
## 13. End (Dorf)
- Wieder AC-Dorf; Haus bauen möglich.
- Dorfbewohner wütend (Zahnarzt) → **kein Happy End**.
- Extra-Quest **Zahnionär**: Zahnarzt überfallen, Zähne klauen (Währung = Zähne) → Haus-Stuff kaufen.
## 14. Death Screen
- Schwarz, wechselt jede Sekunde bunt (blinkt).
- Alle **10 s** riesiger Totenkopf.
- Todesursachen-Texte (Mäher, Schuh, Glitzo-⬜, Käse, Bowser, Schein, …).
- Button **Wiederbeleben**; **Nein** = trotzdem revive; **Ja** = Spiel beenden → Title (Satire).
## 15. Pay-to-Win / Shop
- Dresslerpunkt = Mock-Euro; Shop in Optionen.
- Paywall-Texte immer mit Satire-Auflösung „Spaß, du darfst weiter“.
## 16. Kampf-System (technisch)
- Spieler: Third-Person, Kamera-relativ, Angriff Nahkampf.
- Gegner: **Chase + Melee-AI** (`HittableEntity` / AI-Exports), außer passive Props.
- Waffen-Mods: Zahn (2 dmg), Mondschwert (one-hit Käse-Welt), Wartchen (stärker vs Final).
- Status: Fett, Glitch-Slow, Urhahn-Schock.
- Art-Skalierung: **`SpriteFit`** + **`data/model_scales.json`** (Editor: `scenes/dev/scale_lab.tscn`).
## 17. Szenen-Flow (Default)
Title → Intro → **Village-Hauptwelt** (Dorf ↔ Reif lokal ↔ Tor ↔ Wiese zu Fuß ↔ Kuh) → Catscene → Farm Path → Farm **oder** Moon → Dressler → Moon → Final → End (+ Death jederzeit).
*Kein* Scene-Teleport mehr für Village ↔ Shoe ↔ Meadow; Catscene und spätere Level bleiben eigene Szenen.
---
*Zuletzt diktiert/aktualisiert: 2026-09-15 (contiguous overworld). Implementierung muss diese Spec nachziehen; Lücken = Bugs, nicht Feature.*