開発日誌

プラグイン/スクリプト

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] PRGツクールMZでルビを振る

2020-09-20 20:29:55

RPGツクールMZで新作を作るにあたって、早期に必要なシステムがルビ振りシステムでした。

天下御免!からくり屋敷』では、和風というコンセプトのもと、難しい固有名詞や漢字熟語が多数登場するため、独自にルビ振りのスクリプトを組んで実現していました。

今回のゲームは和風とかではないので、ルビがなくても大きな支障はないのですが、それでもやはり普段使わない語句なんかは読みにくいので、ルビはあるに超したことはありません。

というわけでルビ表示プラグインを作りました!

これを導入すると、こんな感じでテキストにルビを振ることができます。

ルビの入力は、先日のVX版での記事と同じで、{漢|かん}{字|じ}のようにルビを振りたい文字を{ }で囲んで、|の手前に漢字、後ろにルビを記述すれば、ルビ付きのテキストとして表示されるようになります。

VX版では漢字1文字につきルビ3文字までが限界でしたが、MZ版ではどうやら4文字でも大丈夫そうですね。候(そうろう)とか使うことはないと思いますが、妹(いもうと)とか狼(おおかみ)とかは使いそうです(組み合わせがヒドい)。源順(みなもとのしたごう)さえ登場させなければ問題なさそう。

このプラグインの一番のポイントは、文章の表示だけでなく、アクター名、職業名、スキル名、アイテム名、敵キャラ名、およびスキルやアイテムの説明文や、戦闘メッセージ、マップ名など、必要と思われる場所は基本的に全て対応している点です。

下は装備変更画面ですが、装備アイテム名や説明文にもちゃんとルビが反映されています。

VX版の時は、ルビ分のスペースを確保するために、テキストの1行の高さを標準の24から32に拡大しており、そのせいでほとんど全てのウィンドウのレイアウトを調整する必要がありました。これがかなり、それ以外の画面レイアウト変更と競合するため、スクリプト素材として提供できていませんでした。

しかしMZでは、1行の標準の高さが36で、デフォルトのフォントサイズが26なので、行間には10の余裕があります。このくらいあれば、何とか高さを変えずにルビを押し込めるのではないか、と思って押し込んでみたところ、ちょっと詰まっている感はあるものの、まあまあ許容範囲に収まったので、晴れてウィンドウの高さ調整をすることなくルビ振りが完成しました。

レイアウト調整が不要なため、今回はプラグインとしての提供も可能になっています。

フォントサイズや1行の高さを標準から変更する場合は、おそらくレイアウトの調整が必要になると思いますが、そこまではこのプラグインでは対応していないのであしからず。

まあよく見ると、アイコンの位置がルビを含んだ行高の中央に来てしまっているのが気になるほか、魔法名のようにルビのない語句が下に寄りすぎているように見えるところや、アイテム個数や消費MPなども微妙にズレている感じがするのが、気にはなるところですかね。

ショップ画面の購入数・売却数を指定するウィンドウ(Window_ShopNumber)のみ、×記号と個数は下に寄っているのがかなり気になったので、中央に来るように調整しました。

どうせこのあたりの画面レイアウトは、ルビとは関係なくいじる予定なので、デフォルトのルビ振りプラグインとしてはこんな感じで十分かと。

技術的には、

Window_StatusBase.prototype.isRuby = function() {
  return true;
};

という感じで、ルビに対応させるウィンドウオブジェクトでisRubyを定義して、trueを返すようにしています。falseにすればルビは付かなくなります。falseにした場合、もともとルビ付きのテキストであっても、ちゃんとルビが削れて表示されます。

標準では、所持金表示ウィンドウ、名前や数値の入力ウィンドウ、セーブファイルの選択ウィンドウと、メニューコマンド選択肢全般(タイトル画面や基本メニュー、アイテムやスキルの種別選択、最強装備や購入・売却の選択肢、オプション画面など)、およびデバッグ画面はルビ非対応にしています。「最強装備」とかにもルビを振りたいという場合は、該当ウィンドウのisRubyをtrueに変更すればOKです。

上記のショップ画面の購入個数などの表示位置調整は、

const _Window_ShopNumber_drawNumber = Window_ShopNumber.prototype.drawNumber;
Window_ShopNumber.prototype.drawNumber = function() {
  Window_ShopNumber.prototype.isRuby = function() { return false; };
  _Window_ShopNumber_drawNumber.call(this);
  Window_ShopNumber.prototype.isRuby = function() { return true; };
};

という風に、直前でルビ対応をfalseにして、個数表示後にtrueに戻しています。たぶんこれを応用すれば、前述のアイコンとか消費MP量表示とかの位置も調整できると思いますが、ここから先はご自由にどうぞ。

アラビア語などのRTLにも一応対応させたつもりですが、確認はしていません。日本語以外で使うこともないと思うので、まあいいよね。

質問やアドバイスなどはコメント欄まで、お気軽にどうぞ。プラグイン素材の利用条件についてはMITライセンスとしています。丸パクリなどでなければ基本的に利用は自由です。このサイトについての「提供素材について」の項目なども併せてご覧ください。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 必要経験値をExcelで計算

2020-09-17 05:02:01
  • 次のレベルに上がるまでどのくらいの経験値が必要か。
  • 敵を1体倒すごとに得られる経験値はどのくらいか。

この両者のバランスを誤ると、レベル上げ作業が苦痛になったり、逆に普通に進めるだけで適正レベルをはるかに超えてヌルゲー化したりしてしまいます。

そこで、その調整をやりやすくするためのエクセルファイルを作ったので公開します。もちろん利用にはMicrosoft Office Excelが必要です。

RPGツクールVX Ace以降の経験値計算を対象としています。もちろんMVや最新のRPGツクールMZも対象です。

使い方はいたって簡単。

まずは、経験値曲線の4つのパラメーターである「基本値」「補正値」「増加度A」「増加度B」を入力します。

すると各レベルにおいて、次のレベルまでの必要な経験値と、累積経験値がそれぞれ算出されます。

次に、1回の戦闘で出現する敵キャラ数の平均値を「平均敵数」欄に入力します。だいたい2〜3体で出現することが多ければ、2.5ぐらいじゃないでしょうか。

そして「戦闘回数」の欄に、次のレベルに上がるまでに想定している必要戦闘回数を入力します。だいたい1つのダンジョンに入って出てくるまでにレベルが1上がると想定していたら、そのダンジョンでだいたい何回ぐらいの戦闘を想定しているか、ということです。最初は少なく、だんだん必要回数が増えていくのが、それっぽいのかなと思います。

以上で、各レベル帯において、敵1体に設定すべき獲得経験値の目安が求められます。

つまり、レベル10ぐらいで到達している地域で出現する敵の経験値は、どのぐらいが適正なのか、ということが算出できるというわけです。

昔のRPGだと、たびたびレベル上げ作業を強いられてもプレイしてもらえましたが、最近ではレベル上げが必要となろうものなら、まず投げ出されてしまいます。しかも一本道ストーリーも喜ばれず、いろいろな寄り道要素があるのが好まれるため、適正レベルの調整は並大抵のものではありません。

しかし、VX Ace以降の経験値計算法は、VXの頃に比べて適正経験値量の調整が難しくなったような。まあこれについてはまた別で述べたいと思います。

[ ゲームリリース情報 ] [ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] アイテム獲得メッセージにアイコンを表示

2020-09-06 03:14:15

自分で使うプラグインの開発シリーズ第5弾。今回もRPGツクールMV/MZ共通対応です。

プラグイン第1弾として公開した「データベースの名前表示プラグイン(PANDA_ConvertDataName.js)」を使うと、文章中でアイテム名の頭にアイコンを表示させることができますが、敵を倒してアイテムを入手した際のメッセージでは、アイコンを表示させることができません。

というわけで作りました。

このプラグインを導入すれば、戦闘終了時のアイテム獲得メッセージで、アイテム名の頭にアイコンを表示させることができます。

サンプル画像ではアイテム名の色も変わっていますが、これは「用語」の「メッセージ」で色を変更しているだけです。

色の変更は前回紹介した「重要語句の文字色変更プラグイン(PANDA_KeywordColor.js)」を使うと便利です。

戦闘終了時のメッセージは、他のプラグインで大きく変更している場合も多いと思います。そういう場合には、このプラグインはおそらく正常に動作しません。あくまでデフォルトのメッセージ表示の場合にのみ動作を保証します。

RPGアツマールで公開中のミニゲーム『夫婦戦争MZ(まさに絶体絶命)』にも、このプラグインを組み込んで更新しました。

まだプレイされていない方はこの機会にぜひプレイしてみてください。既にプレイされたという方も、再度プレイして見た目の違いをお楽しみください。

ちなみにハッピーエンドにたどり着けるルートは、作者が想定しているだけでも6通りあります。ぜひ全てのルートで攻略してみてください!

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 重要語句の文字色変更プラグイン

2020-08-30 00:54:45

自分で使うプラグインの開発シリーズ第4弾。

今回は重要語句の文字色変更プラグインです。

先月「重要語句の色を変える」で、今さらながらRPGツクールVX用のスクリプト素材を提供しましたが、それのMV/MZ対応プラグインです。

今回はMZだけでなくMVにも対応しています。

「文章の表示」コマンドや説明文等で<N名前>のようにテキストを囲むと、囲まれた部分の文字色を手軽に変更することができます。Nの部分は語句の種類に応じて任意のアルファベット1文字を定義することができ、対応する色番号も自由に指定が可能となっています。これにより、人名は青、アイテム名は赤のように、語句のタイプに応じて色を変えることができます。

デフォルトでは以下の設定にしていますが、パラメータで自由に変更が可能です。

語句種 意味 色番号 デフォルト色
<N > 人名 4
<E > 敵キャラ名 4
<P > 地名 6
<I > アイテム名 2
<S > スキル名 2
<K > その他のキーワード 27 ピンク

別にプラグインを使わなくても、特殊文字の\C[n]を使って、キーワードの手前で色を変更し、その後で元の文字色に戻してやれば、同じことを実現できます。RPGツクールMZでは「色番号の挿入」で色も選びやすくなりました。

とは言え、人名は青にしてたっけ赤にしてたっけとか、色を戻し忘れたりとか、後から人名はやっぱり黄色にしたいとか、このプラグインが役に立つ場面はいくらでもあるでしょう。私はもう、これがないと文章が書けない体になってしまいました。

※2022-12-06追記:
MZ v1.6.0で追加された色番号指定を適用した新バージョンをリリースしました。旧バージョンやMVをお使いの場合は色番号指定に非対応のため、手動で色番号の入力をお願いします。

質問やアドバイスなどはコメント欄まで、お気軽にどうぞ。プラグイン素材の利用条件についてはMITライセンスとしています。丸パクリなどでなければ基本的に利用は自由です。このサイトについての「提供素材について」の項目なども併せてご覧ください。

[ ゲームリリース情報 ] [ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] アイテム発見イベント規格化プラグインとサンプルミニゲーム

2020-08-28 18:53:17

引き続き自分で使うプラグインをRPGツクールMZ向けに作成していっています。

第3弾は、アイテム発見イベント規格化プラグインです。

これはVXの時に作ったRGSSスクリプトのリメイクで、宝箱やタンス、タルなどを調べるとアイテムが見つかる、というイベントを簡単に組むためのRPGツクールMZ用プラグインです。

私はもう、このプラグイン無しでは宝箱ひとつ満足に設置できない体になってしまいました。

宝箱は「イベントの簡単作成」で簡単に設置できますが、後から中身を別の物に変更したい場合、アイテムを増減するイベントと、「○○を手に入れた!」というメッセージ表示の両方を修正しなければならず、面倒かつミスしやすいです。

そんな面倒なアイテム発見イベントを、簡単に作れるようにするプラグインです。導入方法は以下の通り。

  1. 上記プラグインを組み込む。
  2. アイテム発見のコモンイベントを作る。
  3. 宝箱やタンスなどをイベントとして設置する。イベントの名前を入手品のIDとし、2で作ったアイテム発見のコモンイベントを呼び出します。

以下、詳しく説明します。

プラグインパラメータ

このプラグインには2つのパラメータがあります。

入手品の種別(アイテム、武器、防具など)を表す番号と入手品のIDを、それぞれ格納する変数の番号をパラメータとして設定します。

あと、追加のプラグインとして「文章中にアイテムや敵キャラ等の名前を表示」で紹介した「データベースの名前表示プラグイン(PANDA_ConvertDataName.js)」も、併せて導入すると便利です。

これでプラグインの準備は完了です。

アイテム発見コモンイベント

次に、アイテム発見のコモンイベントを作成します。

最初にセルフスイッチAの状態で分岐し、ONなら既に入手している旨のメッセージを出します。セルフスイッチAがOFFなら未入手なので、入手イベントを実行します。

「プラグインコマンド」で導入した「PANDA_FindItemEvent」の「入手イベント起動(Find Item Event)」を実行します。引数の指定はありません。

プラグインのパラメータで指定した「種別変数番号」の変数に入手品の種別を表す数字(お金=1、アイテム=2、武器=3、防具=4、敵グループ=5)、「アイテム変数番号」の変数に入手品や敵グループのIDもしくは入手金額が取得されます。

アイテムやお金の増減はプラグイン内で処理していますので、後は効果音の演出や入手メッセージの表示などを行えばOKです。ミミックなど敵モンスターを出現させる場合は戦闘の処理が必要です。最後にセルフスイッチAをONにしてやれば、同じ場所から再度入手できてしまうのを避けることができます。

併せて導入した「データベースの名前表示プラグイン(PANDA_ConvertDataName.js)」を使うと、メッセージ内で\item[n] \weapon[n] \armor[n] \troop[n]と記述することによって、n番のアイテム、武器、防具、敵グループ名が表示できます。

入手品の種別で分岐させつつ、文章の表示で\item[\V[x]](xはアイテム変数番号)を使えば、入手時のメッセージを共通化させることができます。

こうしておけば、アイテム入手時の演出やメッセージを後から変更したい場合、ここだけを変えればよいので非常に楽です。デフォルトとはちょっと違う、凝った演出などもやりやすくなるでしょう。

イベント設置

コモンイベントを用意したら、実際の宝箱などのオブジェクトをイベントとして設置します。

実行内容は、先ほどのコモンイベントを呼び出すだけでOKです。

そしてここがポイント。イベントの名前を中身の種別+ID番号とします。

アイテムの場合は「i+アイテムID」、武器の場合は「w+武器ID」、防具の場合は「a+防具ID」とします。例えばi1ならば1番のIDのアイテムが、w25ならば25番のIDの武器が手に入ります。また、お金の場合は「g+金額」とし、モンスターを出現させる場合は「e+敵グループID」とすればOKです。

後で中身を変更したくなったら、イベント名を変更するだけでOK。非常に簡単です。

最初はイベントの名前ではなくメモ欄に中身を記述する予定でしたが、いざやってみると、メモ欄だとイベントを開いてみないと記述が分かりません。その点、名前だとMZから登場したイベントリストや右下のステータスバーにも表示されるので、分かりやすかったです。いちいちイベント名を「宝箱」とか「ツボ」とかする人もいないでしょうし……。

サンプルミニゲーム

これだけだと、なんのこっちゃだと思いますので、例によって実際のサンプルプロジェクトを用意しました。

ただのサンプルでは味気ないので、ちょっとしたミニゲームに仕立ててみました。

『夫婦戦争MZ - Find Item MZ -』

  • 部屋の中を調べて、ダンナの浮気の証拠を探しましょう。
  • 宝箱、ツボ、タル、木箱、机、タンス、戸棚、本棚、額縁の裏からベッドの下まで、あらゆるオブジェクトが調べられます。
  • 浮気の証拠だけでなく、便利アイテムや装備品、ストレス解消に役立つ道具もあります。中には敵が潜んでいる場所も……。
  • 探せるチャンスは10回です。10回調べ終わると、ダンナが帰ってきます。
  • それまでに入手したアイテム等によって、エンディングが変わります。
  • エンディングは全部で10種類。ハッピーエンドを目指してがんばってください!

RPGツクールVX用に作ったスクリプトのサンプルゲーム『夫婦戦争 ~ Find Item ~』のMZ版リメイクです。

部屋を広げて調べられるオブジェクトを増やしたほか、アイテムや装備品、ストレス解消法(魔法)も増量。敵モンスターは一新しました。

VX版のリリースから9年の月日が経っていますが、照代さんは1歳しか年を取っていないとか何とか……。

ダウンロードした「FindItemMZ.zip」を解凍してください。解凍されたフォルダの中にある「Game - ショートカット」をダブルクリックすると、ゲームが始まります。

RPGツクールMZをお持ちの方は、「GameData」フォルダー内の「game.rmmzproject」をプロジェクトとして開くと、実際にどのようにイベントが組まれているかを確認することができます。ご利用の際の参考にしてください。

RPGツクールMZをお持ちでない方も、単純にミニゲームとして遊んでいただけます。

バグ報告、ご質問、ご要望等は、お気軽にコメント欄までどうぞ!