2013/02/12
■ [別記事追加予定][変愚蛮怒/スポイラー]cave_gen()関数による部屋間の生成処理(変愚蛮怒 Ver2.1.1 rev3274)
cave_gen()関数の処理中、generate_rooms()関数で生成された部屋の中央部分を基準に生成を行う。部屋中央座標は生成した順に配列に保管されているが、これを予めシャッフルする。
- 部屋間のドア数カウントを0にリセットする(各部屋の内部として生成されたドアはこれに含めない)
- 部屋の中でも最後のIDの中央座標を起点に生成開始。
- どの部屋も必ず繋がるよう、起点からIDの若い順に繋いでいく。ダンジョン毎に定義された確率に応じて、天然の洞窟らしい入り組んだ通路になるか、人工的な最短距離を通るものになるかが決まる。(build_tunnel2()/build_tunnel())この関数を一回行う毎に、配列に両部屋を結ぶ通路の座標が収められる。
- build_tunnel2()/build_tunnel()の違いは、再帰構造があってクランク状の数が増えやすいがそうでないかの違い。
- 途中に部屋があっても、普通に貫通する。これにより実質の通路数は処理を繰り返す回数(=部屋数)よりずっと多くなる。
- 通路生成経路が部屋の外壁であった場合、後でドア生成を行う地点として記憶する。
- 通路生成経路が既に通路を生成した場所であった場合、その周囲1マスに後でドアの生成を試みる。
- 通路配列をなぞる順に、通路を敷き詰めていく。
- 通路を敷き詰める地形が、移動可能地形(FF_MOVE)(=既に部屋が生成されている地形)でないか、水地形、溶岩地形(FF_WATER/FF_LAVA)でない場合のみ床にする。
- ダンジョンにNO_DOORフラグがない場合前述に記憶したドア生成地点に、確率に応じてドアを生成する。(詳細は別記事)