Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # ** 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement