WineでRPGツクールXP製の作品を動かすのは厳しい?
(2014/8/24)この記事の内容は古いので、まとめドキュメントを参照。Wineの初期状態では動作に幾つかの問題があるものの、適切な対処を行うことで問題なく作品が最後まで動作するようになっている印象がある。
(2014/9/24)一部リンクを修正・解除
以下、以前の内容となる。
Wineでは、RPGツクールXPの作品で動かせるものもあるのだが、幾つかの注意点と、現状ではどうにもできない?大きな問題点がある。
全体的にみると動作はあまり良くないので、現状では、Windowsのライセンスがあれば仮想マシン上にWindowsをインストールして、そこで動かすほうがいいかもしれない。ReactOSに関しては、ランタイムすら入らない状態なので、今後に期待するしかない。
RPGツクールXP RTP(ランタイムパッケージ)
2007年9月時点での最新版は1.03で、ファイルをダウンロードしてインストーラを実行するだけで、何の問題もなくインストールはされる。作品によってはRTPのDLLを同梱していて、RTPをインストールせず動作するものもある。バージョン1.03のインストーラ(Setup.exe)の情報は以下。
- サイズ: 21,542,681バイト
- MD5: fc527e199cf7d6394ccce5fb2d273ff3
- SHA-1: 5218512704f826281ad7e3e40cd3353828ff244a
ReactOS 0.3.3では、画像のように、インストーラのダイアログが出ずに、「次へ」ボタンだけが変な形で表示され(クリックはできない)、その後OSがフリーズする。RTPのインストール無しで動作するサウンドテスター(後述)を実行させたところ、真っ黒なウィンドウが出るだけで動作はしなかった。そもそも音自体、仮想マシン上では現状では出せていない。
XMODIFIERSの問題
$ env -u XMODIFIERS wine [Game.exeの場所]
(2010/4/13)入力メソッドとの相性がある場合もあるが、uimでは問題は起きていない。
異常終了
err:seh:raise_exception Exception frame is not in stack limits => unable to dispatch exception.
となり、黒いウィンドウが少し出た後で落ちてしまう場合がある。
Game.iniの中で、以下のように、
[Game] Library=RGSS103J.dll ...
使用ライブラリをRGSS103J.dllに変更すると動作するものもあるが、動作しない(真っ黒ウィンドウで固まる)ものもある。
ファミ通.comのツクールXP作品のページから無作為に選んだ中で、動作した例は「黒魔剣士アース英雄譚」という作品で、動作せずに固まってしまった例は「フライ・ド・チキン」。どちらも、Game.exeは
- サイズ: 69,632バイト
- MD5: c22b8d8acb738776d94ea0cc10277144
- SHA-1: 4dcc713487826be8c67f614d0f90b0ab59d2215c
で同じもの。
固まってしまうものが特に変わったエラーを吐いたりはしないのだが、Ctrl+Cで止めると下のようなメッセージを吐く。
Unhandled exception: page fault on execute access to 0x10003b00 in 32-bit code (0x10003b00). Register dump: CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b EIP:10003b00 ESP:0082daf0 EBP:0082fde0 EFLAGS:00010246( - 00 -RIZP1) EAX:0040169c EBX:00000000 ECX:00000000 EDX:00000000 ESI:00000000 EDI:00000000 Stack dump: 0x0082daf0: 004016a5 7ee2e940 00000000 7ee78888 0x0082db00: 00110118 7ee7fe9b 0082dba8 7efa4b52 0x0082db10: 0000024c ffffffff 00000000 0082db98 0x0082db20: 0082db98 0082db54 0082db98 0082db94 0x0082db30: 0000000a 0082db58 0082dbd8 f7e6ba59 0x0082db40: 7ee2f9f0 7ee2f9f0 7efe4cc0 7efa1c05 Backtrace: =>1 0x10003b00 (0x0082fde0) 2 0x00401b36 in game (+0x1b36) (0x0082ff08) 3 0x7ee3e50c in kernel32 (+0x4e50c) (0x0082ffe8) 4 0xf7ea1627 wine_switch_to_stack+0x17() in libwine.so.1 (0x00000000) 0x10003b00: addb %al,0x0(%eax) Modules: Module Address Debug info Name (82 modules) PE 400000- 412000 Export game ELF 7bf00000-7bf03000 Deferred <wine-loader> ELF 7cc1d000-7cc66000 Deferred dsound<elf> \-PE 7cc30000-7cc66000 \ dsound ELF 7cc66000-7cc7a000 Deferred winejoystick<elf> \-PE 7cc70000-7cc7a000 \ winejoystick ELF 7cc7a000-7cc94000 Deferred wsock32<elf> \-PE 7cc80000-7cc94000 \ wsock32 ELF 7cc94000-7cca8000 Deferred lz32<elf> \-PE 7cca0000-7cca8000 \ lz32 ELF 7cca8000-7ccc1000 Deferred version<elf> \-PE 7ccb0000-7ccc1000 \ version ELF 7ccc1000-7ccf3000 Deferred uxtheme<elf> \-PE 7ccd0000-7ccf3000 \ uxtheme ELF 7ccf3000-7cd08000 Deferred midimap<elf> \-PE 7cd00000-7cd08000 \ midimap ELF 7cd08000-7cdc6000 Deferred libasound.so.2 ELF 7cdc7000-7cdd0000 Deferred libgcc_s.so.1 ELF 7cdd0000-7cde8000 Deferred msacm32<elf> \-PE 7cde0000-7cde8000 \ msacm32 ELF 7cde8000-7ce1d000 Deferred winealsa<elf> \-PE 7cdf0000-7ce1d000 \ winealsa ELF 7ceb8000-7cede000 Deferred msacm32<elf> \-PE 7cec0000-7cede000 \ msacm32 ELF 7cede000-7cf09000 Deferred ws2_32<elf> \-PE 7cef0000-7cf09000 \ ws2_32 ELF 7cf09000-7cfc6000 Deferred comctl32<elf> \-PE 7cf10000-7cfc6000 \ comctl32 ELF 7cfc6000-7d053000 Deferred winmm<elf> \-PE 7cfd0000-7d053000 \ winmm ELF 7d053000-7d071000 Deferred iphlpapi<elf> \-PE 7d060000-7d071000 \ iphlpapi ELF 7d071000-7d10f000 Deferred ole32<elf> \-PE 7d080000-7d10f000 \ ole32 ELF 7d6f0000-7d702000 Deferred libresolv.so.2 ELF 7d702000-7d75b000 Deferred rpcrt4<elf> \-PE 7d710000-7d75b000 \ rpcrt4 ELF 7d75b000-7d763000 Deferred libxrender.so.1 ELF 7d768000-7d785000 Deferred imm32<elf> \-PE 7d770000-7d785000 \ imm32 ELF 7dd20000-7e6b8000 Deferred libglcore.so.1 ELF 7e6b8000-7e74e000 Deferred libgl.so.1 ELF 7e74e000-7e753000 Deferred libxdmcp.so.6 ELF 7e753000-7e83e000 Deferred libx11.so.6 ELF 7e83e000-7e84c000 Deferred libxext.so.6 ELF 7e84c000-7e863000 Deferred libice.so.6 ELF 7e863000-7e86c000 Deferred libsm.so.6 ELF 7e86e000-7e873000 Deferred libxfixes.so.3 ELF 7e873000-7e87c000 Deferred libxcursor.so.1 ELF 7e87c000-7e880000 Deferred libxrandr.so.2 ELF 7e880000-7e883000 Deferred libxinerama.so.1 ELF 7e88e000-7e91e000 Deferred winex11<elf> \-PE 7e8a0000-7e91e000 \ winex11 ELF 7e9c2000-7e9e1000 Deferred libexpat.so.0 ELF 7e9e1000-7ea0b000 Deferred libfontconfig.so.1 ELF 7ea0b000-7ea1d000 Deferred libz.so.1 ELF 7ea1d000-7ea88000 Deferred libfreetype.so.6 ELF 7ea88000-7ea8a000 Deferred libnvidia-tls.so.1 ELF 7ea8a000-7ea8d000 Deferred libxau.so.6 ELF 7ea8d000-7ea92000 Deferred libxxf86vm.so.1 ELF 7eaaa000-7eaf1000 Deferred advapi32<elf> \-PE 7eac0000-7eaf1000 \ advapi32 ELF 7eaf1000-7eb87000 Deferred gdi32<elf> \-PE 7eb00000-7eb87000 \ gdi32 ELF 7eb87000-7ecc3000 Deferred user32<elf> \-PE 7eba0000-7ecc3000 \ user32 ELF 7ecc3000-7ecc8000 Deferred euc-jp.so ELF 7edcd000-7eef1000 Export kernel32<elf> \-PE 7edf0000-7eef1000 \ kernel32 ELF 7eef1000-7eefb000 Deferred libnss_files.so.2 ELF 7eefb000-7ef05000 Deferred libnss_nis.so.2 ELF 7ef05000-7ef1b000 Deferred libnsl.so.1 ELF 7ef1b000-7ef40000 Deferred libm.so.6 ELF 7ef48000-7ef62000 Deferred libjis.so ELF 7ef62000-7f000000 Deferred ntdll<elf> \-PE 7ef70000-7f000000 \ ntdll ELF f7d37000-f7d3b000 Deferred libdl.so.2 ELF f7d3b000-f7e61000 Deferred libc.so.6 ELF f7e61000-f7e78000 Deferred libpthread.so.0 ELF f7e92000-f7e9a000 Deferred libnss_compat.so.2 ELF f7e9a000-f7fae000 Export libwine.so.1 ELF f7faf000-f7fcb000 Deferred ld-linux.so.2 Threads: process tid prio (all id:s are in hex) 0000000a 0000000b 0 00000008 (D) Z:\(中略)\Game.exe 0000000e 15 0000000d 15 00000009 0 <==
固まっているときの状態をWINEDEBUG=+allで見たところ、メッセージが無限ループしているような感じだった。どのメッセージからループが開始しているのかは分からないが、目印を入れたところから次の目印までのメッセージが繰り返されていることが分かる。
... 000c:Call ntdll.RtlFreeHeap(00110000,00000000,00000000) ret=7cfde027 000c:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7cfde027 (目印 ここから) 000c:Call KERNEL32.GetTickCount() ret=7cfddeef 000c:Ret KERNEL32.GetTickCount() retval=00055149 ret=7cfddeef 000c:Call KERNEL32.GetTickCount() ret=7cc4c31c 000c:Ret KERNEL32.GetTickCount() retval=00055154 ret=7cc4c31c 000c:trace:dsound:DSOUND_timer (1,0,0x140610,0x0,0x0) 000c:trace:dsound:DSOUND_timer entering at 348500 000c:Call ntdll.RtlAcquireResourceShared(001408ec,00000001) ret=7cc4c443 000c:Ret ntdll.RtlAcquireResourceShared() retval=00000001 ret=7cc4c443 000c:trace:dsound:DSOUND_PerformMix (0x140610) 000c:trace:dsound:DSOUND_PrimaryGetPosition (0x140610,0x7cbef9a8,0x7cbef9a4) 000c:trace:dsalsa:IDsDriverBufferImpl_GetPosition hw_pptr=0x00000000, hw_wptr=0x00000000 playpos=0, writepos=0 000c:Call KERNEL32.GetTickCount() ret=7cc4eef5 000c:Ret KERNEL32.GetTickCount() retval=00055154 ret=7cc4eef5 000c:trace:dsound:DSOUND_PrimaryGetPosition playpos = 0, writepos = 0 (0x140610, time=348500) 000c:trace:dsound:DSOUND_PerformMix primary playpos=0, writepos=0, clrpos=0, mixpos=0, buflen=65536 000c:trace:dsalsa:IDsDriverBufferImpl_Lock 0 bytes from 0 000c:trace:dsalsa:IDsDriverBufferImpl_Lock Hit mmap_pos, locking data! 000c:trace:dsound:DSOUND_PerformMix prebuff_left = 0, prebuff_max = 10x2048=20480, writelead=0 000c:trace:dsound:DSOUND_PerformMix Buffer starting or buffer underrun 000c:trace:dsalsa:IDsDriverBufferImpl_Lock 20480 bytes from 0 000c:trace:dsalsa:IDsDriverBufferImpl_Lock Hit mmap_pos, locking data! 000c:trace:dsound:DSOUND_MixToPrimary (0,20480,1) 000c:trace:dsound:DSOUND_MixToPrimary Mixed at least 0 from all buffers 000c:Call ntdll.RtlReleaseResource(001408ec) ret=7cc4c7c9 000c:Ret ntdll.RtlReleaseResource() retval=00000000 ret=7cc4c7c9 000c:Call KERNEL32.GetTickCount() ret=7cc4c7d1 000c:Ret KERNEL32.GetTickCount() retval=00055154 ret=7cc4c7d1 000c:trace:dsound:DSOUND_timer completed processing at 348500, duration = 0 000c:Call ntdll.RtlFreeHeap(00110000,00000000,00000000) ret=7cfde027 000c:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7cfde027 (目印 ここまで) 000c:Call KERNEL32.GetTickCount() ret=7cfddeef 000c:Ret KERNEL32.GetTickCount() retval=00055154 ret=7cfddeef ...
なお、Game.iniの書き換えにより、落ちることも固まることもなく動作した「黒魔剣士〜」でも、動作中に突然落ちることがある。そのときのメッセージは以下。
Unhandled exception: page fault on execute access to 0x10003b00 in 32-bit code (0x10003b00). Register dump: CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b EIP:10003b00 ESP:0082daf0 EBP:0082fde0 EFLAGS:00010246( - 00 -RIZP1) EAX:0040169c EBX:00000000 ECX:00000000 EDX:00000000 ESI:00000000 EDI:00000000 Stack dump: 0x0082daf0: 004016a5 7ee2e940 00000000 7ee78888 0x0082db00: 00110118 7ee7fe9b 0082dba8 7efa4b52 0x0082db10: 0000024c ffffffff 00000000 0082db98 0x0082db20: 0082db98 0082db54 0082db98 0082db94 0x0082db30: 0000000a 0082db58 0082dbd8 f7e4da59 0x0082db40: 7ee2f9f0 7ee2f9f0 7efe4cc0 7efa1c05 Backtrace: =>1 0x10003b00 (0x0082fde0) 2 0x00401b36 in game (+0x1b36) (0x0082ff08) 3 0x7ee3e50c in kernel32 (+0x4e50c) (0x0082ffe8) 4 0xf7e83627 wine_switch_to_stack+0x17() in libwine.so.1 (0x00000000) 0x10003b00: addb %al,0x0(%eax) Modules: Module Address Debug info Name (89 modules) PE 400000- 412000 Export game PE 18e0000- 18e7000 Deferred bitmap ELF 7b14c000-7b172000 Deferred dmusic<elf> \-PE 7b150000-7b172000 \ dmusic ELF 7b172000-7b1b3000 Deferred dmime<elf> \-PE 7b180000-7b1b3000 \ dmime ELF 7bf00000-7bf03000 Deferred <wine-loader> ELF 7bf20000-7bf4b000 Deferred dmloader<elf> \-PE 7bf30000-7bf4b000 \ dmloader ELF 7cc1e000-7cc67000 Deferred dsound<elf> \-PE 7cc30000-7cc67000 \ dsound ELF 7cc67000-7cc7b000 Deferred winejoystick<elf> \-PE 7cc70000-7cc7b000 \ winejoystick ELF 7cc7b000-7cc95000 Deferred wsock32<elf> \-PE 7cc80000-7cc95000 \ wsock32 ELF 7cc95000-7cca9000 Deferred lz32<elf> \-PE 7cca0000-7cca9000 \ lz32 ELF 7cca9000-7ccc2000 Deferred version<elf> \-PE 7ccb0000-7ccc2000 \ version ELF 7ccc2000-7ccf4000 Deferred uxtheme<elf> \-PE 7ccd0000-7ccf4000 \ uxtheme ELF 7ccf4000-7cd09000 Deferred midimap<elf> \-PE 7cd00000-7cd09000 \ midimap ELF 7cd09000-7cdc7000 Deferred libasound.so.2 ELF 7cdc7000-7cdfc000 Deferred winealsa<elf> \-PE 7cdd0000-7cdfc000 \ winealsa ELF 7ce97000-7cebd000 Deferred msacm32<elf> \-PE 7cea0000-7cebd000 \ msacm32 ELF 7cebd000-7cee8000 Deferred ws2_32<elf> \-PE 7ced0000-7cee8000 \ ws2_32 ELF 7cee8000-7cfa5000 Deferred comctl32<elf> \-PE 7cef0000-7cfa5000 \ comctl32 ELF 7cfa5000-7d032000 Deferred winmm<elf> \-PE 7cfb0000-7d032000 \ winmm ELF 7d032000-7d08b000 Deferred rpcrt4<elf> \-PE 7d040000-7d08b000 \ rpcrt4 ELF 7d08b000-7d129000 Deferred ole32<elf> \-PE 7d0a0000-7d129000 \ ole32 ELF 7d70d000-7d716000 Deferred libgcc_s.so.1 ELF 7d716000-7d728000 Deferred libresolv.so.2 ELF 7d732000-7d74a000 Deferred msacm32<elf> \-PE 7d740000-7d74a000 \ msacm32 ELF 7d74a000-7d753000 Deferred libxcursor.so.1 ELF 7d755000-7d773000 Deferred iphlpapi<elf> \-PE 7d760000-7d773000 \ iphlpapi ELF 7d775000-7d779000 Deferred libxrandr.so.2 ELF 7d779000-7d781000 Deferred libxrender.so.1 ELF 7d781000-7d784000 Deferred libxinerama.so.1 ELF 7d784000-7d789000 Deferred libxfixes.so.3 ELF 7d789000-7d7a6000 Deferred imm32<elf> \-PE 7d790000-7d7a6000 \ imm32 ELF 7dd23000-7dd25000 Deferred libnvidia-tls.so.1 ELF 7dd25000-7e6bd000 Deferred libglcore.so.1 ELF 7e6bd000-7e753000 Deferred libgl.so.1 ELF 7e753000-7e758000 Deferred libxdmcp.so.6 ELF 7e758000-7e75b000 Deferred libxau.so.6 ELF 7e75b000-7e846000 Deferred libx11.so.6 ELF 7e846000-7e854000 Deferred libxext.so.6 ELF 7e854000-7e859000 Deferred libxxf86vm.so.1 ELF 7e859000-7e870000 Deferred libice.so.6 ELF 7e870000-7e879000 Deferred libsm.so.6 ELF 7e89b000-7e92b000 Deferred winex11<elf> \-PE 7e8b0000-7e92b000 \ winex11 ELF 7e9c2000-7e9e1000 Deferred libexpat.so.0 ELF 7e9e1000-7ea0b000 Deferred libfontconfig.so.1 ELF 7ea0b000-7ea1d000 Deferred libz.so.1 ELF 7ea1d000-7ea88000 Deferred libfreetype.so.6 ELF 7eaaa000-7eaf1000 Deferred advapi32<elf> \-PE 7eac0000-7eaf1000 \ advapi32 ELF 7eaf1000-7eb87000 Deferred gdi32<elf> \-PE 7eb00000-7eb87000 \ gdi32 ELF 7eb87000-7ecc3000 Deferred user32<elf> \-PE 7eba0000-7ecc3000 \ user32 ELF 7ecc3000-7ecc8000 Deferred euc-jp.so ELF 7edcd000-7eef1000 Export kernel32<elf> \-PE 7edf0000-7eef1000 \ kernel32 ELF 7eef1000-7eefb000 Deferred libnss_files.so.2 ELF 7eefb000-7ef05000 Deferred libnss_nis.so.2 ELF 7ef05000-7ef1b000 Deferred libnsl.so.1 ELF 7ef1b000-7ef40000 Deferred libm.so.6 ELF 7ef48000-7ef62000 Deferred libjis.so ELF 7ef62000-7f000000 Deferred ntdll<elf> \-PE 7ef70000-7f000000 \ ntdll ELF f7d19000-f7d1d000 Deferred libdl.so.2 ELF f7d1d000-f7e43000 Deferred libc.so.6 ELF f7e43000-f7e5a000 Deferred libpthread.so.0 ELF f7e74000-f7e7c000 Deferred libnss_compat.so.2 ELF f7e7c000-f7f90000 Export libwine.so.1 ELF f7f91000-f7fad000 Deferred ld-linux.so.2 Threads: process tid prio (all id:s are in hex) 0000000a 0000000b 0 00000008 (D) Z:\(中略)\Game.exe 00000010 15 0000000e 15 0000000d 15 00000009 0 <==
(2008/4/2)同作品では、メニュー画面で「スキル - [キャラ名]」を選択したときに確実に落ちることも分かった。
MIDI再生について
RPGツクールXPは独自のMIDI音源を持っていて*1、ゲーム中で再生されるMIDIデータは全てその音源を使用することで演奏される。別のMIDIデバイスを代わりに使用することはできない。Wine上でツクールXP作品を動作させてみると、効果音は出るものの、MIDIデータは演奏されない。
www.kazamit.com/tamariba/index.php?p=DBSE_RPX_DSC
によると、MIDIデータは、DirectMusic Synthesizerで演奏されるらしい。
ツクールXP サウンドテスターという、RPGツクールXPで作られているサウンドテスターを見付けたので、
これを使用して、下のようにして、Wine内蔵のDirectMusicに関するメッセージを詳細に取ってみた。
$ WINEDEBUG=+dmloader env -u XMODIFIERS wine Game.exe fixme:mixer:ALSA_MixerInit No master control found on SC-8820, disabling mixer fixme:time:GetCalendarInfoW Unimplemented caltype 4 fixme:time:GetCalendarInfoW Unimplemented caltype 3 fixme:win:EnumDisplayDevicesW ((null),0,0x82d514,0x00000000), stub! fixme:d3d:IWineD3DDeviceImpl_GetAvailableTextureMem (0x1381e0) : stub, simulating 128MB for now, returning 128MB left
起動したところだが、関連する項目はなさそう。曲の再生を開始すると、(再生開始の操作をする度に)
trace:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_Release (0x192e30): ReleaseRef to 0 trace:dmloader:DMUSIC_DestroyDirectMusicLoaderImpl (0x192e30) trace:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_ClearCache (0x192e30, GUID_DirectMusicAllTypes) trace:dmloader:DllGetClassObject (CLSID_DirectMusicLoader, IID_IClassFactory, 0x827248) trace:dmloader:DMUSIC_CreateDirectMusicLoaderCF (IID_IClassFactory, 0x827248, (nil)) trace:dmloader:IDirectMusicLoaderCF_QueryInterface (0x192e30, IID_IClassFactory, 0x827248) trace:dmloader:IDirectMusicLoaderCF_AddRef (0x192e30): AddRef from 0 trace:dmloader:IDirectMusicLoaderCF_CreateInstance (0x192e30, (nil), IID_IDirectMusicLoader8, 0xc204d8) trace:dmloader:DMUSIC_CreateDirectMusicLoaderImpl (IID_IDirectMusicLoader8, 0xc204d8, (nil)) trace:dmloader:DMUSIC_InitLoaderSettings : (0x189ab8) trace:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_SetObject (0x189ab8, 0x826e58): pDesc: DMUS_OBJECTDESC (0x826e58): - dwSize = 0x00000350 - dwValidData = 0x00000033 (DMUS_OBJ_OBJECT DMUS_OBJ_CLASS DMUS_OBJ_FILENAME DMUS_OBJ_FULLPATH ) - guidClass = CLSID_DirectMusicCollection - guid trace:dmloader:DMUSIC_CreateDirectMusicLoaderFileStream (0x826e04) trace:dmloader:IDirectMusicLoaderFileStream_IStream_QueryInterface (0x198830, IID_IStream, 0x826e04) trace:dmloader:IDirectMusicLoaderFileStream_IStream_AddRef (0x198830): AddRef from 0 trace:dmloader:IDirectMusicLoaderFileStream_Attach (0x198830, L"c:\\windows\\system32\\drivers\\gm.dls", 0x189ab8) trace:dmloader:IDirectMusicLoaderFileStream_Detach (0x198830) warn:dmloader:IDirectMusicLoaderFileStream_Attach : failed err:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_SetObject : could not attach stream to file trace:dmloader:IDirectMusicLoaderFileStream_IStream_Release (0x198830): ReleaseRef to 0 trace:dmloader:IDirectMusicLoaderFileStream_Detach (0x198830) trace:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_QueryInterface (0x189ab8, IID_IDirectMusicLoader8, 0xc204d8) trace:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_AddRef (0x189ab8): AddRef from 0 trace:dmloader:IDirectMusicLoaderCF_Release (0x192e30): ReleaseRef to 0
というメッセージが出る。
途中でC:\WINDOWS\system32\drivers\gm.dlsを要求していて、
$ ls ${WINEPREFIX:-${HOME}/.wine}/dosdevices/c:/windows/system32/drivers/gm.dls
としても、当然そのようなファイルはないのだが、これはいわゆるゲイツシンセ(Microsoft GS Wavetable SW Synth)のファイルだったような気がする。
DirectX 8.1をoldversion.comから入手*2し、
$ unzip directx81.exe Archive: directx81.exe creating: Redist/DirectX81/ inflating: Redist/DirectX81/BDA.cab inflating: Redist/DirectX81/BDANT.cab inflating: Redist/DirectX81/cfgmgr32.dll inflating: Redist/DirectX81/DirectX.cab inflating: Redist/DirectX81/DSETUP.dll inflating: Redist/DirectX81/dsetup32.dll inflating: Redist/DirectX81/dxnt.cab inflating: Redist/DirectX81/dxsetup.exe inflating: Redist/DirectX81/setupapi.dll $ mkdir work; cd work/ $ cabextract ../Redist/DirectX81/DirectX.cab > /dev/null $ mv gm16.dls ${WINEPREFIX:-${HOME}/.wine}/dosdevices/c:/windows/system32/drivers/gm.dls $ cd ../ $ rm Redist/ work/ -fr
とすることで、gm.dlsがC:\WINDOWS\system32\drivers\以下に得られる。cabextractはディストリのパッケージになっていることが多い(展開さえできれば、これを使わずにWindowsアプリで展開してもよい)。
- サイズ: 3,440,660バイト
- MD5: 7f29903cb8f5590d52db0c9f97049a25
- SHA-1: 57145f5f449624a10a357d64c982c6eaa7ebc1d9
しかし、サウンドテスターでも他の作品でも、結局音は出なかった。メッセージには変化があるのだが...
$ WINEDEBUG=+dmloader env -u XMODIFIERS wine Game.exe (以下、再生開始時のメッセージ) trace:dmloader:DllGetClassObject (CLSID_DirectMusicLoader, IID_IClassFactory, 0x827248) trace:dmloader:DMUSIC_CreateDirectMusicLoaderCF (IID_IClassFactory, 0x827248, (nil)) trace:dmloader:IDirectMusicLoaderCF_QueryInterface (0x185050, IID_IClassFactory, 0x827248) trace:dmloader:IDirectMusicLoaderCF_AddRef (0x185050): AddRef from 0 trace:dmloader:IDirectMusicLoaderCF_CreateInstance (0x185050, (nil), IID_IDirectMusicLoader8, 0xc104d8) trace:dmloader:DMUSIC_CreateDirectMusicLoaderImpl (IID_IDirectMusicLoader8, 0xc104d8, (nil)) trace:dmloader:DMUSIC_InitLoaderSettings : (0x185068) trace:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_SetObject (0x185068, 0x826e58): pDesc: DMUS_OBJECTDESC (0x826e58): - dwSize = 0x00000350 - dwValidData = 0x00000033 (DMUS_OBJ_OBJECT DMUS_OBJ_CLASS DMUS_OBJ_FILENAME DMUS_OBJ_FULLPATH ) - guidClass = CLSID_DirectMusicCollection - guid trace:dmloader:DMUSIC_CreateDirectMusicLoaderFileStream (0x826e04) trace:dmloader:IDirectMusicLoaderFileStream_IStream_QueryInterface (0x186a18, IID_IStream, 0x826e04) trace:dmloader:IDirectMusicLoaderFileStream_IStream_AddRef (0x186a18): AddRef from 0 trace:dmloader:IDirectMusicLoaderFileStream_Attach (0x186a18, L"c:\\windows\\system32\\drivers\\gm.dls", 0x185068) trace:dmloader:IDirectMusicLoaderFileStream_Detach (0x186a18) trace:dmloader:IDirectMusicLoaderFileStream_Attach : succeeded trace:dmloader:DMUSIC_CopyDescriptor : copy DMUS_OBJECTDESC (0x8266a0): - dwSize = 0x00000350 - dwValidData = 0x00000086 (DMUS_OBJ_CLASS DMUS_OBJ_NAME DMUS_OBJ_VERSION ) - guidClass = CLSID_DirectMusicCollection - vVersion = '1,0,16,2' - w(0x186a18): ReleaseRef to 0 trace:dmloader:IDirectMusicLoaderFileStream_Detach (0x186a18) trace:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_SetObject : adding alias entry with following info: DMUS_OBJECTDESC (0x826e58): - dwSize = 0x00000350 - dwValidData = 0x000000B7 (DMUS_OBJ_OBJECT DMUS_OBJ_CLASS DMUS_OBJ_NAME DMUS_OBJ_FILENAME DMUS_OBJ_FULLPATH DMUS_OBJ_VERSION ) - guidClass = CLSI trace:dmloader:DMUSIC_CopyDescriptor : copy DMUS_OBJECTDESC (0x826e58): - dwSize = 0x00000350 - dwValidData = 0x000000B7 (DMUS_OBJ_OBJECT DMUS_OBJ_CLASS DMUS_OBJ_NAME DMUS_OBJ_FILENAME DMUS_OBJ_FULLPATH DMUS_OBJ_VERSION ) - guidClass = CLSI(0x185068, IID_IDirectMusicLoader8, 0xc104d8) trace:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_AddRef (0x185068): AddRef from 0 trace:dmloader:IDirectMusicLoaderCF_Release (0x185050): ReleaseRef to 0 fixme:dmime:IDirectMusicPerformance8Impl_InitAudio (0x1874d0, (nil), 0x82728c, (nil), 0, 0, 0, 0x8272dc): to check fixme:dmime:IDirectMusicPerformance8Impl_Init (iface = 0x1874d0, dmusic = (nil), dsound = 0x130d98, hwnd = (nil)) fixme:dmime:IDirectMusicPerformance8Impl_CreateStandardAudioPath (0x1874d0)->(0, 0, 0, 0x18769c): semi-stub
(2009/6/9)VXでもこの件については同様で、「RPGツクールXP/VX作品をWine上で動かす際のMIDIデータ(BGMとME)の再生に関する強引な対処」で強引に鳴らすことはできるが、根本的な解決策ではない。
(2010/4/13)この問題に関する対処については「Wine上のRPGツクールXP/VX作品の動作に関する追加メモ(2010/4/13現在)」で扱っている。
その他
RPG Maker XP(英語版のRPGツクールXP)に関する情報が、アプリケーションデータベースに少しだけ書かれている。http://appdb.winehq.org/objectManager.php?sClass=version&iId=5206
(2008/3/30)公式のBugzillaにBGMの件が書かれているが、バージョン0.9.58の時点では修正されておらず、鳴らない。
bugs.winehq.org/show_bug.cgi?id=10791
使用したバージョン:
- Wine 0.9.45
- RPGツクールXP RTP 1.03