作成者別アーカイブ: deskull

monster_type及びmonster_race構造体によるモンスター状態処理と拡張の方向性について

https://adventar.org/calendars/5176
Roguelike Advent Calendar 2020(https://adventar.org/calendars/5176)の6日目が空いていたので、ついでくらいで記事上げさせてもらいます。

変愚蛮怒の3.0.0Alphaリリースに向けて色々進めてはいるのですが、それら手近な作業の他にも、将来的な所を見据えた話を一つしようと、それが今回のテーマです。

ソースコードにある程度触れた人には大抵周知の内容でありますが、まず基本から。今回取り上げるmonster_type及びmonster_raceはCソースコードの構造体として定義されたもので、

  • monster_type …モンスター1個体毎の状態を保存する構造体
  • monster_race …モンスターの1種を定義する構造体

という関係を取っています。少なくとも筆者個人が積極的に変愚のソースコードをいじり出す前からこの大まかな構成は変わっておらず、一方でこれからハードコード上で何らかの拡張を行っていくならば、こいつらを大掛かりにいじっていくことが必要不可欠になるでしょう。

2020/12/06現在のmonster_type構造体の構成は /src/system/monster-type-definition.h は以下の通りになっています。

typedef struct monster_type {
	MONRACE_IDX r_idx;		/*!< モンスターの実種族ID (これが0の時は死亡扱いになる) / Monster race index 0 = dead. */
	MONRACE_IDX ap_r_idx;	/*!< モンスターの外見種族ID(あやしい影、たぬき、ジュラル星人誤認などにより変化する)Monster race appearance index */
	floor_type *current_floor_ptr; /*!< 所在フロアID(現状はfloor_type構造体によるオブジェクトは1つしかないためソースコード設計上の意義以外はない)*/

	/* Sub-alignment flags for neutral monsters */
	#define SUB_ALIGN_NEUTRAL 0x0000 /*!< モンスターのサブアライメント:中立 */
	#define SUB_ALIGN_EVIL    0x0001 /*!< モンスターのサブアライメント:善 */
	#define SUB_ALIGN_GOOD    0x0002 /*!< モンスターのサブアライメント:悪 */
	BIT_FLAGS8 sub_align;	/*!< 中立属性のモンスターが召喚主のアライメントに従い一時的に立っている善悪陣営 / Sub-alignment for a neutral monster */

	POSITION fy;		/*!< 所在グリッドY座標 / Y location on map */
	POSITION fx;		/*!< 所在グリッドX座標 / X location on map */
	HIT_POINT hp;		/*!< 現在のHP / Current Hit points */
	HIT_POINT maxhp;		/*!< 現在の最大HP(衰弱効果などにより低下したものの反映) / Max Hit points */
	HIT_POINT max_maxhp;		/*!< 生成時の初期最大HP / Max Max Hit points */
	HIT_POINT dealt_damage;		/*!< これまでに蓄積して与えてきたダメージ / Sum of damages dealt by player */
	TIME_EFFECT mtimed[MAX_MTIMED];	/*!< 与えられた時限効果の残りターン / Timed status counter */
	SPEED mspeed;	        /*!< モンスターの個体加速値 / Monster "speed" */
	ACTION_ENERGY energy_need;	/*!< モンスター次ターンまでに必要な行動エネルギー / Monster "energy" */
	POSITION cdis;		/*!< 現在のプレイヤーから距離(逐一計算を避けるためのテンポラリ変数) Current dis from player */
	BIT_FLAGS8 mflag;	/*!< モンスター個体に与えられた特殊フラグ1 / Extra monster flags */
	BIT_FLAGS8 mflag2;	/*!< モンスター個体に与えられた特殊フラグ2 /   Extra monster flags */
	bool ml;		/*!< モンスターがプレイヤーにとって視認できるか(処理のためのテンポラリ変数) Monster is "visible" */
	OBJECT_IDX hold_o_idx;	/*!< モンスターが盗み処理により保持しているアイテム(object_type構造体自身がリスト構造を持つ) Object being held (if any) */
	POSITION target_y;		/*!< モンスターの攻撃目標対象Y座標 / Can attack !los player */
	POSITION target_x;		/*!< モンスターの攻撃目標対象X座標 /  Can attack !los player */
	STR_OFFSET nickname;	/*!< ペットに与えられた名前の保存先文字列オフセット Monster's Nickname */
    EXP exp; /*!< モンスターの現在所持経験値 */

	/* TODO: クローン、ペット、有効化は意義が異なるので別変数に切り離すこと。save/loadのバージョン更新が面倒そうだけど */
	BIT_FLAGS smart; /*!< モンスターのプレイヤーに対する学習状態 / Field for "smart_learn" - Some bit-flags for the "smart" field */
	MONSTER_IDX parent_m_idx; /*!< 召喚主のモンスターID */
} monster_type;

これに関連するmflag,及びmflag2に利用するビットフラグが /src/monster/monster-flag-types.h でさらに以下のように定義されています。

typedef enum monster_flags_type {
    MFLAG_VIEW = 0x01, /* Monster is in line of sight */
    MFLAG_LOS = 0x02, /* Monster is marked for project_all_los(caster_ptr, ) */
    MFLAG_XXX2 = 0x04, /* (unused) */
    MFLAG_ETF = 0x08, /* Monster is entering the field. */
    MFLAG_BORN = 0x10, /* Monster is still being born */
    MFLAG_NICE = 0x20, /* Monster is still being nice */
} monster_flags_type;

typedef enum monster_flags2_type {
    MFLAG2_KAGE = 0x01, /* Monster is kage */
    MFLAG2_NOPET = 0x02, /* Cannot make monster pet */
    MFLAG2_NOGENO = 0x04, /* Cannot genocide */
    MFLAG2_CHAMELEON = 0x08, /* Monster is chameleon */
    MFLAG2_NOFLOW = 0x10, /* Monster is in no_flow_by_smell mode */
    MFLAG2_SHOW = 0x20, /* Monster is recently memorized */
    MFLAG2_MARK = 0x40, /* Monster is currently memorized */
} monster_flags2_type;

さらに、今回内容自体は余り主眼にならないのですが /src/system/monster-race-definition.h 内の monster_race 構造体の内容が以下の通りになっています。

typedef struct monster_race {
    STR_OFFSET name; /*!< 名前データのオフセット(日本語) /  Name offset(Japanese) */
#ifdef JP
    STR_OFFSET E_name; /*!< 名前データのオフセット(英語) /  Name offset(English) */
#endif
    STR_OFFSET text; /*!< 思い出テキストのオフセット / Lore text offset */
    DICE_NUMBER hdice; /*!< HPのダイス数 / Creatures hit dice count */
    DICE_SID hside; /*!< HPのダイス面数 / Creatures hit dice sides */
    ARMOUR_CLASS ac; /*!< アーマークラス / Armour Class */
    SLEEP_DEGREE sleep; /*!< 睡眠値 / Inactive counter (base) */
    POSITION aaf; /*!< 感知範囲(1-100スクエア) / Area affect radius (1-100) */
    SPEED speed; /*!< 加速(110で+0) / Speed (normally 110) */
    EXP mexp; /*!< 殺害時基本経験値 / Exp value for kill */
    BIT_FLAGS16 extra; /*!< 未使用 /  Unused (for now) */
    RARITY freq_spell; /*!< 魔法&特殊能力仕様頻度(1/n) /  Spell frequency */
    BIT_FLAGS flags1; /* Flags 1 (general) */
    BIT_FLAGS flags2; /* Flags 2 (abilities) */
    BIT_FLAGS flags3; /* Flags 3 (race/resist) */
    BIT_FLAGS flags4; /* Flags 4 (inate/breath) */
    BIT_FLAGS flags7; /* Flags 7 (movement related abilities) */
    BIT_FLAGS flags8; /* Flags 8 (wilderness info) */
    BIT_FLAGS flags9; /* Flags 9 (drops info) */
    BIT_FLAGS flagsr; /* Flags R (resistances info) */
    BIT_FLAGS a_ability_flags1; /* Activate Ability Flags 5 (normal spells) */
    BIT_FLAGS a_ability_flags2; /* Activate Ability Flags 6 (special spells) */
    BIT_FLAGS a_ability_flags3; /* Activate Ability Flags 7 (implementing) */
    BIT_FLAGS a_ability_flags4; /* Activate Ability Flags 8 (implementing) */
    monster_blow blow[4]; /* Up to four blows per round */
    MONRACE_IDX reinforce_id[6];
    DICE_NUMBER reinforce_dd[6];
    DICE_SID reinforce_ds[6];
    ARTIFACT_IDX artifact_id[4]; /* 特定アーティファクトドロップID */
    RARITY artifact_rarity[4]; /* 特定アーティファクトレア度 */
    PERCENTAGE artifact_percent[4]; /* 特定アーティファクトドロップ率 */
    PERCENTAGE arena_ratio; /* モンスター闘技場の掛け金倍率修正値(%基準 / 0=100%) / The adjustment ratio for gambling monster */
    MONRACE_IDX next_r_idx;
    EXP next_exp;
    DEPTH level; /* Level of creature */
    RARITY rarity; /* Rarity of creature */
    TERM_COLOR d_attr; /* Default monster attribute */
    SYMBOL_CODE d_char; /* Default monster character */
    TERM_COLOR x_attr; /* Desired monster attribute */
    SYMBOL_CODE x_char; /* Desired monster character */
    MONSTER_NUMBER max_num; /* Maximum population allowed per level */
    MONSTER_NUMBER cur_num; /* Monster population on current level */
    FLOOR_IDX floor_id; /* Location of unique monster */
    MONSTER_NUMBER r_sights; /* Count sightings of this monster */
    MONSTER_NUMBER r_deaths; /* Count deaths from this monster */
    MONSTER_NUMBER r_pkills; /* Count visible monsters killed in this life */
    MONSTER_NUMBER r_akills; /* Count all monsters killed in this life */
    MONSTER_NUMBER r_tkills; /* Count monsters killed in all lives */
    byte r_wake; /* Number of times woken up (?) */
    byte r_ignore; /* Number of times ignored (?) */
#define MR1_EVOLUTION 0x01
    byte r_xtra1; /* Something */
    byte r_xtra2; /* Something (unused) */
    ITEM_NUMBER r_drop_gold; /*!< これまでに撃破時に落とした財宝の数 / Max number of gold dropped at once */
    ITEM_NUMBER r_drop_item; /*!< これまでに撃破時に落としたアイテムの数 / Max number of item dropped at once */
    byte r_cast_spell; /* Max number of other spells seen */
    byte r_blows[4]; /* Number of times each blow type was seen */
    u32b r_flags1; /* Observed racial flags */
    u32b r_flags2; /* Observed racial flags */
    u32b r_flags3; /* Observed racial flags */
    u32b r_flags4; /* Observed racial flags */
    u32b r_flags5; /* Observed racial flags */
    u32b r_flags6; /* Observed racial flags */
    u32b r_flagsr; /* Observed racial resistance flags */
} monster_race;

monrace_typeを見るに、やはり初期のヴァニラ2.7系列より派生以来から様々な付け加えがあったであろうことが伺えます。善悪のアライメントに応じて、モンスター同士が争う場合があること。それに召喚の要素が発生した際に、誰がどちらの陣営について戦うべきかが判定されていること。モンスターがSMARTならばプレイヤーに効かない攻撃については、学習して選択肢から外すためのフラグ。ペット化や抹殺などのモンスターにとって致命的な要素について、抵抗に成功した場合は免疫を与えるフラグ等々。

ただ、ある程度やり込んでいるプレイヤーならば知っての通り、そのようなシステムの付け加えのために必要だった要素を除くと、殊の外モンスターの個体要素は限られています。生成処理の結果得られるモンスターの個性は、

  • HP(FORCE_MAXだったらこれも固定)
  • スピード(特に騎兵や魔獣使いの変幻の魔公厳選で御馴染みの差異)

全くもってこの2点のみです。

これ以外の値についてはmonster_type構造体内で完結できず、都度monster_race構造体から

    monster_race *r_ptr = &r_info[m_ptr->r_idx];

と、個別の案件ごとに参照ポインタを用意して引っ張ってきています。この個別処理は単純にgrepかけただけでも100は余裕です。今はともかく、これが将来のために実によろしくない。モンスターの設定にmonrace_type以外の追加要素を入れようとした時に、この現状の実装が圧倒的に壁になります。

例えば、バリアントの大本であるAngbandのバージョン4系列には変愚のlib/editに該当するデータ系列にmonster_base.txtという定義ファイルがあり、こちらで種族共通の特徴を予め定義して「アンデッドなのに設定を漏らして特有の耐性を持っていない」といった事態を避けられる仕様になったようです。この種のテンプレートは発展させれば、例えば「巨大ショゴス」とか、「サイバー〈コーン〉の渇血悪魔」、とかD&D等TRPGで見かけるような強化テンプレートを充てるといった応用が可能になるでしょう。さらにあるいは変愚勝手版のようにランダムユニークを実装したいとか。実に思う所は色々あるのですが、それが今のままでは非常にめんどい。

例えばモンスターが火炎耐性を持っているかの判定に、monster_race以外のそれら新規の要素を都度判定する処理を、既存の全モンスターのフラグ要素個別に余さず実装しなければなりません。それらを関数にでもまとめた後、今度は上記のように各々勝手にmonster_raceで参照している所部分それぞれを置換しなければならんわけです実は似たようなことをプレイヤーの耐性関係の定義で整理し直しているのですが、3.0.0Alpha実現までにどこまでやるかの判断も含めて、実に骨を折っています。これと同程度くらいの整理をつけないと実現できそうにないんですよね。

あるいは、モンスターを生成する際にこれらの値をmonster_type側に移植して、同構造体のみで完結する実装にする、ということも考えています。元々このような仕様になっていたのも、*bandそのものが大昔の限られたメモリ環境でそれらを節約するために過ぎず、今となってはmonster_typeが数倍程度に膨れ上がろうがどうということはないはずです。

ただこれをやると今度は「モンスターボール」という仕様の現行のために、大きな支障をきたします。

モンスターボールに保管されたモンスターの個体情報はobject_type構造体内の汎用変数xtra1~xtra5内に押し込める以上には追加できない状態になってます。

これを解決するには例えば今度は、モンスターボールの仕様そのものを大掛かりに直して、例えばボールに納められたペットの情報を新たに作ったmonster_type配列に保管する、という形にする必要もあるでしょう。

こう長々と話をしましたが、結局のところこれらの改造はAngbandという先人も、変愚蛮怒勝手版という子孫も、とうにやってしまっていることな訳です。特に変愚蛮怒勝手版はモンスターボール改め「妖魔本」という形で前述の問題も、作者であるみやまさ氏一人でしっかり解決済ませてしまっているはずです。それを思うとブログでこう書いていることが愚痴にしか思えず、書いている暇があればそれこそさっさと改変してしまえという心持になり赤面の限りです。

両者のソースコードでも覗いて参考にしながら、追々やっていきます。どうぞこれからもよろしく。

明日七日目は、Infy 氏の「今年遊んだローグライクの紹介」となります。

変愚蛮怒2.2.2チャージマンマーフォークテストプレイ1

いい加減日誌をWordpressの方で扱っていく方向を始めるためのテストも兼ねて。ガチャピンに殺された後の再度プレイ。

  • 思い出が人間そのまんまなのはまだ作っていない頃のデータの名残。
  • HPが思ったより伸び悩む。単にこいつのライフレート低いだけとは思うが。
  • 元素耐性をまとめて手に入れる装備がいまだに手に入っていない。
  • エゴボウもレベル30まで手に入らなかった。
  • 体力回復の薬ばっか10数服ほどこれまで手に入っている。いくつか冷気耐性得損ねている間に割れたり、強敵相手に押し切る時に消費した。
  • 浮遊の指輪が浮遊の脚装備が手に入るまで手放せない事態に。種族特性としてのデメリットとしては悪くないかもしれない。
  • 水地形で自前加速+5とか得られるのはやはりおいしい。
  • ジュラル星人誤認作用はまずいと思った時はレンジャーのレイシャルで何とかなったりする。
  • チャージマンだってエルドリッチホラーに陥れば錯乱するんだよ。

ここまでで大体こんな感じ。

  [変愚蛮怒 2.2.1 キャラクタ情報]

                          名前  : チャージマンネク

 性別     : 女性             年齢             40才   腕力 :  18/40
 種族     : マーフォーク     身長            157cm   知能 : 18/106
 職業     : レンジャー       体重             46kg   賢さ :     16
 魔法     : 自然, カオス     社会的地位       16     器用 :  18/72
                             属性             中悪   耐久 :  18/66
                                                     魅力 :     15

 打撃修正(両手)  (+68,+14)   HP         280/ 280   打撃命中  :142-超越
                             MP         140/ 140   射撃命中  :220-伝説的[2]
 打撃回数              3+0                           魔法防御  : 62-卓越
 平均ダメージ         61+0   レベル             30   隠密行動  :  8-卓越
                             経験値         159196
 射撃攻撃修正    (+74,+15)   最大経験       159196   知覚      : 58-超越
 射撃武器倍率        x3.09   次レベル       170000   探索      : 63-超越
 射撃回数             2.20   所持金          48546   解除      : 61-卓越
                                                     魔法道具  :100-英雄的
 AC             [38,+62]   日付     10日目  1:31   掘削      : 36-超越
 加速                 (+0)   プレイ時間   05:56:24   赤外線視力:20 feet


                         (キャラクターの生い立ち)
          あなたは農奴の幾人かの子供のうちの一人です。あなたは一家の
          誇りです。あなたはグリーンの瞳となめらかなとび色の髪を持
          ち、漆黒の肌をしています。


          …あなたは現在、 アングウィル にいる。


                                                               能力修正
 性別  : 女性          能力    基本 種 職 性 装   合計   現在  abcdefghijkl@
 種族  : マーフォーク  腕力 :    18 -1  2  2  1  18/40         ..........1..
 職業  : レンジャー    知能 : 18/76  0  2 -2  3 18/106         .....1...2...
 レベル: 30            賢さ :    14  2  0 -2  2     16         .........2...
 HP  : 280/280       器用 : 18/52  1  1  0  0  18/72         .............
 MP  : 140/140       耐久 : 18/36 -1  1  1  2  18/66         .......2.....
                       魅力 :    15  1  1 -2  0     15         .............
         \ }=="![(]]]             \ }=="![(]]]                 \ }=="![(]]]
         abcdefghijkl@            abcdefghijkl@                abcdefghijkl@
 耐酸  : .......+.....    耐轟音: .............    加速      : .............
 耐電撃: ....+........    耐地獄: +............    耐麻痺    : +............
 耐火炎: ..........+..    耐因混: +............    透明体視認: .............
 耐冷気: ...+.........    耐カオ: .............    経験値保持: .............
 耐毒  : .........+...    耐劣化: .............    警告      : .............
 耐閃光: .............    耐恐怖: .............    遅消化    : +............
 耐暗黒: .............    反射  : .............    急回復    : +............
 耐破片: .............    火炎オ: .............    浮遊      : ...........+.
 耐盲目: .........+...    電気オ: .............    永遠光源  : ......+......
 耐混乱: ............+    冷気オ: .............    呪い      : ....+..+.....

             \                   \ }=="![(]]]                  \ }=="![(]]]
             ab@                 abcdefghijkl@                 abcdefghijkl@
 邪悪 倍打 : +..    テレパシー : .........+...   追加攻撃    : .............
 不死 倍打 : ...    邪悪ESP    : .............   採掘        : .............
 悪魔 倍打 : ...    無生物ESP  : .............   赤外線視力  : .............
 龍 倍打   : ...    善良ESP    : .............   魔法道具支配: ..........+..
 人間 倍打 : ...    不死ESP    : .............   隠密        : ........+....
 動物 倍打 : ...    悪魔ESP    : .............   探索        : +.....+.+....
 オーク倍打: ...    龍ESP      : .............
 トロル倍打: ...    人間ESP    : .............   乗馬        : .............
 巨人 倍打 : ...    動物ESP    : .............   投擲        : .............
 溶解      : ...    オークESP  : .............   祝福        : .............
 電撃      : ...    トロルESP  : .............   反テレポート: .............
 焼棄      : ...    巨人ESP    : .............   反魔法      : .............
 凍結      : ...    ユニークESP: .............   消費魔力減少: .............
 毒殺      : ...    腕力維持   : .............
 切れ味    : ...    知力維持   : .............   経験値減少  : .............
 地震      : ...    賢さ維持   : .............   乱テレポート: +............
 吸血      : ...    器用維持   : .............   反感        : .............
 カオス効果: ...    耐久維持   : .............   太古の怨念  : .............
 理力      : ...    魅力維持   : .............


  [オプション設定]

 保存モード:         ON
 小さいダンジョン:   ENABLED
 アリーナ:           ENABLED


  [帰還場所]

    鉄獄        :  32 階
    イークの洞穴:   5 階


  [クエスト情報]

《達成したクエスト》
  もの言えぬ証人                      (危険度:  5階相当) - レベル 7 - 00:01:47
  盗賊の隠れ家                        (危険度:  5階相当) - レベル 7 - 00:03:16
  ワーグを殱滅せよ                    (危険度:  5階相当) - レベル13 - 00:12:26
  『ボーシン』                        (  6階)            - レベル13 - 00:26:39
  烏戈国王『兀突骨』                  ( 12階)            - レベル16 - 00:41:42
  オークのキャンプ                    (危険度: 15階相当) - レベル21 - 01:37:06
  破滅のクエスト1                    (危険度: 15階相当) - レベル26 - 02:35:21
  ミミックの財宝                      (危険度: 25階相当) - レベル26 - 02:51:31

《失敗したクエスト》
  『ガチャピン』                      ( 24階)            - レベル28 - 03:58:36
  下水道                              (危険度: 15階相当) - レベル29 - 04:47:48


 闘技場:  0勝


  [倒したモンスター]

38体のユニーク・モンスターを含む、合計3152体の敵を倒しています。

《上位10体のユニーク・モンスター》
  盗賊『リッチ』                           (レベル 29)
  ウルファングの息子『ウルワルス』         (レベル 26)
  力の亡者『カリス』                       (レベル 26)
  ジャイアンの腰巾着『スネヲ』             (レベル 25)
  ウンバールの『サンガハイアンド』         (レベル 24)
  アルベリヒの息子『ハーゲン』             (レベル 24)
  悪鬼の血脈『ティボルト』                 (レベル 22)
  ウルク『ルグドゥシュ』                   (レベル 21)
  『女王ベトベト』                         (レベル 20)
  オークの隊長『ゴルバグ』                 (レベル 18)


  [自分に関する情報]

現在の体力ランク : ???

能力の最大値
腕力 : ???
知能 : ???
賢さ : ???
器用 : ???
耐久 : ???
魅力 : ???

属性 : 中悪

[然]の強敵
[節]の具現者
[調]の覇者
[運]の小徳者
[誉]の対極
[勇]の大敵
[正]の迷道者
[犠]の罪者




  [突然変異]

 あなたは幻覚を引き起こす精神錯乱に侵されている。


  [キャラクタの装備]

a) (トランプ)六尺棒 (1d11) (+6,+10) (+2探索) {+探r獄因;麻遅活瞬/邪, .}
b) (武器を両手持ち)
c) 高速度のロング・ボウ (x3) (0.45turn) (+6,+15)
d) 耐冷の指輪
e) 電撃の指輪 [+9] {呪われている}
f) 知能のアミュレット (+1)
g) ★ガラドリエルの玻璃瓶 (+1探索) {+探;明}
h) ドワーフのスプリント・メイル (-2) [24,+15] (+2) {呪われている, +耐r酸}
i) エルフのクローク [4,+8] (+4隠密)
j) ★スランドゥイル王の硬革帽子 [2,+9] (+2) {+知賢r毒盲~感}
k) ★ガントレット『パウアハッハ』 [2,+15] (+1) {+腕道r火}
l) 浮遊の鉄鋲底の靴 [6,+3] {浮}


  [キャラクタの持ち物]

a) 2冊の 自然の魔法書[野性の召喚] {@ma!k}
b) 5冊の 自然の魔法書[自然の秘術] {@mb!k}
c) 3冊の カオスの魔法書[カオスの徴] {@me!k}
d) 2服の ヒーローの薬 {25%引き}
e) 17服の 致命傷の治癒の薬 {50%引き}
f) 7服の 体力回復の薬 {!k}
g) 2服の 経験値復活の薬
h) 21巻の ショート・テレポートの巻物
i) 16巻の テレポートの巻物 {25%引き}
j) 2巻の テレポート・レベルの巻物
k) 4巻の 帰還の詔の巻物 {50%引き}
l) フロア・リセットの巻物
m) テレポート・アウェイのロッド
n) 鑑定の杖 (21回分) {@1}
o) 17本の 束矢 (2d4) (+6,+6) (80/shot 84/crit 184/turn/4.63% crit) {@1}


  [我が家のアイテム]

 ( 1 ページ )
a) 2冊の カオスの魔法書[カオス秘術] {@mf!k}
b) 匠の魔法書[師範代の書]
c) 仙術の魔法書[紋様仙術]
d) 2つの 全復活のキノコ
e) 啓蒙の薬 {25%引き}
f) 3服の 耐性の薬 {!k}
g) 癒しの薬
h) *破壊*の巻物 {!k}
i) 体力回復の杖 (4回分)
j) 聖浄の杖 (5回分)
k) 浮遊の指輪 {並}
l) 守りの指輪 [+11]

 ( 2 ページ )
a) 耐因果混乱の指輪
b) 耐破片の指輪
c) 反テレポートのアミュレット
d) 不朽の眼のフェアノールのランプ {r盲;視明}
e) ドルイドの硬革よろい (-1) [6,+7] (+3) {+賢r火盲}
f) 跳躍の鉄鋲底の靴 [6,+2]
g) ★手品師の折れたダガー (1d1) (+0,+0)
h) ★ダガー『デサンク』 (1d4) (+4,+6)
i) ★マン・ゴーシュ『小さき刺』 (1d5) (+18,+6) (+3) {+知魅r因;麻視活/邪}
j) ☆カタナ『免罪符』 (3d4) (+20,+19) (+2) {+賢器;祝}
k) ★ハーゲンのスピア (1d6) (+11,+13) (+3加速) {+速隠赤r冷暗;投視|凍/死}
l) モルグルのオウル・パイク (2d8) (-8,-17) [-6] {呪われている, r冷獄;視怒忌[冷|毒/人死~死}

 ( 3 ページ )
a) ★ハルベルト『オソンディア』 (3d5) (+6,+9) (+3) {+魅r火轟;視浮明|焼/巨死}
b) (聖戦者)ランス (2d8) (+8,+13) [+2] (+3) {+賢r恐;視祝/邪デ死(知}
c) ☆バトル・アックス『ヴィンデダキル』 (2d8) (+13,+20) [+6] (+4) {+器;視/人巨動(器}
d) ★フレイル『トティラ』 (3d6) (+6,+8) (+2隠密) {+隠r火乱;明|焼/邪}
e) 強速射のライト・クロスボウ (x3) (0.60turn) (+11,+7)
f) 33本の 矢 (1d4) (+0,+0) (54/shot 55/crit 121/turn/4.45% crit) {@1}
g) 24本の 矢 (1d4) (+6,+6) (72/shot 73/crit 160/turn/4.63% crit) {@1}
h) 31本の 冷気の束矢 (2d4) (+8,+3) (71/shot 74/crit 162/turn/4.69% crit) {@1}
i) 殺傷の追尾の矢 (6d4) (+11,+11) (126/shot 129/crit 283/turn/4.78% crit) {@1}
j) 11本の 殺傷の追尾の矢 (6d4) (+11,+11) (126/shot 129/crit 283/turn/4.78% crit) {@2}
k) ウンバールの『サンガハイアンド』の死体 {賞金首}
l) 盗賊『リッチ』の死体 {賞金首}

 ( 4 ページ )
a) ユニコーンの鉄の像
b) 丘オークの隊長『ゴルフィンブール』の象牙の像
c) バランス・ワイアームのミスリル像


  [チェックサム: "f65525f6c5f51c613d"]