風来のシレン外伝「女剣士アスカ見参!」for Windowsは2002年12月20日に発売されたWindows用ゲームである。
それをLinux(Ubuntu18.04)上でWineを使って動かしてみる。
結論としてはできなかった。が、何をしてできなかったかを残す。
日記だしね
背景
昔、自分はTwitchPlaysPokemon*1にはまり込んでいた
USE HELIX!!ヽ༼ຈل͜ຈ༽ノ RIOT ヽ༼ຈل͜ຈ༽ノ
今でもたまに見るし、コマンド送信して遊ぶ
そんな思い入れもあり、某配信でそういう話をしてたら、やってくれた。
ペカ界隈で賑わせていたPeercastPlaysAsuka(通称PPA)*2
あれがめちゃくちゃおもしろかったslz
アレはUbuntu(だったかな?)上のwineでアスカを動かしていたので、Linuxでアスカはできるんだ!と感動した
wineというのがあるとは知っていたし、某大学の地下室の実験室はポンコツPCのVineでwineで頑張るなんていう糞環境を使ったこともあった。(さすがに変わっているといいなあの環境は)
知識としては知っていたが、ちゃんと動作しているところを見るのは始めてだった
当時はそういう意味で感動した(2回目)
あの環境を目指したい
加えて、最近なんでコンテナコンテナってやってるかというと、
アスカは面白いんだが、感覚的にやはりWin10環境だと乱数の偏りが違うように感じたり、GTAなどのハック系ゲームがWin10環境だと遊びにくい
そこでコンテナにアスカを閉じ込めてプレイできたらいいんじゃないか?と思ったので、その足がかりとして、Ubuntu18.04(VMware上)にwineを入れて、wineでアスカを動かすということを試しにやってみる。
Voiceroidをコンテナに閉じ込めた話とか聞いたことあるし、そっちもやってみたいね
*1 TwitchPlaysPokemon: Twitchのコメントでポケモンが操作されるという企画もののポケモン配信。誰かがUPとコメントすれば上が入力され、Aとコメントすると、Aが入力される。それをみんなが一斉にコメントで操作するというものだ。最近(3年前?)ポケモンルビーをプレイしながらポケモンスタジアムが動いていたりもした。
*2 PPA: TwitchPlaysPokemonのオマージュで、レスでアスカを操作する企画もののアスカ配信。
環境
2021年5月という時期にUbuntu18.04 LSTを使う
まあ、Linux環境でーってなったら職場PC(CentOS7)とかRaspberryPi(archlinux)を使うので、メインPCのVMwareに入ってるUbuntuが古い
正直VMwareに入れただけになってしまっている
1億年ぶりに起動したら、アップデート関係で結構たいへんだった
大変と言っても、1コア割当の2GBメモリだったり、起動したらしたでアップデートが走って終了できなかったり、終了させないと割り当て変更できなかったり、低スペのまま見守るしかなかったというだけだが
ということで、Ubuntu環境は以下の通り
$ cat /etc/os-release NAME="Ubuntu" VERSION="18.04.5 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.5 LTS" VERSION_ID="18.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=bionic UBUNTU_CODENAME=bionic
アスカはCDをISO化して、バックアップしていた。
メインPCにはAsukaPlusが導入されており、VM上のWin10は開発者オプションを付けてAsukaToolsを動かす試みを行って断念したままも状態だった。なので2016年の評価版Win10のVM上でそのISOをマウントして、インストール
そのインストールしたexe郡をそのままNASに入れてバックアップしたものを用意したしていた
→あとに出てくるが、オフライン化パッチを当てる必要があったので、当てたexe郡を更にpatchedとしてバックアップ。それをUbuntuに持ってきて利用した
セーブデータ管理に使われるレジストリ関係はノータッチ
パッケは、以前、実家に帰ってゴタゴタをしたさいに持って帰ってきたからあるよ!
Wineを入れる
まずはwine-stableを入れる
結論として、これだけでは動かなかった
$ sudo apt install wine-stable $ wine AsfPc.exe 0027:err:ntdll:RtlpWaitForCriticalSection section 0x7bd017c0 "loader.c: loader_section" wait timed out in thread 0027, blocked by 0028, retrying (60 sec)
たしかにppaの最初そんな話をしていた記憶がある
wine-developmentを入れて、こっちでやってみる
こっちなら動いた
$ sudo apt install wine-development $ wine AsfPc.exe
Windowsのスタートメニューにある風来のシレンアスカ見参のショートカットからはLoader.exeを起動しているが、アスカ見参の実態はAsfPc.exeなので、こちらをwineで叩く
そりゃそうだわw
パッチ当てたりNoCDを入れたりする
オフライン化パッチを当てたバックアップファイルにNoCDを入れたものを再度wine実施
$ wine AsfPc.exe 0009:err:d3d:resource_init Out of adapter memory 0009:err:ddraw:ddraw_create_swapchain Failed to create swapchain, hr 0x8876017c. 0009:err:ddraw:ddraw_set_cooperative_level Failed to create swapchain, hr 0x8876017c. 0009:err:d3d:resource_init Out of adapter memory 0009:err:d3d:resource_init Out of adapter memory 0009:err:ddraw:ddraw_create_swapchain Failed to create swapchain, hr 0x8876017c. 0009:err:ddraw:ddraw_set_cooperative_level Failed to create swapchain, hr 0x8876017c.
うーん
D3Dのメモリを変えてみる
$ wine regedit →これでレジストリエディタを動かせる
マルチバイトが豆腐になってる
というか、なんでわざわざ日本語で起動してくれるんだ
Ubuntuの言語設定読んでるのかな?
ここを参考にフォント入れる。これでOKだった
Wineの文字化けを直す方法 | ばったんの技術系ブログ
ここら辺を参考にメモリというかDirect3D設定を弄ってみる
Manually set VideoMemorySize | Knowledge Base | CodeWeavers
Wine/d3d:resource_init Out of adapter memory[SOLVED] – Linux Mint Forums
書いてあるように、Direct3Dキーを作ってプロパティを書く
HKEY_CURRENT_USER/Software/Wine → Direct3Dを作って、VideoMemorySizeを型REG_SZ(文字列値)で作って512にでも設定
レジストリ設定後
再度wine AsfPc.exe
アスカ起動成功?失敗?
おっ?!おおっ!?
ここまですんなり動くなあ
確かアスカのムービーはWMVで作られていて、Linuxにはそのデコーダがないので、再生に失敗するのを覚えている
そのまま再生に失敗しましたメッセージでゲームが続行したはずだが、完全にフリーズして動かない
後々WMVのデコーダを入れて再生するようにした記憶もあるが、、、
一回強制終了
何もせず2回目起動
変わったエラーを吐いてそのまま終了した
$ wine AsfPc.exe 0009:err:d3d:wined3d_swapchain_update_swap_interval_cs wglSwapIntervalEXT failed to set swap interval 1 for context 0x16f950, last error 0x591 0009:err:d3d:wined3d_swapchain_update_swap_interval_cs wglSwapIntervalEXT failed to set swap interval 1 for context 0x16f950, last error 0x591 0009:err:d3d:wined3d_swapchain_update_swap_interval_cs wglSwapIntervalEXT failed to set swap interval 1 for context 0x164190, last error 0x591 0009:err:d3d:wined3d_swapchain_update_swap_interval_cs wglSwapIntervalEXT failed to set swap interval 1 for context 0x16c098, last error 0x591 0009:err:quartz:GetClassMediaFile Media class not found 0043:err:seh:raise_exception Unhandled exception code c0000005 flags 0 addr 0x274d258 0037:err:eventlog:ReportEventW L"6" 0037:err:eventlog:ReportEventW L"7"
3回目起動
$ wine AsfPc.exe 0009:err:d3d:wined3d_swapchain_update_swap_interval_cs wglSwapIntervalEXT failed to set swap interval 1 for context 0x16f950, last error 0x591 0009:err:d3d:wined3d_swapchain_update_swap_interval_cs wglSwapIntervalEXT failed to set swap interval 1 for context 0x16f950, last error 0x591 0009:err:d3d:wined3d_swapchain_update_swap_interval_cs wglSwapIntervalEXT failed to set swap interval 1 for context 0x164190, last error 0x591 0009:err:d3d:wined3d_swapchain_update_swap_interval_cs wglSwapIntervalEXT failed to set swap interval 1 for context 0x16c098, last error 0x591 0009:err:quartz:GetClassMediaFile Media class not found
はっ!!!起動するぞ!!
このあと、ムービーの再生に失敗しましたウィンドウがでて、タイトルに辿り着く前に2回目起動時と同じエラーを吐いて終了
すごく悲しくなった
そのあと、色々やってるとにっちもさっちも動かなくなったのでUbuntu再起動
ちょっと違うエラーが出た
$ wine AsfPc.exe 0009:err:d3d:wined3d_swapchain_update_swap_interval_cs wglSwapIntervalEXT failed to set swap interval 1 for context 0x16f988, last error 0x591 0009:err:d3d:wined3d_swapchain_update_swap_interval_cs wglSwapIntervalEXT failed to set swap interval 1 for context 0x16f988, last error 0x591 0009:err:d3d:wined3d_swapchain_update_swap_interval_cs wglSwapIntervalEXT failed to set swap interval 1 for context 0x1641c8, last error 0x591 0009:err:d3d:wined3d_swapchain_update_swap_interval_cs wglSwapIntervalEXT failed to set swap interval 1 for context 0x16c0d0, last error 0x591 0009:err:quartz:GetClassMediaFile Media class not found 0046:err:seh:raise_exception Unhandled exception code c0000005 flags 0 addr 0x211140 003b:err:eventlog:ReportEventW L"6" 003b:err:eventlog:ReportEventW L"7" 0050:err:service:process_send_command service protocol error - failed to read pipe r = 0 count = 0!
どうもDirectX周りがだめらしい?
フォントを入れたときのようにwinetricksからDLLを入れる$ winetricks
これで起動するGUIから、Install a Windows DLL or component
を選択
DirectX周りでエラーが出ているっぽい?ので、なんとなくd3dx9_43、ムービー再生にffdshowが使えるっぽい?ので、これもいれた。
ffdshowはwmv周りのオプションを全部のせで
しかし、これでも結局起動はしなかった
正確に言えば、起動はしたが、ゲーム内に進むことはなかった
基本的に2回目のエラー0043:err:seh:raise_exception Unhandled exception code c0000005 flags 0 addr 0x274d258
0037:err:eventlog:ReportEventW L"3"
0037:err:eventlog:ReportEventW L"6"
0037:err:eventlog:ReportEventW L"7"
というエラーで終了する。0037:err:eventlog:ReportEventW L"3"
は出たり出なかったり
結局、起動実績のある人に聞くしかなかった残念
聞いて気づいたが、VMwareの3Dアクセラレータの設定や、Wineのバージョンなど、落ち着いて考えれば気づく話ばかりだった
まとめ
結局だめでした
その後、どう動かしたか聞いて、再チャレンジ
結果動かすことができたので、別記事でまとめます。
余談
なぞのファイルだと思ってたんだけど、これ起動時に出てくるBMP画像ファイルだったんだね
解像度は同じなのにサイズが違って2つある