ついにDOOMの中でDOOMをプレイすることに成功

1994年にMS-DOS用ソフトとして発売されたファーストパーソン・シューティング(FPS)ゲームの「DOOM II: Hell on Earth」は、第1作のDOOMと同じゲームエンジンを使いながら、複雑で多様なマップと大量の敵や武器が追加され、初版の60万本がわずか1カ月で売り切れるほどの大ヒットを記録しました。DOOMはソースコードに環境依存となる部分が非常に少ないため、Linuxからポルシェ911、果てはTwitterまで、さまざまなプラットフォームに有志の手によって移植されていることで知られていますが、リバースエンジニアのkgsws氏がとうとうDOOM II内にDOOM IIを移植することに成功したと発表しました。
Well, yet another platform you can run Doom on. I have ported Doom to ... Doom ... yeah, DOS Doom2.
Explanation: https://t.co/6sayWWRyLh
It's a code execution from wad file in DOS Doom2.#Doom #Doom2 #DOS #hack pic.twitter.com/Wl5s7ac2Ou— kgsws (@_kgsws_) July 10, 2022
実際にDOOM II上でDOOM IIを起動する様子は以下のムービーで見ることができます。
You can run Doom inside (DOS) Doom, for real. - YouTube
この「DOOM II上でDOOM IIを起動」は呼び出し関数のバグで可能になっています。以下の呼び出し関数は、DOOM IIでマップファイルからあらかじめ定められた一意のIDに紐付いたグラフィックを呼び出すものですが、特定のIDは特殊な処理が行われるそうで、ここに任意のコードを実行できる脆弱(ぜいじゃく)性があるとのこと。

そこで、この脆弱性を利用してコードを実行し、DOOM II内でDOOM IIを起動するというのがkgsws氏の試み。

まずDOOM IIを起動。

続いて起動したDOOM II上でDOOM IIを起動します。

DOOM II上でDOOM IIをプレイするために、kgsws氏はマップを作成しました。作成したマップの指定した壁に、DOOM IIの画面が表示されるというわけです。

単に映像を流しているだけではなく、F12キーを押すとDOOM II内で起動したDOOM IIの操作に切り替えられるとのこと。

さらにkgsws氏は、DOOM IIでDOOM IIを快適にプレイするために、より複雑なマップを作成しています。

DOOM IIの起動プログラムの設定ができる部屋

シアター風の部屋に向かうと……

DOOM IIが映し出されています。画面上部には「DOOM-IN-DOOM BY KGSWS」と表示されています。


ゲームプレイのディスプレイを最大化することもできるので、DOOM IIをプレイしている途中で画面をDOOM IIに切り替えてプレイすることが可能。

四方をDOOM IIのプレイ画面に囲まれた部屋も用意されています。

また、DOOMと同じゲームエンジンを使っているゲームであれば、他のゲームも実行可能。以下は「Heretic」をプレイしているところ。

また、DOOM IIのグラフィックを利用したスネークゲームや……

アステロイドも遊ぶことができます。

DOOM上でDOOMを遊ぶためのツール「DOOM-in-DOOM」はkgsws氏によって、GitHubで公開されています。
GitHub - kgsws/doom-in-doom: Doom 2 code execution. With a Doom port.
https://github.com/kgsws/doom-in-doom
