#==============================================================
# [VX] Nowe znaczniki tekstu + Automatyczne kolorowanie tekstu
#--------------------------------------------------------------
# by Ayene [yurika@o2.pl]
# Zapraszam na www.ultimateam.pl
#--------------------------------------------------------------
# ** ZASTOSOWANIE
#--------------------------------------------------------------
# Wykaz wszystkich znaczników:
# \C[numer] - zmienia kolor tekstu (numer - 0~31)
# \G - wyświetla nowe okno z ilością złota
# \. - czeka 1/4 sekundy
# \| - czeka 1 sekundę
# \! - czeka do momentu wciśnięcia przycisku
# \> - włącza szybsze wyświetlanie znaków
# \< - wyłącza szybsze wyświetlanie znaków
# \^ - samoczynnie zamyka okno 
# \V[id] - wyświetla wartość zmiennej o podanym ID
# \N - imię bohatera o podanym ID
# \UM[ID]  - nazwa umiejętności o podanym ID
# \PRZ[ID] - nazwa przedmiotu o podanym ID  
# \W[ID] - nazwa broni o podanym ID  
# \ZB[ID] - nazwa zbroji o podanym ID
# \POT[ID] - nazwa potwora o podanym ID 
# \GP[ID] - nazwa grupy potworów o podanym ID  
# \CENA[ID] - cena przedmiotu o podanym ID     
# \KL[ID] - klasa bohatera o podanym ID  
# \MAPA - nazwa mapy na której aktualnie znajduje się postać
# \I - włącza i wyłącza kursywę
# \B - włącza i wyłącza pogrubienie
#==============================================================
# Konfiguracja kolorów znajduje się poniżej
#==============================================================
class Window_Message < Window_Selectable
  def convert_special_characters
    
    # standardowe
    @text.gsub!(/\\C\[([0-9]+)\]/i) { "\x01[#{$1}]" }
    @text.gsub!(/\\G/)              { "\x02" }
    @text.gsub!(/\\\./)             { "\x03" }
    @text.gsub!(/\\\|/)             { "\x04" }
    @text.gsub!(/\\!/)              { "\x05" }
    @text.gsub!(/\\>/)              { "\x06" }
    @text.gsub!(/\\</)              { "\x07" }
    @text.gsub!(/\\\^/)             { "\x08" }    
    @text.gsub!(/\\\\/)             { "\\" }
    @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
    
    # \I - włącza i wyłącza kursywę
    @text.gsub!(/\\I/i)              { "\x09" }
    
    # \B - włącza i wyłącza pogrubienie
    @text.gsub!(/\\B/i)              { "\x10" }    
 
    # By zmienić kolor wyświetlanych nazw, wystarczy podmienić 29 na inną liczbę
    # Liczba określa numer koloru - 0~31
    # Wykaz wszystkich kolorów można zobaczyć tutaj: 
    # http://www.ultimateam.pl/viewtopic.php?t=1981

    # \N - imię bohatera o podanym ID
    @text.gsub!(/\\N\[([0-9]+)\]/i) { "\x01[29]" + $game_actors[$1.to_i].name + "\x01[0]" }    
    
    # \MAPA - nazwa mapy na której aktualnie znajduje się postać
    @text.gsub!(/\\MAPA/i)           { "\x01[29]#{$game_map.map_name}\x01[0]" }    
    
    # \UM[ID]  - nazwa umiejętności o podanym ID
    @text.gsub!(/\\UM\[([0-9]+)\]/i) { "\x01[29]" + $data_skills[$1.to_i].name + "\x01[0]" } 
    
    # \PRZ[ID] - nazwa przedmiotu o podanym ID  
    @text.gsub!(/\\PRZ\[([0-9]+)\]/i){ "\x01[29]" + $data_items[$1.to_i].name + "\x01[0]" } 
    
    # \W[ID] - nazwa broni o podanym ID  
    @text.gsub!(/\\W\[([0-9]+)\]/i) { "\x01[29]" + $data_weapons[$1.to_i].name + "\x01[0]" }
    
    # \ZB[ID] - nazwa zbroi o podanym ID  
    @text.gsub!(/\\ZB\[([0-9]+)\]/i) { "\x01[29]" + $data_armors[$1.to_i].name + "\x01[0]" } 

    # \POT[ID] - nazwa potwora o podanym ID     
    @text.gsub!(/\\POT\[([0-9]+)\]/i){ "\x01[29]" + $data_enemies[$1.to_i].name + "\x01[0]" }
    
    # \GP[ID] - nazwa grupy potworów o podanym ID  
    @text.gsub!(/\\GP\[([0-9]+)\]/i) { "\x01[29]" + $data_troops[$1.to_i].name + "\x01[0]" }
    
    # \CENA[ID] - cena przedmiotu o podanym ID      
    @text.gsub!(/\\CENA\[([0-9]+)\]/i) { "\x01[29]" + $data_items[$1.to_i].price.to_s + "\x01[0]" }
    
    # \KL[ID] - klasa bohatera o podanym ID  
    @text.gsub!(/\\KL\[([0-9]+)\]/i) { "\x01[29]" + $data_classes[$game_actors[$1.to_i].class_id].name + "\x01[0]" }
      
    # A to niewielki dodatek, dla tych którzy często muszą powielać ten sam tekst
    # np. stworzyłam sobie znacznik \Ayene, który wpisany w oknie wiadomości
    # wyświetli nick 'Ayene' w kolorze czerwonym. 
    # [Aa] sprawia, że zadeklarowana została różna wielkość pierwszej literki, 
    # czyli innymi słowy nie ma różnicy między \Ayene a \ayene
    @text.gsub!(/\\[Aa]yene/) { "\x01[2]Ayene\x01[0]" } 
    
    end

  def update_message
    loop do
      c = @text.slice!(/./m)            
      case c
      when nil                          
        finish_message                  
        break
      when "\x00"                       
        new_line
        if @line_count >= MAX_LINE      
          unless @text.empty?           
            self.pause = true           
            break
          end
        end
      when "\x01"                       
        @text.sub!(/\[([0-9]+)\]/, "")
        contents.font.color = text_color($1.to_i)   
        next
      when "\x02"                       
        @gold_window.refresh
        @gold_window.open
      when "\x03"                       
        @wait_count = 15
        break
      when "\x04"                       
        @wait_count = 60
        break
      when "\x05"                       
        self.pause = true
        break
      when "\x06"                      
        @line_show_fast = true
      when "\x07"                      
        @line_show_fast = false
      when "\x08"                     
        @pause_skip = true
      when "\x09"                      
        contents.font.italic = contents.font.italic == true ? false : true
        next
      when "\x10"
        contents.font.bold = contents.font.bold == true ? false : true
        next           
      else                              
        contents.draw_text(@contents_x, @contents_y, 40, WLH, c)
        c_width = contents.text_size(c).width
        @contents_x += c_width
      end
      break unless @show_fast or @line_show_fast
    end
  end
end

class Game_Map
  def map_name
    mpname = load_data("Data/MapInfos.rvdata")
    mpname[@map_id].name
  end  
end