# 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). - **Taunt: ja** — Radar-Selbst-Ping (E) **plus akustisches Taunt**: bei jedem Ping (Sweep oder Selbst-Ping) spielt auf **allen** Clients ein positionsgebundener Taunt-Sound an jedem gepingten Hider — das „erzwungene" Taunten kommt also mit jedem Radar-Sweep automatisch > **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 - [x] **Radiales Posen-Menü** mit Hotkeys (bei ≤ 2 Posen direktes Durchschalten) + **gerenderte Pose-Icons** (eigene `Pose Icon`-Szene mit Capture-Pipeline, Toon-Shader mit Outline) ### 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] **Kugel-Brush** (3D-Distanz statt Box) mit **Rückseiten-Abweisung** über die Flächen-Normale (`brushMaxSurfaceAngle`) — kein Durchmalen auf die Gegenseite dünner Geometrie, kein Übergreifen an Nähten - [x] Pinsel: **Farbe**, **Größe**, Masken, **Spray**, Texturauflösung, Grundfarbe - [x] Shader: `MeshPaintBrush.shader`, `MeshPaintDilate.shader`, Preview-Shader (Vorschau matcht die echte Landung) - [x] **Farbwähler-UI** (HSV-Color-Picker) statt fester Inspector-Farbe - [x] **Pipette / Eyedropper**: nimmt Albedo, Metallic/Smoothness und Emission aus der Umgebung auf — auch von den Custom-/AVP-Shadern - [x] Weitere Brushes (Größe per Hotkey/Slider, Masken/Muster) - [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, **Höhe** (Occlusion-Kanal mit Relief-Normal- und Parallax-Shading) und **Emission** (mit Intensitäts-Regler) — pro Kanal zuschaltbar im Paint-HUD - [x] **Camo-/Material-Regler**: **Brightness**, **Saturation**, **Half Lambert**, **Specular Damp** sowie Occlusion-/Normal-/Parallax-Intensität — netz-repliziert; Laufzeit-Werte überleben den Respawn, werden aber bewusst **nicht** auf Disk persistiert (Session startet auf Authoring-Defaults) - [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, Wechsel über das Overview-Menü) - [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] **Overview-/Escape-Menü** (`OverviewMenu`, Esc/Tab): Icon-Buttons mit Hotkey-Hints, Taunt-Button, Match-Results-Modal, kontextsensitiver Disconnect - [x] **FrameRateLimiter** (FPS-Begrenzung, VSync-Handling) - [x] **Settings-Persistenz** (`GameSettings`): Master-Volume- & Maus-Sensitivitäts-Slider; Paint-HUD-Layout/Brush-Werte persistent (`PaintHud.json`) - [x] **SkyboxEnvironmentUpdater**: Sky-Reflexion + Ambient ohne gebackenes LightingData (Custom-Cubemap-Render, Intensity-Regler, separates Reflexions-Sky-Material möglich) - [x] **Rendering**: URP **Deferred+** mit **HTrace WSGI** Global Illumination (in der Lobby automatisch deaktiviert, `HTraceLobbyToggle`); handgeschriebene **URP-Ports der AVP/ArchViz-Shader** (POM, Glass, Velvet, Curtains, DoubleSided, Nature, Vegetation) inkl. GBuffer-/Deferred+-Fixes und HeroCutout-Support - [x] **Concealment-Tooling**: `ConcealmentMeter` (volumetrische „wie tief steckt der Hider in Geometrie"-Messung) + Collider-Baker (`ConcealmentColliderBaker`, VHACD, Skinned) - [x] **Asset-Importer** (Editor): **Poly-Haven-Importer** (Texturen **und** Modelle — Katalog-Browser mit Thumbnail-Grid, PBR-Download, automatisches URP/Lit-Material inkl. Roughness→Smoothness-Repack + ARM-Fallback, FBX-Material-Remap) und **ambientCG-Importer** auf geteiltem `WebAssets`-Framework - [x] Weitere Editor-Tools: Pose-Icon-Capture (`PoseIconStage`), `PictureFrameBuilder`, Normal-Map-Generator - [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`, 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] **Akustisches Taunt/Pfeifen**: bei jedem Radar-Ping (Sweep und Selbst-Ping) spielt auf **allen** Clients (Hunter, Hider, Zuschauer) ein 3D-Taunt-Sound an der Position jedes gepingten Hiders (Kopfhöhe, bei mehreren Treffern zeitlich gestaffelt) — Blips bekommen nur Hunter, den Sound hört jeder - [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] **Ergebnis-Screen + Sieg-Auswertung** (`MatchResultScreen`, uGUI `MatchResultCanvas`): der Server friert bei Seek-Ende das Ergebnis ein (Hunter gewinnen bei „alle gefunden/konvertiert", Hider bei Timeout mit Überlebendem) und repliziert es an alle Clients (inkl. Late-Joiner); die Auflösung zeigt Sieger-Banner + Spielerliste (Status Gefunden/Konvertiert/Überlebt, Überlebenszeit, gefunden von wem) - [x] **Kamera-Occlusion-Fade** (`HeroCutout`): kegelförmiger weicher Cut (radial + axial), konstante Bildschirm-Lochgröße, raycast-getriggert --- ## 4. Checkliste — Was noch fehlt ❌ ### 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**: Feinschliff — Match-HUD, Ergebnis-Screen, Paint-HUD (inkl. Library), Session-Browser und Overview-/Escape-Menü sind bereits uGUI - [ ] **Audio**: SFX (Schritte, Klettern, Schuss), Musik — Taunt-Sound existiert bereits - [ ] **Beleuchtung / Art-Direction** finalisieren (HTrace WSGI GI + Deferred+ und Sky-Reflexion/Ambient via `SkyboxEnvironmentUpdater` stehen; Material-/Map-Look wird gerade mit den Poly-Haven-/ambientCG-Sets ausgebaut) --- ## 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, Ergebnis-Screen). Die nächsten Schritte machen ihn **rund** und **präsentabel**: 1. **Map-/Level-Design** vertiefen: mehr Verstecke und farblich abwechslungsreiche Oberflächen, damit die Tarnung wirklich zählt. 2. **Politur:** Audio (Schritte/Schuss; Taunt steht bereits), Art-Direction/Beleuchtung. 3. **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.