トップ «前の日記(2013/01/27) 最新 次の日記(2013/01/29)» 編集

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/01/28

[変愚蛮怒/スポイラー]place_monster_aux()関数の処理の流れ(変愚蛮怒 Ver2.1.1)

place_monster_aux()関数はゲーム実装中の随所に散りばめられている、具体的に確定したモンスター種族を確定した場所に配置する関数で、大抵のダンジョン上のスポーン処理はこれを根幹に行われる。

place_monster系の関数にはモンスターを生成する際、その状態を確定するために以下のようなフラグが指定できる。

PM_ALLOW_SLEEP眠っている状態で生成されることがある
PM_ALLOW_GROUPモンスター種族に依存した各種集団生成を許可する
PM_FORCE_FRIENDLY必ず友好的な状態で生成される
PM_FORCE_PET必ずペットとして生成される
PM_NO_KAGE「あやしい影」として生成されない
PM_NO_PETペットとして生成されることはない
PM_ALLOW_UNIQUEユニークの生成を許可する
PM_IGNORE_TERRAINモンスター種族上侵入できない地形上であっても生成する
PM_HASTE加速状態で召喚される
PM_KAGE必ず「あやしい影」として生成される
PM_MULTIPLYMULTIPLYフラグ持ちモンスターが増殖した向けに擬態や「あやしい影」状態を継承する

以上を前提に処理の流れを見る。

place_monster_aux()

  • PM_NO_KAGEフラグが無ければ1/333の確率でPM_KAGEフラグを立てる。
  • 以上のフラグを引き継いだ上でplace_monster_one()関数に処理を移して、モンスターをまず1体配置する。
  • PM_ALLOW_GROUPフラグが無ければこの時点でplace_monster_aux()終了。
  • FRIENDSフラグ持ちのモンスターなら、place_monster_group()に処理を移す。
  • ESCORTフラグ持ちのモンスターなら、以下の生成処理を32回試みる。
    • 周囲3マスのモンスター生成可能マスをランダムに選び、そこにモンスターがいれば1回キャンセルする。
    • 以下の条件のモンスターを護衛として生成対象にする。
      • そのダンジョンに生成され得るモンスターであること。
      • その地形に侵入可能であること。
      • ユニークでないこと。
      • 元のモンスターと同じモンスター種族でないこと。
      • シンボルが同じであること。
      • 元のモンスター未満のレベルであること。
      • 善良、邪悪による対立関係にないこと。
    • 以上条件を満たしたモンスターを生成階に合わせて1つ選びplace_monster_one()で1体配置する。
    • 護衛となるモンスターがFRIENDS持ちか、大本のモンスターがESCORT"S"フラグ持ちならさらにplace_monster_group()による生成を行う。

place_monster_one()とplace_monster_group()の処理の流れはまた後日。