2013/01/25
■ [変愚蛮怒/スポイラー]cave_gen()関数によるフロアの内容生成の流れ(変愚蛮怒 Ver2.1.1)
思った以上に分化せずにクッソ長い関数処理なのでそのうちまた別項を立てて詳細を説明する。
- set_floor_and_wall()関数によりダンジョン毎に指定された、内壁、外壁などを設定。
- モンスター生成比を標準に差し戻す。
- 通路生成に使用する定数を、#define定義された範囲内で各自定める。
- level_gen()関数以前にサイズ確定したフロアを11マス毎にブロックとして区切る。これを部屋生成の基準に利用する。
- 「常にアリーナレベルを生成する」オプションをONにしているか、ダンジョンにARENAフラグがある場合、さもなくば1/24の確率で、アリーナレベルとなり、生成時点でダンジョンが空洞(床)になる。
- アリーナレベルで無い場合はダンジョンを基本の壁(extra)で埋め尽くす。
- gen_caverns_and_lakes()に処理を移し、以下の条件でフロア全体に影響を及ぼす地形フラグを立てる。
- 30Fより深く、1/36の確率で、小さい階の生成をオプションで許可し、ダンジョンにDESTROYフラグがあるなら、*破壊*地形の生成フラグをONにする。その際、1/2の確率で見栄えのために予め湖や洞穴を追加生成する。
- 1/24の確率で、アリーナ地形でなく、前述の破壊地形フラグが立っておらず、LAKE_WATER、LAKE_TREE、LAKE_RUBBLE、LAKE_LAVAのいずれかのフラグをダンジョンが持っていれば「湖地形」生成のため以下の処理を行う。
- count値を設け、各フラグが存在する毎に+3の値を追加する。
- LAKE_LAVAフラグを持っていて80Fより深いならば2/countの確率で溶岩の川を生成する。
- countを2減らす。
- まだ湖地形が確定せず、LAKE_LAVAフラグを持っていて80Fより深いならば1/countの確率で火のVaultを生成する。
- countを1減らす。
- まだ湖地形が確定せず、LAKE_WATERフラグを持っていて50Fより深いならば2/countの確率で水の川を生成する。
- countを2減らす。
- まだ湖地形が確定せず、LAKE_WATERフラグを持っていて50Fより深いならば1/countの確率で水のVaultを生成する。
- countを1減らす。
- まだ湖地形が確定せず、LAKE_RUBBLEフラグを持っていて35Fより深いならば2/countの確率で洞窟を生成する。
- countを2減らす。
- まだ湖地形が確定せず、LAKE_RUBBLEフラグを持っていて35Fより深いならば1/countの確率で地のVaultを生成する。
- countを1減らす。
- まだ湖地形が確定せず、LAKE_TREEフラグを持っていて5Fより深いならば風のVaultを生成する。
- countを1減らす。
- 実際に各地形を生成する。
- 20Fより深く、アリーナ地形でなく、ダンジョンにCAVERNフラグがあり、湖地形の生成も、破壊地形もなく、1d1000<生成階ならば、洞窟地形の生成を行う。(build_cavern()によるもので湖地形上の「洞窟」とは処理が異なる)
- クエスト実行中の階ならば、破壊地形フラグをここでキャンセルする。
- ダンジョンがMAZEフラグ持ちなら、この時点でフロア全体を迷宮の形に生成して、下り階段を2d3、上り階段を1d3作って処理を終える。
- そうでない場合、通常の部屋群生成をgenerate_rooms()で行う。
- 1Fの場合、1/2の確率で小さな森を生成する。
- 破壊地形フラグがあったら、この時点で破壊地形を作成する。
- 1/3の確率で、1d(生成階)>5ならgen_caverns_and_lakes()関数で立った、溶岩地形、水地形フラグに応じて川を生成する。(詳細は別項予定)
- generate_rooms()関数で作られた部屋間の通路を作成する。(詳細は別項予定)
- 部屋と通路の間にドアを生成する。
- 3d4の下り階段と、1d2の上り階段を生成。
- 湖地形が作られていない場合、ストリーマー(壁の中に混じる別の特殊な壁や鉱脈)を生成する。
- 上下左右の端を永久壁で囲う。
- @さんを配置。
- クエストモンスターを配置。
- ランダムモンスターを配置。
- アイテムやゴールドを配置。
- ダンジョンの主を配置。
- アリーナレベルで、4/5の確率か1d100>生成階でかつ、DARKNESSフラグがないならダンジョン全体を明るくする。