2013/02/20
■ [変愚蛮怒/スポイラー]build_type16()の部屋生成プロセス(変愚蛮怒 Ver2.1.2 rev3327)
iksさんが実装してくれた新しい部屋生成処理「地下街」の処理の流れを追ってみることにした。コメントによれば、Vanilla 3.0.3からの流用らしい。
- 横サイズ:town_wid = 33~44 を設定
- 縦サイズ:town_hgt = 11~14 を設定
- 既に他の部屋生成でブラックマーケットの入口が生成されている場合には、ブラックマーケットの生成を抑制する。
- precalc_ugarcade()という関数で、生成がフロア上で可能かをチェックする。不可能ならキャンセル。
- この時点で店舗に当たる矩形状の永久壁地形を、全店舗分確定する。基本的に永久壁の矩形が他の矩形にくっつかないように領域を確保していき、どうしても店舗数分生成できない場合は失敗扱いになる。
- find_space関数でtown_wid+4, town_hgt+4のスペースが確保できるかをチェックする。不可能ならキャンセル。
- 確定した生成範囲を3x3分割し、その中央部分を部屋にする。
- build_stores()関数で実際に店舗を生成。
- 店舗永久壁から周囲2マスの壁は必ず床にする。
- 永久壁の東西南北いずれかの端に店舗入口を作成する。
結果は上図の通り、何となくVanillaTownらしい地形がランダムに生成されるようになっている。悪くない。