2013/03/08
■ [変愚蛮怒/スポイラー]plasma_recursive()関数による地上地形の再帰生成(変愚蛮怒 Ver2.1.2 rev3345)
static void plasma_recursive(int x1, int y1, int x2, int y2, int depth_max, int rough)
plasma_recursiveは再帰処理により、与えられたフロア領域を常に縦横四分割しながら処理して行く。depth_maxは先日の広域マップの地勢一覧の確率の分母を当てはめ、roughは生成の際の地形のランダム性を強める効重みを示す。
plasma_recursive()
- 横幅が2マスになった場合に再帰を終了する。
- perturb_point_mid()関数で中央の地形を設定する。
- perturb_point_end()関数で左中央、上中央、右中央、下中央の地形を設定する。
- 左上、右上、左下、右下の四分割領域毎にplasma_recursive()を呼び出し再帰する。
perturb_point_mid()
- -rough~roughの範囲でランダム性を作る。
- 四方の端点の地形IDを平均した値にランダム性を足し合わせて新規IDを設定。
- 四方の端点の地形IDが4で割り切れない場合新規ID+1
- 新規IDの値を0~depth_max内に収める。
perturb_point_end()
- -rough~roughの範囲でランダム性を作る。
- 三方の端点の地形IDを平均した値にランダム性を足し合わせて新規IDを設定。
- 三方の端点の地形IDが3で割り切れない場合新規ID+1
- 新規IDの値を0~depth_max内に収める。
つまり各マスの参照と代入関係は以下の通りになる。
これを四分割しながら繰り返すことでなるべくなだらかに地勢が変化していく再現を行おうとしているのだと思われる。それなりにできているようだが、四分割の区切りがくっきりと見えてしまうケースもままある。