2013/01/27
■ [変愚蛮怒/スポイラー]ダンジョンフロアにおけるモンスター配置の流れ(変愚蛮怒 Ver2.1.1)
cave_gen()関数によるフロアの内容生成の流れ中で行われる処理の詳細として追う。
モンスターの生成回数の確定
- ダンジョン毎に指定されるmin_m_alloc_levelの値を基準にモンスター配置回数を定める。
- min_m_alloc_levelによる生成回数の基本値は3x3画面分(縦66マス、横198マス)を基準にしたもので、それより小さいダンジョンについては縦横を比例して基本値を割る。(例えば2x2画面分なら4/9になる)
- 生成回数に1d8を加える。
- 生成回数に生成階に基づく加算を与える、加算数は生成階 / 3だが2回未満なら2、10回より多ければ10回に留められる。
- 最終的に算出された回数分alloc_monster()関数でモンスター配置を試行する。
alloc_monster()関数の流れ
- 最初にalloc_guardian()関数を走らせて、優先的にダンジョンの主を配置し、成功したらそのまま処理を終了する。当然最深層以外では無関係である。
- ダンジョンの主を配置済か配置する必要がないなら、ランダムモンスターの配置を試みる10000回に渡ってランダムに空いているマスを検索し、配置可能な場所があったらそこに確定。繰り返して確定しかなった場合は失敗として処理を終える。
- 1d5000<生成階ならば、alloc_horde()関数によるモンスターの大群を生成する処理に移行する。
- そうでなければplace_monster()関数により単体生成を試みる。
alloc_horde()関数の流れ
- ダンジョン的に相応しいモンスターの種類、と配置先に相応しいモンスターの種類をget_monster_hook(),get_monster_hook2()関数により規定する。
- 1000回にわたりランダムにモンスターの選別を試行して、それがユニークかはぐれメタル以外ならそれに確定する。試行しても確定しなかったら生成キャンセル。
- 最初のモンスターを実際に配置する。
- その語5+1d10回に渡り、パワー(生成階+5)相当の同族召喚と等価の形でplace_monster_aux()関数による配置を繰り返す。
place_monster()関数の流れ
- ダンジョン的に相応しいモンスターの種類、と配置先に相応しいモンスターの種類をget_monster_hook(),get_monster_hook2()関数により規定する。
- 選別でモンスターを一つ選び、place_monster_aux()関数で定めた位置に配置を試みる。