TheoAllen

Theo - Characters Tone

Jun 27th, 2013
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 5.03 KB | None | 0 0
  1. # =============================================================================
  2. # TheoAllen - Characters Tone
  3. # Version : 1.0
  4. # Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
  5. # (This script documentation is written in informal indonesian language)
  6. # =============================================================================
  7. ($imported ||= {})[:Theo_CharTone] = true
  8. # =============================================================================
  9. # CHANGE LOGS:
  10. # -----------------------------------------------------------------------------
  11. # 2013.06.27 - Finished script
  12. # =============================================================================
  13. =begin
  14.  
  15.   Perkenalan :
  16.   Script ini membuat kamu bisa mengganti tone karakter seperti halnya tint
  17.   screen pada event. Namun hanya berlaku untuk karakter. Tone karakter akan
  18.   disimpan. Jadi semisal kamu pindah peta, tone karakter di peta sebelumnya
  19.   akan tetap seperti itu
  20.  
  21.   Cara penggunaan :
  22.   Pasang dibawah material namun diatas main.
  23.   Gunakan script call pada set move route seperti ini (pilih aja salah satu).
  24.  
  25.   - change_tone(red,green,blue,gray,duration)
  26.   - change_tone(red,green,blue,gray)
  27.   - change_tone(red,green,blue)
  28.  
  29.   - change_tone(Tone.new(red,green,blue),duration)
  30.   - change_tone(Tone.new(red,green,blue))
  31.  
  32.   Gunakan script call ini untuk ngembaliin semua tone karakter ke semula
  33.   - clear_char_tones
  34.  
  35.   Terms of use :
  36.   Credit gw, TheoAllen. Kalo semisal u bisa ngedit2 script gw trus jadi lebih
  37.   keren, terserah. Ane bebasin. Asal ngga ngeklaim aja. Kalo semisal mau
  38.   dipake buat komersil, jangan lupa, gw dibagi gratisannya.
  39.  
  40.  
  41. =end
  42. # =============================================================================
  43. # Tidak ada konfigurasi
  44. # =============================================================================
  45. class Tone
  46.  
  47.   def == (other)
  48.     return false unless other.is_a?(Tone)
  49.     return other.red == self.red &&
  50.       other.green == self.green &&
  51.       other.blue == self.blue &&
  52.       other.gray == self.gray
  53.   end
  54.  
  55. end
  56.  
  57. class Game_System
  58.   class Char_Tones
  59.    
  60.     def initialize
  61.       @data = {}
  62.     end
  63.    
  64.     def [](key)
  65.       @data[key] ||= Tone.new
  66.     end
  67.    
  68.     def []=(key,tone)
  69.       @data[key] = tone
  70.     end
  71.    
  72.     def clear_tones
  73.       @data.keys.each do |key|
  74.         @data[key] = Tone.new
  75.       end
  76.     end
  77.    
  78.   end
  79.  
  80.   attr_reader :char_tones
  81.  
  82.   alias pre_char_tint_init initialize
  83.   def initialize
  84.     pre_char_tint_init
  85.     init_char_tones
  86.   end
  87.  
  88.   def init_char_tones
  89.     @char_tones = Char_Tones.new
  90.   end
  91.  
  92. end
  93.  
  94. class Game_CharacterBase
  95.   attr_reader :tone
  96.  
  97.   alias pre_init_public_tone init_public_members
  98.   def init_public_members
  99.     pre_init_public_tone
  100.     init_tone
  101.   end
  102.  
  103.   def init_tone
  104.     @tone = Tone.new
  105.     @tone_target = Tone.new
  106.     @tone_duration = 0
  107.   end
  108.  
  109.   alias pre_tone_update update
  110.   def update
  111.     pre_tone_update
  112.     update_tone
  113.   end
  114.  
  115.   def update_tone
  116.     if @tone_duration > 0
  117.       d = @tone_duration
  118.       @tone.red = (@tone.red * (d - 1) + @tone_target.red) / d
  119.       @tone.green = (@tone.green * (d - 1) + @tone_target.green) / d
  120.       @tone.blue = (@tone.blue * (d - 1) + @tone_target.blue) / d
  121.       @tone.gray = (@tone.gray * (d - 1) + @tone_target.gray) / d
  122.       @tone_duration -= 1
  123.     end
  124.   end
  125.  
  126.   def change_tone(*args)
  127.     if args.size == 5
  128.       duration = args[4]
  129.       tone = Tone.new(args[0],args[1],args[2],args[3])
  130.     elsif args.size == 3 || args.size == 4
  131.       duration = 1
  132.       tone = Tone.new(*args)
  133.     elsif args.size == 2
  134.       duration = args[1]
  135.       tone = args[0]
  136.     elsif args.size == 1
  137.       duration = 1
  138.       tone = args[0]
  139.     end
  140.     duration = [duration,1].max
  141.     @tone_target = tone.clone
  142.     @tone_duration = duration
  143.   end
  144.  
  145.   def normalize_tone(duration = 0)
  146.     change_tone(Tone.new(0,0,0,0),duration)
  147.   end
  148.  
  149.   def tone_changing?
  150.     @tone_duration > 0
  151.   end
  152.  
  153.   alias pre_char_tone_update_bush update_bush_depth
  154.   def update_bush_depth
  155.     pre_char_tone_update_bush
  156.     @bush_depth = 0 unless @tone == Tone.new(0,0,0,0)
  157.   end
  158.  
  159. end
  160.  
  161. class Game_Event < Game_Character
  162.  
  163.   alias pre_event_tint_init initialize
  164.   def initialize(*args)
  165.     pre_event_tint_init(*args)
  166.     init_tone
  167.   end
  168.  
  169.   def init_tone
  170.     @tone = $game_system.char_tones[event_key]
  171.     @tone_target = Tone.new
  172.     @tone_duration = 0
  173.   end
  174.  
  175.   def event_key
  176.     [$game_map.map_id,@id]
  177.   end
  178.  
  179. end
  180.  
  181. class Sprite_Character < Sprite_Base
  182.  
  183.   alias pre_tone_update update
  184.   def update
  185.     pre_tone_update
  186.     update_tone
  187.   end
  188.  
  189.   def update_tone
  190.     self.tone.set(@character.tone)
  191.   end
  192.  
  193. end
  194.  
  195. class Game_Interpreter
  196.  
  197.   alias pre_tone_change_command_205 command_205
  198.   def command_205
  199.     pre_tone_change_command_205
  200.     char = get_character(@params[0])
  201.     if char
  202.       Fiber.yield while char.tone_changing? if @params[1].wait
  203.     end
  204.   end
  205.  
  206.   def clear_char_tones
  207.     $game_system.char_tones.clear_tones
  208.   end
  209.  
  210. end
Advertisement
Add Comment
Please, Sign In to add comment