ゲームで遊ぶのも一苦労

パソゲー買ってきてプレイしてたら、特定の場所で必ず落ちる現象に遭遇しました。DirectXやグラフィックボードのドライバーは最新にしているのでゲーム自体を疑ってググってみたが自分と同じ現象にぶつかっている人はおらず、このゲーム自体も発売から1年が過ぎているので今後、パッチが出ることも期待できません。一応、プログラマのはしくれなので自分の環境を疑うことにしてデバッガで調査開始。プロセスにアタッチしてコールスタックを見てみるとntdll.dllよりも更に深いところで例外が発生しています。

  • mpg2sys.ax
  • mcaudec.ax

上記のモジュールがmsvcrt71.dllを呼び出して落ちていますが、msvcrt71.dllが原因とは考えにくいので、この2つが疑わしいです。ググっても引っかからないのでHDDを検索したところ、どーやらビデオキャプチャーボードについてきたコーデックと判明。「お、ここでムービーが流れるんだ」という嫌なネタばれ。ゲームの遊び方としては間違っていますが、気にせずに先へ。そもそも、こんな腐ったコーデックが使われる事態間違っているので、コーデックの優先順位を変えてみたらどーなるか試してみることに。
DirectShow Filter Tool
こんなツールを見つけたので問題を起こしたコーデックのメリット値を確認してみると、やはり高い値になっていました。そんなメリットねーよと最低値にしたところ、別のコーデックが使われるようになって無事ゲームが進められるようになりました。動画再生を行っているゲームで不具合が発生した場合は、こういう点を調べると解決することもあるということで。

教訓:ゲームが落ちたとしても安易にバグだと言ってはいけません。