【解決済み】お手つき(一回だけ行動休み)ステートを実装したい

ぽんきち
記事: 3
登録日時: 2022年5月08日(日) 15:35

【解決済み】お手つき(一回だけ行動休み)ステートを実装したい

投稿記事by ぽんきち » 2022年5月08日(日) 16:24

こんにちは。

現在ツクールMVでゲーム制作をしていまして。
戦闘中のステートに関して、タイトルのようなものを実装したいのですが、
ご存じでしたらお教えいただければ幸いです。

具体的には
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
「スタン」というステートを作成し、付与されると「一回分行動できない」というものにしたいです。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★


※以下にいくつか試した例を記載します。


ex1.
ステートの設定を以下のようにする。
「行動制約:行動できない」
「自動解除のタイミング:行動終了時」
「継続ターン数:1~1ターン」
こうすると、2ターン分(今のターンと次ターン)のスタンとなってしまいます。
(丸々1ターン分継続させるために今のターンと次のターンという計算をしているのかも?)
(行動できない場合はそもそも行動する処理に入ってすらいないので行動終了時としても意味がないかも?)


ex.2
ステートの設定を以下のようにする。
「行動制約:行動できない」
「自動解除のタイミング:ターン終了時」
「継続ターン数:1~1ターン」
これで敵Aにスタンを付加した時、
敵Aがこのターン中にまだ攻撃していない場合、一回分行動できなくすることができるが、
敵Aがこのターン中にすでに攻撃をしていた場合、ターン終了時にスタンが解除されて一度もお手つきにならず意味がない。
かと言って継続ターン数を2~2にすると
敵Aがこのターン中にまだ攻撃していない場合、2回分行動できないという状態になる。


ex.3
「単純にスキルのスピードを上げて、スタン付与のスキルは必ず誰よりも早く発動されるようにする。」
戦闘のパワーバランスが崩れるため、その方法は採用しない方針です。


以上になります。
言葉足らず、説明不足でしたらすみません。
「一回だけ、するはずだった行動をできなくする」そんなステートを実装したいので
解決策やアドバイスなど、よろしくお願いいたします。
最後に編集したユーザー ぽんきち on 2022年5月09日(月) 14:51 [ 編集 1 回目 ]

アバター
虚構の城跡
記事: 696
登録日時: 2016年9月23日(金) 16:58
連絡を取る:

Re: お手つき(一回だけ行動休み)ステートを実装したい

投稿記事by 虚構の城跡 » 2022年5月08日(日) 21:34

ステート付与されたら、
・そのターンだけ行動不能にしたいという事でしょうか?
・それとも次ターンだけ行動不能にしたいという事でしょうか?

それとも行動終了やターン終了という条件とは違う事を行いたいという事でしょうか?
ぽんきち
記事: 3
登録日時: 2022年5月08日(日) 15:35

Re: お手つき(一回だけ行動休み)ステートを実装したい

投稿記事by ぽんきち » 2022年5月09日(月) 01:10

虚構の城跡様
返信ありがとうございます!

行動終了やターン終了という条件とは違う事に該当すると思います。

端的に申し上げると
「ステート付与されたら、次の行動を一回だけ行動不能にしたい。」という感じです。

◆流れの例
①敵Aにスタンを付与。
②敵Aの攻撃のタイミングで敵Aは何も行動せず「敵Aはスタンで動けない」とメッセージ表示。
(ステートの「行動制約:行動できない」にしてあるので何も行動できない)
③②の直後スタンが解除される。
※スタンを付与した後の敵Aの行動を、一回だけ行動不能にして、その直後スタンを解除。という形です。

分かりづらくてすみません。
どうぞよろしくお願いします。
アバター
くろうど
記事: 259
登録日時: 2016年1月22日(金) 20:52
お住まい: 東京都
連絡を取る:

Re: お手つき(一回だけ行動休み)ステートを実装したい

投稿記事by くろうど » 2022年5月09日(月) 01:47

一回休み(いわゆるスタン)を作る場合、継続ターン数を「0 ~ 0」にすると作成できるのですが、MVでは最低値が「1」なので、プラグインが必要かと思います。
自動解除のタイミングは「行動終了時」だったかと思います。

自分用に作ったプラグインがあるのですが、公開できる形になっていないので、以下のコードをプラグイン化してください。
(拡張子 js の新規ファイルにコピペしてください)
(ライセンスは、MITライセンスとしますので、自由に使用・改変できます)

使い方として、以下のコードの「ステート番号A および B」の部分に継続ターン数を「0」にしたいステート番号を入れてください。
複数ある場合は、カンマ区切りでステート番号を記述してください。

コード: 全て選択

const _Game_BattlerBase_resetStateCounts = Game_BattlerBase.prototype.resetStateCounts;
Game_BattlerBase.prototype.resetStateCounts = function(stateId) {
   let zeroState = false;
   [ステート番号A, ステート番号B].forEach(zeroId => {
      if (stateId === zeroId) {
         this._stateTurns[zeroId] = 0;
         zeroState = true;
      }
   }, this);
   if (!zeroState) {
      _Game_BattlerBase_resetStateCounts.call(this, stateId);
   }
};


(数年前に書いたコードなので、今見るともっと良く出来そう……)
▼だいたいTwitterにいます。たぶん。
https://twitter.com/kuroudo119
ぽんきち
記事: 3
登録日時: 2022年5月08日(日) 15:35

Re: 【解決済み】お手つき(一回だけ行動休み)ステートを実装したい

投稿記事by ぽんきち » 2022年5月09日(月) 14:51

くろうど様
返信ありがとうございます。

頂いたプラグインを試したところ、理想の形で実装できました!
プラグインで継続ターン数を0にしているんですね。参考になります。

それでは、ありがたく使わせていただきます。
どうもありがとうございました!

“MV:質問” へ戻る