[SOLVED] Color depending on In game variable ?

Started by TrueCynder, August 16, 2013, 05:57:14 am

Previous topic - Next topic

TrueCynder

August 16, 2013, 05:57:14 am Last Edit: August 17, 2013, 06:24:54 am by TrueCynder
Hey guys so - someone made me this costum message system
It works fine and all but i want to change a little something about it

the color of the text that appears in the \nm window is now allways green
id like it to have a different color depending on an in game variavle
for example var.3 "text color" is it on 0 its white , is it on 5 its purple or what ever

Could one of you show me how to do that ?
#==============================================================================
# ** Window_Message
#------------------------------------------------------------------------------
#  This message window is used to display text.
#==============================================================================

class Window_Message < Window_Selectable
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize
   super(5, 372, 630, 108)
   self.contents = Bitmap.new(width - 32, height - 24)
   self.visible = false
   self.z = 9998
   @fade_in = false
   @fade_out = false
   @contents_showing = false
   @cursor_width = 0
   self.active = false
   self.index = -1
 end
 #--------------------------------------------------------------------------
 # * Dispose
 #--------------------------------------------------------------------------
 def dispose
   terminate_message
   $game_temp.message_window_showing = false
   if @input_number_window != nil
     @input_number_window.dispose
   end
   super
 end
 #--------------------------------------------------------------------------
 # * Terminate Message
 #--------------------------------------------------------------------------
 def terminate_message
   self.active = false
   self.pause = false
   self.index = -1
   self.contents.clear
   # Clear showing flag
   @contents_showing = false
   # Call message callback
   if $game_temp.message_proc != nil
     $game_temp.message_proc.call
   end
   # Clear variables related to text, choices, and number input
   $game_temp.message_text = nil
   $game_temp.message_proc = nil
   $game_temp.choice_start = 99
   $game_temp.choice_max = 0
   $game_temp.choice_cancel_type = 0
   $game_temp.choice_proc = nil
   $game_temp.num_input_start = 99
   $game_temp.num_input_variable_id = 0
   $game_temp.num_input_digits_max = 0
   # Open gold window
   if @gold_window != nil
     @gold_window.dispose
     @gold_window = nil
   end
 end
 #--------------------------------------------------------------------------
 # * 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" }
     text.gsub!(/\\[Nn][Mm]\[(.*?)\]/) { "\003[#{$1}]" }
     text.gsub!(/\\[Vv][Bb]/) { "\004" }
     # 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
         if color >= 0 and color <= 7
           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 c == "\003"
         if @name_window == nil
           text.sub!(/\[(.*?)\]/,"")
           @name_window = Window_Name.new(5,124,258,50,$1)
           @name_window.opacity = self.opacity
           @name_window.back_opacity = self.back_opacity
           if $game_temp.in_battle
             @name_window.y = 116
           elsif $game_system.message_position == 0
             @name_window.y = 115
           elsif $game_system.message_position == 1
             @name_window.y = 196
           elsif $game_system.message_position == 2
             @name_window.y = 315
           end
         end
         next
       end
       if c == "\004"
         if @name_window == nil
           @name_window = Window_Name.new(5,124,258,50,Flip::NAMES_HASH[$game_variables[1]])
           @name_window.opacity = self.opacity
           @name_window.back_opacity = self.back_opacity
           if $game_temp.in_battle
             @name_window.y = 116
           elsif $game_system.message_position == 0
             @name_window.y = 105
           elsif $game_system.message_position == 1
             @name_window.y = 181
           elsif $game_system.message_position == 2
             @name_window.y = 325
           end
         end
         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, 24 * y, 40, 24, 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 * 24
   end
 end
 #--------------------------------------------------------------------------
 # * Set Window Position and Opacity Level
 #--------------------------------------------------------------------------
 def reset_window
   if $game_temp.in_battle
     self.y = 16
   else
     case $game_system.message_position
     when 0  # up
       self.y = 5
     when 1  # middle
       self.y = 223
     when 2  # down
       self.y = 367
     end
   end
   if $game_system.message_frame == 0
     self.opacity = 255
   else
     self.opacity = 0
   end
   self.back_opacity = 200
 end
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------
 def update
   super
   # If fade in
   if @fade_in
     self.contents_opacity += 24
     if @input_number_window != nil
       @input_number_window.contents_opacity += 24
     end
     if self.contents_opacity == 255
       @fade_in = false
     end
     return
   end
   # If inputting number
   if @input_number_window != nil
     @input_number_window.update
     # Confirm
     if Input.trigger?(Input::C)
       $game_system.se_play($data_system.decision_se)
       $game_variables[$game_temp.num_input_variable_id] =
         @input_number_window.number
       $game_map.need_refresh = true
       # Dispose of number input window
       @input_number_window.dispose
       @input_number_window = nil
       terminate_message
     end
     return
   end
   if @name_window != nil
     @name_window.update
     if Input.trigger?(Input::C)
       @name_window.dispose
       @name_window = nil
     end
   end
   # If message is being displayed
   if @contents_showing
     # If choice isn't being displayed, show pause sign
     if $game_temp.choice_max == 0
       self.pause = true
     end
     # Cancel
     if Input.trigger?(Input::B)
       if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
         $game_system.se_play($data_system.cancel_se)
         $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
         terminate_message
       end
     end
     # Confirm
     if Input.trigger?(Input::C)
       if $game_temp.choice_max > 0
         $game_system.se_play($data_system.decision_se)
         $game_temp.choice_proc.call(self.index)
       end
       terminate_message
     end
     return
   end
   # If display wait message or choice exists when not fading out
   if @fade_out == false and $game_temp.message_text != nil
     @contents_showing = true
     $game_temp.message_window_showing = true
     reset_window
     refresh
     Graphics.frame_reset
     self.visible = true
     self.contents_opacity = 0
     if @input_number_window != nil
       @input_number_window.contents_opacity = 0
     end
     @fade_in = true
     return
   end
   # If message which should be displayed is not shown, but window is visible
   if self.visible
     @fade_out = true
     self.opacity -= 48
     if self.opacity == 0
       self.visible = false
       @fade_out = false
       $game_temp.message_window_showing = false
     end
     return
   end
 end
 #--------------------------------------------------------------------------
 # * Cursor Rectangle Update
 #--------------------------------------------------------------------------
 def update_cursor_rect
   if @index >= 0
     n = $game_temp.choice_start + @index
     self.cursor_rect.set(8, n * 24, @cursor_width, 24)
   else
     self.cursor_rect.empty
   end
 end
end

#==============================================================================
# ** Window_Gold
#------------------------------------------------------------------------------
#  This window displays amount of gold.
#==============================================================================

class Window_Name < Window_Base
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize(x,y,width,height,text)
   super(x, y, width, height)
   self.contents = Bitmap.new(width - 32, height - 32)
   self.z = 9998
   refresh(text)
 end
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh(text)
   self.contents.clear
   self.contents.font.color = Color.new(0,128,64)
   self.contents.draw_text(4, -2, 226, 24, text, 0)
 end
end


Please help :S

Zexion

Just wondering, but you know that you can already change the color by default? By using \C

  • Either way, here's what you wanted lol
    Under:
    def refresh

    you should see
    self.contents.font.color = normal_color

    replace that with this:
    Spoiler: ShowHide
        case $game_variables[xx]
          when 0 # White
            self.contents.font.color = Color.new(255,255,255)
          when 1 # Red
            self.contents.font.color = Color.new(255,0,0)
          when 2 # Green
            self.contents.font.color = Color.new(0,255,0)
          when 3 # Blue
            self.contents.font.color = Color.new(0,0,255)
          when 4 # Purple
            self.contents.font.color = Color.new(125,0,255)
          when 5 # Black
            self.contents.font.color = Color.new(0,0,0)
          else
            self.contents.font.color = normal_color
        end

    Make sure to change the $game_variables[xx] to whichever variable you use

KK20

\nm is the Name Window I take it. Because that makes sense when you look down at it:

class Window_Name < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(x,y,width,height,text)
    super(x, y, width, height)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.z = 9998
    refresh(text)
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh(text)
    self.contents.clear
    self.contents.font.color = Color.new(0,128,64) #<===================== That looks pretty green to me
    self.contents.draw_text(4, -2, 226, 24, text, 0)
  end
end

That's where your fix should go Zexion. Using \C in the message box itself wouldn't affect the name color at all.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

Zexion

August 16, 2013, 05:15:56 pm #3 Last Edit: August 16, 2013, 05:18:56 pm by Zexion
Oh I totally misread this >.<
Edit: Well I could go fix my post, but seeing as how it's probably easier to just read kk20's and because lazy lol I will not :P
Just replace that part that he pointed to with my fix thingy

TrueCynder

Thank you :D It works perfectly :)
and easy to modefy too ^^