天地創造の後,
破壊神モーロック,
創造主マルドゥークと違いして反乱す.
破壊神モーロック,
マルドゥークの聖器のなかより,
万物の力の源「イェンダーの魔除け」を盗みだし,
それを彼の潜む世界の底,
ゲヘナの闇の洞窟に隠し,
時を待てり.
てな出来事が有って、神様に代わって盗まれた「イェンダーの魔除け」をダンジョンに潜って取り返して来るのが目的のロールプレイングゲームです。
一般的な説明は WikipediaのNetHackのページ を読んで貰うとして、感覚的には日本で一般的にRPGと呼ばれるゲーム*1とは違って、ゲームのキャラクタではなくプレイヤー自身が成長していくタイプのゲームだと思ってます。
NetHackはオープンソースで開発されていて誰でも無料でプレイする事が出来ます。 ゲームの入手先は 日本語版NetHackのページ か、英語版でも良ければ オリジナルNetHackのページ です。
オリジナルには含まれているのに日本語版では省かれてて、TeX使いとしてはちょっと悲しかったんで自分で作りました。 もし、欲しい人が居れば自由に持っていってください。 日本語Guidebook TeX版*2 と、それを変換して作った 日本語Guidebook PDF版 です。
オリジナル*3の Guidebook.tex に、日本語版*4の jGuidebook.mn から訳文を埋め込んで作りました。 基本的にはできるだけオリジナルに忠実に作ってますが、TeXの流儀に合わなかったり明らかに間違っているとか抜けている部分は修正を掛けてます。
時間的順番は 初昇天達成までの道のり から始まって、次に 次はWizで昇天を目指す で、現在 Wizを極めたい をプレイ中です。
これまでにやり残した事が一杯有るので、それをやって行きたい。 プレイしている内にやりたい事は増えてくると思うけど、取り合えず今の目標。
テキスト表示でプレイしている場合しかこの方法は使えません。 著者は普段テキスト表示でプレイしているので、タイル表示の録画については考えた事が無いのでここでは一切触れていません。
プレイ画面の録画には ttyrec を使ってます。
コマンドラインから ttyrec -ae jnethack ~/nethack.tty と実行して、ホームディレクトリの nethack.tty ファイルに録画してます。 途中で中断して再開した場合はファイルに追加録画されます。
ttyrec はけっこう有名なツールなので、もっと詳しい説明はググって貰えば見つかると思います。
再生は ttyrec 付属の再生ソフト(ttyplay)だと、中断中の時間もそのまま再生時間に反映されてしまうんで、何度も中断/再開して追加録画したファイルの再生には向きません。 なので、中断中の時間をカットできる用にした自作のttyplayを使ってます。 自作のはRuby言語のスクリプトなので、実行にはrubyのインストールが必要です。
自作のttyplay のダウンロードはこちら→ ttyplay
使い方は nethack.tty ファイルを再生したい場合は、ttyplay nethack.tty と実行します。
中断中の時間をカットする場合は --cut オプションを使います。 10秒以上画面に変化が無い場合を中断中とみなしてカットするなら、ttyplay --cut=10 nethack.tty とします。
再生速度を変えたい場合は --speed オプションを使います。 2倍速再生ならば ttyplay --speed=2 nethack.tty とします。 スロー再生も可能で、1/2倍速再生ならば ttyplay --speed=0.5 nethack.tty です。
--cut と --speed の両オプションは同時指定可能で、その場合はどちらを先に指定しても先に中断中の時間をカットしてから再生速度制御が掛かります。
再生時間を知る為に再生が終わるまで待つのは大変です。 --info オプションを追加すると再生せずに再生に掛かる時間を表示します。 ついでに、録画開始日時と最終追加日時も表示します。
再生途中で再生速度を変化させる時は、ttyplay をインクルードして使うラッパーソフトを書いて対応してます。 オリジナルの ttyplay に機能追加ではなく、わざわざスクリプト言語で書き直したのは、簡単にラッパーが作れるようにするためです。
ラッパーソフトの例: 2月25日0時10分までの録画は100倍速再生で、それ以降はノーマル速度で再生させる場合
#! /usr/bin/ruby
load 'ttyplay'
class TTYPlayWrapper < TTYPlay
def playOnDemand(io, speed, time, seek = false)
time = time.to_f
play(io, seek) do |recTime, tty|
waitTimeMax = 0.5
playSpeed = recTime < time ? speed : nil
[waitTimeMax, playSpeed]
end
end
end
require 'time'
tp = TTYPlayWrapper.new
open('nethack.tty') do |f|
tp.playOnDemand(f, 100, Time.parse('2011-02-25 00:10:00'))
end
この例の場合、引数の変数 recTime に録画した日時、tty に画面表示される文字列*11が入ってます。 戻り値の変数 waitTimeMax に --cut オプションの値、playSpeed に --speed オプションの値を設定します。 中断中のカットをしない場合は waitTimeMax に nil を設定します。 playSpeed に nil を設定すると、ノーマル速度再生になります。 これは 1 を設定した場合と同じです。
例では recTime の値のみしか参照してませんが、tty の値を使うともうっちょっと面白い制御が可能です。 例えば tty の値に「マインドフレア」*12が含まれていれば、その後の数分間の playSpeed を nil に設定する事で、マインドフレアに脳を吸われるシーンを抜き出してノーマル速度で再生させる事が出来ます。
TTYPlay#play の引数 seek を true に設定するとプレイ画面の再生をせずに、recTime と tty の値を参照出来ます。 例えば、プレイ画面を再生する必要は無く、マインドフレアが登場した日時を調べたいだけの時に使うと便利です。 下記の戻り値を使って画面再生をせずに再生に要する時間を調べたい時にも便利です。
TTYPlay#play の戻り値は 録画開始日時、録画最終日時、再生に要する時間 の配列です。
初昇天達成までの道のり の動画は、ttyplay --cut=0.5 --speed=100 nethack.tty と言う感じで再生した画面を動画キャプチャソフトで画像ファイルに変換して作成してます。 --speed オプションの数値は --info オプションを使って、動画毎に動画の再生時間がBGMの長さに合うように調整して変えてます。
識別の巻物や魔法を使わないアイテムの判別方法。 取り合えず序盤で大事なアイテムのみ*13。
薬の調合を図にして見た*20。
著者の独断で使いやすさ順に分類してみた。 魔法使いでしか魔法を使った経験が無いので、魔法使い視点での使いやすさになります。 分類出来るだけの知識が無い使用経験の少ない魔法は、未分類に入れてます。
使えるとゲームの難易度が大きく下がる。 習得する難易度が低くて序盤から使えるのも得点が高い。 序盤で死にやすいゲームなので、これ重要。
これが使えると楽に進める。
無くても困らないけど使えれば便利。
上位の代替手段手が入るまでは役に立つ。
これに魔力を消費するなら他の魔法を使った方が…
キャラクタ名と称号を表示する部分に体力(HP)と魔力(Pw)の最大値に対する比率をバー表示するパッチです。 体力だけならば探せば見つかったんだけど、魔力もってのが無かったので自作しました。 このパッチを当てると下図のように、体力の残りを反転で、魔力の残りをアンダーラインで表示するようになります。 最大値の時は称号の右端までバーが伸びます。
デモ動画→ A demonstration of "HP and Pw status bar" patch.
このパッチはテキスト表示用です。 試してはいませんが、タイル表示ではたぶん効果がないと思います。 また、アンダーラインが表示できない環境では魔力バーは表示されません。 残り体力のみの表示になります。
ダウンロードはこちら→ nethack-3.4.3_hppwbar-1.0.diff
パッチの当て方:
$ tar xzf nethack-343-src.tgz && cd nethack-3.4.3
$ patch -p1 < ../nethack-3.4.3_hppwbar-1.0.diff
$ zcat ../jnethack-3.4.3-0.10.diff.gz | patch -p1
Ralph Churchill さん作成の オリジナルNetHack 3.4.3 用 Color HP Monitor を 日本語NetHack 3.4.3-0.10 用に修正しました。
ダウンロードはこちら→ jnethack-3.4.3-0.10_hpmon-1.0.diff
パッチの当て方:
$ tar xzf nethack-343-src.tgz && cd nethack-3.4.3
$ zcat ../jnethack-3.4.3-0.10.diff.gz | patch -p1
$ patch -p1 < ../jnethack-3.4.3-0.10_hpmon-1.0.diff