2015/07/27

Bve trainsim(本家版BVE)をWineで動かす

ここでは、Windows用の鉄道運転シミュレータBve trainsimWineで動かす上でのメモを扱う。

下は実際に動いていることを示すスクリーンショット。

シミュレータの動作画面

  1. 必要なパッケージ
    1. 本体と路線データ
    2. 動作に必須なランタイムパッケージ
      1. .NET Framework 3.5
      2. (バージョン5.6以下のみ)DirectXの.NET向けバインディング(Managed DirectX)
    3. Wineで必要なパッケージ
  2. DirectXの.NET向けバインディング(Managed DirectX)の配置について
    1. DirectXのインストーラを用いる場合
    2. ファイルを直接配置する場合

必要なパッケージ

本体と路線データ

Bve trainsim公式サイトから本体をダウンロードし、路線データはWeb上で別途入手する(公式サイトには “京成千葉線” の路線データがある)。

今回は “インストーラなし版” のファイルをダウンロードしたが、こちらのほうが書庫を展開するだけでよいのでWineで使う際に導入しやすい。

動作に必須なランタイムパッケージ

.NET Framework 3.5

Wine Monoでは正常に動作しないが、.NET Framework 3.5をインストールすることで動作するようになる。

インストールの方法や注意点については以下を参照。

(バージョン5.6以下のみ)DirectXの.NET向けバインディング(Managed DirectX)

Bve trainsimでは3D描画処理にDirect3Dを “Managed DirectX” と呼ばれる非推奨なAPIを通して.NET Frameworkから用いているいた。このDLL群はMicrosoftのDirectXランタイムパッケージの一部として存在し、2010年に公開された再頒布可能パッケージ(February版とJune版のどちらでも可)の中にもファイルが含まれている。

(2015/8/15)Winetricksで “Managed DirectX” の全バージョンのファイル群をインストールする機能を提供するパッチを作成して2015年8月中旬に取り込んでもらうことができたので、今後は同ツールで “mdx” パッケージを選択することで簡単にインストールできるようになった。

ファイルの配置方法については見出し:DirectXの.NET向けバインディング(Managed DirectX)の配置についてで後述する。

(2017/5/10)バージョン5.7以上ではこれに替わって “SlimDX” という自由なソフトウェアのライブラリが使われており、本体に同梱もされているため、追加でパッケージを導入する必要はなくなっている。

Wineで必要なパッケージ

上記パッケージが揃った状態でも、 “シナリオ” と呼ばれるデータファイル群の読み込み時に.xファイルの読み込みが正しく行えずに “Error in the application.” というエラーが出て描画もおかしくなる。

読み込みダイアログ内には

シナリオを正しく読み込めませんでした。続行するとプログラムが正常に動作しない可能性があります。

と表示される。

データ読み込み時のエラー

これを回避するためにはWindowsネイティブ版の “d3dx9_43” のDLLを用いる。Winetricksではこの名前のパッケージをインストールすることで簡単に導入できる。

$ WINEPREFIX=/path/to/wineprefix winetricks d3dx9_43

(2015/8/15)必要なパッケージ群をまとめてインストールする場合は下のようになる(“20150810” よりも新しいバージョンのWinetricksが必要)。

(2017/5/10)以前のWineでは “d3dx9_36” を指定することで動作していたが、バージョン2.0.1時点のWineでは (“dotnet35” 以外に) “d3dx9_43” と、好みに応じてIPAモナーフォントの “fakejapanese_ipamona” を指定する。

$ WINEPREFIX=/path/to/wineprefix WINEARCH=win32 winetricks fakejapanese_ipamona dotnet35 d3dx9_43

Winetricksについては以下を参照。

DirectXの.NET向けバインディング(Managed DirectX)の配置について

ここではManaged DirectXのDLL群をDirectXの再頒布可能パッケージの配布ファイルから取り出して配置するための2通りの方法についてを扱う。

DirectXのインストーラを用いる場合

Winetricksで “directx9” を選択してインストールしてもよい(手っ取り早い)が、余計なファイルが配置されたり設定がされたりすることなどからおすすめはできない。

最低限のファイルだけをDirectXの再頒布可能パッケージのファイルから取り出す場合は同ファイル(directx_feb2010_redist.exeもしくはdirectx_Jun2010_redist.exe)をcabextractなど(GUIのArchive Manager/File Rollerなどを用いても可)で展開した後

  • Apr2006_d3dx9_30_x86.cab
  • Apr2006_MDX1_x86.cab
  • Apr2006_MDX1_x86_Archive.cab
  • DSETUP.dll
  • DXSETUP.exe
  • dxupdate.cab
  • dsetup32.dll

以外を消してからDXSETUP.exeを実行する。

ファイルを直接配置する場合

DirectXの再頒布可能パッケージのファイル(directx_feb2010_redist.exeもしくはdirectx_Jun2010_redist.exe)からApr2006_MDX1_x86.cabを展開し、更にその中のApr2006_MDX1_x86.cabを展開すると “microsoft.directx.” で始まる名前のDLL群が得られるので、その中の

  • microsoft.directx.direct3d.dll
  • microsoft.directx.direct3dx.dll
  • microsoft.directx.directsound.dll
  • microsoft.directx.dll

を本体(BveTs.exe)のあるディレクトリに移動する。

本体のディレクトリに入れない方法ではWine環境内のdosdevices/c:/windows/assembly/GAC/以下のディレクトリツリーにファイルを配置する必要がある(角括弧で囲まれた項目はディレクトリ)。[1]

dosdevices/c:/windows/assembly/GAC/以下の配置
--+-[microsoft.directx]
  |   +-[1.0.2902.0__31bf3856ad364e35]
  |       +- microsoft.directx.dll
  +-[microsoft.directx.direct3d]
  |   +-[1.0.2902.0__31bf3856ad364e35]
  |       +- microsoft.directx.direct3d.dll
  +-[microsoft.directx.direct3dx]
  |   +-[1.0.2911.0__31bf3856ad364e35]
  |       +- microsoft.directx.direct3dx.dll
  +-[microsoft.directx.directsound]
      +-[1.0.2902.0__31bf3856ad364e35]
          +- microsoft.directx.directsound.dll

これらの本来の格納ディレクトリはdosdevices/c:/windows/Microsoft.NET/DirectX for Managed Code/以下のバージョンのディレクトリ(1.0.[数字].0)の中となっている。

使用したバージョン:
  • Wine 1.7.44, 2.0.1
  • Bve trainsim 5.6, 5.7
[1]: 一部のファイルは複数のバージョンごとに存在し、本来はApr2006_MDX1_x86_Archive.cabの中身もそれぞれディレクトリを分けて配置する必要がある