Global Sites
マイクロソフトのベテラン技術者が『DOOM』を「Windowsのペイント」で遊べるようにする。ちゃんと遊べる、匠の本気おふざけ
Mark Russinovich氏は7月21日、「Microsoft Paint」を通じて『DOOM』をプレイするソフト「DoomPaint」を公開した。

ソフトウェアエンジニアのマーク・ルシノビッチ(Mark Russinovich)氏は7月21日、Windowsに標準で搭載されているペイントソフト「Microsoft Paint」(以下、ペイント)を通じて『DOOM』をプレイするソフト「DoomPaint」を公開した。同氏はマイクロソフトのクラウドサービスであるMicrosoft AzureのCTO(最高技術責任者)として知られる人物だ。
『DOOM』は、id SoftwareがMS-DOS向けに開発し、1993年に発売されたFPSである。FPSというジャンルを世に知らしめた代表的な存在であり、現在はゲームエンジンのソースコードの利用・改変・再配布などを条件付きで認める「GPL-2.0」ライセンスで一般公開されている。そのため多くの移植版が作られることとなり、中には電子タバコの小さな画面などの変わった環境で『DOOM』を動作させるものも存在する(関連記事)。つい先日には「ひとつの巨大な文字列」で『DOOM』を実装した人物も現れた(関連記事)。

そうしたさまざまな“移植版”は、一風変わった環境でとにかく動作させることを目的としており、処理速度の限界から、実際にはプレイするのが難しいことも多かった。一方で、今回GitHubで公開された「DoomPaint」では、ウィンドウサイズによっては『DOOM』本来のフレームレートである秒間35フレームでの動作が可能となっているのが特徴だ。つまり、「Microsoft Paint」上で『DOOM』を“本当に”遊ぶことができる。
「DoomPaint」では「ペイント」を描画のみに用いており、ゲームの動作自体は『DOOM』の研究用ライブラリ「ViZDoom」でおこなわれる。ここで処理される画像を各フレームをクリップボードに格納し、「ペイント」上に貼り付ける仕組みだ。
このとき、単純にクリップボードを用いて貼り付けるだけでは、まだ「ペイント」が前の画像を読み取っている最中に、新たなフレームのデータを書き込むためにクリップボードが空っぽになってしまう事態が発生する。こうなると「ペイント」がクリップボードの読み取りに失敗し、エラーメッセージを表示して動作を中断してしまうのだ。マーク氏はこの問題を、「OLE」という仕組みを用い、画像データを返すオブジェクトをクリップボードに登録しておくことで解決している。

また、「DoomPaint」が動作する際には「ペイント」がアクティブウィンドウとなっている。そのため、ゲームの操作をするためのさまざまなキー入力は、本来であれば「ペイント」に伝わることになる。そこでマーク氏は「低レベルキーフック」という仕組みを使って、キー入力を横取りするかたちでゲームエンジンに伝える処理をおこなっている。
さらに「DoomPaint」には、最初の画面“貼り付け”時に自動で「ペイント」のキャンバス拡大率を調整する機能や、画面のピクセル数を変更する機能なども搭載されている。使用するマシンの性能によっては、デフォルトのピクセル数である640×400では『DOOM』本来のフレームレートで動かすのが難しいかもしれない。ピクセル数を調整できれば、多くのマシンで問題なく遊べるようになるというわけだ。
「ペイント」を通じて『DOOM』を実際に遊べるようにするためWindowsのさまざまな仕組みを駆使するのは、マイクロソフトに20年以上勤務し、Windowsに精通しているマーク氏ならではの試みと言える。詳しくは「DoomPaint」のGitHubで解説されているため、興味のある方は覗いてみるのも良いだろう。
この記事にはアフィリエイトリンクが含まれる場合があります。


