VineLinux6.0でJNetHack(X11)をビルドしてみた

It's Automatic !-jnethack-rip

JNetHackがやりたくなった。
Google さんで検索してみると、最近のVineでは見つけられなかった。
動かなくても良いからやってみようでやってみて、EUC-JPなんだけどX11環境ではUTF-8のままで文字化けなしで動いちゃったので備忘録。


ソースとパッチのダウンロード

本家サイトより nethack-343-src.tgz
http://www.nethack.org/

JNetHackプロジェクトより jnethack-3.4.3-0.10.diff.gz
http://jnethack.sourceforge.jp/

$ tar xvzf nethack-343-src.tgz
$ cd nethack-3.4.3/
$ zcat ../jnethack-3.4.3-0.10.diff.gz | patch -p1
$ sh sys/unix/setup.sh


パッチを当てて sys/unix/setup.sh した後、sys/unix/README.linux に書いてある通りに各ファイルを編集します。

$ gedit sys/unix/README.linux &

---------------
include/config.h
---------------
#define X11_GRAPHICS
#define USE_XPM
#define XI18N
#define COMPRESS "/usr/bin/gzip"
#define COMPRESS_EXTENSION ".gz"
#define DLB
#define AUTOPICKUP_EXCEPTIONS
---------------

---------------
include/unixconf.h
---------------
#define SYSV
#define LINUX
#define TERMINFO
#define TIMED_DELAY
---------------

---------------
src/Makefile
---------------
CC = gcc
CFLAGS = -O2 -fomit-frame-pointer -I../include
LFLAGS = -L/usr/X11R6/lib
WINSRC = $(WINTTYSRC) $(WINX11SRC)
WINOBJ = $(WINTTYOBJ) $(WINX11OBJ)
WINTTYLIB = -lncurses
WINX11LIB = -lXaw -lXmu -lXext -lXt -lXpm -lX11
WINLIB = $(WINTTYLIB) $(WINX11LIB)
---------------

---------------
util/Makefile
---------------
CC = gcc
CFLAGS = -O2 -fomit-frame-pointer -I../include
LFLAGS = -L/usr/X11R6/lib
YACC = bison -y
LEX = flex -8
---------------

---------------
Makefile
---------------
PREFIX = /usr/local
GAME = jnethack
GAMEUID = games
GAMEGRP = games
GAMEPERM = 02755
FILEPERM = 0664
EXEPERM = 0755
DIRPERM = 0775
VARDATND = x11tiles NetHack.ad pet_mark.xbm rip.xpm

ビックリマーク赤文字を追加してコメントアウトビックリマーク
dofiles-dlb: check-dlb
( cd win/X11 ; cp JNetHack.ad $(GAMEDIR)/JNetHack.ad ; cp nethack.rc $(GAMEDIR)/nethack.rc )
( bdftopcf win/X11/nh10.bdf > $(GAMEDIR)/nh10.pcf ; mkfontdir $(GAMEDIR))

dofiles-nodlb:
( cd win/X11 ; cp JNetHack.ad $(GAMEDIR)/JNetHack.ad ; cp nethack.rc $(GAMEDIR)/nethack.rc )
( bdftopcf win/X11/nh10.bdf > $(GAMEDIR)/nh10.pcf ; mkfontdir $(GAMEDIR))
---------------


編集が終わったら make します。

$ make all
$ sudo checkinstall -R
-------------------------------------
このパッケージは以下の内容で構成されます:

1 - Summary: [ JNetHack - NetHack [日本語版] ]
2 - Name: [ jnethack ]
3 - Version: [ 3.4.3 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ Applications/Games ]
7 - Architecture: [ i686 ]
8 - Source location: [ nethack-3.4.3 ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ nethack ]

変更するものの番号を入力してください。Enterで続行します:
(番号を選んで編集するとこんな感じ?)
-------------------------------------


一応、出来たrpmファイルを保管します。

$ cd ~/rpm/RPMS/i686 (or x86_64)
$ ls
$ mv jnethack-3.4.3-1.i686.rpm ~/Soko/


/usr/local/bin にシンボリックリンクを作る。

$ cd /usr/local/bin
$ sudo ln -s /usr/local/games/jnethack ./

これでインストールは完了です。


JNetHackで遊ぶ

$ jnethack

これでX11版のJNetHackで遊べます。
ホームディレクトリに .jnethackrc ファイルを作ってオプションを設定することで、TTY版で遊べたり好みの設定が出来ます。


ビックリマークゲーム中に"S"でセーブ出来ない時は?ビックリマーク

$ sudo mkdir /usr/local/games/lib/jnethackdir/save
$ sudo chmod 775 /usr/local/games/lib/jnethackdir/save

(なんか Makefile に設定がありそうなんだけどわかんないのでwシラー



.jnethackrc の設定

$ cd   (←ホームディレクトリへ戻る)
$ gedit .jnethackrc &

以下をコピペするなりで。保存。
(日本語でオプションを設定して文字化けさせないためには nkf で EUC-JP に変換する必要があるビックリマーク

---------------------------------------
#
# 漢字コードの設定
#
#OPTIONS=kcode:euc
#OPTIONS=kcode:sjis
#
# キャラクターの設定
#
#OPTIONS=name:yakisoba
#OPTIONS=male
#OPTIONS=female
# 好物の名前
#OPTIONS=fruit:ギョーザ
# 職業の設定
#OPTIONS=role:
#
# ペットの設定
#
#OPTIONS=pettype:cat
#OPTIONS=catname:ロデム
#OPTIONS=pettype:dog
#OPTIONS=dogname:パトラッシュ
# ペットの仔馬は出現するように指定できない
# 出現した時の名前は指定できる
#OPTIONS=horsename:シルフィード
#OPTIONS=pettype:none
OPTIONS=hilite_pet
#
# 操作設定
#
#OPTIONS=!autopickup
OPTIONS=pickup_types:$
OPTIONS=checkpoint
#OPTIONS=confirm
#OPTIONS=disclose
#OPTIONS=fixinv
#OPTIONS=help
#OPTIONS=!ignintr
#OPTIONS=menustyle:tradional
#OPTIONS=menustyle:combination
#OPTIONS=menustyle:partial
#OPTIONS=menustyle:full
#OPTIONS=menu_deselect_all:
#OPTIONS=menu_deselect_page:
#OPTIONS=menu_first_page:
#OPTIONS=menu_invert_all:
#OPTIONS=menu_invert_page:
#OPTIONS=menu_last_page:
#OPTIONS=menu_next_page:
#OPTIONS=menu_previous_page:
#OPTIONS=menu_search:
#OPTIONS=menu_select_all:
#OPTIONS=menu_select_page:
OPTIONS=!number_pad
#OPTIONS=!rest_on_space
#OPTIONS=safe_pet
#OPTIONS=sortpack
#
# 画面表示・音設定
#
#OPTIONS=!BIOS
OPTIONS=color
#OPTIONS=!DECgraphics
#OPTIONS=dungeon:
#OPTIONS=effects:
#OPTIONS=!IBMgraphics
#OPTIONS=legacy
#OPTIONS=!lit_corridor
#OPTIONS=monsters:
#OPTIONS=msghistory:50
#OPTIONS=news
#OPTIONS=!null
#OPTIONS=packorder:
#OPTIONS=preload_tiles
#OPTIONS=!rawio
#OPTIONS=scores:
#OPTIONS=showexp
#OPTIONS=showscore
#OPTIONS=silent
#OPTIONS=standout
#OPTIONS=time
#OPTIONS=tombstone
#OPTIONS=!toptenwin
#OPTIONS=traps:
#OPTIONS=verbose
#OPTIONS=videocolors:
#OPTIONS=windowtype:tty
OPTIONS=windowtype:x11
#OPTIONS=windowtype:gtk
#OPTIONS=windowtype:Gnome
#
---------------------------------------

あとは自分の好きに .jnethackrc を編集する。
(たくさんあるけど必要なものだけ書いてもOK)
参考:恐怖の迷宮への招待(NetHackガイド)


ビックリマーク日本語で設定したら文字化けするので。ビックリマーク

$ nkf -e --overwrite .jnethackrc

nkf で EUC-JP に変換すれば表示できる。


TTY版で遊ぶ

.jnethackrc のオプションを変更
--------------------------------
#OPTIONS=windowtype:x11
OPTIONS=windowtype:tty
--------------------------------

EUC-JPなのでTTY版では文字化けします。
gnome-terminal などで「文字のエンコーディング」をEUC-JPに変更して遊びます。
GNU screen を使うといろんなターミナルで遊ぶことが出来ます。

$ screen
Ctrl+a :encoding eucJP
$ jnethack


エラー解消と X11tile で表示する

何かエラーが出てることに気づく。。。むっ
--------------------------------------
Warning: Cannot convert string "variable" to type FontStruct
Failed to load t32-1024.xpm: XpmOpenFailed
Switching to text-based mode.
--------------------------------------

japanese/Install.lnx を参考に
/usr/local/games/lib/jnethackdir/JNetHack.ad を編集する。

$ cd nethack-3.4.3/
$ gedit japanese/Install.lnx &

$ sudo gedit /usr/local/games/lib/jnethackdir/JNetHack.ad &
------------------------------------
!JNetHack*font: variable
JNetHack*font: fixed

!JNetHack.tile_file: t32-1024.xpm
JNetHack.tile_file: x11tiles

!JNetHack.tile_width: 32
JNetHack.tile_width: 16

!JNetHack.tile_height: 32
JNetHack.tile_height: 16
------------------------------------

X11tile mode 表示を text-base mode 表示に戻したければ、
JNetHack.tile_*** を ! でコメントアウトすれば戻る。



スクリーンショット

It's Automatic !-jnethack-1

It's Automatic !-jnethack-2

It's Automatic !-jnethack-3

It's Automatic !-jnethack-rip

It's Automatic !-jnethack-tty-1

It's Automatic !-jnethack-tty-2

It's Automatic !-jnethack-x11-tile

It's Automatic !-jnethack-tty-3

It's Automatic !-jnethack-tty-4

It's Automatic !-jnethack-tty-5

It's Automatic !-jnethack-tty-6