WOLF RPGエディター(ウディタ)[3.175]/基本システム【サイトトップへ戻る】
■コモンイベント[163:X[戦]敵・味方行動対象算出]の解説
(更新:2023/04/24)


コモンイベント[163:X[戦]敵・味方行動対象算出]について解説します。


ショートカット
■コモンイベント[163:X[戦]敵・味方行動対象算出]って何?
■スロットに関して
■こうゆう時にこのコモンイベントを改造する
■[入力の数/結果を返す]について
■コモンイベント呼び出しの一覧
■セルフ変数の一覧
■イベントコマンドの解説

基本システムに関する説明は別ページに記載しています。
【基本システムに関する説明ページを見る】

コモンイベントの一覧と補足説明のページも用意しています。
【コモンイベントの一覧と補足説明のページを開く】


  
■コモンイベント[163:X[戦]敵・味方行動対象算出]って何?

コモンイベント[163:X[戦]敵・味方行動対象算出]は、攻撃や回復を行うターゲット(スロット)を決定する時に使います。



ターゲットが決まった場合は、決まったターゲットのスロットをセルフ[99]に設定します。
そして呼び出し元のコモンイベントにセルフ[99]の値を返します。

ターゲットが居ない場合はセルフ[99]に「-1」を設定して、呼び出し元のコモンイベントに返します。

なお、このコモンイベント[163:X[戦]敵・味方行動対象算出]の処理は、
次に攻撃や回復を行うターゲット1人のスロットを決定するものなので、
全体攻撃や全体回復などで複数のターゲットが居る場合は、
ターゲットの数だけこのコモンイベント[163:X[戦]敵・味方行動対象算出]が呼び出されます。



既に攻撃済みの他、戦闘不能や逃走済み(敵キャラのみ)、
ユーザーDB[8:状態設定]項目[38:敵からの狙われ度][-2:狙われず&全無効化]の状態異常になっているキャラは、
ターゲット候補から除外されます。

また項目[38:敵からの狙われ度][-1:狙われない[※当たる]]になっているキャラは、
単体攻撃ではターゲットから除外されますが、全体攻撃ではターゲット候補になります。

項目[38:敵からの狙われ度][1:全攻撃が集中]になっているキャラが1キャラでもいる場合は、
[1:全攻撃が集中]になっていないキャラは全体攻撃でも攻撃を受けなくなります。

[1:全攻撃が集中]になっているキャラが複数いる場合は、その中からターゲットが決定されます。
全体攻撃は[1:全攻撃が集中]になっているキャラのみが受けます。

[-2:狙われず&全無効化][-1:狙われない[※当たる]]は回復処理では無効となり、回復のターゲットになります。



指定した1体に攻撃(回復)の場合は、その指定した1体がターゲットになります。

指定した1体がターン処理中に戦闘不能などで選択不可になった場合は、ランダムで1体を決定します。

全体攻撃の場合は、順番にターゲットを決定します。

全体回復の場合は、全員一気に回復するため、1キャラずつ回復するキャラを決定する事はありません。



このコモンイベント[163:X[戦]敵・味方行動対象算出]かなり難解な処理であるため、
改造する際は処理構造をちゃんと理解した上で改造を行ってください。


▲トップへ戻る▲


  
■スロットに関して

このページにある「スロット」とは、可変DB[10:×┏ 戦闘一時ステータス[基]]データIDの事を言っています。

スロットの番号は、主人公の場合はパーティの並び順で一人目から「0、1、2…」と付けられ、
敵キャラの場合はユーザーDB[13:敵グループ]項目[0〜6]項目ID+10で「10、11、12…」と付けられます。

ユーザーDB[13:敵グループ]項目[0〜6](項目[3]に設定した敵キャラの場合はスロット[13]になる)


▼スロット(可変DB[10:×┏ 戦闘一時ステータス[基]]のデータID)


なお、
可変DB[11:×┣ 属性耐性計算結果]
可変DB[12:×┣ 状態耐性計算結果]
可変DB[13:×┣ 状態リスト]

の3つも可変DB[10:×┏ 戦闘一時ステータス[基]]と同じく「スロット=データID」で処理しています。


▲トップへ戻る▲


  
■こうゆう時にこのコモンイベントを改造する

以下のような改造を行いたい時にこのコモンイベントを改造します。

◆ランダムでターゲットを決める時に、
 状態異常にある「敵からの狙われ度」以外の条件でターゲットを決めたい。


◆全体攻撃の時に左から順番では無い順番で攻撃させたい。


▲トップへ戻る▲


  
■[入力の数/結果を返す]について

コモンイベント[163:X[戦]敵・味方行動対象算出][入力の数/結果を返す]の設定は、
基本システムが必要に応じて自動的に行いますので、基本システムの利用者は何も設定する必要はありません。

▼数値1/コモンセルフ0「対象アクション」

今回処理する可変DB[14:×┣ コマンド処理リスト]データIDを設定。
▼数値2/コモンセルフ1「どこまで処理済」

初回は「-1」を設定し、全体対象の場合で2回目以降は前に処理したスロットを設定。
▼結果を返す「単体対象」(セルフ変数[99:次の対象])

ターゲットのスロットを返します。
ターゲットが居ない場合は「-1」を返します。


▲トップへ戻る▲


  
■コモンイベント呼び出しの一覧

コモンイベント[163:X[戦]敵・味方行動対象算出]を呼び出しているコモンイベント、
またはコモンイベント[163:X[戦]敵・味方行動対象算出]から呼び出しているコモンイベントの一覧です。

コモンイベント[163:X[戦]敵・味方行動対象算出]を呼び出しているコモンイベント
コモンイベント(ID順) 処理内容
164:X[戦]行動実行結果算出 通常行動時にて、次のターゲットを決定する時に呼び出されます。
164:X[戦]行動実行結果算出 カウンター行動にて、次のターゲットを決定する時に呼び出されます。

コモンイベント[163:X[戦]敵・味方行動対象算出]から呼び出しているコモンイベント
コモンイベント(ID順) 処理内容
176:X[戦]基本状態取得 ターゲットを決める際の「狙われ度」や戦闘不能の有無の取得。

【コモンイベント呼び出しの一覧を別ウィンドウで表示】


▲トップへ戻る▲


  
■セルフ変数の一覧

コモンイベント[163:X[戦]敵・味方行動対象算出]のセルフ変数の一覧です。

セルフ変数
番号 名前 使用内容
0 対象アクション 今回処理する可変DB[14:×┣ コマンド処理リスト]データIDを設定。
1 どこまで処理済 初回は「-1」を設定し、全体対象の場合で2回目以降は前に処理したスロットを設定。
10 一時変数A データベースからの数値の取得やデータIDの取得などで使用。
11 一時変数B データベースからの数値の取得などで使用。
12 一時変数C 「X番の変数呼出」で値を取得する時に使用。
13 一時変数D 「変数呼び出し値」を設定し、「X番の変数呼出」で使用。
14 一時変数E コモンイベント[176:X[戦]基本状態取得]の戻り値の取得で使用。
16 発動スロット 可変DB[14:×┣ コマンド処理リスト]項目[0:発動者番号]を取得。
17 技能コード 可変DB[14:×┣ コマンド処理リスト]項目[3:発動技能]を取得。
0〜9999 ユーザーDB[0:技能]データID
10000〜19999 ユーザーDB[2:アイテム]データID+10000
20000〜29999 ユーザーDB[3:武器]データID+20000
30000〜39999 ユーザーDB[4:防具]データID+30000
18 対象者 可変DB[14:×┣ コマンド処理リスト]項目[2:受け側番号]を取得。
19 味方(0)or敵(1) 主人公側の処理の場合は「0」、敵キャラ側の処理の場合は「1」を設定。
20 対象数 主人公の行動処理の場合は、
可変DB[18:基本システム用変数]データ[4:現在パーティー人数]を設定。
敵キャラの行動処理の場合は、
可変DB[18:基本システム用変数]データ[69:[戦闘]敵の最大数(システム)]を設定。
セルフ[39]にも「対象数」がありますが、セルフ[20]とは用途が異なります。
22 敵に攻撃するスキル? 「主人公→敵キャラ」「敵キャラ→主人公」の技能発動の場合は「1」を設定。
30 単体(0) or 全体(1) 1体のみ場合は「0」、全体の場合は「1」を設定。
31 次に注目する対象は
40〜の何番目以降か
全体攻撃の際、何人目まで攻撃を行ったのかを設定。
変数名の「40〜」となっている部分は「セルフ番号40〜」と言う意味があります。
初期値は「-1」で、攻撃して生き残ったら「加算1」になります。
例えば4体の敵がいて、最初の敵に攻撃して敵が生き残ると「セルフ[31]=0」。
2体目も生き残ると「セルフ[31]=1」。
3体目を倒すと「セルフ[31]=1」のままとなり、4体目を攻撃します。

3体目を倒して「セルフ[31]=1」のままで、なぜ4体目を攻撃するのかと言うと、
セルフ[40〜46]生き残っている者だけが登録されるため、敵が4体いる時には…
セルフ[40]=敵1のスロット
セルフ[41]=敵2のスロット
セルフ[42]=敵3のスロット
セルフ[43]=敵4のスロット

となりますが、敵3を倒すと…
セルフ[40]=敵1のスロット
セルフ[41]=敵2のスロット
セルフ[42]=敵4のスロット
セルフ[43]=-1

になり、3番目の所に敵4が登録されるため、
それで3番目の敵をもう一度攻撃するような設定になっています。
34 一時コード セルフ[17]の値をコピー。
39 対象数 攻撃対象者の数をカウントし、
ランダムで1体攻撃する時の乱数の設定や全体攻撃で何体に攻撃するのかを設定。
40-46 対象1
対象2
対象3
対象4
対象5
対象6
対象7
戦闘不能ではないキャラのスロットをセルフ[40〜46]へ順番に設定します。
例えばスロット[10][15][16]の敵キャラがいる場合は…
セルフ[40]=15
セルフ[41]=10
セルフ[42]=16

と画面の左に居る敵キャラから順番にセルフ[40〜46]へ設定します。
敵キャラからの攻撃を受ける主人公が3人いる場合は…
セルフ[40]=0
セルフ[41]=1
セルフ[42]=2

となります。
スロットの設定が無かったセルフ変数は「-1」を設定します。
セルフ[40〜46]に登録されるスロットは戦闘不能ではないキャラになるので、
主人公が3人いる所で、スロット[1]の主人公が戦闘不能になった場合は…
セルフ[40]=0
セルフ[41]=2
セルフ[42]=-1

と言った設定になります。
59 未使用 セルフ[59]は使用中になっていますが、実際には使用しておりません。
使用中になっている原因は、
セルフ[60〜66]に「X番の変数呼出」で値を設定するために、
セルフ[13]に「1600059(変数呼び出し値)」を設定するイベントがあるためです。
60-66 対象順1
対象順2
対象順3
対象順4
対象順5
対象順6
対象順7
全体攻撃を主人公か敵キャラに行った際の処理するスロット順を設定。
この処理順は、画面の左にいるキャラから順番に設定されます。
セルフ変数 主人公の時のスロット 敵キャラの時のスロット
60 0 15
61 1 13
62 2 11
63 3 10
64 4 12
65 5 14
66   16

▼水色数字がスロット番号、黄色数字がセルフ変数番号
狙われ度[1:全攻撃が集中]の状態異常の主人公がいる場合は、
狙われ度[1:全攻撃が集中]以外のキャラのセルフ[60〜66]は全て「-1」を設定。
このセルフ[60〜66]セルフ[70〜76]は一の位で連動しており、
例えばセルフ[62]狙われ度[1:全攻撃が集中]の有無はセルフ[72]に設定。
70-76 対象1狙われ度
対象2狙われ度
対象3狙われ度
対象4狙われ度
対象5狙われ度
対象6狙われ度
対象7狙われ度
ユーザーDB[8:状態設定]項目[38:敵からの狙われ度]にある
1:全攻撃が集中」の状態異常になっている場合は「1」を設定。
1:全攻撃が集中」以外の場合は「0」を設定。
なお、セルフ[71〜76]は未使用状態になっていますが、実際には使われています。
79 最大狙われ度 ユーザーDB[8:状態設定]項目[38:敵からの狙われ度]の状態異常で
狙われ度[1:全攻撃が集中]になったキャラが1キャラでも居る場合は「1」を設定。
セルフ[79]=1」の場合は、狙われ度[1:全攻撃が集中]になっていないキャラの
セルフ[60〜66]は全て「-1」にする処理を実行。
99 次の対象 [結果を返す]で使用。
このコモンイベントを呼び出した呼び出し元に次のターゲットスロット
可変DB[10:×┏ 戦闘一時ステータス[基]]データID)を返します。

ターゲットが居ない場合は「-1」を返します。

【変数の一覧を別ウィンドウで表示】


▲トップへ戻る▲


  
■イベントコマンドの解説

イベントコマンドの解説を行います。

なお、見た目で設定内容が分かるような簡単なイベントコマンドの解説は省略しています。

処理内容
7-9 今回処理する可変DB[14:×┣ コマンド処理リスト]のデータをセルフ[16〜18]に取得。
11-48 ▼ アイテムや武器・防具の使用による技能発動の場合 は「技能」コードに変換
アイテム使用の場合は分岐し、アイテム使用で技能が発動する場合は、
発動する技能ID(ユーザーDB[0:技能]データID)をセルフ[17]に取得。
技能発動のアイテム使用では無かった場合は、セルフ[17]は「10000以上」のままになります。
51-73 ▼ 基本は 「味方・単体」 の値で初期化
今回の行動が「敵対象or味方対象」「全体or単体」をセルフ[19]セルフ[30]に設定。
設定 セルフ[19:味方(0)or敵(1)] セルフ[30:単体(0) or 全体(1)]
単体+味方 0 0
全体+味方 0 1
単体+敵 1 0
全体+敵 1 1
74-94 ▼ 敵に攻撃するスキルかチェック
今回の行動が「敵に攻撃する技能を使用」の場合は、セルフ[21]に「1」を設定。
回復系の技能や回復アイテムの使用などの場合は、セルフ[21]に「0」を設定。
96-106 ▼ ターゲットが「単体」で、前の対象が-1以外なら、一回以上行動したのですぐ終了する
ターゲットが単体でも、このコモンイベント[163:X[戦]敵・味方行動対象算出]は2回呼び出されます。
1回目の場合はセルフ[1]が「-1」ですが、2回目の場合は前に行動を行ったターゲットのスロットが
セルフ[1]に設定されており、「-1以外」になります。
そのため、セルフ[1]が「-1以外(2回目)」の時には、
既にターゲットに対する行動が終了しているので、ここで処理を終了させます。
108-135 ▼ 対象リストを作成
今回処理する主人公側、または敵キャラ側の処理するスロット順をセルフ[40〜46]に設定。
136-198 ■回数付きループ [ 1 ]回
状態異常の狙われ度[1:全攻撃が集中]になっているキャラを検索します。
  138-155 今回の処理が「主人公→主人公」「敵キャラ→敵キャラ」などと味方に対する行動である場合は、
狙われ度を無視して行動するため、ラベル「攻撃集中判定終了」までジャンプ。
  156-177 状態異常の狙われ度[1:全攻撃が集中]になっているキャラを検索し、
「全攻撃が集中ではない=0」「全攻撃が集中である=1」をセルフ[70〜76]に設定。
そして1キャラでも「全攻撃が集中である=1」が居た場合は、セルフ[79]を「1」にする。
なお、セルフ[60-66]の値が「-1」であり、スロット番号が設定されていない場合は、
■ループ開始へ戻る」を実行して狙われ度[1:全攻撃が集中]を検索しません。
  178-196 ▼ もし狙われ度が「1」(全部受ける)なら、そのキャラ以外のコードを-1にする
狙われ度[1:全攻撃が集中]のキャラが1キャラ以上居た場合は分岐し、
狙われ度[1:全攻撃が集中]では無いキャラのセルフ[60〜66]のスロットを「-1」にする。
201-340 ■回数付きループ [ CSelf20[対象数] ]回
セルフ[60〜66]に設定されているスロットを順番に読み込み、
ターゲットとなるスロット番号をセルフ[40〜46]に登録。
全体攻撃で既に攻撃済みのスロットはセルフ[40〜46]には登録されない。
また狙われ度[1:全攻撃が集中]が1キャラでもいる場合は、
狙われ度[1:全攻撃が集中]ではないキャラのセルフ[60〜66]は「-1」になっており、
セルフ[60〜66]が「-1」になっているキャラはセルフ[40〜46]には登録しません。
  206-214 ▼ 次の対象スロットを読み込む
セルフ[60〜66]に保存されたスロットを呼び出し、
「-1以下」の場合は 「■ループ開始へ戻る」を実行。
  215-220 ■条件分岐(変数): 【1】 CSelf1[どこまで処理済] が CSelf12[一時変数C] と同じ
前回処理したスロットの場合は分岐し、セルフ[39]を「減算1」にした値をセルフ[31]に設定。
セルフ[31]に設定される値は「前回処理したキャラの並び順−1」になります。
この時点では前回処理したスロットを「倒した」としていますが、
もしも前回処理したスロットが生きている場合は、333-338行目の処理で「加算1」を実行します。
  221-231 ■条件分岐(変数): 【1】 CSelf19[味方(0)or敵(1)] が 1 と同じ
敵への攻撃の場合は分岐し、戦闘不能をチェックし、戦闘不能である場合は、
■ループ開始へ戻る」を実行して、このスロットは処理しないようにします。
  232-327 処理中のスロットの狙われ度(ユーザーDB[8:状態設定]項目[38:敵からの狙われ度])を
セルフ[14]に取得し、単体攻撃か全体攻撃で分岐。
そして狙われ度の設定が「狙われない」になっているかどうかを確認します。
    235-292 ▼ 単体対象の技能を受ける場合
以下の条件に当てはまる時に「■ループ開始へ戻る」を実行し、ターゲット候補から外します。
発動者が主人公で、ターゲットが敵キャラの場合、
ターゲットの狙われ度が「-1以下(狙われない)」の時にはターゲットにしない。
発動者が敵キャラで、ターゲットが主人公の場合、
ターゲットの狙われ度が「-1以下(狙われない)」の時にはターゲットにしない。
発動者が主人公で、ターゲットも主人公の場合で、仲間の主人公へ攻撃する行う状態でも、
ターゲットの狙われ度が「-1以下(狙われない)」の時にはターゲットにしない。
ここの狙われ度のチェックをクリアしたあとに、確認したスロットがターゲットであった場合は、
セルフ[99]にスロットを設定して、「■イベント処理中断」を実行して処理を終了させます。
    295-325 ▼ 全体対象の技能を受ける場合
以下の条件に当てはまる時に「■ループ開始へ戻る」を実行し、ターゲット候補から外します。
ターゲットが敵キャラで、敵キャラ全体への攻撃の場合、
狙われ度が「-2(狙われず&全無効化)」のスロットはターゲットにしない。
ターゲットが主人公で、主人公全体への攻撃の場合、
狙われ度が「-2(狙われず&全無効化)」のスロットはターゲットにしない。
  328-332 ▼ ここまで問題なく到達できたらリストに追加
セルフ[10]には「変数呼び出し値=1600040(セルフ[40]の呼び出し値)」が設定されています。
このセルフ[10]が指定する変数番号にターゲット候補のスロットを登録し、
セルフ[10]の値を「加算1」にして、次の変数番号(変数呼び出し値)を設定。
  333-338 ■条件分岐(変数): 【1】 CSelf1[どこまで処理済] が CSelf12[一時変数C] と同じ
前回攻撃したスロットがまだ生きている場合は分岐し、セルフ[31]を「加算1」にする。
これは215-220行目にてセルフ[31]に前回のスロットをターゲットにする設定を行っており、
セルフ[31]を「加算1」にしないと、全体攻撃の際、再び前回のスロットの敵に攻撃してしまい、
敵が死ぬまでずっと攻撃し続ける状態になります。
341 ▼ 発\cself[16] > \cself[18] 対象List \cself[40]/\cself[41]/\cself[42]/\cself[43]/
  \cself[44]/\cself[45]/\cself[46]
デバッグ用の設定です。
テストプレイの際、【デバッグ文】に変えて使用します。
345-410 ▼ ターゲットが存在するか&狙えるか
単体攻撃(ランダムで1体)か全体攻撃かで分岐。
なお、指定した1体の敵へ攻撃を行う場合は、290行目で処理を終了させているので、
ここで処理する単体攻撃は「敵一体にランダム」になります。
  349-378 ▼ 単体なら、選択できるランダム一体を選ぶ
ターゲットが1体以上居る場合は分岐。
    351-357 ▼ すでに1体分処理してたら終了  (単体処理なので)
既に1体へ攻撃済みなので、セルフ[99]に「-1(ターゲット無し)」を設定して処理を終了させます。
    358-376 ▼ 選択可能な一覧(コモンセルフ40〜)からランダム選択
戦闘不能有無や狙われ度などの確認処理を経て、
セルフ[40〜46]にはターゲットになる候補のスロットが設定されています。
そのターゲット候補から1体のスロットを選択し、セルフ[99]にそのスロットを設定します。
例えばターゲット候補が3体いる場合は、
セルフ[40〜42(1600040〜1600042)]の中から1体を選択します。
なお、「それ以外(セルフ[12]が-1以下)」の場合は、
【文章の表示(エラーメッセージ)】が表示されます。
初期設定ではこのエラーは表示されませんが、
改造設定を失敗した時にはこのエラーが表示される可能性があります。
  381-383 ▼ 全体なら次の一体
前回のターゲットの次のターゲットのスロットが保存されている
変数呼び出し値(1600040〜1600046)」をセルフ[10]に設定。
  384-392 ターゲットの総数−処理済み人数」で「0以下(もうターゲットにする者がいない)」場合は分岐し、
セルフ[99]に「-1(ターゲット無し)」を設定して処理を終了させます。
  393-408 ▼ 対象が残っているなら次の一体を選択
次のターゲットのスロットをセルフ[12]に取得し、
スロットがある場合(0以上)は分岐し、セルフ[99]にそのスロットを設定。
なお、「それ以外(セルフ[12]が-1以下)」の場合は、
【文章の表示(エラーメッセージ)】が表示されます。
初期設定ではこのエラーは表示されませんが、
改造設定を失敗した時にはこのエラーが表示される可能性があります。
412-414 ▼ それでも狙える対象がいなかったらアクション中止(-1を返す)
ターゲットが決まった場合は、ここへ来る前の段階で「■イベント処理中断」が実行されており、
この412行目まで処理されていると言う事は「ターゲットが居なかった」となるため、
セルフ[99]に「-1(ターゲット無し)」を設定して処理を終了させます。


▲トップへ戻る▲



◎関連ページ

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

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