2013/11/20
■ [変愚蛮怒/スポイラー]GUARDIANフラグつきモンスターの再生成の保証処理(変愚蛮怒 Ver2.1.4 rev3503)
GUARDIANフラグつきのモンスターは*破壊*で即座に復活はしないが、自然生成処理で優先的に生成される。
ダンジョンフロアの自然生成を行うalloc_monster()関数はダンジョンフロアを生成するcave_gen()関数で複数回行われる他、ターン経過毎に各ダンジョン毎に指定された確率で一回実行される。
/* Check for creature generation. */ if (one_in_(d_info[dungeon_type].max_m_alloc_chance) && !p_ptr->inside_arena && !p_ptr->inside_quest && !p_ptr->inside_battle) { /* Make a new monster */ (void)alloc_monster(MAX_SIGHT + 5, 0); }
第一引数はプレイヤーの視界内に突然モンスターが生成されることを防ぐために指定された配置外範囲(半径 20(MAX_SIGHT)+5)、第二引数は生成オプション。
alloc_monster()関数は上記リンクでの解説の及び実際のソースの通り、最初にalloc_guardian()関数による、GUARDIANフラグつきモンスターの生成を最優先する。よって、該当のダンジョンの主は多少時間がかかったとしてもほぼ確実に再生する。
bool alloc_monster(int dis, u32b mode) { int y = 0, x = 0; int attempts_left = 10000; /* Put the Guardian */ if (alloc_guardian(FALSE)) return TRUE; /* Find a legal, distant, unoccupied, space */ while (attempts_left--) (以下略)