トップ «前の日記(2013/11/16) 最新 次の日記(2013/11/18)» 編集

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/11/17

[変愚蛮怒/開発]変愚蛮怒開発日誌part9…*破壊*中のクエストモンスター処理を確認

参考:[変愚蛮怒/スポイラー]*破壊*の発動ケースとその処理の流れ(変愚蛮怒 Ver2.1.2 rev3303)

  • 該当のマスに敵がいた場合、
    • in_generate=TRUEなら無条件にその敵をdelete_monster()関数で消す。
    • そうでなく、そのモンスターがクエストモンスターなら、HPを最大まで回復させた上で、*破壊*半径*2+1だけ、テレポートアウェイさせる。
    • そうでない場合、delete_monster()関数で消す。ペットは消滅した旨を日記に記録される。

Urwen

アッキ=ニンジャ『ウルウェン』
普通だったら、テレポ扱いのはずなのに時間経過で再生成とか、
いつまでも出ないとか色々言われてるゾ、おう調べろよ、あくしろよ。

Romunqualy

鬼畜大佐『ロムンクァリィ』
という訳で処理の流れを再調査しましたところ…

(以下spell2.c:4643)
     if (in_generate) /* In generation */
     {
         /* Delete the monster (if any) */
         delete_monster(y, x);
     }
     else if (r_ptr->flags1 & RF1_QUESTOR)
     {
         /* Heal the monster */
         m_ptr->hp = m_ptr->maxhp;

         /* Try to teleport away quest monsters */
         if (!teleport_away(c_ptr->m_idx, (r * 2) + 1, TELEPORT_DEC_VALOUR)) continue;
     }
     else
     {
         if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname)
         {
             char m_name[80];

             monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
             do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_DESTROY, m_name);
         }

         /* Delete the monster (if any) */
         delete_monster(y, x);
     }

Urwen

アッキ=ニンジャ『ウルウェン』
なんだこの分岐!?(驚愕)

Romunqualy

鬼畜大佐『ロムンクァリィ』
*破壊*対象になった各マスのモンスターをすっ飛ばすための処理よ。
クエスト・モンスターの場合処理に入るのは真ん中ね。
teleport_away()関数は所定の範囲内ですっとばす先の候補があった場合、
そこに飛ばしてTRUEを、ない場合はすっ飛ばさずFALSEを返すわけよ。
で、FALSE返した場合はcontinueかましてそのマスの*破壊*処理を
キャンセルする≒オブジェクトと地形の破壊を起こさないわけ。

Urwen

アッキ=ニンジャ『ウルウェン』
はえ~

Romunqualy

鬼畜大佐『ロムンクァリィ』
で、この流れ見た結果、どう逆立ちしてもQUESTORフラグが
ついてるモンスターはdelete_monster()の対象にならないのよね。
テレポで飛ばされればテレポ先へ、
万一飛ぶ先がなければ、その場に留まるだけのはずだから…
クエスト・モンスターが消えるはずはないんだけどなあ。

Urwen

アッキ=ニンジャ『ウルウェン』
テレポアウェイの距離がモンスターのいる位置から、
破壊半径*2+1となると存外遠くに飛ぶ可能性もあるよな。

Romunqualy

鬼畜大佐『ロムンクァリィ』
そう、だから「後になってから再生成されている」とか
「いつまでも出てこない」ってのも単に探すのに時間がかかったか、
いつまでも見つけられなかったって可能性が割りと大。

Urwen

アッキ=ニンジャ『ウルウェン』
階の雰囲気がよくなったってのも階層の主自身よりは*破壊*に
伴って消えたアイテムや他のモンスターの可能性があるか。

Romunqualy

鬼畜大佐『ロムンクァリィ』
というわけで、とりあえずバグではなさそうって結論になりそう。
てか結局メンテナ自身もアウェイ処理じゃなくて、再生成って勘違いしてる件。

Urwen

アッキ=ニンジャ『ウルウェン』
ちゃんと確認しとけよ、メンテナの屑がこの野郎。