2009年10月4日日曜日

Wineでロシアでポトリス

Wineを使いLinux上でロシア版ポトリスを動かしてみたレビューです。
ロシア語を文字化けなく綺麗に表示できた!





その他のスクリーンショット


戦車で交互に撃ち合う2Dネットゲーム「ポトリス」。日本やアメリカ等で遊べたんですが、現在、日本人がプレイできるのはロシア版のポトリスだけのようです。Linux上で動かすためにVMwareを使ってたんですが、Wineでより軽く速く動かすことができるようになった!ありがとうWine開発者。

Linux上でロシア語のロケールを設定するとWine内部で自動的にポトリスのロケールも適切なもの(CP1251)を選んでくれるようで、ロシア語(キリル文字)を文字化けなく綺麗に表示できます。日本語ロケールを選べば日本語表示&入力もできます。

公式のAppDBに登録しておきました。

WineHQ - Fortress2 Blue Forever 1.0.1
http://appdb.winehq.org/objectManager.php?sClass=version&iId=17995


以下、ロシア版ポトリスをWineで動かすための詳しい手順です。


Wineでロシア版ポトリスを動かす手順
  • 1. Wineのインストール

  • 2. オーディオの設定

  • 3. フォントの設定

  • 4. ロシア語ロケールの設定

  • 5. ロシア版ポトリスのインストール

  • 6. ロシア版ポトリスの実行

  • (7. 動作安定化: レジストリーの編集)

  • (8. MIDIの設定: DLLのオーバーライド等)


1. Wineのインストール

公式で開発版のwine-1.1.30をダウンロードしてmake、インストールしました。
特に必要となるようなconfigureオプションはありませんでした。
安定版(1.0.1)では動作しませんでした。

※wine-1.1.31〜wine-1.1.36でも動きました [2010-01-09]


2. オーディオの設定

ALSAで音が鳴るように設定します。

以下実行したコマンドです。
$ winecfg
"Audio"タブを選択。



ダイアローグがポップアップ。OK"を押す。
過去に設定済みの場合はこのダイアログは出ない。



自分の環境では何もしなくても、この時点で自動的に以下のように設定された。





3. フォントの設定

ロシア語の表示にはlucon.ttf、日本語の表示にはmsgothic.ttcがいい感じです。
「$HOME/.wine/drive_c/windows/Fonts」以下にコピーまたはシンボリックリンクを作成。
※自分が持っているWindowsXPのフォントフォルダーから持ってきました。ライセンス違反かも?

以下実行したコマンドです。
$ cd $HOME/.wine/drive_c/windows/Fonts
$ ln -s $SOMEWHERE/lucon.ttf
$ ln -s $SOMEWHERE/msgothic.ttc

4. ロシア語ロケールの設定

ロシア語ロケール「ru_RU.UTF-8」を使えるようにします。/etc/locale.genを編集。「# ru_RU.UTF-8 UTF-8」のコメントを外しました。

※ロシア版ポトリス内部ではCP1251を使っているようです。SCIMでの入力のためにru_RU.CP1251でなくUTF-8を選びました。ru_RU.UTF-8の替わりにru_RU.CP1251でもru_RU.KOI8-Rでもロシア語を表示できました。Wineが自動的にCP1251に合わせてくれてる?

以下、その後に実行したコマンドです。
# locale-gen
Generating locales (this might take a while)...
(中略)
ru_RU.UTF-8... done
(中略)
done
Generation complete.

5. ロシア版ポトリスのインストール

公式からダウンロードしてきてWineで実行しました。

以下実行したコマンドです。
$ LANG=ru_RU.UTF-8 wine fotress2_v1.0.1_installer.exe
Далее = Next、Отмена = Cancel



ライセンスに同意=上にチェックを入れてNextを押す。



インストール最後の画面。2つのチェックは外す。チェックしたままでも問題なくインストールは終わるがエラーダイアログが出る。



※翻訳してみた
Запустить Fortress2 Blue Forever
→ Run Fortress2 Blue Forever: インストーラー終了後ポトリスを起動する
Домашняя страница Fortress2 Blue Forever
→ Home Fortress2 Blue Forever: 公式webサイトをブラウザーで開く
Зарегистрироваться в игре Fortress2 Blue Forever
→ Sign in game Fortress2 Blue Forever: ログインアカウントを作成するサイトをブラウザーで開く



6. ロシア版ポトリスの実行

以下実行したコマンドです。
$ cd $HOME/.wine/drive_c/Program\ Files/Innova/Fortress2
$ LANG=ru_RU.UTF-8 wine GAME.exe
パッチサーバーに接続、ログインするサーバーを選択したのちログイン画面に到達します。
後はアカウントとパスワードを入力するだけ!アカウントの取得方法はこちらのサイトが参考になりました。



以上でロシア版ポトリスが動きました!


(7. 動作安定化: レジストリーの編集)

手順1-6まででとりあえずロシア版ポトリスを起動できますが、自分の環境では安定動作しませんでした。
起動してしばらくたつと以下のエラーが連続して表示され画面の描画が止まってしまう…
fixme:d3d:stretch_rect_fbo >>>>>>>>>>>>>>>>> GL_INVALID_FRAMEBUFFER_OPERATION (0x506) from glBlitFramebuffer() @ device.c / 6434
レジストリーを編集することで解決しました。
以下の2行のテキストファイル「pbuffer.reg」を適当な場所に作成します。
[HKEY_CURRENT_USER\Software\Wine\Direct3D]
"OffScreenRenderingMode"="pbuffer"
以下、その後に実行したコマンドです。
$ wine regedit pbuffer.reg
以上で安定動作するようになりました。


(8. MIDIの設定: DLLのオーバーライド等)

手順1-7までで安定動作しますが、MIDIのBGMが鳴りませんでした。音が鳴るのは効果音だけ。
DLLのオーバーライドとgm.dlsのコピーが必要でした。
※普段ミュージックOFFにしてポトリスする人にはこの設定が必要ないと思います。

1) ダウンロード

「DirectX 9.0c」に必要なDLL等が含まれています。
マイクロソフト公式から「DirectX 9.0c Redistributable」を探してダウンロードします。

2) DLLとgm.dlsのコピー
ダウンロードした「DirectX 9.0c Redistributable」を解凍してDLL等をコピーします。
解凍にはcabextractが使えました。

以下実行したコマンドです。
$ cabextract directx_9c_redist.exe -d /tmp/directx_9c_redist
$ cabextract /tmp/directx_9c_redist/DirectX.cab -d /tmp/DirectX

$ cd $HOME/.wine/drive_c/windows/system32
$ cp /tmp/DirectX/dm{band,ime,loader,synth,usic,style}.dll ./
$ cd drivers
$ cp /tmp/DirectX/gm16.dls ./gm.dls
※「gm16.dls」は「gm.dls」へリネームが必要

3) DLLのオーバーライド
以下実行したコマンドです。
$ winecfg
"Libraries"タブを開く。



6つのDLLをAddする。



以上でMIDIのBGMが鳴りました。

※wine-1.1.33以降はデフォルトで6つのDLL(dmband.dll, dmime.dll, dmloader.dll, dmstyle.dll, dmsynth.dll and dmusic.dll)を持っていますが、これらデフォルトbuilt-inのDLLではMIDIのBGMが鳴りませんでした。上記の方法と同様にして6つのDLLを入れ替える必要がありました。 [2009-12-20]

※wine-1.1.33以降、BGMをOFFにしていても6つのDLLをオーバーライドしないと"error:dsound:DSOUND_MixOne Fatal error. ..."が断続的に表示された後、"wine: Assertion failed at address ..."と表示されWineが止まることがありました。wine-1.1.33以降のビルトインDLLがエンバグしてる?とりあえず、6つのDLLを上記方法で入れ替えオーバーライドすると落ちなくなりました。 [2009-12-05]


まとめ

Linuxネイティアプリかのようにポトリスが動いて感動!W:ETとポトリスが主力になりそうです。
ロシア語が読み書きできるようになった!ロシア人ルームで「Привет(こんにちわ)」とコピペしたらbanされずロシア人と一緒に遊べました。ポトリス内掲示板の翻訳とかもできそう。挑戦してみたいと思います。


参考リンク

Wine公式
http://www.winehq.org/


Wine AppDB
http://appdb.winehq.org/

Wineで動くアプリケーションやその動かし方の情報が蓄積されてます。

ロシア版ポトリス公式
http://www.fortress2.ru/


ロシア版手順 -- ポトリス博物館
http://www.potohaku.com/russian/

アカウント取得方法等を解説されてます。

Wine上でMSGSの音を鳴らす -- 試験運用中なLinux備忘録
http://d.hatena.ne.jp/kakurasan/20080331/p1

MIDIを鳴らすための設定に関し参考にさせて頂きました。


環境

OS: Linux
debian-lenny (i386)
wine-1.1.30 (公式ソースmake)
wine-1.1.36 (公式ソースmake) ※更新しました [2010-01-09]
VGA: GeForce 9600GT
VGA driver: NVIDIA-Linux-x86-177.82-pkg1.run (公式バイナリー)
VGA driver: NVIDIA-Linux-x86-180.44-pkg1.run (公式バイナリー) ※更新しました [2009-10-24]


以下は以前に書いたポトリスに関する記事です。

ロシアでポトリス
ロシアでポトリス2