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

386 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Entwicklungsplan: Tier-Krankenhaus (Arbeitstitel)
> Ein Sandbox-Spiel für Kinder im Stil von *Yasa Pets Hospital* — aber **werbefrei, ohne Datensammlung, ohne grüne Giftflaschen** und liebevoll selbst gemacht.
---
## 1. Produkt-Vision
**Kernprinzip:** Digitale Puppenstube. Keine Ziele, kein Scheitern, kein Zeitdruck. Die Kinder erzählen sich mit den Figuren Geschichten.
**Was bleibt vom Original:**
- 3-Etagen-Krankenhaus im Querschnitt (Sidescroller-Puppenhaus)
- Häschen- und Kätzchen-Figuren
- Drag & Drop von Figuren zwischen Räumen
- ~4060 interaktive Objekte
- Gartenparty als Bonusbereich
**Was wir besser machen:**
-**Keine Werbung** (Kinder spielen ungestört)
-**Keine Datensammlung** (keine Analytics, kein Tracking)
-**Keine "grünen Giftflaschen"** — ersetzt durch harmlose Mechaniken
-**Offline-first** (keine Internetpflicht)
-**Gartenbereich von Anfang an offen** (keine Sammellogik mit Sternen)
-**Größere Touch-Targets** (mind. 48dp/64px, Kritikpunkt am Original)
-**Figuren basierend auf Fotos eurer eigenen Haustiere / Wünschen der Kinder** (das ist der eigentliche Kicker)
---
## 2. Tech-Stack-Empfehlung: Godot 4.x
### Warum Godot
| Kriterium | Godot 4 | Unity | libGDX | Flutter/Flame |
|---|---|---|---|---|
| Kosten | **Kostenlos, MIT-Lizenz** | Kostenlos bis Umsatzschwelle | Kostenlos | Kostenlos |
| 2D-Eignung | **Exzellent** | Gut | Gut | Mittel |
| Android-Export | **Out-of-the-box** | Ja | Ja (nativ) | Ja |
| iOS-Export | Ja (Mac nötig) | Ja (Mac nötig) | Ja (Mac nötig) | Ja (Mac nötig) |
| Engine-Größe | ~100 MB | ~10 GB | Sehr klein | Mittel |
| Lernkurve (Java-Dev) | **3-5 Tage** | 1-2 Wochen | Vertraut | 1 Woche (Dart) |
| Perfekt für Sandbox | **Ja** (Node-Tree!) | Ja | Eher Code-zentrisch | Mittel |
**Godot-Killer-Feature für dieses Spiel:** Die Scene-Node-Hierarchie bildet dein Krankenhaus 1:1 ab:
```
Hospital (Node2D)
├── Floor1 (Node2D)
│ ├── Reception (Node2D)
│ │ ├── Desk (StaticBody2D)
│ │ ├── QueueDisplay (Sprite2D)
│ │ └── InteractiveObjects/*
│ ├── GiftShop
│ ├── Restaurant
│ └── EmergencyRoom
├── Floor2 (XRay, Pharmacy, Lab, PatientRooms)
├── Floor3 (Delivery, Nursery, Ultrasound)
├── Home (GardenParty)
└── Characters (Autoload)
├── Bunny1
├── Bunny2
└── Kitten1
```
### Voraussetzungen
- **Entwicklungs-Rechner:** Dein Arbeitsplatz reicht
- **Android-Export:** Android Studio SDK + JDK (einmalig einrichten)
- **iOS-Export:** Mac + Xcode + Apple Developer Account (€99/Jahr) — **oder:** Android zuerst, iOS später nachziehen
- **Version Control:** Git (Godot-Projekte sind git-freundlich, `.import/` und `.godot/` in `.gitignore`)
### Empfohlene VS Code Setup (alternativ zum Godot-Editor)
- Godot-Editor für Scenes und visuelle Arbeit
- VS Code mit `godot-tools` Extension für GDScript
- Git Workflow wie gewohnt
---
## 3. Architektur
### 3.1 Scene-Struktur
Drei zentrale Scene-Typen:
**1. `Room.tscn`** (Basisscene)
- Hintergrundbild
- Spawnpoints für Figuren
- Array von `InteractiveObject`-Nodes
- Camera-Grenzen
**2. `InteractiveObject.tscn`**
- Sprite mit mehreren Zuständen (z.B. Röntgengerät: idle/scanning/result)
- `DraggableArea2D` für Drag-Erkennung
- `Action`-Signal (z.B. wenn Häschen draufgelegt wird)
- Sound-Trigger
**3. `Character.tscn`**
- AnimatedSprite2D (idle, walking, happy, sick, sleeping)
- `DraggableComponent`
- State-Enum: healthy / sick / pregnant / baby / tired
### 3.2 Datenmodell
```gdscript
# character_data.gd (Resource)
class_name CharacterData extends Resource
@export var id: String
@export var display_name: String
@export var species: String # "bunny", "kitten"
@export var age: String # "baby", "adult", "pregnant"
@export var current_room: String
@export var position: Vector2
@export var state: String # "idle", "sick", "sleeping"
```
### 3.3 Save-System
Godot hat `FileAccess` und Resource-Serialisierung built-in:
```gdscript
# save_manager.gd
func save_game():
var state = {
"characters": get_tree().get_nodes_in_group("characters").map(
func(c): return c.to_dict()
),
"objects": get_tree().get_nodes_in_group("savable_objects").map(
func(o): return o.to_dict()
),
"version": 1
}
var file = FileAccess.open("user://savegame.json", FileAccess.WRITE)
file.store_string(JSON.stringify(state))
```
Auto-Save nach jeder Interaktion (die Kinder werden die App einfach schließen).
### 3.4 Core Systems
| System | Komplexität | Notizen |
|---|---|---|
| Drag & Drop | Mittel | `_unhandled_input` + `Area2D.input_event` |
| Raum-Navigation | Niedrig | Scene-Switch oder Camera-Pan |
| Zustand von Objekten | Niedrig | Enum + Sprite-Wechsel |
| Sound | Niedrig | `AudioStreamPlayer2D` pro Raum |
| Save/Load | Niedrig | JSON in `user://` |
| Tutorial | Mittel | Einmaliger Hinweis beim ersten Start |
| Settings-Menü | Niedrig | Lautstärke, Sprache, Reset |
---
## 4. Content-Umfang
### 4.1 Räume (12 Stück)
| Etage | Raum | Objekte | Besonderheit |
|---|---|---|---|
| EG | Empfang | Tresen, Wartebereich, Nummernanzeige | Einstiegspunkt |
| EG | Geschenke-Shop | Blumen, Kuscheltiere, Karten | Einfach |
| EG | Restaurant | 3 Menüs, Tische | Essen als Interaktion |
| EG | Notaufnahme | Krankenwagen, OP-Tisch | Dramaturgie |
| 1.OG | Röntgen | Röntgengerät, Gips-Station | Coolster Raum für Kinder |
| 1.OG | Apotheke | Medikamente (alle gut!) | Ohne "Gift"-Mechanik |
| 1.OG | Labor | Mikroskop, Reagenzgläser | Lerneffekt |
| 1.OG | Patientenzimmer | 2-3 Betten, TV | Ruhe |
| 2.OG | Ultraschall | Gerät, Liege | Süß |
| 2.OG | Kreißsaal | OP-Equipment | Sensibel, aber wichtig |
| 2.OG | Säuglingsstation | Wiegen, Babys | Kern-Magie |
| Extern | Zuhause/Garten | Wiege, Tisch, Geschenke | Gemütlich |
### 4.2 Figuren (8 Stück für MVP)
- 2× Erwachsene Häschen (männlich/weiblich)
- 2× Erwachsene Kätzchen
- 2× Baby-Häschen / Baby-Kätzchen
- 2× Ärzte/Pfleger (andere Tierart? → Eule, Fuchs?)
### 4.3 Interaktive Objekte (~50)
Typen:
- **Geräte** (Röntgen, Ultraschall, Ambulanz) → mehrere Zustände
- **Verbrauchsgegenstände** (Pflaster, Medikamente, Essen) → spawn-able
- **Möbel** (Betten, Tische, Stühle) → statisch mit Sitz-Slot für Figuren
- **Dekoration** (Pflanzen, Bilder) → nur visuell
### 4.4 Sound
- Hintergrundmusik pro Etage (ruhige, fröhliche Loops)
- Soundeffekte: Krankenwagen-Sirene, Röntgen-Piep, Babygeräusche, Kassenklingel
- **Tier-Geräusche** (wichtig!): Häschen-Schnuffeln, Kätzchen-Miau
**Quelle:** [freesound.org](https://freesound.org), [opengameart.org](https://opengameart.org) — Creative Commons.
---
## 5. Asset-Strategie (der kritische Teil)
Hier scheitern die meisten Hobby-Gamedev-Projekte. Drei realistische Wege:
### Option A: Eigene Kinder als Illustratoren (mein Favorit 💡)
- Deine Kinder malen die Häschen, Objekte und Räume auf Papier
- Du digitalisierst (Scan + Photoshop/GIMP/Krita → PNG mit Transparenz)
- **Vorteil:** Emotionale Bindung, einzigartiger Look, Kinder sind stolz
- **Nachteil:** Konsistenz-Herausforderung, mehr Nacharbeit
- **Zeitaufwand:** 20-30 Stunden Digitalisierung
### Option B: Asset-Packs kaufen
- [itch.io](https://itch.io/game-assets/tag-2d) — oft €1050 pro Pack
- [Kenney.nl](https://kenney.nl) — kostenlos, hochwertig, aber limitiertes Tier-Angebot
- Kombination aus 23 Packs + eigene Anpassungen
- **Kosten:** €50200
- **Zeitaufwand:** 510 Stunden
### Option C: Freelancer
- Fiverr/Upwork: Cartoon-Illustrator mit 2D-Spiele-Erfahrung
- 2D-Charakter-Set (8 Figuren, 4 Animationen): €300800
- Hintergründe (12 Räume): €5001500
- **Gesamt:** €8002300
- **Zeitaufwand:** 23 Wochen Koordination
### Option D: KI-gestützt mit Nachbearbeitung
- Midjourney / DALL-E / Stable Diffusion für Konzepte
- Manuelle Nacharbeit in Krita/GIMP für Konsistenz
- **Achtung:** Urheberrecht und Konsistenz-Probleme über Figuren hinweg
- **Kosten:** €20 Midjourney-Monat
- **Zeitaufwand:** 3050 Stunden
**Meine Empfehlung:** **Option A + C hybrid**. Kinder malen die Helden-Figuren (ihre Lieblinge), Freelancer macht die Hintergründe und generische Objekte. Das wird emotional *und* professionell.
---
## 6. Sprint-Plan (16 Wochen, ca. 8h/Woche)
Realistisch für einen Vollzeit-Entwickler mit Familie und Side-Projekten. Kürzer geht, wenn du die Abende länger nutzt.
### Sprint 0: Setup (Woche 1)
- [ ] Godot 4 installieren, Android-Export einrichten
- [ ] Git-Repo anlegen
- [ ] GDScript-Grundlagen durchgehen (Godot-Docs, 3-5h)
- [ ] Apple Developer Account falls iOS geplant
- [ ] Projektname + Logo-Idee
### Sprint 1-2: Proof of Concept (Woche 2-3)
- [ ] Ein Raum (z.B. Empfang) mit Hintergrund
- [ ] Eine Figur (Platzhalter-Häschen) per Drag bewegen
- [ ] Ein interaktives Objekt (z.B. Blume pflücken)
- [ ] Auf echtem Tablet testen
- **Gate:** Funktioniert der Kern-Loop? Finden die Kinder es gut?
### Sprint 3-4: Core Systems (Woche 4-5)
- [ ] Raum-Navigationssystem (Etagen-Wechsel per Aufzug)
- [ ] Save/Load-System
- [ ] Settings-Menü (Lautstärke, Reset)
- [ ] Character-State-System (gesund, krank, schläft)
### Sprint 5-7: Erdgeschoss (Woche 6-8)
- [ ] Empfang komplett
- [ ] Geschenke-Shop
- [ ] Restaurant
- [ ] Notaufnahme mit Krankenwagen-Animation
### Sprint 8-10: 1. Obergeschoss (Woche 9-11)
- [ ] Röntgen mit Slide-Animation
- [ ] Apotheke (alle Medikamente positiv!)
- [ ] Labor
- [ ] Patientenzimmer
### Sprint 11-13: 2. Obergeschoss (Woche 12-14)
- [ ] Ultraschall (sanfte Herzschlag-Animation)
- [ ] Kreißsaal (kindgerecht: Mama kommt rein, Baby ist da)
- [ ] Säuglingsstation mit Wiegen
### Sprint 14: Zuhause & Garten (Woche 15)
- [ ] Garten-Szene
- [ ] Party-Mechanik (Geschenke auspacken, Tee)
### Sprint 15: Polish & Sound (Woche 16)
- [ ] Alle Sounds einbauen
- [ ] Hintergrundmusik mit Cross-Fade
- [ ] Animations-Feinschliff
- [ ] Tutorial / erster Start
### Sprint 16: Release-Vorbereitung (Woche 17+)
- [ ] Icon, Splash Screen
- [ ] Play Console Setup, Screenshots, Beschreibung
- [ ] Internal Testing mit Kindern
- [ ] Release auf Play Store (Android zuerst)
- [ ] iOS-Port falls gewünscht
---
## 7. Release & Distribution
### Android (einfacher Start)
1. Google Play Developer Account (€25 einmalig)
2. Release als **Privat**/Closed Testing zuerst — nur Familie
3. Oder: Direkte APK-Distribution in der Familie (kein Store nötig)
4. Ggf. später: Öffentlicher Release
### iOS (später)
- Apple Developer Account (€99/Jahr)
- TestFlight für Familie
- App Store Review deutlich strenger als Google
### **WICHTIG — COPPA/Kids-Compliance**
Da Zielgruppe 3+ Jahre:
- Keine Analytics (Google Analytics, Firebase, etc.)
- Keine externen Links ohne Parental Gate
- Keine personenbezogenen Daten
- In der Play Store Data Safety: **"Keine Daten erhoben"** angeben — und das auch umsetzen
### Monetarisierung
**Empfehlung: Keine.** Das ist ein Projekt für deine Kinder. Wenn du später öffentlich willst:
- **Einmalkauf €2,99** (fair, keine Werbung)
- Keine In-App-Käufe, keine Werbung
---
## 8. Risiken & Tipps
### Größte Fallstricke
| Risiko | Mitigation |
|---|---|
| **Asset-Produktion zieht sich** | Mit Platzhaltern entwickeln, Assets parallelisieren |
| **iOS-Deployment kompliziert** | Erst Android, iOS später |
| **Feature-Creep** | Strikt am MVP-Plan halten, später iterieren |
| **Motivation ebbt nach 2 Monaten ab** | Kinder regelmäßig Build zeigen → Feedback = Motor |
| **Komplexe Animationen** | Mit einfachen 2-Frame-Animationen starten |
### Pro-Tipps aus der Praxis
1. **Kinder sind deine Beta-Tester.** Zeig ihnen jeden Build. Was sie nicht finden, ist zu versteckt. Was sie zum Lachen bringt, behältst du.
2. **Finger statt Maus.** Entwickle am Rechner, teste aber wöchentlich auf dem echten Tablet. UI-Elemente brauchen **mindestens 48dp** / besser 64dp Größe.
3. **Persistierende Chaos-Toleranz.** Wenn das Kind alle Objekte in eine Ecke stapelt — perfekt. Ladet es genau so wieder. Kein "Ordnen" beim Reset.
4. **Bewusste Musik-Lautstärke.** Default auf 60%, nicht 100%. Kinder-Tablets stehen oft auf Max.
5. **Großer Zurück-Button immer sichtbar.** Kein Verirren in Untermenüs.
6. **Keine Text-UI für Kinder unter 6.** Icons, Symbole, Farben. Text nur für dich als Dev.
7. **Idle-Animationen.** Jede Figur blinzelt / atmet auch im Stand. Das macht die Welt lebendig.
8. **Sound ist 50% der Magie.** Ein gutes "Ploppen" beim Aufnehmen eines Objekts ist mehr wert als jede Animation.
### Was ich NICHT machen würde
- ❌ Multiplayer / Online-Features
- ❌ Prozedurale Generierung
- ❌ Physik-Engine (nicht nötig für ein Puppenhaus)
- ❌ Eigene Character-Editor (Kinder wollen spielen, nicht konfigurieren)
- ❌ Level-System / Achievements (widerspricht dem Sandbox-Charakter)
---
## 9. Nächste Schritte (diese Woche)
1. **Godot 4 installieren** und das offizielle "Your First 2D Game"-Tutorial durchspielen (ca. 2h) — danach verstehst du die Engine
2. **Git-Repo anlegen** (lokal oder auf GitHub privat)
3. **Ein leeres Projekt** mit `Main.tscn` und einem leeren Raum erstellen
4. **Projektnamen** mit den Kindern festlegen — das macht es offiziell
5. **Mit den Kindern** 23 Figuren-Skizzen auf Papier machen (zum Einscannen später)
---
## 10. Nützliche Ressourcen
**Godot lernen:**
- [Godot Docs — Your first 2D game](https://docs.godotengine.org/en/stable/getting_started/first_2d_game/)
- [GDQuest YouTube](https://www.youtube.com/@Gdquest)
- [Godot Tours (interaktiv)](https://school.gdquest.com/products/godot-tours-101-the-godot-editor)
**Assets:**
- [Kenney Assets](https://kenney.nl)
- [itch.io Game Assets](https://itch.io/game-assets)
- [OpenGameArt](https://opengameart.org)
**Sounds:**
- [Freesound](https://freesound.org)
- [Zapsplat](https://www.zapsplat.com)
**Inspiration / Benchmarks:**
- Yasa Pets World, Farm, Town (gleiches Studio, anderer Kontext)
- Pepi Hospital 2 (4,1 Sterne, sauberer umgesetzt)
- Toca Boca Serie (Goldstandard in diesem Genre)
---
*Dieser Plan ist ein lebendes Dokument. Anpassen nach jedem Sprint.*