開発日誌

プラグイン/スクリプト

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 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ライセンスとしています。丸パクリなどでなければ基本的に利用は自由です。このサイトについての「提供素材について」の項目なども併せてご覧ください。

コメント
1. 大友夢子 2023-08-09 00:56:35

RPGツクールMZでルビを利用してます長文と四行の二つが合わさって しまうとメッセージを読まなくなって しまいますバグなら
修正して下さい

2. 大友夢子 2023-08-09 01:02:41

自己解決しました

3. 真白灰 2023-09-15 15:46:23

こちらのルビ表示プラグインを使用させていただいた作品を発売しましたのでご報告いたします。
https://www.dlsite.com/home/work/=/product_id/RJ01098139.html
お世話になりました。ありがとうございました。

4. panda 2023-09-15 20:38:53

おお、完成おめでとうございます!
人名とか難しい語にはフリガナが欲しいですからね。
使っていただきありがとうございます。

5. 米米 2024-04-14 21:53:34

お世話になります。恐縮ですが一点質問させてください。
アイテム名や説明欄においてはルビが表示されるのですが、文章の表示においてだとルビが表示されません。
もし何か原因がありましたらご教授いただけますと幸いです。
よろしくお願いいたします。

6. panda 2024-04-14 22:14:40

何か文章の表示をいじる系のプラグインと併用すると、
競合で正常に動作しない可能性はありますね。
プラグインの並び順を変えたりすると動く可能性はありますので、お試しください。

7. ゆうき 2024-04-19 09:14:45

フォントを変えたからだと思うのですが、自分のところだと本文の文字とルビの間の間隔が若干重なって表示されてしまいます。ファイルの中身を見てもどこをいじれば間隔調整できるのか分からず、ちょっと困っています。文章の本文とルビの間の間隔を調整することはできないでしょうか。。

8. panda 2024-04-19 10:45:09

本文とルビの間の間隔を調整する機能はないですね。
プラグインパラメータでルビのフォントサイズは指定できるので、
それを調整したらいい感じになりませんか?
ルビが小さくなりすぎてしまうかもしれませんが……。

9. ゆうき 2024-04-19 15:29:23

やっぱりそれしかないですかね…
お返事ありがとうございました。

10. panda 2024-04-19 18:19:43

今のところはそうですね。
けっこう最近、このルビプラグインでご要望もいただくので、
必要そうな機能は追加するかもしれません。

お名前
コメント
※ 確認画面はありません。