Xで発表後ほんのちょっとだけ話題になった「マジカルチェイス for Windows95をWindows11で正常動作させるツール」は、AIサービスClaude Proで作成しています。

https://i486.mods.jp/ichild/mchase
本稿では「Windows11で動作しないはずのプログラムをどうやって対応させたのか?」を、プロンプト含む一連の流れとともにプロセスを解説します。
※注意※
当初は前例がなく完全に手探りだったので「クレジット消費が少ないAIモデルを使ったら余計に遠回りになった」「命令が甘い」など多々問題があります。
あくまで「Windows11非対応ゲームを対応させるための手法の一つ」として参考になればと思います。
・プロンプトを書く前に事前調査
マジカルチェイス for Windows95を最新のWindowsPCで遊ぶべく、窓化ツールでのウインドウモード対応化やコントローラバグ修正パッチなどの手法は数年前から有志たちによって確立していました。
また、私自身もマジカルチェイスのプログラムを修正するだけで正常動作できないか解析にチャレンジしたこともあり、DirectDrawの関連DLLを多数コールしているなど大まかな処理を認識したうえで方針を決めました。
・プロンプト1回目/Claude Sonnet 5
「マジカルチェイス for Windowsは各種外部ソフトウェアに頼ったり修正パッチを当てたり256色モードに落とすなど、あらゆる手法で動作環境を構築する必要があるけれど、同一フォルダにDLLを配置するだけでwrapperで描画ルーチンを乗っ取ってサイズ可変ウインドウで動かすようなアプローチは可能?」
(プロンプトとともに実行プログラムMCHASE.EXEをClaudeに提供)
このプロンプトの重要点は「実行プログラムMCHASE.EXEの提供」「DLLを配置するだけでwrapperで描画ルーチンを乗っ取っての一文」の2点で、これによりClaudeはMCHASE.EXEを逆アセンブルした後にどのようなDLLを呼び出しているのかを調査します。
結果、画面描画の大半がddraw.dllによって行われていることが判明しました。
ちなみに本来ddraw.dllはWindowsのシステムフォルダ内にありますが、同名のファイルをMCHASE.EXEと同じ場所に配置することで本来の処理を乗っ取ることができ、それをwrapper DLLと呼称しています。
・プロンプト2回目/Claude Sonnet 5
「最小のフック DLL(C++ のスケルトン一式)を書いてみて」
前述の結果をもとに、マジカルチェイスと同じフォルダに置いて実行してもエラーが起こらない最小構成のddraw.dllを作成するよう指示。
…が、ここで未完成のコードが吐かれたため、Visual Studio 2026 Communityのエラーコードをそのままコピペして投げ込んでエラー修正を要請しました。
これ以降もVisual Studio 2026をメイン開発環境としています。
・プロンプト3回目/Claude Sonnet 5
「MCHASE.EXEを単独起動しようとすると下記エラーで停止する。リソースが全部揃っていても出る無意味なルーチンなので、autorun.exeという名称で同一フォルダに配置して実行するだけでautorun.exeからコールされたと勘違いするwrapperを作りたい。オリジナルのautorun.exeを提供するのでその流れを解析してみて。For start program run autorun.exe」
マジカルチェイスはCDにあるautorun.exeからゲーム開始ボタンを押すことでインストールフォルダのMCHASE.EXEが呼び出されて起動する仕組みですが、autorun.exeがそもそもWindows11に対応していないうえ、インストーラも正常動作せずMCHASE.EXEを呼び出すまで進行しません。
Claudeは「MCHASE.EXE WGOPA242」のように第1引数にWGOPA242という文字列を与えることで直接実行できることを発見しましたが、MCHASE.EXEを実行するとディスプレイモードが「256色または65535色でないと起動できない」カラーチェックに引っかかってエラー終了しました。
・プロンプト4回目/Claude Sonnet 5
「ddraw.dllでフックしてもカラーチェックでコケるので、偽のディスプレイ情報を返すルーチンを組み込まないとダメみたい」
今振り返ると我ながら酷すぎる伝え方ですが、これでディスプレイモードがフルカラーでも色数チェックを通過。
しかしQUESTのメーカーロゴが表示されたまま画面が一切更新されず、バックグラウンドでひたすら音だけが聞こえる状況になりました。
・プロンプト5回目/Claude Sonnet 5
「mchase WGOPA242でゲームが始まり、カラーチェックも突破できた。一番最初にメーカーロゴは表示されたが、それ以降はゲームは裏で進行するものの画面はずっとブラックアウト状態ですね」
(ブラックアウトしたスクリーンショットを提供)
ここからひたすらトライアンドエラーの戦いが始まります。
Claudeはiniファイルでのパラメータ指定と、実行時にログファイルを生成することを提案してきたので受理しました。
cnc-ddrawを組み込んだコードを吐いてきたものの、ディスプレイまわりの挙動がおかしかったので次のプロンプトで起動修正を要求します。
・プロンプト6回目/Claude Sonnet 5
「コイツを組み込んだ途端に縦置きセカンドモニタの解像度がバグってウインドウが変な位置に飛んで行ったうえ、マジカルチェイスもブラックアウトでQUESTのメーカーロゴすら表示されず、ひたすらバグっていた。そのソースを組み込むのをやめて、旧来の単独ddraw.dllを拡張する方針の方が良いのでは?」
コイツとは言わずcnc-ddrawを組み込んだ途端にと言うべきだったものの、運良くClaudeが察してくれて無事に受理。
standalone bundleというClaude自信がビルドしたバージョンとVisual Studio 2026でビルドできるソースコードの2つが提供されたものの、やはり正常動作しません。
・プロンプト7回目/Claude Sonnet 5
「standalone bundleはメーカーロゴの直後にフリーズしてプロセスがクラッシュしたのでログを提供します。ソースコードはビルドすらできませんでした(以前まであなたが提供していたソースは全てx86 Native Tools Command~でビルドできていたのが同じ環境でも駄目になった」
これでビルドできるコードが吐かれたものの、メーカーロゴ後にクラッシュする不具合が発生。
ログファイルを提供して修正が加えられたstandalone bundleとソースコードが返ってきて、前者はメーカーロゴ後にクラッシュ。
後者はメーカーロゴが表示されたまま画面が更新されない(=最初期と全く同じ状況)となりました。
・プロンプト8回目/Claude Sonnet 5
「あなたのビルドはメーカーロゴ直後にクラッシュする。ソースコードはビルドが通るようになったけど、メーカーロゴの直後はブラックアウトしたままだ。
あと、今気づいたけれど一度プロセスをバックグラウンドに戻して再びウインドウをフォアグラウンドに戻した瞬間に再描画でブラックアウト状態から1フレームだけ画面が描かれていた。この再描画を常時60fpsで行うことで描画を再現できるのでは?」
ここで私がおかしなことを要求してしまい、作業プロセスが遠回りに。
ClaudeはSetTimerで60Hz周期でInvalidateRect+UpdateWindowを実行して強制再描画を行うようルーチン修正を加えたものの、根本解決には至らず。
・プロンプト9回目/Claude Sonnet 5
「強制再描画ではメーカーロゴで画面が点滅するだけでそこからキーを一切受け付けずに進行すらできなかった。(これはビルド版もソース版も挙動に違いはない)やはりブラックアウトや再描画でしか画面が描かれない原因を追及し、根本的に描画を促すように処理が必要だと思う。ちなみにMCHASE.EXEを強制的に書き換えてカラーチェックを強制突破した場合も同じ現象が発生し、カラーを256/65535色にした場合はこのブラックアウト問題は起こらないようだ」
このプロンプトでClaudeが再調査した結果「起動ロゴとゲーム本編が全く違う描画ルーチンを用いている」と判明。
プログラムのアドレス0x419189〜0x419342で256色ディスプレイのパレットを選んで画面描画を行っているルーチンを特定し、ここをハックする方針になりました。
ここからしばらくフリーズとログ提供の繰り返しです。
・プロンプト10~12/Claude Sonnet 5
「メーカーロゴで1秒くらい音が鳴った直後に音もストップしてフリーズして終わりでした」「あなたがビルドしたものもソースコードも同じくロゴ1秒後くらいでフリーズします」「forceRepaint = 0 を 1 に書き換えて1回フリーズするまで実行したログを提供します」
ここでやや暗礁に乗り上げ気味。ひたすら同じ状況が続きます。
・プロンプト13/Claude Opus 5
「やはり改善が見られない。君のモデルをopus5に変更し、根本的なバグ解決に挑んでほしい。あと、DxWndという窓化ツールをうまくカスタムすることでフレームに収まらないものの画面描画に成功している海外のフォーラムがあったので、そのインポート定義ファイル(dxwファイル)も君に提供します」
ここでついにモデルをOpus 5に変更…つーか最初からコレでいけば良かったです。
(この反省以降、基本的に解析系はSonnet 5を使うのをヤメました)
ちゃんと動いている環境を見せることで改善を狙う方針へ。
・プロンプト14/Claude Opus 5
「君のビルドはロゴの後にクラッシュ。ソースコードからのビルドだと相変わらずロゴの後にブラックアウトのままゲームが進行しますね」
「相変わらず君のビルドはロゴの後でクラッシュ。こちらでビルドしたものはブラックアウトのまま進行で変化ないので、ログファイルを提供します」
このタイミングでついにプログラムの0x0041d6eeにRGBパレット変換ルーチンをClaudeが発見。
Claude自ら生成したstandalone bundle版は正常動作しないものの、ソースコードをVisual StudioでビルドしたMCHASE.EXEと同じフォルダに入れて実行したところ、描画位置はおかしいもののついに動作するようになりました。

・プロンプト15/Claude Opus 5
「君のビルドは相変わらずクラッシュするが、ついにソースコードからビルドしたものはゲームが進行するようになった(ウインドウ枠に対して微妙に黒枠があって表示範囲がおかしいが)ただ、ウインドウを移動した瞬間にプログラムが落ちるので、何かコードにバグがあるようだ。とりあえずbundle版はもう作らなくて良いので、ソースコードだけ提供してほしい」
ついに動作したことを伝えつつ、クレジット節約のためClaudeはもうビルド作業をしなくて良いと指示し、現時点の不具合を報告。
この段階で完璧にゲームが遊べるレベルのddraw.dllが生成されたため「マジカルチェイス for Windows95をWindows11で正常動作させるツール」としてネットに正式公開しました。
・プロンプト16/Claude Opus 5
「今回のバージョンでついに完璧に思い通りに動作するようになった(素晴らしい)。
あと、マジカルチェイスにはパッド入力のバグがあり、それを修正する有志パッチがネットに公開されている。
https://lavendy.net/special/driver/mc_patch/index.html
適用前と適用後で比較すると下記のバイナリ差違があった。
000204C4: 2B 41
000204C5: F7 90
00020517: 2B 46
00020518: C8 90
これらはメモリアドレス4210C4を41、4210C5を90に。421117を46、421118を90に書き換えれば実現できると思う。今回のddraw.dllにメモリパッチ機能を搭載し、ddraw.dllが同じフォルダに存在しているだけでパッド入力のバグを修正できるようにできるだろうか?」
画面描画が正常化したタイミングでlavendy.netさんのコントローラバグ修正パッチをメモリアドレスに適用化させる(=ユーザがバイナリ修正しなくてもコントローラバグが直る)ようにddraw.dllに新たなコードを追加。
個人的には単にパッチを当ててくれるだけで良かったのですが、Claudeは「どうしてコントローラバグが発生するのか、論理的な理由を突き詰めたうえで修正」という、なかなかなインテリぶりを発揮してきました。
・プロンプト17/Claude Opus 5
「このゲームはアドレス4A0F68に主人公の体力値が1バイトで格納されています。
TABキーを押した瞬間にその瞬間の体力値を同アドレスに同じ値を書き込み続けて保持しながら、ゲームの進行スピードを4倍速に引き上げることはできる?」
唐突なスピードハックの要求(他にやることあるやろ)。
ちなみに体力値を保持したままを要請しているのは4倍速だとまともに操作できなくて激突して一瞬で死ぬため。
・プロンプト18/Claude Opus 5
「https://note.com/retoropc_etc/n/na988085fb76f
この記事を読むと、このソフトにはどうやらデバッグメニューがあるらしい。
「具体的な手順としてはMCHASE.EXEをコピーして7ZIPで解凍して、できたフォルダ内の.rsrcフォルダ内の1033フォルダ内のMENUフォルダにあるMCHASEとMCHASEDEBUGがタネ。それらとMCHASE.EXEをバイナリエディタで開いてMCHASE.EXE内を検索すると、ある位置にMCHASE-MCHASEDEBUGと並んでいる箇所があるので、それをMCHASEDEBUG-MCHASEと入れ替えるだけでOK」
とあるので、これをddraw.dllを同一フォルダに置いて実行するだけで有効化することは可能だろうか? もし出来ることが確認できれば ddraw_shim.ini にdebugMenu=1で出せるようにすると面白そうだ」
今度は「とあるレトロPCオタ」さんの記事を元にメモリパッチでデバッグメニュー復活を要請。これもClaudeは構造を完全に分析して、RegisterClassAをフックしてメニューに与えるパラメータを差し替えて対応してきました。
いちいち手法がスマートすぎる。
・プロンプト19/Claude Opus 5
「PCエンジン版マジカルチェイスにはRUNボタンを押しながらSELECTボタンを押すと電源が切れてメーカーロゴまで戻る機能があります。Windows版にユーザのボタン操作でメーカーロゴまで戻る機能は存在している? もし存在しなければ、ddraw.dllにENTER+BSキーでメーカーロゴまで戻る機能を追加してみてほしい」
Windows版マジカルチェイスには何故かリセットが実装されておらず、タイトル画面に戻るためにいちいちプログラムを終了する必要があったので、それを解決するために要請しました。
しかし、この実装だとENTER+BSを押した瞬間にプロンプト3で解決した「For start program run autorun.exeエラー停止」の問題が再発したため、次のプロンプトで解決を狙います。
・プロンプト20/Claude Opus 5
「mchase.exe WGOPA242のオプション引数を付けないと停止するので、このままでは動作しないはず。あと、今でもmchase.exe WGOPA242として実行しなければ進行できないのが面倒なので、ddraw.dllに強制的にmchase.exe WGOPA242として進行するように機能を追加できる? あと、今回からddraw_shim.iniのdebugMenu のデフォルト値をdebugMenu = 1にしていいよ」
これでddraw.dllがWGOPA242パラメータを橋渡しするようにルーチンが追加され、この段階で「ddraw.dllをMCHASE.EXEと同じフォルダに置くだけで、マジカルチェイス for Windows 95がWindows 11で完全プレイ可能になる」が実現しました。
・プロンプト21/Claude Opus 5
「このゲーム、一時停止のためのポーズキーがESCに固定されていて遠くて押しづらいので、シューティングのメインゲーム中だけ限定で、任意キーコードでポーズ画面を呼び出せるようにddraw.dllを拡張できる? INIにはpauseKey=みたいなパラメータで良いと思う。デフォルトはENTERキーでポーズになってくれるとありがたいけど、難しいかな(もしも絶対に無理だと判断したらBSキーでもいいよ)」
ポーズがESCキーなのが遠すぎて不便だったので要請。
ちなみにこのゲーム、デフォルトキーボード割り当てが「テンキー8246とA/Sキーだけ」というメチャクチャなキーレイアウトだったりします。
・
・
・
以上が「マジカルチェイス for Windows95をWindows11で正常動作させるツール」をClaudeが完成させるまでの一連の流れでした。
世の中にはWindows 11で正常プレイできないゲームがたくさんありますので、AIのパワーを使ってそれを一つでも現代に対応できるようになることを祈ります。