RPGツクール2000で制作されたゲームをWineで実行させる際の覚え書き
(2010/2/17)RPGツクール2000作品の動作については後から色々と分かったことがあり、それらをまとめドキュメントにまとめている。また、Q4Wineを用いてGUIのみで各種準備から作品の管理までを行う手順については「Q4Wineについて(Wine環境を分ける例/RPGツクール2000,2003作品・前半・2009/12/2現在)」と「Q4Wineについて(Wine環境を分ける例/RPGツクール2000,2003作品・後半・2009/12/3現在)」で扱っている。
- RPGツクール2000のRTP
- Wineのバージョンは0.9.42がよい?
- RPG_RT.exeについて
- XMODIFIERSのせいでキーが効かない?
- 解像度を変更しないでウィンドウ上で動作させる場合
- フォント
- CPU使用率とcpufreq
- セーブデータが行方不明、でも読み書きできる?
RPGツクール2000のRTP
まず、Windows上と同様、RTPと呼ばれるランタイムパッケージが必要になるため、はじめにダウンロードしておく。最終的に、
項目 | 値 |
---|---|
ファイルサイズ | 12,325,462バイト |
MD5 | f745653bbee5ba9a6725a874a43386d5 |
SHA-1 | f5ddcf5285ee5e4d663dceb059059dd2931cf9e3 |
Wineのバージョンは0.9.42がよい?
- 0.9.43は挙動が怪しく、ゲーム起動時にメモリを大量に喰ってしまったりしたこともあった。
- 0.9.42はまともに動作した。
- 0.9.39〜0.9.41では、効果音が遅れることがあった。
複数バージョンのWineを共存させておくとよいかもしれない。
RPG_RT.exeについて
実際にゲームを起動させるときに実行させるファイルがRPG_RT.exe。このファイルは、確認した限りでは2種類のものが存在する。古いバージョン: はじめに「ASCII」と表示されるもの
- サイズ: 726,016バイト
- MD5: 26016028e08eb1271b760c60f34c4609
- SHA-1: 2acf7e326ef24bd631e8004aca957f58d28e1e5e
新しいバージョン: 「enterbrain」のロゴが出るもの
- サイズ: 746,496バイト
- MD5: fbc7ddbe6469ce87855eee1b0e63d1bd
- SHA-1: 1a2d66784db595187013b3d2bb895ee8d8f3f240
(2007/9/3)どちらのRPG_RT.exeでもランダムに落ちる現象は起きてしまうようだ。これは新しいバージョンの吐くメッセージ。
wine: Unhandled exception 0x80000003 at address 0x0000:0x7ee56b10 (thread 0009), starting debugger... 0x7ee56b11 _CheckNotSysLevel+0x41 in kernel32: addl $36,%esp Modules: Module Address Debug info Name (91 modules) PE 400000- 4bd000 Deferred rpg_rt ELF 7bf00000-7bf03000 Deferred <wine-loader> ELF 7c41f000-7c446000 Deferred msvfw32<elf> \-PE 7c430000-7c446000 \ msvfw32 ELF 7c446000-7c48e000 Deferred dsound<elf> \-PE 7c450000-7c48e000 \ dsound ELF 7c48e000-7c4e9000 Deferred quartz<elf> \-PE 7c4a0000-7c4e9000 \ quartz ELF 7c5cb000-7c646000 Deferred libglu.so.1 ELF 7c667000-7c738000 Deferred wined3d<elf> \-PE 7c680000-7c738000 \ wined3d ELF 7c738000-7c78c000 Deferred ddraw<elf> \-PE 7c740000-7c78c000 \ ddraw ELF 7cb51000-7cb65000 Deferred olepro32<elf> \-PE 7cb60000-7cb65000 \ olepro32 ELF 7cb65000-7cb7a000 Deferred midimap<elf> \-PE 7cb70000-7cb7a000 \ midimap ELF 7cb7a000-7cc38000 Deferred libasound.so.2 ELF 7cc41000-7cc59000 Deferred msacm32<elf> \-PE 7cc50000-7cc59000 \ msacm32 ELF 7cc59000-7cc8b000 Deferred winealsa<elf> \-PE 7cc60000-7cc8b000 \ winealsa ELF 7d29d000-7d2cf000 Deferred uxtheme<elf> \-PE 7d2a0000-7d2cf000 \ uxtheme ELF 7d2cf000-7d2d4000 Deferred libxfixes.so.3 ELF 7d2d4000-7d2dd000 Deferred libxcursor.so.1 ELF 7d2e5000-7d2ef000 Deferred libgcc_s.so.1 ELF 7d2fe000-7d302000 Deferred libxrandr.so.2 ELF 7d302000-7d30a000 Deferred libxrender.so.1 ELF 7d30a000-7d30d000 Deferred libxinerama.so.1 ELF 7d311000-7d32e000 Deferred imm32<elf> \-PE 7d320000-7d32e000 \ imm32 ELF 7d3f2000-7d406000 Deferred winejoystick<elf> \-PE 7d400000-7d406000 \ winejoystick ELF 7d8ab000-7d8ad000 Deferred libnvidia-tls.so.1 ELF 7d8ad000-7e245000 Deferred libglcore.so.1 ELF 7e245000-7e2db000 Deferred libgl.so.1 ELF 7e2db000-7e2e0000 Deferred libxdmcp.so.6 ELF 7e2e0000-7e2e3000 Deferred libxau.so.6 ELF 7e2e3000-7e3ce000 Deferred libx11.so.6 ELF 7e3ce000-7e3dc000 Deferred libxext.so.6 ELF 7e3dc000-7e3e1000 Deferred libxxf86vm.so.1 ELF 7e3e1000-7e3f8000 Deferred libice.so.6 ELF 7e3f8000-7e401000 Deferred libsm.so.6 ELF 7e422000-7e4b1000 Deferred winex11<elf> \-PE 7e430000-7e4b1000 \ winex11 ELF 7e545000-7e564000 Deferred libexpat.so.0 ELF 7e564000-7e58e000 Deferred libfontconfig.so.1 ELF 7e58e000-7e5a0000 Deferred libz.so.1 ELF 7e5a0000-7e60b000 Deferred libfreetype.so.6 ELF 7e60b000-7e631000 Deferred msacm32<elf> \-PE 7e610000-7e631000 \ msacm32 ELF 7e631000-7e6be000 Deferred winmm<elf> \-PE 7e640000-7e6be000 \ winmm ELF 7e6be000-7e716000 Deferred shlwapi<elf> \-PE 7e6d0000-7e716000 \ shlwapi ELF 7e716000-7e811000 Deferred shell32<elf> \-PE 7e730000-7e811000 \ shell32 ELF 7e811000-7e8cd000 Deferred comctl32<elf> \-PE 7e820000-7e8cd000 \ comctl32 ELF 7e8cd000-7e8df000 Deferred libresolv.so.2 ELF 7e900000-7e91e000 Deferred iphlpapi<elf> \-PE 7e910000-7e91e000 \ iphlpapi ELF 7e91e000-7e977000 Deferred rpcrt4<elf> \-PE 7e930000-7e977000 \ rpcrt4 ELF 7e977000-7ea13000 Deferred ole32<elf> \-PE 7e990000-7ea13000 \ ole32 ELF 7ea13000-7eaad000 Deferred oleaut32<elf> \-PE 7ea20000-7eaad000 \ oleaut32 ELF 7eaad000-7eaf4000 Deferred advapi32<elf> \-PE 7eac0000-7eaf4000 \ advapi32 ELF 7eaf4000-7eb89000 Deferred gdi32<elf> \-PE 7eb10000-7eb89000 \ gdi32 ELF 7eb89000-7ecc4000 Deferred user32<elf> \-PE 7eba0000-7ecc4000 \ user32 ELF 7ecc4000-7ecc9000 Deferred euc-jp.so ELF 7edce000-7eef2000 Export kernel32<elf> \-PE 7edf0000-7eef2000 \ kernel32 ELF 7eef2000-7eefc000 Deferred libnss_files.so.2 ELF 7eefc000-7ef06000 Deferred libnss_nis.so.2 ELF 7ef06000-7ef1c000 Deferred libnsl.so.1 ELF 7ef1c000-7ef41000 Deferred libm.so.6 ELF 7ef48000-7ef62000 Deferred libjis.so ELF 7ef62000-7f000000 Deferred ntdll<elf> \-PE 7ef70000-7f000000 \ ntdll ELF f7d5b000-f7d5f000 Deferred libdl.so.2 ELF f7d5f000-f7e85000 Deferred libc.so.6 ELF f7e85000-f7e9c000 Deferred libpthread.so.0 ELF f7eb5000-f7ebd000 Deferred libnss_compat.so.2 ELF f7ebd000-f7fd1000 Deferred libwine.so.1 ELF f7fd2000-f7fee000 Deferred ld-linux.so.2 Threads: process tid prio (all id:s are in hex) 0000000a 0000000b 0 00000008 (D) Z:\(中略)\RPG_RT.exe 0000000c 15 00000009 0 <==
古いRPG_RT.exeでは、下のようになる。
wine: Unhandled exception 0x80000003 at address 0x0000:0x7ee56b10 (thread 0009), starting debugger... 0x7ee56b11 _CheckNotSysLevel+0x41 in kernel32: addl $36,%esp Modules: Module Address Debug info Name (92 modules) PE 400000- 4b9000 Deferred rpg_rt PE 6d0000- 748000 Deferred harmony ELF 7bf00000-7bf03000 Deferred <wine-loader> ELF 7c437000-7c45e000 Deferred msvfw32<elf> \-PE 7c440000-7c45e000 \ msvfw32 ELF 7c45e000-7c4a6000 Deferred dsound<elf> \-PE 7c470000-7c4a6000 \ dsound ELF 7c4a6000-7c501000 Deferred quartz<elf> \-PE 7c4b0000-7c501000 \ quartz ELF 7c5e3000-7c65e000 Deferred libglu.so.1 ELF 7c67f000-7c750000 Deferred wined3d<elf> \-PE 7c690000-7c750000 \ wined3d ELF 7c750000-7c7a4000 Deferred ddraw<elf> \-PE 7c760000-7c7a4000 \ ddraw ELF 7cb69000-7cb7e000 Deferred midimap<elf> \-PE 7cb70000-7cb7e000 \ midimap ELF 7cb7e000-7cba4000 Deferred msacm32<elf> \-PE 7cb90000-7cba4000 \ msacm32 ELF 7cba4000-7cc62000 Deferred libasound.so.2 ELF 7cc6b000-7cc83000 Deferred msacm32<elf> \-PE 7cc70000-7cc83000 \ msacm32 ELF 7cc83000-7ccb5000 Deferred winealsa<elf> \-PE 7cc90000-7ccb5000 \ winealsa ELF 7d2bd000-7d2c7000 Deferred libgcc_s.so.1 ELF 7d2c7000-7d2f9000 Deferred uxtheme<elf> \-PE 7d2d0000-7d2f9000 \ uxtheme ELF 7d2f9000-7d2fe000 Deferred libxfixes.so.3 ELF 7d2fe000-7d307000 Deferred libxcursor.so.1 ELF 7d307000-7d31b000 Deferred olepro32<elf> \-PE 7d310000-7d31b000 \ olepro32 ELF 7d328000-7d32c000 Deferred libxrandr.so.2 ELF 7d32c000-7d334000 Deferred libxrender.so.1 ELF 7d334000-7d337000 Deferred libxinerama.so.1 ELF 7d33b000-7d358000 Deferred imm32<elf> \-PE 7d340000-7d358000 \ imm32 ELF 7d41c000-7d430000 Deferred winejoystick<elf> \-PE 7d420000-7d430000 \ winejoystick ELF 7d8d5000-7d8d7000 Deferred libnvidia-tls.so.1 ELF 7d8d7000-7e26f000 Deferred libglcore.so.1 ELF 7e26f000-7e305000 Deferred libgl.so.1 ELF 7e305000-7e30a000 Deferred libxdmcp.so.6 ELF 7e30a000-7e30d000 Deferred libxau.so.6 ELF 7e30d000-7e3f8000 Deferred libx11.so.6 ELF 7e3f8000-7e406000 Deferred libxext.so.6 ELF 7e406000-7e40b000 Deferred libxxf86vm.so.1 ELF 7e40b000-7e422000 Deferred libice.so.6 ELF 7e422000-7e42b000 Deferred libsm.so.6 ELF 7e44c000-7e4db000 Deferred winex11<elf> \-PE 7e460000-7e4db000 \ winex11 ELF 7e56b000-7e58a000 Deferred libexpat.so.0 ELF 7e58a000-7e5b4000 Deferred libfontconfig.so.1 ELF 7e5b4000-7e5c6000 Deferred libz.so.1 ELF 7e5c6000-7e631000 Deferred libfreetype.so.6 ELF 7e631000-7e6be000 Deferred winmm<elf> \-PE 7e640000-7e6be000 \ winmm ELF 7e6be000-7e716000 Deferred shlwapi<elf> \-PE 7e6d0000-7e716000 \ shlwapi ELF 7e716000-7e811000 Deferred shell32<elf> \-PE 7e730000-7e811000 \ shell32 ELF 7e811000-7e8cd000 Deferred comctl32<elf> \-PE 7e820000-7e8cd000 \ comctl32 ELF 7e8cd000-7e8df000 Deferred libresolv.so.2 ELF 7e900000-7e91e000 Deferred iphlpapi<elf> \-PE 7e910000-7e91e000 \ iphlpapi ELF 7e91e000-7e977000 Deferred rpcrt4<elf> \-PE 7e930000-7e977000 \ rpcrt4 ELF 7e977000-7ea13000 Deferred ole32<elf> \-PE 7e990000-7ea13000 \ ole32 ELF 7ea13000-7eaad000 Deferred oleaut32<elf> \-PE 7ea20000-7eaad000 \ oleaut32 ELF 7eaad000-7eaf4000 Deferred advapi32<elf> \-PE 7eac0000-7eaf4000 \ advapi32 ELF 7eaf4000-7eb89000 Deferred gdi32<elf> \-PE 7eb10000-7eb89000 \ gdi32 ELF 7eb89000-7ecc4000 Deferred user32<elf> \-PE 7eba0000-7ecc4000 \ user32 ELF 7ecc4000-7ecc9000 Deferred euc-jp.so ELF 7edce000-7eef2000 Export kernel32<elf> \-PE 7edf0000-7eef2000 \ kernel32 ELF 7eef2000-7eefc000 Deferred libnss_files.so.2 ELF 7eefc000-7ef06000 Deferred libnss_nis.so.2 ELF 7ef06000-7ef1c000 Deferred libnsl.so.1 ELF 7ef1c000-7ef41000 Deferred libm.so.6 ELF 7ef48000-7ef62000 Deferred libjis.so ELF 7ef62000-7f000000 Deferred ntdll<elf> \-PE 7ef70000-7f000000 \ ntdll ELF f7c89000-f7c8d000 Deferred libdl.so.2 ELF f7c8d000-f7db3000 Deferred libc.so.6 ELF f7db3000-f7dca000 Deferred libpthread.so.0 ELF f7de3000-f7deb000 Deferred libnss_compat.so.2 ELF f7deb000-f7eff000 Deferred libwine.so.1 ELF f7f00000-f7f1c000 Deferred ld-linux.so.2 Threads: process tid prio (all id:s are in hex) 0000000a 0000000b 0 00000008 (D) Z:\(中略)\RPG_RT.exe 0000000c 15 00000009 0 <==
XMODIFIERSのせいでキーが効かない?
環境変数XMODIFIERSがセットされているときのみ、何故かキーボード操作を受け付けなかったりするので、その場合、$ env -u XMODIFIERS wine [RPG_RT.exeの場所]
のような形で実行するとよい。
解像度を変更しないでウィンドウ上で動作させる場合
Wineデスクトップを使用する。640x480で表示させると、無駄に動作が重くなる(内部的には320x240のため)。$ env -u XMODIFIERS wine explorer /desktop=rpg2k,320x240 [RPG_RT.exeの場所]
小さくて見づらい場合、Ctrl+Alt++(もしくは-)や、Compiz FusionのEnhanced Zoom Desktopプラグインなどで拡大するとよい。
フォント
大部分で、「MS ゴシック」に対して置換されるフォントが使用される。「IPA モナー ゴシック」では文字が太すぎて読みにくく、つぶれて読めない場所もあるため。この置換は外してファイル名: ${WINEPREFIX}/user.reg
[Software\\Wine\\Fonts\\Replacements]
-"\xff2d\xff33 \x30b4\x30b7\x30c3\x30af"="IPA \x30e2\x30ca\x30fc \x30b4\x30b7\x30c3\x30af"
${WINEPREFIX}/dosdevices/c:/windows/fonts/以下に、使用したいフォントを入れるか、もしくは置換するフォント名を別のものにする。色々試した結果、表示がまともそうなのは
http://www.geocities.jp/ep3797/modified_fonts_01.html
からダウンロードできる「UmePlus」(umeplus-gothic.ttf)。ディストリのパッケージに無ければ(2007年8月現在、Gentoo,Debian,Ubuntuのいずれにも無い)、[ホームディレクトリ]/.fonts/以下に入れておく。
画像は、左が「IPA モナー ゴシック」、真ん中が「UmePlus Gothic」、右が「Ume Gothic」。「Ume Gothic」も結構まともに読めるが、数字のバランスで、個人的には「UmePlus Gothic」のほうが好み(漢字は小さめで多少読みにくいかも...)。
「MS ゴシック」を「UmePlus Gothic」に置換するための設定は以下。
ファイル名: ${WINEPREFIX}/user.reg
[Software\\Wine\\Fonts\\Replacements] "\xff2d\xff33 \x30b4\x30b7\x30c3\x30af"="UmePlus Gothic"
(2007/8/21)更に綺麗なフォント2つについて、設定を含めて追記した。→「内蔵ビットマップの綺麗なフォントを探す」
CPU使用率とcpufreq
RPGツクール2000で作成されたゲームは、CPUの性能やクロック周波数に関わらず、常にCPUを100%使用する。cpufreqが使用可能なCPUを使用している場合、最大クロック周波数を絞ることで、高い省電力効果が期待できる。cpufreqdを使用している場合、ルールの設定で、programsプラグインを使用してRPG_RT.exeを追加することで、自動的に、ゲーム動作時にクロックを下げてくれる。cpufreqdの詳しい設定方法は「動的にCPUクロックや電圧を変更するcpufreqの概要とcpufreqdデーモンについて」を参照。下の設定は一部な上、環境に合わせる必要のある部分もあるため、これだけでは動作しないので注意。
ファイル名: /etc/cpufreqd.conf
[Profile] name=powersave-low minfreq=1000000 maxfreq=1000000 policy=powersave [/Profile] [Rule] name=throttle-low cpu_interval=0-100 programs=RPG_RT.exe profile=powersave-low [/Rule]
また、手動でのプロファイル切り替え(2.1系用スクリプト 2.2系用スクリプト)を使って絞る手もある。
セーブデータが行方不明、でも読み書きできる?
${HOME}/[ゲームのディレクトリ名]というディレクトリが何故かできていて、セーブデータのみがその中に入っている、という場合がある。(2007/8/19)これは、ゲームのディレクトリに対する書き込み権限がない場合に起こるようだ。
使用したバージョン:
- Wine 0.9.39 - 0.9.43