JNetHack をやりたくて、ビルドしてみたのですが、ちょっと手こずったので、記録しておきます。参考になれば幸いです。
JNetHack って何?
知らない方も多いと思うので、簡単に説明しておきますと、JNetHack は NetHack を日本語化したものです。
NetHack はいわゆるローグライクゲームです。rogue → Hack → NetHack と発展してきた、rogue の直系の子孫的存在です。
手順の背景と概要
背景
JNetHack は、NetHack のソースコードに対するパッチと、Windows 版のバイナリの2形態で配布されています。macOS 版のバイナリは配布されていません。NetHack は macOS 上でビルドして実行することを考慮しているので、JNetHack も基本的にはビルド・実行が可能です。ただし、いくつかの注意点があります。
- JNetHack は内部的に日本語が CP932 (Microsoft 系の Shift JIS) エンコーディングになっていることを前提としている
- 最近の gcc はソースコードが CP932 で書かれていることに対応していないため、ソースコードは UTF-8 にしておく必要がある
- JNetHack のパッチは CP932 で記述されている
- JNetHack のパッチは macOS 10.10 上でのビルドしか考慮していないが、最新の NetHack は macOS 10.14 上のビルドを考慮できているので、そちらでビルドした方が良さそう
JNetHack のビルドは、バージョンが上がると同じ手順では出来なくなることがあるので、こういった背景をおさえておくと、対処しやすいかと思います。
概要
おおまかな手順は以下の通りです。
- brew で必要なツールをインストールする
- NetHack のソースコード、JNetHack のパッチを入手する
- NetHack のソースコードを展開する
- JNetHack のパッチを適用する
- JNetHack 用の変更点を macOS 10.14 用のビルドスクリプトに適用する
- JNetHack 用のビルド前準備スクリプトを実行する
- ビルド実行
- インストール
詳細手順
brew で必要なツールをインストールする
そもそもですが、brew をインストールしていない方はそこからです。
GCC 10 と libiconv が必要なので、インストールしましょう。
brew install gcc@10 brew install libiconv brew install nkf
NetHack のソースコード、JNetHack のパッチを入手する
NetHack のソースコードはここから入手してください。nethack-366-src.tgz です。
JNetHack のパッチはここの jnethack-3.6.6-0.1.diff.gz です。
以下、~/Downloads にダウンロードしてあるものとして説明を続けます。
NetHack のソースコードを展開する
まず、作業用のディレクトリを作って、そこに入りましょう。
mkdir -p ~/tmp/jnethack cd ~/tmp/jnethack
そして展開します。
tar xvzf ~/Downloads/nethack-366-src.tgz
NetHack-NetHack-3.6.6_Released というディレクトリが作られて、中にいろいろ展開されるはずです。
JNetHack のパッチを適用する
パッチをあてます。
cd NetHack-NetHack-3.6.6_Released ~/Downloads/jnethack-3.6.6-0.1.diff.gz |patch -p1
JNetHack 用の変更点を macOS 10.14 用のビルドスクリプトに適用する
macOS 10.14 用のビルドスクリプトを JNetHack 用に修正します。
vi sys/unix/hints/macosx10.14
修正箇所は以下の diff を見てください。
61c61,62 < CC=gcc --- > CC=gcc-10 > CFLAGS+=-fexec-charset=cp932 -Wno-comment -Wno-unused-parameter -Wno-overlength-strings -Wno-format-overflow 96c97 < WINTTYLIB=-lncurses --- > WINTTYLIB=-lncurses -liconv
日本語でも説明しておきます。
- 61行目の CC を gcc-10 に変更
- 61行目の次の行に CLAGS+=... を追記
- 96行目 (1行増やしたことを考慮すると97行目) の WINTTYLIB に -liconv を追記
もう1つ修正するファイルがあります。
vi japanese/set_mac.sh
diff は以下の通り。
1c1 < brew link --overwrite gcc@9 --- > brew link --overwrite gcc@10 3c3 < sh sys/unix/setup.sh sys/unix/hints/macosx10.10 --- > sh sys/unix/setup.sh sys/unix/hints/macosx10.14
要するに GCC 10 を使い、Makefile の元は macosx10.14 を使うように修正します。
JNetHack 用のビルド前準備スクリプトを実行する
sh configure
ビルド実行
make all
インストール
make install
~/bin/jnethack に実行ファイルがインストールされます。データ類は ~/nethackdir に置かれます。
起動してみる
~/bin/jnethack
以下のように進めることができれば、まずは成功かと思います。