トップ «前の日記(2013/02/13) 最新 次の日記(2013/02/15)» 編集

SikabaneWorksが関係するコンテンツ(主に*band系ローグライク)の開発近況・補足から全く個人的な雑記まで。

[WEB:屍の見える丘公園]| [RSS]

Angband | Badiashimshe | C# | CRAUZEL | D'angband/小説草稿 | D'angband/開発 | DarkSouls | Demon'sSouls | DungeonCrawl | ElvenUteruses | Haskell | Hengband | J9シリーズ | LEGO | LineDrawing | MISC | MTG | Mac | Math | Moria | R-18 | Roguelike | Rough | RoughSketch | Ruby | SDL | UNIX | VMware | WarHammer | Zangband | アタシラヂョウヲウ | イラスト | ガジェット | ゲーム | ゲーム紹介 | ゲーム製作技術 | ゲーム論 | スケッチ | ツクール | テクノロジー | ニコニコ動画 | ファルコム | ファンタジー | マリオ | ヴィーヤウトゥムノ | 別記事追加予定 | 変愚蛮怒 | 変愚蛮怒/スポイラー | 変愚蛮怒/元ネタ探訪 | 変愚蛮怒/攻略 | 変愚蛮怒/開発 | 宗教 | 情報 | 政治 | 文字コード | 日ペ昔話 | 東方ワンドロ | 東方外法漢女 | 歴史 | 漫画製作 | 版権絵 | 画像処理 | 翻訳 | 自然言語 | 艦隊これくしょん | 落書き | 言語解析 | 読書 | 超人ロック | 追記予定 | 通信 | 阿片窟 | 馬鹿馬鹿蛮怒/開発 | 魔法少女まどか☆マギカ | 魚類版深夜の真剣お絵描き60分一本勝負


2013/02/14

[変愚蛮怒/スポイラー]add_river()関数による川生成の処理(変愚蛮怒 Ver2.1.1 rev3274)

ダンジョンでそれなりによく生成されるこういう地形である。

川1

川2

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フラグを立てて、テレポート先の対象にしない。