地上の洞窟

どこにも行かず、液晶と「にらめっこ」し続ける人の物語。

【RGSS3】メッセージ制御文字追加

メッセージ制御文字追加
制御文字で多彩な表現!

メッセージ表示で新たな制御文字が使えるようになるスクリプトです。
上記のメッセージは、以下のテキストを元に生成されています。

\FB\CRGB[255,0,0]テストテキスト!\CR\FB
ダイスの目は「\FI\#{rand(6)+1}\FI」です。
\CRGB[255,255,255,96]\ORGB[255,255,0,96]だからどうしたってほどでもないけど\CR

追加制御文字

制御文字 説明
\CRGB[R,G,B,A] 文字の色をRGBとアルファ値で指定し変更します。
アルファ値は省略可能。
例: \CRGB[255,0,0]
\ORGB[R,G,B,A] 文字の縁取りの色をRGBとアルファ値で指定し変更します。
アルファ値は省略可能。
例: \ORGB[255,0,0,128]
\CR 文字の色、文字の縁取りの色をデフォルトへリセットします。
\FB 文字の太字状態を切り替えます。
例: \FB強調\FB
\FI 文字の斜体状態を切り替えます。
例: \FI傾く文字\FI
\#{ "script_code" } { } 内の文字をスクリプトとして実行し、
実行結果をテキストとして表示します。
例: \#{rand(6)+1} 1~6のランダムな数字


更新履歴 内容
2023/08/27 初版

→スクリプト一覧へ


スクリプト(ダブルクリックで全選択)↓

=begin =========================================================================
 ■ 「メッセージ制御文字追加」- CustomMessageText by 地上の洞窟
================================================================================

 メッセージの制御文字に新たな機能を追加します。

================================================================================
 ■ 使用例
================================================================================

\FB\CRGB[255,0,0]テストテキスト!\CR\FB
ダイスの目は「\FI\#{rand(6)+1}\FI」です。
\CRGB[255,255,255,96]\ORGB[255,255,0,96]だからどうしたってほどでもないけど\CR

================================================================================
 ■ 制御文字一覧
================================================================================

  ・\CRGB[R,G,B,A]
  文字の色をRGBとアルファ値で指定し変更します。
  アルファ値は省略可能。
  例: \CRGB[255,0,0]

  ・\ORGB[R,G,B,A]
  文字の縁取りの色をRGBとアルファ値で指定し変更します。
  アルファ値は省略可能。
  例: \ORGB[255,0,0,128]

  ・\CR
  文字の色、文字の縁取りの色をデフォルトへリセットします。

  ・\FB
  文字の太字状態を切り替えます。
  例: \FB強調\FB

  ・\FI
  文字の斜体状態を切り替えます。
  例: \FI傾く文字\FI

  ・\#{ "script_code" }
  {  } 内の文字をスクリプトとして実行し、実行結果をテキストとして表示します。
  例: \#{rand(6)+1} 1~6のランダムな数字

================================================================================
 ■ 設定項目
=end #==========================================================================

module CustomMessageText


  # TAG_COLOR_RGB : 文字色変更に使う制御文字を設定します。

  TAG_COLOR_RGB = 'CRGB'


  # TAG_COLOR_RGB_OUTLINE : 文字の縁取りの色の変更に使う制御文字を設定します。

  TAG_COLOR_RGB_OUTLINE = 'ORGB'


  # TAG_COLOR_RESET : 文字色・縁取り色リセットに使う制御文字を設定します。

  TAG_COLOR_RESET = 'CR'


  # TAG_FONT_BOLD : 文字の太字の切り替えに使う制御文字を設定します。

  TAG_FONT_BOLD = 'FB'


  # TAG_FONT_ITALIC : 文字の斜体の切り替えに使う制御文字を設定します。

  TAG_FONT_ITALIC = 'FI'

#==============================================================================
# ■ ここからソースコード
#==============================================================================

  COLOR_RGB_REGEXP = /^\[(.*?)\]/
  INTERPOLATION_REGEXP = /\e\#\{(.*?)\}/
  SPLIT_CHAR = ","
  DEFAULT_OUT_COLOR = Font.new.out_color

end

class Window_Base < Window
  alias cmt_process_escape_character process_escape_character
  def process_escape_character(code, text, pos)
    case code.upcase
    when CustomMessageText::TAG_COLOR_RGB
      text.slice!(CustomMessageText::COLOR_RGB_REGEXP)
      change_color(Color.new(*$1.split(CustomMessageText::SPLIT_CHAR).map(&:to_i)))
    when CustomMessageText::TAG_COLOR_RGB_OUTLINE
      text.slice!(CustomMessageText::COLOR_RGB_REGEXP)
      contents.font.out_color = Color.new(*$1.split(CustomMessageText::SPLIT_CHAR).map(&:to_i))
    when CustomMessageText::TAG_COLOR_RESET
      change_color(normal_color)
      contents.font.out_color = CustomMessageText::DEFAULT_OUT_COLOR
    when CustomMessageText::TAG_FONT_BOLD
      contents.font.bold = !contents.font.bold
    when CustomMessageText::TAG_FONT_ITALIC
      contents.font.italic = !contents.font.italic
    end
    cmt_process_escape_character(code, text, pos)
  end

  alias cmt_convert_escape_characters convert_escape_characters
  def convert_escape_characters(text)
    result = cmt_convert_escape_characters(text)
    result.gsub!(CustomMessageText::INTERPOLATION_REGEXP) {
      eval($1, TOPLEVEL_BINDING).to_s
    }
    result
  end
end