試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

WineでRPGツクールXP製の作品を動かすのは厳しい?

(2014/8/24)この記事の内容は古いので、まとめドキュメントを参照。Wineの初期状態では動作に幾つかの問題があるものの、適切な対処を行うことで問題なく作品が最後まで動作するようになっている印象がある。
(2014/9/24)一部リンクを修正・解除

以下、以前の内容となる。

Wineでは、RPGツクールXPの作品で動かせるものもあるのだが、幾つかの注意点と、現状ではどうにもできない?大きな問題点がある。
全体的にみると動作はあまり良くないので、現状では、Windowsのライセンスがあれば仮想マシン上にWindowsをインストールして、そこで動かすほうがいいかもしれない。ReactOSに関しては、ランタイムすら入らない状態なので、今後に期待するしかない。

  1. RPGツクールXP RTP(ランタイムパッケージ)
  2. XMODIFIERSの問題
  3. 異常終了
  4. MIDI再生について
  5. その他

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の問題

RPGツクール2000作品と同様、環境変数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.dlsC:\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

使用したバージョン:

*1:音色としてはMSGSっぽいが、リバーブがかかっている感じがする

*2:Microsoftのサイトでも入手できるが、再頒布可能パッケージなので他の場所からも入手できる