TABLE OF CONTENTS

仮RPGの進捗ノート20240909-20240915

仮RPGの進捗を記載するノートです。20240909-20240915分。

Sep 15, 2024

はじめに

日々の進捗をメモしています。
 

20240909 逃走中のキャラを連れ戻すときの処理を追加した

 
マーシャがハロルドを連れ戻す
マーシャがハロルドを連れ戻す
 
一定の確率で連れ戻せないようにした。
ストレスになる?
 

20240909 連れ戻すをスキルではなくアクターコマンドにしたい

 
検証時はスキル内に含めていたが、アクターコマンドに配置したい。
それっぽいプラグインを探した。
 
コマンドスキルプラグイン(トリアコンタン様)
 
シンプルに実装できそう。
 
可変アクターコマンド【RPGツクールMZプラグイン】(ケケー様)
https://kekeelabo.com/?i=16
柔軟に設定できそう。
MZ用のプラグインなので、使用する場合はMV用に書き変える必要がある。
そもそもできるのか不明。
 
RPGMaker/FTKR_ExBattleCommand.ja.md at master · futokoro/RPGMaker · GitHub(フトコロ様)
https://github.com/futokoro/RPGMaker/blob/master/FTKR_ExBattleCommand.ja.md
 
設定は複雑そうだが、柔軟に設定できそう。
いったんフトコロさんのプラグインをいれてみる。
 

20240909 アクターのバトルコマンドの表示を変更するプラグイン「FTKR_ExBattleCommand プラグイン」

 
上記リンク先からダウンロードして配置した。
 

スキルの説明が出るようにした

データベースのスキルの説明か表示される
データベースのスキルの説明か表示される
スキルの説明
スキルの説明
 

20240909 マーシャのアクターコマンドに「連れ戻す」を追加する

 
上で配置した「FTKR_ExBattleCommand プラグイン」を引き続き設定していく。
 

ひとまずマーシャのバトルコマンドを攻撃のみにしてみる

 
アクター「マーシャ」のメモ欄で設定する。
<FTKR_ACTOR_COMMAND: attack 0 true 0 100>
アクターコマンドを設定
アクターコマンドを設定
アクターコマンドが攻撃のみになった
アクターコマンドが攻撃のみになった
 

連れ戻すを追加する

<FTKR_ACTOR_COMMAND: custom 20 true 20>
 

条件付きで表示されるようにする

<FTKR_ACTOR_COMMAND: custom 20 'return $gameParty.members().some(actor=>actor.isStateAffected(12));' 20>
 
うまくいかない…?
 

20240911 カスタムスキルが特定条件でアクターコマンドに表示されるようにした

 
誰かが逃げているときのみ(ステートID20「逃走」を付与されているメンバーがいる)
「連れ戻す」コマンドが表示されるようにした。
 
「FTKR_ExBattleCommand プラグイン」を一部改変させてもらった。
 
* v2.2.3 - 2024/09/11 : たくろう改変 * 1. カスタムスキルの有効条件がうまく機能していなかった? シングルコーテーションで囲むように変更 * 2. カスタムスキルの有効条件が無効の場合、元々非活性なコマンドになる仕様だったのを、非表示になるように変更
 

アクターコマンドを設定した

マーシャのアクターコマンド
マーシャのアクターコマンド
<FTKR_ACTOR_COMMAND: custom 20 '$gameParty.members().some(actor => actor.isStateAffected(12))' 20> <FTKR_ACTOR_COMMAND: attack 0 true 1> <FTKR_ACTOR_COMMAND: guard 0 true 2> <FTKR_ACTOR_COMMAND: skill 1 true 1> <FTKR_ACTOR_COMMAND: item 0 true 21>
 
これで誰かが逃げていると、マーシャに連れ戻すコマンドが表示される
連れ戻すコマンドが表示される
連れ戻すコマンドが表示される
 

20240911 防御がうまく動いていないようなので修正する

 
防御するとターンが進まない
→CTBプラグインの仕様で変更する必要がある箇所を変更していなかった
 
注意点
注意点
注意点に従って設定
注意点に従って設定
ここが元々2000でずっと俺のターンになっていた
ここが元々2000でずっと俺のターンになっていた
 
これで正しくターンが進行した。
ダメージも防御したときは半分になることを確認した。
 
 

20240912 アクターに逃走スキルを配置する

 
ターンのタイミングで自分で逃走できるようにする。
 

スキルを設定する

退避スキル
退避スキル
退避したときにかかるステート
退避したときにかかるステート
 
<逃走>だとネガティブなニュアンスが含まれてしまいそうだったので<退避>にした。
 

退避しているメンバーがいたときも<連れ戻す>スキルが表示されるようにする

逃走ステートがいる場合のスキル表示
<FTKR_ACTOR_COMMAND: custom 20 '$gameParty.members().some(actor => actor.isStateAffected(12))' 20>
↓↓↓ 退避してても表示されるようにする条件
$gameParty.members().some(actor => actor.isStateAffected(12) || actor.isStateAffected(13))
 
アクターコマンド<退避>を追加した
アクターコマンド<退避>を追加した
 

20240912 連れ戻す処理を修正する

 

スキル<連れ戻す>を確認する

現在の<連れ戻す>スキルは下記のようになっている。
<連れ戻す>の内容
<連れ戻す>の内容
 
コモンイベントを呼ぶようになっている。
 

コモンイベント<連れ戻す>を確認する

コモンイベント<連れ戻す>
コモンイベント<連れ戻す>
 
ターゲットを取得して分岐する準備してあった…!!
 

メンバーのステートを確認するスクリプト

$gameParty.members().forEach(actor => { console.log(`${actor.name()}のステート:`); actor.states().forEach(state => { console.log(`- ID: ${state.id}, 名前: ${state.name}`); }); });
ハロルドのステート: VM7815:4 - ID: 12, 名前: 逃走 VM7815:2 マーシャのステート: VM7815:4 - ID: 13, 名前: 退避 VM7815:2 テレーゼのステート: undefined
 

条件によって処理を分岐して誰でも連れ戻せるようにした

行動者・ターゲット・ターゲットの状態によって分岐しながら、連れ戻せるようにした。
◆注釈:## 直近ターンの行動者やターゲットを取得する :  :下記のような値が取れる :  :"{"subject":{"type":"アクター","index":1},"action":"チェインアタック","targets":[{"type":"エネミー","index":5}]}" ◆プラグインコマンド:直近ターン情報取得 45 ◆注釈: :  :## 行動者とターゲットIDを取得する ◆スクリプト:// 行動者インデックスを変数47に格納 :     :$gameVariables.setValue(47, $gameVariables.value(45).subject.index); :     :// 取得したターゲットインデックスを変数48に格納 :     :$gameVariables.setValue(48, $gameVariables.value(45).targets[0].index); ◆注釈: :  :## ターゲットインデッスID48の内容によって分岐する :  :ID:1 ハロルド :  :ID:2 マーシャ :  :ID:3 テレーゼ ◆条件分岐:バトル対象者ID(BeforeCommon) = 1 ◆注釈: :  :### ハロルドが逃走or退避中だったら ◆条件分岐:スクリプト:$gameParty.members()[0].states().some(state => state.id === 12 || state.id === 13) ◆注釈: :  :### ハロルドを連れ戻すのは誰か :  :ID:2 マーシャ :  :ID:3 テレーゼ ◆条件分岐:バトル行動者ID(BeforeCommon) = 2 ◆文章:Actor3(7), ウィンドウ, 下 :  :こぉらぁああー!! まちなさぁーーい!! ◆文章:Actor1(0), ウィンドウ, 下 :  :う、うわぁああーーー!!! ◆変数の操作:#0045 使い捨て変数 = 乱数 1..100 ◆条件分岐:使い捨て変数 ≤ 75 ◆文章:なし, ウィンドウ, 下 :  :ハロルドは連れ戻された ◆ステートの変更:ハロルド, - 逃走 ◆ステートの変更:ハロルド, - 退避 ◆ :それ以外のとき ◆文章:Actor1(0), ウィンドウ, 下 :  :いやだーーー!!! ◆文章:Actor3(7), ウィンドウ, 下 :  :はぁはぁ… もうっ! ◆文章:なし, ウィンドウ, 下 :  :ハロルドは追跡を振り切った ◆ :分岐終了 ◆ :分岐終了 ◆条件分岐:バトル行動者ID(BeforeCommon) = 3 ◆文章:Actor1(7), ウィンドウ, 下 :  :戻ってくるんだ!! ◆文章:Actor1(0), ウィンドウ, 下 :  :う、うわぁああーーー!!! ◆変数の操作:#0045 使い捨て変数 = 乱数 1..100 ◆条件分岐:使い捨て変数 ≤ 75 ◆文章:なし, ウィンドウ, 下 :  :ハロルドは連れ戻された ◆ステートの変更:ハロルド, - 逃走 ◆ステートの変更:ハロルド, - 退避 ◆ :それ以外のとき ◆文章:Actor1(0), ウィンドウ, 下 :  :いやだーーー!!! ◆文章:Actor1(7), ウィンドウ, 下 :  :はぁはぁ… なんという逃げ足! ◆文章:なし, ウィンドウ, 下 :  :ハロルドは追跡を振り切った ◆ :分岐終了 ◆ :分岐終了 ◆ :それ以外のとき ◆文章:なし, ウィンドウ, 下 :  :ハロルドはここにいる ◆ :分岐終了 ◆ :分岐終了 ◆注釈: :  :## マーシャを連れ戻す ◆条件分岐:バトル対象者ID(BeforeCommon) = 2 ◆条件分岐:スクリプト:$gameParty.members()[1].states().some(state => state.id === 12 || state.id === 13) ◆文章:なし, ウィンドウ, 下 :  :マーシャを連れ戻した ◆ステートの変更:マーシャ, - 逃走 ◆ステートの変更:マーシャ, - 退避 ◆ :それ以外のとき ◆文章:なし, ウィンドウ, 下 :  :マーシャはここにいる ◆ :分岐終了 ◆ :分岐終了 ◆条件分岐:バトル対象者ID(BeforeCommon) = 3 ◆条件分岐:スクリプト:$gameParty.members()[2].states().some(state => state.id === 12 || state.id === 13) ◆文章:なし, ウィンドウ, 下 :  :テレーゼを連れ戻した ◆ステートの変更:テレーゼ, - 逃走 ◆ステートの変更:テレーゼ, - 退避 ◆ :それ以外のとき ◆文章:なし, ウィンドウ, 下 :  :テレーゼはここにいる ◆ :分岐終了 ◆ :分岐終了
 

20240912 ステータスアイコンを名前の横に表示する

 
逃走しているのかどうかがわかりにくいためステートアイコンを表示したい。
今はどういうステート?
今はどういうステート?
 
→ステートにアイコンを設定するだけでよかった
ステートにアイコンを設定する
ステートにアイコンを設定する
 
アイコンが表示された
アイコンが表示された
 
 

20240912 ハロルドが逃走中のパーティステータス減少をステートにする

 
今はハロルドが逃走するとパーティーメンバーの攻撃力や防御力が下がってしまうように設定している。
これについて、表示が無いと弱体化していることがわからないと思った。
→気付かずにパーティーメンバーが弱くなっていたということになりそう
そこで、パーティーステータスプラグインで実現していた部分を、別ステータスを付与することで実現する。
 

対象ステートを作成する

勇者(仮)不在
勇者(仮)不在
ハロルドが逃げている時にメンバーに付与される<勇者(仮)不在>
 

ステート付与を確認する

逃走時及び連れ戻し時に実行されるコモンイベントで、付与と解除を行う。
付与
付与
 
ハロルドが逃げている状態
ハロルドが逃げている状態
 
連れ戻した=付与の解除
notion image
 

20240912 アイコンを更新する

 
以前別のゲームを作ろうとしていたときのアイコン画像をそのまま利用していた。
いったんもとのアイコン画像に戻す。
 
[プロジェクトのフォルダ]\img\system\
に配置されている「IconSet.png」ファイルを元のデータに戻した。
 
逃げたりテンション下がったり
逃げたりテンション下がったり
 
チーズよりはわかりやすくなった。
 

20240912 逃走中の回復量を調整する

 
逃走か退避中、キャラクターが本当に少しずつHPMP回復するようにしたい。
現在は少なくとも1は回復したいなーと思って下記のように設定していた。
 
徐々にHPMP回復する
徐々にHPMP回復する
 
ただ、今の設定だとHPは結構回復してしまうしMPは全然回復しないしとコントロールができていなかった。
柔軟に設定できるようにプラグインを導入する。
 
Torigoya_CustomRegenerate / カスタムターン回復&ダメージ設定 | 鳥小屋プラグイン置き場
https://torigoya-plugin.rutan.dev/battle/customRegenerate/
 
こちらのプラグインを利用させていただく。ありがとうございます!
 

動作を確認した

 
動作確認のため、逃走ステートに
<CustomRegenerateHP: -10>
を設定してみた。
→ターン毎に10ダメージを受けるようになった。動作している。
 

HPMPの1%か、1、大きい方を採用する

<CustomRegenerateHP: Math.max((0.01 * a.mhp),1)> <CustomRegenerateMP: Math.max((0.01 * a.mmp),1)>
 
これで良い具合に回復できると嬉しい。
 
 

 

20240913 HPが1になったらステート1「戦闘不能」にする

 
HPはゼロにならず、1の状態で戦闘不能になるようにしたい。
 
プラグインを準備した。
TT_CustomKnockoutSystem
//============================================================================= // TT_CustomKnockoutSystem.js // ---------------------------------------------------------------------------- // Copyright (c) 2024 たくろう_りらっくすーぷ // This software is released under the MIT License. // http://opensource.org/licenses/mit-license.php // ---------------------------------------------------------------------------- // Last Updated: 2024/09/13 // // Version // 1.0.0 2024/09/13 初版 // ---------------------------------------------------------------------------- // [Blog] : https://re-lacksoup-recipenote.bullet.site/ // [X(Twitter)]: https://x.com/relacksoup //============================================================================= /*:ja * @plugindesc カスタム戦闘不能システム (Version 1.0.0) * @author たくろう_りらっくすーぷ * * @help カスタム戦闘不能システム (Version 1.0.0) * * このプラグインは、以下の機能を実装します: * - HP1で戦闘不能ステートになる * - バトルではHP0にならない(現在のHP以上のダメージを受けてもHP1で戦闘不能ステートになる) * - バトル外のマップなどではHP1から通常の回復が可能 * * 使用方法: * 1. このプラグインをプロジェクトに追加します。 * * ◆プラグインパラメーター *  今のところありません * * ◆プラグインコマンド *  今のところありません *   * ◆注意 *  - このプラグインは既存のゲームシステムを変更するため、他のプラグインとの互換性に注意が必要です。 *  - ゲームバランスに大きな影響を与える可能性があるため、十分なテストを行ってください。 *  - 必要に応じて、UIやメッセージなどを調整して、プレイヤーにシステムの変更を明確に伝えることをおすすめします。 *   */ (function() { // HP減少時の処理をオーバーライド Game_BattlerBase.prototype.setHp = function(hp) { this._hp = hp; if (this._hp <= 0) { this._hp = 1; if (!this.isStateAffected(1)) { // 戦闘不能ステートでない場合 this.addState(1); // 戦闘不能ステートを付与 } } this._hp = this._hp.clamp(0, this.mhp); }; Game_Battler.prototype.refresh = function() { Game_BattlerBase.prototype.refresh.call(this); if (this.hp <= 1) { this.addState(this.deathStateId()); this._hp = 1; } else { this.removeState(this.deathStateId()); } }; Game_BattlerBase.prototype.revive = function() { if (this._hp === 1) { this._hp = 2; } }; // // 回復処理をオーバーライド // var _Game_Battler_gainHp = Game_Battler.prototype.gainHp; // Game_Battler.prototype.gainHp = function(value) { // if (this.isStateAffected(1) && $gameParty.inBattle()) { // // バトル中で戦闘不能の場合、回復を無効化 // return; // } // _Game_Battler_gainHp.call(this, value); // }; // // アイテム使用時の処理をオーバーライド // var _Game_Action_testApply = Game_Action.prototype.testApply; // Game_Action.prototype.testApply = function(target) { // if (this.isItem() && this.item().meta.SpecialRevive) { // return true; // 専用の復活アイテムは常に使用可能 // } // if (target.isStateAffected(1) && $gameParty.inBattle()) { // return false; // バトル中の戦闘不能には通常のアイテムを使用不可 // } // return _Game_Action_testApply.call(this, target); // }; // // スキル使用時の処理をオーバーライド // var _Game_Action_applyItemUserEffect = Game_Action.prototype.applyItemUserEffect; // Game_Action.prototype.applyItemUserEffect = function(target) { // if (this.item().meta.SpecialRevive && target.isStateAffected(1)) { // target.removeState(1); // 戦闘不能ステートを解除 // target.setHp(1); // HPを1に設定 // } // _Game_Action_applyItemUserEffect.call(this, target); // }; })();
 
HP1で戦闘不能になる
HP1で戦闘不能になる
 
メンバー全員が戦闘不能になればゲームオーバーになることも確認した。
 
復活させるには対象が戦闘不能者のスキルやアイテムを使用する必要がある。
戦闘不能を解除するスキル
戦闘不能を解除するスキル
 

 

20240914 退避ステートと戦闘不能ステートのキャラクターに回復行動が取れるのを無しにしたい

 
ハロルドが逃走している間は、回復やアイテムが使えないようにしていた。
逃走中は非活性
逃走中は非活性
 
これを退避中も対象に出来ないようにしたい。
戦闘不能時も対象にできないようにしたい。
 

複数指定できるようにする

 
逃走中にスキルやアイテムが使えないようにしていたのは RestrictionTargetSkill.js で設定していた。
プラグインを改変し、指定した変数にカンマ区切りでステートIDの値を指定することで、
複数ステートでスキル・アイテムが使えないようにした。
 
notion image
 
これで 1:戦闘不能 12:逃走 13:退避 このステートになっているときはスキル・アイテムの対象にならないようにした。
notion image
 
この場合戦闘不能時、復帰させるスキルも使えないため、復帰スキルはバトル中無効にならないスキルID指定で指定した。
 

 

20240914 パーティーメンバーが全員逃走or退避したら逃走したことにする

 
※逃走不可のバトルは作るの大変? 作らなくていい?
パーティーメンバーが特定のステートになったら、逃げ出す、もしくは全滅になるプラグインを準備した。
 
//============================================================================= // TT_EscapeOnStates.js // ---------------------------------------------------------------------------- // Copyright (c) 2024 たくろう_りらっくすーぷ // This software is released under the MIT License. // http://opensource.org/licenses/mit-license.php // ---------------------------------------------------------------------------- // Last Updated: 2024/09/13 // // Version // 1.1.0 2024/09/13 全滅もカンマ区切りで複数指定できるようににした // 1.0.0 2024/09/13 初版 // ---------------------------------------------------------------------------- // [Blog] : https://re-lacksoup-recipenote.bullet.site/ // [X(Twitter)]: https://x.com/relacksoup //============================================================================= /*:ja * @plugindesc バトル中に特定のステート条件で逃走するプラグイン (Version 1.1.0) * @author たくろう_りらっくすーぷ * * @param EscapeStateIds * @desc 逃走条件となるステートIDのリスト(カンマ区切り) * @default 12,13 * * @param DefeatedStateIds * @desc 全滅条件となるステートIDのリスト(カンマ区切り) * @default 1 * * @target MV * @help バトル中に特定のステート条件で、自動的に逃走または全滅処理を行います。 * * * 使用方法: * 1. このプラグインをプロジェクトに追加し、有効にしてください。 * 2. プラグインパラメータで逃走条件と全滅条件のステートIDを設定してください。 * * ◆プラグインパラメーター *  逃走条件となるステートIDのリスト(カンマ区切り) *    生存しているパーティメンバー全員が設定したいずれかのステートになった場合、逃走します *    デフォルト:12,13 * *  全滅条件となるステートIDのリスト(カンマ区切り) *    生存しているパーティメンバー全員が設定したいずれかのステートになった場合、全滅します *    デフォルト:1 * * ◆プラグインコマンド *  今のところありません *   * ◆注意 *  他プラグインとの競合などは検証できていません。 *   */ /*:ja * @plugindesc バトル中に特定のステート条件で逃走またはゲームオーバーするプラグイン (Version 1.2.1) * @author たくろう_りらっくすーぷ * * @param EscapeStateIds * @desc 逃走条件となるステートIDのリスト(カンマ区切り) * @default 12,13 * * @param DefeatedStateIds * @desc 全滅条件となるステートIDのリスト(カンマ区切り) * @default 1 * * @target MV * @help バトル中に特定のステート条件で、自動的に逃走またはゲームオーバー処理を行います。 * * 使用方法: * 1. このプラグインをプロジェクトに追加し、有効にしてください。 * 2. プラグインパラメータで逃走条件と全滅条件のステートIDを設定してください。 * * ◆プラグインパラメーター *  逃走条件となるステートIDのリスト(カンマ区切り) *    生存しているパーティメンバー全員が設定したいずれかのステートになった場合、逃走します *    デフォルト:12,13 * *  全滅条件となるステートIDのリスト(カンマ区切り) *    生存しているパーティメンバー全員が設定したいずれかのステートになった場合、全滅します *    デフォルト:1 * * ◆プラグインコマンド *  今のところありません *   * ◆注意 *  他プラグインとの競合などは検証できていません。 */ (function() { var parameters = PluginManager.parameters('TT_EscapeOnStates'); var escapeStateIds = (parameters['EscapeStateIds'] || '').split(',').map(Number); var defeatedStateIds = (parameters['DefeatedStateIds'] || '').split(',').map(Number); var _BattleManager_checkBattleEnd = BattleManager.checkBattleEnd; BattleManager.checkBattleEnd = function() { if (this._phase) { if (this.checkEscapeOnStates()) { return true; } } return _BattleManager_checkBattleEnd.call(this); }; BattleManager.checkEscapeOnStates = function() { var allMembersAffected = $gameParty.aliveMembers().every(function(member) { return escapeStateIds.some(function(stateId) { return member.isStateAffected(stateId); }) || defeatedStateIds.some(function(stateId) { return member.isStateAffected(stateId); }); }); if (allMembersAffected) { if ($gameParty.aliveMembers().every(function(member) { return defeatedStateIds.some(function(stateId) { return member.isStateAffected(stateId); }); })) { this.processCustomDefeat(); } else { this.processEscape(); } return true; } return false; }; // Game_Partyクラスに新しいメソッドを追加 Game_Party.prototype.setAllDead = function() { this.members().forEach(function(member) { member.setHp(0); }); }; BattleManager.processCustomDefeat = function() { $gameParty.setAllDead(); // 新しく追加したメソッドを使用 this.processDefeat(); SceneManager.goto(Scene_Gameover); }; BattleManager.processEscape = function() { $gameParty.removeBattleStates(); this.displayEscapeSuccessMessage(); this._escaped = true; this.processAbort(); }; BattleManager.displayEscapeSuccessMessage = function() { $gameMessage.add(TextManager.escapeStart.format($gameParty.name())); }; })();
 
notion image
 
生存メンバーのステートが 12:逃走 13:退避 いずれかになったら逃げ出したになる
全滅については 1:戦闘不能 のまま
 

20240915 失敗メッセージを上書きする

 
スキル<退避>
スキル<退避>
 
「退避」は自分自身に使用するスキルとして作成している。
ただ、成功率80%にしており、たまに失敗する。
 
失敗時のバトルログの表示が「%1には効かなかった!」と表示される。
効かなかった!
効かなかった!
 
これを「退避できなかった!」みたいなバトルログにしたい。
 

CustomizeFailureMessage.jsを導入する

 
 
プラグインの仕様にあわせて、メモ欄に記載した。
 
メモ欄に失敗メッセージを記載
メモ欄に失敗メッセージを記載
 
失敗メッセージの変更を確認した。
 
しかし回り込まれた!
しかし回り込まれた!
 

 

今週のまとめ

  • プラグインで色々できるのはいいが、調整に時間がかかるようになってきた
  • 自分で設定したやり方が複雑になってきて、どうやっていたか自分でもわからないところが出てきた
 

今後やりたいこと

  • そろそろバトル検証は一段落してもいいかもしれない
    • バトルでやりたいことは大方出来そうな気配