Advertisement
LiTTleDRAgo

[RGSS/3] Drago - Tilemap Effect

Feb 11th, 2014
300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 11.37 KB | None | 0 0
  1. #==============================================================================
  2. # ** Drago - Tilemap Effect
  3. # Version : 1.02
  4. # Author : LiTTleDRAgo
  5. #==============================================================================
  6. #
  7. # Introduction :
  8. #
  9. #     Based from Tilemap tone changer script, this script adds some effects to
  10. #     the tileset bitmap such as invert or grayscale
  11. #
  12. # Example :
  13. #
  14. #   Script :
  15. #      add_tilemap_effect(:invert!)    # invert the tilemap
  16. #      add_tilemap_effect(:grayscale!) # after inverting, grayscale the tilemap
  17. #      add_tilemap_effect(:hue_change, 120) # change the hue by 120
  18. #      add_tilemap_effect(:brighten!)  # brighten the tilemap by 10 degree
  19. #      add_tilemap_effect(:darken!)    # darken the tilemap by 10 degree
  20. #
  21. #  Option available : :invert!, :grayscale!,
  22. #           :hue_change (with argument)
  23. #           :brighten! (with / without argument) default is 10
  24. #           :darken! (with / without argument)   default is 10
  25. #
  26. #   Script :
  27. #      clear_tilemap_effect            # clear all effect
  28. #
  29. # Note :
  30. #
  31. #  -  Not recommended to use in map with large tileset bitmap.
  32. #  -  The first time you add the effect, game will froze for a while to create
  33. #     a cache, you can found the cache file in :
  34. #       C:\Documents and Settings\[user]\Application Data\Drago\Tileset
  35. #       C:\Documents and Settings\[user]\Application Data\Drago\Autotile
  36. #     or
  37. #       C:\Users\[user]\AppData\Roaming\Drago\Tileset
  38. #       C:\Users\[user]\AppData\Roaming\Drago\Autotile
  39. #  -  To revert back the tileset, you must use "clear_tilemap_effect"
  40. #  -  Recommended to use it with WhiteFlute's Bitmap EX
  41. #
  42. #==============================================================================
  43.  
  44. ($imported ||= {})[:drg_tilemap_effect] = 1.02
  45.  
  46. core = "This script needs Drago - Core Engine ver 1.53 or above"
  47. rmvx = "This script not for RMVX"
  48. ($imported[:drg_core_engine] || 0) >= 1.53 || raise(core)
  49. LiTTleDRAgo::XP || LiTTleDRAgo::VXA        || raise(rmvx)
  50. #==============================================================================
  51. # ** Game_Map
  52. #------------------------------------------------------------------------------
  53. #  This class handles the map. It includes scrolling and passable determining
  54. #  functions. Refer to "$game_map" for the instance of this class.
  55. #==============================================================================
  56. class Game_Map
  57.   #-------------------------------------------------------------------------
  58.   # * Public Instance Variables
  59.   #-------------------------------------------------------------------------
  60.   attr_sec_accessor :map_effect, 'Array.new'
  61.   #-------------------------------------------------------------------------
  62.   # * New method: add_tilemap_effect
  63.   #-------------------------------------------------------------------------
  64.   def add_tilemap_effect(*effect)
  65.     map_effect.push(effect)
  66.     refresh_tilemap
  67.   end
  68.   #-------------------------------------------------------------------------
  69.   # * New method: clear_tilemap_effect
  70.   #-------------------------------------------------------------------------
  71.   def clear_tilemap_effect
  72.     map_effect.clear
  73.     refresh_tilemap
  74.   end
  75.   #---------------------------------------------------------------------------
  76.   # * New method: change_character_tone
  77.   #---------------------------------------------------------------------------
  78.   def change_character_tone(tone, *char)
  79.     char = char.collect {|c| c.is_a?(Range) ? c.to_a : c}.flatten
  80.     char = char.collect {|c| c.is_a?(Range) ? c.to_a : c}.flatten
  81.     char.collect! {|c| c.is_a?(Game_Character) ? c : get_character(c)}
  82.     sprite = spriteset.viewport_sprite(:viewport1)
  83.     sprite.reject! {|s| s.not.is_a?(Sprite_Character) }
  84.     sprite.reject! {|s| char.not.include?(s.character)}
  85.     if tone.is_a?(Array) && (3..4) === tone.size
  86.       sprite.tone.set(*tone)
  87.     elsif tone.is_a?(Tone)
  88.       sprite.send(:tone=, tone)
  89.     end
  90.   end
  91.   #-------------------------------------------------------------------------
  92.   # * New method: refresh_tilemap
  93.   #-------------------------------------------------------------------------
  94.   def refresh_tilemap
  95.     sprite = Sprite.new
  96.     sprite.bitmap = Graphics.snap_to_bitmap
  97.     text = "Loading"
  98.     sprite.bitmap.draw_enter_edging_text(0,0,sprite.width,sprite.height,text,1)
  99.     sprite.z = 0x3FFFFFFF
  100.     spriteset.reload_tilemap
  101.     spriteset.create_tilemap_ex if $imported[:drg_custom_resolution]
  102.     spriteset.create_multi_layer if $imported[:drg_multi_layer]
  103.     sprite.bitmap.dispose
  104.     sprite.dispose
  105.   end
  106. end
  107.  
  108. #==============================================================================
  109. # ** Spriteset_Map
  110. #------------------------------------------------------------------------------
  111. #  This class brings together map screen sprites, tilemaps, etc.
  112. #  It's used within the Scene_Map class.
  113. #==============================================================================
  114. class Spriteset_Map
  115.   #---------------------------------------------------------------------------
  116.   # * Public Instance Variables
  117.   #---------------------------------------------------------------------------
  118.   attr_reader :viewport1, :viewport2, :viewport3
  119.   #-------------------------------------------------------------------------
  120.   # * New method: reload_tilemap
  121.   #-------------------------------------------------------------------------
  122.   unless method_defined?(:reload_tilemap)
  123.     def reload_tilemap
  124.       @tilemap.dispose if @tilemap.respond_to?(:dispose)
  125.       @tilemap = Tilemap.new(@viewport1)
  126.       tileset = LiTTleDRAgo.cache.tileset($game_map.tileset_name)
  127.       @tilemap.map_data = $game_map.data
  128.       if $game_map.not.respond_to?(:map_type) || $game_map.map_type == 'XP'
  129.         @tilemap.tileset = tileset
  130.         for i in 0..6
  131.           autotile_name = $game_map.autotile_names[i]
  132.           @tilemap.autotiles[i] = LiTTleDRAgo.cache.autotile(autotile_name)
  133.         end
  134.         @tilemap.priorities = $game_map.priorities
  135.       else
  136.         load = "This script needs Drago - XP Map Loader ver 1.10 or above"
  137.         $imported[:drg_xp_map_loader] || raise(load)
  138.         $game_map.tileset.tileset_names.each_with_index do |name, i|
  139.           @tilemap.bitmaps[i] = LiTTleDRAgo.cache.tileset(name)
  140.         end
  141.         @tilemap.flags = $game_map.tileset.flags
  142.       end
  143.     end  
  144.   end
  145. end
  146. #==============================================================================
  147. # ■ RPG::Cache
  148. #------------------------------------------------------------------------------
  149. #
  150. #==============================================================================
  151. ModCache = LiTTleDRAgo.cache
  152. module ModCache
  153.   #-------------------------------------------------------------------------
  154.   # * Self
  155.   #-------------------------------------------------------------------------
  156.   class << self
  157.     #-----------------------------------------------------------------------
  158.     # * Alias Listing
  159.     #-----------------------------------------------------------------------
  160.     alias_sec_method :tileset_effect_change, :tileset
  161.     alias_sec_method :autotile_effect_change, :autotile
  162.     #-----------------------------------------------------------------------
  163.     # * New method: name_tilemap_effect
  164.     #-----------------------------------------------------------------------
  165.     def name_tilemap_effect(name)
  166.       name.gsub!(/([<>"*\/\\|:?])/i)  { '' }
  167.      name.gsub!('invert! - invert! - ')  { '' }
  168.      name.gsub!('invert! - invert!')  { '' }
  169.      name.gsub!('brighten! - darken! - ')  { '' }
  170.      name.gsub!('brighten! - darken!')  { '' }
  171.      name.gsub!('darken! - brighten! - ')  { '' }
  172.      name.gsub!('darken! - brighten!')  { '' }
  173.      return name
  174.    end
  175.    #-----------------------------------------------------------------------
  176.    # * Aliased method: tileset
  177.    #-----------------------------------------------------------------------
  178.    def tileset(filename)
  179.      unless $game_map.map_effect.first.is_a?(Array) && filename != ''
  180.        tileset_effect_change(filename)
  181.      else
  182.        name = name_tilemap_effect(' - ' + $game_map.map_effect.join(' - '))
  183.        return tileset_effect_change(filename) if name == '' || name == ' - '
  184.        unless drago_bitmap_exist?('Tileset',filename + name)
  185.          bitmap = tileset_effect_change(filename).clone
  186.          $game_map.map_effect.each_with_index do |method,index|
  187.            temp = name_tilemap_effect(' - ' +
  188.               $game_map.map_effect[0..index].join(' - '))
  189.            if drago_bitmap_exist?('Tileset',filename + temp)
  190.              bitmap.dispose
  191.              bitmap = drago_get_bitmap('Tileset',filename + temp).clone
  192.            else
  193.              bitmap.send(*method)
  194.            end
  195.          end
  196.          drago_set_bitmap(bitmap, 'Tileset',filename + name)
  197.        end
  198.        drago_get_bitmap('Tileset',filename + name)
  199.      end
  200.    end
  201.    #-----------------------------------------------------------------------
  202.    # * Aliased method: autotile
  203.    #-----------------------------------------------------------------------
  204.    def autotile(filename)
  205.      unless $game_map.map_effect.first.is_a?(Array) && filename != ''
  206.        autotile_effect_change(filename)
  207.      else
  208.        name = name_tilemap_effect(' - ' + $game_map.map_effect.join(' - '))
  209.        return autotile_effect_change(filename) if name == '' || name == ' - '
  210.        unless drago_bitmap_exist?('Autotile',filename + name)
  211.          bitmap = autotile_effect_change(filename).clone
  212.          $game_map.map_effect.each_with_index do |method,index|
  213.            temp = name_tilemap_effect(' - ' +
  214.               $game_map.map_effect[0..index].join(' - '))
  215.            if drago_bitmap_exist?('Autotile',filename + temp)
  216.              bitmap.dispose
  217.              bitmap = drago_get_bitmap('Autotile',filename + temp).clone
  218.            else
  219.              bitmap.send(*method)
  220.            end
  221.          end
  222.          drago_set_bitmap(bitmap, 'Autotile',filename + name)
  223.        end
  224.        if $resolution && $resolution.enabled?
  225.          key = "Graphics/Autotiles/#{filename}#{name}"
  226.           unless include?(key)
  227.             bitmap = drago_get_bitmap('Autotile',filename + name).clone
  228.             @cache[key] = (filename == '') ? Bitmap.new(128, 96) : bitmap.clone
  229.             new_bm = self.format_autotiles(@cache[key], bitmap)
  230.             @cache[key].dispose
  231.             @cache[key] = new_bm
  232.           end
  233.           return @cache[key]
  234.         end
  235.         drago_get_bitmap('Autotile',filename + name)
  236.       end
  237.     end
  238.   end
  239. end
  240. #==============================================================================
  241. # ** Interpreter
  242. #------------------------------------------------------------------------------
  243. #  This interpreter runs event commands. This class is used within the
  244. #  Game_System class and the Game_Event class.
  245. #==============================================================================
  246. Klass = LiTTleDRAgo::VX ? Game_Interpreter : Interpreter
  247. class Klass
  248.   #-------------------------------------------------------------------------
  249.   # * Redirect Listing
  250.   #-------------------------------------------------------------------------
  251.   redirect_method :add_tilemap_effect,    '$game_map.add_tilemap_effect'
  252.   redirect_method :clear_tilemap_effect,  '$game_map.clear_tilemap_effect'
  253.   redirect_method :change_character_tone, '$game_map.change_character_tone'
  254.  
  255. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement