Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # =============================================================================
- # TheoAllen - Characters Tone
- # Version : 1.0
- # Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
- # (This script documentation is written in informal indonesian language)
- # =============================================================================
- ($imported ||= {})[:Theo_CharTone] = true
- # =============================================================================
- # CHANGE LOGS:
- # -----------------------------------------------------------------------------
- # 2013.06.27 - Finished script
- # =============================================================================
- =begin
- Perkenalan :
- Script ini membuat kamu bisa mengganti tone karakter seperti halnya tint
- screen pada event. Namun hanya berlaku untuk karakter. Tone karakter akan
- disimpan. Jadi semisal kamu pindah peta, tone karakter di peta sebelumnya
- akan tetap seperti itu
- Cara penggunaan :
- Pasang dibawah material namun diatas main.
- Gunakan script call pada set move route seperti ini (pilih aja salah satu).
- - change_tone(red,green,blue,gray,duration)
- - change_tone(red,green,blue,gray)
- - change_tone(red,green,blue)
- - change_tone(Tone.new(red,green,blue),duration)
- - change_tone(Tone.new(red,green,blue))
- Gunakan script call ini untuk ngembaliin semua tone karakter ke semula
- - clear_char_tones
- Terms of use :
- Credit gw, TheoAllen. Kalo semisal u bisa ngedit2 script gw trus jadi lebih
- keren, terserah. Ane bebasin. Asal ngga ngeklaim aja. Kalo semisal mau
- dipake buat komersil, jangan lupa, gw dibagi gratisannya.
- =end
- # =============================================================================
- # Tidak ada konfigurasi
- # =============================================================================
- class Tone
- def == (other)
- return false unless other.is_a?(Tone)
- return other.red == self.red &&
- other.green == self.green &&
- other.blue == self.blue &&
- other.gray == self.gray
- end
- end
- class Game_System
- class Char_Tones
- def initialize
- @data = {}
- end
- def [](key)
- @data[key] ||= Tone.new
- end
- def []=(key,tone)
- @data[key] = tone
- end
- def clear_tones
- @data.keys.each do |key|
- @data[key] = Tone.new
- end
- end
- end
- attr_reader :char_tones
- alias pre_char_tint_init initialize
- def initialize
- pre_char_tint_init
- init_char_tones
- end
- def init_char_tones
- @char_tones = Char_Tones.new
- end
- end
- class Game_CharacterBase
- attr_reader :tone
- alias pre_init_public_tone init_public_members
- def init_public_members
- pre_init_public_tone
- init_tone
- end
- def init_tone
- @tone = Tone.new
- @tone_target = Tone.new
- @tone_duration = 0
- end
- alias pre_tone_update update
- def update
- pre_tone_update
- update_tone
- end
- def update_tone
- if @tone_duration > 0
- d = @tone_duration
- @tone.red = (@tone.red * (d - 1) + @tone_target.red) / d
- @tone.green = (@tone.green * (d - 1) + @tone_target.green) / d
- @tone.blue = (@tone.blue * (d - 1) + @tone_target.blue) / d
- @tone.gray = (@tone.gray * (d - 1) + @tone_target.gray) / d
- @tone_duration -= 1
- end
- end
- def change_tone(*args)
- if args.size == 5
- duration = args[4]
- tone = Tone.new(args[0],args[1],args[2],args[3])
- elsif args.size == 3 || args.size == 4
- duration = 1
- tone = Tone.new(*args)
- elsif args.size == 2
- duration = args[1]
- tone = args[0]
- elsif args.size == 1
- duration = 1
- tone = args[0]
- end
- duration = [duration,1].max
- @tone_target = tone.clone
- @tone_duration = duration
- end
- def normalize_tone(duration = 0)
- change_tone(Tone.new(0,0,0,0),duration)
- end
- def tone_changing?
- @tone_duration > 0
- end
- alias pre_char_tone_update_bush update_bush_depth
- def update_bush_depth
- pre_char_tone_update_bush
- @bush_depth = 0 unless @tone == Tone.new(0,0,0,0)
- end
- end
- class Game_Event < Game_Character
- alias pre_event_tint_init initialize
- def initialize(*args)
- pre_event_tint_init(*args)
- init_tone
- end
- def init_tone
- @tone = $game_system.char_tones[event_key]
- @tone_target = Tone.new
- @tone_duration = 0
- end
- def event_key
- [$game_map.map_id,@id]
- end
- end
- class Sprite_Character < Sprite_Base
- alias pre_tone_update update
- def update
- pre_tone_update
- update_tone
- end
- def update_tone
- self.tone.set(@character.tone)
- end
- end
- class Game_Interpreter
- alias pre_tone_change_command_205 command_205
- def command_205
- pre_tone_change_command_205
- char = get_character(@params[0])
- if char
- Fiber.yield while char.tone_changing? if @params[1].wait
- end
- end
- def clear_char_tones
- $game_system.char_tones.clear_tones
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment