XBOXエミュレーター「xemu」のソースを修正して、名作「O・TO・GI」シリーズをプレイしちゃうゾと

真っ暗でO・TO・GIがプレイできん

XBOXで発売されたフロムゲーの「O・TO・GI 〜御伽〜」「O・TO・GI 〜百鬼討伐絵巻〜」を思い出し、久々にプレイしようと思い、大事にとっておいたソフトを引っ張り出し、xemuで動かしてみようとリッピング。

いざ動かしてみると、タイトル画面やオープニングは問題なかったものの本編に突入すると画面が真っ暗。エフェクト関係は表示されているもののキャラクターや背景のテクスチャが正常に表示されません。

修正方法を調べてみた

ちょっとググってみると、xemuのIssueに上がっていた。

Blackened Texture Issues and Documentation · Issue #365 · xemu-project/xemu · GitHub

答えはこれ。

diff --git a/hw/xbox/nv2a/vsh.c b/hw/xbox/nv2a/vsh.c
index 87318419c9..c3ad53411e 100644
--- a/hw/xbox/nv2a/vsh.c
+++ b/hw/xbox/nv2a/vsh.c
@@ -859,6 +859,7 @@ void vsh_translate(uint16_t version,
              * can't multiply by W because it could be meaningless here */
         "    oPos.w = 1.0;\n"
         "  }\n"
+        "  if (oFog.x != oFog.x) { oFog.x = 1; }\n"
     );
 }

修正する方法は書かれていたが、2年くらい前の修正なのにまだ取り込まれていない様子。仕方ないので、自分でソースコードを修正し、exeをビルドしてみようそうしよう。

しかし、WindowsにGitやらDockerやらコンパイラを入れて、設定するのは正直めんどい。折角なので、WindowsにUbuntuをインストールして、ちゃちゃっとコンパイルしてみようと思いやってみた。

WindowsにUbuntuをインストール

Windowsの検索メニューなどで「Windows 機能」などと検索し、「Windowsの機能の有効化または無効化」を開き、「Linux用Windowsサブシステム」「仮想マシンプラットフォーム」にチェックを入れて機能を有効化。

x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージをダウンロードしてインストール。

WSLのデフォルトバージョンを2に設定するため、PowerShellから下記コマンドを入力。

> wsl --set-default-version 2

Microsoft Storeから、Ubuntuを検索してインストール。無印のものをインストールしたら、最新版でした。

Ubuntu上でxemuを修正しコンパイル

下記コマンドで、Ubuntuを最新の状態にして、curlをインストール。Dockerをインストールすためのリポジトリを追加し、Dockerをインストールし起動。

# apt update
# apt install curl -y
# echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# apt install docker-ce docker-ce-cli containerd.io docker-compose -y
# service docker start

Windowsの実ドライブは、「/mnt/」以下にドライブ名ごとにマウントされている。例えばDドライブは「/mnt/d/」になる。今回はWindowsのDドライブ直下に「works」というフォルダを作り、その中でxemuをビルドする。

worksフォルダに移動して、xemuのソースをダウンロード。

# cd /mnt/d/works/
# git clone --recurse-submodules https://github.com/xemu-project/xemu.git

Windows側で、worksフォルダにxemuフォルダが出来ていているので、「/hw/xbox/nv2a/vsh.c」の該当箇所に下記の1行を追加。

"  if (oFog.x != oFog.x) { oFog.x = 1; }\n"

Ubuntuに戻ってxemuの公式サイトのビルド方法を参考にビルド。

Building from Source | xemu: Original Xbox Emulator

# docker run -u $(id -u):$(id -g) --rm -v $PWD/xemu:/xemu -w /xemu \
    -e CCACHE_DIR=/xemu/ccache \
    ghcr.io/xemu-project/xemu-win64-toolchain:latest \
    ./build.sh -p win64-cross

自分の環境だと、コンパイル中や作業中に頻繁にUbuntuがフリーズした。そういう場合は、PoweShellから復活の呪文を唱え、dockerを起動→作業ディレクトリに移動してビルドしなおしを繰り返す。

> wsl.exe --shutdown
# service docker start
# cd /mnt/d/works/
# docker run -u $(id -u):$(id -g) --rm -v $PWD/xemu:/xemu -w /xemu \
    -e CCACHE_DIR=/xemu/ccache \
    ghcr.io/xemu-project/xemu-win64-toolchain:latest \
    ./build.sh -p win64-cross

最後まで無事完了すると、「works/xemu/dist/」以下に「xemu.exe」が出来上がる。あとは、xemuをインストールしたものと入れ替えればOK!xemuの起動方法や設定方法はあえて説明しない。無事、「O・TO・GI 〜御伽〜」も「O・TO・GI 〜百鬼討伐絵巻〜」もテクスチャに色が付き、彩りのある世界が現れる。

「O・TO・GI 〜御伽〜」

「O・TO・GI 〜百鬼討伐絵巻〜」

素晴らしい。

2 comments

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

  • コメント失礼します。
    同じようにやってみましたが、
    最後のxemu.exeというファイルが出力されません。
    アドバイスお願いいたします。

    • どういった状況か推察するしかありませんが、恐らく途中でUbuntuがフリーズしてしまっているのでは無いでしょうか。

      復活の呪文を唱え、根気強く何度もビルドしてみるしか無いですかねぇ。

      エラーなどが出ている様であれば、どんなエラーか教えていただければ、分かる範囲で答えられるかも知れませんが、私も手探りでたどり着いた方法なので、素直にLinuxやMac上で試してみるのも手かも知れません。