Juwan Park :: 텍스트 색 추가하기 (RPG XP용)

텍스트 색 추가하기 (RPG XP용)

◆게임 창작 관련/코드, 스크립트 :: 2015.09.03 22:02

RPG 만들기 XP의 경우 RPG 만들기 2000 이후의 다른 버전들과는 달리 윈도우스킨 안에 텍스트 색이 포함되어 있지 않습니다.
그 대신 스크립트로 텍스트 색을 지정하는데, 기본적으로는 0번부터 7번까지 8개 색이 있습니다.

스크립트를 수정하면 기본 제공된 텍스트 색 이외의 색을 사용할 수 있을 뿐만 아니라 9개 이상의 텍스트 색을 사용할 수 있습니다.

다음 스크립트를 복사해서 스크립트창(F11)의 'Main' 부분 위에 새 스크립트를 추가해 붙여넣기하시면 됩니다.

# Custom text color for RMXP v1.0
# RPG 만들기 XP에서 기본색 이외의 텍스트 색을 쓸 수 있습니다.
#
# 만든이: 家和萬事成
# http://parkjuwan.tistory.com
#
# 기본 스크립트를 약간 수정하였습니다.

class Window_Base < Window
  #--------------------------------------------------------------------------
  # Get Text Color
  # n : text color number (0-7)
  #--------------------------------------------------------------------------
  def text_color(n)
    case n
    when 0
      return Color.new(255, 255, 255, 255)
    when 1
      return Color.new(128, 128, 255, 255)
    when 2
      return Color.new(255, 128, 128, 255)
    when 3
      return Color.new(128, 255, 128, 255)
    when 4
      return Color.new(128, 255, 255, 255)
    when 5
      return Color.new(255, 128, 255, 255)
    when 6
      return Color.new(255, 255, 128, 255)
    when 7
      return Color.new(192, 192, 192, 255)
    #
    # ▶ 여기까지가 기본색 8가지입니다.
    # 아래쪽부터 추가할 색을 넣어 주세요.
    # when 색번호
    #   return Color.new(빨강, 초록, 파랑, 불투명도)
    # ※ 빨강, 초록, 파랑, 불투명도 모두 0~255 범위의 값을 갖습니다.
    #
    when 8
      return Color.new(128, 192, 255, 255)
    when 9
      return Color.new(192, 128, 255, 255)
    when 10
      return Color.new(255, 128, 192, 255)
    when 11
      return Color.new(128, 255, 192, 255)
    #
    # ▶ 이 부분에서 끝.
    #
    else
      normal_color
    end
  end
  #--------------------------------------------------------------------------
  # Get Normal Text Color
  #--------------------------------------------------------------------------
  def normal_color
    return Color.new(255, 255, 255, 255)
  end
  #--------------------------------------------------------------------------
  # Get Disabled Text Color
  #--------------------------------------------------------------------------
  def disabled_color
    return Color.new(255, 255, 255, 128)
  end
  #--------------------------------------------------------------------------
  # Get System Text Color
  #--------------------------------------------------------------------------
  def system_color
    return Color.new(192, 224, 255, 255)
  end
  #--------------------------------------------------------------------------
  # Get Crisis Text Color
  #--------------------------------------------------------------------------
  def crisis_color
    return Color.new(255, 255, 64, 255)
  end
  #--------------------------------------------------------------------------
  # Get Knockout Text Color
  #--------------------------------------------------------------------------
  def knockout_color
    return Color.new(255, 64, 0)
  end
end


class Window_Message < Window_Selectable
  #--------------------------------------------------------------------------
  # Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    x = y = 0
    @cursor_width = 0
    # Indent if choice
    if $game_temp.choice_start == 0
      x = 8
    end
    # If waiting for a message to be displayed
    if $game_temp.message_text != nil
      text = $game_temp.message_text
      # Control text processing
      begin
        last_text = text.clone
        text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
      end until text == last_text
      text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      # Change "\\\\" to "\000" for convenience
      text.gsub!(/\\\\/) { "\000" }
      # Change "\\C" to "\001" and "\\G" to "\002"
      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
      text.gsub!(/\\[Gg]/) { "\002" }
      # Get 1 text character in c (loop until unable to get text)
      while ((c = text.slice!(/./m)) != nil)
        # If \\
        if c == "\000"
          # Return to original text
          c = "\\"
        end
        # If \C[n]
        if c == "\001"
          # Change text color
          text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          #
          # ▶ 아래의 color <= n에서 n을 색 번호 최대값으로 지정해 주세요.
          #
          if color >= 0 and color <= 11
            self.contents.font.color = text_color(color)
          end
          # go to next text
          next
        end
        # If \G
        if c == "\002"
          # Make gold window
          if @gold_window == nil
            @gold_window = Window_Gold.new
            @gold_window.x = 560 - @gold_window.width
            if $game_temp.in_battle
              @gold_window.y = 192
            else
              @gold_window.y = self.y >= 128 ? 32 : 384
            end
            @gold_window.opacity = self.opacity
            @gold_window.back_opacity = self.back_opacity
          end
          # go to next text
          next
        end
        # If new line text
        if c == "\n"
          # Update cursor width if choice
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end
          # Add 1 to y
          y += 1
          x = 0
          # Indent if choice
          if y >= $game_temp.choice_start
            x = 8
          end
          # go to next text
          next
        end
        # Draw text
        self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
        # Add x to drawn text width
        x += self.contents.text_size(c).width
      end
    end
    # If choice
    if $game_temp.choice_max > 0
      @item_max = $game_temp.choice_max
      self.active = true
      self.index = 0
    end
    # If number input
    if $game_temp.num_input_variable_id > 0
      digits_max = $game_temp.num_input_digits_max
      number = $game_variables[$game_temp.num_input_variable_id]
      @input_number_window = Window_InputNumber.new(digits_max)
      @input_number_window.number = number
      @input_number_window.x = self.x + 8
      @input_number_window.y = self.y + $game_temp.num_input_start * 32
    end
  end
end

이 스크립트를 적용하였을 경우 다음과 같이 색 지정이 됩니다.



글씨색 미리보기 (빨강, 초록, 파랑에 원하는 값을 입력하신 후 미리보기 버튼을 눌러 보세요.)

빨강 초록 파랑
글씨색 미리보기
※빨강, 초록, 파랑 모두 최소값은 0, 최대값은 255입니다.

예제는 다음 첨부파일에 있습니다.

CustomTextColor.zip

위의 소스코드만 따로 빼낸 파일은 다음과 같습니다.

custom_text_color_for_xp.rb

댓글을 달아 주세요.

Today 24    Yday 68    Tot 71,745
Juwan Park
Juwan Park's blog is powered by Daum and TISTORY.
Contemporary Blue for TISTORY.
Designed by Juwan Park. Creative Commons License
▲ TOP