DirectXの先祖にあたるWindows用ゲームグラフィックAPI「WinG」は現在のWindowsに組み込まれておらず、Vectorに上がっている「WinG 開発キット」からWING32.DLLを拾ってきてWindowsのDLL格納フォルダに入れないといけないのだが、
- Vectorがいつまでもこのファイルを置いてくれるか未知数
- WING32.DLL単体での配布は許可されていない
- 他で拾ってきたWING32.DLLが無害であるという保証ができない
- WING32.DLLはWindowsシステムフォルダに入っていないといけない(DLL側で格納場所をチェックしている)
- Windowsのシステムフォルダに直接コピーするのでセキュリティリスクがある、環境によってはコピーも弾かれる可能性がある
という色々と厄介な問題がある。
そこでこのDLLをWindowsの標準的(といってもこれ自体レガシーなものだが)な2D描画APIであるGDIに置き換えるDLLインジェクションを作成してみた。
Github - WinG32 DLL Injector with GDI32.dll (ここから上がっているWING32.DLLをダウンロード)
LinuxでWindowsアプリを動かす「Wine」のコードにWinGの描画関数があったのでほぼ借用(GPL)して作成。
本家WinGはWindowsシステムフォルダ(32bit OSでは\Windows\System32\、64bit OSでは\Windows\SysWOW64\)にコピーする必要があるが、このDLLはゲームと同じフォルダにコピーするだけで使えるという簡単な設計だ。
が、WinG使用タイトルが確実に動くか保証は一切できないので注意。
自分の手持ちのゲームでこれが必要になってくるタイトルが現状Windows版「オルゴール サイキック・ディテクティブ・シリーズ vol.4」しか所有しておらずそれでしか動作確認が行えていない、Vectorに上がっていたWinGを使う「WinMASL」でテストしてみたところ起動しないという問題が発生。
WinGのWinGGetDIBPointerが正常に動作していないというところまではわかっているのだが、WinGそのものがそんなに知識無く今のところ直せるか不明。
Windowsシステムフォルダに公式WING32.DLLを入れずに、今回のDLLをゲームフォルダにのみ入れて動かした例
現状、Windows版「サイキック・ディテクティブ・シリーズ」専用DLLのつもりで使う方が良いかもしれない。
WinGとは話は逸れるが、データウエストさん、サイキック・ディテクティブ・シリーズをSteamで販売してくださいよ・・・
公式サイトからWindowsダウンロード版オルゴールだけ買ってはみたけど、銀行振込のみ・ダウンロードは入金確認から3日間のみ・この記事のように動作が保証できないDLLを自己責任で入れる必要あり・セーブデータもCドライブ直下に保存、とかいうとんでもない代物で今時売り物にならない代物ですよ・・・