LNS202 ルビ表示

ルビ(漢字の読みなどを示す小さな字)描画の機能を追加します。






参考資料

スクリーンショット

  
  
(かなり無茶な長さのルビも設定可能)

イベントコマンド例


メモにルビを設定する例




基本情報

前提スクリプト


拡張タイプ

○ 要設定 (データベース/スクリプトなどで設定すると機能する)
◆ 要注意 (内部の挙動を変えるため競合の可能性あり)


説明

概要

  • メッセージウィンドウ、アイテムなどの説明文、アイテムなどの名前にルビを表示します。
  • ルビを表示するかどうかは、String のクラス変数 @@draw_ruby で設定します。
  • ルビの大きさは Font#ruby_size で定義されます。
  • ルビは対象文字に対して 4 ピクセル上に描画されます。
    • [文章の表示] などでルビを含む文字列を表示する際、テキスト全体の位置が 2 ピクセル下がります
    • 結果として ウィンドウ上端のルビは上2ピクセルが隠れることになります。
    • 文字の配置バランスの都合による仕様ですが、ルビが隠れるのを避けたい場合 Ruby_Offset4 にすることでルビ部分が隠れないようにできます。
  • ルビの幅が対象の文字の幅より大きくなった場合、左右に隙間が作られます。

使い方

 ルビを表示するには、以下に示す直接設定個別設定共通設定のいずれかの方法を使います。

◆直接設定

\R[字/読み]
  • [文章の表示] やアイテム等の説明文中に、制御文字 \R を入れます。
  • 「字」に指定された文字列の上に、「読み」で指定された文字列を小さく描画します。
  • 他2つの方法も、最終的にはこの形式に変換されます。
  • [文章の表示] においては、\R[]で囲まれた文字列全体を1文字ぶんとして扱います。
    • 一度に描画されるため、ルビ対象が長い文字列の場合は文章表示スピードがかなり速くなります。
  • その場で設定した文字のみにルビが振られます。
    • 例)「\R[愛/あい]、愛ってなんだ」と記述した場合、最初の「愛」にはルビが振られますが、後ろの「愛」には付きません。

◆個別設定

  • アイテムなどの名前であればメモ、[文章の表示] であればその前の [注釈] に、所定の書式で書くことであらかじめルビを設定しておくことができます。
  • 「ruby:(ルビ指定)」という形式で記述します。メモに書く場合は、さらに < と > で囲みます。
    • [注釈] の場合は、次に別の[注釈]でルビが設定されるまで有効になります。
  • 個別設定によるルビは、同じ文字列であれば常に適用されます。
    • 例) 「ruby:火/ひ」と書いておくと、文中に出てくる「火」という文字全てに対して「ひ」というルビが振られます。
  • ルビ指定部分について
    • 基本的には、「字/読み」をカンマ(,)で区切って好きなだけ書きます。(スクリーンショットを参照)
    • 「読み」部分にセミコロン(;)が入っている場合、「字」を1文字ずつに分解し、それぞれにルビを当てます。読み仮名の必要ない部分がある場合、何も書かないことでルビを振らない字として扱えます。
      • 例)「ruby:火炎の弾/か;えん;;たま」と書いておくと、「火」と「炎」と「弾」に対してそれぞれ「か」「えん」「たま」というルビが振られます。
      • この形式では、字として指定された部分に完全一致する場合のみルビが振られます。従って上記の例では、文中に「火炎を放つ」と書かれていた場合、「火炎」にはルビが付きません。
    • メモ欄に書く場合は、スラッシュ(/)までを省略することで、ルビの対象をアイテム名そのものにできます。この場合、説明文に対するルビ指定としては(アイテム名がそのまま出てくる場合を除き)使えません。
      • 例)「癒やしの草」という名前のアイテムのメモ欄に「<ruby:いや;;;くさ>」と書いた場合、「癒」と「草」にそれぞれ「いや」「くさ」というルビが振られます。
    • ルビ対象の文字数に対してセミコロンの分割数が足りない場合、足りないぶんはルビ無しになります。多すぎる場合、超過分のルビは単に無視されます。
  • ルビ対象の字は長いものほど優先されます。
    • 例)「ruby:火炎弾/か;えん;だん,炎/ほのお」と書いておくと、「火炎弾」という文字列に対しては前者のルビ(かえんだん)が適用され、「火炎弾」以外(「炎を放つ」など)の「炎」という文字に対しては「ほのお」のルビが振られることになります。

◆共通設定

 スクリプト上で、定数 Ruby に値を設定することで、ルビが使用可能な全ての場面で常にその文字列にルビを付けるようにできます。例えば
Ruby = {
  "十六夜" = "いざよい",
}
といった形で設定します。頻出する難読単語などはスクリプト上で設定してしまうと楽です。

個別設定と同様に、セミコロン(;)で区切って1文字ずつルビを振ることも可能です。
  "絶対に表記されない文字列" => "ぜっ;たい;;ひょう;き;;;;;も;じ;れつ",

  • ルビ表示のための変換処理を行う際の優先度は直接設定 > 個別設定 > 共通設定の順です。

おまけ

 次の制御文字を追加します。
\D[文字列]
  • 文字列の上に1文字ずつ点(・)を打ちます。特定の語句を強調したいときなどに使います。
    • 例) \D[あいう]と書くと、\R[あ/・]\R[い/・]\R[う/・]に変換されます。
  • ルビの代わりに点を打つため、読み仮名を表すルビとの併用はできません。


備考

再定義されるメソッド

Window_Base#text_size
  • 描画に必要な領域を計算する際、ルビの分は除いて計算します。

Window_Base#draw_actor_name
Window_Base#draw_item_name
Window_Help#refresh
Game_Interpreter#command_101 (文章の表示)
Game_Interpreter#command_105 (文章のスクロール表示)
  • ルビ表示に対応します。

設定項目

Ruby_Offset <既定値 2 >
ルビが描画される場合の字下げ量
Ruby
全ての文字列に対して適用されるルビの設定


更新履歴

  • 2020/12/29 新版公開

  • こんにちは。不具合を発見したのでご報告いたします。 LNS000 組み込み拡張 LNS010 Input拡張 LNS100 プリセット拡張 LNS102 マウス操作 LNS140 マップ/キャラ拡張 の5つを導入した状態で、マップ画面でマウスカーソルをゲームウインドウの外側で大きく動かすなどすると、「 スクリプト 'LNS 140 マップ/キャラ拡張' の 980 行目で IndexError が発生しました。 index -1 too small for array; minimum: 0 」というエラーメッセージが表示され、ゲームが終了してしまいます。 スクリプトは全て最新で、内容は改変していません。 -- 2022-07-26 01:29:40
  • 確認が遅れましたが、対応修正しました。正確には「既に対応済みであったがアップロードを忘れていた」という状態でした…… -- 2022-11-01 15:39:07
  • 対応ありがとうございます!しかし LNS000, 010, 100, 102, 140 の5つを入れた状態で起動直後に「スクリプト 'LNS140 マップ/キャラ拡張' の 1719 行目で NameError が発生しました。 undefined method 'lns102_dash?' for class 'Game_Player'」と表示され、終了します。 -- 2022-12-24 16:39:35
コメント:

すべてのコメントを見る
最終更新:2020年12月29日 10:19