1 Punkte von GN⁺ 2023-09-21 | 1 Kommentare | Auf WhatsApp teilen
  • Die Anekdote um „Thank you for playing Wing Commander“ besagt, dass eine Fehlermeldung beim Beenden per Hex-Editor ersetzt wurde, aber es handelte sich nicht um einen Bug, der in der Verkaufsversion verblieb
  • Die dem Original am nächsten kommende Quelle ist ein Kommentar zu Gamasutras Dirty Coding Tricks von 2009, in dem Ken Demarest schilderte, wie er während der Entwicklung einen EMM386-Beendigungsfehler vorübergehend kaschierte
  • In DOSBox, auf damaliger Hardware und bei der Suche nach Binär-Strings erschien die betreffende Meldung bei normalem Beenden nicht; nur der Beendigungsweg über die Luftschleuse der Kaserne gab eine separate scherzhafte Nachricht aus
  • Selbst im unvollständig archivierten Wing Commander I source code, den Electronic Arts aufbewahrt hat, erwies sich die Luftschleusen-Nachricht als regulärer Spielcode und nicht als Fall einer Hex-Editierung des Speichermanagers
  • Ken Demarest bestätigte, dass der Hack selbst real war, aber vor dem Release entfernt wurde, nachdem die Fehlerursache gefunden worden war; die Anekdote ist daher eher ein provisorischer Engineering-Trick als ein schlampig veröffentlichtes Produkt

Die Herkunft der Anekdote „Thank you for playing Wing Commander"

  • Die weit verbreitete Geschichte besagt, dass die Entwickler von Wing Commander einen EMM386-Memory-Manager-Fehler beim Beenden des Spiels nicht beheben konnten und deshalb den Fehlerstring per Hex-Editor in „thank you for playing Wing Commander“ umwandelten
  • Diese Anekdote verbreitete sich in den letzten zehn Jahren im Internet als Beispiel für „lustige Software-Hacks“ und wurde zunehmend als Paradebeispiel für einen „dirty-but-functional hack“ verwendet
  • Einige Star-Citizen-Fans zogen diesen Fall auch im Kontext von Kritik an Chris Roberts heran
    • Als Verbindung diente, dass Roberts im Gegensatz zu anderen CEOs auch bei Star Citizen weiterhin selbst programmiert
  • Fans von Wing Commander I bezweifelten die mitverbreiteten Screenshots
    • Der Standard-Installationspfad von Wing Commander I ist nicht c:/wc1
    • Die Verkaufsversion des Spiels gibt beim Beenden nicht „Thank You for Playing Wing Commander!“ aus

Ein Gamasutra-Kommentar von 2009 kommt dem Original am nächsten

  • Bei der Rückverfolgung der Quelle des ursprünglichen Wortlauts und des Screenshots fand sich ein Kommentar unter Brandon Sheffields Gamasutra-Artikel Dirty Coding Tricks vom 20. August 2009
  • Der Kern des Kommentars war folgender
    • In Wing Commander 1 trat beim Beenden des Spiels eine EMM386-Memory-Manager-Ausnahme auf
    • Wenn man den Bildschirm löschte, erschien eine Zeile wie „EMM386 Memory manager error...“
    • Weil das Spiel schnell veröffentlicht werden musste, wurde der Fehlerstring im Memory Manager per Hex-Editor in „Thank you for playing Wing Commander“ geändert
  • Gamasutra war eine bei Spieleentwicklern beliebte Website und wurde 2021 in Game Developer umbenannt
    • Der ursprüngliche Artikel ist auf der neuen Website erhalten geblieben, aber die Kommentare scheinen im Zuge der Umstellung verschwunden zu sein
  • Der Verfasser des Kommentars war Ken Demarest
    • Ken Demarest III arbeitete bei Origin Systems als Software Engineer am ersten Wing Commander und wurde später Lead Programmer von Ultima VII sowie Director of Technology des Unternehmens
    • Der Wing-Commander-Autor Jeff George bewertete Demarest einmal als die Person, die abgesehen von Chris Roberts am meisten dazu beitrug, dass das Spiel veröffentlicht werden konnte

Missverständnisse durch die Reddit-Version und den Screenshot

  • Die 2015 auf Reddit unter /r/shittyprogramming verbreitete Version unterschied sich in zwei Punkten vom ursprünglichen Kommentar von 2009
    • Im ursprünglichen Kommentar gab es keinen Screenshot
    • Der Wortlaut der Beendigungsmeldung war leicht verändert und wirkte dadurch wie eine stärkere Pointe
  • Die Reddit-Version scheint über eine LinkedIn-Weiterverbreitung durch Dritte aus dem Jahr 2012 verbreitet worden zu sein
  • Der später hinzugefügte Screenshot ließ den Eindruck entstehen, als sei dieser Bug in die Verkaufsversion gelangt, doch der ursprüngliche Kommentar behauptete das nicht
  • Deshalb wirkte die Quelle der ursprünglichen Anekdote zwar plausibel, aber ob es sich um einen in der Verkaufsversion verbliebenen Fehler handelte, musste gesondert überprüft werden

Überprüfung in der Verkaufsversion von Wing Commander I

  • Wing Commander I gibt bei normalem Beenden nicht „thank you for playing Wing Commander“ aus
    • Getestet wurde in DOSBox und auf damaliger Hardware
    • Der gesamte Spiel-Binärcode wurde nach dem String durchsucht, ohne Treffer
    • Mit ALT-X kehrt das Spiel einfach zur DOS-Eingabeaufforderung zurück
  • Eine Ausnahme gibt es, wenn man zum Beenden auf die Luftschleusentür in der Kaserne der Tiger’s Claw klickt
    • Es erscheint eine y/n-Bestätigungsabfrage
    • Danach kehrt das Spiel zu DOS zurück und gibt eine Meldung aus, die mit „You step out of the airlock and into…“ beginnt
    • Dieser Text ist ein direkter Scherz, der mit genau dieser Beendigungsart verknüpft ist
  • Diese Luftschleusen-Nachricht ist tatsächlich im Spiel-Binärcode vorhanden
  • Ken Demarest ist auch mit genau diesem Kasernenbildschirm verbunden
    • Er gilt als derjenige, der den Effekt fallender Wassertropfen in einen Eimer implementierte
    • Dieser Effekt wird oft als Beispiel für Chris Roberts’ Streben nach Immersion angeführt

Quellcode und Ken Demarests Antwort

  • Zur Verifikation wurde der unvollständig erhaltene Quellcode von Wing Commander I herangezogen, der von Electronic Arts archiviert wurde
    • Diese Quelldateien wurden für den Release-Build von Wing Commander I verwendet und später auch an das Team des FM-Towns-Ports weitergegeben
    • Einige Materialien, darunter Routinen zur Speicherverwaltung, sind nicht mehr vorhanden
  • Schon mit dem verbliebenen Code ließ sich der Ursprung der Luftschleusen-Nachricht bestätigen
    • BARRACKS.C legt die Funktionen des Kasernen-Flow-Screens fest
    • Das Spiel gibt nach dem Entladen des Speichers die Luftschleusen-Nachricht und einen Zeilenumbruch aus
    • Das stimmt mit dem tatsächlichen Laufzeitverhalten überein und ist kein Fall einer Hex-Editierung des Memory Managers
  • Andere Beendigungswege befinden sich in COCKPIT.C und geben keine Nachricht aus
  • Darren Xczek brachte die Möglichkeit von Ultima VII ins Spiel
    • Ultima VII zeigt beim Zurückkehren zu DOS die Meldung „thank you for playing Ultima VII“ an
    • Ken Demarest war der Lead Programmer von Ultima VII
    • Ultima VII war für Probleme mit der Speicherverwaltung berüchtigt; ein internes System trug sogar den Namen „Voodoo Memory Manager“
  • Eine direkte Nachfrage bei Ken Demarest ergab, dass der Hex-Editor-Hack während der Entwicklung tatsächlich stattgefunden hatte
    • Er antwortete, dass er den Hack zwar gern bis zum Release dringelassen hätte, ihn aber nach dem Finden der Fehlerursache aus Gewissensgründen nicht belassen konnte
    • Außerdem sagte er, dass der manuelle Bearbeitungsschritt die Dauer des Build-Prozesses verlängerte und ineffizient war
  • Letztlich war die Anekdote ein provisorischer Trick während der Entwicklung und blieb nicht in der Verkaufsversion erhalten
    • Sie ist daher eher ein temporärer Entwicklungs-Hack, der vor dem Release entfernt wurde, als ein Beleg für ein schlampig verkauftes Produkt

1 Kommentare

 
GN⁺ 2023-09-21
Meinungen auf Hacker News
  • Das erinnert an den Hack, den Traveller's Tales in Sonic 3D Blast für Sega Genesis/Megadrive eingebaut hatte.
    Wenn man bei eingeschalteter Konsole das Modul ausreichend schüttelte oder darauf schlug, erschien der Bildschirm „secret level select“. Lange galt das als Easter Egg, tatsächlich war es aber ein maßgeschneiderter Crash-Handler, der den Fehler-Interrupt der Haupt-CPU abfing und zum Level-Auswahlbildschirm umleitete.
    Das war ein Mechanismus, um zu vermeiden, dass der Build von Segas QA zurückgewiesen und der Release verzögert wurde; weil die QA mehrere Wochen dauerte, hätte ein einziger Crash bedeutet, wieder ganz von vorn anzufangen. Beim Schütteln des Moduls wurde der Kontakt kurz unterbrochen, was einen Prozessorfehler auslöste.
    Quelle, 3-minütiges YouTube-Video: https://www.youtube.com/watch?v=ZZs2HUW9tDA
    Auf dem verlinkten YouTube-Kanal „Coding Secrets“ gibt es weitere Videos zu ähnlichen Hacks, und es ist wirklich beeindruckend, was damalige Entwickler innerhalb von Hardware- und Business-Beschränkungen taten, um Spiele zum Laufen zu bringen.

    • Bemerkenswert ist, dass QA schon damals ein mehrwöchiger Prozess war, obwohl die Spielstrukturen viel einfacher waren als heute.
      Bei heutigen AAA-Spielen wirkt es manchmal so, als würden Publisher oder Konsolenhersteller sogar QA von ein paar Minuten überspringen.
    • Diese Videos sind erfrischend kurz. Gefühlt machen alle YouTube-Kanäle, die ich abonniert habe, inzwischen 45-Minuten-Videos.
  • Es hat etwas Magisches, bei solchen Dingen an Primärquellen heranzukommen.
    Besonders wenn, wie bei mir, Altersunterschiede oder geografische Entfernung dazukommen, wirkt es manchmal fast unmöglich.
    Ich bin in den 80ern in Schweden aufgewachsen und war schon damals völlig von Computern fasziniert. Ich hatte einen Commodore 128 und wechselte später zum Amiga; im C64-Modus spielte ich viele Spiele, und natürlich waren „Uridium“ [1] und „Paradroid“ [2] fast so etwas wie allgemein bekannte Pflichtspiele.
    Dass deren Entwickler Andrew Braybrook in meinem Xitter-Feed [3] auftaucht und bis heute Spiele entwickelt, fühlt sich immer noch seltsam an. Damals war er so etwas wie ein ferner Zauberer aus Großbritannien, mehr als zehn Jahre älter als ich; heute fühlt er sich zumindest beruflich in gewissem Maße wie ein Kollege an.
    Solche Dinge gab es sicher auch vor dem Internet, aber sie dürften viel schwieriger und seltener gewesen sein.
    [1]: https://en.wikipedia.org/wiki/Uridium
    [2]: https://en.wikipedia.org/wiki/Paradroid
    [3]: https://twitter.com/UridiumAuthor

  • Ich finde es großartig, dass es auch 2023 noch eine Wing-Commander-Newsseite gibt, die aktuell gehalten wird.

  • Ich habe einmal die Geschichte eines Entwicklers gehört, der Raketencode auditierte. Er wies schnell darauf hin, dass es überall Memory Leaks gebe, aber es stellte sich heraus, dass das beabsichtigtes Design war: Die Rakete führe am Ende ihres Flugs gewissermaßen ihre eigene Garbage Collection durch.
    Das Problem von zu wenig Speicher habe man gelöst, indem man den erwarteten Speicherverbrauch während des Raketenflugs verdoppelte.

    • „Rakete hat zu wenig Speicher, wechsle auf Kanone“
    • Ehrlich gesagt schwer zu glauben.
  • In dem verlinkten Reddit-Thread gibt es diesen Kommentar:

    Ich erinnere mich, dass ich beim ersten Start von Wing Commander I stundenlang gespielt habe ... Als ich nach einer langen Session beendete und diese Zeile las, dachte ich: „Ach, nett.“
    Jetzt, da ich die Wahrheit kenne, frage ich mich, ob das gelogen ist oder ob er sich einfach falsch erinnert.

    • Wahrscheinlich der Mandela-Effekt. Ich erinnere mich auch an diese Nachricht, die es in Wirklichkeit gar nicht gibt.
      Ich habe auch viel Ultima VII gespielt, also könnten die Erinnerungen, wie im Artikel erwähnt, durcheinandergeraten sein.
    • Ich könnte prüfen, ob meine Diskette noch funktioniert, und sehen, ob sie sich von der GOG/Kilrathi-Saga-Version unterscheidet. Vermutlich wird es aber eher nicht klappen.
    • Natürlich ist es eine falsche Erinnerung. Erinnerungen sind berüchtigt unzuverlässig und viel instabiler, als wir denken.
      Solche Exit-Meldungen waren früher nicht ungewöhnlich, und schon das Lesen dieser Geschichte reicht aus, um falsche oder vermischte Erinnerungen entstehen zu lassen.
    • Sehr wahrscheinlich nutzt er eine deutlich spätere Veröffentlichung. Die online am leichtesten verfügbaren Versionen sind viel später erschienen.
  • Diese Geschichte hat sich am Ende zwar als unwahr herausgestellt, aber ich erinnere mich, dass ich 1999/2000 einen Multiplayer-Game-Launcher für Half-Life 1 installiert habe.
    Als ich auf „install“ klickte, erschien ein Dialog mit etwa folgendem Text: „Keine Sorge, wenn das Installationsprogramm meldet, die Installation sei fehlgeschlagen. Das Programm wurde korrekt installiert.“
    Ich machte sogar einen Screenshot und hatte ihn jahrelang. Vielleicht habe ich ihn verloren, oder er liegt irgendwo auf einem alten Computer im Haus meiner Eltern, aber ich kann schwören, dass es echt war.
    Tatsächlich erschien eine Fehlermeldung, und das Programm war korrekt installiert.
    Ich erzählte diese Geschichte einmal auf Twitter, und jemand antwortete, das sei ein bekanntes Problem gewesen; wenn ich mich richtig erinnere, hatte es mit Registry-Updates unter Windows 97 zu tun.

    • Wenn man die in Half-Life 1 enthaltenen Sierra Utilities deinstallierte, löschten sie das Verzeichnis eine Ebene oberhalb des Installationsorts.
      Normalerweise wurde dadurch der ganze Ordner Program Files gelöscht.
    • Windows 97
      Ich glaube, wir haben das Problem gefunden.

  • Seltsam: Ich bin mir ziemlich sicher, dass ich als Kind die Meldung „Thank you for playing Wing Commander!“ gesehen habe. Geht das nur mir so?

    • Diese „thank you for playing“-Meldung gab es, glaube ich, tatsächlich in Wing Commander 2.
    • Mir kam sie beim ersten Lesen auch sehr vertraut vor.
      Rückblickend habe ich viele DOS-Spiele gespielt, also ist da vermutlich etwas durcheinandergeraten. Beim Beenden irgendetwas auszugeben, war nicht besonders ungewöhnlich.
    • Ich erinnere mich ebenfalls ganz deutlich, diese Dankeszeile gesehen zu haben. Natürlich denkt man sofort an den Mandela-Effekt, aber die Erinnerung ist so lebhaft, dass es unheimlich ist.
  • Es kann wirklich nervig sein, wenn sich Geschichten beim Weitererzählen nach und nach verfälschen. In diesem Fall ist es harmlos, aber trotzdem.

  • Ich bin ziemlich sicher, dass diese Meldung nicht im Original, sondern in Wing Commander 2 vorkam.