TheoAllen

Theo - Realistic Light

May 17th, 2013
486
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 9.52 KB | None | 0 0
  1. # =============================================================================
  2. # TheoAllen - Realistic Light
  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. if true # <--- Set false disini jika mo ngedisable script ini
  8. # =============================================================================  
  9. ($imported ||={})[:Theo_RealLight] = true
  10. # =============================================================================
  11. # CHANGE LOGS:
  12. # -----------------------------------------------------------------------------
  13. # 2013.06.01 - Add disable at specified tileset id
  14. #            - Add disable by map notetag
  15. # 2013.05.18 - Adjust random calculation (v0.95b)
  16. # 2013.05.17 - Bug fixed at switch (v0.95)
  17. #            - Added some customizations
  18. #            - Compatibility Patch with various light effect
  19. #            - Added "use in battle" option
  20. # 2013.05.15 - Started and Finished script (v0.85)
  21. # =============================================================================
  22. =begin
  23.  
  24.   Perkenalan :
  25.   Script ini ngebikin map kamu mempunyai light effect secara realistis
  26.  
  27.   Cara penggunaan :
  28.   Pasang diatas main. Tapi dibawah menu. Jangan lupa masukin file2 light
  29.   (besar harus sesuai screen). Edit konfigurasinya.
  30.  
  31.   Kamu bisa tulis tag <no light> pada map notetag kalo kamu pengen ngedisable
  32.   light pada map tertentu
  33.  
  34.   Terms of use:
  35.   Credit gw, TheoAllen. Kalo semisal u bisa ngedit2 script gw trus jadi lebih
  36.   keren, terserah. Ane bebasin. Asal ngga ngeklaim aja. Kalo semisal mau
  37.   dipake buat komersil, jangan lupa, gw dibagi gratisannya.
  38.  
  39. =end
  40. # =============================================================================
  41. # Konfigurasi :
  42. # =============================================================================
  43. module THEO
  44.   module LIGHT
  45.     # =========================================================================
  46.       LIST = ["Light_x","Light_2","Light_3","Light_4","Light_5"]
  47.     # -------------------------------------------------------------------------
  48.     # Untuk nyatet file yang mau digunain untuk light. File gambar harus ada
  49.     # dalam folder Graphics/Picture
  50.     # =========================================================================
  51.    
  52.     # =========================================================================
  53.       DISABLE_SWITCH_ID = 1
  54.     # -------------------------------------------------------------------------
  55.     # Switch ID untuk keperluan disable
  56.     # Jika switch dengan id tersebut = true, maka light akan hilang
  57.     # -------------------------------------------------------------------------
  58.       MIRROR_SWITCH_ID  = 2
  59.     # -------------------------------------------------------------------------
  60.     # Switch ID untuk ngebalik light. Kalau bernilai true, maka light akan
  61.     # dibalik arahnya.
  62.     # =========================================================================
  63.    
  64.     # =========================================================================
  65.       ORIGINAL_OPACITY = 127
  66.     # -------------------------------------------------------------------------
  67.     # Opacity dari gambar asli (default : 127)
  68.     # -------------------------------------------------------------------------
  69.       OPACITY_VARIANCE = 127
  70.     # -------------------------------------------------------------------------
  71.     # Variansi dari opacity asli. Semisal u masukin 127 dengan original opacity
  72.     # sama dengan 127, maka opacity cahaya akan berganti antara 0 - 254.
  73.     # (default : 127)
  74.     # =========================================================================
  75.    
  76.     # =========================================================================
  77.       RANDOM_FADE      = true # Untuk gunain random fade (true/false)
  78.     # -------------------------------------------------------------------------
  79.       MAX_FADE_SPEED   = 4.0 # Nilai maksimum dari kecepatan fade
  80.       MIN_FADE_SPEED   = 2.0 # Nilai minimum dari kecepatan fade
  81.     # -------------------------------------------------------------------------
  82.     # RANDOM_FADE adalah untuk nge-random kecepatan fade dengan jarak
  83.     # MIN_FADE_SPEED ampe MAX_FADE_SPEED saat cahaya mencapai opacity paling
  84.     # rendah. Jadi ada kalanya kecepatan fade bisa lambat atau cepat.
  85.     #
  86.     # Apabila RANDOM_FADE diisi false, maka kecepatan fade tiap light akan
  87.     # relatif sama. (Nilai yang diambil adalah MAX_FADE_SPEED)
  88.     # =========================================================================
  89.    
  90.     # =========================================================================
  91.       USE_IN_BATTLE    = true
  92.     # -------------------------------------------------------------------------
  93.     # tulis true kalo kamu pengen gunain realistic ligth dalam battle. Tentunya
  94.     # masih bisa dihilangkan dengan menggunakan switch
  95.     # =========================================================================
  96.    
  97.     # =========================================================================
  98.       DISABLE_AT_TILESET_ID = [3,4]
  99.     # -------------------------------------------------------------------------
  100.     # Untuk ngedisable realistic light pada tileset id tertentu. Misalnya
  101.     # tileset id untuk map interior adalah 3 (interior rumah) dan 4 (interior
  102.     # dungeon).
  103.     # =========================================================================
  104.    
  105.   end
  106. end
  107. # =============================================================================
  108. # Batas akhir konfigurasi. Jika ada masalah semacam bug atau compatibility,
  109. # lapor ke gw segera. Dan ngga usah ngedit2 kecuali ente ngerti :v
  110. # =============================================================================
  111. class Sprite_Light < Sprite
  112.  
  113.   include THEO::LIGHT
  114.  
  115.   def initialize(image, fade_speed, viewport = nil)
  116.     super(viewport)
  117.     if image.is_a?(Bitmap)
  118.       self.bitmap = image
  119.     else
  120.       self.bitmap = Cache.picture(image)
  121.     end
  122.     @fade_speed = fade_speed
  123.     @count = rand(360)
  124.     self.opacity = @original_opacity = ORIGINAL_OPACITY
  125.   end
  126.  
  127.   def update_fade
  128.     derajat = (@count.to_f/180) * Math::PI
  129.     self.opacity = @original_opacity + variance(derajat)
  130.     @count += rand * @fade_speed
  131.     change_fade_speed if use_random?
  132.   end
  133.  
  134.   def variance(derajat)
  135.     (Math.sin(derajat) * OPACITY_VARIANCE)
  136.   end
  137.  
  138.   def change_fade_speed
  139.     @fade_speed = MIN_FADE_SPEED + (rand * (MAX_FADE_SPEED - MIN_FADE_SPEED))
  140.   end
  141.  
  142.   def use_random?
  143.     RANDOM_FADE && self.opacity == ORIGINAL_OPACITY - OPACITY_VARIANCE
  144.   end
  145.  
  146. end
  147.  
  148. class Spriteset_Light
  149.  
  150.   include THEO::LIGHT
  151.  
  152.   def initialize(viewport = nil)
  153.     @viewport = viewport
  154.     make_all_lights
  155.   end
  156.  
  157.   def make_all_lights
  158.     index = 0
  159.     @lights = Array.new (LIST.size){
  160.       fade_speed = RANDOM_FADE ? rand * random_fade_speed : MAX_FADE_SPEED
  161.       light = Sprite_Light.new(LIST[index],fade_speed,@viewport)
  162.       index += 1
  163.       light
  164.     }
  165.   end
  166.  
  167.   def random_fade_speed
  168.     MIN_FADE_SPEED + (rand * (MAX_FADE_SPEED - MIN_FADE_SPEED))
  169.   end
  170.  
  171.   def dispose
  172.     dispose_lights
  173.   end
  174.  
  175.   def dispose_lights
  176.     @lights.each {|light| light.dispose}
  177.   end
  178.  
  179.   def update
  180.     @lights.each {|light|
  181.       next if light.disposed?
  182.       light.update_fade
  183.       light.mirror = $game_switches[MIRROR_SWITCH_ID]
  184.       }
  185.   end
  186.  
  187. end
  188.  
  189. class Spriteset_Map
  190.  
  191.   alias pre_light_viewports create_viewports
  192.   def create_viewports
  193.     pre_light_viewports
  194.     create_lights
  195.   end
  196.  
  197.   def create_lights
  198.     return if no_lights?
  199.     @theo_lights = Spriteset_Light.new unless @theo_lights
  200.   end
  201.  
  202.   def no_lights?
  203.     THEO::LIGHT::DISABLE_AT_TILESET_ID.any? {|id| id == $game_map.tileset.id} ||
  204.       $game_map.map.note.include?("<no light>")
  205.   end
  206.  
  207.   alias pre_light_update update
  208.   def update
  209.     pre_light_update
  210.     update_lights
  211.     check_light_existence
  212.   end
  213.  
  214.   def update_lights
  215.     @theo_lights.update if @theo_lights
  216.   end
  217.  
  218.   def check_light_existence
  219.     no_lights? || $game_switches[THEO::LIGHT::DISABLE_SWITCH_ID] ?
  220.       dispose_real_lights : create_lights
  221.   end
  222.  
  223.   alias pre_light_dispose dispose
  224.   def dispose
  225.     pre_light_dispose
  226.     dispose_real_lights
  227.   end
  228.  
  229.   def dispose_real_lights
  230.     if @theo_lights
  231.       @theo_lights.dispose
  232.       @theo_lights = nil
  233.     end
  234.   end
  235.  
  236. end
  237.  
  238. class Spriteset_Battle
  239.  
  240.   alias pre_lights_viewports create_viewports
  241.   def create_viewports
  242.     pre_lights_viewports
  243.     create_realistic_lights
  244.   end
  245.  
  246.   def create_realistic_lights
  247.     return unless use_realistic_lights?
  248.     @theo_lights = Spriteset_Light.new(@viewport2) unless @theo_lights
  249.   end
  250.  
  251.   def use_realistic_lights?
  252.     THEO::LIGHT::USE_IN_BATTLE && !$game_switches[THEO::LIGHT::DISABLE_SWITCH_ID]
  253.   end
  254.  
  255.   alias pre_realistic_update_light update
  256.   def update
  257.     pre_realistic_update_light
  258.     update_realistic_light
  259.     check_light_existence
  260.   end
  261.  
  262.   def update_realistic_light
  263.     @theo_lights.update if @theo_lights
  264.   end
  265.  
  266.   def check_light_existence
  267.     $game_switches[THEO::LIGHT::DISABLE_SWITCH_ID] ?
  268.       dispose_real_lights : create_realistic_lights
  269.   end
  270.  
  271.   alias pre_dispose_real_lights dispose
  272.   def dispose
  273.     pre_dispose_real_lights
  274.     dispose_real_lights
  275.   end
  276.  
  277.   def dispose_real_lights
  278.     if @theo_lights
  279.       @theo_lights.dispose
  280.       @theo_lights = nil
  281.     end
  282.   end
  283.  
  284. end
  285.  
  286. class Game_Map
  287.   def map
  288.     @map
  289.   end
  290. end
  291.  
  292. end
Advertisement
Add Comment
Please, Sign In to add comment