TOP > 戦闘関係の知識 > ターン > 行動順の詳細

ターンや行動順の詳細

戦闘における行動順やターンについて、もう少し突っ込んだ話をここに記しておく。
以下は、先に▶ターンを読んでいただいていることを前提としている。
また、世界の合言葉は森部 new window様、ZsnsK's F**kin' Site new window様の内容をほぼ転載しているようなものだが、一応、プログラミング関係の知識がなくてもわかるように努めたつもりである(筆者もプログラミングのことはよくわからない)。
とはいえ、ある程度の数学の知識が必要になることをご了承いただきたい。

行動順を理解する上で重要なのは、

  1. 行動ポイント(敵味方共通)
  2. 敵味方それぞれの「速」の値
  3. 敵にそれぞれ設定された順序ポイント

この3つである。

行動ポイントの計算方法

行動ポイントが増減することで、味方ターンと敵ターンが切り替わっている、とターンで説明した。

  1. 行動ポイントは、戦闘開始時は「0」であり、味方が行動すると増え、敵が行動すると減る。
  2. 行動ポイントが255を越えると敵ターンとなり、敵の中で順序ポイントが一番高い敵が行動する。
  3. 敵の行動により行動ポイントが255未満になると、味方にターンが回ってくる。

というのが基本的な仕組みである。
ただし例外として、敵の場合、「何かの行動を取ると、行動ポイントの値に関わらず停止して、敵ターンが終わる」ようになっており、上の2.より優先される。

味方が技を出すかアイテムを使う(アイテム使用も実際は技扱いである)と、行動ポイントが510増加する。
このため、味方が技を出すと、行動ポイントが必ず255以上になって、敵ターンに切り替わる。
上に書いた例外に従い、敵は敵ターンで「1マス移動か、向き変えか、技を出す」と、必ず敵ターンが終わって味方にターンが周る仕組みになっている。
敵ターンでは、敵が取った行動に従い、行動ポイントが必ず「減少」する。

  • 敵が技を出す:
    後で述べる計算式に従い、行動ポイントが16以上128未満になる
  • 敵が移動または向き変えをする:
    後で述べる計算式に従い、移動時は1~64、向き変え時は1~32、行動ポイントが減少する

敵が移動または向き変えをした時は、行動ポイントは最大でも64しか減らない。
味方の行動で510増加→敵の移動または向き変えで64減ったとしても、行動ポイントは255以上のはずだから、本来なら敵ターンが続いてしまうはず。
だが、上に書いた通り、敵の場合は何かの行動後は行動ポイントに関係なく停止し、味方ターンが周る。
味方ターンでは、「行動ポイントが255を越えると敵ターンとなる」法則通りに、味方の行動で行動ポイントが255を越えたら、また敵ターンになる。
敵が移動または向き変えをした後だと、上に記した通りに、そもそも味方ターンに回った時、既に255を越えている。
このため、味方が移動か向き変えなど、何か行動をした途端に敵ターンに回ってしまうのである。
これが、「敵と距離を離そうとしてもぴったり後をくっついてくる」などの現象の正体である。

一方で、敵ターンで敵が何かしらの技を出して行動ポイントが16以上128未満になった状態で味方ターンになると、行動ポイントが255を越えるまで余裕がある。
よって味方ターンにて、「何マスか移動した後、敵を攻撃する」といった行動が可能になるのである。

以下で細かい計算について記しておく。

敵が技を出した後の行動ポイント計算

「敵ターンで敵が何かしらの技を出したら、行動ポイントは16以上128未満になる」のだが、敵が技を出した後の行動ポイントは、以下のように計算される。

(敵が技を出した時の行動ポイント) & 111 | 16
※ここの「&」はビット演算の論理積、「|」はビット演算の論理和

プログラミングの知識がないとわかりにくいため解説するが、面倒なら飛ばしてもらって構わない。

「ビット演算」というのはデータをビット列、つまり2進法で記した場合での演算である。
ビット演算 - Wikipedia
111の2進数は「1101111」、
行動ポイントが、味方が1回技を出した後の「510(10進数)」とすると、2進数では「111111110」である。
その「論理積」というのは、これら2進数表記での「それぞれの桁を比較し、どちらも1なら1、それ以外は0になる計算」と考えていただきたい。
以下表を縦方向に見るとわかりやすいと思う。

510の2進数111111110
111の2進数001101111
論理積001101110(10進数だと110)

「論理和」は2進数表記での「それぞれの桁を比較し、どちらも0なら0、それ以外は1になる計算」と考えていただきたい。
「110 | 16」は、

110の2進数01101110
16の2進数00010000
論理和01111110(10進数だと126)

以上より、

510 & 111 | 16 = 126

よって、行動ポイントが510の時に、敵が技を出すと、その後の行動ポイントは126まで落ちる。
ということになる。

と、計算式を書き連ねてきたが、あくまでも理屈はこうだというだけであり、難しく考えすぎる必要はないし、手計算もわざわざやる必要はない。
人間がせっせと計算するとただ面倒なようにしか見えないが、プログラミングにおいては高速処理かつ容量の節約のテクニックになるのである。

ちなみに、プログラミングができる環境でなくても、ビット演算ができる電卓、例えばWindows付属(Windows 10以降)の電卓なら機能をプログラマー向け電卓に切り替えて、
510 AND 111 OR 16 =
と打ち込めば計算してくれるし、Excelなど表計算ソフトなら、列Aに行動ポイントを入れて、他のセルに、
=BITOR(BITAND(A1,111),16)
と、計算式を入力すれば計算してくれるはずである。

おまけ:
(敵が技を出した時の行動ポイント) & 111 | 16を計算するフォームは以下。

行動ポイント入力:

0~65535の整数のみ入力できます


「計算する」をクリックで
ここに計算値が表示されます。

結局、上の計算でいったい何が行われたのかというと、
(敵が技を出した時の行動ポイント) & 111
は値が必ず0以上111以下になり、
(0以上111以下の数値) | 16
は値が必ず16以上127以下になる。
そういう計算で行動ポイントを減少させたと思っておけば問題ない。

移動または向き変え時の行動ポイント増減の計算

「敵が移動または向き変えをした時は、移動時は1~64、向き変え時は1~32、行動ポイントが減少する」について記す。
これは敵味方共通の、移動または向き変え時の行動ポイント増減の計算方法になる。
味方の場合は以下の計算分の値だけ増え、敵の場合は減る。

1マス分の移動の行動ポイント増減量 = 64 − 速の現在値 / 4
(「速の現在値 / 4」は、小数点以下切り捨て)
向き変え時の行動ポイント増減量は、上の計算値の1/2(小数点以下切り捨て)

つまり、「速」の値が高いキャラは行動ポイント増減量が小さくなり、「速」の値が低いキャラは行動ポイント増減量が大きくなる。
そして計算式から、「速の現在値/4」は最小で0、最大で255/4であるから、「1マス分の移動の行動ポイント増減量」の最大値は64で、最小値は1ということになる。
ターンに記した「1ターンで味方キャラが移動できるマスの数」は、上計算式を使っている。
戦闘開始時は行動ポイントが0であるから、255になるまでマス目を移動できることになる。
つまり、

255 ÷ {64 − (速の現在値/4)}

は、「戦闘開始時に敵ターンに周るまで味方が移動可能なマス目の数」になる。
これが正確に成り立つのは「戦闘開始時」だけである。
敵が技を出して行動ポイントが16以上128未満にまで減って味方ターンに回ったとする。
次の敵ターンまでは、255 − (現在の行動ポイント)である。
255より少なくなっているため、移動可能なマス目の数は減って、計算式としては、

{255 − (現在の行動ポイント)} ÷ {64 − (速の現在値/4)}

ということになる。
敵が技を出した後の行動ポイントは、上で述べた通り、最大だと127である。
「現在の行動ポイント」の部分に127を代入してみるとわかるが、この時は、移動可能なマス目の数が戦闘開始時の半分くらいまで減ってしまう、ということになる。

※基本的に本作の計算式では、計算途中に小数点以下の端数が出た時は切り捨てる処理になっているようである。
「64 − 速の現在値 / 4」を計算する時、「64 − 速の現在値 / 4」の全体を計算してから小数点以下を切り捨てるのと、「速の現在値 / 4」の計算結果を小数点以下切り捨てして64から引き算するのとでは、答えが変わってしまうことに注意。
ちなみに、上で延々説明した「ビット演算」の論理積も「あるビットの値を0にして切り捨てる」という数値の切り捨て操作のようなものである。
(0を1にする、または1を0にする操作は、ゲームにおいてフラグのON・OFFにも使えるので、ビット演算はゲームの進行フラグの管理にも便利だということである)

もうちょっと一般的に、例えばExcelなど表計算ソフトの関数で言えば、TRUNC関数を使って、
1マス分の移動の行動ポイント増減量 = 64 − TRUNC(速の現在値 / 4)
で小数点以下切り捨てを表現できる。

例:現代編のナムキャット戦

ここまで文章でのみ説明してきたのでわかりにくいと思われるが、実際の例を示してみる。
シンプルに、味方と敵が1体ずつの戦闘、ここでは現代編のナムキャット戦を例に取り上げる。
高原の「速」は31、ナムキャットの「速」は60である。
初期配置は以下の通り。
行動ポイントは「0」から開始になる。

□□□□□□
□□□□□□
□□□□□□
□□□□□□□
□□□□□
□□□□□□□
□□□□□□□

高原がナムキャットを攻撃するために移動する場合、1マスの移動で増える行動ポイントは、

64 − 速の現在値 / 4 = 64 − 31/4
31/4 = 7.75なので、小数点以下切り捨てで、
64 − 7 = 57

高原の移動1マスにつき、57ずつ行動ポイントが増えていく、ということになる。
4マス移動すると、57×4 = 228
5マス移動すると、57×5 = 285で、この時点で255を越えるため、5マス移動直後にナムキャットにターンが回って、何かしら行動してくる。

つまり、高原が上1マス→左3マス移動(合計4マス移動)で、

□□□□□□
□□□□□□
□□□□□□
□□←←↑□
□□□□□●□
□□□□□□□
□□□□□□□

ここまで移動する間は、ナムキャットは何もしない。行動ポイントが255未満だからである。
だが次に高原が1マスどこかへ移動すると、行動ポイントが255を越えてしまうため、ナムキャットにターンが周る。
例えば上の状態で高原が左に1マス移動すると、

□□□□□□
□□□□□□
□□□□□□
←□□□□
□□□□□□□
□□□□□□□
□□□□□□□

高原がナムキャットの右下に移動した直後、ナムキャットは右下の高原に「ローキック」「イナズマアッパー」「パンチャマキック」あたりで攻撃してくるだろう。
プレイヤーからすれば移動と同時に攻撃されているように見えるが、ゲーム内の処理が一瞬なのでそう見えるというだけで、実際には移動の直後に攻撃をされている。
初期配置で高原とナムキャット右下マスの距離が最短距離で5マスなので、攻撃してみようとナムキャットへ向け5マス移動すると、ちょうどナムキャットの懐に飛び込んでしまって攻撃される、という初見殺しな罠である(これが現代編の初見プレイの難易度を上げている原因でもある……)。

とにかく、この時点で285まで増えた行動ポイントだが、ナムキャットが高原を攻撃することにより減少することになる。
先に上げたややこしい計算式により、ナムキャットの攻撃後の行動ポイントは、以下のように計算される。

285 & 111 | 16 = 29

ナムキャットの攻撃後、29まで行動ポイントが減少して、高原にターンが回ってくる。
では、ここで「どう回し回転げり」で回転嵌めを狙ってみる。
高原が技を出すと、攻撃が当たるかどうか、回転するかどうかは関係なく、行動ポイントが510増加する。
つまり行動ポイントは、

29 + 510 = 539

となる。
ここでは回転が成功したものとする。つまりナムキャットが左下向きになり、行動ポイントが539になる。
ナムキャットにターンが周ると、左下向きから右下向きに向き変えをする。
向き変えでの行動ポイント増減量は、

(64 − 速の現在値 / 4 ) / 2

ナムキャットの「速」は60なので、

(64 − 60 / 4 ) / 2=24.5

小数点以下切り捨てで24。
つまり、行動ポイントは24減少して、

539 − 24 = 515

となる。
255を越えているが、「敵は何かの行動を取ると、行動ポイントの値に関わらず停止して、敵ターンが終わる」という大原則があるので、高原にターンが周る。
この時に高原が1マス右に移動すると、ナムキャットがぴったり高原を追いかけてくるようになるが、これは「行動ポイントが255越えなので、高原が1マス移動しただけで即座に敵ターンが回って、延々と追いかけられる」という、よく見かける現象になる。
もちろん上1マスなど敵の技の射程内に移動した場合は、攻撃されることになる。

□□□□□□
□□□□□□
□□□□□
□↑□□□□□
□□□□□□□
□□□□□□□
□□□□□□□

高原が1マス上に移動したことで、行動ポイントが57増える。
つまり、

515 + 57 = 572

そしてナムキャットにターンが回って、何かしら攻撃されるだろう。
これにより、

572 & 111 | 16 = 60

行動ポイントが60に減少して、高原にターンが周る。
行動ポイントが255を越えるまでは、高原の行動中、ナムキャットは何もしてこない、ということになる。

60 + 57 + 57 + 57 = 231
60 + 57 + 57 + 57 + 57 = 288

であるから、高原が3マス移動するまではナムキャットは何もしないが、4マス移動すると255を越えるため、ナムキャットが何かしら行動することになる。
戦闘開始時は4マス移動できたが、このタイミングだと3マスしか移動ができないのである。

……というような理屈で、味方と敵のターンの回り方や、ターン内でできる行動が決まっているのである。

行動順とタメ時間

ターンにおいて、タメ時間のある技のタメ時間は16の倍数で表記され、16は1ターン分である、と記した。
これまで「行動ポイント」について説明をしてきたが、行動ポイントの増減とタメ時間の消費はまったく別になっている。
タメ時間は以下の状況の時に減り、0になると技が発動する。

  • 敵または味方が技を出す:16
  • 味方が1マス移動かパスかYボタン足踏み:4
  • 味方が向き変え:2

上の減少に行動ポイントは全く関与しない。
「敵または味方が技を出す」ということは、これまでの行動ポイントの説明通り、敵または味方の行動が終了して相手側にターンが渡ることになるから、「タメ時間16は1ターン」という考え方でだいたい間違いではない。
それ以外のタメ時間の減少については、「速の値によって、行動ゲージ増減量が変化する」ため、必ずしも1ターンがタメ時間16にはならない。
しかも、敵が移動または向き変えした時には、タメ時間が減らない。
ということで、タメ時間の説明がやや難しいということになってしまうのである。

ここでひとつ疑問が湧いた方もいらっしゃると思う。
「敵味方1体ずつ、行動ポイントが255未満で敵が動けないタイミングで、味方がタメ時間のある技を使い始めたら、いつタメ時間が減って技が出るのか?」
なのだが、この時は、行動ポイントが1フレーム(1/60秒)につき10ずつ増加すると同時に、タメ時間が1ずつ減る処理が入る。
(ちなみに、この状況には、「敵が移動のみする」「敵が攻撃判定をしている」も含まれる)
よって、タメ時間16の技なら、16フレーム(16/60秒)後にタメ時間が終了し、技が出ることになる。
この時には、プレイヤーにもゲーム画面が16/60秒の間、動かず停止しているように見えることになる。
つまり、タメ時間16の技なら、技選択から技を出すまで、敵が何もしないのなら行動ポイントが160増え、更に技を出すと行動ポイントが+510される、ということになる。
高原が現代編で「気合いため」を出す時は、上のような処理が行われるということになる。

なお、タイムアタックでも「タメ時間16の技を16フレームで出す」テクニックとして使われている場面があるようである。
パーティが2人以上の時、1人がタメ時間のある技をタメ始めた場合、他の味方が行動可能なので、Yボタン足踏みや技を出すなどして時間経過させないとタメ時間が減らない。一方、味方全員がタメ時間のある技を選択すると、16フレームでタメ時間を消費できるので、時間短縮ができるという理屈である。

余談になるが、このタメ時間の消費方法は、ステータスの値の変化後の復元処理時、力・速・体・知が元に戻る時の値と同じである。
力・速・体・知のいずれかの値がステータスダウンする技をくらって減少した後は、敵または味方が技を出すと元の値へ16戻るし、味方が向き変えをすれば2戻るし、味方が誰も行動できない時には1フレーム(1/60秒)につき1戻る。

敵が複数の時の行動順

ここまでは敵が1体の場合について説明してきたが、敵が複数居る時は更に「敵にそれぞれ設定された順序ポイント」を考慮しなければならなくなる。
敵が行動してくるタイミング自体は、これまでの説明通りに、行動ポイントで決まる。
行動ポイントが255を越えると敵ターンになるが、敵が複数の時は、敵それぞれの順序ポイントを比較して、その時点で一番順序ポイントが高い敵キャラが実際に行動する。
この仕組みがあるため、本作では、複数の敵が居ても、敵ターンでは敵が一体しか行動しない。

さて、順序ポイントがどう決まっているのかだが、戦闘開始時のそれぞれの敵の順序ポイントは、

256 − (知の値)
ただし知の値が0の敵の順序ポイントは0

である。つまり、複数の種類の敵が出現した場合、知の値が高い敵ほど順序ポイントが低く、知の値が低い敵ほど順序ポイントが高い。
よって、知の値が低い敵から順番に行動してくるということになる。
ただし、この順序ポイントは戦闘中に増減するので、必ずしも戦闘開始時の順序ポイントのまま順番に攻撃してくるとは限らない。
また、順序ポイントが増減する条件は多く、なかなか複雑である。
順に説明していく。

移動

敵が敵ターンで1マス移動すると、順序ポイントが以下の値になる。

現在順序ポイント/2 + 現在順序ポイント/4(小数点以下切り捨て)

大雑把に言えばだいたい3/4に減ることになる。

行動不能状態で行動順が回ってくる

敵が石化やマヒ、眠り状態といった行動不能状態であっても、順序ポイントの順番で行動順は回ってくる。
この時は行動できないが、順序ポイントが1/2になり、行動終了になる。

行動異常が発生する

ややこしいことで名高い(?)行動異常は、様々な条件で順序ポイントを増減させる。
行動異常発生時には以下の順序ポイントに変化する。

現在順序ポイント/2 + 発生時修正値

「発生時修正値」は行動異常の種類によって異なる。
世界の合言葉は森部 new window様の「行動異常」一覧の「発生時修正値」が順序ポイントの増減値に当たる。

ダメージを受ける

敵がダメージを受けた時(フィールドダメージ及び、自爆技含む)には、以下の順序ポイントに変化する。

min(総ダメージ / max(最大HP/16, 1) + 1, 15) * 被ダメージ定数

「被ダメージ定数」は「行動異常」一覧に掲載されている値である。
行動異常になっていない場合は「行動異常0」の値が採用される(これ以降も同様)。
max(A,B)は、AとBを比較した時に大きい方の値を採用する、という意味の計算式。
min(A,B)は、AとBを比較した時に小きい方の値を採用する、という意味の計算式。
つまり、「max(最大HP/16, 1)」は、最大HPが16以下の敵なら1、17以上なら最大HP/16が採用される。
「総ダメージ / max(最大HP/16, 1) + 1」は、大雑把に言えば、ダメージ量が最大HPに近い、つまり大きなダメージをくらうほど、大きな値となる。
結局のところ、「大ダメージを受けるほど、大きな順序ポイントに変化する」ので、行動順が早まるということになる。
また、被ダメージ定数も大きければ大きいほど、順序ポイントが高くなることもわかる。
キューブの「ノイズストリーム」など行動異常4の効果がある技は、被ダメージ定数が1と最低値なので、敵の順序ポイントが下がり行動が回りにくくなる。

味方キャラの行動

味方キャラが技やアイテム使用以外の移動、パス、Yボタン足踏み、向き変えにより、「行動異常」一覧の「攻撃以外の増加値」分だけ増減する。
減少する、つまり負の値に設定されているのは行動異常8のみで、それ以外は上昇。

攻撃する

敵ターンで敵が攻撃すると、「行動異常」一覧の「攻撃時の減少値」だけ減少する。


以上が順序ポイントの変動である。
敵味方合わせてありとあらゆる行動で増減することがわかる。
戦闘開始時ならともかく、それ以降はプレイヤーがいちいち計算しないと正確な行動順がわからないということになるが、もちろん、通常のプレイの範囲内ならそこまでやる必要はまったくない。
「こういう理屈で行動順が決まっている」というだけのことである。

これまで紹介してきた計算式や定数に、乱数は一切使われていないので、敵味方の速の値や行動ポイント、順序ポイントを把握していれば、「味方キャラはあと何歩移動できるか」「敵が次に行動してくるのはいつか」「次はどの敵が行動してくるのか」が完全に先読みできることになる。
そこまでやる必要があるのは、タイムアタックなどきつめの制限プレイくらいであろうが……

おまけ

話が長くなったがもうひとつ、おまけとして記しておく。
行動ポイントは最小値が0で最大値が65535であり、65535を越える増加で0に戻る(俗に言う「オーバーフロー」)。
つまり、敵に一切攻撃させずに味方側が何かの方法で行動ポイントだけ増やしていくと、いずれ65535を越えて0に戻るので、敵ターンを飛ばして味方ターンが戻ってくる、ということになる。
もちろん、「敵に一切攻撃させずに味方側が何かの方法で行動ポイントだけ増やしていく」のは通常では無理なのだが、本作には、「技を選んで範囲を決める状態の時に、LまたはRボタンを押すと、敵が行動することなく行動ポイントだけが増える」という、バグのような挙動がある。
行動ポイントを65025から65279の間まで増やしてから技を出すと、本来なら510増加して65535から65789の間になるはずなのだが、65535を越えてしまったのでオーバーフローし、行動ポイントは0から254の間の値に「減ってしまったように見える」。
そして行動ポイントが0以上255未満なら「味方にターンが周る」。
これにより敵に一切攻撃させずに味方が一方的に攻撃し続けることができる……のだが、LまたはRボタンで増やすことができる行動ポイントは微々たる値である。
上で、レベル2の高原の場合、1マス移動で57ずつ行動ポイントが増える、と記した。
LまたはRボタンの向き変えでは、1回で28しか増えない。
戦闘開始時は0の行動ポイントを、65025まで増やすとしたら、65025÷28で2323回ボタンを押すことになる。
そんなことをしている暇があったら、普通に戦闘をした方がよほど速いのは言うまでもない。
(おそらくゲームを開発した側も、オーバーフローするまで行動ポイントが増えるような行動をプレイヤーが取ることはまずないしできないだろうという前提で、この仕様にしたのではないかと思われる。実際には上の通りに、LRボタンで行動ポイントを好きなだけ増やせるバグのような挙動が存在していたのだが……)
「時間をかけても低レベルクリアがしたい」というような、特定条件下のやりこみでは使える……かもしれない。