Linux CD-ROM ゲームシステム |
||
YAMAMORI Takenori ●yamamori |
ベースシステムにはVine 2.0を使用することにした。まずはこれをHDDに インストールする。なお、現状使用中のマシンのHDDの空きパーティションを 利用して、いわゆるマルチブート状態で作業を行なうことも慎重にやれば可能だが、 できれば実験用の別のマシンを用いることをお勧めする。
マシンが1台しかない場合は、現在使用中のHDDを一時的に外して、 実験用のHDD取り付けて作業する方が安全だろう。
Vine 2.0のインストールでは、最終的にCD-ROMに入れることを考えて、 必要なパッケージのみをインストールするすることに注意しなければならない。
具体的に順を追って説明する。
Vine 2.0のインストーラ画面の途中の 「インストールタイプ」では「カスタム」を選ぶ。 HDDのパーティションは細かく分けず、“/”とswapのみにする。 swapは本当は必要ない(CD-ROMシステムではHDD自体を使わないため、 swapを使えない)が、swapを作らないとVineのインストーラが 先に通してくれないため、仮にswapパーティションを適当なサイズで 割り当てておき、インストール後に外すようにする。
パッケージグループの選択画面では、
の、計4個のみチェックする。
GNOME/KDEはインストールしない。
Development Toolsは、ゲームのインストール時に Cコンパイラやヘッダーファイルなどが必要なためインストールする。
LANはゲームシステムには必要ないが、システムの構築時に、 LAN経由でファイルを転送したりする便宜上、インストールすることにした。
Emacsは、筆者はEmacsを使わない(viのみ使う)ため必要ないが、 これをインストールしないと一部パッケージの依存関係を満たさなくなるため、 一応インストールすることにした。
その後、X Window Systemの設定では、 「GUIによるログインを使用」をチェックしないでおく。
この状態で、インストーラ上ではパッケージの総計が「567MB」と表示された。 しかし、インストール直後“df /”とやると約648MB使用されていた。
このあとゲームのインストールなどにより、使用容量はさらに増えるため、 このままではCD-ROMに収まらない。
そこで、“rpm -qa | less”を実行してインストールされているパッケージを表示し、 その中から明らかに要らないものを外して行く。 なお、“rpm -qif ファイル名”で、インストールされているファイルから その属するパッケージ名を調べることもできる。
“rpm -e パッケージ名”でパッケージをアンインストールするが、 この時、パッケージの依存関係でエラーが出た場合は、 その依存しているパッケージも消すようにする。
結局、筆者は以下のパッケージをアンインストールした。
kinput2-v3release-7 libwnn6-devel-3.0 emacs-dl-wnn-0.3.6-7 libwnn6-3.0 wnn6-3.01 wdm-1.20 WMSoundSet-0.9.3 wmakerconf-2.4 WindowMaker-Icons-1.9 WindowMaker-0.61.1_jp jman_pages-0.5-19991215.1 CF-3.7Wpl2 sendmail-8.9.3 xxgdb-1.12 gdb-4.18 ImageMagick-4.2.9 X11R6-contrib-3.3.2 xscreensaver-3.17 xlockmore-4.14 xpaint-2.5.7 tgif-4.1.27 wget-1.5.3_jp
これで、HDD使用量は約585MBになった。これくらいなら CD-ROMに入れるのに余裕だろう。
(ところで、本当はCanna関係のパッケージも必要なく、これも外したかったのだが、 viがCannaのライブラリと動的リンクした状態でインストールされており、 viを使う以上Cannaを外せなかったのだ。できれば、vi のようなシステムの基本ツールは、日本語パッチの当たっていない素のvi も用意しておくよう、Vineに要望したいところである)
サウンドは、コンソール上で kon を先に起動し、root で /usr/sbin/sndconfig を実行して設定する。 筆者環境ではサウンドカードに"Creative SB16 PnP"を使用していたため、 一発で自動認識・設定された。 もし、代わりにALSAドライバを使用する場合は別途作業が必要だ。
ジョイスティック用のカーネルモジュールは、Vine 2.0の場合、 /lib/modules/2.2.14-1vl6/misc/joystick.o などとして、最初から存在している。 ただし、jstestなどのジョイスティックの動作確認をするツールが インストールされていないため、これをソースから入れることにした。
http://atrey.karlin.mff.cuni.cz/~vojtech/joystick/ より、執筆時点での最新版として joystick-1.2.15.tar.gz をダウンロードした。
これをすべてインストールする必要はなく、 jstestのみが欲しいため、以下のように作業する。
$ tar zxvf joystick-1.2.15.tar.gz $ cd joystick-1.2.15 $ make jstest ← カーネルモジュールをコンパイルする必要はない。 $ su # install -c jstest /usr/local/bin
また、デバイスファイルとしては /dev/js0 などが必要で、これは、 joystick-1.2.15 を展開したディレクトリ上で
# make devs
とやると作れるが、 Vine 2.0では dev-2.7.10-2vl3 パッケージにより、/dev/js0〜3 まですでに作られているため、何もする必要はなかった。
ジョイスティックを接続してから、カーネルモジュールをロードするのだが、 筆者環境の場合は15pinゲームポート接続のものを用い、
# /sbin/modprobe joy-analog
で、モジュールが一気にロードできた。 この時、/sbin/lsmodコマンドで確認すると、joystickと joy-analogの2つのモジュールがロードされていることがわかる。 modprobeの代わりに、insmodで、
# insmod joystick # insmod joy-analog
の順に、個別にロードしても良い。
ここで、
# /sbin/modprobe -r joy-analog
とやると、これら2つのモジュールが一気にアンロードされる。
モジュールjoystickはすべてのジョイスティックに共通だが、 joy-analogなどのモジュールは ジョイスティックによって違う。
/sbin/modprobe -l -t misc | less
で、モジュールの一覧が見られるため、 この中から適切なモジュールを選べばよい。
最終的には、/etc/conf.modulesに以下の行を追加しておく。
(/etc/conf.modulesに追加する行) ---- alias char-major-15 joy-analog ----
ここで、char-major-15とは、“ls -l /dev/js0”での表示を見てわかる通り、 キャラクタ型のメジャー番号15のデバイスという意味だ。
/dev/js0は、コンソールにログインしたユーザの所有になっているため、 そのユーザがjstestを実行できる。
$ jstest /dev/js0
と実行すると、/etc/conf.modulesの記述にしたがってモジュールが 自動的にロードされ、ジョイスティックが動作するはずだ。
ここで、ジョイスティックの入力に反応して数値やon/offが 画面に表示されればOKだ。
ここで主役のゲームをインストールする。 サウンドにもジョイスティックにも対応したSDLのゲームとして 手頃なものを探したところ、circuslinuxというゲームに行き当たった。 以下からソースとしてcircuslinux-1.0.1.tar.gzをダウンロード可能だ。
http://www.newbreedsoftware.com/circus-linux/
circuslinuxのインストールには、以下のURLにあるSDLのライブラリが必要だ。
http://www.libsdl.org/
なお、SDL-1.1.xのほか、SDL_image、SDL_mixer の各ライブラリが必要となる。 なるべく簡単に作業を済ませるため、 最初はバイナリでインストールするつもりでいたが、 ダウンロード可能なSDL_image-1.0.4が、SDL-1.1.xではなく SDL-1.0.xと 動的リンクされた状態になっていて使えなかった。 そこで、すべて*.src.rpmからrebuildすることにした。
ところで、ダウンロード可能なバイナリのSDL-1.1.2は、 libesd.soやlibaudiofile.soと動的リンクされた状態になっている。
また、バイナリのSDL_mixerはsmpeg というライブラリと動的リンクされている。 SDLライブラリをソースからrebuildする場合、上記のライブラリがなくても SDLライブラリが構築できてしまう。そして、少なくともその環境上で circuslinuxが動くことは確認した。
しかし、後々のためlibesd/libaudiofile/smpegともリンクされるように SDLを構築するようにする方がいいだろう。 smpegのライブラリは、SDLのWebページからのリンクをたどるとダウンロードできる。
結局、必要なソースパッケージは以下のものになる。
(必要パッケージ) ---- SDL-1.1.2-1.src.rpm SDL_image-1.0.4-1.src.rpm smpeg-0.3.5-1.src.rpm SDL_mixer-1.0.5-1.src.rpm ----
/usr/src/redhat/SRPMS 以下にこれらのパッケージを置く。
本記事に沿ってVine 2.0をインストールした場合、esoundと audiofileの実行環境はインストールされるが、 開発環境はインストールされていないはずだ。 そこでVine 2.0のCD-ROMから、以下のパッケージを先にインストールしておく。
(audiofile-develとesound-develのインストール) ---- # mount /mnt/cdrom # cd /mnt/cdrom/Vine/RPMS # rpm -ivh audiofile-devel-0.1.9-1vl2.i386.rpm # rpm -ivh esound-devel-0.2.17-1.i386.rpm # cd / # umount /mnt/cdrom ----
ここでSDL本体を以下のようにインストールする。
---- # cd /usr/src/redhat/SRPMS # rpm --rebuild SDL-1.1.2-1.src.rpm # cd /usr/src/redhat/RPMS/i386 # rpm -ivh SDL-1.1.2-1.i386.rpm SDL-devel-1.1.2-1.i386.rpm ----
次にSDL_imageをインストール。
---- # cd /usr/src/redhat/SRPMS # rpm --rebuild SDL_image-1.0.4-1.src.rpm # cd /usr/src/redhat/RPMS/i386 # rpm -ivh SDL_image-1.0.4-1.i386.rpm SDL_image-devel-1.0.4-1.i386.rpm ----
SDL_mixerより先にsmpegをインストールする。
---- # cd /usr/src/redhat/SRPMS # rpm --rebuild smpeg-0.3.5-1.src.rpm # cd /usr/src/redhat/RPMS/i386 # rpm -ivh smpeg-0.3.5-1.i386.rpm smpeg-devel-0.3.5-1.i386.rpm ----
そして最後にSDL_mixerだ。
---- # cd /usr/src/redhat/SRPMS # rpm --rebuild SDL_mixer-1.0.5-1.src.rpm # cd /usr/src/redhat/RPMS/i386 # rpm -ivh SDL_mixer-1.0.5-1.i386.rpm SDL_mixer-devel-1.0.5-1.i386.rpm ----
これでSDL環境が整ったため、いよいよcircuslinuxをインストールする。 アーカイブのソースツリーに含まれるものは、 ほとんどがグラフィックやサウンドのデータである。 circuslinuxの初期のバージョンでは、 これらのデータを手作業でインストールする必要があったが、 現在ではGNU configure方式で、簡単にインストールできるようになっている。
具体的な手順は以下の通りだ。ジョイスティックを使うため、./configure 実行時に“--enable-joystick”オプションを付けるのを忘れないように。
(circuslinux のインストール) ---- $ ./configure --enable-joystick $ make $ su # make install ----これで、circuslinux本体が /usr/local/bin にインストールされる。 グラフィックやサウンドのデータは /usr/local/share/circuslinux 以下にある。
あとは、X上でcircuslinuxを起動するだけだ。 デジタルジョイパッドの場合、以下のように --digitalオプションを付けて起動する。
$ circuslinux --digital
circuslinuxは640×480ドットのサイズなので、 ここでXconfiguratorを用いてXサーバの画面サイズを640×480ドットに 設定変更するとよい。 すると、ゲームが全画面モードのように表示されて効果的だ。 あるいは、Xサーバの設定に、すでに640×480ドットのモードが含まれている場合は、 “--fullscreen”オプションをつけて circuslinux を起動すれば、画面サイズが自動的に全画面モードに切り替わる。
以上で、普通のLinux環境上でSDLゲームを動かすところまで、できたことになる。