192 lines
7.8 KiB
Markdown
192 lines
7.8 KiB
Markdown
# 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 |