Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # =============================================================================
- # TheoAllen - Light Effect
- # Version : 1.1
- # Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
- # (This script documentation is written in informal indonesian language)
- # =============================================================================
- ($imported ||= {})[:Theo_LightFX] = true
- # =============================================================================
- # CHANGE LOGS:
- # -----------------------------------------------------------------------------
- # 2013.08.03 - Bugfix at event page condition
- # - Added fading funtion
- # 2013.07.25 - Finished script
- # =============================================================================
- =begin
- Pembukaan :
- Berlatar belakang dari keluhan beberapa orang tentang script light effect
- untuk RGSS3 yang terkadang kelewat susah konfignya. Seperti punyanya Victor
- (Walo gw belom coba seh). Dan kelewat ngelag, (punya e Khas).
- Beberapa orang pengen script light effect yang simple aja, kayak script
- Thomas Edison VX buatan BulletXT & Kylock. Akhirnya gw putusin, gw bikin
- script yang serupa.
- Oh iya, disini gw bukan port script T.Edison VX ke Ace. Ane cuman ngambil
- idenya doank ama cara nyetingnya. Sisanya gw bikin dari 0 tanpa nyontek
- sedikitpun.
- Cara penggunaan :
- Pasang script ini dibawah material namun diatas main
- Sisanya bisa diliat di konfigurasi script
- 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.
- Note :
- Karena ini inspirasi dari BulletXT, alangkah baiknya kalo kamu juga credit
- dia.
- =end
- # =============================================================================
- # Konfigurasi :
- # =============================================================================
- module THEO
- module Lights
- # ------------------------------------------------------------------------
- # General Setting (Settingan umum)
- # ------------------------------------------------------------------------
- DefaultName = "le" # Nama file yang harus ada di folder Graphics/Picture
- DefaultRate = 3 # Refresh rate. Makin kecil, makin sering refresh
- # ------------------------------------------------------------------------
- # Switch ID untuk tipe2 light effect. Kamu juga bisa nambahin tipe switch
- # kamu sendiri. Dengan syarat, huruf awal harus besar.
- # ------------------------------------------------------------------------
- Fire = 1
- Torch = 2
- Light = 3
- # ------------------------------------------------------------------------
- # Konfigurasi mode Simple :
- # ------------------------------------------------------------------------
- # Paduan Konfig :
- # - Keyword >> Nama light effect yang nanti digunakan dalam comment
- # - RGB >> Nilai Red,Green,Blue. Antara -255 s.d 255
- # - Zoom >> Nilai zoom light effectnya. 1.0 = normal
- # - Opacity >> Opacity light effectnya
- # - Var >> Makin gede, makin bervariasi nilai opacitynya
- # - Offset >> Jarak perpindahan dari posisi original
- # - Blend >> Tipe blend. Pilih antara 0 - 2
- # - Switch >> Switch ID untuk disable.
- #
- # Penggunaan dalam comment :
- # Gunakan comment pada event <light: keyword>
- # Contohnya <light: Fire>
- # Inget, besar kecil hurufnya harus sama :v
- # ------------------------------------------------------------------------
- Database = {
- # Keyword => [ R, G, B, Zoom, Opacity, Var, Offset, Blend, Switch]
- "Fire" => [128, -50, -50, 2.0, 200, 50, 2, 0, Fire],
- "Light" => [ 0, 0, 0, 1.5, 200, 0, 0, 0, Light],
- # Tambahin sendiri kalo perlu
- }
- # ------------------------------------------------------------------------
- # Konfigurasi mode Lanjut / Advanced
- # ------------------------------------------------------------------------
- # Bagian sini adalah konfigurasi yang lebih lanjut jika kamu masi tidak
- # puas dengan konfigurasi simple diatas. Tidak disarankan ngedit bagian
- # sini kalo ngga ngerti
- #
- # Paduan konfig :
- # Gunakan awalan seperti ini
- # light = $data_lights["keyword"]
- #
- # Lalu tambahkan variable yang akan diubah. Misalnya gini
- # light.name = "le"
- # light.red = 100
- # light.offset = 1
- #
- # Variable2 yang dapat diubah :
- # - light.name = ngubah nama default gambar cahaynya
- # - light.red = unsur merah (default : 0)
- # - light.green = unsur hijau (default : 0)
- # - light.blue = unsur biru (default : 0)
- # - light.gray = unsur gray (default : 0)
- # - light.blink = jika true, maka cahaya akan ngeblink
- # - light.blink_rate = blink refresh rate (default : DefaultRate)
- # - light.opacity = nilai opacity (default : 255)
- # - light.opacity_var = opacity variance (default : 0)
- # - light.opacity_rate = opacity refresh rate (default : DefaultRate)
- # - light.offset = nilai offset (default : 0)
- # - light.offset_rate = offset refresh rate (default : DefaultRate)
- # - light.zoom = nilai zoom (default : 1.0)
- # - light.switch = switch id (default : 0)
- # - light.buffer_x = Jarak X dari event (default : 0)
- # - light.buffer_y = Jarak Y dari event (default : -15)
- # - light.fading_speed = Kecepatan ilang muncul (default : 0)
- # - light.blend_type = Tipe blending. Pilih antara 0 - 2 (default : 0)
- # ------------------------------------------------------------------------
- def self.load_custom_database
- light = $data_lights["Orb"]
- light.red = -120
- light.green = -20
- light.blue = 150
- light.zoom = 2.0
- light.buffer_y = 5
- light.opacity = 150
- light.fading_speed = 2
- light = $data_lights["Lamp"]
- light.buffer_y = 5
- light.zoom = 2.0
- light.switch = 2
- light = $data_lights["Lamp2"]
- light.name = "le2"
- light.buffer_y = 5
- light.opacity = 150
- light.opacity_var = 50
- light.opacity_rate = 1
- light.switch = 2
- light = $data_lights["Fire"]
- light.buffer_x = 2
- light = $data_lights["Orb2"]
- light.red = -50
- light.green = 150
- light.blue = 20
- light.blink = true
- light.blink_rate = 30
- end
- end
- end
- # =============================================================================
- # Akhir dari konfigurasi
- # =============================================================================
- module THEO
- module Lights
- def self.load_database
- Database.each do |key,data|
- light = $data_lights[key]
- light.red = data[0]
- light.green = data[1]
- light.blue = data[2]
- light.zoom = data[3]
- light.opacity = data[4]
- light.opacity_var = data[5]
- light.offset = data[6]
- light.blend_type = data[7]
- light.switch = data[8]
- light.offset_rate = light.opacity_rate = light.blink_rate = DefaultRate
- light.name = DefaultName
- end
- end
- end
- end
- module Math
- def self.radian(degree)
- return (degree.to_f/180) * Math::PI
- end
- end
- class Data_Light
- attr_reader :key
- attr_accessor :name
- attr_accessor :red
- attr_accessor :green
- attr_accessor :gray
- attr_accessor :blue
- attr_accessor :blink
- attr_accessor :blink_rate
- attr_accessor :opacity
- attr_accessor :opacity_rate
- attr_accessor :opacity_var
- attr_accessor :offset
- attr_accessor :offset_rate
- attr_accessor :blend_type
- attr_accessor :zoom
- attr_accessor :switch
- attr_accessor :buffer_x
- attr_accessor :buffer_y
- attr_accessor :fading_speed
- def initialize(key)
- @key = key
- @name = THEO::Lights::DefaultName
- @red = @green = @blue = @gray = 0
- @blink = false
- @blink_rate = 0
- @opacity = 255
- @opacity_rate = 0
- @opacity_var = 0
- @offset = 0
- @offset_rate = 0
- @blend_type = 0
- @zoom = 1.0
- @switch = 0
- @buffer_x = 0
- @buffer_y = -15
- @fading_speed = 0
- end
- def tone
- Tone.new(red,green,blue,gray)
- end
- end
- class << DataManager
- alias theo_le_load_db load_database
- def load_database
- theo_le_load_db
- load_le_database
- end
- def load_le_database
- $data_lights = Data_Lights.new
- THEO::Lights.load_database
- THEO::Lights.load_custom_database
- end
- end
- class Data_Lights
- def initialize
- @data = {}
- end
- def [](key)
- @data[key] ||= Data_Light.new(key)
- end
- end
- class Game_Event < Game_Character
- attr_accessor :light_key
- attr_writer :light_start_count
- alias theo_sle_page_settings setup_page_settings
- def setup_page_settings
- theo_sle_page_settings
- setup_light_key
- end
- def setup_light_key
- @light_key = ""
- @light_start_count = 0
- return unless list
- list.each do |command|
- next unless command.code == 108 || command.code == 408
- case command.parameters[0]
- when /<(?:LIGHT|light): (.*)>/i
- @light_key = $1.to_s
- when /<(?:LIGHT_START_COUNT|light start count): [ ]*(\d+)>/i
- @light_start_count = $1.to_i
- when /<(?:LIGHT_RAND_COUNT|light rand count): [ ]*(\d+)>/i
- @light_start_count = rand($1.to_i)
- end
- end
- end
- def light_start_count
- @light_start_count ||= 0
- end
- end
- # ----------------------------------------------------------------------------
- # Unique Names for compatibility purposes :P
- # ----------------------------------------------------------------------------
- class Theolized_Light_Effect < Sprite
- def initialize(char, viewport = nil)
- super(viewport)
- @char = char
- setup(@char.light_key)
- end
- def setup(key)
- @key = key.nil? ? "" : key
- init_members
- return if @key.empty?
- setup_database(key)
- self.ox = self.width/2
- self.oy = self.height/2
- end
- def init_members
- self.bitmap = nil
- @offset = @offset_x = @offset_y = @buffer_x = @buffer_y = @opacity_var = 0
- @switch = 0
- @blink = false
- @blink_rate = @opacity_rate = @offset_rate = THEO::Lights::DefaultRate
- @op_count = @count = @char.light_start_count
- @op_fade = 0
- @ori_opacity = 255
- @opacity_offset = 0
- @show_light = true
- end
- def setup_database(key)
- le = $data_lights[key]
- self.bitmap = Cache.picture(le.name)
- self.tone = le.tone
- @ori_opacity=self.opacity=le.fading_speed > 0 ? le.opacity/2.0 : le.opacity
- self.blend_type = le.blend_type
- @blink = le.blink
- @blink_rate = le.blink_rate
- @opacity_rate = le.opacity_rate
- @opacity_var = le.opacity_var
- @offset = le.offset
- @offset_rate = le.offset_rate
- self.zoom_x = self.zoom_y = le.zoom
- @switch = le.switch
- @buffer_x = le.buffer_x
- @buffer_y = le.buffer_y
- @op_fade = le.fading_speed > 0 ? @ori_opacity : 0
- update_placement
- check_blink
- update_op_fade
- update_opacity
- end
- def check_blink
- return if @blink_rate == 0 || !@blink
- @show_light = !@show_light if (@count/@blink_rate) % 2 == 0
- end
- def update
- super
- setup(@char.light_key) if light_changed?
- @count += 1
- update_offset
- update_placement
- update_visibility
- update_blink
- update_op_fade
- update_opacity
- end
- def update_placement
- self.x = @char.screen_x + @buffer_x + @offset_x
- self.y = @char.screen_y + @buffer_y + @offset_y
- end
- def update_offset
- return unless refresh_count?(@offset_rate)
- return if @offset <= 0
- @offset_x = -@offset + rand(@offset*2)
- @offset_y = -@offset + rand(@offset*2)
- end
- def update_visibility
- self.visible = !$game_switches[@switch] && @show_light
- end
- def update_blink
- return unless @blink
- return unless refresh_count?(@blink_rate)
- @show_light = !@show_light
- end
- def update_opacity
- self.opacity = @ori_opacity + @opacity_offset + @op_fade
- return unless refresh_count?(@opacity_rate)
- @opacity_offset = -@opacity_var + rand(@opacity_var*2)
- end
- def update_op_fade
- return unless $data_lights[@key].fading_speed > 0
- @op_count += $data_lights[@key].fading_speed
- @op_fade = Math.cos(Math.radian(@count)) * @ori_opacity
- end
- def refresh_count?(rate)
- return false if rate <= 0
- return @count % rate == 0
- end
- def light_changed?
- @key != @char.light_key
- end
- end
- class Spriteset_Map
- alias theo_le_create_char create_characters
- def create_characters
- theo_le_create_char
- @simple_lights = []
- $game_map.events.values.each do |char|
- @simple_lights.push(Theolized_Light_Effect.new(char,@viewport2))
- end
- end
- alias theo_le_update update
- def update
- theo_le_update
- update_simple_lights
- end
- def update_simple_lights
- @simple_lights.each do |light|
- light.update
- end
- end
- alias theo_sle_dispose_char dispose_characters
- def dispose_characters
- theo_sle_dispose_char
- @simple_lights.each {|light| light.dispose}
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment