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

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

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現在)」で扱っている。

  1. RPGツクール2000のRTP
  2. Wineのバージョンは0.9.42がよい?
  3. RPG_RT.exeについて
    1. 古いバージョン: はじめに「ASCII」と表示されるもの
    2. 新しいバージョン: 「enterbrain」のロゴが出るもの
  4. XMODIFIERSのせいでキーが効かない?
  5. 解像度を変更しないでウィンドウ上で動作させる場合
  6. フォント
  7. CPU使用率とcpufreq
  8. セーブデータが行方不明、でも読み書きできる?

RPGツクール2000のRTP

まず、Windows上と同様、RTPと呼ばれるランタイムパッケージが必要になるため、はじめにダウンロードしておく。
最終的に、
ファイル情報: RPG2000RTP.exe
項目
ファイルサイズ12,325,462バイト
MD5f745653bbee5ba9a6725a874a43386d5
SHA-1f5ddcf5285ee5e4d663dceb059059dd2931cf9e3
上記のファイルRPG2000RTP.exeが得られる。これを実行することでインストーラが起動し、ウィザードを進めていくとRTPがインストールされる。Enter連打(数回)で問題ない。

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