久しぶりのブログ担当。
今年に入って身内や親戚に色々とありまして、健康に関するあれこれについて書こうか考えていましたが、重苦しいので断念。
一応、ほかにも引越しやら旅行やらネタにできそうなネタはありますが、今回はかの有名なDOOMチャレンジに挑んだ話をします。
※先に結論からいうと失敗しました。誰か成功した人がいたら教えてください...。
DOOMチャレンジとは
DOOM(ドゥーム)とは
id Softwareによって開発され1993年に発売されたビデオゲームです。
FPSゲームの代表作として有名な本作ですが、なんとこのゲーム
1997年に公式からソースコードが公開されています。
公開以降、全世界のプログラマーがありとあらゆる電子機器へのDOOMの移植にチャレンジする文化が定着していきました。
これがDOOMチャレンジと呼ばれるものです。
挑戦
本来はカーナビとかコピー機とか、ゲームには通常使わない突飛なものに移植をして楽しむチャレンジですが、ゲームの移植は初心者なので今回はPC上で動かすところまで。
公開されているコードはLinux版のものであるため、まずは環境を整えます。
①環境整備
ホスト環境
OS:Windows11
仮想化ソフト:VirtualBox(Oracle製)
ゲスト環境
OS:Ubuntu 24.04.2 LTS
その他、コードエディタや比較ツール等を都度導入
②githubからソースコードをダウンロード
git clone https://github.com/id-Software/DOOM.git
ターミナルで実行↑するとDOOMのソースコードを取得できます。

ソースコードとは別に、マップやグラフィック、サウンド等のゲームデータがまとまったWADファイルの配置も必要となります。
別途入手し、ソースコードに配置。

③コード修正
ここで注意。実は公開されているソースコードにはバグが存在しており、そのまま使うことができません。古い環境由来のバグや、公開用に意図して残されている(らしい)バグが混在しており、修正が必要となります。
ここは先人たちの知恵をお借りします。
<参考>
https://github.com/id-Software/DOOM/pull/3/files
https://github.com/JohnZ03/DOOM/commit/43946d42a6b229a018f9a0e874ce86fee23e4b5f
問題と解決策
...ここまでは順調に進んでいましたが、ここから本格的につまずき始めます。
色々とありましたが、印象深かったものをいくつか。
①ヘッダファイル、ライブラリの不足
「X11/Xlib.h:そのようなファイルやディレクトリはありません」
X11(X Windows System)はUnix系OS向けのグラフィック表示システム。
ゲームの描写に必要なライブラリと、それを使うためのヘッダファイルが入っていない、とのこと。
インストールを行い、すぐ解決しましたが
ライブラリや環境設定の不足分の追加がもう何件か続きました。
sudo apt update
sudo apt install libx11-dev
②initializer element is not constant
初期化子が定数じゃないよとエラー。
C言語では配列の初期化子に定数以外は使えないとのこと。
初期化の際、仮の定数を入れて後から代入する等あれこれ格闘しましたが、結局後述の32ビットでコンパイルする対応を行って以降エラーが出なくなりました。
よく分からんけどヨシ!
③32 or 64ビット問題
そもそもこのゲーム自体20年以上前のものであり、32ビット環境での動作を前提に作られております。
今のマシンは64ビット。ポインタや型のサイズが変わり、プログラムの挙動にも悪影響があるため無視できない問題です。
環境に合わせるために色々と調整が必要になりました。
・MakefileのCFLAGSに-m32を追記
Cコンパイルのオプションに32ビット用にコンパイルすることを明示
・32ビット用のライブラリの導入
sudo dpkg --add-architecture i386
sudo apt-get install libx11-dev:i386 libxext-dev:i386 libnsl-dev:i386
これらの問題を解消し、ようやくコンパイル完了!
出来上がった実行ファイルを起動...!
cd DOOM/linuxdoom-1.10/linux
Xephyr :2 -screen 640x640x8 -br -reset -terminate -title DOOM &
DISPLAY=:2 ./linuxxdoom
...ここで今回のチャレンジ最大の問題が発生。本ブログの投稿期限までに完遂できなくなってしまいました。
Error: xdoom currently only supports 256-color PseudoColor screens
DOOMはPseudoColorモードしかサポートしておりません。
プログラムとシステムで色の情報のやり取りがうまく行ってないようです。
何が起きているかざっくり説明するとこんな感じ↓
DOOM
システムの方で全256色のカラーマップ(パレットみたいなもの)
を用意し、そこから色を選んで使うこと前提の設計。
今の環境
256色のカラーマップは持ち合わせておらず
プログラムのほうで赤緑青の数値を指定してもらい色を表現。
⇒結果:色の指定がうまくいかず、描画に失敗。
コマンドで無理やり対応させる、古い環境を構築する、代替システムを探す等手段は考えられますが、いったん今回はここまで。