DFB-Pokal Online: Ankündigung, Animation, Elfmeterschiessen, Outcome-Screen
0.21.0 macht den DFB-Pokal im Online-Multiplayer 1:1 zum Solo-Erlebnis. Eine Woche vor jeder Pokalrunde erscheint die „In einer Woche im DFB-Pokal …"-Vorausmeldung mit dem bisher größten Vereinserfolg. Im Pokalspiel kann man wie im Solo per Knopfdruck die animierten Höhepunkte verfolgen — inklusive Tor-Minuten, gelben/roten Karten, Verlängerung und Elfmeterschiessen mit struktureller Schuss-Sequenz. Nach dem eigenen Match meldet ein Outcome-Screen klar: „Du ziehst weiter", „Es kommt zum Rückspiel" oder „Du bist ausgeschieden".
- ▸Pokal-Vorausmeldung in der richtigen Reihenfolge: am Liga-Tag VOR der Pokalrunde, analog Solo (`Game.isDFBPokalDrawAnnouncement`). Direkt nach dem Spieltag-Opener kommt der Vollbild-Hinweis „In einer Woche wird Dein Spiel auswärts beim Verein X (Bundesliga) sein." — anschliessend Events, Finanzen, Hauptmenü, regulärer Liga-Spieltag, dann eine Woche später das Pokalspiel.
- ▸Bisher größter Pokal-Erfolg in der Vorausmeldung: pro Verein wird der höchste Pokal-Status über alle Saisons der Liga persistiert. „Bisheriger größter Erfolg: Achtelfinale (Saison 3)." wird unter der Vorausmeldung in gelb angehängt. Status 1=keine Teilnahme bis 8=Pokalsieger.
- ▸Pre-Match-Screen mit Animations-Toggle vorm eigenen Pokalspiel: Trikots beider Teams + zwei Buttons („Höhepunkte ansehen" / „Direkt zum Ergebnis") — wie im Liga-Pre-Match. Wer „Höhepunkte" wählt, sieht 1. Halbzeit (SpriteKit), Halbzeit-Tafel, 2. Halbzeit, Schluss-Pfiff.
- ▸Animierte Cup-Match-Sim mit Tor-Minuten und Karten: Backend persistiert pro Pokalpaarung die volle Match-Engine-Event-Liste (Tor-Schützen, gelbe/rote Karten, Verletzung) als 9 JSON-Spalten am `cup_fixture` — getrennt für Hin- und Rückspiel. iOS rendert das in `MatchSceneView` exakt wie ein Liga-Match.
- ▸Elfmeterschiessen mit struktureller Schuss-Sequenz: Backend simuliert die Elfmeter 1:1 wie Solo (75% Trefferchance, 5+5 mit Early-Decide bei mathematisch entschiedenem Stand, Sudden Death pair-by-pair) und persistiert die chronologische Schuss-Reihenfolge. iOS rendert sie mit Solo's `PenaltyShootoutView` — der User sieht jeden Schuss live im Tor.
- ▸Cup-Outcome-Screen nach dem eigenen Match — 1:1 zu Solo (`MatchDayView.computeCupOutcome`): „Du ziehst in das Achtelfinale des DFB-Pokals ein." (grün), „Es kommt zum Rückspiel gegen FC Bayern." (gelb), oder „Du bist im DFB-Pokal im Elfmeterschiessen ausgeschieden." / „… nach Verlängerung ausgeschieden." (rot).
- ▸Pate bekommt Push beim Beitritt eines neuen Mitspielers — auch in der Anmeldephase. Sobald jemand den Invite-Token einlöst, kommt auf dem Pate-Gerät: „Neuer Mitspieler in <Liga> — <Name> ist beigetreten — N Manager an Bord." Idempotenter Re-Join feuert keine doppelte Push.
- ▸Aufstellungs-Bestätigung wird nach Spieltag-Wechsel zurückgesetzt: vorher klebte die alte „Aufstellung für Spieltag 7 gesendet"-Zeile sticky unter dem Hub, auch wenn schon „Spieltag 8 spielen" als Knopf darüber stand. Jetzt löscht der `currentMatchday`-onChange-Listener die Status-Zeile sauber.
Technische Details
- Backend b55: neue Migration `AddMatchEventsJsonToCupFixture` (9 String-Spalten: goal_scorers_json, yellow_cards_json, red_cards_json, injury_json, penalty_shots_json, plus first_leg_*-Varianten). `CupEngine.playSingleCupMatch` JSON-codiert die `MatchEngine.simulate`-Events; bei Two-Leg-Rückspiel werden `isHome`-Flags auf Fixture-Sicht gespiegelt. `simulatePenalties` als Solo-1:1-Port mit `CupPenaltyShot { isHome, scored }`-Sequenz. `SeasonClubDTO` exposed `dfbStatusBest` + `dfbStatusBestYear`. `PushService.notifyCommissionerNewMember` + Trigger im `LeagueController.join`.
- iOS Build 496: neue `OnlineCupMatchFlowView` mit Phasen `preMatch → firstHalf → halftime → secondHalf → penaltyShootout → finalResult → cupOutcome`. `OnlineGameRepository.applySeason` decodet die JSON-Felder in Solo-`MatchResult`-Events; `dfbStatusBest/Year` werden auf `team.dfbCupBestStatus/Year` gespiegelt. DFB-Vorausmeldung im PreMatch-Flow getriggert (`pendingDFBAnnouncementRound` checkt `ablauf[scheduleIndex+1]==.league && ablauf[scheduleIndex+2]==.dfbHome`). `OnlineDFBAnnouncementView.bestStreakLine` rendert Vereinsbestleistung. Status-Reset im `currentMatchday`-onChange.
- Kompatibilität: alte Saves ohne `dfbStatusBest` laufen weiter, da das Feld optional dekodiert wird. Vorhandene Pokal-Fixtures ohne Match-Events fallen sauber auf einen leeren `MatchResult` zurück (kein Crash, keine Animation).
Online-Stabilisierung: Lineup-Warnungen, Forfeit, VL-KI-Squads, Tor-Animation
0.20.1 stabilisiert den in 0.20.0 freigeschalteten Online-Modus auf Solo-Niveau. Die Match-Engine läuft mit echten Verbandsligisten statt leeren Geistermannschaften, Aufstellungs-Warnungen und 0:4-Wertung bei Nichtantritt funktionieren wie im Original, Sponsoren bleiben über mehrere Spieltage erhalten, und Tor-Animationen landen sauber zwischen den Pfosten.
- ▸Aufstellungs-Warnungen 1:1 zum Original (KICKER.BAS:1811-1832): bei <11 Spielern (mit Torwart und ≥7 Feldspielern) gelber Hinweis „Du hast keine vollständige Mannschaft aufgestellt"; ohne Torwart oder mit weniger als 7 Spielern roter Forfeit-Screen mit 0:4-Wertung und Geldstrafe (250.000 DM × (5 − Liga-Index)). „Weiter" reicht eine Forfeit-Aufstellung ans Backend ein, MatchdayRunner schreibt das Spiel auf 0:4 für den Gegner und zieht die Strafe vom Vereinskapital ab.
- ▸Verbandsliga-KI-Vereine bekommen ihre Spieler: SPIELER.KDT enthält für die meisten VL-Vereine keine Spieler-Templates, wodurch im Online vorher leere Mannschaften gegen den Manager antraten. Backend nutzt jetzt 1:1 Solo's Random-Squad-Fallback und generiert 15 Random-Spieler pro VL-Verein.
- ▸Match-Engine fair nach Re-Hydration: wenn KI-Squads während laufender Saison nach-hydratisiert werden, bekommen die frischen Spieler Energy/Form mit Mid-Saison-Drift (8-15 / 7-15 statt 12-20 / 10-20) — sonst verliert der Manager mit ausgelaugtem Squad plötzlich alle Spiele.
- ▸Trikot-Sponsoren bis 120 Spiele Laufzeit: Solo würfelt Verträge bis 120 Spiele (KICKER.BAS:583-587). Backend hatte vorher hartes Cap=100 — jeder ≥100-Spiele-Vertrag wurde silent abgelehnt und verschwand am nächsten Spieltag. Cap auf 200 erhöht.
- ▸Werbe-Anzeige konsistent zwischen Pre-Match-Screen und Finanzen-Menü: Solo's `pendingSponsorIncome` akkumulierte sich bei jedem Sign-Versuch und blähte die Werbung-Spalte auf. `OnlineSponsorView` nullt den Buffer jetzt nach erfolgreichem Backend-Sync.
- ▸Wunderheiler & Co. tauchen in der Finanz-Übersicht auf: Random-Events mit Geld-Effekt werden jetzt korrekt im Wochenreport unter „Sonstiges" verbucht — vorher wurde nur das Capital reduziert ohne Spur in der Bilanz.
- ▸Spieler bleiben sichtbar nach Spieltag-Anschubsen: `applySeason` lief alle 2 Sekunden im Polling und ersetzte `game.teams = newTeams` komplett. Da die seasonInfo-DTO keine playerIDs/sponsors mitliefert, war nach jedem Polling-Tick der Squad in den Solo-Screens leer. Jetzt mit `priorPlayerIDs`/`priorSponsors`-Backup analog Capital-Erhalt.
- ▸Tor-Animationen landen 100% im Tor: Lupfer/Curved/Header-Bahnen mit ausschwingenden Mid-Punkten konnten visuell aussehen als ginge der Schuss neben das Tor. Vereinheitlicht auf einen geradlinigen Schuss in eine geclampte Eck-Position innerhalb der Pfosten; Lattenschüsse bleiben als eigenes Highlight bestehen.
- ▸Default-Lineup für frische Online-Liga: wenn der Manager noch nie eine Aufstellung gewählt hat, wird automatisch 1 GK + Top-10 Outfield nach overallSkill ausgewählt — verhindert die ungewollte Forfeit-Wertung beim ersten Spieltag.
- ▸LineupValidator akzeptiert KRANK/VERLETZT/GESPERRT silent: vorher 400-Bad-Request beim Submit, sobald ein gespeicherter Spieler zwischenzeitlich ausgefallen war — Solo filtert diese Spieler in `pickLineup` einfach raus, das macht das Backend jetzt auch.
Technische Details
- Backend b46: neue `LineupSubmission.is_forfeit`-Spalte, `MatchdayRunner.playSingleMatch` Forfeit-Pfad (0:4 + `FinanceEngine.forfeitFine(leagueTier:)`), `SeasonInitializer.generateFallbackSquad` mit Solo-1:1-Random-Spielern aus `BackendRandomNames`, Sponsor-Cap 200 statt 100, EventEngine schreibt `pendingEventIncome`/`pendingEventExpense` für Wochenreport, `repairSeasonIfBroken` re-hydratisiert leere Vereine mit Mid-Saison-Drift.
- iOS Build 482: `OnlineLeaguePlayView.lineupErrorScreen(check:)` mit drei Solo-Text-Varianten und Sub-Case `case lineupError(check: Game.LineupCheck)` statt separatem `@State` (verlor sich beim Re-Mount); `Game.LineupCheck: Hashable`; `OnlineGameRepository.applySeason` mit `priorPlayerIDs`/`priorSponsors`-Backup; `simulateMatchday` zieht jetzt nach Sim auch `getFinances`/`reloadOwnPlayers`/`getOffers` (Wunderheiler erscheint im Wochenreport).
- MatchScene.swift: GoalStyle-Enum entfernt, `showGoal` immer geradliniger `.direct`-Schuss mit hardem Pfosten-Clamping. Lattenschüsse bleiben als `MatchHighlight.post`.
- Verbleibende Lücken: Sponsoren werden nicht im seasonInfo-DTO mitgesendet (iOS-State läuft auseinander wenn App neu gestartet wird ohne loadAll); Pre-Match-Anzeige und Finanzen-Menü greifen auf unterschiedliche Datenquellen zurück, was bei laufender Saison gelegentlich zu Diskrepanzen führen kann.
Online-Liga komplett — Toto, Training, Taktik, Sponsor + Solo-Hauptmenue
0.20.0 schließt die in 0.19.0 offen gebliebenen Online-Lücken: Toto-Schein, Trainingslager, Taktik-Wechsel, Sponsor-Verträge und Spieler-Positionen funktionieren jetzt auch im Multiplayer. Das Online-Hauptmenue ist identisch zum Solo (17 Items, Atari-ST-Look auf Spielfeld-Background). Vereinsname, Trikotfarben und Schwierigkeitsstufe lassen sich nachträglich editieren, Kredite kann man tilgen.
- ▸Online-Hauptmenue 1:1 wie Solo: gleiches Atari-ST-Layout mit 17 Punkten auf Spielfeld-Background, kein zweiter UI-Stack — `KickerHauptmenuView` aus `MainMenuView` extrahiert und vom Solo- und Online-Pfad geteilt.
- ▸Toto-Schein online: Tippen, Einsatz setzen, abgeben — Backend zieht den Einsatz vom Capital ab und persistiert die 9 Tipps für die Auswertung am Spieltag.
- ▸Trainingslager online: Spieler ins 2-, 4- oder 6-wöchige Camp schicken. Pro Buchung geht eine `sendPlayerToCamp`-Mutation ans Backend, das den autoritativen Stand (Capital + Camp-Belegung) zurückschreibt.
- ▸Taktik online: Tactic-Wechsel im Solo-Screen wird beim Verlassen via `submitLineup` ans Backend geschickt — auch bei unvollständiger Aufstellung.
- ▸Sponsor-Verträge online: eingehende Sponsoren-Angebote im Solo-Screen annehmen, Backend persistiert + zahlt das Geld in wöchentlichen Tranchen aus.
- ▸Spieler-Positionen online: Position pro Spieler im Solo-`PositionsView` ändern — beim Verlassen schickt der Wrapper für jede geänderte Position einen `setPlayerPosition`-Call ans Backend (Wechsel auf Torwart entfernt automatisch aus eingereichter Aufstellung, Original-Verhalten KICKER.BAS:6793).
- ▸Vereinsname + Trikotfarben nachträglich editierbar: aus dem eigenen Hub heraus über `updateOwnClub` — vorher nur bei Vereinswahl möglich.
- ▸Schwierigkeitsstufe online: `KickerDifficultyPicker` als wiederverwendbare Atari-Checkbox-Komponente — Liga-Gründer wählt sie beim Anlegen, Commissioner kann sie nachträglich anpassen.
- ▸Kredit-Tilgung online: aufgenommenen Kredit per Knopfdruck zurückzahlen — `repayCredit` reduziert Capital und löscht den Kredit-Eintrag im Backend.
Technische Details
- Online-Wrapper-Pattern: Jeder neue `Online*View` rendert den existierenden Solo-Screen und merkt sich beim `task` einen Snapshot des relevanten `Game`-Zustands (Positionen-Map, Sponsor-IDs, Camp-Belegung, Tactic, Toto-Stake). Beim Verlassen wird der Diff berechnet und pro Mutation ein Backend-Call geschickt — Solo-Logik bleibt unverändert, kein paralleler Online-UI-Code.
- `MenuScreen`-Enum aus `MainMenuView` auf Top-Level gehoben, damit Solo-`MainMenuView` und `OnlineLeaguePlayView` denselben Routing-Typ teilen können.
- Backend-Erweiterungen: `POST /api/leagues/:id/credit/repay`, `POST /api/leagues/:id/players/:pid/position`, `POST /api/leagues/:id/difficulty`, `PATCH /api/leagues/:id/own-club` (Name + Trikot1/2), `GET /api/leagues/:id/sponsors/own`, `POST /api/leagues/:id/sponsors/sign`.
- `OnlineGameRepository` um `repayCredit`, `setPlayerPosition`, `updateOwnClub`, `setDifficulty`, `signSponsor` ergänzt — alle reload-getriggert nach erfolgreichem Backend-Call.
- Verbleibende Lücken aus 0.19.0: kein Push-Empfänger iOS-seitig, kein Buy-Offer-Flow auf andere Vereine (nur Verkauf), Saisonende Spieltag 34 ungetestet, Match-History ohne Tor-Schützen-/Karten-Listen.
Online-Multiplayer Alpha — Liga gegen echte Mitspieler, asynchron
0.19.0 schaltet den ersten funktional spielbaren Online-Liga-Modus frei. Liga gründen, Mitspieler per Code einladen, Verein wählen, Aufstellung aufstellen, Transfers verhandeln, Stadion ausbauen, Spieltag spielen — alles gegen das Vapor-Backend, das in 0.18.0 fertig wurde. Solo-Modus und Hot-Seat bleiben unverändert.
- ▸Drei klar getrennte Online-Einstiege im Hauptmenü: „Online-Liga spielen" (eine Liga, in der man Mitglied ist, weiterspielen), „Online-Liga verwalten" (gründen, beitreten, Mitglieder verwalten, Archiv) und „Cloud-Backup" (Solo-Saves wie in 0.18.0).
- ▸Liga-Hub mit Saison-Header, eigenem Vereinsstatus und Aktions-Buttons — alle wesentlichen Manager-Aktionen erreichbar ohne Solo-Screens umzubauen.
- ▸Tabelle: alle vier Ligen mit Position, Punkten, Toren und Spiele/Siege/Unentschieden/Niederlagen aus persistiertem Server-State.
- ▸Aufstellung: existierender Solo-Squad-Screen wird wiederverwendet — 11 Spieler togglen, Submit-Button schickt die Aufstellung mit Tactic ans Backend, Mitspieler sehen sie nach manuellem Refresh.
- ▸Transfermarkt: eingehende Angebote auf eigene Spieler annehmen oder ablehnen, Backend macht Verein- und Geld-Transfer.
- ▸Stadion-Ausbau: Steh- und Sitzplätze erweitern, Backend validiert Cost und Bauzeit.
- ▸Finanzen: Capital, Kredit (Aufnahme + Restlaufzeit) und Termingeld (Anlage + Restlaufzeit).
- ▸Vertragsverlängerung: Spieler mit auslaufenden Verträgen (≤ 8 Wochen) bekommen 5 Wochen-Optionen (15/30/45/60/75) zur Verlängerung — Salary aus Backend-Default.
- ▸Commissioner-Privileg: nur der Liga-Gründer triggert den Spieltag manuell. Match-Engine läuft auf dem Server, alle 36 Match-Ergebnisse werden gruppiert nach Liga gezeigt, das eigene Spiel hervorgehoben.
- ▸Letzte Ergebnisse: alle Mitspieler können den letzten gespielten Spieltag aus der Datenbank nachladen, auch wenn sie ihn nicht selbst gestartet haben.
- ▸Aktualisieren-Button im Hub: holt sämtliche Liga-Daten frisch vom Server — als Workaround bis Push-Notifications iOS-seitig empfangen werden.
Technische Details
- Adapter-Pattern: `OnlineGameRepository` (`@MainActor @Observable`) lädt parallel SeasonInfo, LeagueDetail, Finances, Stadium, Events, Offers, Players, Lineup und mappt die Backend-DTOs in das existierende Solo-`Game`-Modell — Solo-Screens (`LeagueTableView`, `SquadView`) werden 1:1 wiederverwendet, kein paralleler Multiplayer-UI-Stack.
- Mutationen (Aufstellung absenden, Transfer akzeptieren, Stadion ausbauen, Vertrag verlängern, Kredit/Termingeld, Spieltag) gehen über Wrapper-Methoden, die nach erfolgreichem Backend-Call die abhängigen Daten neu laden und im `Game` re-applyen.
- Backend-Erweiterungen: `GET /api/leagues/:id/players/own` für die eigene Spielerliste, `GET /api/leagues/:id/matchday/last` für persistierte Spieltag-Historie, `SeasonClubDTO` um `played/won/drawn/lost` ergänzt.
- Synthetischer Solo-Manager im in-memory-`Game` macht den existierenden `SquadView` (der `game.managers.first(teamID:)` braucht) ohne Anpassung online-fähig.
- Bekannte Lücken in dieser Alpha: kein Push-Empfänger iOS-seitig (Sender existiert), kein Buy-Offer-Flow auf andere Vereine (nur Verkauf), Saisonende Spieltag 34 ungetestet, Toto-/Trainingslager-UI im Online-Modus offen, Match-History ohne Tor-Schützen-/Karten-Listen (DB persistiert das nicht).
Cloud-Backup mit Apple Sign-In — das Fundament für Online-Multiplayer
0.18.0 markiert einen Wendepunkt: Hinter den Kulissen entsteht das Backend für den geplanten Online-Multiplayer. Sichtbar wird das jetzt schon durch ein optionales Cloud-Backup für Solo-Spielstände — komplett gekapselt, der klassische Solo-Pfad bleibt bit-perfect unverändert.
- ▸Neuer Punkt „Cloud-Backup" im Sonstiges-Menü: Mit Apple anmelden, aktuellen Spielstand sichern, Anzeigename frei wählen. Wer's ignoriert, merkt keinen Unterschied — kein Login-Zwang, kein neues Onboarding.
- ▸Wiederherstellen legt einen ZUSÄTZLICHEN lokalen Spielstand an („Name (Cloud)") — das laufende Spiel wird nicht überraschend ersetzt. Lokale Saves bleiben weiter im Documents-Ordner liegen wie immer.
- ▸Backend self-hosted auf Franks NAS unter `kicker-atari.de/api/`. Postgres für State, Redis für später (Job-Queue), Caddy als Reverse-Proxy, alles in Docker.
- ▸Apple Sign-In als bewusste Authentifizierungs-Entscheidung: keine Passwörter, kein E-Mail-Bestätigungs-Tanz, ein Tap und drin. Pseudonym frei wählbar.
- ▸Vorbereitung für den Online-Multiplayer (Konzept v0.4 in `docs/multiplayer-concept-v0.4.md`): Saisonliga (asynchron) und Spieleabend (live), max. 6 Manager pro Liga, persistent über Saisons. Datenmodell + Match-Engine-Port kommen in 0.19.
Technische Details
- Backend: Vapor 4 (Swift) + Fluent + JWT, Postgres 16 + Redis 7, Caddy bare-metal als Reverse-Proxy unter `kicker-atari.de/api/*`. Eigenes Repo `kicker-backend/` neben dem iOS-Projekt.
- iOS: ASAuthorizationAppleIDProvider, Keychain für Session-Tokens (HMAC-JWT, 30 Tage), URLSession für die REST-Roundtrips. Bestehender `SaveEngine` bit-perfect unverändert — der Cloud-Service liest nur einen Snapshot.
- Bundle-ID auf `xyz.weigand.kickerst` umgestellt (sauberer Apple-Sign-In-Identifier).
- Build-System: BuildKit-Cache-Mount im Backend-Dockerfile reduziert Re-Builds von 10 Min auf 1-2 Min — Iteration ist jetzt erträglich.
Energie-Drain je Schwierigkeit, Event 12 originalgetreu
Zwei kleine, aber wirkungsvolle Originaltreue-Fixes in der Engine: der Energie-Drain pro Spieltag skaliert jetzt mit der Schwierigkeitsstufe (Tribute-Edition), und das mysteriöse „Spieler verreist"-Event ist endlich richtig portiert — als 2-6-wöchiges Pseudo-Trainingslager statt als Krankheit.
- ▸Energie-Drain pro Schwierigkeit (Tribute): Anfänger ×0.5 (halber Drain — Krankheit selten), Amateur ×0.7, Fortgeschrittener ×1.0 (Original), Semiprofi ×1.2, Experte ×1.5 (deutlich häufiger krank). Default-Stufe 2 ändert nichts — bestehende Saves bleiben stabil.
- ▸Authentic-Edition bleibt strikt × 1.0 — das Original (KICKER.BAS:4006) kennt diesen Hebel nicht und behält den Werte-1-zu-1.
- ▸Event 12 endlich richtig: Spieler verreist 2-6 Wochen (Pseudo-Trainingslager), kein Krankheits-Status, kein Camp-Boost beim Zurückkommen — exakt wie KICKER.BAS:994-999 (Pl.info 60/61/15 gesetzt, Status bleibt .ok).
- ▸Pseudo-Camp ohne Boost: trainingCampIndex = nil → applyTrainingCampReturn macht nichts (Original Pseudo-Index 6 ist kein echtes Camp).
- ▸Aufstellungsfilter: Event-12-Spieler werden wie 13er-Camp-Spieler behandelt — nur verfügbare Spieler kommen in die Auslosung, niemand wird aus der laufenden Spielszene gezogen.
UEFA-Cup-Endspiel: Sprite-Elfmeterschiessen, Pokal-Übersicht, Sieger-Show
Der UEFA-Cup ist jetzt komplett spielbar — vom interaktiven Hin/Rückspiel bis zum animierten Endspiel mit Pokalsieger-Show. Das Elfmeterschiessen läuft als SpriteKit-Choreographie mit echten Spieler-Trikots, korrektem Spielfeld (5er → 11m → 16er → Strafraumbogen) und originalen Sounds. Pokal-Übersicht mit Pagination, gelb hervorgehobenem Sieger, Hin- und Rückspielergebnis pro Zeile. Plus zwei neue Cheats `#ELFER` und `#UEFAFINALE` zum direkten Test.
- ▸Sprite-basiertes Elfmeterschiessen: echte PlayerSprite-Männlein in den Trikots der jeweiligen Mannschaft, Schütze läuft vom Anlaufpunkt zum Ball, Vorhol-Animation, Schuss, Torwart hechtet parallel — pro Schuss sanftes Fade-out/Fade-in
- ▸Original-Sounds beim Schiessen: kick.wav (Schuss), cheer.wav (Tor), daneben.wav (Verschossen) — gleiche Audio-Library wie die Spielszenen
- ▸UEFA-Standardregel im Elfmeterschiessen: 5 Schuss pro Team mit early-termination (sobald uneinholbar), bei Gleichstand Sudden-Death pair-by-pair
- ▸Korrektes Top-Down-Spielfeld: Tor + Torraum (5er) + Elfmeterpunkt + Strafraum (16er) + Strafraumbogen — Bogen NUR ausserhalb des 16ers sichtbar
- ▸Trefferanzeige links/rechts vom Score: grüner Soccerball pro Tor, roter pro Verschossen — keine ✕-Markierung, alle Slots gleich breit
- ▸Penalty-Animation respektiert die Spielszenen-Wahl: bei „Höhepunkte: Nein" wird auch das Schiessen nicht animiert, direkt Match-Result
- ▸Pokal-Übersicht mit Pagination: 14 Paarungen pro Seite, Header `Paarung | Hin | Rück`, Sieger gelb, Verlierer cyan, n.V./i.E.-Suffix am Rück-Score
- ▸Tie-Detail-Screen `PAARUNG` direkt nach dem eigenen Rückspiel: Hin-Score, Rück-Score, Aggregat, Sieger gelb hervorgehoben
- ▸UEFA-Sieger-/Verlierer-Screen zeigt Hin UND Rück: Banner alternierend `HIN Bayern 3:1 Liverpool` / `RÜCK Liverpool 0:2 Bayern`
- ▸Internationaler Gegner-Name: bei UEFA-Spielen `(Italien)` unter dem Namen — Authentic-Edition originaltreu, Tribute zusätzlich Liga (`Italien · Serie A`) auf einigen Screens
- ▸Cheat `#ELFER` testet das Schiessen direkt: zwingt Hin 0:0 + Rück 0:0 + ET 0:0 → Penalty
- ▸Cheat `#UEFAFINALE` springt direkt vor das Finale, Manager im Heim-Slot
- ▸Cross-Fade zwischen Spieltagen — sanftes Aus-/Einblenden statt harter Phase-Wechsel
- ▸Atari-Spinner nur bei Cheats (vorher immer): bouncender Soccerball mit Squash-and-Stretch — beim Aufprall flachgedrückt, im Flug rund
- ▸Original-Auslosung 1:1 portiert (KICKER.BAS:10931-10999): Top 6 der Bundesliga + 58 internationale Teams (Skill ≥ 700-900) → reine Zufallspaarung pro Runde
- ▸Bug-Fix: schwarzer Bildschirm bei UEFA-Spielszenen gegen internationale Gegner (PlayerSprite-Lookup nur national) — `lookupTeamAnywhere` greift nun auch auf den int. Pool
- ▸Bug-Fix: `hasCupRueckOverview` deckt jetzt DFB UND UEFA ab — vorher fiel UEFA-Rück durch und die Übersicht wurde nie gezeigt
- ▸Bug-Fix: Penalty-Tore landeten visuell im Tor obwohl als Daneben markiert — Ball-Y stoppt nun je nach Schuss-Ergebnis (Tor/Pfosten/Torwart)
Spielszenen-Politur, Pokalsieger-Show, Bedien-Komfort
Ein dickes Update für die Spielszenen: knappere Daneben-Schüsse, neue Sounds (Anpfiff, Latte, Daneben, Foul), realistischere Elfmeter-Quote (~2/3 verwandelt) und Ball klebt nicht mehr im Spielerrücken. Dazu ein animiertes Pokalsieger- und Pokalverlierer-Bild mit Stadion-Bauchbinde, ein wiederverwendbares Eingabe-Rad mit Pfeilen und Swipe für Stadion-Ausbau und Transfer-Gebot, und ein Cheat-Menü mit Atari-Spinner für Saison-Sprünge.
- ▸Spielszenen: Daneben-Schüsse landen jetzt knapp am Pfosten neben dem Tor (statt weit weg), Lattentreffer stoppt am vorderen Tor, neue Sounds anpfiff/latte/daneben/foul aus dem sounds/-Ordner
- ▸Elfmeter-Quote: ~2/3 verwandelt durch Tuning des Penalty-Mix (25 % der echten Tore als Elfmeter visualisiert + 3 % Fehl-Elfmeter als Extras) — Engine-Ergebnis bleibt unverändert
- ▸Ballführung: Der Ball liegt jetzt vor den Füßen des dribbelnden Spielers (mit leichter Diagonale), nicht mehr im Rücken oder unter ihm
- ▸DigitWheel: Stadion-Ausbau und Transfer-Gebot teilen sich eine neue Eingabe — sichtbare ▲/▼-Pfeile (44 × 44 pt), Swipe-up/down auf der Ziffer, Auto-Repeat beim Halten
- ▸Pokalsieger-Screen: dfbpokal_gewinner.jpeg als Hintergrund, animierte Bauchbinde mit „[Pokal]-SIEGER · Mannschaft“, Wechsel zur Spielpaarung+Ergebnis, champions.wav in halber Geschwindigkeit
- ▸Pokalverlierer-Screen: separater dfbloser.jpeg-Background mit roter Banderole und loser.mp3, wenn das eigene Team das Finale verliert
- ▸Sanftes Aus-/Einblenden auf Pokal-Screens — Wechsel zum nächsten Spieltag wirkt nicht mehr hart
- ▸Cheat-Code-Menü: Atari-ST-Spinner während Saison-Sprüngen (mind. 5 s sichtbar), apply läuft asynchron, springt direkt aufs Hauptmenü zurück; tippen auf eine Code-Zeile überträgt den Code ins Eingabefeld
- ▸DFBFINALE-Cheat: rekonstruiert das Finale falls schon vorbei, Manager-Team mit Status .ok, Sperren weg, Verträge ≥30 Wochen — keine Lawine an Vertrags-Events nach dem Sprung
- ▸Cheats sind nicht mehr permanent in „Sonstiges“ sichtbar — 3-Tap auf die Versions-Zeile in „Über“ öffnet das Cheat-Eingabefeld direkt
- ▸Über-Seite: Schrift +20 %, Triple-Tap auf Version/Build robust per Button-Hit-Area
- ▸Cheat-Code-Liste: zwei Spalten (Mid-Game-Boosts links, Saison-Sprünge rechts) mit großzügigem Tap-Bereich
- ▸Anzahl-Manager-Auswahl: zwei Spalten à 3 Zeilen (1–3 links, 4–6 rechts)
- ▸Anpfiff-Sound erst wenn Pre-Match-Bild ausgeblendet ist (0,7 s Delay nach OK / Halbzeit-Weiter)
- ▸x/y-Counter aus Ereignissen, Verkaufsangeboten und Pre-Match-Events entfernt
- ▸Spielerabgang („Spieler verlässt Verein“) zeigt jetzt spielerweg.jpeg als Hintergrund
- ▸Finale verloren: kein „du bist ausgeschieden“-Screen mehr — das Finale war ja das Ende
v0.15.0Beta
26. April 2026Themed Pixel-Art-Hintergründe für Pokal & alle Ereignisse
Der Pokal-Voraus-Screen und alle Ereignisse-Meldungen bekommen eigene Pixel-Art-Hintergründe — vom DFB-Pokal über rote/gelbe Karte und Krankheit bis zu jedem einzelnen Geld-, Moral-, Karrieren- und TV-Rechte-Ereignis. Plus ein hartnäckiger Bug, der Karriere-Beendet-Meldungen falschen Spielern zugeordnet hat, ist endlich weg.
- ▸Pokal-Voraus-Meldung („Nach der Auslosung der N. Runde …“) und Pokal-Tag-Opener nutzen einen neuen Hintergrund mit goldenem Pokal links — Text sitzt sauber rechts daneben
- ▸Rote Karte, gelbe-Karte-Sperre und Krankheits-Meldungen zeigen jetzt eigene Schiri- und Spieler-Szenen statt des generischen Spielfelds
- ▸Alle 13 Ereignis-Arten aus EREIGNIS.KDT (Geld+, Geld−, Technik, Energie, Moral, Zusammenspiel, Karriereende, geschenkter Spieler, Krankheit, Trainingslager, TV-Rechte) bekommen jeweils ein eigenes Pixel-Art-Motiv
- ▸Bugfix Event-Meldungen: Wenn früher „Littbarski beendet seine Karriere“ angezeigt wurde, blieb Littbarski oft trotzdem im Kader — ein anderer Spieler ging. Meldung und Effekt treffen jetzt denselben Spieler (Original KICKER.BAS:845-857)
- ▸Krankheits-Meldungen mit grösserer, linksbündiger Schrift wie eine Tagebuch-Notiz neben dem sitzenden Spieler
- ▸Pro Bild kalibrierter Sicherheitsabstand links — keine Überlagerung von Schiri-Arm, Pokal oder Spieler-Motiv durch den Text
v0.14.0Beta
25. April 2026Eintrittsgelder-Fix, UX-Vereinheitlichung, Layout-Politur
Ein hartnäckiger Finanz-Bug ist endlich weg, und viele Screens bekommen ein einheitliches Layout: gleiche Spaltenhöhen, gleiche Schriftgrößen, gleiche Optionen-Anordnung wie im Original-Spieltaktik-Screen.
- ▸Heimspiel-Eintrittsgelder: Anzeige (Steh- und Sitzplatzbesucher) und tatsächliche Einnahme stimmen wieder überein — kein zweiter Zufallswurf, der die Kasse von der Tafel abweichen ließ
- ▸SONSTIGES, STADION, LIGAINFO, SCHWIERIGKEITSSTUFE und SPIELTAKTIK haben jetzt dieselbe Optik: Optionen vertikal mittig zwischen Titel und Button, einheitliche Checkbox- und Schriftgrößen
- ▸STATISTIKEN-Menü zentriert, Schrift +30 % — endlich gut lesbar
- ▸Aufstellung, Positionen, Vertragsverlängerung, Trainingslager: gleiche Spaltenhöhe geometriebasiert berechnet, kein Zeilen-Hüpfen mehr zwischen den Screens
- ▸Spieltag-Ergebnisse und Tabelle +20 % Schrift, Manager-Info -20 % — Lesbarkeit auf das tatsächliche iPad-Display angepasst
- ▸Werbung, Fußballwelt, Spielebilanz und Szenario-Auswahl im einheitlichen Layout
- ▸Neue Default-Schwierigkeitsstufe: »mittel« statt »leicht«
- ▸Triple-Tap-Cheat im ÜBER-Screen funktioniert wieder zuverlässig (eigener Counter mit 800 ms Reset)
- ▸Doppel-Eintrag »Atari ST 1.82.3« im ÜBER-Screen entfernt
- ▸Positionen-Editor: vier Positions-Buttons jetzt linksbündig analog zur Liste daneben
v0.13.1Beta
24. April 2026Spieler entwickeln sich — Form, Moral, Zusammenspiel
Drei Mechaniken, die bisher nur angedeutet waren, laufen jetzt richtig: Deine Spieler werden im Laufe der Saison stärker oder schwächer, ihre Form hängt an ihrer tatsächlichen Leistung, und die Mannschaft hat ein Stimmungsbarometer.
- ▸Spielerentwicklung: Wer konstant gut spielt, wird mit der Zeit stärker. Wer häufig schwach spielt, verliert Skill-Punkte
- ▸Die Entwicklung betrifft alle Spieler im Spiel — auch die gegnerischen Mannschaften verändern sich von Saison zu Saison
- ▸Form ist kein reiner Zufallswert mehr: Sie folgt der Spielleistung, mit einer kleinen Portion Schwankung
- ▸Team-Moral und Zusammenspiel sind jetzt echte, gespeicherte Werte, die sich durch Ereignisse verändern und die Mannschaftsstärke beeinflussen
- ▸Mannschafts-Ereignisse (Streit, gute Laune, Zusammenhalt) wirken jetzt dort, wo sie sollten — nicht mehr nur auf die Form einzelner Spieler
v0.13.0Beta
24. April 2026Finanzen, Pokal, Verletzungen — Original-Regeln
Das größte Update bisher: Finanzen, der DFB-Pokal-Ablauf, In-Game-Verletzungen und das Karten-System sind komplett auf die Regeln des Atari-Originals umgebaut.
- ▸DFB-Pokal hat wieder einen richtigen Ablauf: Eröffnungs-Screen, getrennte Hin- und Rückspiel-Übersichten, eigenes Rückspiel dazwischen
- ▸Spieler können sich jetzt während des Matches verletzen — Pausendauer zwischen einer und acht Wochen
- ▸Gelbe und rote Karten werden wie im Original gezählt; Sperren sind bei Auswärtsspielen länger als bei Heimspielen
- ▸Ereignisse-Screen erscheint jetzt VOR dem Hauptmenü: Sperren, Krankheiten und Verletzungen siehst du, bevor du die Aufstellung machst
- ▸Startkapital, Spielergehälter, Stadion-Kosten, Reisekosten und wöchentliche Sonstiges-Posten folgen den Original-Formeln
- ▸Pokal-Matches zeigen jetzt Torfolge und Karten wie Ligaspiele, inklusive Verlängerung bei Unentschieden
- ▸Sechs Sprung-Cheats für den DFB-Pokal (#DFB1 bis #DFB6) zum schnellen Testen der Runden
v0.12.1Beta
23. April 2026Credits & Tribute-Edition-Hinweis
Kleiner, aber wichtiger Feinschliff auf den Info-Screens: Jahreszahlen, der Hinweis auf die Tribute-Edition und die iPad-Version stehen jetzt überall richtig drin.
- ▸Programminfo und Über-Screen zeigen Copyright, Original-Version vom Januar 1991 und den Tribute-Edition-Hinweis
- ▸Version und Build-Nummer werden automatisch aus der App gezogen — sie bleiben beim nächsten Update immer aktuell
v0.12.0Beta
23. April 2026Zwölf Bugs auf einmal gefixt
Sammel-Release nach dem Feedback aus der 0.11er-Serie: Trainingslager, Aufstellung, Höhepunkte, Pokal-Ablauf, Transferliste und die Leistungs-Grafik bekommen Politur.
- ▸Trainingslager: Reservisten werden mit Häkchen markiert, Spieler im Camp verschwinden aus der Aufstellung und werden als »verreist« angezeigt
- ▸Aufstellung: Die Werte-Spalten sind wieder sauber zentriert und lesbar
- ▸Spielerdetail: Die Leistungs-Historie zeigt jetzt tatsächlich die Entwicklung über die letzten Spieltage in der richtigen Skala
- ▸Höhepunkte: Tore gehen nicht mehr neben das Tor, Elfmeterschützen stehen wieder aufrecht
- ▸DFB-Pokal: Ankündigung eine Woche vor der Runde, eigene Pokal-Ankündigungsseite am Spieltag, persönliche Auswertung nach jedem Match
- ▸Transferliste: Mitteilung nur einmal pro Spieltag, außerhalb der Transferphase erscheint die Original-Meldung
- ▸Transferwerte passen sich jetzt Spieltag für Spieltag an (bis zu ±25 %), Angebote wirken wieder angemessen
- ▸Angebote-Screen erscheint auch dann, wenn keine Gebote vorliegen — mit klarer Meldung
v0.11.2Beta
22. April 2026Transfer-Verkauf & DFB-Pokal nach Original-Regeln
Zwei Abläufe exakt auf die Regeln des Originals getrimmt: der Verkauf eigener Spieler und das DFB-Pokal-Format mit Hin- und Rückspiel.
- ▸Vor jedem Spieltag siehst du für jeden selbst zum Verkauf gestellten Spieler die eingegangenen Gebote und kannst annehmen oder ablehnen
- ▸DFB-Pokal: Hinspiel mit Verlängerung bei Unentschieden — bei Entscheidung nach Verlängerung entfällt das Rückspiel, bei Remis gibt es ein eigenständiges Rückspiel
- ▸Nach jeder Pokal-Paarung Gesamtübersicht: Hinspiel, Rückspiel, Gesamtergebnis mit markiertem Sieger
- ▸Vor dem Rückspiel steht wieder das Hinspiel-Ergebnis unter den Trikots
- ▸Persönliche Ereignis-Meldung: »Du ziehst ins Viertelfinale ein« / »Du bist ausgeschieden« nach jeder entschiedenen Runde
- ▸Die Transfermarkt-Meldungen kommen nur noch am richtigen Spieltag, nicht mehr am Pokal-Zwischentag
v0.11.1Beta
21. April 2026Finanzen zu Spieltag-Beginn, kleinere Fixes
Drei Iterationen nach dem 0.11.0-Feedback: Finanzen laufen wieder dort, wo sie im Original standen, und ein paar Detail-Bugs sind weg.
- ▸Finanz-Übersicht erscheint zu Beginn des Spieltags pro Manager — nach dem Handover, vor dem Hauptmenü, wie im Original
- ▸Sie wird nur angezeigt, wenn der Kontostand liga-abhängige Grenzen reißt; Standardsituationen überspringen sie
- ▸Der Saisonstart-Banner erscheint nach dem Laden eines Spielstands nicht mehr ein zweites Mal
- ▸Spielstände aus der Vorgänger-Version laden ohne Probleme weiter
v0.11.0Beta
21. April 2026Hot-Seat-Multiplayer rundum überarbeitet
Der Hot-Seat-Ablauf für mehrere Spieler ist Schritt für Schritt so nachgebaut, wie er im Original funktioniert — dazu gibt es jetzt eine Spielzeit-Anzeige.
- ▸Saison-Start-Banner vor dem ersten Spieltag jeder Saison, Wortlaut wörtlich aus dem Original
- ▸»NAME ist dran!«-Anzeige vor dem Hauptmenü jedes Managers (beim Solo-Spiel übersprungen)
- ▸Zwischen zwei Spielern blendet der Screen kurz auf Schwarz — der nächste sieht die Eingaben des vorherigen nicht
- ▸In Tabelle und Ergebnis-Screen sind ALLE menschlichen Manager-Teams hellblau markiert, nicht nur das aktuell laufende
- ▸Der »Spielstand beenden«-Screen zeigt die gesamte bisherige Spielzeit und die Dauer der aktuellen Sitzung
- ▸Liga-Namen kommen jetzt authentisch aus den Originaldaten: Bundesliga, 2.Bundesliga, Oberliga, Verbandsliga, Landesliga
v0.10.0Beta
20. April 2026Spielszenarien & Spielszenen-Politur
Zwei große Neuerungen: unterschiedliche Welten mit eigenen Regeln (analog zum Original) und eine Polier-Runde für die Spielvisualisierung samt Hot-Seat-Details.
- ▸Sechs Pre-Set-Welten zur Auswahl: Deutschland 1990 und 1991 in Nord/Süd-Varianten, die verworfene Ligareform 1989 mit Playoffs, die TC World League mit Drei-Punkte-Regel, und die All-Stars-Europaliga
- ▸Jede Welt hat ihre eigenen Regeln: Spielmodus, Punkte pro Sieg, Tor-Boni, Playoff oder Relegation, eigene Liga- und Pokalnamen
- ▸Bestätigungs-Bildschirm nach der Welt-Auswahl mit allen Parametern im Klartext
- ▸»Welt ändern«-Editor: Vor Spielstart lassen sich alle Regeln frei anpassen
- ▸Pokal-Namen überall im Spiel aus der Welt-Definition, nicht mehr fest »DFB-Pokal« und »UEFA-Pokal«
- ▸Spielszene: Anzeige oben stabilisiert, Elfmeter-Ball liegt richtig auf dem Punkt, Ball liegt immer beim Schützen
- ▸Elfmeter mit Foul-Animation und Pfiff — keine automatische Karte mehr
- ▸Begrenzung von Kartenszenen pro Halbzeit — kein übertriebener Karten-Regen mehr
- ▸Hot-Seat: Übergabe-Screen zwischen Managern während des Spieltags; Gebote auf Mitspieler-Spieler landen in deren Verhandlungen statt per Zufall entschieden zu werden
Erstmals komplett durchspielbar
Das Ende der Spielwiese: KICKER ist auf dem iPad erstmals von vorne bis hinten durchspielbar — alle Management-Screens, alle Statistiken, komplette Saisonabläufe.
- ▸Alle Hauptmenü-Bereiche stehen: Aufstellung, Positionen, Taktik, Trainingslager, Verträge, Werbung, Eintrittspreise, Stadion-Umbau, Fußball-Toto, Spielerverkauf, Ligainfo und Spielebilanz
- ▸Komplette Statistiken: Plazierungen, Finanzrückblick und -bilanz, Torschützen, Bestenliste, Sünderliste, Auf-/Absteiger, Mannschaft des Jahres, Zuschauer
- ▸Manager-Info mit Manager-Punkten als 3D-Balken, Spieler-Info mit Leistungsdiagramm
- ▸Fünf Schwierigkeitsstufen beim Spielstart
- ▸Über-Screen mit Cheat-Freischaltung (dreimal auf die Version tippen)
- ▸Abstiegsdrohung ab Spieltag 29, Meldungen zum Sponsor-Ablauf, realistische Ereignis-Kaskaden
- ▸Kapital-Verlauf, Saison-Einnahmen und -Ausgaben sowie Pokalstatus werden gespeichert
v0.3.0Spielwiese
16. April 2026Bugfixes & Original-Details
Viele Einzelsysteme an das Original angepasst und Detail-Bugs aus 0.2 ausgeräumt.
- ▸Gespeicherte Spiele stellen Aufstellungen, Taktik, Pokal und Spielplan vollständig wieder her
- ▸Verletzungen und Krankheiten kommen wieder so häufig wie im Original
- ▸Werbeverträge komplett überarbeitet — inklusive Sofortzahlung und Sponsor-Namen auf den Trikots
- ▸Trikots als Vektorzeichnung im 16-Bit-Atari-Stil
- ▸Spielfeld-Hintergrund beim Ankündigungs-Screen vor Spielszenen
- ▸Tabelle mit Plus/Minus-Punkten, eigener Verein in Hellblau hervorgehoben
- ▸Neuer Über-Screen mit Version, Build und Credits
- ▸Neues Intro-Video
v0.2.0Spielwiese
16. April 2026Finanzen, Karten, Verletzungen, Save/Load
Große Mechaniken aus dem Original nachgezogen: detaillierte Finanzen, Karten-Logik, Verletzungen mit Dauer in Spieltagen und ein robusteres Save/Load.
- ▸Finanzübersicht mit Aufschlüsselung aller Einnahmen und Ausgaben
- ▸Gelbe und rote Karten mit realistischer Verteilung
- ▸Verletzungen und Krankheiten dauern mehrere Spieltage, nicht mehr einen einzelnen
- ▸Save/Load mit Rückwärtskompatibilität — alte Spielstände laden weiterhin
- ▸Saison mit Hin- und Rückrunde
- ▸Aufgeräumter Spieltag-Ablauf
- ▸UI-Verbesserungen in Kader, Tabelle, Finanzen und Einstellungen
v0.1.0Spielwiese
12. April 2026Erste TestFlight-Version
Der allererste Build für TestFlight: eine authentische Nachbildung des Atari-ST-Fußballmanagers KICKER als iPad-App.
- ▸Komplette Spielengine: Saison, Liga, Pokal, Finanzen, Zufallsereignisse
- ▸Original-Daten für Teams, Spieler, Länderspiele und Trainingslager
- ▸Retro-Oberfläche mit dem Original-Atari-Systemfont
- ▸Spielszenen in Seitenansicht
- ▸Original-Sounds: »Kicker!«-Stimme, Jubel, »Another One Bites the Dust«
- ▸Intro-Ablauf wie früher: PolarSoftware-Video, Mannschaftsfoto mit Credits, »Gleich gehts los!«, Willkommensbildschirm
- ▸Kader-Verwaltung, Transfermarkt, Finanz-Management
- ▸Online-Lobby für Multiplayer über iCloud
- ▸Spielstände speichern und laden