WOLF RPGエディター(ウディタ)[3.282]/基本システム【サイトトップへ戻る】
■戦闘処理の当たり判定(命中率・回避率)について
(更新:2024/02/24)


ウディタに初めから用意されている戦闘システムの当たり判定(命中率・回避率)について解説します。


ショートカット
■当たり判定(命中率・回避率)の基本
■当たり判定のイベント処理を解説
■回復系の技能の設定について
■敏捷性について

画像の当たり判定については、別ページで紹介しています。
【画像の当たり判定についてのページを開く】


  
■当たり判定(命中率・回避率)の基本

戦闘中の当たり判定の処理には「技能を使用する者の命中率」と「技能を受ける者の回避率」を使います。

基本的に「命中率−回避率=攻撃が当たる率」となっているため、
例えば「命中率=80」「回避率=20」の場合は「80−20=60」となり、60%の確率で攻撃が当たります。

命中率よりも回避率の方が高い場合は、全ての攻撃が攻撃ミスになります。



キャラクターごとの命中率や回避率は、
主人公の場合は可変DB[0:主人公ステータス]項目[15][16]で設定し、
敵キャラの場合はユーザーDB[9:敵キャラ個体データ]項目[9][10]で設定します。

命中率や回避率は状態異常で変動する事があり、また主人公の場合は武器や防具を装備する事で変動する事があります。

そのため、戦闘時の処理では、キャラクターごとの基本命中率や基本回避率に、
状態異常や装備品による変動値を加えたものを可変DB[10:×┏ 戦闘一時ステータス[基]]項目[53][54]へ保存し、
この項目[53][54]に保存した値を使って当たり判定を処理します。



命中率や回避率には上限が無いため、キャラクターごとに設定した基本命中率や基本回避率(レベルアップ時の増加量)、
状態異常の増加率、装備品の増加量などによって、100を超えた値になる事があります。

そのため「回避率=100」であっても、命中率が100を超えている場合は、攻撃が当たります。



基本的には「命中率−回避率=攻撃が当たる率」になっていますが、
ユーザーDB[0:技能]の設定によっては「回避率を無視する(使わない)」となる場合があります。

以下は当たり判定の処理に関係があるユーザーDB[0:技能]の設定の一覧です。

ユーザーDB[0:技能]の項目IDと項目名 仕様
7:成功率[%] [-1:命中依存] -1以下」の場合は、可変DB[10]項目[53:[一時]計算済み命中率]に、
ユーザーDB[0:技能]項目[31:武器依存時命中補正±%]を足した命中率になります。
0以上」の場合は、ここで設定した値がそのまま命中率になります。
31:武器依存時命中補正±% ユーザーDB[0:技能]項目[7:成功率[%] [-1:命中依存]]が「-1以下」の場合は、
可変DB[10]項目[53:[一時]計算済み命中率]に、
この項目[31]の値を足したものが命中率になります。
ユーザーDB[0:技能]項目[7:成功率[%] [-1:命中依存]]が「0以上」の場合は、
この項目[31]の値は使用されません。
33:相手の回避率を [0]<無視する>」の場合は、技能を使用する相手の回避率を無視して、
命中率のみで当たり判定を処理します。
[1]考慮する」の場合は、技能を使用する相手の回避率を使用し、
命中率−回避率」で当たり判定を処理します。



当たり判定で「攻撃が当たらなかった」と判断された場合は、技能を使う対象者の上に「ミス!」が表示されます。

この「ミス!」の表示はコモンイベント[181:X[戦]ダメージ・回復ポップアップ]を呼び出して表示しているので、
もしも「ミス!」の表示を「MISS」などに変えたい場合は、
コモンイベント[181:X[戦]ダメージ・回復ポップアップ]177行目の設定を変えてください。

なお、当たり判定で「攻撃が当たった」と判断されても、攻撃相手の防御力が高かったり、
攻撃相手の属性耐性が「0%[無効化]」だった場合は、ダメージ量が「0」になる事があります。



マップ移動中にメニュー画面から技能を使用した場合は、無条件に100%の命中率になります。


▲トップへ戻る▲


  
■当たり判定のイベント処理を解説



戦闘中の当たり判定のイベント処理は、コモンイベント[165:X[戦]┗単体処理]312〜329行目にあります。

なお、312〜329行目ウディタ[3.282]の時の行数であるため、バージョンが異なるウディタでは行数がずれる可能性があります。



▼ 【2.1】 成功率が技能依存か武器依存時かで分岐
■DB読込(ユーザ): CSelf40[成功率] = ユーザDB[ 技能 : CSelf1[発動技能] : 成功率[%] [-1:命中依存] ] (0 : - : 7)
■条件分岐(変数): 【1】 CSelf40[成功率] が -1 以下
-◇分岐: 【1】 [ CSelf40[成功率] が -1 以下 ]の場合↓
|■DB読込(可変): CSelf40[成功率] =
         可変DB[ ×┏ 戦闘一時ステータス[基] : CSelf0[発動スロット] : [一時]計算済み命中率 ] (10 : - : 53)
|■DB読込(ユーザ): CSelf40[成功率] += ユーザDB[ 技能 : CSelf1[発動技能] : 武器依存時命中補正±% ] (0 : - : 31)
|■
◇分岐終了◇

技能の使用者の命中率をセルフ変数[40]に保存します。

ユーザーDB[0:技能]項目[7:成功率[%] [-1:命中依存]]が「0以上」の場合は、
項目[7:成功率[%] [-1:命中依存]]の値をそのまま命中率としてセルフ変数[40]に保存します。

ユーザーDB[0:技能]項目[7:成功率[%] [-1:命中依存]]が「-1以下」の場合は、
可変DB[10:×┏ 戦闘一時ステータス[基]]項目[53:[一時]計算済み命中率]に、
ユーザーDB[0:技能]項目[31:武器依存時命中補正±%]を足したものをセルフ変数[40]に保存します。



▼ 相手回避率の影響を受ける技能なら補正
■DB読込(ユーザ): CSelf10[一時変数A] = ユーザDB[ 技能 : CSelf1[発動技能] : 相手の回避率を ] (0 : - : 33)
■条件分岐(変数): 【1】 CSelf10[一時変数A] が 1 と同じ
-◇分岐: 【1】 [ CSelf10[一時変数A] が 1 と同じ ]の場合↓
|■DB読込(可変): CSelf40[成功率] -=
         可変DB[ ×┏ 戦闘一時ステータス[基] : CSelf2[対象スロット(単)] : [一時]計算済み回避率 ] (10 : - : 54)
|■
◇分岐終了◇

ユーザーDB[0:技能]項目[33:相手の回避率を]が「[1]考慮する」の場合は、
命中率を保存したセルフ変数[40]に、技能を受ける者の回避率を減算します。



▼ 【2.2 判定】 命中判定
■変数操作: CSelf40[成功率] -= 0 〜 99
■条件分岐(変数): 【1】 CSelf40[成功率] が 0 以下 【2】 CSelf40[成功率] が 1 以上

セルフ変数[40]乱数[0〜99]減算して、「0以下=攻撃ミス」「1以上=攻撃が当たった」と判断します。

例えば「セルフ変数[40]=80」(命中率80%)の場合は、セルフ変数[40]乱数[0〜99]で減算すると「-19〜80」となり、
-19〜0=攻撃ミス(確率20%)」「1〜80=攻撃が当たった(確率80%)」と処理されます。


▲トップへ戻る▲


  
■回復系の技能の設定について

回復系の技能を実行した時に、ユーザーDB[0:技能]の設定内容によっては、
回復処理をミスしたり、回復量が「0」になったりする事があります。

もしも回復系の技能が上手く処理できない場合は、ユーザーDB[0:技能]にある以下の項目を見直してください。

ユーザーDB[0:技能]の項目IDと項目名 見直す部分
7:成功率[%] [-1:命中依存] -1以下」の場合は、通常の攻撃処理と同じ命中率になってしまうため、
攻撃ミスが発生する場合があります。
もしも100%の確率で回復処理を実行したい時には、
この項目[7]の設定を「100」にしてください。
8:┏ 何に影響する? [-1]<なし>」にすると、HPやSPを増減する処理は実行されません。
なお、HPやSPを増減する処理が不要であり、
単に状態異常だけを付与、または回復させたい時には、
この項目[8]の設定を「[-1]<なし>」にしてください。
17:付与属性 属性を設定している場合で、回復量が減ってしまう(0になる)場合は、
回復相手の可変DB[3:┣ 属性耐性]の設定を確認してください。
18:発動回数/武器の影響 武器依存」にすると、武器に設定した属性などが反映されます。
33:相手の回避率を [1]考慮する」にすると、回復させる相手の回避率が反映されて、
回復処理を避けてしまう(攻撃ミスになる)可能性があります。
もしも100%の確率で回復処理を実行したい時には、
この項目[33]の設定を「[0]<無視する>」にしてください。
34:相手の防御・精神防御を この項目[34]の設定を「1%以上」にすると、
回復相手の防御力の高さに反比例して、回復量が減ってしまいます。
もしも回復相手の防御力に関係なく、常に100%の回復量にする場合は、
この項目[34]の設定を「[0]<完全に無視する>」にしてください。


▲トップへ戻る▲


  
■敏捷性について

パラメータの設定項目に「敏捷性」と言ったものがあります。

この敏捷性は戦闘時のターン処理にて、行動を開始する順を決める時に使います。

敏捷性が高いほど、毎ターンごとの行動順が早くなりますが、
敏捷性がいくら高くても、当たり判定(攻撃を避ける能力)には影響しません。


▲トップへ戻る▲



◎関連ページ

◆【戦闘時】当たり判定を[命中率−回避率]から[命中率×(100−回避率)]に変える

◆コモンイベント[165:X[戦]┗単体処理]
◆コモンイベント[181:X[戦]ダメージ・回復ポップアップ]

◆「基本システム」って何?
┣◆コモンイベントの一覧と補足説明
┣◆メニュー画面の処理構造
┗◆戦闘処理の処理構造

◆画像の当たり判定について

YADOT-WOLFトップ  気紛れな空間へ戻る  メール