Theme
-BeeHive- Home
<- SCROLL

macOS Big Surで32bitのWindowsプログラム(RC15)をWineで動かすという需要のない記事

タイトルのまんまです。

RC15は接続先サーバーの変更やその他諸々を達成するためにゲームのバイナリを直接編集しています。当然、WindowsとMacでは仕組みが全く異なるため、RC15がネイティブでMacに対応するためにはWindows版とは別にパッチを開発する必要がありますが、プレイヤー数の見込めないMacのためにわざわざそんなことはしてくれません。

というわけでMacでもRC15をプレイするにはパッチ済みのWindows版プログラムをそのままの形で実行する必要があるわけですが、VMやBootCampを使わずにMacでWindowsのアプリケーションを動かす方法としてはWineというWindowsの互換レイヤーがあり、Linux、Mac、BSDなどでWindowsプログラムをそのままの形で実行できます。

ということで手軽にmacOSでWindowsのものを動かすとなるとまずはWineを試すのが一番なのですが、macOSは10.15 Catalinaで行われた完全64bit化によりそれ以降のバージョンではWineを使っても32bitのWindowsプログラムは動かせません。

そもそも、Windows側にはまだ多くの32bitライブラリ等が残っているため、仮に動かすWindowsプログラムが32bitでなかったとしても、基本的にmacOS 10.15以降での動作は期待できません。ちなみに2015年のロボクラはまだ32bitプログラムなため、RC15も当然動作しません。

Crossover

そんな中、WineをベースにしたMac/Linux向けの商用ソフトCrossOverでは、独自に改変したWineでこの問題を力技で解決しています。

その力技度合いは半端ではなく、CrossOverの開発元であるCodeWeavers社はわざわざこの為に32bitと64bitのポインタを両方解釈できるようCコンパイラを独自に改変し、そのコンパイラを使用してWineをビルドしているというのです。同社のブログでは2019年にmacOS 10.15対応版の開発が成功したことを自ら「奇跡」と呼んでいます。
参考: Celebrating the difficult; the release of CrossOver 19
参考2: So We Don’t Have a Solution for Catalina…Yet

CodeWeaversは自らが利用するWineにも積極的な貢献を行なっており、この独自に改変したWineやCコンパイラなど諸々のソースコードも自社サイトで公開しています。これを利用すれば32bitプログラムが実行できないmacOS 10.15以降でもWindowsプログラムがWineで実行できるようになります。

もちろん、わざわざこのソースコードを使わなくてもCodeWeaversからCrossoverを購入すれば同様にWineは使えますしサポートもついてきますが、わざわざその中身を無料で公開してくれているのですから、これを利用しない手はありません。

なお、基本的にはこうした大きな変更は上流の本家Wineにも反映されるのですが、今回に限っては独自のCコンパイラを使用するなど、1コミュニティーでこれまでと同様に維持していくにはあまりに規模が大きく、現時点では本家に統合される予定はないようです。

ただ、公開されているソースを利用して本家Wineと同じような使い方をすることはできるので、今回はこのCodeweavers社のWineソースコードを利用したWineskinServerの非公式Forkを使い、RC15をMacで動かしてみます。当方の実行環境はmacOS 11.6.1 Big Surですが、新しいMontereyでも同様に動作すると思われます。Apple Silicon(M1など)を搭載したMacでの動作は未確認です。

WineskinServer

本来Wineはコマンドラインツールなので、Linuxを普段使いするような人たちはともかく、細かなカスタマイズが不要な一般ユーザーはそれを使いやすいようにしたアプリを使用します。

私が最初に試した時は実際に先ほどのソースコードをビルドしてやったのですが、なんとこのCrossover版も選択できるGUIツールにWineskinServerというラッパー作成アプリがあるようなので、ここではそれを使用します。

WineskinServerは非常に扱いやすく、必要とあらば細かいカスタマイズもできる優れものなのですが、元のソースコードは更新が途絶えてしまっており、現在は非公式のFork(Gcenx/WineskinServer)で開発が続けられています。

この非公式Forkでは本家のWineだけでなく先ほど紹介したCrossover版のWineも内部エンジンとして選択できるようになっており、このエンジンを使用すれば、32bitプログラムも動かせるようになるだけでなく、僅かな改変でDirectX10やDirectX11を使用したゲームもDXVKというVulkanベースの互換レイヤーを通して実行できるようになります。

ロボクラはDirectX9なので特に関係はないと言えばないのですが、他にもCrossover版のWineには様々な改善がなされており、私の環境で確認できるだけでもDirectX9ベースのサポートはこちらの方が優れているようです。また、Crossover版はRosetta2を通してApple Siliconにも対応しているので同じエンジンを使用したWineskinServerでも同じく動作が期待できます。

WineskinServerのインストール

この非公式WineskinServerのインストール方法にはいくつか種類があり、本当はhomebrewというパッケージマネージャーを使った方法が良いのですが、この記事ではそれらのインストールが不要な手動インストールを紹介します。

ちなみに、homebrewがある方は下記コマンドでインストールできます:

brew install --no-quarantine gcenx/wine/unofficial-wineskin

ここからが手動インストールの方法になりますが、まずはブラウザ上で非公式WineskinServerのGitHubレポジトリ(Gcenx/WineskinServer)を開き、ページ中程にある「Manual installation – (not recommneded!)」のリンクから最新バージョンをダウンロードします。

そしてこれを解凍すれば良いのですが、このアプリは署名されていないためそのままでは開けません。圧縮ファイルを解凍する前に、アプリケーション->ユーティリティ->ターミナル.appを開き、以下のコマンドを実行して隔離フラグを外します。

xattr -drs com.apple.quarantine ~/Downloads/Wineskin.Winery.txz

あとは圧縮ファイルを解凍し、出てきたWineskin Winery.appをアプリケーションフォルダに入れておきます。このWineskin Wineryは隔離されたWine環境が中に入った.appプログラムを作成するためのもので、作った環境がうまく行かなければそのままポイと出来てしますし、.appはアプリケーションフォルダに入るので不可視フォルダなどでホームフォルダを汚しません。

Wineskinラッパーの作成

起動したら、真ん中にある+ボタンをクリックしてエンジンを追加します。

これがエンジン選択画面になります。一覧を見ると「WS〇〇(2桁の数字)Wine」の後に「CX」がついているものとついていないものがありますが、「CX」とついているものがCrossover版のWineになります。ここではCrossover版の中で最新の「WS11WineCX64Bit21.1.0」をダウンロードします。

OKを押してダウンロードが終わると一覧に追加されます。エンジン一覧の下ではラッパーのアップデートができますが、これはすでに最新なのでそのまま一番下にある「Create New Blank Wrapper」をクリックします。

適当にアプリをtest.appと名付けてOKをクリックします。

しばらく画面がフリーズしたかのようになりますが、しばらく待つとこのようなダイアログが出て完成を知らせてくれます。「View wrapper in Finder」をクリックしてラッパーアプリをFinderに表示します。

これでラッパーアプリの完成です。test.appを右クリックして「パッケージの内容を表示」すると、Contents->SharedSupport->wineの中に選択したエンジンの中身、Contents->Resources->drive_cの中に隔離されたWindowsのファイルシステムがあり、Wineの実行に必要な環境が揃っています。つまり要らなくなったらこのtest.appごとゴミ箱に入れて消去してしまえば良く、またWineがインストールされていないMacでもこの.appだけで同じようにWineが実行できます。

Windowsプログラムのインストール

というわけで早速Windowsプログラムをインストールします。RC15を入れる場合はあらかじめ前回の記事を参考に「robocraft15」フォルダとパッチプログラムの両方が入ったフォルダ(rc15)を用意しておきます。

次に先ほど作ったラッパーアプリtest.appをダブルクリックして起動するとこのようなオプションが開きます。「Install Software」をクリックします。

インストール手段を聞かれます。インストールしたいプログラムが「setup.exe」などのセットアップ形式であれば一番上の「Choose Setup Executable」を選択しますが、ここではRC15のゲームフォルダがすでにあるため「Move a Folder Inside」を選択します。

用意しておいた「robocraft15」フォルダとパッチプログラムの両方が入ったフォルダ(rc15)を開いて選択すると、このように実際に実行するファイルを聞かれます。用意しておいたrc15フォルダの中を見ると、「Robocraft.exe」「RobocraftClient.exe」「RC15 Launcher.exe」「EasyAntiCheat_Setup.exe」とexe形式のファイルがいくつもあるので、「実際のプログラムはどれなんだ」と聞いてきているわけです。ここではパッチプログラムである「RC15 Launcher.exe」を選択してOKをクリックします。

これでインストールは終わりです。これはお好みですが、ウィンドウを閉じる前に一つだけ設定を変えておきます。「Set Screen Options」をクリックして、「Retina Mode」を有効にしておきましょう。Retinaディスプレイを持っているMacの場合、有効にしておくことでウィンドウが小さくなる代わりに実行するアプリの画面が鮮明に見えるようになります。

今度は「Advanced」をクリックして詳細設定を表示します。実行したいexeファイルを変更したい場合はここの「Windows EXE:」を変えることでできます。他には「Custom Commands」で引数を設定したり「Icon」からFinderなどに表示されるアプリアイコンを変更できます。(Dockに表示されるアイコンはWindowsプログラム側に依存しているため変更できません)

「Tools」タブに切り替えるとWine設定(winecfg)、レジストリエディタ(regedit)、Windowsのタスクマネージャー(taskmgr)、コマンドライン(cmd)、アンインストーラー(uninstaller)など標準のツール群に加えて、「Winetricks」という標準のWine環境に不足しているdllファイルや日本語フォントをダウンロードできるツールにアクセスできます。

UIは貧相ですが、他にもWinetricksではよく使われるアプリやゲームをインストールしたり、通常はコマンドやレジストリ変更が必要な操作を自動でできるスクリプトが揃っています。

また、先ほどのToolsタブの右側では新しいエンジンやラッパーのバージョンが出たときに乗せ替えられるようになっています。

プログラムをインストールした後、ウィンドウを閉じて再度test.appを起動すると、今度はオプション画面の代わりに先ほどインストールしたプログラムが起動します。2回目以降にオプション画面を開きたい場合は、test.appを右クリックして「パッケージの内容を表示」すると中に「Wineskin.app」があるのでこれを代わりに起動することで先ほどのオプション画面を表示することができます。

RC15を実行する

早速RC15をMacで実行してみます。test.appをダブルクリックして実行すると裏でパッチが働くためしばらく時間がかかりますがこのように問題なく起動することが分かります。

ちなみにWindows上で実行するときと違い、Wineskinを通してこのパッチを実行する時はコマンドプロントが立ち上がらず動作状況やエラー内容などを表示してくれないので、いつまで経ってもRC15が起動しないときは、先ほどのオプション画面のAdvanced画面から「Test Run」をクリックすることで、プログラムの実行をした後に実行ログをテキストエディタで表示してくれます。

この後、個人的なハマりポイントとして試合が始まった途端にサーバーから切断されてしまう問題があったのですが、これはLittle Snitchというファイアウォールアプリを消すことで解消できました。無効化するだけでは解消しなかったのでおそらくWineとの相性がよくないのでしょう。