【解決済み】現在制作中の戦闘システムについて

chro
記事: 106
登録日時: 2021年2月14日(日) 11:26

Re: 現在制作中の戦闘システムについて

投稿記事 by chro »

これ、今、消費MPやTPを無視して発動されているのでしょうか。
スキル発動条件をチェックし、MPやTPなども消費されます。

ステートでスキルやスキルタイプが封印されていた場合も発動しません。

通常の戦闘コマンドで、スキルを選択した時と同じ動作です。


あとスキルを強制や追加発動させるタイプは、

1.通常攻撃で最後の敵を倒す
2.敵は全滅で、戦闘勝利状態になった
3.しかし追加スキルを発動させようとする
4.敵はいないのでエラーになる
※味方が全滅のパターンも場合もあり

というたまたま発生する条件があります。
だからこういう系統のプラグインは難しく、テストプレイも確率論的になってきます。


通常攻撃やスキル使用時にもTPは上昇するので、

1.通常攻撃発動前
2.通常攻撃後、TP上昇
3.派生スキル1準備
4.派生スキル1発動
5.派生スキル1発動後、TP上昇
6.派生スキル2準備
7.派生スキル2発動 TP消費
8.派生スキル2発動後、TP上昇

2回行動のアクター
9.2回目の行動  通常攻撃発動前
10.通常攻撃後、TP上昇
11.派生スキル1準備
12.派生スキル1発動
13.派生スキル1発動後、TP上昇
14.派生スキル2準備
15.派生スキル2発動 中止

みたいな流れになります。
さらに敵が生存しているか、戦闘不能ならスキル中止。別の対象を探す。という仕組みもあります。

5.派生スキル1発動後、TP上昇
の時にTPが100になりフィニッシュの条件を満たした。
となれば、
2.通常攻撃後、TP上昇
のタイミングでは、TP100未満で派生対象外。

そうすると、1か2のタイミングで、フィニッシュのスキル発動準備はするけど、5のタイミングでTPチェックしてスキルを除外するみたいな処理になります。

現在は、
1.通常攻撃発動前
のタイミングで、
3.派生スキル1準備
6.派生スキル2準備
を行い

※MPやTP、封印などの発動満たす&MPやTPの消費した上で
4.派生スキル1発動
5.派生スキル1発動後、TP上昇

※MPやTP、封印などの発動満たす&MPやTPの消費した上で
6.派生スキル2発動 TP消費
7.派生スキル2発動後、TP上昇


6.2回目の行動  通常攻撃発動前
のタイミングで、
11.派生スキル1準備
12.派生スキル2準備
を行う

流れにしています。

こうしないと、回数もカウントして条件に組み込む必要があります。

まず、こういう処理の流れで考えられるようになって、さらにコアスクリプトの戦闘の処理を知り、それからプラグインの動作がわかり、ようやく変更出来るようになります。

今回は、これ全部、戦闘の処理の流れを理解する必要があります。
rmmz_managers.js
rmmz_objects.js
rmmz_scenes.js
rmmz_windows.js

新たにメモを読み取ったり、条件を追加したりするならば、

5.派生スキル1発動後、TP上昇
の後処理の段階で、
6.派生スキル2発動
を発動させないようにしなければなりません。

新たにプラグインを作り直すくらいの規模になります。

仮にプラグインを編集して、スクリプトを書ける事が出来たとしても、

5.派生スキル1発動後、TP上昇
でTP100になりフィニッシュが発動するか。を最低限必要な組み合わせで試す、
というテストプレイまで含まれ、条件や想定範囲がシビアです。

TP100以外の条件も追加したいとか、TP消費する装備が2つで、派生スキルが2つあった場合も対応が必要です。


そこにスクリプトやプラグインを編集したとして、JavaScriptのコードが間違えているのか、
TP判定のタイミングが間違っているのか、それすらも大変です。

他のプラグインとの競合や予期せぬ動作もあります。

まずこれをテストプレイ出来るだけの条件を、考えたり書き出したりするだけで大変なので。

新たに条件判定が出来るようプラグインを作り直して、
そこに条件を編集して書く感じになります。
その条件も、当初のコモンイベントのスクリプトのように、複雑になると思います。

TPの条件をつけることと、TPを消費させる処理は別です。
うさぎさん
記事: 39
登録日時: 2019年8月30日(金) 20:32

Re: 現在制作中の戦闘システムについて

投稿記事 by うさぎさん »

こんばんは。chroさん返信ありがとうございます。
申し訳ないです、今現在の作業環境の提示が必要でしたね。

私がこのシステムをコモンイベントで作っていた際に、仰る通り、
MPやTPなどを考慮せずに戦闘行動の強制を実行すると、アクターが行動できるか、消費MP,TPは足りているかなどの条件はすべて無視して行動していたので、何とかならないかと思いプラグインを探していました。

https://newrpg.seesaa.net/article/477489099.html
こちらもまたnew rpg project様のプラグインなのですが、こちらのプラグインを導入する事で消費MPやTPが足りない場合はアクターは行動しなくなりました。他にもステートで行動が出来ない場合なども同じです。

他にも戦闘行動の強制で二回目以降の行動が消えるという問題を抱えていたため、
viewtopic.php?t=13108
こちらのプラグインを導入して何とかしていたのですが、chroさんの返信を見て、chroさんが作られたプラグインを使うと問題なくアクターが二回行動出来る様でした。

この二つが主に通常攻撃後に派生攻撃を行うシステムを作っていた際に、
戦闘行動の強制の仕組みを拡張していたプラグインです。

ですがchroさんが作ったスクリプトには上記の機能が全て組み込まれていたみたいで必要なくなりました。
これらのプラグインをoffにして何度もテストプレイを重ねてみたのですが、
アクターはしっかりと二回行動をしてくれます。MP、TPは考慮して行動できない場合は中断しました。

また、派生スキルを行う防具を装備して、アクターの通常攻撃で敵が戦闘不能になった場合、
エラーは起きずに問題なくリザルト画面へと移行しました。

それと、フィニッシュスキルの発動条件ですが、
私がコモンイベントで作っていた際の処理なのですが、
スクリーンショット 2024-12-23 195227.png
こんな風に、当初は派生攻撃が全て終わった後に行動回数が3回以上かつ、TPが100以上の場合、
装備タイプ:コンボ【F】を装備している際、その装備の防具IDを参照して対応したスキルを放つ。
という実行内容にしていました。

ただ今は、行動回数には縛りをつけず、単純にTPが100以上のときに、
装備タイプ:コンボ【F】を装備している場合、防具のメモ欄に書いてある<防具派生スキル n>のスキルを発動してフィニッシュ攻撃につなげるという形にしようと思っています。

フィニッシュ攻撃についてなんですが、基本的に私がchroさんのプラグインを導入する前でも今でも、
仕様は変わらずに、派生攻撃の途中ではフィニッシュ攻撃は発動しません。
あくまでもフィニッシュ攻撃に繋げるには何か条件が欲しいという事から、当初は行動した回数が3回かつTPが100以上という条件を用いていた感じです。

派生攻撃が全部終わり、最後に条件を満たしていた場合のみフィニッシュ攻撃を発動するという設計でした。
なので私は単純にchroさんが制作してくれたプラグインの処理に、
TPが100以上かつ、装備タイプ:コンボ【F】に設定されているフィニッシュ攻撃用の防具があればフィニッシュ攻撃に移行する。TPが100になっているかどうかは最後の処理で判定したらいいな~と軽い感じで考えていたのですが、思ったよりも大変そうな雰囲気があるので甘く見ていました。

素人なりの考えで、フィニッシュ攻撃に移動する際は、コンボ【F】に装備してある防具に、
<防具派生スキル>と<フィニッシュ>という二つの記述をして、防具派生スキルの処理を行う際に<フィニッシュ>という記述がされている場合、TPが100以上の時じゃなければ発動しないという処理が出来るんじゃないかと思っていました。
コンボ【F】の枠は1枠しかないので、フィニッシュ攻撃が2種類あるというのはないです。

攻撃の流れは
通常攻撃→派生攻撃→条件満たした場合のみフィニッシュ攻撃へ移行
という形です。

装備枠の順番としては

武器


身体
装飾品
コンボ←派生スキル装備を装備する枠。拡張対象
コンボ【F】←フィニッシュ攻撃の防具を装備する枠
etc…

と言った感じです。

私にプログラミングの知識がなく、
コードを読み解く力がないために結構な無理を言っていたかもしれませんでした。

なので、どうやって拡張された装備スロットから防具IDを取得しそれを装備の順番通りに発動させているのかというのもあまり把握できていませんでした。


またもコモンイベントになりますが、一応この質問をする際にこんな感じでフィニッシュに派生させてました。
スクリーンショット 2024-12-23 200659.png
chroさんのプラグインを導入した場合の処理で、
アクターIDを取得し、TPが100以上のときにフィニッシュスキルを発動するコモンイベントに飛ばしてました。
100じゃない場合は処理をしない。

このコモンイベントに飛ばす際に、コンボ【F】に装備している防具に記述した<防具派生スキル>で
ダミー用のスキルを実行し、そのダミー用のスキルで上記のコモンイベントを実行させる事で
なんとかフィニッシュスキルの発動までは出来ていました。


chroさんの疑問点が晴れるような回答になっていますでしょうか?
chro
記事: 106
登録日時: 2021年2月14日(日) 11:26

Re: 現在制作中の戦闘システムについて

投稿記事 by chro »

詳細ありがとうございます。

プラグインを入れていると、ツクール標準の仕様が変わり、かつそのプラグインでエラーも起きるため、
WTRさんが何時間もかけて、他のプラグインも調べています。
アクターIDが1のみ動作するとか、不明な現象もあります。
派生スキルの発動順と、2回行動の場合でも、作り直しています。

また同じ事になるし、それを自力で編集と条件をつけてエラー調べまでやるのかなと。


とりあえず、防具の装備順で派生スキルを発動させるわけで、
<フィニッシュ>は装備の何番目なの?必ず最後になるの?
コンボ【F】の装備タイプに、<フィニッシュ>と記述するの?
最後という意味は、2回行動の時の2回目が終わってから?それとも2回行動時はフィニッシュは2回?

例えば防具のメモ欄に<フィニッシュ>と記述された防具があったら 、
TPが100以外の時は、フィニッシュ攻撃に派生せず、100以上ならフィニッシュ攻撃に派生するという条件をつける事は可能ですか?

スキルを装備する装備タイプは[コンボ]で、フィニッシュ攻撃はコンボ【F】という装備タイプを作ってます。

フィニッシュ攻撃はそこに装備している防具のidを参照する感じです。
・例えば防具のメモ欄に<フィニッシュ>と記述された防具
・装備タイプは[コンボ]
・フィニッシュ攻撃はコンボ【F】
・防具のidを参照する感じ

それで、
・装備タイプ[コンボ]に<フィニッシュ>記載される
・コンボ【F】の装備タイプに<フィニッシュ>を記載するわけではない
・装備タイプ[コンボ]に<フィニッシュ>記載されていたら、コンボ【F】の装備タイプのスキルを派生させる

・装備タイプ[コンボ]の、スキルを装備とは?<防具派生スキル:11>のメモがある防具の意味?
・装備タイプ[コンボ]とフィニッシュ攻撃コンボ【F】の、防具の組み合わせが必要という意味?
・フィニッシュ攻撃はコンボ【F】も、フィニッシュ攻撃のスキルを装備する装備タイプの意味ではないの?
・防具のidを参照するのみ?防具idでスキル番号を判定するの?
 <防具派生スキル:11>のスキルidを読み取って発動させる意味とは別?


・防具の順番で発動させて、
派生スキル1
フィニッシュ攻撃(<フィニッシュ>記載武器)
派生スキル2
の順番になることはないの?必ず装備の最後になる?

・コンボ【F】のみに<フィニッシュ>とフィニッシュ用スキルidを設定するので、装備タイプ[コンボ]は無関係?

という風に読み取れたり、複数のパターンがあるのでどれがどれだかわからなくなります。
WTRさんもそのあたりがわからないので、混乱してきます。


・2回行動の場合
1回目の行動
 派生スキル1
 派生スキル2
 フィニッシュ攻撃(TP100あり)
2回目の行動
 派生スキル1
 派生スキル2
 フィニッシュ攻撃(TP100あり)
なの?

1回目の行動
 派生スキル1
 派生スキル2
 ※フィニッシュはアクターの行動の最後という意味で、最後の行動まで飛ばす
2回目の行動
 派生スキル1
 派生スキル2
 フィニッシュ攻撃(TP100あり)

という意味なのかがわかりません。
コモンイベントの例だと、TPなどの条件を満たせば、2回行動のアクターは2回フィニッシュ攻撃が発生すると思います。

通常攻撃→派生攻撃→条件満たした場合のみフィニッシュ攻撃へ移行
という事なら、
1回目の行動
通常攻撃→派生攻撃→条件満たした場合のみフィニッシュ攻撃へ移行
2回目の行動
通常攻撃→派生攻撃→条件満たした場合のみフィニッシュ攻撃へ移行
の2回行動アクターは2回発動の意味でいいのかです。


防具1:派生スキル1
防具2:<フィニッシュ>記載
防具3:派生スキル2
防具4コンボ[F]:フィニッシュ攻撃

という流れになるのか

防具1:派生スキル1
防具2:派生スキル2
防具3コンボ[F]:<フィニッシュ>
防具4:派生スキル3
 フィニッシュ攻撃を発動
 もしくは 2回行動アクターで、2回目の行動が終わってからフィニッシュ攻撃

という装備の最後ではないので装備順ではダメな流れかです。



・コンボ[F]の装備タイプにしか、<フィニッシュ>を記載しない
・コンボ[F]は必ず装備順の最後になるので、それ以降に派生スキルはない
という条件であれば、装備順の最後がフィニッシュ攻撃となります。

・2回行動の場合、条件を満たせば2回発動、もしくは1回?
がわかりません。
うさぎさん
記事: 39
登録日時: 2019年8月30日(金) 20:32

Re: 現在制作中の戦闘システムについて

投稿記事 by うさぎさん »

おはようございます。まさか二人係で取り組んでいらっしゃるとは……。
なんとお礼を申し上げればいいのか。本当にありがとうございます。

さて、本題ですが、
装備タイプ:コンボは、<防具派生スキル>のスキルを読み取ってスキルを発動するための枠です。

コンボ【F】は視覚的に分かりやすくするための装備枠です。
この装備枠に装備するのがフィニッシュ攻撃ですよと伝えるための枠ですね。
なのでフィニッシュスキル用の防具は、専用で作っています。
コンボ【F】に装備するのはフィニッシュ攻撃スキル専用の装備ですね。

以上の事から、装備タイプコンボには<フィニッシュ>の記述した防具を装備する事はありません。
フィニッシュは装備タイプコンボ【F】なので必ず派生攻撃の最後になります。


Q・装備タイプ[コンボ]の、スキルを装備とは?<防具派生スキル:11>のメモがある防具の意味?

A・そうです。基本的に装備タイプ:コンボとコンボ【F】にしか<防具派生スキル>の記述をした装備をしないので、  <防具派生スキル>のメモがある防具の意味という事になります。

Q・装備タイプ[コンボ]とフィニッシュ攻撃コンボ【F】の、防具の組み合わせが必要という意味?

A・いいえ。必ずしもコンボ【F】に防具を装備している必要はないです。
  コンボ【F】に<防具派生スキル>が記述された防具が装備されていたらフィニッシュに派生といった感じです。
  その際にTPが100以上という条件が必要になります。

Q・防具のidを参照するのみ?防具idでスキル番号を判定するの?
 <防具派生スキル:11>のスキルidを読み取って発動させる意味とは別?

A・申し訳ないです。<防具派生スキル>のIDを読み取って発動させるという意味です。
  コモンイベントで作っていた際の名残でそう書いてしまいました。

Q・防具の順番で発動させて、
派生スキル1
フィニッシュ攻撃(<フィニッシュ>記載武器)
派生スキル2
の順番になることはないの?必ず装備の最後になる?

A・派生スキルの途中で<フィニッシュ>記載は間に入らないです。
 コンボ【F】の装備にしかフィニッシュ攻撃の防具を装備しないので。


二回攻撃の挙動は、二回ともフィニッシュ攻撃が発動するという挙動であってます。
二回行動が出来るアクターの利点で、強力なフィニッシュ攻撃を二回打てるという設計にしたい為です。

Q・1回目の行動
通常攻撃→派生攻撃→条件満たした場合のみフィニッシュ攻撃へ移行
2回目の行動
通常攻撃→派生攻撃→条件満たした場合のみフィニッシュ攻撃へ移行
の2回行動アクターは2回発動の意味でいいのかです。

A・はい。大丈夫です。


Q・コンボ[F]の装備タイプにしか、<フィニッシュ>を記載しない
 ・コンボ[F]は必ず装備順の最後になるので、それ以降に派生スキルはない

A・その仕様であっています。

Q・2回行動の場合、条件を満たせば2回発動、もしくは1回?

A・条件を満たしていれば2回発動できます。


すみません、結構な大掛かりになってしまっているようで……。
お二方の疑問にちゃんと答えられているか心配です。
私の中では仕様が固まっていたのですが、ちゃんと伝える事が出来ていませんでした
chro
記事: 106
登録日時: 2021年2月14日(日) 11:26

Re: 現在制作中の戦闘システムについて

投稿記事 by chro »

全ての返信を読んだだけで、一緒になにかしているわけではありません。
経験あるので、読めばどのくらい調査や検証をしているのかわかります。

途中で詰まったら詳しい人が途中で入って交代したりしています。
他の人の質問の返信数を見ると、返信が2件や10件以内だったりします。
返信33件、4ページになると大掛かりです。



元々、コモンイベントとプラグインでやろうとしていた事も、大掛かりだと思います。
いくつも問題を乗り越え、装備タイプ✕コモンイベント数✕防具数✕スキルidと防具idの紐づけ
という膨大な作業量になるのはわかります。
スクリプトの数値を個別に設定するだけでも大変です。

それ含めて、全てシンプルにして、テストプレイも楽に出来るようにしたいという趣旨です。



仕様はわかりましたので、現在のプラグインのまま、
コンボ[F]の防具に<防具派生スキル:11>を入れて、(スキル11は例です)
スキル11の消費TPを100にすれば、
TP100消費可能の時のみ発動されると思います。
装備順の最後でフィニッシュで、条件を満たせば2回行動時、2回フィニッシュされます。
うさぎさん
記事: 39
登録日時: 2019年8月30日(金) 20:32

Re: 現在制作中の戦闘システムについて

投稿記事 by うさぎさん »

すみません、情報が漏れてたかもしれません。
フィニッシュ攻撃はTPが100以上の時に派生されるようになるだけで、TP自体は消費しないという事になってます。

ゲームの中で他にTPを消費する技があり、TPを使って強力なスキルを使うか、そのままTPを温存して通常攻撃からの派生攻撃で攻撃するかというのをやりたかったんです。
なのでTPが100以上かどうかっていう条件をつけてました。

作業効率あげるために質問したのが、こんな形になるとは自分も思いませんでした。
chro
記事: 106
登録日時: 2021年2月14日(日) 11:26

Re: 現在制作中の戦闘システムについて

投稿記事 by chro »

質問してくれるのはありがたい事なので問題ないです。

元々大掛かりなことをして大変だったと思います。

ツクールMVでプラグインが一般的になる前は、コモンイベントだけで自作戦闘やアクションRPGなどを作っていたので、もっと大規模でした。
普通にプロジェクトデータ丸ごと渡して、コモンイベントのバグチェックや修正、注釈で添削や効率の良い組み方と教え合っていました。

こういうのは記録に残っていると誰かの参考になったり役に立っりするので、歓迎です。


■TPの条件判定
スキル画面のMP・TP消費とは別に、発動に必要なMP・TP条件を追加するプラグインを作成しました。

< TP条件判定:100>
とメモに記載すれば、TP100以上の時に発動して、消費TPはスキル画面の設定値を消費します。

・TP100以上なければ発動しないが、TPは消費しない
<MP条件判定:50>
・MP50以上なければ発動しないが、MPは20のみ消費する
みたいなスキルも作成出来ます。

詳しく聞くのは、こういった解決策がわかり、一番手間もかからず、テストプレイもバグの確率もほぼ無くせます。

あと、今後も私がサポート出来るわけではないので、他の人がプラグインを見てもわかる程度にしておいて、複雑にしたくないのもあります。

内部的には、画像のようなマイナス値で選択不能にもなります。通常遭遇することはありません。
battletp-1.png
添付ファイル
SkilltSeparateConditionsPay.js
(1.34 KiB) ダウンロード数: 7 回
うさぎさん
記事: 39
登録日時: 2019年8月30日(金) 20:32

Re: 現在制作中の戦闘システムについて

投稿記事 by うさぎさん »

chroさん、プラグインの制作ありがとうございます!
実装したところ、無事に派生攻撃スキルの挙動が全て理想通りの形になりました。

正直、最初は質問するかどうか悩む案件だったのですが、自分以外にも同じようなシステムを作りたいなと思ってここにたどり着いた人の助けになれるならと思ったら良い事なんじゃないかと思えてきました。

自作戦闘はツクールの分化みたいなものですよね。
自分も少しは聞いてはいました。特に2000シリーズが凄いイメージありますね。
確かツクール2000って今みたいに外部から機能を拡張とか出来ない時代だったともうのですが、そんな制約の中でも結構凝った戦闘システムなんかが作られていたので凄いな~と感じていました。

なにはともあれ、私の質問に何日も付き合ってくれてありがとうございました。
これにて解決です。
返信する

“MZ:質問”に戻る