Linux CUIで出来るゲームとなると数は多分限られるわけで、その上(俺が)面白いと思えるものとなると数はさらに限られてくる。

その中で、未だにクリアできず定期的にやりたくなってくるゲーム、

そう、ローグライクゲームであるNethack、そして日本語パッチをあてたJNethackである。

以前VAIO Type P上のLinuxMintにJNethackをインストールして遊んでたりしたわけだけれども

今回はJNethackをRaspberryPiにインストールしてゲームサーバーに仕立ててやる!

WindowsPCでTeraTermを起動したらNethackが遊べる、いやiPhoneとかFireHD上のSSHクライアントからでもラズパイに接続して遊べる、そんな環境を作ってやる!

そして仕事中に、なんだか嫌になったらサクッと起動してサクッと遊んでやる!でもいつもサクッとゲームオーバーさ!!ガッデム!!!



1.ローグライクとは Nethackとは

NethackはRPGの一種、RogueLikeと呼ばれるジャンルに含まれるゲームで、日本人でなじみの深いものは「トルネコの大冒険」や「風来のシレン」だろう。

「トルネコの大冒険」は、ドラクエ4に出てくる商人トルネコを主人公にしたスピンアウト的なゲームで、ドラクエ人気と相まって自分も結構遊んだ記憶がある。

ただ、ローグライクの祖先であるローグはグラフィックの欠片もない、アルファベットや記号などで表現されたキャラクターベースのゲームでした。

ローグ - Wikipediaより抜粋

                     ------------
                     |.....!....|
                     |..@.......|
   ##################+.........:|
   #                 |...%.H....|
   #                 ------+-----
   #
---+---
|.....|
|.?...|
|.....+######        ---------+----
-------     #        |............|
            #        |............+
            #########+..........^.|
                     |............|
                     --------------

そのローグに色々な要素を付け加えて、さらに複雑にさらにゲーム性を高めたものがNethackなのです。

戦闘はターン性、アイテムを収集しつつダンジョンに潜っていき、腹が減れば食料を食べ、食料が無くなれば倒したモンスターを食し、武器や防具を強くしつつ更にダンジョンを下りていき、下りるたび強くなるモンスターとヒットアンドアウェイで戦いつつ、目的に向かって進んでいく。

途中、下る階段が複数あったり(分岐)、祭壇を見つけて信仰神へ祈りをささげて様々な恩恵時には罰を受け、岩や水辺に阻まれてどのようにダンジョンを下りるべきかアイテムとにらめっこしながら悩み、はたまた食料が尽きかけて食料やモンスター、お店を探す羽目になり、その最中に志半ばに死んでみたり。

と、RPGの中では結構地味でシビアなゲームです。

シビアさに拍車を駆けるのが操作性で、テキストエディタのviやvimを使ったことがある人はわかると思うが、主人公である「@」を動かすキーはh(←)j(↓)k(↑)l(→)だったりします。

要は、キーボードのホームポジションを崩すことなく操作できるように作られている、すなわちプログラマーのために作られたゲーム!といっても過言ではない(かもしれない)。

そして、そこに大いに魅力を感じるわけです。


2.JNethackのビルド

基本的に、ソースと日本語パッチを取得してきて、ソースにパッチ適用して文字コード変換してからコンパイル、インストールです。

まずは、ラズパイ自身を最新化しておきましょう。

$ sudo apt update
$ sudo apt upgrade

コンパイルに必要なパッケージをインストールします。

$ sudo apt-get -y install build-essential bison flex libncurses5-dev gzip nkf

tmpディレクトリを作成してその中で作業をします。

$ mkdir tmp
$ cd tmp

そしたらソースコードとパッチを取得します。

$ wget https://www.nethack.org/download/3.6.6/nethack-366-src.tgz
$ wget https://ja.osdn.net/dl/jnethack/jnethack-3.6.6-0.1.diff.gz

あとはソースを展開して出来たディレクトリに移動してパッチ当てて、文字コードを変換して、setup.shを実行してからmake all、make installを実行します。

$ tar zxvf nethack-366-src.tgz
$ cd NetHack-NetHack-3.6.6_Released/
$ zcat ../jnethack-3.6.6-0.1.diff.gz | patch -p1
$ find ./ -type f | xargs -i nkf -e -Lu --overwrite {};
$ cd sys/unix/
$ sh setup.sh hints/linux
$ cd ../../
$ make all
$ make install

完了するとホームディレクトリの下にnhってディレクトリが出来ていると思います。

jnethackの実体ファイルは~/nh/install/games/jnethackです。

こいつへのシンボリックリンクを、パスの通っている/usr/local/gamesの下に作成します。

# sudo ln -s ~/nh/install/games/jnethack /usr/local/games/jnethack

これで、どこのディレクトリにいてもjnethackを実行できます。


3.プレイ!その前に 設定ファイル作成編

実際にプレイしてみる。

$ jnethack

という感じで、ちょっとしたキャラクタメイキングがあってからのスタートとなる。

そして、大体死ぬ。普通に死ぬ。短時間で死ぬ。死ぬすなわちゲームオーバー。

そうするとキャラメイクからやり直し、てのがもう面倒臭い。

あとね、JNethackをインストすると初めはいつもそうなんだけど、Autopickupが有効になってる。つまりアイテム見つけてその上に操作しているキャラ「@」が乗ると自動的にアイテムを拾ってしまう。

このゲーム、アイテムを見つけて考えもせず拾う行為は、死を早める。

プレイ最中にAutopickupが有効になっているようなら@キーを押すことで解除できる。

が、ゲーム始めるときにいつも@キー押すのも面倒臭い。つ~かAutopickupが有効になってることを忘れてる。。。

というわけで、ゲームを始める時に職業や種族などキャラメイクの値が決まっていたりAutopickupを無効にしてスタートしたい時の為に設定ファイルを用意しよう。

設定ファイルは、ホームディレクトリの下に.jnethackrcというファイル名で作成します。

自分が設定したファイル内容は以下です。

$ pwd
/home/raspi4_user01

$ vim .jnethackrc

OPTIONS=name:OraOra,role:ワルキューレ,race:人間,align:中立
OPTIONS=!autopickup

昔は日本語化しても値は英語で設定するものだったんだけど、今回はどうも値を日本語で設定しないと認識されない。

ちなみに「願い」も日本語で言わないとダメみたいだ。

あと、設定ファイル自体はラズパイ上でvimで作成すると文字コードがUTF-8になるんだけど、EUCに設定しないとダメらしい。

というわけで、設定ファイルの文字コードをEUCに変更する。

$ mv .jnethackrc .jnethackrc.org
$ nkf -ed .jnethackrc.org > .jnethackrc


4.プレイ! そして、よく使うコマンドTips

よく使うコマンドを列挙してみました。

自分は未だワルキューレ使いのため、使用コマンドに偏りがあるかもしれません。

列挙の順序として、移動系、使用系、行動系、メタ系ってな分類で並べてみました。

ただ、ヘルプ見てもらえば分かりますが、これ以外にもコマンドはまだいっぱいあるわけで、それらを使いこなせれば更にゲーム内での寿命を延ばすことができるかもしれません。

でもね、コマンドを知ってるってことよりも、どの状況でどのコマンドを使用するか、ってところが重要なの。

あと「運」があるかどうかもかなり重要なので、決して「新月の夜」にNethackの世界に足を踏み入れないようにしなければなぁ、と思っています。

キー 内容
h 左へ移動
コマンドによっては方向を指し示す際にも使用
j 下へ移動
コマンドによっては方向を指し示す際にも使用
k 上へ移動
コマンドによっては方向を指し示す際にも使用
l 右へ移動
コマンドによっては方向を指し示す際にも使用
y 左上へ移動
コマンドによっては方向を指し示す際にも使用
u 右上へ移動
コマンドによっては方向を指し示す際にも使用
b 左下へ移動
コマンドによっては方向を指し示す際にも使用
n 右下へ移動
コマンドによっては方向を指し示す際にも使用
> (>の上にいる状態で)階段を下りる
< (<の上にいる状態で)階段を上る
i 自分の持ち物を見る
. 1ターン休憩
, 拾う
s 自分の周りを探索
行き止まりで通路や扉を探す時によく連打する
o+方向 (扉を)開ける
d (持ち物からモノを1種類足元に)置く
店の中で自分の所持品を置くと売るかどうか聞いてくる
Shift+d (持ち物からモノを複数種類足元に)置く
店の中で(以下略
Ctrl+d+方向 蹴る
鍵のかかった扉や宝箱、大箱の鍵を壊す時によく使う
灰色の宝石を見つけた時にも使用
通常置いてあるアイテムを蹴ると蹴った方向に飛んでいくので注意
#+l
  (# loot
(足元の宝箱や大箱、袋を)開ける
e 食べる
足元にモンスターや食べ物があればまずそちらを食べるか聞いてくる
そうでなければ持ち物の中で何を食べるか聞いてくる
q 飲む
足元に薬や泉があればまずそちらを飲むか聞いてくる
そうでなければ持ち物の中で何を飲むか聞いてくる
r (巻物や魔法書を)読む
z (杖を)振る
自分に振る場合は、方向に.を使う
Shift+z (魔法書で覚えた呪文を)唱える
自分に唱える場合は、方向に.を使う
w (武器を)装備する
wを押した後の武器選択で-を押すと素手になる
Shift+w (防具を)装備する
Shift+t (装備している防具を)外す
a (道具を)使う
モノによっては、aの後に方向を聞かれ、更に使用後にその状態が保持される
例えばつるはしは使用すると掘る方向を聞かれ、掘った後に武器は外れ手につるはしを持った状態になるランプやランタンは使用すると光った状態になる
Shift+p (指輪、魔除け、目隠しなどの装飾品を)装備する
Shift+r (装備している指輪、魔除け、目隠しなどの装飾品を)外す
t (モノを)投げる
さまよう目など攻撃するとこちらが数ターン硬直してしまうようなモンスターに対して
あとは自分と同属性ユニコーンに宝石投げる時に使う
p (店主や僧侶に)代金を支払う
お店であれば、出来る限りペット使って商品入手
AC下げるために僧侶にこのコマンド使うほうがよい
#+d
  (# dip
(薬や泉にモノを)浸す
例えば、泉に長剣を浸したり、聖水に呪われた/呪われていないモノを浸したり
#+o
  (# offer
(祭壇でいけにえを)捧げる
#+p
  (# pray
(神に)祈る
ピンチの時の最後の手段
でも基本的に祭壇で# offerを繰り返し神様のご機嫌を取った後に祈ったほうが吉
#+r
  (# rub
(ランプや石を)こする
魔法のランプをこする以外に使用したことがない
#+s
  (# sit
座る
玉座(\)を見つけたら、一か八か使用
; 見えているシンボルの情報を表示
画面上に見えているシンボルに対して方向キーでカーソルを移動後、.を押すことで情報を表示
Shift+s (ゲームを保存して)終了する
#+q
  (# quit
(ゲームを保存せずに)終了する
Esc コマンド実行中に取りやめる
? ヘルプメニューを表示
メニュー内容は以下
  a - NetHackについて(バージョン情報)
  b - ゲームおよびコマンドの解説(長文)
  c - コマンド一覧
  d - NetHackの簡単な歴史
  e - 画面に表示される文字の説明
  f - このキーが何を意味するかの説明
  g - ゲームのオプション一覧
  h - ゲームのオプション一覧(長文)
  i - キーボードコマンドの完全な一覧
  j - 拡張コマンド一覧
  k - メニュー制御キー一覧s
  l - NetHackのライセンス
  m - サポート情報


5.まとめ

今日は以上!


6.参考

猿でもできる JNetHack(通称サルネト): 超初心者へマニュアル

恐怖の迷宮への招待(NetHack ガイドブック): コマンド