クエストネメシス・大悪魔・魔法使いの挙動メモ

STRAT_WAITMASKフラグ

M3_WAITFORUフラグまたはM3_CLOSEフラグを持っている怪物は、monst構造体のmstrategyメンバにそれぞれSTRAT_WAITFORU, STRAT_CLOSEフラグを立てて生成される。
STRAT_WAITFORUとSTRAT_CLOSEをまとめてSTRAT_WAITMASKとして扱われる。

STRAT_WAITMASKが立っていると、怪物は動かない。
攻撃を受ける、または #chat コマンドで会話をすると、STRAT_WAITMASKはクリアされる。

 

STRAT_CLOSE

エストリーダーと囚人はM3_CLOSEフラグを持っている。
囚人との会話(「自由だ!」)が発生すると、STRAT_CLOSEフラグはクリアされる。
エストの話を受動的に聞く分にはSTRAT_CLOSEフラグはクリアされない。このためクエストリーダーは通常は動くことがないが、#chatすると動き出す。

 

STRAT_WAITFORU

エストネメシス、メデューサ、専用階を持つ大悪魔、ヴラド、魔法使いがM3_WAITFORUフラグを持っている。
攻撃を受ける、またはプレイヤーを視認すると、STRAT_WAITFORUフラグはクリアされる。

 

M3_WANTSxxxx

M3_WANTSAMUL, M3_WANTSBELL, M3_WANTSBOOK, M3_WANTSCAND, M3_WANTSATRIフラグはまとめてM3_COVETOUSとして扱われる。これらのフラグを持っている怪物は is_covetous() にTRUEを返す。
大悪魔(AMUL)、クエストネメシス(ARTI)、ヴラド(CAND)、マスターリッチ(BOOK)、アーチリッチ(BOOK)、魔法使い(ALL)がM3_WANTSxxxxフラグを持っている。
is_covetous()がTRUEな怪物は、行動前に tactics() を呼ぶ。

 

tactics()の挙動

M3_WANTSxxxxに対応したアイテムを探す。アイテムが見つかった場合、

  • プレイヤーが対象アイテムを所持していたら、プレイヤーの直近にテレポートする
  • アイテムが床に落ちていたら、その位置へテレポートする。ただしその位置に別の怪物がいるなら、1/5の確率でプレイヤーの直近にテレポートし、4/5の確率で何もしない
  • アイテムを別の怪物が所持していたら、その怪物の直近にテレポートする

対象のアイテムが見つからない、またはすでに所持している場合は、

  • HPが最大値の2/3未満の場合、上り階段にテレポートする。さらに、プレイヤーが近く(距離8以内)に存在しない場合、HPを1d8回復する。
    プレイヤーが近くに存在する場合、下記の処理へ

以上に当てはまらない場合、1/5の確率(逃げているときは1/33の確率)でプレイヤーの直近にテレポートする。

※実際にテレポート能力(M1_TPORT)のフラグを持っているのはイェンダーの魔法使いのみ

Yet Another Win32 Window Port for JNetHack 3.4.3-10 更新

以前作った、ビットマップ画像をマップフォントとして使うパッチをアップしました。

VGAフォント(10×22)を2倍拡大したもので試してみたスクリーンショット。でかすぎた。

FHS Patch 0.8.24 アセンション・ラン→大コケ

紆余曲折ありながらも、あとはイェンダーの魔法使いに突撃して昇天まで一直線! 穴掘りの杖で壁に穴を開け、速攻死の杖をブチ込んで死者の書をゲット。イェンダーの塔を出て、瞬間移動の巻物で振動する場所へ直行。蝋燭を灯し、鐘を鳴らし、本を読む! "impossible Unknown spellbook level 0, book 800 Quitしたほうがよさそうだ" Noooooo! 仕方ないデバッグしてパッチ。はいはい蝋燭鐘本。今度は無事儀式が完了し、聖域に入れました。
溶岩タイプの聖域で、途中跳ね橋を下ろす手段が無くて願いを消費したりしつつ、寺院周囲にたどり着きました。用意した扉探索の杖を取り出し、外壁の各辺で隠し扉を探します。あれ無いよ? 仕方ないので聴診器で壁を全部チェック。無いよ? 壁に穴掘りの杖を振ってみる。まあダメですよねNON_DIGGABLEなんだから…。とりあえずセーブしてウィザードモードで聖域の寺院にテレポートし、扉探索の杖を振る。ははぁこれは本格的に密室だな…? 詰みだな…? ちなみに法王が敵対化しないのを疑問に思って倒してみると、イェンダーの魔除けを落としませんでした…。なんという多重トラップ!

もうなんか適当なコマンド入れたら魔除け貰えるようにしようかな…。

【追記】聖域の扉なし&魔除けなしバグは Is_sanctum() が聖域でも FALSE を返すのが原因。聖域のマップ名を "sanctum" から "sanct" に変更したのに、dungeon.c の level_map[] では旧名の "sanctum" のままになっているため。

FHS Patch 0.8.24 宝石を酸に浸けてポーション生成のスポイラー

宝石を酸の薬に浸けると、色に応じたポーションに変化します。変化先が2種類あるものもあり、その場合は等確率でどちらかになります。貴重なポーションが入手できそうなら試してみる価値があるかもしれません。

宝石(100%) 宝石(50%)
アイリス   ジャスパー
アニス   ガーネット
アヤメ   アメジスト
エルダフラワー   橙水晶
オオイヌノフグリ   瑠璃
キンモクセイ めのう  
黒百合 オパール  
  黒水晶, 黒曜石
こけもも   ゾイサイト
フルオライト(他)
桜の花   ルビー
山椒   黒水晶, 黒曜石
シナモン   トパーズ
ジャスミン   黄水晶
ステビア オパール
フルオライト(白)
 
スミレ   アメジスト
タイム 水晶  
たんぽぽ 金緑石  
トウゴマ   橙水晶
ハイビスカス   ガーネット
バジル 黒玉  
パルマロッサ アクアマリン(青)
トルコ石(青)
 
ブルーベリー   サファイア
フルオライト(青)
ペパーミント アクアマリン(緑)
トルコ石(緑)
 
マタタビ   トパーズ
マリーゴールド   黄水晶
ミント エメラルド
フルオライト(緑)
 
矢車菊   瑠璃
ヤマモモ   ルビー
ラズベリー   ゾイサイト
フルオライト(他)
ラベンダー   ジャスパー
ローズマリー   サファイア
フルオライト(青)

FHS Patch 草地#loot abuse

FHSパッチでは草地の上で #loot すると植物が採取できます。取れるのはたいてい雑草ですが、たまにハーブも取れます。ハーブを酒か葡萄酒に浸けると該当するポーションに変化するほか、ハーブを鑑定することで該当するポーションも鑑定されます。と考えると当然ハーブ入手のために草地の多いマップでは画像のような#loot祭りになってしまうわけですが、これはいいのだろうか…。