jNetHack UTF-8対応 を CentOS 6.3 にインストール

参考サイト：[Linux 用 jnethack 3.4.3 のコンパイル例](http://nethack-users.sourceforge.jp/jnethack/jnh_lnx.txt)
（ほぼ参考サイトの劣化コピーです。申し訳ありません。）

#はじめに
CentOS 6.3 で tty / X11 版をコンパイルした例です。
（Qt版は 現行バージョン（qt4）に対応していないので、諦めました。）
（GNOME版も 現行バージョンに対応していないので、諦めました。（gdk_imlib.hが無くなった））

以前からcocotなんか使わずにUTF-8に対応できないかなと悶々としていたら、
既に対応してくださっている方がいました。（感謝）

というわけで、最新ソースを svn で取得しつつ、UTF-8対応版のjnethackが出来るようにする。

環境：OS CentOS 6.3
環境：jenethack version 3.4.3-10 ベースの最新開発バージョン（SV)
#手順
##必要なパッケージの導入

```bash:パッケージ導入
yum install libX11-devel ncurses-devel libXt-devel libXaw-devel
```

##最新開発バージョンの取得
ソースの作業用ディレクトリに移動する。

```bash:開発バージョンおよび、UTF-8対応版の取得
svn co http://svn.sourceforge.jp/svnroot/jnethack/ jnh-svn
wget http://elbereth.up.seesaa.net/nethack/jnethack-3.4.3-0.10-utf8-2.patch.bz2
```

```bash:資材解凍
cd ./jnh-svn/jnethack/trunk
bzip2 -d /usr/local/src/jnethack/jnethack-3.4.3-0.10-utf8-2.patch.bz2
cat /usr/local/src/jnethack/jnethack-3.4.3-0.10-utf8-2.patch | patch -p1
```

##ファイルの編集

### Makefile の該当行を編集
sys/unix/Makefile.top

```cmake:sys/unix/Makefile.top
...
# make NetHack
PREFIX   = /usr/local
GAME     = jnethack
# GAME     = nethack.prg
GAMEUID  = games
GAMEGRP  = bin

# Permissions - some places use setgid instead of setuid, for instance
# See also the option "SECURE" in include/config.h
GAMEPERM = 04755
FILEPERM = 0644
EXEPERM  = 0755
DIRPERM  = 0755
...
```

X11 版もコンパイルする場合は以下の設定も必要。

```cmake:sys/unix/Makefile.topその２
# per discussion in Install.X11 and Install.Qt
# VARDATND =                                              ←ここをコメント
# VARDATND = x11tiles NetHack.ad pet_mark.xbm
VARDATND = x11tiles NetHack.ad pet_mark.xbm rip.xpm       ←ここのコメントを外す
# for Atari/Gem
# VARDATND = nh16.img title.img GEM_RSC.RSC rip.img
# for BeOS
# VARDATND = beostiles
# for Gnome
# VARDATND = x11tiles pet_mark.xbm rip.xpm mapbg.xpm
...
```


### sys/unix/Makefile.src の該当行を編集

```cmake:sys/unix/Makefile.src
...
# flags for Linux
#   compile normally
# CFLAGS = -O2 -fomit-frame-pointer -I../include
...
CFLAGS = -W -g -O2 -fomit-frame-pointer -I../include -I/usr/include $(GNOMEINC)
#         X11を使う場合/usr/includeも追加。GNOMEを使う場合、$(GNOMEINC)を追加
```

X11 版もコンパイルする場合は以下の設定も必要。

```cmake:sys/unix/Makefile.srcその２
...
LFLAGS = -L/usr/X11R6/lib                                      ←flags for Linux を参照しながら、別の行のを編集する。
WINSRC = $(WINTTYSRC) $(WINX11SRC) $(WINQTSRC) $(WINGNOMESRC)  ← X11版、Qt版、GNOME版を追加する
WINOBJ = $(WINTTYOBJ) $(WINX11OBJ) $(WINQTOBJ) $(WINGNOMEOBJ)  ← X11版、Qt版、GNOME版を追加する
WINX11LIB = -lXaw -lXmu -lXext -lXt -lXpm -lX11                ← -lXpmを追加する。
WINLIB = $(WINTTYLIB) $(WINX11LIB) $(WINQTLIB) $(WINGNOMELIB)  ← X11版、Qt版、GNOME版を追加する
...
```


### sys/unix/Makefile.utl の該当行を編集

```cmake:sys/unix/Makefile.utl
...
# flags for Linux
#   compile normally
CFLAGS = -O2 -fomit-frame-pointer -I../include             ←ここのコメントを外す
LFLAGS = -L/usr/X11R6/lib                                  ←ここのコメントを外す
#   OR compile backwards compatible a.out format
# CFLAGS = -O2 -b i486-linuxaout -fomit-frame-pointer -I../include
# LFLAGS = -b i486-linuxaout -L/usr/X11R6/lib
...

# flags for debugging:
# CFLAGS = -g -I../include

# CFLAGS = -O -I../include                 ←ここをコメントにする
# LFLAGS =                                 ←ここをコメントにする
```


### include/unixconf.h の該当行を編集

コメントアウトされている Linux の定義を有効にします。

```C:include/unixconf.h
#define SYSV
#define LINUX
#define TERMINFO
#define TIMED_DELAY
```


### include/config.h の該当行を編集
コメントアウトされている 以下の定義を有効にします。

```C:include/config.h
#define DLB
```

X11版/QT版/GNOME版もコンパイルする場合は以下の設定も必要。

```C:include/config.hその２
#define X11_GRAPHICS
#define QT_GRAPHICS
#define GNOME_GRAPHICS
```

<<<
以下はいろいろとあって変更なし。

```C:include/config.hその３
#define USE_XPM                       ←編集しなくとも有効になっているくさい
#define AUTOPICKUP_EXCEPTIONS         ←バグを含んでいる？
```

<<<
### win/X11/JNetHack.ad の該当行を編集(X11 版のみ)
確認するぐらいでいいかな？とくに編集してなくても何かが設定してあった。

```bash:win/X11/JNetHack.ad
JNetHack*font: -misc-fixed-medium-r-*--12-*
JNetHack*display_file*font: -misc-fixed-medium-r-*--12-*
JNetHack*tombstone*font: -misc-fixed-medium-r-*--12-*
JNetHack*rip*font: -misc-fixed-medium-r-*--12-*
JNetHack*menu*font: -misc-fixed-medium-r-*--12-*
JNetHack*text*font: -misc-fixed-medium-r-*--12-*
JNetHack*map*font: -misc-fixed-medium-r-*--14-*
JNetHack*fontSet: -misc-fixed-medium-r-*--12-*
```

タイル表示する場合は以下の設定をします。

```bash:win/X11/JNetHack.adその２
JNetHack.tile_file: x11tiles
JNetHack.tile_width: 16
JNetHack.tile_height: 16
```
タイルを使用しない場合はタイル設定の行頭に "!" をつけます。

## コンパイル

```
$ cd sys/unix
$ sh ./setup.sh
$ cd ../../
$ make all
```

いつものごとくコンパイルエラーが出る。対処方法は[[こちら|jnethackコンパイルエラー]]
## インストール

### はじめてインストールする場合

```
# make install
```

X11 版の場合はリソースファイルもコピーします。

```
# cp win/X11/JNetHack.ad /usr/X11R6/lib/X11/app-defaults/JNetHack
```


### 上書きする場合(セーブデータが保護されます)

```
# make update
```


## エラーメッセージ

### インストール時に 
```chgrp: invalid group name `games'```


システムに games グループが登録されていません。
新しく games グループを作るか Makefile の GAMEGRP を変更してインストールしてください。


### 起動時に Warning: cannot write scoreboard file record

record ファイルのパーミッションが設定されていない場合表示されます。

```
# chmod g+w /usr/games/lib/jnethackdir/record
```

上記のように書き込み権限を有効にします。


### 終了時に Cannot open log file!

logfile ファイルのパーミッションが設定されていない場合表示されます。

```
# chmod g+w /usr/games/lib/jnethackdir/logfile
```

上記のように書き込み権限を有効にします。


### セーブ時に No such file or directory Exec to compress save/[キャラクター名] failed.

compress もしくは gzip が存在しないか設定が間違っています。
include/config.h の COMPRESS の設定が正しいかどうか確認してください。

```
#define COMPRESS "/usr/bin/gzip" /* FSF gzip compression */
```


## 環境設定

### 設定ファイル

ホームディレクトリに ~/.jnethackrc ファイルを作成してプレイヤー名などの設定を
することができます。
設定ファイルの書き方は doc/jGuidebook.txt を参照してください。

tty 版と X11 版の切り替えは以下の通りです。

```
OPTIONS=windowtype:tty # tty 版の場合
OPTIONS=windowtype:x11 # X11 版の場合
```

~JNetHack 1.x 系で追加されたスコア送信機能や Radar パッチは 3.4.x 系では
分離されているので report や radar オプションを設定しても有効にはなりません。


### X11 版のウインドウサイズ

起動時に -g オプションをつけるとメインウインドウの大きさを設定できます。

```
$ jnethack -g 640x480
```