Chaos Project

RPG Maker => RPG Maker Scripts => Script Troubleshooting => Topic started by: TrueCynder on August 16, 2013, 05:57:14 am

Title: [SOLVED] Color depending on In game variable ?
Post by: TrueCynder on August 16, 2013, 05:57:14 am
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
Title: Re: Color depending on In game variable ?
Post by: Zexion on August 16, 2013, 04:32:42 pm
Just wondering, but you know that you can already change the color by default? By using \C
Title: Re: Color depending on In game variable ?
Post by: KK20 on August 16, 2013, 04:40:59 pm
\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.
Title: Re: Color depending on In game variable ?
Post by: Zexion on August 16, 2013, 05:15:56 pm
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
Title: Re: Color depending on In game variable ?
Post by: TrueCynder on August 17, 2013, 06:24:31 am
Thank you :D It works perfectly :)
and easy to modefy too ^^