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

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/13

[変愚蛮怒/スポイラー]try_door()/place_random_door()関数による通路のドア生成処理の流れ(変愚蛮怒 Ver2.1.1 rev3274)

generate.cの関数

static void try_door(int y, int x)

この関数の処理は、cave_gen()関数による部屋間の生成処理(変愚蛮怒 Ver2.1.1 rev3274)に記述してある通路生成中に三叉路や十字路ができた場合に、その周囲1マスにドアの生成を試みるものである。

下図の赤枠に囲まれた部分にあたる。

該当例

また、try_door()関数がさらに実際にドア生成や、上図の赤枠に囲まれていないドアは、place_random_door()を直接呼び出す形で実装されている。

void place_random_door(int y, int x, bool room)

roomはtry_door()で呼び出された場合のみFALSE、それ以外ではTRUEとなる。

try_door()の流れ

  • 座標がフロア範囲内ならキャンセル
  • 座標のマスが壁ならばキャンセル
  • 座標のマスがCAVE_ROOMフラグを持っていたらキャンセル
  • ダンジョンにNO_DOORSフラグがなく、壁の位置関係が不自然なドアでなければ、ダンジョン毎に計算された確率でplace_random_door()を呼び出す。

place_random_door()の流れ

  • ダンジョンがNO_DOORSを持っていたら指定座標を床にして終了。
  • ダンジョンがCURTAINフラグを持っていた場合、NO_CAVEを持っていると1/16、持っていないなら1/256の確率でドアはカーテンになる。
    • そうでなければダンジョンにGLASS_DOORがあるとガラスのドア、そうでない場合通常のドアになる。
  • ドアの状態は以下の確率の通り
    • 300/1000の確率で開いている。
    • 100/1000の確率で壊れて開いている。
    • 200/1000の確率で隠しドアにしようと試みる。
      • ただし、カーテンであった場合は単に閉じたカーテンになる。
      • ダンジョンを構成する基本的な壁地形による偽装を試みるが、ドアが遮蔽を持たない地形であるか、偽装する壁が飛んで移動できる地形(竜窟の崖など)であった場合、偽装をキャンセルして、半々の確率で壁にするか床にする。
    • 400/1000の確率で閉じたドアになる。
      • 閉じたドアはplace_closed_door()によりさらに実装されている。この関数はカーテンでなければ、
        • 300/400の確率で鍵がかからず閉じている。
        • 99/400の確率で鍵がかかっている。
        • 1/400の確率で完全に閉じている(くさびのかかったドアと同じ)
  • 以上のドア配置先にモンスターがいた場合削除する。