開発日誌

プラグイン/スクリプト

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 特定のセルフスイッチをリセット

2020-09-29 01:11:12

先月、プラグインコマンドで任意のセルフスイッチを消去できる「セルフスイッチ操作プラグイン」を公開しました。

今回はそれの応用編として、マップに入った際、そのマップにあるイベントのうち、指定した名前に合致するイベントのセルフスイッチをOFFにできるプラグインを作成しました。MV/MZの両方に対応しています。

セルフスイッチをOFFにしたいイベント名を、正規表現で指定します。

マップに入った際、具体的にはGame_MapのsetupEventsが呼ばれた際に、その正規表現にマッチするイベント名を持ったイベントのセルフスイッチを消去しています。

セルフスイッチはA-Dから任意のものを複数指定可能です。

マップに出入りするたびに復活する宝箱とか、開けた扉や押したスイッチを元の状態に戻したい時とかに使えると思います。

自分の制作中の作品では、扉のイベント名を「@Door」としておき、このプラグインで正規表現^@(@で始まるものにマッチ)としています。こうすることで、マップに入り直した際、開けた扉が閉まっている(誰が閉めた?とかいうのはナシ)ようにすることができます。

映像も貼れるようにしてみた。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 選択肢表示時にSEを鳴らす

2020-09-27 22:14:14

イベントコマンド「選択肢の表示」で選択肢ウィンドウが表示される際に、効果音を鳴らすプラグインを作成しました。MV/MZの両方に対応しています。

天下御免!からくり屋敷』ではスクリプトで選択肢ウィンドウを拡張したついでにSEを鳴らすようにしていました。

そのせいで、選択肢が現れた時に無音だと、何だか物足りない気がしたので作りました。

実際、RPGツクールVX Ace以降の選択肢ウィンドウは、標準だと右の方に出てくるので、特に「はい」「いいえ」だけの短い選択肢だと目立たなくて、ついうっかり決定キーを連打していて、選択肢があることを見逃してしまうといったことが起こりがちだと思います。

そんな時も、SEがあれば選択肢が出てきたことを喚起できるのではないかと思います。

SEの種類や音量などはプラグインのパラメータで指定できます。個人的にはピッチ150%にした「Saint5」が好み。『天下御免!からくり屋敷』でもこのSEを使っています。

あまり派手さはないですが、今後もこんな感じのちょっとした、かつ汎用的なプラグインを公開していきたいと思いますので、どうぞよろしくお願いいたします。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 職業の代わりに二つ名を表示

2020-09-25 20:00:21

長編RPGを作っていてよくあるのが、最初はただの村の自警団兵だった若者が、王国兵として取り立てられ、最終的に世界を救う勇者になる、といったストーリーです。

そしてそのストーリーに応じて変化する立場を、職業名としてステータス画面等に反映したくなります。

普通に実装するとなると、中身は全く同じで、名前だけが「自警団兵」「王国兵」「勇者」などと異なる職業を用意しておき、イベントコマンドの「職業の変更」で「レベルの保存」にチェックして、職業を変更すればよいと思います。

ただこの方法だと、名前しか違わない職業を複数用意する必要があり、途中でパラメーターやスキル習得等を変更する場合は、同じ変更を全ての職業に忘れず反映しないといけないため、非常に手間がかかります。

しかしアクターの属性にはもう一つ、RPGツクールVX Aceから登場した「二つ名」という属性があります。こちらは単純に文字情報のみでゲームには何も影響を与えないですし、イベントコマンドの「二つ名の変更」で簡単に変更できます。

なので、ストーリーに応じて二つ名を「自警団兵」「王国兵」「勇者」などと変更し、ステータス画面等では職業名の代わりにこの二つ名を表示するようにしてやれば、やりたいことが楽に実現できます。

というわけで、プラグインを作りました。MV/MZ両対応です。

このプラグインを導入すると、ステータス画面等で職業名の代わりに二つ名が、二つ名の代わりに職業名が表示されるようになります。後者はプラグインパラメータで非表示にすることもできます。

具体的な使用イメージはこんな感じ。

  1. 本来の二つ名の名称で職業を作成(二つ名を非表示にするなら適当な名前で可)
  2. アクターにその職業を割り当て、二つ名に本来の職業名を設定
  3. イベント中に「二つ名の変更」で本来の職業名を変更

そうするとこんな感じで、ステータス画面上は職業名のところに二つ名が、二つ名のところに職業名が表示されます。

スキル選択画面などではもともと職業名しか表示されませんが、そこでは職業名の代わりに二つ名が表示されます。

やっていることとしては、アクタークラスの二つ名(nickname)を返すところで、「二つ名の表示」パラメータがONなら職業名を、OFFなら空文字列を、二つ名の代わりに返しているのと、ウィンドウクラスの職業名描画(drawActorClass)で、職業名の代わりに二つ名を描画しているだけです。

なので、drawActorClassに手を入れているプラグインとは、競合するかもしれません。

ちなみにdrawActorClassは、MVではWindow_Baseのメソッド、MZではWindow_StatusBaseのメソッドで違いがあるのですが、両方含めることでMV/MZ両対応としました。この方法、間違ってないですよね?

厨二っぽいゲームでもない限り、いまいち存在意義が分からなかった二つ名ですが、有効な使い方が発見できて良かったです!

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 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の頃に比べて適正経験値量の調整が難しくなったような。まあこれについてはまた別で述べたいと思います。