戦闘システムをCTBに変更する【RPGツクールMZ&MVプラグイン】

2024年09月16日

 ツクールMV〜MZ向けCTB(カウントタイムバトル)を実現するプラグインを公開しました。



 CTBについては説明不要かと思いますが、素早さによって行動回数の増える戦闘システムです。
 拙作、ミスティックスターにて採用しているシステムを、ツクールMV〜MZで実現できるようにしたものとなります。

 特に設定をしなくとも、プラグインをオンにするだけで即動きます。
 初期設定では顔グラを表示しますが、キャラグラを出したり名前を文字表示したりとカスタマイズも可能です。
 フロントビューでもサイドビューでも問題なく機能します。

導入方法

更新履歴

制御系パラメータ(NRP_CountTimeBattle.js)

計算人数(表示人数)(number)

防御選択時に計算(calcGuardCommand)

行動選択時に行動者を表示(showActionUser)

不要なモーション更新削除(notPartyMotionRefresh)

パーティコマンドの表示(showPartyCommand)

味方の始動時間バラツキ(actorStartRandomWt)

敵の始動時間バラツキ(enemyStartRandomWt)

先制時の始動時間ボーナス(preemptiveAdvantage)

奇襲時の始動時間ボーナス(surpriseAdvantage)

開始ターン数(startTurn)

逃走時のペナルティ時間(escapePenalty)

自身へのステートターン+1(selfStatePlusTurn)

自身への強化弱体ターン+1(selfBufPlusTurn)

蘇生時のWT(reviveWT)

スキルの順序変化を予測(predictionSkillOrder)

必中のみ予測(predictionCertain)


表示系パラメータ(NRP_VisualTurn.js)※別記事

仕様・注意点

追加機能

ステートのメモ欄

オブジェクトのメモ欄

スキルのメモ欄

画面イメージ

バトルイベント

関連情報

導入方法


 以下2つのファイルをダウンロードし 、[プロジェクト]\js\plugins に放り込みます。ツクールのプラグイン管理から機能をONにしてください。
 ※このプラグインはMV、MZの両方で有効です。
 ※MZで使用する場合、システム上の設定は必ずターン制にしてください。タイムプログレスになっていると動きません。

 NRP_CountTimeBattle.js ver1.233(2024/09/16)
 NRP_VisualTurn.js ver2.03(2024/05/01)

 上から順番に取り込む必要があるので注意です。
 ファイルが2つあるのは、制御系と表示系で分割したためです。更新日を見て最新を取るように気をつけてください。

更新履歴


2024/08/16 -> 2024/09/16

NRP_CountTimeBattle.js ver1.23 -> 1.233

  • 蘇生スキルの蘇生時待ち時間を設定できるようにした。
  • 蘇生スキルを選択時、蘇生対象者の行動予測を表示できるようにした。
  • 戦闘不能者に対して範囲が有効でないスキルまで行動予測を表示してしまう不具合修正。(2024/08/23 ver1.231)
  • MVにてスキルの順序変化を予測する機能をオンにすると、エラーになってしまう不具合修正。(2024/08/28 ver1.232)
  • スキルが不発になった場合、スキルの終了処理が適切に行われない問題に対処。(NumbStates.jsなどとの競合解消)(2024/09/15 ver1.233)

2024/08/10 -> 2024/08/16

NRP_CountTimeBattle.js ver1.22 -> 1.221

  • WTや敏捷性を変化させるスキル(ステート、能力変化)によって行動順序が変化する場合、それを予測して表示できるようにした。
    ※初期設定では命中タイプが必中のスキルのみが対象となります。
  • ver1.21にて、自身の敏捷性を変化させた場合、次の行動が即時行動になってしまう不具合修正。
  • 戦闘勝利時など文章表示時に動作が非常に重くなる不具合を修正。
    (2024/08/16 ver1.221)

2024/08/05

NRP_CountTimeBattle.js ver1.21


2024/07/14 -> 2024/07/24

NRP_CountTimeBattle.js ver1.20 -> 1.201


2024/06/03 -> 2024/06/12

NRP_CountTimeBattle.js ver1.19 -> 1.191

  • 蘇生時のWT(待ち時間)を設定できるようにした。
  • 『味方の始動時間バラツキ』『敵の始動時間バラツキ』『先制時の始動時間ボーナス』『奇襲時の始動時間ボーナス』『逃走時のペナルティ時間』に数式を設定できるようにした。(2024/06/12 ver1.191)

2024/05/01

NRP_VisualTurn.js ver2.03

  • 画像X座標シフト、画像Y座標シフトを追加。
  • 敵の表示倍率を100より大きくすると、敵の画像が途切れてしまうことがある不具合修正。
    ※敵の表示倍率を100以外にしている場合、今までと若干表示がズレる可能性があるのでご注意ください。
    ※詳細はこちらをご覧ください。

2024/02/09

NRP_VisualTurn.js ver2.00

  • レイアウト関連の機能を大幅に強化。
    ※詳細はこちらをご覧ください。

2023/10/02

NRP_CountTimeBattle.js ver1.18


2023/09/21

NRP_VisualTurn.js ver1.164

  • NRP_PartyAttack.jsと併用し、かつ自身が対象のスキルを使うと行動順序のアクターが白表示されてしまう問題に対処。

2023/08/28

NRP_CountTimeBattle.js ver1.17


2023/07/04

NRP_CountTimeBattle.js ver1.16

  • 防御選択時に計算がオンの場合、逃げるに失敗しても、そのまま行動できてしまう不具合修正。

2023/05/13

NRP_CountTimeBattle.js ver1.152

NRP_VisualTurn.js ver1.163

  • MVにて戦闘中に仲間を加えた場合、WTが初期設定されない不具合を修正。

2023/02/21

NRP_CountTimeBattle.js ver1.151

  • MVかつパーティコマンドを表示しない設定の場合、戦闘開始直後に付加したステートが表示されない不具合修正。

2022/08/26

NRP_VisualTurn.js ver1.162

  • CTBにてパーティコマンドを表示しない設定の場合、順序が初期表示されない不具合を修正。

2022/08/23

NRP_CountTimeBattle.js ver1.15


2022/08/16

NRP_CountTimeBattle.js ver1.14


2022/06/07 -> 2022/08/05

NRP_CountTimeBattle.js ver1.13 -> 1,131

  • 戦闘開始時、パーティコマンドを表示できるように対応。
  • 敏捷性が0の際に何度も行動できてしまう不具合修正。
    (2022/08/05 ver1.131)

2022/04/21

NRP_VisualTurn.js ver1.16

  • 選択中のバトラーシンボルについて画像のみを白く強調表示するように変更。
  • UIエリアの幅が一部ウィンドウに反映されていない不具合修正。

2022/03/03

NRP_CountTimeBattle.js ver1.12

  • 新規登場したバトラーのWTを初期設定するように修正。

2022/02/22

NRP_CountTimeBattle.js ver1.11

  • 一人が行動終了した際に全員分の行動終了処理(毒やHP再生、ステートの継続ターンなど)が実行されてしまう不具合に対応。
    ※MZ1.4.0の更新の影響のようです。該当の方は更新をお願いします!

2021/11/19 -> 2022/01/11

NRP_VisualTurn.js ver1.14 -> 1.142

  • 戦闘開始直後にピクチャーなどの画像表示を行うと、順序画像の表示が不安定になる不具合修正。
  • ↑の修正漏れ(背景画像が適切に読み込まれない問題)を再修正。(ver1.141)
  • プラグイン内の解説を大幅拡充。(11/20 ver1.142)
  • ため技プラグインとの競合対策用に調整。(2022/01/11 ver1.143)

2021/09/18

NRP_VisualTurn.js ver1.13

  • 外部プラグインによる顔グラやキャラグラの変更が、反映されない不具合修正。

2021/06/19

NRP_VisualTurn.js ver1.12

  • ウィンドウを重ねて表示できるように改良。
  • それに伴い初期状態では行動順序を右寄せ&上寄せするように変更。
  • また、ウィンドウ表示系のパラメータを追加(細分化)&整理。
    ※プラグイン更新時に少しだけ挙動が変わる可能性があります。変更箇所はパラメータ(各ウィンドウの表示)だけなので見直しをお願いします。

2020/10/25 -> 11/01

NRP_CountTimeBattle.js ver1.10 -> 1.101

  • 強化/弱体を自身にかけた場合、即座に1ターン経過してしまう問題への対処。
    ※ステートは対策済みでしたが、強化/弱体への考慮が抜けていました。
  • それに伴い、切替用のプラグインパラメータを追加。
    基本的には初期値のオンを推奨します。以前のverと挙動が変わるのが嫌な場合は『自身への強化弱体ターン+1』の項目をオフにしてください。
  • 二段階の強化/弱体を自分にかけた場合、想定より1ターン長く効果がかかってしまう不具合修正。(11/01 ver1.101)

2020/08/25

NRP_CountTimeBattle.js ver1.09

  • ツクールMZに対応。

NRP_VisualTurn.js ver1.11


2020/08/03〜2020/08/14

NRP_CountTimeBattle.js ver1.08 -> 1.081

  • 速度補正がマイナスの場合、行動予測が正しく表示されない不具合修正。
  • それに伴い、スキル選択時の行動予測で行動者を先頭表示しないようにした。
  • 行動異常時にターンが回らなくなる不具合修正。(ver1.081)

2020/06/09

NRP_CountTimeBattle.js ver1.07 -> 1.071

  • コマンド入力中(inputting)状態を正しく設定するように対応。
    ※他プラグインとの連携に関係するだけで、大きな影響はありません
  • 英語対応。
  • 睡眠などの異常モーションが正しく表示されない不具合修正。(ver1.071)

NRP_VisualTurn.js ver1.08

  • 英語対応。

2020/04/26

NRP_VisualTurn.js ver1.08

  • 敵の識別子表示機能を追加。(詳細

2020/04/18

NRP_CountTimeBattle.js ver1.06 -> 1.062

  • バトルイベントでアクターの個別ターンが正常に取得できない不具合修正。
  • 複数回行動をキャンセルできない不具合修正。(04/25 ver1.061)
  • 行動時に一瞬余計なモーションが入る不具合修正。(04/25 ver1.062)

NRP_VisualTurn.js ver1.06

  • <CtbHide>によって、スキル発動時の順序欄を非表示できるようにした。

2020/01/18

NRP_CountTimeBattle.js ver1.05

  • ターン終了時のバトルイベントで行動主体が次の行動者となる不具合修正。
  • TPの初期値が行動するまで表示されない不具合修正。

NRP_VisualTurn.js ver1.05

  • 味方のターンが来るまで行動順が表示されない不具合修正。
  • 行動する度にコマンドを隠れないように変更(切替可能)。(詳細)
  • 右寄せ下寄せをやりやすいように調整。(01/19 ver1.051 詳細
  • 不要な重複処理を削除。(01/30 ver1.052)

2020/01/09

NRP_CountTimeBattle.js ver1.04

  • 戦闘開始時の敏捷性の分散値など各パラメータを設定可能に。(詳細)

NRP_VisualTurn.js ver1.04(詳細はこちら)

  • ウィンドウ及び敵味方の背景を指定可能に。
  • キャラグラの向き指定を可能に。

2020/01/04

NRP_VisualTurn.js ver1.03(詳細はこちら)

  • プラグインパラメータの画像縦幅・横幅を整理。
    ※画像サイズの指定が前バージョンと変わるのでご注意!

  • SV戦闘キャラに対応。
  • 敵の表示モードを別途指定可能に。
  • 敵の表示モードにピクチャーを指定可能に。
  • アクター、敵キャラのメモ欄で画像を個別指定可能に。
  • ウィンドウの余白を変更できるようにした。
  • ウィンドウを暗くできるようにした。

2020/01/02

NRP_CountTimeBattle.js ver1.03

  • ターゲット選択時に行動順序の更新処理が何度も呼ばれる問題に対応。

NRP_VisualTurn.js ver1.02

  • 画像の拡大縮小率(zoom)を設定可能に。(詳細はこちら
  • レイアウトのずれを全体的に修正。

2019/12/31(ver1.02)

  • 解除が『行動終了時』かつ対象が自身のステートの効果を+1ターン延長。
    以前と挙動が変わるので注意です。

  • スキルの速度補正を行動予測へ反映した。

2019/12/30(ver1.01)

  • 解除を『行動終了時』に設定したステートが解除されない不具合を修正。
  • ディレイ、即時行動などWT(待ち時間)を変化させる技を実装。
  • 状態変化によって敏捷性が変化した際、即座に行動順序へ反映するよう修正。
  • 名前表示の場合、単体の敵でも末尾にアルファベットが表示されるのを修正。
  • 利用規約を明記。
  • プラグインのパラメータを型指定した。

2019/12/29(ver1.00)

  • 公開開始!

パラメータ(基本設定)


計算人数(表示人数)(number)

 ターン順序の計算を行う人数。これがそのまま画面に表示する人数となります。指定なしなら9人です。

防御選択時に計算(calcGuardCommand)ver1.14

 防御コマンドにカーソルを合わせた際、速度補正に応じて順序表示の計算を行います。
 ※MVでは動かないらしいです。

行動選択時に行動者を表示(showActionUser)ver1.15

 行動選択時、順序の先頭に現在の行動者を表示したままにします。

不要なモーション更新削除(notPartyMotionRefresh)ver1.20

 行動選択時、全員のモーション更新をやらないようにします。
 NRP_DamageTiming.jsなどの戦闘高速化系プラグインを入れている場合、回避やダメージのモーションが最後まで再生されない問題に対処できます。

パラメータ(戦闘開始関連)


パーティコマンドの表示(showPartyCommand)ver1.13

 戦闘開始時にパーティコマンドを表示する方法です。

 表示する設定にしておけば、『逃げる』の選択が表示される前に素早い敵から一方的な攻撃を受ける問題にも対応できます。
 他にも、敵が先に行動する場合のみ表示させて、普段は表示しないこともできます。

味方の始動時間バラツキ(actorStartRandomWt)ver1.04

 戦闘開始時の味方の敏捷性を数値%分だけ分散させます。
 例:20ならば、90〜110%に分散。指定なしは0。

 要するに戦闘開始時の行動順序をバラけさせるか否かということです。初期値0のままだと毎戦闘、同じ順番で動きます。

敵の始動時間バラツキ(enemyStartRandomWt)ver1.04

 戦闘開始時の敵の敏捷性を数値%分だけ分散させます。
 例:20ならば、90〜110%に分散。指定なしは20。

 0にすると同種の敵が一斉に行動してきます。それを避けるために20ほど初期値を分散させています。

先制時の始動時間ボーナス(preemptiveAdvantage)ver1.04

 先制攻撃時に、指定した数値の%分だけ味方のターンを早めます。
 初期値は50%です。つまり1/2ターンほど通常より早く行動します。

奇襲時の始動時間ボーナス(surpriseAdvantage)ver1.04

 敵の奇襲時に、指定した数値の%分だけ敵のターンを早めます。
 初期値は50%です。

開始ターン数(startTurn)ver1.04

 戦闘開始時のターン数を設定します。
 これは主に敵の行動パターンの判定に使用されます。
 初期値は1です。

 MVのデフォルトの仕様では、0ターンから開始します。これは公式の説明とも食い違っているので、バグっぽい気がしますが……。一応、元の通り0ターン開始も選択できるようにしています。

パラメータ(逃走関連)


逃走時のペナルティ時間(escapePenalty)ver1.04

 逃走失敗時のペナルティです。
 指定した数値の%分だけ味方のターンを遅らせます。
 初期値は25です。つまり、1/4ターンほど行動を遅らせます。
 ※逃走を失敗した当人は、まるまる1ターン消耗します。

 一人のターンを消費するだけだとターン制に比較してペナルティが低すぎるため、こういう措置にしています。

パラメータ(ステート/能力変化関連) ver1.10


自身へのステートターン+1(selfStatePlusTurn)

 自分にかけたステートは継続ターンを+1します。
 自動解除のタイミングが『行動終了時』のものが対象です。
 この項目は「自分にかけた効果が即座に切れてしまう問題」への対処として設定されたものです。
 基本的にはオンのままで構いません。

自身への強化弱体ターン+1(selfBufPlusTurn)

 自分にかけた強化弱体は継続ターンを+1します。
 同じく「自分にかけた効果が即座に切れてしまう問題」への対処として設定されました。
 ただし、ver1.09まではステートのみこの考慮がされており、強化弱体と不揃いな状態になっていました。

 ver1.09までの動作に戻したい場合はこちらだけをオフにしてください。

蘇生時のWT(reviveWT)

 蘇生時に待ち時間を再設定します。

 baseWt: 1ターン分の待ち時間
 wt: 戦闘不能になった際の待ち時間

 数式も可能です。
 例えば、(baseWt / 2)ならば、蘇生してから0.5ターンで動けるようになります。
 空欄の場合は戦闘不能になった際の待ち時間をそのまま使用します。

スキルの順序変化を予測(predictionSkillOrder)

 WTや敏捷性を変化させるスキル(ステート、能力変化)によって行動順序が変化する場合、それを予測して表示します。

必中のみ予測(predictionCertain)

 命中タイプが必中のスキルのみ予測の対象とします。
 オフの場合は全て対象とします。

NRP_VisualTurn.jsのパラメータ


 画面表示については、主にこちらで設定します。
 色々とカスタマイズが可能ですが、長くなったので別記事に分割しました。
 こちらをご参照ください。

仕様・注意点


  • ステートの自動解除のタイミングが『行動終了時』の場合は個人のターンで効果が切れます。『ターン終了時』の場合は全員のターンで判定されます。基本的には『行動終了時』のほうが使いやすいです。(ver1.01)

  • エディタ上から入力する速度補正の値は%にしています。
    速度補正100の技は+100%。つまり二倍速ということです。
    速度補正-50で1/2倍速です。-100以下だとターンがほぼ回らなくなります。

  • デフォルトにある防御の設定は必ず変えてください。
    速度補正が2000のままだと「ずっと俺のターン」になります。
    また、防御ステートの自動解除は『行動終了時』を推奨します。

  • アクターの複数回行動には対応していません。

  • 戦う、逃げるのパーティコマンドは初期表示しません。
    キャンセルを押すと表示するようになっています。

  • 戦闘の流れを根本的に変えているため、その辺に触れるプラグインとは競合しまくります。
    参考までにこういった影響の大きなプラグインほど上側に配置したほうが、動きやすい傾向にあります。※あくまで傾向です。確実ではありません。

追加機能


ステートのメモ欄

 ステート欄のメモに以下を記入することで、対象の待ち時間を変更できます。
 数値は100で対象の1ターン分の待ち時間となります。
 数式やマイナス値も可能です。

<SetWt:[数値]>

 対象の待ち時間を変更します。

<AddWt:[数値]>

 対象の待ち時間を加算します。


  • <AddWt:50>
    1/2ターン分、相手の行動を遅らせます。いわゆるディレイアタックですね。

  • <SetWt:0>
    対象の待ち時間を0にし、即時行動させます。
    ただし、行動者自身にかけても、この直後にターン経過するので無意味です。
    連続行動をさせたい場合は、スキルの速度補正を2000に設定してください。
    (※参照:連続行動技)
    全体にかければ、サガのクイックタイムっぽくなって最強です。

  • <SetWt:-500>
    対象の待ち時間を−5ターンに変更します。
    つまり、一方的に5回程度動けるようになります。
    自分にかければ、同じくサガのオーヴァドライブっぽくなって最強です。

注意点

 なお、これらはステートがかかった際にのみ発生する効果となります。
 そのため、同一のステートがかかったままだと重ねがけできません。これは自動解除のタイミングを『ターン終了時』の1ターンにしておけば、即座に重ねられるようになります。

 逆に言えば、自動解除のタイミングを『行動終了時』の1ターンにしておけば、「敵が一度行動するまで重ねられないディレイ」のような異常を狙って作れます。

<DeadCTBTurn>

 戦闘不能状態でも行動順序に表示されるようになります。
 一定時間で復活などの特殊なステートを想定しています。

<ExpiredTurnStart>

 自動解除のタイミングが行動終了時のステートに対して、ターン開始時(入力開始時)にステートの自動解除を発生させます。
 防御など入力開始時に効果を切れさせたい場合に有効です。

オブジェクトのメモ欄

 特徴を保有するオブジェクト(アクター、エネミー、職業、装備、ステート、スキル)のメモ欄に以下を記載してください。
 スキルについては覚えているだけで、機能するパッシブスキルとなります。

<StartWt:[数値]>

 戦闘開始時の待ち時間(基準:100)を指定した値に変更します。
 例えば、<StartWt:0>なら即時行動します。
 <StartWt:200>ならば、1ターン分行動開始が遅れます。

スキルのメモ欄

<ReviveWt:[数値]>

 蘇生スキルに対して、蘇生時の待ち時間(基準:100)を設定します。
 <ReviveWt:50>ならば、1/2ターンで行動開始します。

連続行動技(ver1.02)

 スキルの速度補正を2000(MAX)にしておくと、時間経過なしで連続行動を行います。
 瞬時に効果を発動する補助スキルなどの作成に便利です。

画面イメージ


20200104_CTB.jpg

 敏捷性10倍アップの魔法で「ずっと俺のターン!」してみました。
 レイアウトは「NRP_VisualTurn.js」によって色々と変えられます。なお、配置を考えないとキャラやメッセージとかぶりますので工夫してみてください。
 行動時のみ枠を非表示にすることも可能です。

バトルイベント


 CTBでは各行動毎にターンが経過します。そのため、バトルイベントで指定できるターン数は全体での行動回数と一致します。
 各キャラ毎のターン数を参照したい場合はスクリプトで情報を取得します。

取得項目の例

  • 個別ターン数:BattleManager._subject.turnCount()
  • アクターID:BattleManager._subject._actorId
  • 敵ID:BattleManager._subject._enemyId
  • インデックス:BattleManager._subject.index()
    ※配置順で0から始まる番号のことです。
     敵味方別なのでisActor, isEnemy()で区別する必要あり。

 例1:アクター1の2ターン目にイベントを起こす場合の条件。
BattleManager._subject._actorId == 1 && BattleManager._subject.turnCount() == 2

 例2:先頭の敵が3ターン目にイベントを起こす場合の条件。
BattleManager._subject.isEnemy() && BattleManager._subject.index() == 0 && BattleManager._subject.turnCount() == 3

 ※バトルイベントの条件自体は毎ターン実行するようなものにしてください。

 詳細な制御方法についてはバトルイベント拡張プラグインでも解説しています。

関連情報



 なお、ソースコードにはたくさん注釈を入れてみたので、興味ある人は覗いてみてください。時々ゴミが入っているのはご愛嬌。CTBの実装方法について過去に解説しているので、よければどうぞ。

 また、RPG制作講座にCTBの戦闘バランスについて記事を書きました。ターン制との勝手の違いなど、CTBのバランス調整に悩んでいる人はご参考にどうぞ。
 https://newrpg.seesaa.net/article/488700523.html

>RPGツクールMZ&MV目次に戻る
posted by 砂川赳 at 11:17 | RPGツクールMZ&MV | このブログの読者になる | 更新情報をチェックする