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

2021年06月19日

 ツクールMV向けCTB(カウントタイムバトル)を実現するプラグインを公開しました。
 ※NRP_CountTimeBattle ver1.08にて行動異常時にターンが回らなくなる不具合がありました。ver1.081〜への更新をお願いいたします。

20191229_CTB_1.jpg

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

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

導入方法


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

 NRP_CountTimeBattle.js ver1.101(2020/11/01)
 NRP_VisualTurn.js ver1.13(2021/09/18)

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

更新履歴


2021/09/18

NRP_VisualTurn.js ver1.13

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

2021/06/19

NRP_VisualTurn.js ver1.12

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

2020/10/25 -> 11/01(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人です。

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


味方の始動時間バラツキ(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までの動作に戻したい場合はこちらだけをオフにしてください。

NRP_VisualTurn.jsのパラメータ


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

仕様・注意点


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

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

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

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

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

追加機能


WT(待ち時間)を変更する技(ver1.01)

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

<SetWt:[数値]>

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

<AddWt:[数値]>

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


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

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

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

注意点

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

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

連続行動技(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ツクールMZ&MV目次に戻る
posted by 砂川赳 at 09:54 | RPGツクールMZ&MV | このブログの読者になる | 更新情報をチェックする