プリン祭り

問題点

あなたの農場経営は軌道に乗った。フロアには満杯のプリンと若干の自然発生モンスター (ノイズ) がいる。あなたはプリンを狩っては #offer、一体感を感じては #pray に勤しんでいる。

しかし、ここで疑問がわかないだろうか?

鎌(武器)を持ってプリンに体当たりすることで収穫する。その間、プリンの攻撃があったりしてメッセージに --more-- が出たり、プリンが死んでたまたま隣が空いたりして.を連打して隣にプリンが来るまで待ったり。単純作業だが状況に応じて判断を下し操作せねばならない。

これは面倒だ……

自動化

ではこの辺自動化しようじゃないか。幸いなことに NetHack は全て文字を送信することで操作ができる。ターミナルに自動化した文字列を流し込めば良いのだ*1。--more-- なんかは ESC (^[) を送ってやれば全部クリアできる。そこでおもむろにエディタを起動し、次のような文字列を作ってターミナルに流し込んでみる*2

方角^[方角^[

うまく行ってるようだ。だがこれだと、プリンがいるべき位置にプリンがいなくなったらどうなる? 下のような状況になったときだ。

````
`@%P
````

ここで先の文字列を流し込むと、ちょっと嫌な位置で狩りをはじめる。具体的には祭壇の上に立ってさらに右側のプリンを狩りはじめるのだ。そんなところのプリンを狩っても意味がない。

ならば、流し込む文字列をこうしたらどうだろう

方角^[.^[.^[方角^[.^[.^[

うむ。こうすれば何もせずターンを進める操作が入る(.)からその間にプリンが近づいてきてくれる。しめしめ。

喜び勇んであなたはエディタで『方角^[.^[.^[』の文字列をコピーし C-y*3 を連打して長大な自動化文字列を作成した。

しかし事は

さあターミナルに流し込むぞ。あれれ、なんかずれる。右の方に行っちゃってプリンに囲まれ、さんざんな目に遭っちゃった。

````PPPP
`PPPPP@P
````PPPP

なんかしらんが事は単純ではないのだろう。それにターンを無駄に消費しすぎる。囲まれた状態で空腹になったら大変だ。プリンは3回くらい打たれても大丈夫だろう。それに休みのターンを3回くらい入れればさすがに近寄ってきてくれるに違いない。じゃあ文字列はこうだ。

方角^[方角^[方角^[.^[.^[.^[

実験してみる。うまくいってるようだ。もう大丈夫だろう。あなたはまた長大な文字列を作り、流し込んでみた。しかし、みるみるうちに@が右にずれていく。あ、HPがどんどん減っていく。まてまて。まってくれ。まてっての!!

…死んだ*4

慢心して長大すぎる文字列を流し込んでしまったのでした。

もう一つの問題点

とにかく右にずれていくのが問題です。これさえなければ空腹で倒れようがそこはEの字の上ですから攻撃を受けることはありません。

攻撃をしたい、だが右に体当たりする方法だとヤバい……どうにかならんのか?

NetHack での攻撃はモンスターのいる方向に体当たりするというものです。モンスターがいれば攻撃、いなければ移動です。これは直感的ですし操作も楽ですが、自動化には問題があります。いなければずれる。ずれたら困るんですよね…。

体当たりせずに攻撃する方法としては魔法がありますが、連続して唱えたらすぐに底をつきますし遠くのプリンまで倒しちゃうしだいいち腹が減ってしょうがない。

体当たりしない攻撃方法

で、体当たりしないで攻撃する方法はないか考えました。その方法があったんです。それはつるはしです。穴を掘る要領で[a]pplyし、方向指定をすればモンスターを攻撃することになります。これならば隣に誰もいなくても単にスカになるだけで移動はしません。

早速エディタで流し込む文字列を作ってやってみました。

ap ^[方角ap方角^[

pはインベントリでのつるはしのニーモニックです。に初回は「装備した」みたいなメッセージが出るのでスペースで --more-- を消しています。流し込んでみる。うん大丈夫です。

前回は死んだので(涙)、今度は慎重にすこしずつ『ap方角^[』を増やしつつ流し込んでみます。100個くらい流し込んでもずれませんでした。成功です。

これで効率よく収穫できます。

追記

えー、2chのNethackスレと掲示板?で指摘を受けました。

[F]ightコマンドを使えば普通の武器でもずれずに攻撃できます。確かめてみてできることを確認しました。なわけで勿体ぶって「それはつるはしだ」なんて言ってしまった自分を恥じるばかりです。でもまあ、ヒントになった人は、いる、よね (同意を求めてもなあ) ?

というわけで、文字列は

F方角^[F方角^[F方角^[F方角^[F方角^[F方角^[F方角^[F方角^[F方角^[F方角^[

でいけます。

二つのコース

収穫には二つのコースがあります。

  • #offer して #pray
  • プリンが持ってるアイテムをひたすら回収

どちらを目的とするかによって流し込む文字列の長さを変えましょう。

どちらを目的とするにしても性能のよい(分裂させる)武器をつかいましょう。どうせ次から次へとHPが満タンのプリンが押し寄せてきます。フロアからあふれるくらいプリンがいますから、せいぜい一度分裂すればそれ以上分裂する余地はなくなります。倒すまでのターンが少ない方が効率は良いです。

#offer して #pray

#offer するには死体が新鮮でなければなりません。殺してから50ターン以内に #offer しないと神様は受けとってくれません。#pray には数ターンかかることを考えると、プリンの死体を溜める数は多くても12体程度でなければなりません。

プリンを倒すのに平均3ターンかかるとして、12体倒すのに36ターン、その間に2回 #pray できるとして4ターンを見込み、あとは #offer に12ターンの合計52ターン……なんか足りないな。変だな。これを目安にやってるのに。

…いやまあ、#offer できるターンを見込んで数を調節してください。

プリンが持ってるアイテムを回収

#pray なんかしなくていいという人は長大な文字列を作って流し込んでください。いろいろなアイテムをプリンは持ってきてくれますよ。私の場合、アーティファクトを四つも持ってきてくれました。グリムトゥース、デーモンベーン、ジャイアントスレイヤー、サンソード。

……どれもこれもいらねえ…。願いの障害になるし orz

空腹にだけは気をつけてください。黒プリンたんは指輪もごっそりもってきてくれます。できるだけ早く消化不良の指輪をはめましょう。

これをやってるとプリンの死体の山ができます。1000体以上積み上がったこともありました。#offer されるでもなく、ただ単に朽ち果てるのを待つだけ*5の山積みの死体。まるでメリケンの鯨漁を彷彿とさせる光景です。

#pray したくなったら、少しの間ほかのフロアを散策してくるのも良いでしょう。散策している間に #offer できない古い死体は消え去ってくれます。分裂しない武器 (エルフの短剣など) を使ってプリンの数を減らします。あ、言い忘れてましたが上下階段には Eの字を焼いてその上に何かアイテムを置いておきましたよね。あと瞬間移動できる手段と、瞬間移動制御できる手段は確保してますよね (これらは、プリン祭りを開催するにあたっては基本中の基本です)。とにかくプリンを減らせば階段からモンスターはよけてくれます。そこに瞬間移動して散策を楽しみましょう。

終わりに

nethack.alt.org で art という人がプリン祭をやっていて、自動化してるのを見ていろいろ策を練ってみたのでした。ターミナルから文字を流し込めるというのに気づいて工夫をしたんですが、一度死んだりもしました。とても調子がよかったのに……。そのときの骨を回収しようと躍起になりましたが、たまたま観戦した別の人に回収されてました。そ、それはおれんだ!!! 返せ馬鹿野郎。おれの幽霊をぶっ殺したな。呪ってやる!!

とりあえずかなり効率よくプリンを収穫できるようにはなりました。が、この art 師って、どうやら殺すところだけじゃなくて #offer や #pray まで自動化してるようなんですね。ここまでやるとすると向こう (nethack.alt.org) が返してくるメッセージやら@の位置やらを判別して送る文字列を変えないと無理じゃないかと思います。どうやってるんだろう……。とにかくこの方、AC は -128 だし HP は 10000 を超えてるし人にできる限界を超えてます。英語が読み書きできたら直接聞くなりしてみるところなんですけどね。

art 師はずれずに攻撃する手段として蹴り (^d) を使ってるようです*6。これだと誰もいない空間では筋肉を痛めますよね。それに特定の職業を除いては倒すまでのターンが多くなりますし、分裂もしないのでせっかく養殖したプリンが減っちゃいます。この点だけはつるはしを使う事に思い至った私の方が優れてます (虚しい自画自賛)。

それでは最後に、 ビバ黒プリン*7*8