2020/08/16

jnethack-3.6.6-0.1 を macOS Catalina 10.15.6 で動かしてみた

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 のビルドは、バージョンが上がると同じ手順では出来なくなることがあるので、こういった背景をおさえておくと、対処しやすいかと思います。


概要

おおまかな手順は以下の通りです。

  1. brew で必要なツールをインストールする
  2. NetHack のソースコード、JNetHack のパッチを入手する
  3. NetHack のソースコードを展開する
  4. JNetHack のパッチを適用する
  5. JNetHack 用の変更点を macOS 10.14 用のビルドスクリプトに適用する
  6. JNetHack 用のビルド前準備スクリプトを実行する
  7. ビルド実行
  8. インストール

詳細手順

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

以下のように進めることができれば、まずは成功かと思います。