TABLE OF CONTENTS

仮RPGの進捗ノート20240923-20240929

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

Sep 29, 2024

はじめに

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

20240923 セルフ変数が使えるようになるプラグイン

 
セルフスイッチだけだと処理しきれないイベントが出てきた。
セルフ変数のプラグインを導入して、変数でコントロールできるようにしてみる。
 
 
ただ、並列処理が走っているとうまく動作しなかった。
↦並列処理側のセルフ変数を参照してしまうみたい?
 
次のプラグインを導入することで解決した。
 

20240923 並列処理イベントで、他イベント実行中は動作しないようにできるようにした

 
上記セルフ変数対応のため、他イベント実行中は並列処理を止めるように指定できるようなプラグインを準備した。
 
※下記リンク先で別名プラグインとして更新した
 

TT_ParallelEventStop.js

//============================================================================= // TT_ParallelEventStop.js // ---------------------------------------------------------------------------- // Copyright (c) 2024 たくろう_りらっくすーぷ // This software is released under the MIT License. // http://opensource.org/licenses/mit-license.php // ---------------------------------------------------------------------------- // Last Updated: 2024/09/23 // // Version // 1.0.0 2024/09/23 初版 // ---------------------------------------------------------------------------- // [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) * * ◆使用方法 *  1. このプラグインをプロジェクトに追加します。 *  2. 停止させたい並列処理イベントのメモ欄に<イベント中ストップ>と記入します。 * * ◆機能説明 *  メモ欄に<イベント中ストップ>と記載された並列処理イベントは、 *  他のイベントが実行中の場合、一時的に停止します。 * * ◆注意 *  このプラグインは他のイベント関連のプラグインと競合する可能性があります。 *  競合が発生した場合は、プラグインの順序を調整してください。 */ (function() { 'use strict'; var _Game_Map_setupEvents = Game_Map.prototype.setupEvents; Game_Map.prototype.setupEvents = function() { _Game_Map_setupEvents.call(this); this.events().forEach(function(event) { if (event.event().note.match(/<イベント中ストップ>/)) { event.setStopDuringEvents(true); } }); }; Game_Event.prototype.setStopDuringEvents = function(stop) { this._stopDuringEvents = stop; }; var _Game_Event_updateParallel = Game_Event.prototype.updateParallel; Game_Event.prototype.updateParallel = function() { if (this._stopDuringEvents && $gameMap.isEventRunning()) { return; } _Game_Event_updateParallel.call(this); }; })();
 
このプラグインを導入して、対象の並列イベントに下記のように記載する。
 
この並列イベントは他イベント実行中は停止する
この並列イベントは他イベント実行中は停止する
 
これでセルフ変数の挙動も問題なくなった。
 

20240924 敵グループを動的に加算する

 
複数の敵グループとまとめてエンカウントする仕組みを考えたい。
動的に敵グループを加算する方法を確認した。
 
トリアコンタンさんの下記プラグインを使用させていただく。
 
 
一部を改変した。
* 新機能:変数を使用した敵グループ追加 * \ADDVAR[1] # 変数1に設定された配列の値を敵グループIDとして使用します。 * 例:変数1に[1,1,2]が設定されている場合、 * 敵グループID 1、1、2の敵キャラが順番に追加されます。 *
 
変数に敵グループIDの値を指定する配列を設定しておく。
この変数をグループ名に含めた敵グループを作ってそれとエンカウントする。
 
配列を入れる「変数59」を指定した敵グループを作成
配列を入れる「変数59」を指定した敵グループを作成
 
 
変数59に配列[1,2]を指定して戦闘の処理
変数59に配列[1,2]を指定して戦闘の処理
 
敵グループID1と2が結合されたバトルになった
敵グループID1と2が結合されたバトルになった
 
 

20240924 敵の配置がランダムになるようにした

 
敵グループを動的に加算するため、敵の配置が重なってしまう。
ランダムで配置するようにする。
 
砂川赳さんの下記プラグインを使用させていただく。
 
敵グループの配置を自動化&ランダム化【RPGツクールMZ&MVプラグイン】 - New RPG Project
https://newrpg.seesaa.net/article/475049887.html
 
 
敵グループの名前の頭に「#」を追加する
敵グループの名前の頭に「#」を追加する
 
これでランダム配置になった。
 
重ならずランダムに配置された
重ならずランダムに配置された
 
 

20240924 配列を操作するプラグインコマンドを提供するプラグイン

 
敵グループを配列で渡せるようにした。
変数の配列を簡単に操作できるようにプラグインを準備した。
 
TT_ArrayOperations.js
//============================================================================= // TT_ArrayOperations.js // ---------------------------------------------------------------------------- // Copyright (c) 2024 たくろう_りらっくすーぷ // This software is released under the MIT License. // http://opensource.org/licenses/mit-license.php // ---------------------------------------------------------------------------- // Last Updated: 2024/09/25 // // Version // 1.1.0 2024/09/25 selfオプションを追加 // 1.0.0 2024/09/24 初版 // ---------------------------------------------------------------------------- // [Blog] : https://re-lacksoup-recipenote.bullet.site/ // [X(Twitter)]: https://x.com/relacksoup //============================================================================= /*:ja * @plugindesc 変数内の配列操作を行うプラグイン (Version 1.1.0) * @author たくろう_りらっくすーぷ * * @help 変数内の配列に値を追加したり、配列をリセットしたりするプラグインコマンドを提供します。 (Version 1.1.0) * * ◆使用方法 *  1. このプラグインをプロジェクトに追加します。 *  2. イベントコマンドの「プラグインコマンド」で以下のコマンドを使用します。 * * ◆プラグインコマンド *  ・配列追加 [変数ID] [値] *   例: 配列追加 59 1 *   指定した変数IDの配列に新しい値を追加します。 *   変数が空または配列でない場合、新しい配列を作成して値を追加します。 * *  ・配列追加 [変数ID] self *   例: 配列追加 59 self *   指定した変数IDの配列に、このプラグインコマンドを実行しているイベントのIDを追加します。 * *  ・配列リセット [変数ID] *   例: 配列リセット 59 *   指定した変数IDの値を空の配列にリセットします。 * * ◆注意 *  このプラグインは他の変数操作プラグインと競合する可能性があります。 *  競合が発生した場合は、プラグインの順序を調整してください。 */ (function() { var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { _Game_Interpreter_pluginCommand.call(this, command, args); if (command === '配列追加') { var variableId = Number(args[0]); var value; if (args[1].toLowerCase() === 'self') { value = this.eventId(); } else { value = Number(args[1]); } var array = $gameVariables.value(variableId); if (!Array.isArray(array)) { array = []; } array.push(value); $gameVariables.setValue(variableId, array); } if (command === '配列リセット') { var variableId = Number(args[0]); $gameVariables.setValue(variableId, []); } }; })();
 
配列の操作
配列の操作
 
これで簡単に配列を操作できる
 

20240924 セルフ変数の書き変えをまとめて出来るようにした

 
このプラグインを改変させてもらった。
 
例)・変数59に[12,13,18]が格納されている。   ・プラグインコマンドで「SetSelfVariable 1 v[59] 10 3」とした場合、マップID 1 番のイベントID 12 番と13 番と18 番のセルフ変数 10 番を3に変更する
 
notion image
 

20240924 特定のスイッチがONのとき、メモ欄に<スイッチON中実行>の記載があるイベントしか実行されないようにする

 
エンカウント処理中に誰かに話しかけたり宝箱が開けられたりすると困りそうな気がする。
(位置トリガーで発生するイベントを配置するときは注意が必要だ)
特定のスイッチがONのとき、メモ欄に所定の文字列<スイッチON中実行>があるイベントだけが起動できると、その問題も起きないかも知れない。
 
このプラグインを更新した。
 

TT_EventExecutionController.js

//============================================================================= // TT_EventExecutionController.js // ---------------------------------------------------------------------------- // Copyright (c) 2024 たくろう_りらっくすーぷ // This software is released under the MIT License. // http://opensource.org/licenses/mit-license.php // ---------------------------------------------------------------------------- // Last Updated: 2024/09/24 // // Version // 1.3.0 2024/09/24 スイッチOFF時の動作を修正 // 1.2.0 2024/09/24 すべてのトリガーに対するスイッチ制御機能を追加 // 1.1.0 2024/09/24 並列処理のスイッチ制御機能を追加 // 1.0.0 2024/09/23 初版 // ---------------------------------------------------------------------------- // [Blog] : https://re-lacksoup-recipenote.bullet.site/ // [X(Twitter)]: https://x.com/relacksoup //============================================================================= /*:ja * @plugindesc イベント実行制御プラグイン (Version 1.3.0) * @author たくろう_りらっくすーぷ * * @param ControlSwitch * @text 制御スイッチ * @type switch * @desc イベント実行を制御するスイッチのID * @default 1 * * @help イベントの実行を制御します。 (Version 1.3.0) * * ◆使用方法 *  1. このプラグインをプロジェクトに追加します。 *  2. 他のイベント実行中に停止させたい並列処理イベントのメモ欄に<イベント中ストップ>と記入します。 *  3. 制御スイッチがONの時のみ実行させたいイベントのメモ欄に<スイッチON中実行>と記入します。 * * ◆機能説明 *  ・メモ欄に<イベント中ストップ>と記載された並列処理イベントは、 *   他のイベントが実行中の場合、一時的に停止します。 *  ・制御スイッチがONの時は、<スイッチON中実行>と記載された *   イベントのみが実行可能になります。 *  ・制御スイッチがOFFの時は、<スイッチON中実行>の有無に関わらず *   すべてのイベントが実行可能になります。 * * ◆注意 *  ・このプラグインは他のイベント関連のプラグインと競合する可能性があります。 *   競合が発生した場合は、プラグインの順序を調整してください。 *  ・制御スイッチの設定は慎重に行ってください。不適切な設定により、 *   ゲームの進行に支障をきたす可能性があります。 */ (function() { 'use strict'; var parameters = PluginManager.parameters('TT_EventExecutionController'); var controlSwitchId = Number(parameters['ControlSwitch'] || 1); var _Game_Map_setupEvents = Game_Map.prototype.setupEvents; Game_Map.prototype.setupEvents = function() { _Game_Map_setupEvents.call(this); this.events().forEach(function(event) { if (event.event().note.match(/<イベント中ストップ>/)) { event.setStopDuringEvents(true); } if (event.event().note.match(/<スイッチON中実行>/)) { event.setSwitchControlled(true); } }); }; Game_Event.prototype.setStopDuringEvents = function(stop) { this._stopDuringEvents = stop; }; Game_Event.prototype.setSwitchControlled = function(controlled) { this._switchControlled = controlled; }; var _Game_Event_updateParallel = Game_Event.prototype.updateParallel; Game_Event.prototype.updateParallel = function() { if (this._stopDuringEvents && $gameMap.isEventRunning()) { return; } if (!this.canExecute()) { return; } _Game_Event_updateParallel.call(this); }; var _Game_Event_start = Game_Event.prototype.start; Game_Event.prototype.start = function() { if (this.canExecute()) { _Game_Event_start.call(this); } }; Game_Event.prototype.canExecute = function() { var switchOn = $gameSwitches.value(controlSwitchId); if (switchOn) { return this._switchControlled; } else { return true; // スイッチがOFFの場合は常に実行可能 } }; })();
 
 

20240925 敵キャラがプレイヤーを発見したら追跡してくる

 
以前動作検証したとき
ツクール道中記: プレイヤー探索プラグイン:使い方
https://mankind-games.blogspot.com/2016/09/blog-post.html
シンボルエンカウントで鬼ごっこ的要素を入れた作り方 #RPGツクールMV - RPGツクールMZ・MV初心者的備忘録 - FGMG (Fun Game Make Group)
https://fungamemake.com/archives/62
 
このあたりを参考に再設定した。
見つかったら追いかけてくるイベントになった
見つかったら追いかけてくるイベントになった
 
 

20240925 テンプレートプラグインの自律移動がうまく移動しない原因を確認する

 
テンプレイートプラグインを利用して、イベントを複製してみた。
ページの実行内容は問題ないが、自律移動が移動しない。
原因を確認する。
 
向きは向けている。
移動ができない。
 

プラグインをOFFしてみる

 
競合しそうなプラグインをいったんまとめてOFFしてみる。
まとめてOFFする方法なんてあったのか…! 知りませんでした(右クリックメニューから)
検索まであるんですね…!
プラグインをまとめてOFFにする
プラグインをまとめてOFFにする
 
OFFにしたらテンプレートプラグインの自律移動が動き出した!
どれかが競合している。
 

少しずつONに戻していき、動かなくなるプラグインを特定する

 
リージョンで移動範囲を指定するプラグインが原因だった。
リージョン移動しないように固有イベント側に設定することで解決した。
 

20240926 テンプレートプラグインの固有イベント上書きで上書きする設定を指定できるようにする

 
トリアコンタンさんのテンプレートプラグインを使用させていただいている。
Delusional Field: テンプレートイベントプラグイン
https://triacontane.blogspot.com/2016/06/blog-post_25.html
 
このプラグインでは
固有イベントのメモ欄に <TE上書き> もしくは <TEOverRide> と記載するとプラグインパラメータで指定した任意の設定について固有イベントの設定で上書きできます。
 
この上書きする設定がプラグインパラメータで設定した一律のもので上書きではなく、個々に上書きするかどうか設定できるようにする別のプラグインを作成した。
 

TT_TemplateEventExtension.js

//============================================================================= // TT_TemplateEventExtension.js // ---------------------------------------------------------------------------- // Copyright (c) 2024 たくろう_りらっくすーぷ // This software is released under the MIT License. // http://opensource.org/licenses/mit-license.php // ---------------------------------------------------------------------------- // Last Updated: 2024/09/26 // // Version // 1.0.0 2024/09/26 初版 // ---------------------------------------------------------------------------- // [Blog] : https://re-lacksoup-recipenote.bullet.site/ // [X(Twitter)]: https://x.com/relacksoup //============================================================================= /*: * @plugindesc テンプレートイベントの上書き設定を個別に行えるようにTemplateEvent.js拡張する (Version 1.0.0) * @author たくろう_りらっくすーぷ * * @help * このプラグインは、TemplateEvent.jsの機能を拡張し、 * テンプレートイベントの上書き設定を個別に行えるようにします。(Version 1.0.0) * * ◆プラグインパラメーター *  今のところありません * * ◆使用方法: * 固有イベントのメモ欄に以下のタグを記述することで、 * 個別に上書きする項目を指定できます。 * * <TE上書き:画像> * <TE上書き:向き> * <TE上書き:自律移動> * <TE上書き:プライオリティ> * <TE上書き:トリガー> * <TE上書き:オプション> * * <TE上書き>タグのみを使用すると、元のプラグインの仕様通りに動作します。 * * ◆注意 * このプラグインは、TemplateEvent.jsよりも下に配置してください。 */ (function() { 'use strict'; // TemplateEvent.jsの関数をオーバーライド var _Game_Event_setTemplate = Game_Event.prototype.setTemplate; Game_Event.prototype.setTemplate = function(event) { _Game_Event_setTemplate.call(this, event); if (this.hasTemplate()) { this.setupIndividualOverride(event); } }; var createPluginParameter = function(pluginName) { var paramReplacer = function(key, value) { if (value === 'null') { return value; } if (value[0] === '"' && value[value.length - 1] === '"') { return value; } try { return JSON.parse(value); } catch (e) { return value; } }; var parameter = JSON.parse(JSON.stringify(PluginManager.parameters(pluginName), paramReplacer)); PluginManager.setParameters(pluginName, parameter); return parameter; }; var param = createPluginParameter('TemplateEvent'); Game_Event.prototype.setupIndividualOverride = function(event) { this._individualOverride = { Image: false, Direction: false, Move: false, Priority: false, Trigger: false, Option: false }; var note = event.note; if (note.match(/<TE上書き>/i)) { // <TE上書き>タグのみの場合、元のプラグインの仕様を使用 this._individualOverride = { Image: param.OverrideTarget.Image, Direction: param.OverrideTarget.Direction, Move: param.OverrideTarget.Move, Priority: param.OverrideTarget.Priority, Trigger: param.OverrideTarget.Trigger, Option: param.OverrideTarget.Option }; this._override = true; return; } if (note.match(/<TE上書き:画像>/i)) this._individualOverride.Image = true; if (note.match(/<TE上書き:向き>/i)) this._individualOverride.Direction = true; if (note.match(/<TE上書き:自律移動>/i)) this._individualOverride.Move = true; if (note.match(/<TE上書き:プライオリティ>/i)) this._individualOverride.Priority = true; if (note.match(/<TE上書き:トリガー>/i)) this._individualOverride.Trigger = true; if (note.match(/<TE上書き:オプション>/i)) this._individualOverride.Option = true; // 個別の上書き設定がある場合、_overrideをtrueに設定 this._override = Object.values(this._individualOverride).some(Boolean); }; // TemplateEvent.jsの関数をオーバーライド var _Game_Event_overridePageSettings = Game_Event.prototype.overridePageSettings; Game_Event.prototype.overridePageSettings = function() { var page = this.getOriginalPage(); if (!page || !this._individualOverride) { // 個別設定がない場合は元の関数を呼び出す _Game_Event_overridePageSettings.call(this); return; } var image = page.image; if (this._individualOverride.Image) { if (image.tileId > 0) { this.setTileImage(image.tileId); } else { this.setImage(image.characterName, image.characterIndex); } } if (this._individualOverride.Direction) { if (this._originalDirection !== image.direction) { this._originalDirection = image.direction; this._prelockDirection = 0; this.setDirectionFix(false); this.setDirection(image.direction); } if (this._originalPattern !== image.pattern) { this._originalPattern = image.pattern; this.setPattern(image.pattern); } } if (this._individualOverride.Move) { this.setMoveSpeed(page.moveSpeed); this.setMoveFrequency(page.moveFrequency); this.setMoveRoute(page.moveRoute); this._moveType = page.moveType; } if (this._individualOverride.Priority) { this.setPriorityType(page.priorityType); } if (this._individualOverride.Option) { this.setWalkAnime(page.walkAnime); this.setStepAnime(page.stepAnime); this.setDirectionFix(page.directionFix); this.setThrough(page.through); } if (this._individualOverride.Trigger) { this._trigger = page.trigger; if (this._trigger === 4) { this._interpreter = new Game_Interpreter(); } else { this._interpreter = null; } } }; })();
 
テンプレートの設定上書きを指定する
テンプレートの設定上書きを指定する
 
 

20240927 セルフスイッチ操作のプラグインについて修正した

 
イベント名で指定できるように改修したときに、範囲指定できる仕様がエラーになっていた。
修正した。
 
修正前)
args が数値でもなく、A, B, C, D の組み合わせでもない場合にイベント名だと判断していた
if (isNaN(args[0]) && !/^[ABCD]+$/.test(args[0])) { // イベント名が指定された場合
修正後)
args が数値でもなく、A, B, C, D の組み合わせでもなく、「数字-数字」でもない場合にイベント名だと判断する
if (isNaN(args[0]) && !/^[ABCD]+$/.test(args[0]) && !/^\d+-\d+$/.test(args[0])) { // イベント名が指定された場合
 

20240928 注釈をメモ欄として扱う【プラグイン】を導入する

 
イベントのメモ欄に記載する内容が多くなってきた。
メモ欄が小さく見通しが悪いため、対象イベントが何をしているか確認するのが大変。
 
あわやまたなさんの下記のプラグインを使用させていただく。
注釈をメモ欄として扱う【プラグイン】: あわや自己またもや三時
https://awaya3ji.seesaa.net/article/482174877.html
 
注釈がメモ欄と結合される
注釈がメモ欄と結合される
 
かなり見通しが良くなったし、コメントも残せて良い感じ!
 

20240928 注釈をメモ欄として扱うプラグインを自分用に改編

 
上記プラグインを自分用に改編した。
 
イベントの1ページ目の1行目から連続する注釈をメモ欄にします。
 
連続するメモ欄を結合する
連続するメモ欄を結合する
 
これで6行以上の長いメモ欄注釈も設定できるようになった。
 

20240929 パーティーコマンドを非表示にする

 
現状パーティーコマンドは使わない予定。
非表示にする。
 
下記のプラグインを使用させていただいている。
 
戦闘システムをCTBに変更する【RPGツクールMZ&MVプラグイン】 - New RPG Project
https://newrpg.seesaa.net/article/472859369.html
 
このプラグインでは、戦闘開始時パーティーコマンドをスキップしてアクターコマンドの選択になります。
アクターコマンドの選択時、キャンセルボタンなどを押すことでパーティーコマンドの選択に遷移できるのですが、このパーティーコマンドの遷移をなくします。
 
//============================================================================= // TT_DisablePartyCommandCTB.js // ---------------------------------------------------------------------------- // Copyright (c) 2024 たくろう_りらっくすーぷ // This software is released under the MIT License. // http://opensource.org/licenses/mit-license.php // ---------------------------------------------------------------------------- // Last Updated: 2024/09/29 // // Version // 1.0.0 2024/09/29 初版 // ---------------------------------------------------------------------------- // [Blog] : https://re-lacksoup-recipenote.bullet.site/ // [X(Twitter)]: https://x.com/relacksoup //============================================================================= /*:ja * @plugindesc CTBでパーティーコマンドへの遷移を無効化するプラグイン (Version 1.0.0) * @author たくろう_りらっくすーぷ * * @help CTB戦闘システムにおいて、アクターコマンドからパーティーコマンドへの * 遷移を無効化します。 * * 使用方法: * 1. このプラグインをプロジェクトに追加し、有効にしてください。 * 2. プラグイン管理でこのプラグインをNRP_CountTimeBattle.jsの下に配置してください。 * * ◆プラグインパラメーター *  今のところありません * * ◆プラグインコマンド *  今のところありません *   * ◆注意 *  砂川赳さんのNRP_CountTimeBattle.jsと併用することを前提としています。 *  他のプラグインとの競合については十分に検証されていません。 *   */ (function() { 'use strict'; // Scene_Battle.prototype.selectPreviousCommandを上書き Scene_Battle.prototype.selectPreviousCommand = function() { // パーティーコマンドへの遷移を行わず、そのまま何もしない }; // BattleManager.selectPreviousCommandを上書き BattleManager.selectPreviousCommand = function() { // パーティーコマンドへの遷移を行わず、そのまま何もしない }; })();
 
 

20240929 タイマーを制御するCRTA_TimerManagerを導入した

 
バトル遷移時にタイマー表示する。
文字のサイズや一次停止などの処理のため、下記プラグインを導入させていただいた。
 
タイマー制御 - CRTA_TimerManager.js - #ツクプラ
https://plugin.fungamemake.com/archives/12605
 
 
タイマー表示
タイマー表示
 
大きく表示されるようになった。

今週のまとめ

  • バトルのエンカウント処理を実装した
  • テンプレートイベントプラグインを使い始めた
 

今後やりたいこと

  • そろそろシーンを作り始められそう