Direkt zum Inhalt

Die fabelhafte Welt der Mathematik: Wie ein Fehler in Half-Life 2 rückwärts durch die Zeit reiste

Als Softwareentwickler das beliebte Computerspiel neun Jahre nach seinem Erscheinen kompilierten, funktionierte es nicht mehr. Das Problem: Half-Life 2 ist ein chaotisches System.
Zwei Arcade-Spielautomaten mit dem Spiel "Half-Life 2: Survivor". Der linke Bildschirm zeigt das Logo des Spiels mit dem Lambda-Symbol und der Aufschrift "Half-Life 2". Der rechte Bildschirm zeigt eine Spielsituation. Beide Automaten sind mit Steuerungselementen ausgestattet und befinden sich in einer Spielhalle.
Das inzwischen kultige Spiel Half-Life 2 hatte jahrelang einen unbemerkten Bug.
Viele Menschen denken, Mathematik sei kompliziert und öde. In dieser Serie möchten wir das widerlegen – und stellen unsere liebsten Gegenbeispiele vor: von schlechtem Wetter über magische Verdopplungen bis hin zu Steuertricks. Die Artikel können Sie hier lesen; viele davon können Sie auch im Podcast »Geschichten aus der Mathematik« hören.

Die Erde wurde von einer feindlichen Alien-Zivilisation eingenommen, und Sie sind Teil eines kleinen Widerstands, der sich gegen diese Herrschaft wehrt. Kommt Ihnen die Geschichte bekannt vor? Wenn ja, dann haben Sie wahrscheinlich mal Zeit mit dem Computerspiel Half-Life 2 verbracht, dem 2004 von der Softwarefirma Valve herausgebrachten Ego-Shooter. Das Spiel erfreute sich in den 2000er-Jahren großer Beliebtheit und wurde zeitweise von Zehntausenden Menschen gleichzeitig genutzt.

Neun Jahre nach Erscheinen von Half-Life 2 versuchten die Softwareentwickler Tom Forsyth und Joe Ludwig das Spiel anzupassen, damit man es auf VR-Brillen spielen kann. Zunächst schien alles zu funktionieren – teilweise sogar noch besser als im Original. »Am Anfang gibt es einen Moment, in dem man Kisten stapeln muss, was im Original etwas nervig ist – der Stapel fällt immer wieder um –, aber in VR ist es wirklich einfach, sie gut zu platzieren«, resümiert Forsyth in einem Beitrag auf der Social-Media-Plattform »Mastodon«.

Die beiden Programmierer bereiten alles so weit vor, um eine Betaversion des Spiels für VR-Brillen zu veröffentlichen. Forsyth beschließt, Half-Life 2 sicherheitshalber vorher noch einmal von vorn bis hinten durchzuspielen – bislang hatten sie nur die kritischen Spielstellen getestet. Alles schien wunderbar zu funktionieren. Bis Forsyth in einen Korridor lief und durch eine Tür gehen wollte. Dort steckte er fest. »Ich war nicht tot, ich konnte mich nur nicht bewegen«, schreibt er. »Ich saß mit einem Wachmann in einem Korridor fest und konnte nirgendwo hingehen. Seltsam.«

»Der Bug scheint in der Zeit zurückgereist zu sein und das Original infiziert zu haben!«Tom Forsyth, Spieleentwickler

Nicht weiter aufregend, könnte man denken. Da haben die beiden Programmierer beim Anpassen des Spiels auf die VR-Version wohl einen Bug eingebaut. Doch als Forsyth und Ludwig das Originalspiel neu kompilieren, tritt der Fehler ebenfalls auf. »An diesem Punkt gerieten die Leute in Panik – das ist kein normaler Bug. Er schien in der Zeit zurückgereist zu sein und das Original infiziert zu haben!«, erinnert sich Forsyth. Nun lautete die Frage nicht mehr: Wieso funktioniert das Spiel nicht? Sondern: Wie konnte das Spiel jemals funktionieren?

Wie konnte Half-Life 2 jemals richtig laufen?

Nach etwa einem Tag erkannten die Valve-Entwickler, was hinter dem Problem mit der Tür steckte (und zwar wortwörtlich): In dem Spiel steht standardmäßig ein zweiter Wachmann hinter der Tür. Wenn man sie öffnen will, streift sie seinen Fuß und geht wieder zu, bis sie ins Schloss fällt. Die Platzierung des Wachmanns ist nur um wenige Millimeter falsch gesetzt worden. Wenn man ihn also entsprechend verschiebt, dann löst sich das Problem in Luft auf.

Aber warum konnten Spielerinnen und Spieler auf der ganzen Welt jahrelang Half-Life 2 zocken, ohne jemals auf diesen Bug zu stoßen?

Um das zu verstehen, muss man etwas tiefer in die zugrunde liegende Technik von Computerspielen eindringen. Half-Life 2 bestach seinerzeit durch seine Grafik: Es war eines der ersten Spiele, das auf einer Physik-Engine basierte. Diese ermöglicht es, realistische Prozesse zu simulieren, etwa wenn zwei Objekte zusammenstoßen, und die Bewegungen anschließend vorherzusagen. Eine Physik-Engine erkennt Kollisionen und berechnet die dabei entstehenden Kräfte nach physikalischen Gesetzmäßigkeiten.

Das heißt: Wenn in Half-Life 2 die Tür gegen den Fuß des Wachmanns stößt, dann berechnet die Physik-Engine, was daraufhin passiert. Früher ging die Tür immer problemlos auf, doch als die Entwickler das Spiel neun Jahre später neu kompiliert hatten, stieß sie gegen den Fuß des Wachmanns und fiel zu. An der Physik-Engine hatten die Programmierer nichts geändert. Was also verursachte den Unterschied?

Eine Brücke zwischen Soft- und Hardware

Dafür müssen wir noch eine Ebene tiefer eintauchen, und zwar bis in die Prozessorarchitektur. Ja, jetzt wird es richtig nerdig. Denn wenn man einen Code schreibt – in der Programmiersprache seiner Wahl, zum Beispiel Ook! –, dann wird das durch einen »Compiler« in einen Maschinencode (eine Folge von Nullen und Einsen) übersetzt, der die Hardware auf dem Prozessor exakt steuert. Sprich: Leere Register XY und speichere dort YZ. Der Maschinencode muss dabei exakt auf den Prozessor zugeschnitten sein. Und das »Wörterbuch« für den Kompilierer ist die Befehlssatzarchitektur. Sie enthält unter anderem die Befehlssätze, die der Prozessor dann ausführt.

Half-Life 2 wurde ursprünglich mit der Befehlsarchitektur x87 kompiliert, in der Zahlen für Berechnungen unterschiedlich behandelt werden: Manche haben eine Präzision von 32 Bit, andere von 64 Bit und manche sogar von 80 Bit. Wann welche Genauigkeit genutzt wird, ist bei dieser Architektur allerdings recht unübersichtlich.

Als Forsyth und Ludwig jedoch das Spiel im Jahr 2013 bearbeiteten, hatte sich die Technik in der Zwischenzeit weiterentwickelt. Alle modernen Rechner nutzten inzwischen Chips, die mit der moderneren SSE-Architektur arbeiteten. Und auch sämtliche Compiler verwendeten diese Befehlsarchitektur nun standardmäßig. Sprich: Der Maschinencode, den man erhielt, wenn man den Programmcode von Half-Life 2 im Jahr 2013 kompilierte, war anders als der, den man neun Jahre zuvor erhalten hatte.

Als die Valve-Entwickler das erkannten, dachten sie, die Erklärung für ihr Problem gefunden zu haben. In der älteren Version werden Zahlen unterschiedlich gerundet, sodass die Tür wohl nicht auf den Fuß des Wachmanns traf, wodurch sie aufschwingen konnte. Doch wie sich herausstellte, ist die Auswirkung der unterschiedlichen Befehlsarchitekturen bei Weitem nicht so groß. Sowohl beim alten als auch beim neueren Maschinencode stieß die Tür gegen den Fuß des Wachmanns.

Half-Life 2 ist ein Beispiel für ein chaotisches System: Selbst kleinste Effekte können gigantische Auswirkungen haben

Die Unterschiede zwischen x87 und SSE sind viel zu subtil für so einen großen Effekt. Doch die verschieden gerundeten Zahlen spielen eine entscheidende Rolle für die Physik-Engine, welche die Ereignisse modelliert. Bei beiden Maschinencode-Versionen trifft die Tür auf den Fuß des Wachmanns und bewirkt eine leichte Rotation seines Fußes. In der (älteren) x87-Version bewirken die gerundeten Ergebnisse jedoch, dass sich der Fuß weit genug dreht, damit die Tür daran vorbei aufschwingen kann. In der neueren SSE-Version reicht der Impuls der Tür dafür allerdings nicht ganz aus – und sie fällt wieder zu.

Ein winzig kleiner Unterschied bei der Rundung von Nachkommastellen genügt also schon, um einen völlig anderen Spielverlauf zu erzeugen. Im einen Fall schwingt eine Tür auf und man kann das Spiel problemlos fortsetzen. Im anderen Fall fällt die Tür zu und man sitzt fest. Game over. Damit ist Half-Life 2 ein Beispiel für ein chaotisches System: Selbst kleinste Effekte können gigantische Auswirkungen haben.

WEITERLESEN MIT »SPEKTRUM +«

Im Abo erhalten Sie exklusiven Zugang zu allen Premiumartikeln von »spektrum.de« sowie »Spektrum - Die Woche« als PDF- und App-Ausgabe. Testen Sie 30 Tage uneingeschränkten Zugang zu »Spektrum+« gratis:

Jetzt testen

(Sie müssen Javascript erlauben, um nach der Anmeldung auf diesen Artikel zugreifen zu können)

Schreiben Sie uns!

Beitrag schreiben

Wir freuen uns über Ihre Beiträge zu unseren Artikeln und wünschen Ihnen viel Spaß beim Gedankenaustausch auf unseren Seiten! Bitte beachten Sie dabei unsere Kommentarrichtlinien.

Tragen Sie bitte nur Relevantes zum Thema des jeweiligen Artikels vor, und wahren Sie einen respektvollen Umgangston. Die Redaktion behält sich vor, Zuschriften nicht zu veröffentlichen und Ihre Kommentare redaktionell zu bearbeiten. Die Zuschriften können daher leider nicht immer sofort veröffentlicht werden. Bitte geben Sie einen Namen an und Ihren Zuschriften stets eine aussagekräftige Überschrift, damit bei Onlinediskussionen andere Teilnehmende sich leichter auf Ihre Beiträge beziehen können. Ausgewählte Zuschriften können ohne separate Rücksprache auch in unseren gedruckten und digitalen Magazinen veröffentlicht werden. Vielen Dank!

Partnerinhalte

Bitte erlauben Sie Javascript, um die volle Funktionalität von Spektrum.de zu erhalten.