はじめに
PDFでもGoogleの検索バーでも大体何でも動作する「DOOM」、自分も何かで動かしてみたいと思ったのでとりあえずWindows上で動かしてみる。ちなみに、DOOMは1997年からオープンソースとしてコードが公開されているので、著作権関連とかは問題ない。
実行環境
- win11
- wsl2(ubuntu22.04)
依存ライブラリの用意
C言語の特性上、64bitだとint型とpointer型のバイト数が不一致になり、正常にビルドできない為、32bitでビルドできるようにパッケージを導入する。
Type | ILP32 (bits) | LP64 (bits) |
---|---|---|
int | 32 | 32 |
pointer | 32 | 64 |
sudo apt update
sudo apt install make
sudo apt install gcc
sudo dpkg --add-architecture i386
sudo apt-get install libx11-dev:i386 libxext-dev:i386 libnsl-dev:i386
sudo apt-get install xserver-xephyr
DOOM本体
git clone git@github.com:id-Software/DOOM.git
cd DOOM/linuxdoom-1.10/
修正
なぜかは知らないが、DOOMのコードにはいくつかバグがあるにも関わらず、そのまま放置されている。わびさび的な何からしいが、普通に動かないので修正をかけていく。
linuxファイルの作成
ビルドしたもの配置するフォルダが作られてないので作ってあげる
cd DOOM/linuxdoom-1.10/
mkdir linux
WADファイルの準備
設定ファイルはレポジトリに含まれていない為、別途用意する必要がある。
自分はdoom wikiにお世話になった。
ダウンロードしたdoom1.wad
はDOOM/linuxdoom-1.10/linux
配下に配置する。
何らかの要因でmake clear
した場合、DOOM/linuxdoom-1.10/linux
配下のファイルは全て消えるので注意されたし。
i_sound.cの修正
# line 166
extern int errno; // これをコメントアウト
ヘッダにライブラリを追加
#include <errno.h>
i_video.cの修正
ライブラリ名にタイポがあるので修正
#include <errnos.h> // 正しくは<errno.h>
画面サイズの修正
値が1だと解像度が320*200で画面が小さいので、2にする事で倍の解像度にする。
static int multiply=2;
カラーマップの設定追加
# line 820
XInstallColormap( x_display, x_cmap ); // これを追加
Makefileの修正
CFLAGS = -g -Wall -DNORMALUNIX -DLINUX -m32 # -m32 オプションを加え、32bitでビルドすることを明示
ビルド
ここまで来たら/DOOM/linuxdoom-1.10
の中でmake
するだけ
make
起動
ビルドで出来たものにlinuxxdoom
があるので、これを叩いて起動する。
まず、適当なターミナルで描画用の画面を生成
Xephyr :2 -screen 640x480x8 -br -reset -terminate -title DOOM &
次に、ビルドフォルダに移動し、先ほど生成した画面を指定して起動
cd DOOM/linuxdoom-1.10/linux
DISPLAY=:2 ./linuxxdoom
おわりに
思ったよりすんなりビルドしてプレイできた。先人たちがDOOM道を整備してくれたおかげですね。当然ここで終わるわけではなく、自作OS上で動かしたり、色々試行してみたいモノがあるので、うまく行ったらそれらも公開していく。