1, 2, 6。これらはすべて連動しているため、BASE値を保存・復元するのではなく、毎フレーム別々の要素からプレイヤーのステータスを再構築したらどうでしょうか?各ブーストには独立したパーセント変数があり、無効化時は100になります。値を「戻す」必要がないため、2つのブーストが互いに相殺されることはなく、フォーム変化は即座に反映されます。
追加する変数は「フォーム攻撃力」「フォーム防御力」「アクション攻撃力%」「アクション防御力%」「アイテム攻撃力%」「アイテム防御力%」「アイテムタイマー」です。4つの%変数は100から開始する必要があるので、ゲーム開始時に実行される処理で初期化してください。そうしないと、すべてが0倍になってしまいます。その後、常時実行される並列共通イベントを1つ設定します:
◆条件分岐: VITAL SHAPE = 1
◆変数操作: #0XXX フォーム攻撃力 = 20
◆変数操作: #0XXX フォーム防御力 = 20
◆条件分岐終了
◆条件分岐: VITAL SHAPE = 2
◆変数操作: #0XXX フォーム攻撃力 = 25
◆変数操作: #0XXX フォーム防御力 = 15
◆条件分岐終了
(各フォームごとに分岐を作成し、実際の数値を入力してください)
◆条件分岐: アイテムタイマー > 0
◆変数操作: #0XXX アイテムタイマー -= 1
◆条件分岐: アイテムタイマー = 0
◆変数操作: #0XXX アイテム攻撃力% = 100
◆変数操作: #0XXX アイテム防御力% = 100
◆条件分岐終了
◆条件分岐終了
◆変数操作: #0226 プレイヤー攻撃力 = フォーム攻撃力
◆変数操作: #0226 プレイヤー攻撃力 *= アクション攻撃力%
◆変数操作: #0226 プレイヤー攻撃力 /= 100
◆変数操作: #0226 プレイヤー攻撃力 *= アイテム攻撃力%
◆変数操作: #0226 プレイヤー攻撃力 /= 100
◆変数操作: #0227 プレイヤー防御力 = フォーム防御力
◆変数操作: #0227 プレイヤー防御力 *= アクション防御力%
◆変数操作: #0227 プレイヤー防御力 /= 100
◆変数操作: #0227 プレイヤー防御力 *= アイテム防御力%
◆変数操作: #0227 プレイヤー防御力 /= 100
2について、並列イベントのアイデアは近かったですね。ブーストが乗算されるため、オフにするためのスイッチは不要です。
フォーム7のAについて、BASE、ATK、DEFに触れる6行は以下の2行に置き換えます。35%減らすということは、65を掛けることです:
◆変数操作: #0XXX アクション攻撃力% = 150
◆変数操作: #0XXX アクション防御力% = 65
そして、ActionTimerが0になると、2つのBASE行は以下のようになります:
◆変数操作: #0XXX アクション攻撃力% = 100
◆変数操作: #0XXX アクション防御力% = 100
6について、アイテムにはデータベース内で共通イベントを設定し、アイテムの「効果」から呼び出します。共通イベントでは、アイテム攻撃力% = 150、アイテムタイマー = 600(10秒間)を設定します。フォームブーストとアイテムブーストはそれぞれ独立した%変数を持つため、片方が終了してももう片方には影響しません。プレイヤー攻撃力やプレイヤー防御力を直接設定する他の処理がある場合は、これを削除する必要があります。そうしないと競合します。
-
良さそうです!
-
チェックは「≥ 2」となっていますが、おそらく「≥ 6」の意図だと思われます。群れ発生は、おそらく+= 1が非常に末尾にあるためです。ループ内で待機しているスポナーはすべて、カウントが同時に減少する瞬間を目撃し、すべてが通過し、ランダム待機が完了するまで自分自身のカウントにはなりません。+= 1をElseブロックのトップ、チェックの直下に移動したらどうでしょうか。そうすれば、条件を満たした瞬間にその位置が占有されます。その後、ENEMY AMOUNT SPAWNEDのロールでまだスポーンしない場合もあるため、その分岐では位置を解放する必要があります:
◆変数操作: #0188 敵に勝利 += 1
◆変数操作: #0184 画面上の敵数(RN?) -= 1
◆イベント処理を終了
GO ONWARD THREEにある+= 1は削除します。
- TurnInPlaceを使用しているとのことなので、まずプラグインパラメータを確認してください。すでにこれ用のスイッチがあるかもしれません。もしない場合、小さなプラグインを作成するのが最もクリーンな方法だと思われます。イベントでは、矢印キーによる移動を止めることなくターンを止めることはできないためです。10を希望するスイッチに置き換えてください:
/*:
* @target MZ
* @plugindesc スイッチがONの間のみターンする。
*/
(() => {
const _executeMove = Game_Player.prototype.executeMove;
Game_Player.prototype.executeMove = function(direction) {
if ($gameSwitches.value(10)) {
this.setDirection(direction);
} else {
_executeMove.call(this, direction);
}
};
})();
その後、トグルはボタンを監視する並列共通イベントとして機能します。スイッチがONならOFFに、OFFならONに切り替えます。



