トップ «前の日記(2012/12/22) 最新 次の日記(2012/12/24)» 編集

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分一本勝負


2012/12/23

[変愚蛮怒/スポイラー]モンスターの増殖処理と不具合らしい何か(変愚蛮怒 Ver2.1.1)

  • 増殖処理はmultiply_monster()関数で実装されており、MULTIPLYフラグ持ちモンスターの自然増殖、及びクローン・モンスターの作用双方に利用されている。

num_reproカウントによる制限

  • MULTIPLYフラグによる自然増殖には限界があり、フロア毎に共用のnum_repro変数によるカウントがMAX_REPRO(マクロ定義で100)値以上になると生成がキャンセルされる。num_reproは以下の処理で増減する。
    • 生命領域魔法か突然変異レイシャル「不毛化」の発動で+MAX_REPRO、つまりこの後自然増殖を一切しなくなる。
    • MULTIPLY持ちのペットが配置されると+1。
    • MULTIPLY持ちのモンスターが削除されると-1。
    • MULTIPLY持ちのモンスターが生成されると+1。

つまり、@さんが不毛化をかますか、規定数以上のMULTIPLYモンスターが存在する状態だと、モンスターの自然配置がクローン・モンスター、召喚などの意図的生成以外でMULTIPLYモンスターは生成されなくなる。特にややこしい増殖モンスターである「混沌」や「長老岩」が眠っている間に、そこらでぷよやイモムシの大群などを増殖しておくと、増殖を阻止できるかも知れない。

自然生成処理の条件

上記の条件で自然増殖が可能であった場合、さらに以下の条件とプロセスでmultiply_monster()の実行が行われる。

  • モンスターのターンが回る毎に増殖判定。
  • *自分自身*と周囲一マスを走査して、隣接モンスターの数をカウントする。ただし@さんが呪術領域魔法の「反増殖結界」発動中でその抵抗に失敗すると隣接モンスター数が擬似的に8となって、後述の形で増殖が必ず失敗する。
  • 隣接モンスター数が1以上4未満なら1/(隣接モンスター数*8)の確率でmultiply_monster()実行、0なら無条件にmultiply_monster()実行。

multiply_monster()の処理の流れ

  • mon_scatter()関数により、周囲1マスから一つ増殖可能なマスを見つける。mon_scatter()がポインタ渡しで返す座標の基準は以下の通り。
    • (当然だが)フロア内のサイズ内に収まった座標であること。
    • モンスターの射線内にあること(今回は周囲1マスなので常に通る)
    • そのマスが増殖モンスターにとって侵入可能地形であること。
    • 以上を満たしたマスの内、ランダムに一つ選択する。
  • 増殖先が見つかったらその位置にplace_monster_one()関数で同じ種族のモンスターを配置する。

微妙な現象

これまでのバージョンで、通常の移動が不可能(NEVER_MOVE)かつ、増殖する(MULTIPLY)モンスターが、以下のように2x2でスクラムを組んだまま、増殖がずっと止まりっぱなしになる様子を見かけたプレイヤーは多いと思う。

自宅に放り出した生ゴミ

これは上記で述べた、周囲のモンスターの数に応じて増殖を抑制する際、増殖元モンスター自身を数に入れてしまっているために隣接数4となり、互いに増殖を停めてしまった基本例である。恐らくこれはバグと見るべきだと思うのだが、今後修正するかは公式の開発陣と相談して決めたいと思う。

[D'angband/開発]D'angband開発日誌 part35

進展内容

  • リファクタリング
    • 冗長なコメントの削除(2012/12/19~)
    • ifdef JP による煩雑なローカライズの統合(2012/12/19~)
      • grep数3995まで減らす。
    • データ構造の改良(2012/12/22~)
    • 関数構造の改良(2012/12/22~)
      • sanity_blast()/have_nightmare()の多重実装をsanity_blast_aux()に一時統合
    • 魔法効果処理の統合(2012/12/23~)
      • 職業レイシャルの処理をtrait系に統合。
    • 変数名の変更(2012/12/22~)

[ヴィーヤウトゥムノ]冥妃『モルナリル・ウルバンディ』

冥妃