開発日誌

すべての記事

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 複数回行動時の速度補正変更

2021-08-19 22:24:23

RPGツクールではスキルやアイテムに「速度補正」を設定でき、通常よりも先行して放てる技や、逆に発動に時間のかかる必殺技などを実現することができます。

代表的なのは「防御」や「かばう」のスキルです。これらの速度補正を1000や2000といった高い値にすることで、敵の攻撃よりも先に防御や身代わりの体勢をとることができるようになります。

しかし、RPGツクールのデフォルト機能では、1ターンに2回以上の行動をする場合、それぞれの行動の速度補正のうち最小値が採用されるようになっています。そのため、速度補正の高い「防御」や「かばう」と、速度補正が0の通常の行動とを同時に行うと、速度補正としては0が採用されて、真っ先に「防御」や「かばう」の行動をとってくれません。

そこで、複数回行動時の速度補正の算出方法を、最小値から変更するプラグインを作成しました。RPGツクールMVとRPGツクールMZの両方に対応しています。

このプラグインを導入すると、速度補正の算出方法を以下の6つから選択することができます。

  • 各行動の最小値(ツクールの標準と同じ)
  • 各行動の最大値
  • 各行動の平均値
  • 各行動の合計値
  • 最初の行動の速度補正値
  • 最後の行動の速度補正値

例えば3回行動で、それぞれの行動の速度補正が行動順に300、1000、-100だった時、算出結果は以下のようになります。

  • 最小値:-100
  • 最大値:1000
  • 平均値:400
  • 合計値:1200
  • 最初の行動の値:300
  • 最後の行動の値:-100

考え得る限りの算出方法は用意しましたが、どれが良いのかは議論の余地があります。

特に、速度補正がプラスのものとマイナスのものとを同時に行った場合、どうなるのが自然なのかによるのかなと思います。

プラスの方の速度補正は「防御」や「かばう」などそのターンの最初に発動しないと意味をなさない行動に使われるのに対して、マイナスの速度補正は単に詠唱時間が長いといったペナルティー要素として採用されるケースが多く、それを考えるとプラスの速度補正が重視された方が良さそうな気はします。

一方でマイナスの補正値が全く加味されないのも意味がないので、私は平均値を用いています。

他の方法を使いたいという要望があれば、可能な限り採用したいと思いますので、ぜひお寄せください。

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] 指定した番号のスイッチや変数を検索

2021-07-24 02:36:41

RPGツクールのゲームデータ内から、指定した番号のスイッチや変数が使われている箇所を抽出して、一覧化してくれるエクセルツールを作りました。

※ Version 1.0.4 (2022-12-29)
ステータスバーに途中経過を表示する機能を追加しました。

※ Version 1.0.3 (2022-05-07)
削除したマップがあるとエラーになる不具合を解消しました。

スイッチや変数の指定をミスったり、途中で番号を変更したくなったりといったことがよくあります。現状のRPGツクールのインターフェースでは、どこで当該のスイッチや変数が使われているかを漏れなく探し出すのは困難です。

そこで、簡単に指定した番号のスイッチや変数が使われている箇所をリストアップしてくれるツールを用意しました。これを使えば、スイッチや変数に指定ミスがないかどうかの確認や、修正すべき箇所の抽出が簡単にできます。

RPGツクールMV/MZに対応しています。実行にはMicrosoft Excelが必要です。

まずは上記のファイルをダウンロードしてください。zipファイルなので解凍し、中にある「RMDebugger.xlsm」を起動します。

起動時にマクロに関するセキュリティ警告が出ますので、「コンテンツの有効化」でマクロを有効にしてください。

使い方は簡単です。

検索したいのがスイッチか変数かを「種別」欄で選択し、検索したいスイッチまたは変数の番号を「番号」欄に入力します。

そして「検索実行」ボタンをクリックすると、ファイル選択ダイアログが出るので、対象となるゲームのプロジェクトフォルダーにある「game.rpgproject」(MVの場合)または「game.rmmzproject」(MZの場合)のファイルを開きます。

しばらく待っていると、対象のスイッチまたは変数が使用されている箇所がシートに出力されます。全てのイベントコマンドを検索するので、大規模なプロジェクトだとそれなりに時間がかかります。

検索対象は、通常イベント、コモンイベント、バトルイベントのイベントコマンドでスイッチや変数を使用する箇所をはじめ、イベントの出現条件や敵キャラの行動パターンの条件、移動ルートの設定でのスイッチをON/OFF、文章や説明文中で「\V[1]」のように制御文字で指定されている箇所、スキルやアイテムのダメージ計算式で「v[1]」のように指定されている箇所など、ほとんど全ての項目が検索対象となります。詳しくは「Help」のシートに記載してあるので、そちらを参照してください。

ただし、「\V[\V[2]]」のような記述で、2番の変数の値が1で、結果として1番の変数を参照しているようなケースは、追い切れないので対応していません。同様の理由で、スクリプトやプラグインコマンド、プラグインパラメータでの指定、メモ欄での記述などにも対応していません。プラグイン等で独自の記法によりスイッチや変数を表現している場合も非対応です。要望があって、それなりに汎用性があれば、対応するかもしれません。

あくまで使用されている箇所を列挙するだけで、番号の修正や代入値の変更までは自動的にはやってくれません。実際の修正は、リストアップされた一覧を見ながら自力で行う必要があります。

「Check」欄は、確認用等として自由にお使いください。修正・確認が済んだら「○」を付ける、といった活用を想定しています。

「目安行数」欄には、イベントの「実行内容」で出現する行数を示していますが、「移動ルートの設定」や「スクリプト」などのイベントコマンドがあると行数がズレるので、あくまで目安の行数として考えてください。

質問やアドバイスなどはコメント欄まで、お気軽にどうぞ。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

このツールを作ろうと思ったきっかけは、変数の修正を漏れなく行うためです。

ストーリーの進行度を表す変数を用意していたのですが、途中にいくつか進行度を追加する必要が出てきて、進行度の値を代入している部分や進行度で条件分岐している部分ほぼ全てで、進行度の値を繰り下げなければならなくなったためです。

普通にやったのでは絶対に修正漏れが生じますが、このツールを使えば漏れなく修正することが可能です。

このツールを活用して、デバッグ作業が少しでも楽になればいいなと思います。

[ テクニック ] [ プラグイン/スクリプト ] 名前欄に応じて顔グラを自動表示

2021-07-21 01:02:42

RPGツクールMZで登場した「文章の表示」の名前欄に、\N[1]のように制御文字でアクター名を入れると、そのアクターの顔グラが自動的に表示されるというプラグインです。

以前、公式フォーラムで要望を受けて作成したものですが、いろいろ応用力が高そうだったので改めて紹介します。

※ 2022-09-04追記:
「イベントの簡単作成」で作成した宝箱や宿屋でエラーが起こる不具合を修正しました。お手数ですが、Version 1.1.3にアップデートをお願いします。

このプラグインを導入すると、「文章の表示」で名前欄を\N[x]と設定した際に、x番のアクターの顔グラフィックが自動的に設定されるようになります。

xのところは変数を用いて、\N[\V[y]]のように記述することも可能です。この場合、y番の変数に格納されている番号のアクターとなります。

既に顔グラが設定されていたり、名前欄の形式が合わない場合は無視されます。

注意点としては、文章のプレビューでは顔グラが表示されない点と、テキストがメッセージウィンドウからはみ出さないようにする点です。

文章の入力欄にはメッセージウィンドウの横幅を示す目安のラインが引いてあります。このラインは顔グラなしの場合の横幅になっていますが、実際には顔グラありの場合の横幅にテキストを収めないといけません。このプラグインを使う際は、なるべく横幅ギリギリのメッセージは避けましょう。

単純にキャラクター名やキャラの顔グラの指定を横着したい場合にも使えますが、応用範囲はけっこう広そうです。

条件によってキャラクターの名前や顔グラを入れ替えたい場合は、指定用のアクターを用意しておいて、そのアクターの名前やグラフィックを変更してやれば、文章の表示で自動的に反映されます。

メッセージ自体は共通のものにしたいが、対象のキャラによって名前や顔グラを変更したい場合は、対象となるキャラを示す変数を1つ用意して、その変数にアクター番号を代入します。あとはコモンイベントで、名前欄を\N[\V[x]]としたメッセージを表示してやれば、求める動作となります。

他にも応用できるシチュエーションはありそうです。顔グラを自動的に設定したいケースでは割と使えると思いますので、ぜひ利用をご検討ください。

なお、「文章の表示」の名前欄を使用する仕組みのため、RPGツクールMVでは利用できません。まあ、MVでは顔グラを変数等で設定できるプラグインが既にあったかと思いますが。

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] [ プラグイン/スクリプト ] サブフォルダ付きプラグインの仕様変更

2021-07-05 23:17:06

RPGツクールMZのバージョン1.3.2がリリースされました。

先々週公開のバージョン1.3.0で仕様追加されたサブフォルダ関連の改善がなされましたが、サブフォルダ内にjsファイルが格納されても正しくプラグインが動作するような修正対応「サブフォルダ内のプラグイン名取得」が、これによって逆に動作しなくなってしまいました。なんちゅうことしてくれた……。

当サイトのプラグインも再修正しました

というわけで、拙作プラグインも先日修正したものを再び修正しました。河原で積んだ石を鬼(公式)に壊された気分w

サブフォルダを使っていなければ特に影響はありませんが、6月23日以降にダウンロードされた方は、お手数ですが修正版を再度ダウンロードお願いします。

プラグイン名の自動取得

ただ元に戻すのは癪だったので、この機会にプラグイン名を自動的に取得できるようにしてみました。

具体的には、

const pluginName = decodeURIComponent(document.currentScript.src).match(/([^\/]+)\.js$/)[1];

として、自分のファイルパスからファイル名を取得しています。

従来はプラグインのファイル名を変更すると動作しなくなっていたのですが、これによりファイル名を変更しても動作するようになります。

ただ、プラグインファイル名については、ユーザーで勝手に変更することを想定していないケースが多く、特にMZ以降、@base@orderAfterなどのプラグインの依存関係を定義するアノテーションも登場したため、ある程度の知識がないとファイル名の変更は推奨されません。

1.3.2修正の要点

結局のところプラグインのサブフォルダ問題は、

  • プラグインパラメータやプラグインコマンドはサブフォルダ名を含まない、プラグインファイル名のみをキーにして取得
  • 同名のプラグインが別フォルダに存在する場合は重複している旨の警告が出る

という形で対応がなされたようです。

つまり、プラグイン名は別フォルダであっても同名のファイルを避けるようにするべきで、サブフォルダは純粋に、ユーザーが多数のプラグインファイルを分類して整理できるようにした便利機能と位置づけられた模様です。

既に1.3.0の時点で対応修正した分が無駄にならないように、とか、プラグインIDとファイルパスを別々に指定できるように、とかの提案もあったようですが、結局1.3.0対応の修正は思いっきり無視されて、最小限の修正で済むような対応となった模様です。

まあ、一時のマズい仕様に対応するために余計なコードを増やしてもしょうがないので、これはこれで仕方ないかと。明らかに影響範囲の広すぎる仕様変更だったので、性急に個人で対応せず、公式の発表を待てばよかったかもしれませんね。我々が騒いだから、公式も影響の大きさに気付いた、という面もありそうですが……。

お陰でコアスクリプトの理解も進んだし、.match( )に入れた部分を簡単に取得する方法も今回の修正を通じて知れたので、収穫もあった……とポジティブ思考。

[ テクニック ] 何度か使うと壊れるアイテムの実装

2021-06-25 00:37:34

戦闘中に複数回使用でき、何回か使うと壊れてしまうアイテムを、プラグインなしで実装する方法の解説です。

いわゆるドラクエの「祈りの指輪」のようなアイテムですね。

ただ、祈りの指輪は移動中でも使えますが、RPGツクールの標準仕様だと、メニュー画面(移動中)で使用した場合に、壊れた時のメッセージをどう表示するかという問題があるので、今回は戦闘中にのみ使用できるアイテムに限定しています。

こういうのはプラグインでないとできないと思っていましたが、コモンイベントだけで比較的簡単に実装できました。

壊れる確率をどう設定するかというのがゲームバランスに直結します。自分専用に作るならともかく、プラグインとして広く公開するとなると、この確率計算の指定方法をどうするのかが悩ましくなりますが、コモンイベントであれば確率計算はユーザーが自由に作れます。

ここでは例として、「安息のハープ」という、戦闘中にのみ何度か使えて味方全員のHPを50回復するアイテムを作ってみます。

壊れる確率ですが、3回までは確実に使えて、3回目の使用後に25%の確率で壊れ、4回目に50%、5回目に75%、6回目は100%の確率で壊れる、という風にしました。1回目でいきなり壊れてしまうと残念なので、必要な時には躊躇せず使えるようなバランスを目指しました。

まずはコモンイベントを作成します。

このコモンイベントで、使用回数のカウントと壊れる確率の計算、そして壊れた場合の処理を行います。

壊れるアイテムが複数ある場合は、よっぽど数が多くない限りは、アイテムごとにコモンイベントを用意した方がいいかもしれません。壊れる確率の計算やメッセージの表示部分が、アイテムごとに異なると思うので。

変数を2つ使用します。1つはこのアイテムの使用回数をカウントする専用の変数。もう1つは計算過程で使うだけなので汎用の変数で構いません。

まず最初に、使用回数のカウントと壊れる確率の計算です。

◆変数の操作:使用回数 += 1
◆条件分岐:使用回数 >= 3
 ◆変数の操作:汎用変数 = 6
 ◆変数の操作:汎用変数 -= 使用回数
 ◆変数の操作:汎用変数 -= 乱数 0..3

使用回数を+1し、2回目までは壊れないので、条件分岐で3回目以降の場合のみ、壊れる確率の計算に入ります。

確率計算部分が少しややこしいですが、まず「6 - 使用回数」を算出しています。3回目の時は3で、4回目の時は2、6回目の時は0となります。

そしてその値から、0~3の乱数を引き算します。そうすると結果の値は、3回目の時は3~0、4回目の時は2~-1、6回目の時は0~-3となります。

結果の値が0以下の時に壊れる、とすることで、最初に設定した3回目に25%、4回目に50%、6回目に100%という確率が実現できます。

この辺の確率計算は、ゲーム全体のバランスを考えて、他にも自由に設定可能です。

 ◆条件分岐:汎用変数 <= 0
  ◆SEの演奏:壊れた際のSE
  ◆スクリプト:BattleManager._logWindow.push('addText', '壊れたメッセージ');
        :BattleManager._logWindow.push('wait');
        :BattleManager._logWindow.push('clear');
  ◆アイテムの増減:安息のハープ - 1
  ◆変数の操作:使用回数 = 0

前述の通り、条件分岐で汎用変数が0以下の時に、壊れた場合の処理を行います。

まずは壊れた際に分かりやすくSEを鳴らしました。この辺の演出はお好みでどうぞ。

次に壊れたメッセージを表示しますが、戦闘ログに表示させるため、ここはスクリプトを用いています。壊れたメッセージは任意のテキストが使用できます。

イベントコマンドの「文章の表示」だと、戦闘ログではなく通常のメッセージウィンドウで表示されてしまうため、ややテンポに劣ります。ここはどうしてもスクリプト頼りになるため、プラグインなしで実装と言うとちょっと語弊があるかもしれませんが。

そして当該アイテムを1つ減らして、最後に使用回数を0にリセットします。

以上で作成したコモンイベントを、当該アイテムの「使用効果」のコモンイベントに指定します。

こうすることでアイテム使用時にコモンイベントが呼ばれ、壊れる判定と壊れた時の処理が行われます。

RPGツクールMVの頃は、1つのアイテムにつき1つのコモンイベントしか呼べなかったのですが、RPGツクールMZになって複数のコモンイベントを順に呼べるようになり(今回の例では複数呼べる必要はないですが)、特殊アイテムの実現もやりやすくなりました。

なお、アイテムの消耗は「なし」(消耗するかどうかはコモンイベントで行うので)、使用可能時を「バトル画面」に設定するのを忘れないようにしてください。

今回は戦闘中にのみ使用可能なアイテムということにしていましたが、移動中(メニュー画面)でも使用可能にした場合、変更する必要があるのは壊れたメッセージの表示部分だけです。

イベントコマンドの「条件分岐」で、スクリプトに$gameParty.inBattle()と記入すれば、戦闘中か否かを判別できるので、戦闘中なら上記と同じように戦闘ログに表示、そうでなければ「文章の表示」でメッセージを表示するようにすればOKかと思います。