2013/02/14
■ [変愚蛮怒/スポイラー]add_river()関数による川生成の処理(変愚蛮怒 Ver2.1.1 rev3274)
ダンジョンでそれなりによく生成されるこういう地形である。
add_river()関数が「浅い地形」と「深い地形」のIDを受け取り、以下の流れで生成を行う。
add_river()
- 川の開始地点を、何故かフロアの右下半分のいずれかに偏らせて選んで開始する。
- 1d4を振って川の終着地点を決める。
- 1ならフロアの上端のいずれか。
- 2ならフロアの左端のいずれか。
- 3ならフロアの右端のいずれか。
- 4ならフロアの下端のいずれか。
- 川の基本幅の値を1d2で決める。
- recursive_river()関数に、川の開始地点、終着地点、地形、基本幅値を与えて再帰的な生成処理を開始する。
recursive_river()
- 開始地点と終着地点の距離が4を超えていたら、その2点を対頂点として、フロアに平行な長方形をの範囲内に中間地点を定める。
- 開始地点~中間地点、及び中間地点~終着地点の間でrecursive_river()を呼び出し再帰させる。
- 1/50の確率で、基本幅が0より大きいなら、川幅を一つ減らし、「中点」~「中点から中間地点のベクトルの8倍先の地点」にかけてrecursive_river()を呼び出し再帰させる。これは、支流を表現していることになる。
- 開始地点と終着地点の距離が4以内なら再帰を停めて、実際に川を生成する処理に入る。
- 開始地点から、終着地点の各地点を(川幅の値+1)分に当分する。
- 当分地点を中心(川幅の値-1)~(川幅の値+1)の長方形部分を川の地形で埋める。
- 既に該当の川地形で埋まっていたらキャンセル。
- その長方形の地点が長方形の中央から少し離れていると、生成キャンセルが起きやすい。具体て絹は距離>(川幅の値-1)~(川幅の値+1)の乱数
- 永久壁の地形はキャンセル。
- 距離>川幅の値なら浅い地形、そうでないなら深い地形を埋める。
- 地形に隠しドアなどのフラグが立っていたら、そのフラグを解除する。
- 川地形が溶岩系統なら、地形を光らせる。
- CAVE_ICKYフラグを立てて、テレポート先の対象にしない。