#============================================================================== # ** Drago - Tilemap Effect # Version : 1.02 # Author : LiTTleDRAgo #============================================================================== # # Introduction : # # Based from Tilemap tone changer script, this script adds some effects to # the tileset bitmap such as invert or grayscale # # Example : # # Script : # add_tilemap_effect(:invert!) # invert the tilemap # add_tilemap_effect(:grayscale!) # after inverting, grayscale the tilemap # add_tilemap_effect(:hue_change, 120) # change the hue by 120 # add_tilemap_effect(:brighten!) # brighten the tilemap by 10 degree # add_tilemap_effect(:darken!) # darken the tilemap by 10 degree # # Option available : :invert!, :grayscale!, # :hue_change (with argument) # :brighten! (with / without argument) default is 10 # :darken! (with / without argument) default is 10 # # Script : # clear_tilemap_effect # clear all effect # # Note : # # - Not recommended to use in map with large tileset bitmap. # - The first time you add the effect, game will froze for a while to create # a cache, you can found the cache file in : # C:\Documents and Settings\[user]\Application Data\Drago\Tileset # C:\Documents and Settings\[user]\Application Data\Drago\Autotile # or # C:\Users\[user]\AppData\Roaming\Drago\Tileset # C:\Users\[user]\AppData\Roaming\Drago\Autotile # - To revert back the tileset, you must use "clear_tilemap_effect" # - Recommended to use it with WhiteFlute's Bitmap EX # #============================================================================== ($imported ||= {})[:drg_tilemap_effect] = 1.02 core = "This script needs Drago - Core Engine ver 1.53 or above" rmvx = "This script not for RMVX" ($imported[:drg_core_engine] || 0) >= 1.53 || raise(core) LiTTleDRAgo::XP || LiTTleDRAgo::VXA || raise(rmvx) #============================================================================== # ** Game_Map #------------------------------------------------------------------------------ # This class handles the map. It includes scrolling and passable determining # functions. Refer to "$game_map" for the instance of this class. #============================================================================== class Game_Map #------------------------------------------------------------------------- # * Public Instance Variables #------------------------------------------------------------------------- attr_sec_accessor :map_effect, 'Array.new' #------------------------------------------------------------------------- # * New method: add_tilemap_effect #------------------------------------------------------------------------- def add_tilemap_effect(*effect) map_effect.push(effect) refresh_tilemap end #------------------------------------------------------------------------- # * New method: clear_tilemap_effect #------------------------------------------------------------------------- def clear_tilemap_effect map_effect.clear refresh_tilemap end #--------------------------------------------------------------------------- # * New method: change_character_tone #--------------------------------------------------------------------------- def change_character_tone(tone, *char) char = char.collect {|c| c.is_a?(Range) ? c.to_a : c}.flatten char = char.collect {|c| c.is_a?(Range) ? c.to_a : c}.flatten char.collect! {|c| c.is_a?(Game_Character) ? c : get_character(c)} sprite = spriteset.viewport_sprite(:viewport1) sprite.reject! {|s| s.not.is_a?(Sprite_Character) } sprite.reject! {|s| char.not.include?(s.character)} if tone.is_a?(Array) && (3..4) === tone.size sprite.tone.set(*tone) elsif tone.is_a?(Tone) sprite.send(:tone=, tone) end end #------------------------------------------------------------------------- # * New method: refresh_tilemap #------------------------------------------------------------------------- def refresh_tilemap sprite = Sprite.new sprite.bitmap = Graphics.snap_to_bitmap text = "Loading" sprite.bitmap.draw_enter_edging_text(0,0,sprite.width,sprite.height,text,1) sprite.z = 0x3FFFFFFF spriteset.reload_tilemap spriteset.create_tilemap_ex if $imported[:drg_custom_resolution] spriteset.create_multi_layer if $imported[:drg_multi_layer] sprite.bitmap.dispose sprite.dispose end end #============================================================================== # ** Spriteset_Map #------------------------------------------------------------------------------ # This class brings together map screen sprites, tilemaps, etc. # It's used within the Scene_Map class. #============================================================================== class Spriteset_Map #--------------------------------------------------------------------------- # * Public Instance Variables #--------------------------------------------------------------------------- attr_reader :viewport1, :viewport2, :viewport3 #------------------------------------------------------------------------- # * New method: reload_tilemap #------------------------------------------------------------------------- unless method_defined?(:reload_tilemap) def reload_tilemap @tilemap.dispose if @tilemap.respond_to?(:dispose) @tilemap = Tilemap.new(@viewport1) tileset = LiTTleDRAgo.cache.tileset($game_map.tileset_name) @tilemap.map_data = $game_map.data if $game_map.not.respond_to?(:map_type) || $game_map.map_type == 'XP' @tilemap.tileset = tileset for i in 0..6 autotile_name = $game_map.autotile_names[i] @tilemap.autotiles[i] = LiTTleDRAgo.cache.autotile(autotile_name) end @tilemap.priorities = $game_map.priorities else load = "This script needs Drago - XP Map Loader ver 1.10 or above" $imported[:drg_xp_map_loader] || raise(load) $game_map.tileset.tileset_names.each_with_index do |name, i| @tilemap.bitmaps[i] = LiTTleDRAgo.cache.tileset(name) end @tilemap.flags = $game_map.tileset.flags end end end end #============================================================================== # ■ RPG::Cache #------------------------------------------------------------------------------ # #============================================================================== ModCache = LiTTleDRAgo.cache module ModCache #------------------------------------------------------------------------- # * Self #------------------------------------------------------------------------- class << self #----------------------------------------------------------------------- # * Alias Listing #----------------------------------------------------------------------- alias_sec_method :tileset_effect_change, :tileset alias_sec_method :autotile_effect_change, :autotile #----------------------------------------------------------------------- # * New method: name_tilemap_effect #----------------------------------------------------------------------- def name_tilemap_effect(name) name.gsub!(/([<>"*\/\\|:?])/i) { '' } name.gsub!('invert! - invert! - ') { '' } name.gsub!('invert! - invert!') { '' } name.gsub!('brighten! - darken! - ') { '' } name.gsub!('brighten! - darken!') { '' } name.gsub!('darken! - brighten! - ') { '' } name.gsub!('darken! - brighten!') { '' } return name end #----------------------------------------------------------------------- # * Aliased method: tileset #----------------------------------------------------------------------- def tileset(filename) unless $game_map.map_effect.first.is_a?(Array) && filename != '' tileset_effect_change(filename) else name = name_tilemap_effect(' - ' + $game_map.map_effect.join(' - ')) return tileset_effect_change(filename) if name == '' || name == ' - ' unless drago_bitmap_exist?('Tileset',filename + name) bitmap = tileset_effect_change(filename).clone $game_map.map_effect.each_with_index do |method,index| temp = name_tilemap_effect(' - ' + $game_map.map_effect[0..index].join(' - ')) if drago_bitmap_exist?('Tileset',filename + temp) bitmap.dispose bitmap = drago_get_bitmap('Tileset',filename + temp).clone else bitmap.send(*method) end end drago_set_bitmap(bitmap, 'Tileset',filename + name) end drago_get_bitmap('Tileset',filename + name) end end #----------------------------------------------------------------------- # * Aliased method: autotile #----------------------------------------------------------------------- def autotile(filename) unless $game_map.map_effect.first.is_a?(Array) && filename != '' autotile_effect_change(filename) else name = name_tilemap_effect(' - ' + $game_map.map_effect.join(' - ')) return autotile_effect_change(filename) if name == '' || name == ' - ' unless drago_bitmap_exist?('Autotile',filename + name) bitmap = autotile_effect_change(filename).clone $game_map.map_effect.each_with_index do |method,index| temp = name_tilemap_effect(' - ' + $game_map.map_effect[0..index].join(' - ')) if drago_bitmap_exist?('Autotile',filename + temp) bitmap.dispose bitmap = drago_get_bitmap('Autotile',filename + temp).clone else bitmap.send(*method) end end drago_set_bitmap(bitmap, 'Autotile',filename + name) end if $resolution && $resolution.enabled? key = "Graphics/Autotiles/#{filename}#{name}" unless include?(key) bitmap = drago_get_bitmap('Autotile',filename + name).clone @cache[key] = (filename == '') ? Bitmap.new(128, 96) : bitmap.clone new_bm = self.format_autotiles(@cache[key], bitmap) @cache[key].dispose @cache[key] = new_bm end return @cache[key] end drago_get_bitmap('Autotile',filename + name) end end end end #============================================================================== # ** Interpreter #------------------------------------------------------------------------------ # This interpreter runs event commands. This class is used within the # Game_System class and the Game_Event class. #============================================================================== Klass = LiTTleDRAgo::VX ? Game_Interpreter : Interpreter class Klass #------------------------------------------------------------------------- # * Redirect Listing #------------------------------------------------------------------------- redirect_method :add_tilemap_effect, '$game_map.add_tilemap_effect' redirect_method :clear_tilemap_effect, '$game_map.clear_tilemap_effect' redirect_method :change_character_tone, '$game_map.change_character_tone' end