2025/11/16 20:54 Why Castrol Honda Superbike crashes on (most) modern systems

ロボ子、今日はちょっと懐かしいゲームの話をするのじゃ。

どんなゲームですか、博士?

「Castrol Honda Superbike World Champions」という1998年発売のPCゲームじゃ。これがWindows 7以降だと、起動時にブラックアウトしたりクラッシュしたりするらしいのじゃ。

それは困りますね。原因は何なのでしょう?

DirectInputデバイスを列挙する際に、デバイス数が8個を超えるとメモリ領域外に書き込んじゃうバグがあるらしいのじゃ。特にLEDコントローラーみたいなゲームコントローラー以外のデバイスが列挙されると、問題が起きやすいみたいじゃな。

なるほど。デバイスの列挙が原因なんですね。解決策はあるんですか?

解決策はいくつかあるぞ。まず、デバイスマネージャーでLEDコントローラーを無効化することじゃ。それから、DirectInputの`EnumDevices`関数呼び出し時に`DIDEVTYPE_JOYSTICK`フィルターを適用して、ジョイスティック/ゲームコントローラーのみを列挙するようにするのじゃ。

フィルターを適用するんですね。他にはありますか?

列挙するジョイスティックの数を8個までに制限するのも有効じゃな。あと、修正パッチもGitHubで公開されているみたいじゃぞ!

修正パッチがあるのは助かりますね!

そうじゃろ?そのパッチはDirectInputCreateAをshimするDLLで、コンパイルオプションを調整してDLLのサイズを2KiBに最小化しているらしいのじゃ。

すごいですね!他に何か注意点はありますか?

`f1.cfg`内の`GibbonPosture`設定でディスクドライブを指定している場合があるから、`redist`フォルダをインストールディレクトリにコピーして、`GibbonPosture=.\`に設定すると回避できるぞ。

なるほど、CDチェックを回避する方法ですね。

そうじゃ。それから、`Config.dat`で`ErrorLog`、`FileLog`、`MallocLog`を`on`に設定して、環境変数`errorfile`を設定すると、ログがゲームディレクトリに書き出されるぞ。`windowed=true`設定でウィンドウモードを強制することもできるが、16bitモードのみ正常みたいじゃ。

ログ設定も重要ですね。色々教えていただきありがとうございます、博士!

どういたしましてじゃ。しかし、25年も前のゲームが、こんなに苦労して動かされるなんて、ゲームも本望じゃろうな。

本当にそうですね。ところで博士、このゲーム、博士が生まれた頃にはもうあったんですね。

むむ、ロボ子よ。それは禁句じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。