Files
Cozypaw-Hospital/CLAUDE.md
2026-04-17 10:23:48 +02:00

7.8 KiB

CLAUDE.md — Cozypaw Hospital

Dieses Dokument ist der Primär-Kontext für Claude Code. Beim Start lesen und die hier dokumentierten Konventionen einhalten.

Projekt in einem Satz

Cozypaw Hospital ist ein werbefreies 2D-Sandbox-Spiel für Kinder (3+) im Stil von Yasa Pets Hospital — ein dreistöckiges Tier-Krankenhaus mit Häschen und Kätzchen als digitale Puppenstube, gebaut in Godot 4 für Android und iOS.

Aktueller Status

  • Phase: Sprint 0 (Setup)
  • Repo: git.race-cave.cloud/steven/Cozypaw-Hospital (self-hosted Gitea)
  • Godot-Projekt: noch nicht initialisiert
  • Nächster Meilenstein: Godot 4 installieren, Android-Export einrichten, Proof-of-Concept-Raum

Der vollständige 16-Wochen-Sprintplan liegt in docs/development-plan.md. Immer dort nachschlagen, bevor neue Features beschlossen werden.

Tech-Stack (fix)

  • Engine: Godot 4.x (keine Unity, keine Alternativen mehr zur Debatte)
  • Sprache: GDScript (statisch typisiert, wo möglich)
  • Zielplattformen: Android zuerst, iOS später
  • VCS: Git mit self-hosted Gitea
  • Asset-Strategie: Hybrid — Kinder malen Helden-Figuren, Freelancer macht Hintergründe

Nicht-verhandelbare Produkt-Prinzipien

Diese Punkte sind Teil der Produkt-DNA. Niemals vorschlagen, davon abzuweichen — auch nicht "nur für Testing" oder "vorübergehend":

  1. Keine Werbung. Keine Ad-SDKs, keine Rewarded Ads, kein AdMob, nichts.
  2. Keine Datensammlung. Keine Analytics (Firebase, GA, Sentry, etc.), kein Tracking, keine Telemetrie, keine Crash-Reports ohne Opt-in.
  3. Offline-first. Das Spiel muss vollständig ohne Internetverbindung funktionieren.
  4. Keine In-App-Käufe. Keine Premium-Features, keine Diamonds, kein Gacha.
  5. Keine externen Links ohne Parental Gate (derzeit: gar keine).
  6. Keine "Gift"-Mechaniken (im Original: grüne Flaschen, die Tiere krank machen). Alle Medikamente sind neutral/positiv.
  7. Sandbox-Charakter. Kein Scheitern, keine Zeitlimits, kein Scoring, keine Achievements.
  8. COPPA/DSGVO-konform. Play-Store-Data-Safety: "Keine Daten erhoben" — und das auch tatsächlich einhalten.

Architektur-Überblick

Scene-Hierarchie (geplant)

Main (Node2D)
├── Hospital (Node2D)
│   ├── Floor0 — Empfang, GiftShop, Restaurant, Emergency
│   ├── Floor1 — XRay, Pharmacy, Lab, PatientRooms
│   └── Floor2 — Ultrasound, DeliveryRoom, Nursery
├── Home (Node2D) — GardenParty
├── Characters (Autoload)
└── UI (CanvasLayer)

Core Systems (als Autoloads)

  • GameState — globaler Zustand, Positionen aller Figuren/Objekte
  • SaveManager — JSON-Persistenz in user://savegame.json, Auto-Save nach jeder Interaktion
  • AudioManager — Musik- und SFX-Steuerung mit Cross-Fade zwischen Räumen
  • InputManager — Touch/Drag-Abstraktion

Datenmodell-Konvention

Character- und Object-States immer als Resource-Subklassen (nicht als dict), damit Godot-Editor damit arbeiten kann und Serialisierung sauber läuft.

Verzeichnisstruktur

cozypaw-hospital/
├── project.godot
├── scenes/
│   ├── main/
│   ├── rooms/{floor0,floor1,floor2,home}/
│   ├── characters/
│   ├── objects/
│   └── ui/
├── scripts/
│   ├── autoload/
│   ├── characters/
│   ├── objects/
│   └── systems/
├── assets/
│   ├── sprites/{characters,rooms,objects,ui}/
│   ├── audio/{music,sfx,voices}/
│   └── fonts/
├── localization/
├── addons/
├── docs/
└── builds/   # nicht im Git

Konventionen

Commits (Conventional Commits)

  • feat: neues Feature
  • fix: Bugfix
  • refactor: Refactoring ohne Funktionsänderung
  • assets: Asset-Updates (Sprites, Sounds)
  • docs: Dokumentation
  • chore: Build, Config, Tooling

Mit Scope: feat(reception): add waiting number system

Commit-Messages in Englisch (auch wenn die Doku auf Deutsch ist).

Branching

  • main — stabiler Stand, releasebar
  • develop — aktive Entwicklung
  • feature/<name> — einzelne Features
  • sprint/<nr>-<name> — Sprint-Branches

Keine direkten Pushes auf main. Merges aus develop nur, wenn Build grün und auf echtem Tablet getestet.

GDScript Code-Style

  • Typisierung: Statische Typen überall wo möglich (var x: int = 5)
  • Nomenklatur: snake_case für Variablen/Funktionen, PascalCase für Klassen und Scenes, SCREAMING_SNAKE_CASE für Konstanten
  • Signals: Zukunftsform-Verben: character_picked_up, room_entered
  • Private Member: Unterstrich-Präfix: _internal_state

Dokumentation

Stevens Präferenz (aus bisheriger Arbeit): Keine Inline-Kommentare im Code. Stattdessen konsolidierte Dokumentation als Header-Block am Dateianfang. Code soll selbsterklärend sein durch gute Namen. Diese Regel gilt auch für GDScript-Dateien.

Ausnahme: Komplexe mathematische Berechnungen oder nicht-offensichtliche Workarounds dürfen einen einzigen Kommentar haben, der das Warum erklärt (nicht das Was).

Tests

Für ein Spiel dieser Größe keine Unit-Tests nötig. Stattdessen:

  • Scene-Tests manuell auf echtem Android-Tablet pro Sprint
  • Smoke-Test-Checkliste in docs/smoke-tests.md (wird im Laufe der Entwicklung gepflegt)
  • Kinder als UAT — wöchentliches Zeigen der Builds

UI/UX-Regeln

  • Touch-Targets: Minimum 48dp, besser 64dp
  • Keine Text-UI für Spiel-Interaktionen (Kinder unter 6 Jahren lesen nicht). Icons, Symbole, Farben.
  • Zurück-Button immer sichtbar, groß und an festem Platz
  • Musik-Default: 60%, nicht 100%
  • Idle-Animationen: Jede Figur atmet/blinzelt auch im Stand
  • Sound-Feedback für jede Interaktion (Ploppen, Quietschen, etc.)

Out of Scope (bewusst nicht gemacht)

  • Multiplayer, Online-Features, Cloud-Saves
  • Prozedurale Generierung
  • Physik-Engine (nicht nötig für Puppenhaus-Interaktionen)
  • Character-Editor / Customization
  • Level-System, Achievements, Scoring
  • Tutorial (außer dezenter Hinweis beim allerersten Start)
  • Rechtschreibung/Text-Eingabe durch Kinder

Wie Claude Code arbeiten soll

Proaktiv sein

  • Bei Godot-spezifischen Fragen: Godot-4-Docs konsultieren, nicht Godot-3-Patterns nutzen (Syntax hat sich geändert).
  • Bei neuen Scenes: An der oben definierten Verzeichnisstruktur orientieren.
  • Code immer mit statischen Typen schreiben.

Keine Überraschungen

  • Keine neuen Dependencies / Addons hinzufügen ohne explizite Rücksprache.
  • Keine Änderungen am .gitignore, README.md oder dieser Datei ohne explizite Aufforderung.
  • Keine automatischen Commits. Stevens Workflow: Er committed selbst nach Review.

Bei Unsicherheit nachfragen

  • Wenn unklar, ob ein Feature in den Sandbox-Charakter passt → fragen.
  • Wenn unklar, wie etwas visuell/interaktiv funktionieren soll → fragen, nicht raten.

Sprach-Konvention

  • Code & Commits: Englisch
  • Dokumentation & Gespräch: Deutsch
  • Spiel-Inhalte (UI, ggf. Texte): Später lokalisiert — primär Deutsch, dann Englisch

Referenz-Dokumente

  • docs/development-plan.md — 16-Wochen-Sprintplan mit Details
  • README.md — öffentliche Projektbeschreibung
  • docs/ — alle weiteren Design-Docs (werden im Laufe der Sprints ergänzt)

Kontext zum Entwickler (Steven)

  • Java-Entwickler, kommt aus dem Backend/Enterprise-Umfeld
  • Präferiert clean, concise technical work — keine Verbose-Erklärungen
  • Kommuniziert primär auf Deutsch
  • Baut das Spiel für seine eigenen Kinder (nicht für einen kommerziellen Launch)
  • Hat parallel laufende Projekte (All-in Creative Print, RaceCave) — dieses Projekt ist Abendbeschäftigung, nicht Vollzeit
  • Arbeitet gerne mit klaren Conventions und durchdachter Struktur statt Ad-hoc-Lösungen

Versions-Log dieser Datei

  • 2026-04-17: Initiale Version, Sprint 0 gestartet