2009/10/22
■ [変愚蛮怒/スポイラー]なまけものの汚い忍者が適当な棒できたなくパワーDを葬る理由
(※ソースコード引用追加)
忍者がレベル50で適当な棒を装備しパワーワイアームを殴った場合、どれだけのダメージをはじき出すかソースから推察しました。ソースは一部見やすいように加工してますが無論本質は変えていません。
間違ってたらどうぞ突っ込んで下さい。
rev3052:cmd1.c:1990の関数、py_attack_auxから計算してみました。
if (MON_CSLEEP(m_ptr) && m_ptr->ml) { /* Can't backstab creatures that we can't see, right? */ backstab = TRUE; } else if ((p_ptr->special_defense & NINJA_S_STEALTH) && (randint0(tmp) > (r_ptr->level+20)) && m_ptr->ml && !(r_ptr->flagsr & RFR_RES_ALL)) { fuiuchi = TRUE; } else if (MON_MONFEAR(m_ptr) && m_ptr->ml) { stab_fleeing = TRUE; }
2023行のswitch部分、まず@の職業が盗賊か忍者であることを前提に、 敵が眠っている状態での攻撃ならバックスタブ、超隠密状態で敵レベルの絡んだ諸々の式が成立すれば不意打ち、敵が恐怖して逃げているなら追い討ちのフラグが成立する。
else if ((p_ptr->pclass == CLASS_NINJA) && ((backstab || fuiuchi) && !(r_ptr->flagsr & RFR_RES_ALL))) success_hit = TRUE;
2142行より忍者でバックスタブ&不意打ちが成立してたら 敵がRES_ALL属性持ち(ぶっちゃけはぐれメタル)でなければ必ず攻撃がヒットする。
k = damroll(o_ptr->dd + p_ptr->to_dd[hand], o_ptr->ds + p_ptr->to_ds[hand]);
2391行目で通常の手持ち武器の攻撃処理として基本のダメージロールが行われる。 騎兵が騎乗時のダイズブースト処理to_dd,to_dsなども絡むが忍者には関係ないので(1d77)が振られる。ばらつき大きいが期待値39、最大77。
k = tot_dam_aux(o_ptr, k, m_ptr, mode, FALSE);
2392行目のtot_dam_aux関数呼び出しで各種スレイ効果。
/* Execute Dragon */ if ((have_flag(flgs, TR_KILL_DRAGON)) && (r_ptr->flags3 & RF3_DRAGON)) { if (is_original_ap_and_seen(m_ptr)) { r_ptr->r_flags3 |= RF3_DRAGON; } if (mult < 50) mult = 50; if ((o_ptr->name1 == ART_NOTHUNG) && (m_ptr->r_idx == MON_FAFNER)) mult *= 3; }
適当な棒にはおあつらえたようにKILL_DRAGONがついているので449行のexecute dragon処理でダメージ5倍になる。期待値195、最大385。ちなみに一番下の処理はノートゥング装備してた場合にファフナーにさらに3倍ダメージを与える処理。
if (backstab) { k *= (3 + (p_ptr->lev / 20)); } else if (fuiuchi) { k = k*(5+(p_ptr->lev*2/25))/2; } else if (stab_fleeing) { k = (3 * k) / 2; }
2394行目よりプレイヤーレベルをplevとして、バックスタブ成立なら(3 + (plev / 20)(最大5倍)、不意打ちで(5+(plev*2/25))/2(最大4倍)、追い討ちなら1.5倍のダメージになる。バックスタブが成立した場合に期待値975、最大1925、もうこの時点でイカれている。
k += o_ptr->to_d;
k += p_ptr->to_d[hand];
2495と2500行目でようやく武器殺戮修正と@自身の能力修正が申し訳程度に加わる。Lv50まで到達したスコアサーバのダンプを見る限り、打撃性能に最も優れた半巨人、半タイタンの二刀流が大体+50前後だったので、期待値1025、最大1975とする
ともかく、眠ってる状態で殴れば、これだけは確実にさっくりいった上でさらに通常ながらも、適当な棒4回分、左に持つ補助武器5回分の攻撃が行く訳でこれはパワーDもたまったものではない。
else if ((p_ptr->pclass == CLASS_NINJA) && buki_motteruka(INVEN_RARM + hand) && !p_ptr->icky_wield[hand] && ((p_ptr->cur_lite <= 0) || one_in_(7))) { int maxhp = maxroll(r_ptr->hdice, r_ptr->hside); if (one_in_(backstab ? 13 : (stab_fleeing || fuiuchi) ? 15 : 27)) { k *= 5; drain_result *= 2; msg_format("刃が%sに深々と突き刺さった!", m_name); } else if (((m_ptr->hp < maxhp/2) && one_in_((p_ptr->num_blow[0]+p_ptr->num_blow[1]+1)*10)) || ((one_in_(666) || ((backstab || fuiuchi) && one_in_(11))) && !(r_ptr->flags1 & RF1_UNIQUE) && !(r_ptr->flags7 & RF7_UNIQUE2))) { if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_UNIQUE2) || (m_ptr->hp >= maxhp/2)) { k = MAX(k*5, m_ptr->hp/2); drain_result *= 2; msg_format("%sに致命傷を負わせた!", m_name); } else { k = m_ptr->hp + 1; msg_format("刃が%sの急所を貫いた!", m_name); } } }
それだけでなく、2588行目以降には忍者専用で確率によって、「刃が敵に深々と突き刺さる」(ダメージ5倍)処理や「敵に致命傷を負わせる」(ダメージ5倍かHP半減のどちらか大きいほう適用)処理、「刃が敵の急所を貫く処理」(即死)が存在する。分岐によれば即死は非ユニークがHP半分以下でないと発動しませんが、代わりにそう低くない確率でさらに5倍撃が成立します。それがバックスタブの初撃につけば結果は期待値5125、最大9875+残り攻撃によるα。
このαにも各々5倍撃or即死がありえる以上、そりゃパワーDの12321のHPが一回の攻撃行動で吹き飛んでもおかしくないというわけで。
それにしてもどこのウォーズマン理論でしょ。汚いさすが忍者きたない。
■ [ニコニコ動画]嘘字幕や空耳ネタに思うこと
(※追記修正あり)
http://yaruomatome.blog10.fc2.com/blog-entry-1837.html
上記のお題になっている総統閣下シリーズしかり、キーボードクラッシャーしかり、はたまた修羅パンツしかり、普段耳にしない他言語の口語やスラングから、日本語空耳を抽出したり、字幕つけてネタにするのはそれはそれで楽しいのですが、やはり元言語自体を検証して理解したりする事も、クソインテリぶりたい身として心がけたいなあ、と。
昔はキーボードクラッシャーがドイツ語で「アンリアルトーナメントしてえんだよ!」と叫んでたのが断片的にも聞き取れてたのが、いつの間にか「イスラエルにトルネードスピン!」にしか聞こえなくなって矯正するのにしばし時間がかかりますた。