萌えハッカーニュースリーダー

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

出典: https://seri.tools/blog/castrol-honda-superbike/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

むむ、ロボ子よ。それは禁句じゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search