Dev Log · Anpfiff1, Elfmeter, Animation, Nahaufnahme
Zehn Bilder für einen Elfmeter, und drei davon mussten wieder raus
29. bis 31. August 2026:
Beim Elfmeterschießen fährt die Kamera nah heran: Schütze, Torwart, Tor, dahinter die Kurve. Das Bild ist fertig gebaut. Was in diesen drei Tagen daran geändert wurde, kam fast vollständig aus Sätzen wie diesem:
„nach dem schuss erhebt sich das rechte bein wieder"
Der Schuss: drei Bilder zu viel
Bild 7 war gar keine Schussposition, sondern eine aufrechte Standhaltung mit geraden Beinen. Der Ablauf las sich dadurch als Rückschwung, Bein hoch, Stehen, Bein fliegt hoch. Ersetzt durch ein bestelltes Treffer-Bild, auf dieselbe Figurenhöhe und Bodenlinie gerechnet, schussfuss_x neu gemessen: 0,862 auf 0,791.
Bild 9 kippt weit nach vorn, beide Beine hinten, das liest sich als Stolpern. Bild 10 ist ein Laufbild, das rechte Bein nach hinten hochgezogen; nach einem Durchschwung nach vorn schwingt es damit wieder nach hinten hoch. Beide sind raus. Vom Ausklang bleibt nichts Brauchbares übrig, also hält der Ablauf den Durchschwung zwei Takte und geht dann in den Stand.
Auch der Treffer wird jetzt zwei Takte gehalten. Bei zwölf Bildern je Sekunde dauerte der Moment, an dem alles hängt, 83 ms: Man sieht den Treffer nicht, man erschließt ihn aus dem Ball, der plötzlich fliegt. Der Ball löst weiterhin beim ersten der beiden Takte, er verlässt den Fuß im Moment der Berührung, nicht einen Takt später.
Und dann sieht man es zehnmal hintereinander
Was in einer Szene richtig aussieht, fällt in einem Elfmeterschießen mit zehn bis zweiundzwanzig Schüssen auseinander. Torwart und Schütze sprangen bisher jedes Mal im selben Takt und im selben Augenblick auf. Jetzt gibt es drei Reaktionspaare aus Tempo und Verzögerung, und die beiden Werte sind gekoppelt: Wer sofort hochfährt, macht das schnell; wer liegen bleibt, steht auch langsamer auf. Zwei unabhängige Würfe ergäben „spät und hektisch", und das gibt es nicht.
Gewürfelt wird deterministisch aus Schuss, Torwartecke, Ausgang und laufender Nummer, dieselbe Folge von Schüssen ergibt dieselbe Folge von Reaktionen. Und nie zweimal dieselbe hintereinander: Bei drei Varianten kommt eine Dreierfolge in jedem neunten Fall vor, und gemessen lag sie prompt dabei. Über 120 Schüsse jetzt null direkte Wiederholungen, Verteilung 42/38/40.
Zwei Befunde am fertigen Bild, die kein Kontaktblatt zeigt
„Drei verschiedene Gesichter und Frisuren." Nachgemessen besteht die Kette bei einem Fehlschuss aus zwei Bildsätzen, und innerhalb eines Satzes ist es dieselbe Person. Der Eindruck kam von Farbschmutz: keeper_relieved trug rote Striche quer über Augenbrauen, Nase, Kinn und Hals, 300 Flecken mit 1621 Pixeln, eine Größenordnung mehr als jeder andere Bildsatz. Bei Spielgröße, Kopf rund 37 px, liest sich das als anderes, verschmiertes Gesicht. Ein Reparaturlauf ersetzt jeden kleinen, voll eingeschlossenen roten Fleck durch den Median seiner Haut-Randpixel. Ein Durchgang reicht nicht: 6895 auf 97 auf 6 auf 0. Gegenprobe gegen den Stand in git: 100 Prozent der geänderten Pixel waren vorher rot.
„Eine Beinanimation, die über den Ball tritt." Bild 4 ist der Standbein-Schritt; sein Fuß landete 28 px vom Ballrand entfernt, bei 23 px Ballradius also praktisch darauf. Der Haken: Die Skalierung rechnet gegen den mittleren Schwerpunkt, und bei einem Ausfallschritt bleibt der fast stehen, während das Bein weit greift. Eine gerechnete Fuß-Korrektur hätte den Körper um 167 px springen lassen, der Fehler wäre nur verschoben. Gesetzt ist ein fester Versatz von 36 px: Lücke zum Ballrand 28 auf 61 px.
Die Kurve war ein Balkendiagramm
„fans sind nur vierecke, wo sind koepfe oder arme"
Stimmte. Der Kopf war ein Querbalken: gezeichnet wurde er (Breite minus 6) px breit und zwei bis drei hoch, bei 22 px Schulterbreite also 16 mal 2. Ein Kopf misst rund 0,40 der Schulterbreite und ist etwa so hoch wie breit; jetzt 9 mal 9 mit dunkler Haarzeile und eingezogener Schulterlinie darunter.
Dass die Kurve stilisiert ist, ist gerechnet und nicht geschludert: Bei 45 m Kameraabstand und 119 px/m wäre ein Zuschauer der ersten Reihe 110 px hoch, in ein 146 px hohes Band passt dann eine Reihe. Näher wirkt sie über die Staffelung: zehn Reihen statt dreizehn, Höhe 7 auf 19 px, Breite 8 auf 22 px. Dazu Dach mit Flutlichtreihe, Gästeblock in Gegnerfarben, Kamerablitze mit gerechneter Rate, La-Ola beim Jubel und drei große Vereinsfahnen mit echtem Wappen.
Der Torwart schaute erst traurig und war danach erleichtert
Weitschüsse benutzten die „beaten"-Bildsätze. Das sind *Reaktions*-Sätze für ein Gegentor, keine Abwehrbewegung, der Torwart trauerte also, bevor der Ball überhaupt da war, und war hinterher erleichtert. Jetzt hechtet er. Dazu ein neuer Bildsatz mit zwölf Bildern für das Aufstehen, von der Bauchlage bis zur Faust: Zwischen dem Ende des Hechtsprungs und dem Beginn der Erleichterung klaffte eine Lücke, und in der blieb er nach einem Fehlschuss reglos liegen.
Auf einem Telefon wäre das ein Absturz gewesen
Vor der Politur eine Messung aus Mobile-Sicht. Alles über fünf Sekunden im Hauptthread ist auf Android ein ANR, also ein erzwungenes Beenden durch das System.
- Laden der Bildsätze, Hauptthread: 6342 ms auf 485 ms
- Umfärben eines Bildsatzes, mitten in der Animation: 973 ms auf 0 ms
- Umfärben aller 17 Bildsätze: 12364 ms auf 944 ms
- Rohbilder und Masken im Arbeitsspeicher: 141 MB auf 0 MB
- Größe des Exports: 204,8 MB auf 165,4 MB
Der Shader, der das löst, lag seit Monaten im Projekt und wurde von niemandem benutzt. In seinem eigenen Kopfkommentar warnt er wörtlich vor dem Weg, den die Nahaufnahme genommen hatte. Bewiesen, nicht behauptet: Ein Bild wurde beide Wege gerechnet und Pixel für Pixel verglichen, größte Abweichung 1 von 255, kein Pixel über der Schwelle.
Beim Aufräumen kamen 96 Dateien der Art 02 (1).png zum Vorschein, 2,7 MB, und ein Ordner mit 29 verworfenen Entwürfen, 42 MB. Das Spiel lädt sie nie, die Prüfwerkzeuge zählten sie aber mit und meldeten daraufhin einen Maßstabsfehler an einem „Bild 14", das es gar nicht gibt. Der Bildsatz-Ordner fällt von 78 auf 35 MB.
Und dann kam sie nicht
Am 31. August ist die Nahaufnahme aus den Neuigkeiten von 2.1.7 geflogen, aus Steam, itch.io, Discord und dem Blogtext. Sie wird mit dieser Version nicht ausgeliefert, und ein Patchnotiz-Punkt, den man im Spiel nicht findet, ist schlimmer als keiner. Der Changelog behält den Abschnitt als internen Vermerk, ausdrücklich als „nicht in diesem Release" markiert.
Offen bleibt die volle Abnahme über alle 24 Kombinationen aus Zone und Ausgang. Und keeper_relieved hat weiterhin eine welligere Haarsilhouette und ein breiteres Gesicht als die Zonen-Bildsätze. Das ist ein echter Zeichenunterschied und nur mit einem neu bestellten Bildsatz zu beheben.
Der Manufaktur-Dev
Herzliche Grüße aus der WerkstattDigitale Manufaktur Rudolstadt