NetHack Code utility ユーザーズマニュアル
*******************************

TSUMURA Tomoaki 津邑公暁
Last Modified<1999-03-05 17:25:25 tsumura>

この文書は NetHack Code utility 0.10 に対応します。

(注: NetHack Code utility は バージョン0.10 現在, 開発中のベータバージョンです。)

はじめに
****

NetHack Code utility は, NetHack Code 1.1 を Emacs 上で扱うためのユーティリティです。NetHack Code の作成, 編集 が対話的に行え, また作成したNetHack Code をメールヘッダとして挿入したり, NetHack Code をデコードして表示したりすることができます。

NetHack Code utility は, Emacs19.28 以降 をベースとした Mule, Emacs20.2 以降, XEmacs20.4 以降, および Meadow 1.00, Mule for Windows v1.22 で動作することを確認しています。

NetHack Code 1.1 について
*********************

NetHack Code 1.1 は, Geek Code を真似て作られた, NetHack のプレイスタイルを表現するためのコードです。詳しくは, 以下の Web site を参照してください。

NetHack Code 1.1 (original site)
     http://blues.helsinki.fi/%7Evviitane/nhcode.html

NetHack Code 1.1 日本語訳 (in RogueLike@lab3)
     http://www.lab3.kuis.kyoto-u.ac.jp/%7Eroguelike/nethack/nh_code.html

以下のような形で記述され,

     NH 3.2.2U D
             [++ )++ P S D+ p $ t- s W+ E--- PS- PP+ G C- I++ @W(*) N--
             !b !B !Y X++ So+ Sp++ !sb !wb

各項目は, それぞれ以下のような意味を持ちます。

[
     鎧 (armor) に関する項目

)
     武器 (weapon) に関する項目

P
     祈り (prayer) に関する項目

S
     生贄 (sacrifice) に関する項目

D
     寺院への寄付 (donations) に関する項目

p
     ペット (pets) に関する項目

$
     お金 (gold) に関する項目

t
     宝石 (treasure) に関する項目

s
     店 (shop) に関する項目

W
     願い事 (wishing) に関する項目

E
     魔法の言葉「エルベレス」(Elbereth) に関する項目

PS
     自分自身に対する変化効果 (polymorph self) に関する項目

PP
     変化によるアイテム変換 (polypile) に関する項目

G
     虐殺 (genocide) に関する項目

C
     争いの引きおこすこと (conflict) に関する項目

I
     取得能力 (intrinsics) に関する項目

@W
     大魔法使いイェンダー (The Wizard of Yendor) に関する項目

N
     看護婦 (nurse) に関する項目

b
     呪われたベル (cursed bell) に関する項目

B
     呪われた開放のベル (cursed Bell of Opening) に関する項目

Y
     プラチナイェンダー印エクスプレスカード (PYEC) に関する項目

X
     NetHack 経験 (experience) に関する項目

So
     NetHack のソースコード (sources) に関する項目

Sp
     スポイラー (spoiler) に関する項目

sb
     セーブファイルのバックアップ (save file backups) に関する項目

wb
     ウィザードモードのボーンズ (wizard bones) に関する項目

準備
**

NetHack Code utility を使用するための準備手順を説明します。ここに記述した項目のほかに, ある程度の NetHack プレイ経験が必要です。:-)

必要環境
====

Emacs19 以前のヴァージョンでは, 別途 APEL が必要です。以下から入手して, インストールしておいてください。

ftp://ftp.jaist.ac.jp/pub/GNU/elisp/apel/

本パッケージの入手
=========

NetHack Code utility 最新版は, 以下の場所からダウンロードできます。

  - http://www.lab3.kuis.kyoto-u.ac.jp/misc/roguelike/sources/NetHack-Code/

  - ftp://daidai.kuis.kyoto-u.ac.jp/pub/NetHack-Code/

インストール
======

load-path の通った場所に置き, お好みで byte-compile してください。

~/.emacs には, 以下のように記述してください。

     (require 'nh-code)

使いかた
****

NetHack Code utility を使用方法を説明します。

NetHack Code の作成
================

NetHack Code utility では,

     M-x nh-code-generate

というコマンドでNetHack Code を対話的に作成できます。

 -- Command: nh-code-generate
     NetHack Code 1.1 を, 対話的に作成し, NH-CODE-FILENAME で指定されたファイルに格納する。

 -- Variable: nh-code-filename
     NetHack Code utilityで生成した NetHack Code を格納するためのファイルを指定します。ヘッダとして挿入する際にも, このファイルが参照されます。デフォルト値は, ~/.nh-code です。

このコマンドを実行すると, 次々と質問が表示されますので, それに答えていってください。質問には, 主に

  * 入力を要求されるもの (補完可)

  * 選択肢が表示され, 数字を入力するもの

  * y or n で答えるタイプのもの

があります。

選択肢が表示されるタイプの質問時には, x を入力することによって選択肢の表示言語 (日本語/英語) を切り換えることができます。

 -- Command: nh-code-switch-lang-and-view
     選択肢の表示言語を, 日本語から英語に, また英語から日本語に切り換える。

NetHack Code の挿入
================

NetHack Code utility では, メールの作成などの際に,

     M-x nh-code-insert

というコマンドで, NH-CODE-FILENAME で指定されたファイルに格納されているNetHack Code を, ヘッダつきで挿入できます。

 -- Command: nh-code-insert
     NH-CODE-FILENAME で指定されたファイルに格納されているNetHack Code を, NH-CODE-INSERT-HEADER で指定された文字列をヘッダ名とするようなヘッダとして挿入する。

この際, 変数NH-CODE-ADD-VERSION-HEADER が 非nil に束縛されていると, NetHack Code のヴァージョン情報も同時に挿入されます。

 -- Variable: nh-code-add-version-header
     ヘッダ挿入の際に, NetHack Codeのヴァージョン情報も挿入するか否かを示す変数です。この変数が 非nil の場合, ヴァージョン情報も挿入されます。デフォルト値は, nil です。

その他, nh-code-insert時に参照される変数を以下に挙げます。

 -- Variable: nh-code-field-insert-before
     ヘッダ挿入の際に, どのヘッダの直前に X-NetHack-Code ヘッダを挿入するかを示す regexp です。デフォルト値は, "X-Mailer:\\|User-Agent:" です。

 -- Variable: nh-code-header-for-insert
     ヘッダ挿入の際に使われる, タグです。デフォルト値は, "X-NetHack-Code:" です。

 -- Variable: nh-code-insert-hook
     ヘッダ挿入の際に呼ばれるフックです。

以下は, 挿入後の画面例です。

     From: TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>
     To: roguelike ML <roguelike@lab3.kuis.kyoto-u.ac.jp>
     Subject: NetHack Code Utility
     Mail-Reply-To: tsumura@kuis.kyoto-u.ac.jp
     X-NetHack-Code: NH 3.2.2U D
             [++ )++ P S D+ p $ t- s W+ E--- PS- PP+ G C- I++ @W(*) N--
             !b !B !Y X++ So+ Sp++ !sb !wb
     X-NetHack-Code-Version: NetHack Code utility 0.10 - "spotted jelly"
     User-Agent: Wanderlust/0.9.6 (Dirty Diana) WEMI/1.13.3 (Yaizu)
      FLIM/1.12.5 (Hirahata) MULE XEmacs/21.2 (beta13) (Demeter)
      (sparc-sun-solaris2.7)
     Organization: Grad. School of Informatics, Kyoto Univ., JAPAN
     X-Public-Key: http://www.lab3.kuis.kyoto-u.ac.jp/%7Etsumura/pgp/
     --text follows this line--
     ：
     ：

NetHack Code のデコードと閲覧
=====================

NetHack Code utility では, NetHack Code 1.1 を その意味が分かるようにデコードして閲覧することができます。メールヘッダとして添付されて送られてきたNetHack Code も, Emacsen上 MUA のサマリモードなどから簡単に表示することができます。

 -- Command: nh-code-view &optional buffer
     指定されたバッファ (デフォルトでは current buffer) から, NH-CODE-HEADER-FOR-VIEW で指定された文字列をヘッダ名として持つヘッダをNetHack Code として切り出し, デコード結果を表示する。

 -- Command: nh-code-view-region &optional begin end
     指定されたリージョンをNetHack Code であるとみなし, デコード結果を表示する。

閲覧中には, 以下のキーが使用できます。

SPACE
     表示中のバッファを, page-scroll up する。

BackSpace
     表示中のバッファを, page-scroll down する。

q
     閲覧モードを抜ける。

また, この際 以下の変数の値が参照されます。

 -- Variable: nh-code-header-for-view
     nh-code-view の際に, 検索対象となるタグを示す regexp。デフォルト値は, "X-NetHack-Code:"。

 -- Variable: nh-code-title-format
     NetHack Codeの閲覧/編集の際に, 各アイテムのタイトルを表示するためのフォーマットを指定するための変数。必ず唯一の "%s" を含んでいる必要がある。デフォルト値は "\n[[[ %s ]]]\n"。

また, 変数NH-CODE-MUA-FUNCTION-ALIST で指定することにより, nh-code-view を MUA のサマリモードで起動した場合, そのメッセージバッファからNetHack Code を切り出すようにさせることもできます。

 -- Variable: nh-code-mua-function-alist
     MUA のサマリモードの名前と, そのメッセージバッファから X-NetHack-Code ヘッダの内容を取得するための関数の名前の cons cell のリストです。

     デフォルトでは, Gnus, Wanderlust, cmail, MH-E, Mew に対応しています。ある MUA のサマリモード名が "foo-summary-mode", そのメッセージバッファから X-NetHack-Code を取得するための関数名を "foo-get-header" とすると,

          (nconc nh-code-mua-function-alist
                 (foo-summary-mode . foo-get-header))

     することで, その MUA に対応させることができます。

NetHack Code の編集
================

予めnh-code-generate で作成し, NH-CODE-FILENAME に格納してあるNetHack Code の一部を, あとから変更することができます。

 -- Command: nh-code-edit
     NH-CODE-FILENAME に格納されているNetHack Code を変更 し, 保存しなおすための編集モードに移行する。

この編集モードで使用できるキーは, 基本的に閲覧モードのそれに同じですが, 加えて以下のキーが使用できます。

e
     NetHack Code のある項目の値を編集する。(nh-code-edit-change-item)

\C-c\C-c
     編集結果を保存し, 編集モードを抜ける。

q
     編集モードを抜ける。

e で, 変更モードに入ると, どの項目を変更するかの選択肢が出ます。数字を入力して変更する項目を選択すると, その項目に関する質問が, nh-code-generate の際と同様に表示されますので, 数字で選択してください。

 -- Command: nh-code-edit-change-item
     NetHack Code の中の項目をひとつ選択し, その値を変更する。

カスタマイズ
******

今までの各章で挙げたもののほかに用意されている, カスタマイズのためのユーザ変数を以下に示します。

 -- Variable: nh-code-load-hook
     nh-code.el が load された後に呼ばれるフックです。

 -- Variable: nh-code-message-lang
     全てのメッセージをオリジナルの英語で表示するか, (不完全な)日本語訳で表示するかを示す変数です。この変数の値が 'ja の場合, 日本語で表示します。 nh-code-switch-lang-and-view が実行されると, この変数もトグルされます。

また, custom パッケージのインストールされている環境では,

     M-x customize-group

で nh-code を指定することによって, ユーザ変数のカスタマイズが行えます。custom パッケージは以下から入手可能です。

http://www.dina.kvl.dk/%7Eabraham/custom/

Emacs19.34/Mule2.3 の環境で custom-1.9962 を利用するためには, 以下のパッチが必要です。 http://www.jpl.org/elips/semi-gnus-mule23@1934/custom-1.9962.patch