Undo is implemented (checkpoint-based, replicated); a separate full reset is intentionally unnecessary since undo covers it. Drop the stale open item and polish note. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
171 lines
9.1 KiB
Markdown
171 lines
9.1 KiB
Markdown
# 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/Pfeifen ja/nein? (noch nicht umgesetzt)
|
||
|
||
> **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)
|
||
- [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)
|
||
|
||
### 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)
|
||
|
||
### 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] 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] **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`, rollenspezifisch
|
||
`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] **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] **Platzhalter-HUD** (`MatchHud`, OnGUI): Phasenname + Countdown + Hunter-Crosshair
|
||
- [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)
|
||
- [ ] **Auflösungs-Phase mit Inhalt**: aktuell läuft nur der Countdown; noch kein
|
||
**Ergebnis-Screen** (wer hat gewonnen, wer wurde gefunden/konvertiert)
|
||
- [ ] **Explizite Sieg-/Niederlage-Auswertung** (Hunter gewinnt bei „alle gefunden",
|
||
Hider gewinnen bei Timeout) — derzeit nur impliziter Phasenwechsel
|
||
- [ ] **Taunt/Pfeifen** (optional, ggf. erzwungen) — noch offen
|
||
|
||
### Multiplayer
|
||
- [ ] **Matchmaking** über reines Host-Join hinaus (Lobby-Browser / Codes / Relay)
|
||
- [ ] 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
|
||
- [ ] **Echtes UI/HUD** statt des OnGUI-Platzhalters: Timer, Rollen-/Phasen-Anzeige,
|
||
Farbwähler, Menüs, Ergebnis-Screen (uGUI-Canvas)
|
||
- [ ] **Audio**: SFX (Schritte, Klettern, Schuss, ggf. Pfeifen), Musik
|
||
- [ ] **Beleuchtung / Art-Direction** finalisieren (erste Reflection-/Shadow-Passes sind drin)
|
||
|
||
---
|
||
|
||
## 5. Vorgeschlagene nächste Schritte (Reihenfolge zur Diskussion)
|
||
|
||
Der Kern-Loop steht (Netcode, Rollen, Phasen, beide Modi, Schießen/Konversion). 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 (statt nur Countdown → Lobby).
|
||
2. **Echtes HUD** (uGUI) statt des `MatchHud`-OnGUI-Platzhalters: Timer, Rolle/Phase,
|
||
Treffer-/Konversions-Feedback.
|
||
3. **Map-/Level-Design** vertiefen: mehr Verstecke und farblich abwechslungsreiche
|
||
Oberflächen, damit die Tarnung wirklich zählt.
|
||
4. **Politur:** Audio (Schritte/Schuss), Art-Direction/Beleuchtung,
|
||
optional Taunt-System.
|
||
|
||
> Reihenfolge bewusst so, dass aus dem funktionierenden Prototyp ein **fühlbar fertiges**
|
||
> Match wird, bevor wir Breite (mehr Modi/Maps) draufsetzen.
|