37
ASUS MyPal PDAで2年半も放置されていたDOOMがついにクラッシュ。ゲームティック値が2,147,483,647ティックに達したときにクラッシュするバグが原因と思われる。
古典的なビデオゲーム DOOM のタイトル画面。
(画像提供:Zenimax/Id Software)

1993年12月、当時まだ斬新だったインターネットに熱狂したPCゲーマーたちの間で信じられないほどの盛り上がりを見せた後に発売された『DOOM』は、黎明期にあったファーストパーソンシューティングというジャンルの基準を確立し、発売後何年もの間、ファーストパーソンシューティングといえば「Doomクローン」と呼ばれるほどの人気を博しました。発売から32年近く、数々のMODやユーザーレベルのおかげで、ゲーマーたちは数百万時間、いや数十億時間もこのゲームに注ぎ込んできました。しかし、2年以上もゲームを放置した人はほとんどいないでしょう。しかし、少なくとも1人は放置してしまい、その結果…ゲームはクラッシュしました。

LenOwOへの投稿で、サイト管理者のMinki氏は、2003年製のASUS MyPal A620ポケットPC(当時は斬新なWindows MobileをIntel XScale ARMv5 SoCで動作させていたと思われる)にWinDOOMをロードすることで、想定通りのクラッシュを再現できたと述べています。Minki氏によると、このデバイスは「DIY 18650 [リチウム電池] ベースのUPS」を使用するように改造されており、「このUPSはルーターのUSBポートに接続して5Vの常時電源供給を受けていた」とのことです。彼らはシステムを稼働させたまま放置し、ほとんど忘れていたのですが、昨日、デバイスにアプリケーションクラッシュを知らせるポップアップメッセージが表示されるのに気づいたそうです。

Windows Mobile 2003 で 2 年以上使用した後、WinDOOM がクラッシュする様子を示す切り取られた写真。

ASUS MyPalのWindows Mobile 2003オペレーティングシステムで発生したクラッシュ。(画像提供: minki/LenOwO)

当時のソース移植版の多くと同様に、WinDOOMは1997年にリリースされたオリジナルソースコードに基づいているため、オリジナルゲームのほとんどの機能(そしてほとんどのバグ)を再現しています。多くの大規模商用ソフトウェアプロジェクトと同様に、DOOMは最終版である1.9リリースにおいても多数の既知のバグを抱えています。その中には、内部的に「デモ」ファイルを再生する際(通常はゲームの「アトラクト」ループ用)、新しいデモの再生を開始しても「ゲームティック」値がリセットされないという奇妙な不具合があります。この値は様々な目的でゲームのタイミングを追跡するために使用され、ゲームのレンダリングループとは独立して、35Hz(1秒あたり35回)の速度で増加します。

高校レベルの数学さえ理解すれば、ゲーム値がリセットされないことで、時間の経過とともに莫大な値になることは容易に理解できます。DOOMエンジンの主任コーダーであるジョン・カーマックは、プログラミング時にこのことを認識していたはずですが、値が符号付き32ビット整数として保存されるため、単純に問題にならないと考えたのでしょう。つまり、最大値の2,147,483,647ティックに達すると、それ以降はロールオーバーします。整数オーバーフローの動作はC言語では未定義ですが、x86 PCでは常に負の最大値である-2,147,483,647にロールオーバーします。当然のことながら、ゲームはこれをうまく処理できず、少なくともWindows Mobile 2003ではクラッシュします。

DOSBox でのより伝統的な DOOM クラッシュのスクリーンショット。

もちろん、無効なレベルをロードするなど、DOOM をクラッシュさせる方法は他にもたくさんあります。(画像クレジット: GitHub/AXDOOMER)

1秒あたり35ティックの場合、ゲーム値がオーバーフローするまでに約1.95年かかります。これはMinkiの推定値より少し短いですが、画面上のエラーメッセージに気づくまでにASUS PDAがどれくらい放置されていたのかは誰にもわかりません。写真を見る限り、22年前のポケットコンピュータがそれほど注目を集めているようには見えません。Minkiが使用していたと思われるWinDoomのWindows CE移植版であるDoom4CEは、フレームレートの向上とハードウェア負荷の軽減のために、ゲームのティックレートを30Hzに下げている可能性もあります。これは、Jaguar版やSuper NES版などのDOOMのコンソール移植版では一般的でした。もしそうだとすれば、ゲーム値がオーバーフローするまでに約2.26年かかり、記載されている2.5年に近い値になります。

いずれにせよ、結論はこうです。DOOM2年間も放置してはいけない ― あるいは、専用サーバーではなくゲームクライアントであれば、おそらくどんなゲームでも。Minki の実験から生まれた他の考えとしては、科学的厳密さ(たとえ無関係な結論であっても実験的に検証すること)への感謝と、「ジャンク」ハードウェアの巧妙な再利用があります。これは Len0w0 掲示板のテーマのようです。誰もやろうとしなかったことを成し遂げた彼らには称賛を送ります。

Google ニュースで Tom's Hardware をフォローすると、最新のニュース、分析、レビューをフィードで受け取ることができます。「フォロー」ボタンを忘れずにクリックしてください。

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

ZakはTom's Hardwareのフリーランス寄稿者で、数十年にわたるPCベンチマークの経験を持ち、HotHardwareやThe Tech Reportにも寄稿しています。現代のルネサンス人とも言える彼は、何かの専門家というわけではありませんが、ほぼあらゆることについて少しは知っています。