註 これから購入する予定の人へ:この下に追記しておきましたが、基本的には Linuxを購入するのでなく、ウィンウズ版をエミュレータ経由で動かす方法をお勧めします。理由は下で。
比較的最近にLinux版の Jagged Alliance を購入した人の殆んどは、「そもそもゲームが起動すらしない」という大問題にぶつかっています。しかも、画面上には「Segmentation Fault」と簡単なメッセージが出るのみで、原因がサッパリ分かりやしません。更に悪い事には、移植を担当した Trib Softは既に解散してしまったようで、今後アップデートが行われる可能性は限りなくゼロに近いです。となると、諦めて Windows版を購入するしか道が無さそうに思えてしまいますが、実はちゃんと解決法があります。というわけで、日本人で Linux版を買っちゃった人のために、こういう文章を作成してみました。
また、問題が問題だけに、有志の手によって必要な作業を自動的に行うためのソフトウェアが公開されています。「俺は単純にこのゲームで遊びたいだけなんだ!」という人も多いでしょうから、理屈の解説と手作業で解決する方法の紹介は後回しにして、最初にこのソフトを紹介しておきます。...と、その前に。gentoo Linuxを利用している人は、ここで紹介する手段を使ってもゲームが正常に動かない(起動はする)可能性が、僅かながらあります。もし、そういう問題にぶつかったら、gentoo Linuxを利用している人向けの追加情報も合わせて読んでおいて下さい。
もし、マシンの性能が十分にあり、なおかつ cedegaをインストールしていて問題なく動いているのなら、ウィンドウズ版を cedegaで動かすのが、Linuxで JA2を遊ぶ最善の方法でしょう。その理由は、以下の通り。
....何かね、Linux版は時折画面表示が崩れちゃったりとか、プレイに支障は無いとは言え、微妙に動作が変な部分があるんですよ。オリジナル版からのバグなのか、Linux版固有のバグなのかは分かりませんが(ウィンドウズ版は、Wildfireに同梱の最新版しか持っていないので)。あと、最新版ではわりと大きめのバグも直っているから、というのも理由の一つ。素直に言えば、こういう結論になっちゃう事は残念だと思うのですが、やっぱり変な拘りを持ってしまうよりは、素直により快適に遊べる環境を選んだ方が正解かな、と。
ただまあ、これはこれで cedegaを必要とするというのが、ちょっとネックになるのですけれども。cedegaは有料で配布されているソフトウェアだし、遊ぶのに問題ないレベルで動くソフトの割合も、まださほどには高くありません(運が良ければ、手元のソフトの殆んどが動いてくれるでしょうが、逆に殆んど動かない可能性もある)。
おっとっと、忘れるところでした。cedegaを利用してウィンドウズ版を遊ぶ場合も、一部のキー入力に問題が生じますが、これは単に場所が違うだけなので、押すべきキーさえ覚えてしまえば大丈夫です。この話は、またいずれ。
難しい事は何も言いません。以下のリンク先から「インストーラ」をダウンロードして、JA2のインストールディスクをマウントしてから実行して下さい。このインストーラは gtk+ 1.2系を使用しますが、大抵の環境にはインストールされているでしょう。あと、既にゲームをインストールしちゃってるよ、という場合でも、同じディレクトリに上書きでインストールするか、手作業で既にインストールされている物を削除しても、全く問題はありません。
Loki Installer for Jagged Alliance 2
表示されるオプションの意味が分からなくても、デフォルトの設定のままでインストールすれば問題ないです。
このインストーラ経由でインストールを行うと、問題の解決に必要なライブラリと、正常に動作させるための「ja2start」という名前のスクリプトが追加でインストールされます。ゲームで遊ぶためには、このスクリプトからゲームを起動させる必要がありますが、標準の設定だと、/usr/local/bin に ja2 という名前でこのスクリプトへのリンクが張られるので、普通に ja2とタイプすれば大丈夫。また、KDEや gnomeだと、デスクトップのショートカットも使えます。
ちなみに、リンク先のプロジェクトは、そもそもは「使い辛いインストーラしか存在しない Linux用ゲームに、使い易くて高機能なインストーラを提供しよう」という趣旨のものです。Jagged Alliance 2 の場合は、致命的な不都合を抱えていて、なおかつインストーラでその不都合に対応出来るため、ついでに面倒を見てくれるのです。
手作業で対処する方法は 2種類ありますが、まずはどんな環境でもほぼ確実に対処出来ると思われる、上記のインストーラが使用している方法について解説します。...が、その前に。ここで紹介している方法は、Mark Schreiber氏によって The Linux Game Tomeに投稿された情報を元にしています。これから Linux版 JA2で遊ぶ際は、Schreiber氏への感謝の心を忘れないようにしましょう。
とまれ、この問題の鍵を握っているのは、libX11という X Window Systemの基本的なライブラリです。JA2は、新しめのバージョンの libX11では上手く動いてくれないため、まず古めの libX11(実際のファイル名は「libX11.so.6.2」)を用意する必要があります。その後、元からシステムにインストールされている物の代わりに、こちらを強制的に使うよう設定してからゲームを起動すれば大丈夫です。上記のインストーラでは、libX11と、事前に設定を行ってからゲーム本体を起動するスクリプトが提供されます。つまり、手作業で対処するには、この2つを自分で用意すれば良いわけです。
流石に、古めの XFree86をコンパイルして...というのは面倒すぎるので、コンパイル済みのバイナリパッケージから抜き出す事にしましょう。Schreiber氏によれば、「Redhat Linux 8.0に含まれる物なら大丈夫でしょう」との事なので、ここでも Redhat 8.0の rpmから頂く事にします。libX11.6.2が含まれるパッケージは「XFree86-libs-4.2.0-72.i386.rpm」なので、まずはこのファイルをダウンロードします。以下に、日本にあるサーバー上のファイルへの直リンクを貼っておきます。
次に、このファイルを「展開」します。間違ってもインストールしないように。rpmコマンドでも「展開のみ」の作業を行えたと思いますが、Schreiber氏によると「atoolというツール群を使うと便利」との事なので、atoolのサイトからダウンロードして試してみるのも良いかと。rpm関連のツールと atoolがインストールされていれば、
$ aunpack XFree86-libs-4.2.0-72.i386.rpm
で行けるそうです。展開した中から、libX11.so.6.2という名前のファイルを JA2がインストールされているディレクトリにコピーします。大体の場合だと、/usr/local/games/ja2/、或いは /usr/local/games/ja2/lib/あたりでしょうか。これで、libX11の準備は出来ました。
libX11の準備は整いましたが、設定をきちんとしておかないと、Linuxのシステムがコピーした方のライブラリファイルを利用してくれないので、このままではまだ動作しません。こういった設定を毎回手作業で行うのは面倒なので、起動用のスクリプトを作ります。何はともあれ、まずはスクリプトの実物をご覧になって下さい。
#!/bin/sh cd /usr/local/games/ja2/ export LD_PRELOAD=/usr/local/games/ja2/lib/libX11.so.6.2 export LD_ASSUME_KERNEL=2.4.1 ./ja2 $@
当たり前の事ではありますが、ディレクトリの名前は手元の環境に合わせて変える必要があります。また、このままだと JA2をディレクトリごと移動させた時に、いちいちスクリプトを書換えなければなりません。上記のインストーラでは、この点を上手く回避しています。この文書の最後にインストーラが提供するスクリプトの全文とその解説を掲載しておくので、気になる人は参考にしてみて下さい。
とまれ、JA2を起動するのに最低限必要な内容は、これだけです。で、せっかくなので、ここで実行しているコマンドの意味を解説しておきます。
「export LD_PRELOAD(後略)」というコマンドでは、LD_PRELOADという環境変数を設定しています。分かり易く言うと、この環境変数はプログラムが実行される時に利用されるライブラリファイルを決め打ちしてしまう効果があります。その後に、足りないライブラリだけを標準のシステムライブラリから拾ってくるようになります。今回の場合は、単純に libX11.so.6.2を JA2専用の物と入れ替える役割を果たしています。
続く「export LD_ASSUME_KERNEL(後略)」は、実は libX11とは関係がありません。ただ、カーネルが 2.6系の環境の多くでは、これを書いてある通りに設定しておかないと音が出なかったり、突然フリーズしてしまったりします。ですから、良く分からないのなら取り敢えず書いておいた方が良いでしょう。ちなみに、Schreiber氏によると、これはスレッドの互換性の問題なのだそうです。この環境変数には、ライブラリをリンクさせるためのプログラムに、Linuxカーネルが特定のバージョン(この場合だと 2.4.1)である事を前提にした動作をさせる効果があります。
そして、最終行で JA2のプログラムを実行しています。文末の「$@」は特殊な変数で、このスクリプトに対して入力されたコマンドラインオプションが、そのまま収納されています(厳密には少し違うのですが割愛)。この場合は、このスクリプトを実行した時のオプションを、そのまま JA2のプログラムに流しています。こうする事で、このスクリプト経由でゲームを起動した時にも、コマンドラインオプションを指定出来るようにしてあるわけです。
ついでに。LD_PRELOADみたいな環境変数を設定してしまうと、他のプログラムの実行にも影響が出てしまうんじゃないか? と思われるかもしれませんが、スクリプト内で設定された環境変数は、そのスクリプト内と、そこから実行されたプログラムでのみ有効なので、スクリプトの実行が終わると、元通りになります。ですから、あるプログラムを実行する時だけ環境変数を変えたいと思った時は、専用の起動スクリプトを書いてしまうのが、最も安全な方法であるわけです。
すいません、疲れちゃったので、また今度追記するという事で。て言うか、こちらは確実な方法なのかが分からないし、X Window System全体に影響を及ぼすような設定を行うので、あまりお勧めは出来ません。どちらかと言うと、参考出展という感じです。
この項目は、JA2が問題なく動いている(音が出るし、ハングアップもしない)のなら、読む必要はありません。また、それなり以上に Linuxのスキルが無いと理解出来ないかと思います。でも、gentooの場合は、調子に乗って変な事をしなければ、ちゃんと JA2が起動するような環境になるので、そういう人はそもそも読む必要が無いかと思われます。
とまれ。gentooで JA2を遊ぶのなら、glibcをインストールする時の「nptl」という USEフラグに注意しておく必要があります。この USEフラグは、glibcをカーネル 2.6以降で実装された新しいスレッドに対応させる物でして、まあつまり、JA2ではスレッドの互換性が問題になる可能性があるわけです。
スキルのある人ならご存知だとは思いますが、一応解説しておきます。2.4系までのカーネル(2.5系は使った事がないので不明)に実装されているスレッドは、完全には POSIXの基準に準拠していませんでした。そこで、glibc側で POSIX準拠のスレッドを提供し、POSIXなスレッドが必要ならそちらを利用するという事になっていました。しかし 2.6系では、カーネルスレッドがきちんと POSIXに準拠する形で作り直されています。それに伴い、glibcの新しいバージョンではコンパイル時のオプションでこの新しいカーネルスレッドに対応させるか、従来通りの glibc側で提供する POSIXスレッドを利用するのかを選択出来るようになりました。nptlという USEフラグは、glibcをカーネルスレッドに対応させてコンパイルするためのものです。(nptlは、Native POSIX Threads Libraryの略)
問題は、従来のスレッドと新しいカーネルスレッドの間で、バイナリレベルでの互換性が無い事です。そのため、glibcを nptl専用で構築してしまうと、スレッドを利用するソフトウェア(殆んどのソフトウェア)が正常に動作しなくなってしまいます。当然ながら、両方に対応させれば問題が無いわけですが、現時点で「最新の安定版」である glibc-2.3.4.20040808-r1 パッケージだと、どちらか片方にしか対応させる事が出来ません。つまり、nptl USEフラグを指定してコンパイルすると、その glibcは nptlにしか対応しません。そういうわけで、どうしても安定版を使いたいのなら、システムを nptlに対応させるのは諦める必要があります。
安定版である事に拘らないのなら、より新しいバージョンを利用するという手もあります。glibc-2.3.4.20041102 以降では、nptlに加えて nptl-onlyという USEフラグが追加されており、この nptl-onlyフラグを指定しない限りは、glibcが新旧双方のスレッドに対応した形でコンパイルされ、大体のソフトは再コンパイルしなくとも動いてくれるようです。但し、新しめの glibcをコンパイルするには、カーネルが一定以上のバージョンである必要があるので、カーネルのバージョンアップを行う必要が出てくるかもしれません。いずれにせよ、新しめの glibcで nptlにも対応させた場合は、「LD_ASSUME_KERNEL」環境変数を設定しておかないと、JA2は正常に動作しません。
上で紹介したインストーラによって提供される、JA2の起動用スクリプト、ja2startの全文と、その解説を書いておきます。但し、ゲームを起動するのに必要な設定の部分は既に解説しているので、「どこにインストールされても正常に起動出来る」機構を実装している部分のみの解説を行います。当然ながら、スクリプトを見れば意味が分かる人にとっては、解説は特に意味のないものです。
#!/bin/sh
#----------------------------------------
script=$0
count=0
while [ -L "$script" ]
do
script=`perl -e "print readlink(\"$script\"), \"\n\""`
count=`expr $count + 1`
if [ $count -gt 100 ]
then
echo "Too many symbolic links"
exit 1
fi
done
GAME_DIR=`dirname $script`
cd $GAME_DIR
export LD_PRELOAD=$GAME_DIR/lib/libX11.so.6.2
export LD_ASSUME_KERNEL=2.4.1
./ja2 $@
些か簡単ではありますが、スクリプトの解説は以上です。自分で様々なスクリプトを組む時の参考になれば、幸いです。