トップ «前の日記(2012/10/22) 最新 次の日記(2012/10/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/10/23

[変愚蛮怒/スポイラー]プレイヤーからモンスターへの打撃命中処理(変愚蛮怒 ver2.0.0)

えるふとバルログでどの程度差が出るか

えるふの打撃修正が-5、バルログの打撃修正は+20。この種族的差のみを単純に見た場合打撃にどの程度影響がでるか。双方の普通の盗賊とした場合に、他の要素と比べた相対的な検証を行う。

まず種族の「打撃修正」値は命中率にのみ影響を及ぼす。武器などの修正に影響しない基本的な@さん自身の打撃性能はxtra1.cのcalc_bonuses()関数中で決まる。(リファクタリングできてない非常に長い関数なので、くれぐれも手動で探すのはお薦めしない)

処理を追うと、まず以下の行で種族、職業、性格の打撃修正が単純に足し算される。

/* Base skill -- combat (normal) */
p_ptr->skill_thn = tmp_rp_ptr->r_thn + cp_ptr->c_thn + ap_ptr->a_thn;

これによるskill_thn値の両種族差は以下の通りになる。

バルログ:20+60+0 = 80
えるふ:-5+60+0 = 55

そのままcalc_bonuses関数を追うと、次に職業と性格による@さんのレベルに依存した加算が入る。ソースは以下の通りである。

/* Affect Skill -- combat (normal) (Level, by Class) */
p_ptr->skill_thn += ((cp_ptr->x_thn * p_ptr->lev / 10) + (ap_ptr->a_thn * p_ptr->lev / 50));

性格普通の場合 ap_ptr->a_thn は 0 なので無関係、盗賊の cp_ptr->x_thn は 21 なので両者のLv1から50までの経過量は以下の通りになる。

バルログ:Lv1 80 → Lv50 80 + (21 * 50 / 10) = 185
えるふ:Lv1 55 → Lv50 55 + (21 * 50 / 10) = 160

こうして計算された基礎値は、cmd1.cのpy_attack_aux()関数で実際に打撃の命中処理に使われる。まず以下の式でchanceが計算される。

/* Calculate the "attack quality" */
bonus = p_ptr->to_h[hand] + o_ptr->to_h;
chance = (p_ptr->skill_thn + (bonus * BTH_PLUS_ADJ));

bonusはダンプ画面を見た場合の武器の「打撃修正」の値である。これが実際には

#define BTH_PLUS_ADJ       3       /* Adjust BTH per plus-to-hit */

によって3倍に加算されてchance値に加わる。この他、chance値は剣術家の居合など、特別な処理について大きなボーナスを与えられるが、今回の処理では飛ばす。

最終的にchance値はtest_hit_norm()関数の引数として与えられ、実際の打撃処理の基準にされる。

盗賊の不意打ち、あるいは*汚い*忍者ヴォーパルがなどがない、通常の処理の場合に、test_hit_norm()関数は以下の通りの処理を順に行う。

1・5%の確率で命中、5%の確率で外す
2・性格がなまけものの場合、さらに5%の確率で外す(今回は無関係)
3・chanceの値がマイナスなら無条件に外す
4・1d(chance) >= (敵ACの3/4(小数点切り捨て)) で命中、そうでなければ外す

これで命中判定が出た時点でダメージ処理が確定する。さて、ここまでの流れを確認した上で具体的にどのような命中率になるかを、ゲームの序盤~終盤まででありそうなパターンを基準に処理してみる。

ケース1・盗賊クエストにカチコんだばかりの盗賊Lv5が、報酬で村長さんからもらった上質ロングソード程度の命中修正(+8程度と仮定)で蛆虫農夫を襲った場合。

バルログLv5のchance値: 80 + (21 * 5 / 10) + (3 * 8) = 114
えるふLv5のchance値: 55 + (21 * 5 / 10) + (3 * 8) = 89
蛆虫農夫のAC: 10
バルログLv5の命中率(%): 5 + 90 * (114 - 10 * 3 / 4) / 114 = 89
えるふLv5の命中率(%): 5 + 90 * (89 - 10 * 3 / 4) / 89 = 87

差がほとんど出ない。これがワーグ(AC20)でようやく83%/79%と言った程度だ。

実際にはこれに加えて種族的なSTRとDEXの差のために与える攻撃回数とダメージ修正により、初めてかなりの開きが出るようだが、打撃性能の命中修正はかえっておまけ程度にしかならない。

ケース2・いよいよ佳境の40F前後をうろつく盗賊Lv30がそこそこの★の命中修正(+30程度)でガチャピンを襲った場合。

バルログLv30のchance値: 80 + (21 * 30 / 10) + (3 * 30) = 233
えるふLv30のchance値: 55 + (21 * 30 / 10) + (3 * 30) = 208
ガチャピンのAC: 90
バルログLv30の命中率(%): 5 + 90 * (233 - 90 * 3 / 4) / 233 = 69
えるふLv30の命中率(%): 5 + 90 * (208 - 90 * 3 / 4) / 208) = 66

この段階でも体感できるかどうか微妙な差で、この頃になるとツモ次第で種族的差が結構覆る場面も珍しくないだろう。職業修正の比重も大きくなっていてるのも影響していると思われる。

ケース3・レベル最大の最終装備(命中修正+55)でJを殴った場合。

バルログLv50のchance値: 80 + (21 * 50 / 10) + (3 * 55) = 350
えるふLv50のchance値: 55 + (21 * 50 / 10) + (3 * 55) = 325
混沌のサーペントのAC: 175
バルログLv50の命中率(%): 5 + 90 * (350 - 175 * 3 / 4) / 350 = 61
えるふLv50の命中率(%): 5 + 90 * (325 - 175 * 3 / 4) / 325) = 58

こうしてみると、序盤から終盤に至るまで、命中率に差がつくのはせいぜい3%~4%といったところが相場である。

ターンダメージの期待値がこの命中率により割合で削減されることを考えれば、当然100%と95%と間の差と10%と5%の間の差は天地の開きがあるので、バルログとえるふの「打撃能力」のみを見た差は、その時点のレベルから見て相対的に高AC帯を相手にした場合に、多少有意な影響を及ぼす程度に過ぎないと言った所だろう。 盗賊の場合二刀流という選択肢があるので、この時もう少しバルログの方が有利になるかも知れない。逆に言えばその程度である。

結論として、打撃能力の差は基本的にそれほど顕著ではない。

両種族の難易度は、例えば殴り職の場合

STR/DEX/CON:バルログ…+4/+2/+3 エルフ…-1/+1/-2
耐性:バルログ…火炎&地獄 エルフ…閃光
ヒットダイス:バルログ12 / エルフ8

と言った差で開いていると見た方がいいだろう。