忍者ヴォーパルの挙動調整の余地
hradish氏より報告された忍者のみの特別なヴォーパル処理について、 maxhpの値は本来モンスターの最大HPを目安にしていると思われるがFORCE_MAXが指定されているモンスターでない限り、大半が最大HPであっても即死処理に回る。
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に深々と突き刺さった!", "You critically injured %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に致命傷を負わせた!", "You fatally injured %s!"), m_name); } else { k = m_ptr->hp + 1; msg_format(_("刃が%sの急所を貫いた!", "You hit %s on a fatal spot!"), m_name); } } }
また、二刀流で命中率が極めて低かった時 右手の攻撃が全部外れた場合はまだ超隠密状態が維持されて左手の初撃で再度不意打ち判定があるので 数回の回避の後に不意打ちを食らう流れになる場合がある。
ミス! ドラコリッチにかわされた。 <x4> 不意を突いてドラコリッチに強烈な一撃を喰らわせた! 再び敵の目にさらされるようになった。 ミス! ドラコリッチにかわされた。 ドラコリッチを攻撃した。 <x2> ミス! ドラコリッチにかわされた。 <x2>
以上の修正について検討する。
止めの一撃の方は、FORCE_MAXHPの値ではなくてその敵の最大HP(時間逆転とかで減ってる方)を使用するように変更しました。
採用の上、チケット完了としました。ありがとうございます。
hradish氏より報告された忍者のみの特別なヴォーパル処理について、 maxhpの値は本来モンスターの最大HPを目安にしていると思われるがFORCE_MAXが指定されているモンスターでない限り、大半が最大HPであっても即死処理に回る。
また、二刀流で命中率が極めて低かった時 右手の攻撃が全部外れた場合はまだ超隠密状態が維持されて左手の初撃で再度不意打ち判定があるので 数回の回避の後に不意打ちを食らう流れになる場合がある。
以上の修正について検討する。