UNIX系OS では長い伝統を持つローグライクな RPG、NetHack を日本語化して debian squeeze で遊ぶ為のメモです。Emacs好きのぽちは、ついでに nethack-el を使って Emacs上で遊べるようにしてみました。NetHack というゲーム自体については NetHack - Wikipedia や猿でもできる JNetHack(通称サルネト)などを読んでみて下さい。
ビルドする時に必要になる以下のパッケージをあらかじめインストールしておきましょう。
$ sudo apt-get install build-essential libncurses5-dev bison flex
NetHack から Nethack本体の現時点で最新版のソースコード、nethack-343-src.tgz を入手します。また、SourceForge.jp の JNetHack Project から現時点の最新日本語化パッチ、jnethack-3.4.3-0.10.diff.gzを入手します。ついでに nethack-el から現在のところの最新版、nethack_el-0.9.5.tar.gz も持って来ましょう。
nethack-343-src.tgz と jnethack-3.4.3-0.10.diff.gz、nethack_el-0.9.5.tar.gz を同じ作業用ディレクトリに置いてパッチを当て、UNIX系OS向け Makefile のセットアップ用シェルスクリプトを実行します。
$ tar zxf nethack_el-0.9.5.tar.gz $ tar zxf nethack-343-src.tgz $ cd nethack-3.4.3 $ zcat ../jnethack-3.4.3-0.10.diff.gz | patch -p1 # 日本語化パッチ当て $ patch -p1 < ../nethack_el-0.9.5/enh-343.patch # nethack-el用パッチ当て $ sh sys/unix/setup.sh
japanese/Install.lnx を参考にして適宜修正しましょう。それに加えて、include/config.h から #define XI18N の行をコメントアウトし、include/config.h の #define COMPRESS の行を実際の gzip のパス、/bin/gzip に修正します。また、ディストリビューションのパッケージシステムの管理外なので、混乱しないようにデフォルトインストール先の /usr/games/ を /usr/local/games/ に変更します。その為には Makefile を以下のように修正しましょう。
GAMEDIR = $(PREFIX)/local/games/lib/$(GAME)dir
SHELLDIR = $(PREFIX)/local/games
あとは、
$ make all $ sudo make install
で日本語化パッチと nethack-el用パッチの当てられた NetHack のインストールが完了します。
実は必ずしも nethack-el をバイトコンパイルする必要は無いみたいで、展開して出来たディレクトリ、nethack_el-0.9.5 を nethack に名前を変えて、そのまま elisp のロードパスの通ってる場所へ、ロードパスにサブディレクトリを追加する subdirs.el と一緒に放り込んでおいても動くらしいですけども、ここでは実行速度の事も考えてバイトコンパイルしておこうと思います。
まずは作業用ディレクトリで展開した nethack_el-0.9.5 の中の Makefile の先頭にある emacs へのパスを適宜変更します。通常は、
# path to your emacs
EMACS = /usr/bin/emacs23
でかまわないでしょう。次に nethack_el-0.9.5内に移動してバイトコンパイルします。
$ cd nethack_el-0.9.5 $ make all
これで elc という拡張子のバイトコンパイルされたファイルがたくさん出来上がります。そのうちの
を /usr/local/share/emacs/23.2/site-lisp/ に nethack という名前のディレクトリを作ってその中へ放り込みましょう。この際、/usr/local/share/emacs/23.2/site-lisp/ には /usr/share/emacs/23.2/site-lisp/ から subdirs.el をコピーします。
$ sudo mkdir /usr/local/share/emacs/23.2/site-lisp/nethack $ sudo cp nethack*.elc /usr/local/share/emacs/23.2/site-lisp/nethack/ $ sudo cp nethack-compat.el /usr/local/share/emacs/23.2/site-lisp/nethack/ $ sudo cp /usr/share/emacs/23.2/site-lisp/subdirs.el /usr/local/share/emacs/23.2/site-lisp/
Emacs の設定ファイルである .emacs に以下の設定を追記します。
;;; ローカルなロードパスの追加
(setq load-path (append '("/usr/local/share/emacs/23.2/site-lisp") load-path))
;;; nethack を emacs上で遊ぶ為の設定
(setq process-coding-system-alist
(cons
'("nethack" euc-jp . euc-jp)
process-coding-system-alist))
(autoload 'nethack "nethack" "Play Nethack." t)
(setq nethack-program "/usr/local/games/jnethack")
これで Emacs を起動して M-x nethack すればゲームがはじまります。一応どのキーにどういう操作が割り当てられているか C-h b してキーバインディングを確認してから遊んでみましょう。
注意!たまにキー操作をミスするとフリーズする事がありますが C-g で回復してゲームを続けられます。
このままではゲーム中のセーブが書き込まれないので、インストール先の /usr/local/games/lib/jnethakdir/ 内のファイル、logfile、record のパーミッションをグループ書き込み可にする必要があります。
$ sudo chmod g+w /usr/local/games/lib/jnethackdir/logfile $ sudo chmod g+w /usr/local/games/lib/jnethackdir/record
個人用設定ファイルはホームディレクトリ直下に .jnethackrc というファイルを作り、そこに設定を書きます。NetHack の遊び方や設定ファイルの書き方については doc/jGuidebook.txt を一通り読んでみて下さい。
動作確認環境 : Debian GNU/Linux 6.0 squeeze