- Wing Commander I の「Thank you for playing Wing Commander」逸話は、終了エラー文を16進エディタで書き換えたという話ではあるものの、製品版にそのまま残ったバグではなかった
- 原典に最も近い記録は、2009年の Gamasutra Dirty Coding Tricks のコメントで、Ken Demarest が開発中に EMM386 の終了エラーを一時的に隠した件を残したものだった
- DOSBox、当時の実機環境、バイナリ文字列検索では、通常終了時にその文言は表示されず、兵舎エアロックからの終了経路だけが別のジョークメッセージを出力した
- Electronic Arts が保管していた不完全な Wing Commander I ソースコードでも、エアロックメッセージは正常なゲームコードとして確認され、メモリマネージャの16進編集事例とは異なっていた
- Ken Demarest は、ハック自体は実際にあったが、エラー原因を見つけた後に発売前に削除したと答えており、この逸話は雑な製品版ではなく、一時的なエンジニアリング上のトリックに近い
「Thank you for playing Wing Commander」逸話の出典
- 広く知られている話は、Wing Commander の開発者がゲーム終了中の EMM386 メモリマネージャエラーを修正できず、エラー文字列を16進エディタで「thank you for playing Wing Commander」に書き換えた、という内容である
- この逸話はここ10年ほど、インターネット上で「面白いソフトウェアハック」の事例として広まり、「dirty-but-functional hack」を意味する例として使われるようになった
- 一部の Star Citizen ファンは、Chris Roberts の能力を批判する文脈でもこの事例を持ち出していた
- Roberts が他の CEO と違って Star Citizen でもコードを書き続けている点が結びつけられていた
- Wing Commander I のファンたちは、一緒に流通していたスクリーンショットに疑いを持っていた
- Wing Commander I の標準インストール先は
c:/wc1 ではない
- 製品版ゲームは終了時に「Thank You for Playing Wing Commander!」を表示しない
2009年の Gamasutra コメントが原典に近い
- 元の文言とスクリーンショットの出所を追跡した結果、2009年8月20日の Brandon Sheffield による Gamasutra 記事 Dirty Coding Tricks に付いたコメントが確認された
- コメントの要点は次の通り
- Wing Commander 1 ではゲーム終了時に EMM386 メモリマネージャ例外が発生した
- 画面を消去すると「EMM386 Memory manager error...」のような1行が表示された
- 早く発売する必要があったため、メモリマネージャ内のエラー文字列を16進エディタで「Thank you for playing Wing Commander」に書き換えた
- Gamasutra はゲーム開発者に人気のあったサイトで、2021年に Game Developer へとリブランドされた
- 元の記事は 新サイト に残っているが、コメントは移行の過程で消えたようだ
- コメントの投稿者は Ken Demarest だった
- Ken Demarest III は Origin Systems で初代 Wing Commander のソフトウェアエンジニアを務め、その後 Ultima VII のリードプログラマーと同社の Director of Technology になった
- Wing Commander のライター Jeff George は、Chris Roberts を除けば、Demarest がゲームの発売実現に最も大きく貢献した人物だと評価している
Reddit 版とスクリーンショットが生んだ誤解
- 2015年に Reddit の
/r/shittyprogramming に広まった版は、2009年の元コメントと2点異なっていた
- 元コメントには スクリーンショットがない
- 終了メッセージの文言が少し変えられ、より強いオチに見えるようになっていた
- Reddit 版は、2012年の第三者による LinkedIn 共有を経て流通したものとみられる
- 後から付けられたスクリーンショットは、このバグが製品版に入っていたかのように見せたが、元のコメントはそのようには主張していなかった
- そのため、元の逸話の出典自体はもっともらしくても、「製品版に残ったエラー」だったのかは別途検証が必要だった
製品版 Wing Commander I での確認結果
- Wing Commander I は通常終了時に「thank you for playing Wing Commander」を表示しない
- DOSBox と当時の実機でテストした
- ゲームバイナリ全体から当該文字列を検索しても見つからなかった
ALT-X を押すと単に DOS プロンプトへ戻る
- 例外として、Tiger’s Claw の兵舎にある エアロックドアをクリックして終了すると、別のフローが実行される
y/n の確認プロンプトが出る
- DOS に戻り、「You step out of the airlock and into…」というメッセージを表示する
- この文言は、その終了方法に直接結びついたジョークである
- このエアロックメッセージはゲームバイナリ内に実際に存在する
- Ken Demarest はこの兵舎画面とも関わっている
- 彼はバケツに落ちる水滴エフェクトを実装した人物として知られている
- この演出は、Chris Roberts の没入感へのこだわりを示す例としてよく引用される
ソースコードと Ken Demarest の回答
- Electronic Arts が保管していた不完全な Wing Commander I のソースコードが検証に使われた
- これらのソースファイルは Wing Commander I のリリースビルドに使われ、その後 FM Towns 版の開発チームにも渡された
- メモリ管理ルーチンを含め、一部の資料は残っていない
- 残っているコードだけでも、エアロックメッセージの出所は確認できた
BARRACKS.C が兵舎画面のゲームフロー機能を設定している
- ゲームはメモリをアンロードした後、エアロックメッセージと改行を出力する
- これは実際の実行結果と一致し、メモリマネージャを16進編集した事例ではない
- 別の終了経路は
COCKPIT.C にあり、メッセージを出力しない
- Darren Xczek は Ultima VII の可能性を示した
- Ultima VII は DOS に戻る際「thank you for playing Ultima VII」というメッセージを表示する
- Ken Demarest は Ultima VII のリードプログラマーだった
- Ultima VII は内部システム名が「Voodoo Memory Manager」だったほど、メモリ管理問題で有名だった
- Ken Demarest に直接確認した結果、16進編集ハックは開発中に実際に行われたものだと整理された
- 彼はそのハックを入れたまま発売したい気持ちもあったが、エラー原因を見つけた後、良心的に残しておけなかったと答えた
- 手作業で編集する工程がビルド完了時間を延ばし、非効率でもあったと述べた
- 最終的に、この逸話は開発中の一時的なトリックであり、製品版には残らなかった
- 粗雑な製品を売った証拠ではなく、発売前に除去された一時的な開発ハックに近い
1件のコメント
Hacker Newsの意見
Sega Genesis/Megadrive向けの Sonic 3D Blast で Traveller's Tales が入れていたハックを思い出した。
コンソールの電源を入れたままカートリッジを十分に揺らしたり叩いたりすると「secret level select」画面が出るもので、長い間イースターエッグだと思われていたが、実際にはメインCPUのエラー割り込みを横取りしてレベル選択画面へ送る カスタムのクラッシュハンドラ だった。
Sega のQAでビルドが差し戻されて発売が遅れるのを避けるための仕掛けで、QAには数週間かかったため、クラッシュが1つあるだけで最初からやり直しになっていた。カートリッジを揺らすと接触が一瞬切れて、プロセッサエラーが起きていたというわけ。
出典の3分のYouTube動画: https://www.youtube.com/watch?v=ZZs2HUW9tDA
リンク先の「Coding Secrets」YouTubeチャンネルには、同様のハックを扱った動画がほかにもあり、当時の開発者たちがハードウェアとビジネス上の制約の中でゲームを動かすためにしていたことは本当にすごい。
最近のAAAゲームでは、パブリッシャーやコンソールメーカーが数分のQAすら飛ばしているように見えることがある。
こういう件で 一次情報源 にたどり着けるというのは、本当に魔法のような力がある。
特に自分のように年齢差や地理的距離があると、ときどきほとんど不可能に見えることさえある。
80年代のスウェーデンで育ち、その頃からコンピュータに夢中だった。Commodore 128を使い、その後Amigaに移ったが、C64モードでゲームをたくさん遊んでいて、当然「Uridium」[1] と「Paradroid」[2] は誰もが知る必修作に近かった。
ところが、その開発者である Andrew Braybrook が自分の Xitter フィード [3] にいて、今もゲーム開発をしているという事実が、いまだに不思議に感じられる。当時はイギリスに住む、自分より10歳以上年上の遠い魔法使いのような存在だったのに、今では少なくとも職業的にはある程度同業者のように感じられる。
インターネット以前にもこういうことはあっただろうが、ずっと難しく、珍しかったはずだ。
[1]: https://en.wikipedia.org/wiki/Uridium
[2]: https://en.wikipedia.org/wiki/Paradroid
[3]: https://twitter.com/UridiumAuthor
2023年にも最新状態に保たれている Wing Commander のニュースサイト があるのは本当にいい。
ミサイルのコードを監査していた開発者の話を聞いたことがある。あちこちに メモリリーク があるとすぐ指摘したのだが、実はそれは意図された設計で、ミサイルは飛行終了時に自身でガベージコレクションを行う、というものだった。
メモリ不足の問題は、ミサイル飛行中の想定メモリ使用量を2倍に見積もることで対処していたらしい。
リンク先のRedditスレッドにこんなコメントがある。
Ultima VIIもかなり遊んでいたので、記事で言われているように記憶が混ざったのかもしれない。
この種の終了メッセージは昔は珍しくなかったし、その話を読むという行為だけでも、偽の記憶や混ざった記憶が生まれるには十分だ。
この話は結局事実ではないと判明したが、1999/2000年に Half-Life 1のマルチプレイヤーゲームランチャー をインストールしたことは覚えている。
「install」を押すとダイアログが出て、だいたい「インストーラがインストール失敗と言っても心配しないでください。プログラムは正常にインストールされています」と表示された。
スクリーンショットも撮り、何年も持っていた。なくしたか、実家の古いコンピュータのどこかにあるかもしれないが、本当だったと誓える。
実際にエラーメッセージが出て、プログラムは正常にインストールされていた。
一度Twitterでこの話をしたら、誰かが既知の問題だと返してくれて、記憶が正しければ Windows 97のレジストリ更新 に関係していた。
たいていは Program Files が丸ごと吹き飛んだ。
子どもの頃に「Thank you for playing Wing Commander!」というメッセージを見た記憶が確かにある気がして、不思議だ。自分だけ?
振り返るとDOSゲームをたくさん遊んでいたので、たぶん混ざったのかもしれない。終了時に何かを出力するのは、それほど珍しくなかった。
話が広まるにつれて少しずつ歪みが加わるのは、本当にいら立つことがある。今回の場合は害はないけれど。
このメッセージがあったのは原作ではなく Wing Commander 2 だったとかなり確信している。