diff --git a/PLAN.md b/PLAN.md new file mode 100644 index 0000000..af6aba4 --- /dev/null +++ b/PLAN.md @@ -0,0 +1,421 @@ +# Airline Tycoon Browser-MMO — Projektplan + +**Projekt:** game1.shadow-land.de +**Status:** Planungsphase +**Stand:** 24. April 2026 + +--- + +## 1. Spielkonzept + +Ein vollwertiges Airline-Tycoon-Browsergame als MMO: +- **Multiplayer:** 16–18 Spieler pro Session +- **Echtzeit:** 1 Spieltag = 16 Stunden (Beschleunigung, nicht in Echtzeit) +- **Plattform:** Browser-basiert (HTML5/JS Frontend, PHP/DB Backend) +- **Grafik:** Comic-Stil (à la Airline Tycoon Original) +- **Start:** Jeder Spieler beginnt mit gleichem Startkapital + 2 Grundflugzeugen + +**Freies Spielziel:** Jeder Spieler verfolgt eigene Strategien +- Reichste Airline +- Meiste Flugzeuge +- Meiste Passagiere +- Größtes Streckennetz +- Bestes Sabotage-Imperium + +--- + +## 2. Spielwelt — Reale Flughäfen + +### Datenquelle +- OurAirports Open Data (85.000+ Flughäfen, 1.162 große internationale) +- IATA-Codes, Namen, Städte, Länder, Koordinaten + +### Spielwelt-Auswahl (Phase 1) +**60 Flughäfen weltweit** — ausgewogen auf alle Kontinente: + +| Region | Flughäfen | +|--------|-----------| +| Europa | FRA, LHR, CDG, AMS, MUC, ZRH, FCO, MAD, BAR, LBU | +| Nordamerika | JFK, LAX, ORD, DFW, ATL, SFO, MIA, SEA, YYZ, YVR | +| Asien | DXB, HND, PEK, PVG, NRT, SIN, HKG, ICN, DEL, BKK | +| Naher/Mittlerer Osten | DOH, AUH, JED, RUH, IST, AMM, BEY | +| Südamerika | GRU, GIG, EZE, BOG, LIM, SCL, CCS, BHI | +| Afrika | JNB, CAI, CMN, LOS, ADD, NBO, SEZ | +| Ozeanien | SYD, MEL, AKL, WLG | + +### Flughafen-Attribute (pro Flughafen, pro Runde) +- **Passagier-Nachfrage:** variiert nach Wirtschaftslage +- **Treibstoffpreis:** schwankt täglich +- **Flughafengebühren:** fix pro Start/Landung +- **Slots:** begrenzte Start-/Landezeitfenster +- **Regionaler Bonus:** manche Routen haben höhere Nachfrage + +--- + +## 3. Flugzeuge + +### Flugzeugtypen (realistische Vorbilder) + +| Name | Hersteller | Range (km) | Kapazität (Pax) | Kaufpreis | Crew-Kosten/Tick | +|------|-----------|------------|-----------------|-----------|-----------------| +| **Prop 1** | Dash 8-100 | 1.500 | 37 | 500.000 | 200 | +| **Prop 2** | ATR 72-500 | 1.650 | 70 | 1.500.000 | 300 | +| **Narrowbody 1** | A320-200 | 5.700 | 150 | 8.000.000 | 600 | +| **Narrowbody 2** | B737-800 | 5.700 | 162 | 9.500.000 | 650 | +| **Widebody 1** | B777-200 | 12.000 | 300 | 35.000.000 | 1.200 | +| **Widebody 2** | A350-900 | 15.000 | 325 | 42.000.000 | 1.400 | +| **Langstrecke** | A380-800 | 15.200 | 525 | 85.000.000 | 2.000 | + +### Flugzeug-Zustand +- **Zustandswert:** 100% → 0% (bei Absturz/Sabotage) +- **Wartung:** Alle 50 Ticks fällig, senkt Zustand um 5% +- **Reparatur:** Kosten = (Kaufpreis × fehlende %) +- **Absturz:** Bei Sabotage oder Zustand 0% + +### Flugzeug-Design (Customization) +- **Lackierung:** 12 Farben + Airline-Logo-Text +- **Sitzklassen:** First/Business/Economy Mix konfigurierbar +- **Ausstattung:** WLAN, Unterhaltung, Mahlzeiten (beeinflusst Zufriedenheit) + +--- + +## 4. Routen & Flugplanung + +### Routen-System +- **Route mieten:** Kosten pro Tag (10.000–500.000/Tag je nach Beliebtheit) +- **Route kaufen:** Einmalkauf (Kaufpreis = 100× Tagesmiete) +- **Flugroute:** Direktflug von A nach B +- **Distance:** Berechnet aus Koordinaten (Haversine-Formel) + +### Tägliche Berechnungen pro Route +``` +Einnahmen/Tick = gebuchte_Pax × Ticketpreis × Nachfrage_Faktor +Kosten/Tick = Treibstoff × (Distanz/Verbrauch) + Crew_Kosten + Gebühren +``` + +### Ticketpreis-Setzung +- **Min/Max:** abhängig von Distanz (0,05–2,00 €/km) +- **Nachfrage-Kurve:** zu hohe Preise → weniger Passagiere +- **Komfort-Faktor:** Ausstattung beeinflusst Nachfrage + +### Flugplan (pro Flugzeug) +- Startflughafen, Zielflughafen, Abflugzeit (Tick) +- Automatische Rundflüge bis Flughafen voll ist oder Flugzeug umgeleitet wird + +--- + +## 5. Finanzen + +### Kontostand +- **Startkapital:** 10.000.000 Credits +- **Kredite:** max. 50.000.000, Zins 2% pro Spieltag +- **Bankrott:** Kontostand < -10.000.000 → Game Over, Session wird verlassen + +### Einnahmen +- Passagier-Tickets (Hauptquelle) +- Fracht (wenn Cargo-Flugzeug auf Route) +- Werbeverträge (tägliche Prämie für frequentierte Routes) + +### Ausgaben +- Crew-Gehalter (täglich) +- Treibstoff (täglich, preisvariabel) +- Flughafengebühren (Start/Landung) +- Routen-Mieten (täglich) +- Wartung (periodisch) +- Werbung (optional) +- Kreditzinsen (täglich) +- Sabotage-Kosten + +### Finanzübersicht (pro Spieler) +- Tagesbilanz +- Historie (letzte 30 Spieltage) +- Rankings: Kontostand, Umsatz, Gewinn + +--- + +## 6. Sabotage-System + +### Verfügbare Sabotage-Aktionen + +| Aktion | Kosten | Wirkung | Gegenmaßnahme | +|--------|--------|---------|---------------| +| ** Essen versalzen** | 50.000 | Crew-Zufriedenheit -30% auf einer Route für 5 Ticks → Einnahmen -40% | Ersatz-Crew ordern (20.000) | +| ** Treibstoff manipulieren** | 80.000 | Flugzeug verliert 20% Zustand | Wartung früher einplanen | +| ** Slot-Störung** | 30.000 | Ziel-Flughafen-Slot für 2 Ticks blockiert | Slot-Warteschlange abwarten | +| ** Werbekampagne sabotieren** | 40.000 | Konkurrent verliert Passagiere auf einer Route für 3 Ticks | Eigene Werbung | +| ** Mechaniker bestechen** | 60.000 | Wartung eines Flugzeugs verzögert sich um 10 Ticks | Interner Mechaniker (extra teuer) | +| ** Passagier-Skandal** | 100.000 | Negativ-Presseecho auf gesamte Airline für 7 Ticks → alle Routen -25% | PR-Kampagne schalten (50.000) | +| ** Slots aufkaufen** | 150.000 | Die eigenen Slots am Zielflughafen verdoppeln | Konkurrenz kann Gegen-Slots kaufen | +| ** Sicherheitsbeamter abwerben** | 45.000 | Sabotage-Abwehr eines Konkurrenten für 10 Ticks deaktiviert | Gegenseitige Sabotage | + +### Sabotage-Regeln +- Max. 3 aktive Sabotage-Aktionen pro Spieler gleichzeitig +- Aktionen werden als "Gerüchte" in der Presse angezeigt +- Sabotage-Erfolgschance: 70% (kann durch Sicherheitspersonal erhöht werden) +- Sicherheitsstufe der Airline: 0–5 Sterne (kostenloser Basisschutz) + +--- + +## 7. KI-Rivalen (NPC-Spieler) + +### NPC-Typen +- **Passiv:** Kauft selten Flugzeuge, wenig aktiv +- **Normal:** Ausgewogene Strategie, konkurriert moderat +- **Aggressiv:** Sabotiert häufig, drängt auf Expansionskurs +- **Bedenklicher Investor:** plant langfristig, wartet auf beste Deals + +### NPC-Verhalten pro Tick +1. Prüfe Finanzen +2. Prüfe Routen-Einnahmen +3. Entscheide: Neues Flugzeug kaufen / Route mieten / Sabotage / Wartung +4. Aktualisiere Ticketpreise basierend auf Nachfrage +5. Zufalls-Events (Ereignisse im Spiel) + +### NPC-Start-Konfiguration +- Gleiches Startkapital (10.000.000 Credits) +- Gleiche 2 Grundflugzeuge +- Zufälliger NPC-Typ + zufälliger Airline-Name + +--- + +## 8. Spieler-Konto & Authentifizierung + +### Registrierung +- Benutzername (einzigartig, 3–20 Zeichen) +- E-Mail +- Passwort (hashed) +- Airline-Name (einzigartig, 3–30 Zeichen) + +### Login +- Session-basiert (PHP Sessions + Cookie) +- "Angemeldet bleiben" für 30 Tage + +### Spieler-Profil +- Airline-Name und Logo (Text-basiert, Comic-Schriftart) +- Airline-Farbe (1 aus 12 Farben) +- Statistiken: Spieltage, Flüge, Passagiere, Sabotage-Erfolge +- Rangliste-Position + +--- + +## 9. Matchmaking & Session-System + +### Session-Aufbau +- **Min. Spieler:** 16 (1 Mensch reicht, Rest KI) +- **Max. Spieler:** 18 +- **Matchmaking:** Wer sich einloggt ohne offene Session → neue Session erstellen + +### Session-Verwaltung +``` +Session[ID] + - status: 'open' | 'running' | 'closing' | 'finished' + - players: [SpielerID, ...] (max 18) + - npcs: [NPC-ID, ...] (bis 16 humans + 2 minimum NPCs) + - day: aktueller Spieltag + - opened_at: timestamp + - closes_at: timestamp (opened_at + 90 days) — danach keine neuen Spieler + - ends_at: timestamp (opened_at + ~365 Tage) — Saisonende +``` + +### Spielerbeitritt +- Session hat < 16 Menschen → KI füllt auf 16 auf +- 17. Mensch kommt → Session bleibt bei 16 Menschen (KI wird entfernt wenn ≥16 Menschen) +- 18. Mensch kommt → Neue Session wird erstellt +- Bei Verbindung: automatisch nächste offene Session oder neue + +### Session-Lebenszyklus +- **Öffnungsphase:** Session ist offen für Neueinsteiger +- **Max. Laufzeit:** 3 Kalendermonate (90 Tage) — dann automatische Neue Session +- **Schlussphase:** Nach 3 Monaten: keine neuen Spieler mehr, Rest spielt weiter bis Ende +- **Saisonende:** Nach ~6 Spielmonaten (realistisch 1 Jahr) wird Session abgeschlossen, Leaderboard-Ehren vergeben +- **Grund:** Gleiche Startbedingungen für alle, kein ewiges Aufholen müssen + +### Session-Leave +- Spieler verlässt Session → Lücke wird NICHT aufgefüllt (bis Session beendet) +- Bei Disconnect: Spieler hat 7 Spieltage Zeit wieder beizutreten, sonst rausgeworfen + +--- + +## 10. Spiel-Tick & Zeit-System + +### Tick-System +- **1 Spieltag = 16 Stunden = 1 Echtzeit-Tag** +- **1 Tick = 1 Stunde (16 Ticks pro Spieltag)** +- Cron-Job alle 2,5 Echtzeit-Stunden (später: kontinuierlich via PHP CLI daemon) + +### Pro Tick berechnet: +1. Alle Flugzeuge bewegen sich (Distanz → Tick-Dauer) +2. Einnahmen/Ausgaben kalkulieren +3. Sabotage-Effekte prüfen +4. NPC-Entscheidungen ausführen +5. Nachrichten/Events generieren +6. Leaderboards aktualisieren + +### Spieltag-Ende: +1. Tagesbilanz zusammenfassen +2. Zinsberechnung für Kredite +3. Wartungsintervalle prüfen +4. Sabotage-Timer aktualisieren +5. Presse/News-Report generieren +6. Leaderboard-Updates + +--- + +## 11. Leaderboards + +### Rankings (pro Session) + +| Rangliste | Sortierung | +|-----------|-----------| +| 🏆 Kontostand | Guthaben (Assets - Schulden) | +| ✈️ Flugzeug-Flotte | Anzahl Flugzeuge (nach Kaufpreis) | +| 👥 Passagiere | Gesamte transportierte Pax | +| 💰 Umsatz | Summe aller Einnahmen | +| 📉 Gewinn | Umsatz - Ausgaben (letzte 30 Tage) | +| 🌍 Routen-Netz | Anzahl aktive Routen | +| ⭐ Sabotage-Erfolge | Erfolgreiche Aktionen | + +### Globale Rankings (alle Sessions kumuliert) +- All-Time richest airline +- Most flights completed +- Best Saboteur Award + +--- + +## 12. Benutzeroberfläche (UI) + +### Seiten/Views + +1. **Dashboard** — Übersicht: Kontostand, Flotte, nächste Flüge, aktive Routen, Leaderboard-Vorschau +2. **Flughäfen** — Weltkarte mit allen Flughäfen, eigene Routen markiert, Nachfrage anzeigen +3. **Flugzeuge** — Eigene Flotte, Zustand, nächste Wartung, Flugzeug kaufen +4. **Routen** — Eigene Routen, Ticketpreise, Passagier-Zahlen, Routen mieten/kündigen +5. **Sabotage** — Aktive Aktionen, Sabotage-Report, Sicherheitsstufe +6. **Finanzen** — Bilanz, Kontobewegungen, Kredite, Tagesbericht +7. **Markt** — Flugzeug-Markt (Gebrauchtflugzeuge), Treibstoff-Preise +8. **Presse** — Nachrichten, Gerüchte, Industrie-News +9. **Ranglisten** — Alle Leaderboards +10. **Profil** — Airline-Name, Logo, Statistiken, Einstellungen + +### Design / Grafik +- **Comic-Stil:** Cartoon-Flugzeuge (SVG/CSS gezeichnet), bunte Farben +- **Flugzeug-Grafiken:** Einfache SVG-Icons pro Flugzeugtyp +- **Weltkarte:** Interaktive SVG-Weltkarte mit Flughafen-Markern +- **Schriftart:** Humorvolle Comic-Schrift (z.B. Bangers, Russo One via Google Fonts) +- **Farben:** Knallige Airline-Farben, Pastell-Töne, dunkle Panels + +--- + +## 13. Technische Architektur + +### Stack +- **Backend:** PHP 8.4 + SQLite (für Portabilität) oder MariaDB (bestehend) +- **Frontend:** Vanilla JS + CSS Grid/Flexbox (kein Framework nötig) +- **Server:** Bestehender Server (Caddy, PHP-FPM) +- **Session:** Browser-Cookies + Server-seitige DB-Sessions + +### Datenbank-Schema (Kerntabellen) + +``` +users — Account-Daten +airlines — Airline-Profile pro User +sessions — Spiel-Sessions +session_players — Spieler in Sessions (Link User <-> Session) +airports — Flughafen-Referenzdaten +routes — Gemietete/gekaufte Routen pro Airline +aircraft — Flugzeuge pro Airline +flights — Aktive/ geplante Flüge +sabotage_actions — Aktive Sabotage-Aktionen +news_events — Presseberichte / Events +game_state — Aktueller Tick-Stand pro Session +``` + +### Spiel-Berechnung (Batch) +- PHP CLI Skript, läuft alle 2,5 Std per Cron +- Oder: `while(true)` Loop mit 5-Min-Pausen +- Berechnet alle aktiven Sessions parallel + +### Sicherheit +- Passwort-Hashing (bcrypt) +- CSRF-Token für alle POSTs +- Input-Validierung +- SQL-Injection-Schutz (Prepared Statements) +- Session-Timeouts + +--- + +## 14. Spiel-Balance + +### Startbedingungen +- Startkapital: 10.000.000 Credits +- Startflugzeuge: 2× Prop 1 (Dash 8-100) +- Freie Route: 1× regionale Route (z.B. Frankfurt → München) + +### Wirtschaftsparameter +- Treibstoff: 0,80–2,50 €/Liter (variiert täglich) +- Passage-Nachfrage: 100 Pax/Tag pro Route (Basis, modifiziert durch Economy-Faktor) +- Gebühren: 5.000–50.000 € pro Start/Landung je nach Flughafen +- Crew-Kosten: 200–2.000 €/Tick je nach Flugzeugtyp +- ROI: Typischer Payback ~30–60 Spieltage pro Route + +### Zeitrahmen (geschätzt) +- Frühe Phase (Tage 1–10): Flugzeug kennenlernen, erste Routen +- Expansionsphase (Tage 10–50): 2–5 Flugzeuge, 3–10 Routen +- Wettbewerbsphase (Tage 50–200): Große Flotten, Sabotage, KI wird aggressiver + +--- + +## 15. Implementierungs-Phasen + +### Phase 1: Grundgerüst ★ +- Datenbank-Schema erstellen +- User-Registrierung / Login +- Flughafen-Daten importieren (60 Flughäfen) +- Grundlegende UI (Dashboard, Flughafen-Karte) +- **Ergebnis:** Anmeldung möglich, Weltkarte mit Flughäfen sichtbar + +### Phase 2: Flugzeuge & Finanzen ★★ +- Flugzeug-Modell (Kauf, Zustand, Wartung) +- Finanzen-Modell (Einnahmen, Ausgaben, Kredite) +- Flugzeug-Übersicht +- **Ergebnis:** Echte Flugzeuge kaufen und fliegen sehen + +### Phase 3: Routen & Flugpläne ★★☆ +- Routen-System (mieten/kaufen) +- Flugplanung (pro Flugzeug) +- Tägliche Berechnung (Tick) +- **Ergebnis:** Eigene Routen betreiben, Einnahmen sehen + +### Phase 4: NPCs & Matchmaking ★★☆ +- NPC-AI +- Matchmaking-Logik +- Session-System +- **Ergebnis:** 16 Spieler (KI) in einer Session + +### Phase 5: Sabotage ★★★ +- Sabotage-Aktionen +- Sicherheitsstufen +- Presse/Events +- **Ergebnis:** Sabotage möglich + News-System + +### Phase 6: Leaderboards & Polish ★★☆ +- Alle Leaderboards +- Presse-Seite +- Spielende-Bedingungen +- Comic-Grafiken (Flugzeuge, Flughäfen) +- **Ergebnis:** Vollständiges Spiel + +--- + +## 16. Nächste Schritte (sofort) + +1. ✅ Projekt-Repo auf Gitea anlegen +2. Datenbank-Schema designen +3. User-System programmieren +4. Flughafen-Daten importieren +5. Comic-Sprite-Grafiken erstellen (oder素材 finden) + +--- + +*Erstellt: 24. April 2026* +*Geschätzer Aufwand: ~200–300 Stunden Entwicklungszeit*