Dev Log · Anpfiff1, Update, Messen, Spielstände
Anpfiff1 2.2.1: drei Sekunden Stillstand weniger und eine Statistik, die stimmt
20. bis 27. September 2026:
Seit dem 27. September liegt Anpfiff1 2.2.1 bei Google Play, auf Steam und bei itch.io, seit dem 28. September auch im App Store. Es ist ein Optimierungs-Patch, und diesmal ohne Funktion, mit der man werben könnte. Grundlage waren zwei Prüfdurchgänge über den ganzen Code, jeder Befund wurde einzeln nachgeprüft, bevor er in die Liste kam. Fast alles davon lässt sich mit einer Zahl belegen.
Erst messen, dann anfassen
Vor der ersten Änderung lief jede der 148 Prüfszenen dreimal einzeln, das Ergebnis steht als Ausgangsstand fest: grün, rot, wackelig oder hängt. Danach gilt eine Regel für jeden Schritt: Keine Szene wird schlechter, die Liste der roten wird nur kürzer. Wer an Pokal oder Tabelle dreht, lässt die Finanzprüfungen mitlaufen.
Dazu kommt die Pflichtprobe an echten Spielständen. Kein Schritt darf einen bestehenden Stand unladbar machen.
Drei Sekunden Stillstand nach jeder Woche
Das automatische Speichern nach jeder Spielwoche hielt das Spiel am PC gut 3 Sekunden an, mit einer frischen Karriere. Auf dem Handy ist es ein Vielfaches. Jetzt schreibt ein Hintergrundprozess die Datei, ein kleiner Hinweis „Speichere…“ erscheint, und Eingaben sind so lange gesperrt, damit der Spielstand sicher zusammenpasst.
Ein Zähler sorgt dafür, dass ein schnelleres, ausdrückliches Speichern das laufende Hintergrundspeichern überholt und nicht von ihm überschrieben wird. Geprüft ist das mit einer eigenen Szene, acht von acht Fällen laufen.
Weitere Zeiten, jeweils vorher und nachher gemessen:
- Karrierestart: die Spielerlisten laden parallel, 3,9 auf 1,9 Sekunden, mit bitgleichem Ergebnis.
- Erstes Interview nach dem Spieltag: die Daten laden im Hintergrund vor, von 1.054 Millisekunden auf 0.
- Schrift: Chinesisch, Japanisch und Koreanisch teilten sich bisher eine Schrift in japanischen Zeichenformen. Jede Sprache hat jetzt ihre eigene, zusammen 13 statt 19 MB.
Was gemessen und dann nicht gebaut wurde
Geplant war ein Hebel, der die Hintergrund-Simulation beschleunigt: leere Minuten überspringen. Also wurden 200 Spiele profiliert, 27,5 Millisekunden je Spiel. Die Zeit steckt woanders:
- Chancen einschließlich der Ereignisse: 36 Prozent
- Aufbau des Spiels: 24 Prozent
- Prüfung der KI-Wechsel: 15 Prozent
- Disziplin: 11 Prozent
Leere Minuten kosten dank eines vorgezogenen Zufallswurfs fast nichts mehr. Der Hebel hätte unter 5 Prozent gebracht und dafür die Zufallsfolge verschoben, also die Ergebnisse. Er ist verworfen. Genauso eine Interviewdatei je Sprache: 49 mal 0,9 MB wären 45 MB gewesen statt 11.
Eine Statistik mit einer Quelle
Die Bestandsaufnahme hatte es in sich:
- zwei getrennte Speicher für Spielberichte, mit verschiedenen Feldnamen für dasselbe
- fünf Stellen, die Spiel-Kennungen bauen, in zusammen rund zehn Formaten
- rund 50 Stellen in 12 Dateien, die die Berichte direkt durchlaufen
- rund 20 Nebenzähler, die selbst mitzählen, sechs davon nie gelesen
Daraus kamen die Fehler, die Spieler gemeldet hatten: Eigentore für den Schützen, Gelb-Rot als Rot, Einwechsler als Startelf.
Jetzt hat jedes Spiel eine Kennung, unter ihr liegt ein Bericht, und jede Statistik fragt eine einzige Auskunftsstelle. Ein Prüfwerkzeug findet direkte Zugriffe, vorher waren es 75, jetzt sind es 0. Gemessen an einer ganzen Saison aller Länder (7.867 Berichte) kostet das 4,4 MB Arbeitsspeicher und 1,4 MB im Spielstand, dafür entfallen sieben Zähler. Ein kompaktes Speicherformat war damit gar nicht nötig.
Spielstände von 2.2.0 bleiben ladbar, auch umgekehrt: Ein Stand aus der neuen Zählweise lässt sich mit der alten Version öffnen. Eine einzige Lücke fand sich, 2.2.0 greift ohne Prüfung auf die Kartenzähler zu, und ein leeres Feld warf bei jeder Karte einen Skriptfehler, 79 in vier Wochen. Deshalb schreibt der Umbau das alte Gerüst weiter mit.
Nach dem Laden weiterspielen wie vorher
Eine Zahl, die nur Änderungen meldet, sagt nichts über Fehler. Also gilt eine strengere Regel: Das Spiel muss nach dem Laden exakt so weiterlaufen wie ohne Laden. Geprüft wird mit gleicher Zufallssaat, einmal mit Laden, einmal ohne, danach müssen beide Aufnahmen gleich sein.
Gefunden hat das fünf Speicherfehler:
- Jugend- und Medizinkosten wurden nur für den eigenen Verein gespeichert. Nach jedem Laden zahlten 591 Vereine keine Medizinkosten und 104 keine Jugendkosten mehr, mit mehr Geld und anderen Transfers als Folge.
- Die Ewige Tabelle räumte nach jedem Laden auf und nahm jedem Absteiger seine Erstliga-Geschichte.
- Historische Tabellen kamen als Kommazahlen zurück, aus 5338 wurde 5338.0.
- Der Bewertungsbildschirm am Saisonende war nach dem Laden eine Liste aus leeren Einträgen.
- Der Auf- und Abstiegsbildschirm zeigte keine Aufsteiger.
Als Gegenprobe wurden acht echte Spielstände geladen und gespielt, aus Saison 1 bis 10 und sieben Ländern, fehlerfrei. Nebenbei stellte sich heraus, dass die Tests einen anderen Ablauf fuhren als das Spiel: Karrierestart und Saisonvorbereitung steckten nur in Bildschirmen. Jetzt rufen Bildschirm und Test dieselben Funktionen auf.
Zwei Dinge, die Spieler gemeldet hatten
Wappen. 654 von 1.771 Vereinen trugen ein Wappen, das dem eines anderen glich, vor allem nach den neuen Ländern. Jetzt sind es 1.771 von 1.771 verschieden. Kein einziges Trikot hat sich dabei geändert, und laufende Spielstände behalten ihre Wappen.
Kommentar und Spiellage. Kein Abseits mehr nach einem Einwurf, keine dünn besetzten Ränge bei 150.000 Zuschauern, kein Schnee in Südamerika, kein „Direkt Rot“ bei Gelb-Rot. Die Zuschauerzeile hatte die Zahl vor dem Anpfiff verloren und rechnete mit 0. Es ist eine lange Liste kleiner Widersprüche, jeder einzeln nachgestellt.
Sicherheit und Datenschutz
- Ein manipulierter Spielstand mit eingebettetem Programmcode wird nie ausgeführt.
- Käufe bei Google werden mit dem Lizenzschlüssel der App gegengeprüft, und der Kaufbestand ist versiegelt. Bereits gekaufte Inhalte bleiben erhalten.
- Werbung erscheint erst nach Einwilligung.
- Jedes Gerät meldet sich mit einem eigenen Geheimnis bei der Cloud an. Die Kennung allein reicht nicht mehr.
- Der Server ist seit dem 23. September gehärtet.
- „Konto löschen“ sagt ehrlich, ob auch die Online-Daten gelöscht wurden.
Unter der Haube
366 ungenutzte Funktionen mit rund 5.850 Zeilen sind entfernt, die Version steht nur noch an einer Stelle, und der Godot-Editor bleibt bei Builds offen, weil die Builds nur ihren eigenen Prozess beenden.
Was bewusst offen bleibt
Arabisch läuft jetzt von rechts nach links. 13 Bildschirme, die an Hintergrundbilder gebunden sind, bleiben bewusst ungespiegelt, ihre Texte laufen trotzdem von rechts nach links.
Ein Patch, in dem sich fast nichts anders anfühlt außer dem, was vorher hakte, ist ein gelungener.
Herzliche Grüße aus der WerkstattDigitale Manufaktur Rudolstadt