1994年にMS-DOS用ソフトとして発売されたファーストパーソン・シューティング(FPS)ゲームの「DOOM II: Hell on Earth」は、第1作のDOOMと同じゲームエンジンを使いながら、複雑で多様なマップと大量の敵や武器が追加され、初版の60万本がわずか1カ月で売り切れるほどの大ヒットを記録しました。DOOMはソースコードに環境依存となる部分が非常に少ないため、Linuxからポルシェ911、果てはTwitterまで、さまざまなプラットフォームに有志の手によって移植されていることで知られていますが、リバースエンジニアのkgsws氏がとうとうDOOM II内にDOOM IIを移植することに成功したと発表しました。



実際に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