Files
chameleon/Docs/GAME_DESIGN.md
T
adminandClaude Fable 5 755fffa997 Docs: bring GAME_DESIGN.md up to date with current feature set
Add shipped features (session browser, radar pings + self-ping taunt,
X-ray reveal, conversion statues, match start trigger, fur shells, PBR
paint channels + camo knobs + painting library, settings persistence,
SkyboxEnvironmentUpdater, volumetric climb probes), correct stale claims
(MatchHud is uGUI, matchmaking exists), reprioritize next steps.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 08:29:25 +02:00

202 lines
12 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Chameleon — Game Design & Fortschritt
> Lebendes Dokument. Checkliste, was wir schon haben und was noch fehlt.
> Vorbild: **Meccha Chameleon** — aber **kein 1:1-Klon**. Wir picken die Mechaniken,
> die uns gefallen, und lassen den Rest weg oder machen es anders.
---
## 1. Referenz: Was ist Meccha Chameleon?
Online-PvP-Versteckspiel (Hide & Seek), 2–10 Spieler. Kurzüberblick der Mechaniken
(Quellen: Wikipedia, Steam-Store-Seite, Stand der Recherche):
- **Hider:** Bemalt seinen anfangs **reinweißen** Chamäleon-Körper, um mit der Umgebung
zu verschmelzen. Werkzeuge: **Farbrad** + **Pipette (Eyedropper)** zum Aufnehmen von
Umgebungsfarben. Zusätzlich **Posen** (z. B. zusammenrollen, hinlegen), um die Silhouette
an Objekte anzupassen. „Versteck, Pose und vor allem die malerische Geschicklichkeit" sind
der Schlüssel.
- **Seeker/Hunter:** Muss **alle Hider im Zeitlimit** finden. Hider können „taunten"
(pfeifen), um sich verräterisch bemerkbar zu machen; optional **erzwungenes Taunting**
in Intervallen.
- **Modi:** Standard-Hide-and-Seek, **Infection** (Gefangene wechseln die Seite), u. a.
- **Struktur:** Runden mit Zeitlimit, Sieg der Seeker, wenn alle gefunden wurden.
- Empfohlen **2–10 Spieler**, reines **Online-PvP**. Keine nennenswerten
Progressions-/Kosmetik-Systeme in der Store-Beschreibung erwähnt.
---
## 2. Unsere Vision (Abgrenzung)
- **Behalten / Stärke ausbauen:** das **Bemalen** als Kern-Mechanik (haben wir bereits,
sogar nahtfreies Mesh-Painting auf 3D) + **Bewegung über das Gewöhnliche hinaus**
(Wand-Klettern/Mantle ist bei uns schon drin und geht über Meccha Chameleon hinaus).
- **Entschieden:**
- **Reines Multiplayer-PvP.** Kein Singleplayer/PvE, keine Seeker-KI — Hider und Seeker
sind immer menschliche Spieler.
- **Keine automatische Tarnungs-Bewertung.** Wie gut eine Bemalung tarnt, entscheidet
allein das Auge des Seekers — das Spiel misst/wertet die Tarnung nicht.
- **Entschieden (seit letzter Fassung):**
- **Posen-System: ja** — ist umgesetzt (Silhouette anpassen).
- **Infection-artiger Modus: ja** — als **Conversion-Modus** umgesetzt (getroffener Hider
wird zum Hunter, statt nur „gefunden" zu sein).
- **Noch offen / Geschmacksfrage:**
- Taunt: der **Radar-Selbst-Ping** (E) ist umgesetzt (Hider verrät sich freiwillig auf dem
Hunter-Radar); ob zusätzlich ein **akustisches Pfeifen** (ggf. erzwungen) kommt, ist offen
> **TODO (User):** Hier eintragen, was dir bei Meccha Chameleon gefällt und was nicht — danach
> schärfen wir Scope & Reihenfolge.
---
## 3. Checkliste — Was wir schon haben ✅
### Charakter & Bewegung
- [x] Third-Person **CharacterController** mit WASD-Bewegung (kamerarelativ)
- [x] **Sprung** + Schwerkraft
- [x] **Sprint** (Shift halten, eigener Speed-Multiplikator)
- [x] **Beschleunigung/Entschleunigung** (sanfter Anlauf/Ausrollen statt Snap)
- [x] **Slope-Sliding** (Abrutschen von zu steilen Flächen/Kanten)
- [x] **Wall-Climb**: Wände/Decken hochklettern (wand-relative Steuerung:
W ran/hoch, S weg+ablösen, A/D seitlich); **volumetrische SphereCast-Probes** —
hält auch dünne Bretter, weiche Kontakt-Normale an Kanten/Rundungen (kein Flackern)
- [x] **Mantle / Top-Out**: über die Oberkante ziehen statt droppen, an steilen
Schrägen mit Aufwärts-Hop drüber (kein Kanten-Flackern)
- [x] **Animator-Anbindung**: `Running`-Bool wird bei Bodenbewegung gesetzt
### Posen & Charakter
- [x] **Posen-System** (zusammenrollen, hinlegen) zum Anpassen der Silhouette
- [x] Finales Charakter-Modell + Rig
- [x] Animationen (Klettern, Springen, Posen) — **Laufen** bereits über den
`Running`-Animator-Bool angebunden
- [x] **Fall-Animation**: eigene Pose-Animation beim Fallen (Abwärts-Velocity über
Schwellenwert, nicht am Boden; pro Pose authorbar mit Idle-Fallback)
- [x] **Fell** (`FurShellRenderer`): Shell-basiertes Fur auf dem Body, färbt mit der
Bemalung mit
### Bemalen (Kern der Camouflage-Idee)
- [x] **MeshPainter**: nahtfreies Bemalen direkt auf dem 3D-Mesh des Charakters
- [x] **GPU- und CPU-Pfad**, umschaltbar; Edge-Padding/Dilation gegen Naht-Linien
- [x] Pinsel: **Farbe**, **Größe**, Texturauflösung, Grundfarbe (Inspector)
- [x] Shader: `MeshPaintBrush.shader`, `MeshPaintDilate.shader`
- [x] **Farbwähler-UI** (Farbrad/Color-Picker) statt fester Inspector-Farbe
- [x] **Pipette / Eyedropper**: Umgebungsfarbe per Klick aufnehmen
- [x] Weitere Brushes (Größe per Hotkey/Slider, evtl. Muster/Texturen)
- [x] **Undo** der Bemalung (Checkpoint-basiert, auch über das Netzwerk) — ein
separates Komplett-**Reset** ist bewusst nicht nötig (Undo deckt das ab)
- [x] **PBR-Kanäle malbar**: Metallic/Smoothness und **Höhe** (Occlusion-Kanal mit
Relief-Normal- und Parallax-Shading) — pro Kanal zuschaltbar im Paint-HUD
- [x] **Camo-Regler**: **Brightness** (generelle Exposure) + **Saturation**
(0 = neutral, −1 = grau) — persistent und netz-repliziert
- [x] **Painting-Library**: Bemalungen benannt **speichern/laden/löschen** (versionierte
Slots inkl. aller Regler; Laden wird an Mitspieler re-broadcastet)
### Kamera
- [x] **Cinemachine** 3.1.7 Third-Person **Orbit-Kamera** (Maus)
- [x] Zoom (Mausrad, **interpoliert**), Kollisionsvermeidung (**Deoccluder**)
- [x] **Geglättete Orbit-Rotation** (Tiefpass auf das Maus-Delta)
- [x] Cursor-Lock/-Logik je nach Modus
### Spiel-Struktur / Tooling
- [x] **GameModeManager** (erweiterbare State-Machine, Tab schaltet um)
- [x] **Player-Control-Modus** (Laufen + Kamera per Maus)
- [x] **Paint-Modus** (kein Movement, Linksklick malt, Rechtsklick hält Kamera-Dreh)
- [x] **First-Person-Modus** (Hunter: FP-Kamera + Schießen per Linksklick-Raycast)
- [x] **Free-Cam / Spectator-Modus** (gefundene/zuschauende Spieler beobachten frei)
- [x] **FrameRateLimiter** (FPS-Begrenzung, VSync-Handling)
- [x] **Settings-Persistenz** (`GameSettings`): Master-Volume- & Maus-Sensitivitäts-Slider
- [x] **SkyboxEnvironmentUpdater**: Sky-Reflexion + Ambient ohne gebackenes LightingData
(Custom-Cubemap-Render, Intensity-Regler, separates Reflexions-Sky-Material möglich)
- [x] **Concealment-Tooling**: `ConcealmentMeter` (volumetrische „wie tief steckt der Hider
in Geometrie"-Messung) + Collider-Baker (`ConcealmentColliderBaker`, VHACD, Skinned)
- [x] Git initialisiert (Unity-`.gitignore` + `.gitattributes`), englische Commits
### Multiplayer (reines Online-PvP)
- [x] **Netcode for GameObjects** (NGO 2.13) als Netzwerk-Stack
- [x] **Host/Join**, Lobby-Szene + Match-Szene (`The Room`)
- [x] **Session-Browser** (UGS Sessions, `OnlineSessionBrowserUI`): Host / Liste
aktualisieren / Join per Klick; im Spiel als **Esc-Pause-Overlay** mit
kontextsensitivem Disconnect (Exit / Back-to-Lobby / Disconnect)
- [x] **Spieler-Synchronisation** (NetworkTransform, owner-authoritativ)
- [x] **Bemalung über das Netzwerk** (`PlayerPaintSync`: ServerRpc/ClientRpc/NetworkVariable,
Late-Join-Replay der Paint-Stamps)
- [x] **Rollen-Prefab-Varianten**: Hunter (groß, Sprint ×2, FP+Schießen) / Hider (klein)
- [x] **Spawn-Areas** über getaggte (konvexe) Collider: `SpawnArea`, rollen­spezifisch
`HunterSpawnArea` / `HiderSpawnArea` mit Fallback-Kette (Rolle → `SpawnArea` → Ring);
zufälliges Streuen per Rejection-Sampling innerhalb der Form
### Match-Loop (Hide & Seek)
- [x] **Server-autoritative State-Machine** (`MatchManager`, repliziert via Named Messages):
**Verstecken → Suchen → Auflösung → zurück zur Lobby**
- [x] **Pro-Phase-Timer** als Inspector-Properties in Sekunden (`hideDuration`,
`seekDuration`, `resolveDuration`)
- [x] **Rollenabhängige Sichtbarkeit** (jeder Client rechnet lokal aus Rolle/Phase/Modus):
Hider-Meshes werden je nach Modus/Phase für Hunter (bzw. andere Hider) ausgeblendet
- [x] **Hunter-Schießen**: Raycast aus FP-Kameramitte, Cooldown (`shootCooldown`),
Reichweite (`shootRange`), server-validierter Treffer
- [x] **Found-State** (`NetworkVariable<bool>`, server-write): getroffener Hider →
Mesh bei allen aus → nur noch **Spectator-Freecam**
- [x] **Früh-Ende der Suchphase**, wenn alle Hider gefunden/konvertiert sind
- [x] **Match-Start per Trigger-Zone** in der Lobby (`StartMatchTrigger`): die Match-Authority
stellt sich in den Bereich; server-seitiger Overlap-Poll (funktioniert auch für
Remote-Authority ohne Rigidbody)
- [x] **Radar-Pings**: Intervall-Sweep in der Suchphase — jeder un-gefundene Hider blippt
auf dem **Hunter-Radar** (Overlay-Radar mit Fade); HUD zeigt Countdown zum nächsten Sweep
- [x] **Selbst-Ping / Taunt** (E): Hider verrät sich freiwillig mit einem sofortigen Radar-Blip
- [x] **X-Ray-Reveal** (Umriss-Glow durch Wände): in der Auflösung, als kurzer Schuss-Flash
und als **Embedded-Schutz** — steckt ein Hider tiefer als die Schwelle in Geometrie
(`ConcealmentMeter`), wird er für alle enthüllt (Anti-Cheese)
- [x] **Conversion-Statuen** (`MatchStatue`): eingefrorene, bemalte Statue jedes konvertierten
Hiders (Ort/Pose/Bemalung) erscheint zur Auflösung
- [x] **Zwei Match-Modi** (`matchMode`, Inspector):
- **Classic** — getroffener Hider wird „gefunden" (Freecam)
- **Conversion** (Infection) — Hider blind füreinander; getroffener Hider **wird Hunter**
(echte Hunter-Variante, **an Ort und Stelle**, sauberes Reveal via `conversionRevealDelay`)
- [x] **Match-HUD** (`MatchHud`, uGUI `MatchHudCanvas`): Phase + Countdown, Rollen-Zähler,
Hunter-Crosshair, Radar-Sweep-Countdown
- [x] **Kamera-Occlusion-Fade** (`HeroCutout`): kegelförmiger weicher Cut (radial + axial),
konstante Bildschirm-Lochgröße, raycast-getriggert
---
## 4. Checkliste — Was noch fehlt ❌
### Spielablauf (Hide & Seek)
- [ ] **Ergebnis-Screen** in der Auflösung (wer hat gewonnen, wer wurde gefunden/konvertiert) —
Conversion-Statuen + X-Ray-Reveal sind da, eine explizite Auswertung/Anzeige fehlt
- [ ] **Explizite Sieg-/Niederlage-Auswertung** (Hunter gewinnt bei „alle gefunden",
Hider gewinnen bei Timeout) — derzeit nur impliziter Phasenwechsel
- [ ] **Akustisches Taunt/Pfeifen** (optional, ggf. erzwungen) — der Radar-Selbst-Ping
deckt die Mechanik bereits ab
### Multiplayer
- [ ] **Matchmaking-Ausbau**: Join-Codes / Relay / private Sessions
(Session-Browser mit Host/Join existiert bereits)
- [ ] Robustheit: Reconnect, Host-Migration, Disconnect-Edge-Cases im Match
### Welt & Präsentation
- [ ] **Maps / Level-Design** ausbauen (mehr Verstecke, abwechslungsreiche
Oberflächen/Farben) — Szenen `Lobby`, `The Room`, `Test Map` existieren als Basis
- [ ] **UI-Ausbau**: Menüs + Ergebnis-Screen — Match-HUD, Paint-HUD (inkl. Library)
und Session-Browser sind bereits uGUI
- [ ] **Audio**: SFX (Schritte, Klettern, Schuss, ggf. Pfeifen), Musik
- [ ] **Beleuchtung / Art-Direction** finalisieren (Sky-Reflexion/Ambient via
`SkyboxEnvironmentUpdater` und erste Shadow-Passes sind drin)
---
## 5. Vorgeschlagene nächste Schritte (Reihenfolge zur Diskussion)
Der Kern-Loop steht (Netcode, Session-Browser, Rollen, Phasen, beide Modi, Schießen/Konversion,
Radar, X-Ray-Reveal, Statuen). Die nächsten Schritte machen ihn **rund** und **präsentabel**:
1. **Match-Abschluss ausbauen:** echte Sieg-/Niederlage-Auswertung + Ergebnis-Screen in der
Auflösungs-Phase (Statuen + Reveal sind da, die Auswertung fehlt).
2. **Map-/Level-Design** vertiefen: mehr Verstecke und farblich abwechslungsreiche
Oberflächen, damit die Tarnung wirklich zählt.
3. **Politur:** Audio (Schritte/Schuss, optional Pfeifen), Art-Direction/Beleuchtung.
4. **Robustheit:** Reconnect / Host-Migration / Disconnect-Edge-Cases.
> Reihenfolge bewusst so, dass aus dem funktionierenden Prototyp ein **fühlbar fertiges**
> Match wird, bevor wir Breite (mehr Modi/Maps) draufsetzen.