16
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

コンパイルしやすくなったJNetHack3.6.6で遊ぼう!

はじめに

最初期のコンピュータRPGの1つである「ローグ」の流れを汲み、プレイする度にダンジョンが変化するタイプのゲームの総称を「ローグライク」1と言います。
NetHack はその中でも直系と言えるキャラクタベースのシンプルな見た目のゲームですが、根強い人気があります。2
tmux のタブを一つこれ用に準備して、作業の合間に遊んだりもできますね笑

英語版の NetHack 自体は各種Linuxのディストリビューションのパッケージに含まれているので簡単にインストール出来ますが、日本語版はありません。
JNetHack Project で日本語化の為のパッチを作成・配布してくださっていますので、これを使って自分でビルドしてみましょう。

以前は日本語が EUC-JP で出力されるために UTF-8 ロケールのターミナルでは cocot を使ったり、一時的に文字コードの設定を変える、等の対処が必要でした。
それが、現時点(2020/03/14)の最新版である JNetHack 3.6.2-0.1 では入出力の文字コードが完全に UTF-8 になっており、ほぼそのままビルドしてプレイできる様になりました。
事前にMakeFileをエディタで編集したりする手間もなくなり簡単な手順のみでコンパイル可能で大分敷居が低くなったので、是非遊んでみましょう。

コンパイル&実行環境について

Ubuntu 18.10 と、Windows10 の WSL1(Ubuntu 18.04.1 LTS) で試しました。Windwos10 の WSL & ターミナル環境の整備についてはこちらを参考にしてみてください。
当然Macでもコンパイル可能です。

  • NetHack本体と日本語化パッチの入手

JNetHackのプロジェクトページからもダウンロード出来ますが、ここではターミナル上で

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

とする事で落として来ましょう。

コンパイル手順

  • コンパイル等に必要なパッケージをあらかじめインストールしておきます。
~% sudo apt-get install build-essential bison flex libncurses5-dev gzip nkf
  • ソースコードを展開し、パッチを適用して内部処理用の文字コードに変換します。
~% 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

途中、多分Windows向けのファイルへのパッチ適用が失敗した旨のメッセージが出る場合がありますが、無視して大丈夫です(マズかったら教えてください)。

  • コンパイル&インストール
~% cd ../../
~% make all
~% make install

昔より恐ろしく手順が簡単です笑

遊んでみよう

ホームディレクトリに nh というディレクトリが作成されていますので

~% nh/install/games/jnethack

で起動します。プレイ中の画面はこんな感じです。

ようこそrattcv,NetHackの世界へ!あなたはノームの薬師だ!


        ---------------
        |.............|            ------
        |.............-#           |$...|
        |..........>..|#           |.....#########`##
        -.-----|-------##          |..@.|     # ####
         #     #        #        ##.....|    ------|-----
        ## #####        #        # |....d### |..........|
        #  #            #        # |...[|  # |.......$..|
        #  #            #------ ## ------  # |.........$|
       -.--.-----       #|.%..|##          ##-..........|
       |........|       #....$|#             |..........|
       |.........######  |....|#             ------------
       |..$..<..|     ###.....|#
       ----------        |.....#
                         |....|
                         ------



Rattcv 見習い             強:10 早:9 耐:14 知:9 賢:17 魅:16 中立
地下:1  $:1517 体:12(12) 魔:5(5) 鎧:8  経験:1

画面上の記号の意味

ヘルプから抜粋して表にしました。

記号 説明
- と | 部屋の壁.開いたドアや墓のこともある
. 床 または 出入口
# 廊下 鉄棒 または 木.流し台(もしあれば)や跳ね橋のこともある.
> 次の階への階段等.
< 前の階への階段等.
@ ( ふつうは )プレーヤー または 別の人間.
) いろんな種類の武器.
[ 服 または 鎧.
% 食べもの.(腐ってないとは限らない)
/ 魔法の杖.
= 指輪.
? 巻物.
! 水薬.
( 道具.(つるはし, 鍵, ランプ...)
$ 金の塊.
* 宝石 または 岩.(役に立つ場合も,無価値の場合もある)
+ 閉じた扉 または 呪文の本.
^ (見つけた後の) 罠.
" 魔除け または 蜘蛛の巣.
0 鉄の玉.
_ 祭壇 または 鉄の鎖.
{ 泉.
} 水溜り や 塵だまり
\ 豪華な王座.
` 玉石 または 彫像.
A から Z, a から z, その他: 怪物
I 透明または見えていない怪物が最後にいた場所

※あ、あとペットがいます。仔犬(d)か小猫(f)(職業によっては仔馬(u))です。

コマンドについて

自分のキャラクターは @ で、基本の移動コマンドはVimと同じ H J K L です。
他のキーボードコマンドはヘルプにも記載がありますが、中々覚えられないのでチートシートを作成してみました。
cheat_sheet.png
漏れがあったり分かりづらかったりするんでアップデートしていこうと思ってます。

詳しい設定や遊び方

僕もまだがっつり腰を据えてプレイしたことがないのであまり解説できません笑
以下の参考サイトは結構古くからあり今の JNetHack とは異なる部分もありますが、色々参考になると思います。

恐怖の迷宮への招待(NetHack ガイドブック)
猿でもできる JNetHack(通称サルネト)

以下は JNetHackの魅力や遊び方について語れている記事です。

JNetHackというゲームにはまる理由 - 人生なめてるやつが成功する方法
NetHackに取り付かれた男
【Roguelike】NetHack(ネットハック)初めての歩き方【ローグライク】

ではでは、あなたも是非「恐怖の迷宮」の攻略にチャレンジしてみましょう!


  1. 「トルネコ」や「シレン」等の「不思議のダンジョンシリーズ」なんかもローグライクに分類されます。 

  2. Twitterでたまに「あなたの人生を変えたゲームは?」等の様なアンケートがありますが、本ゲームを上げる人がかなり沢山居る様に見受けられます。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
16
Help us understand the problem. What are the problem?