2013/01/28
■ [変愚蛮怒/スポイラー]place_monster_aux()関数の処理の流れ(変愚蛮怒 Ver2.1.1)
place_monster_aux()関数はゲーム実装中の随所に散りばめられている、具体的に確定したモンスター種族を確定した場所に配置する関数で、大抵のダンジョン上のスポーン処理はこれを根幹に行われる。
place_monster系の関数にはモンスターを生成する際、その状態を確定するために以下のようなフラグが指定できる。
PM_ALLOW_SLEEP | 眠っている状態で生成されることがある |
PM_ALLOW_GROUP | モンスター種族に依存した各種集団生成を許可する |
PM_FORCE_FRIENDLY | 必ず友好的な状態で生成される |
PM_FORCE_PET | 必ずペットとして生成される |
PM_NO_KAGE | 「あやしい影」として生成されない |
PM_NO_PET | ペットとして生成されることはない |
PM_ALLOW_UNIQUE | ユニークの生成を許可する |
PM_IGNORE_TERRAIN | モンスター種族上侵入できない地形上であっても生成する |
PM_HASTE | 加速状態で召喚される |
PM_KAGE | 必ず「あやしい影」として生成される |
PM_MULTIPLY | MULTIPLYフラグ持ちモンスターが増殖した向けに擬態や「あやしい影」状態を継承する |
以上を前提に処理の流れを見る。
place_monster_aux()
- PM_NO_KAGEフラグが無ければ1/333の確率でPM_KAGEフラグを立てる。
- 以上のフラグを引き継いだ上でplace_monster_one()関数に処理を移して、モンスターをまず1体配置する。
- PM_ALLOW_GROUPフラグが無ければこの時点でplace_monster_aux()終了。
- FRIENDSフラグ持ちのモンスターなら、place_monster_group()に処理を移す。
- ESCORTフラグ持ちのモンスターなら、以下の生成処理を32回試みる。
- 周囲3マスのモンスター生成可能マスをランダムに選び、そこにモンスターがいれば1回キャンセルする。
- 以下の条件のモンスターを護衛として生成対象にする。
- そのダンジョンに生成され得るモンスターであること。
- その地形に侵入可能であること。
- ユニークでないこと。
- 元のモンスターと同じモンスター種族でないこと。
- シンボルが同じであること。
- 元のモンスター未満のレベルであること。
- 善良、邪悪による対立関係にないこと。
- 以上条件を満たしたモンスターを生成階に合わせて1つ選びplace_monster_one()で1体配置する。
- 護衛となるモンスターがFRIENDS持ちか、大本のモンスターがESCORT"S"フラグ持ちならさらにplace_monster_group()による生成を行う。
place_monster_one()とplace_monster_group()の処理の流れはまた後日。