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":
- Keine Werbung. Keine Ad-SDKs, keine Rewarded Ads, kein AdMob, nichts.
- Keine Datensammlung. Keine Analytics (Firebase, GA, Sentry, etc.), kein Tracking, keine Telemetrie, keine Crash-Reports ohne Opt-in.
- Offline-first. Das Spiel muss vollständig ohne Internetverbindung funktionieren.
- Keine In-App-Käufe. Keine Premium-Features, keine Diamonds, kein Gacha.
- Keine externen Links ohne Parental Gate (derzeit: gar keine).
- Keine "Gift"-Mechaniken (im Original: grüne Flaschen, die Tiere krank machen). Alle Medikamente sind neutral/positiv.
- Sandbox-Charakter. Kein Scheitern, keine Zeitlimits, kein Scoring, keine Achievements.
- 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/ObjekteSaveManager— JSON-Persistenz inuser://savegame.json, Auto-Save nach jeder InteraktionAudioManager— Musik- und SFX-Steuerung mit Cross-Fade zwischen RäumenInputManager— 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 Featurefix:Bugfixrefactor:Refactoring ohne Funktionsänderungassets:Asset-Updates (Sprites, Sounds)docs:Dokumentationchore: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, releasebardevelop— aktive Entwicklungfeature/<name>— einzelne Featuressprint/<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_casefür Variablen/Funktionen,PascalCasefür Klassen und Scenes,SCREAMING_SNAKE_CASEfü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.mdoder 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 DetailsREADME.md— öffentliche Projektbeschreibungdocs/— 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