Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- # [XP] DRG - Multi Layer
- # Version: 1.00
- # Author : LiTTleDRAgo
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- ($imported ||= {})[:drg_multi_layer] = 1.00
- #==============================================================================
- # ** 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
- if method_defined?(:z_data)
- #--------------------------------------------------------------------------
- # * Alias Method
- #--------------------------------------------------------------------------
- alias_method :setup_multilayer, :setup
- #--------------------------------------------------------------------------
- # * Aliased Method : setup
- #--------------------------------------------------------------------------
- def setup(*args)
- setup_multilayer(*args)
- decide_map_layer(*args)
- end
- #--------------------------------------------------------------------------
- # * Overwriten Method : passable?
- #--------------------------------------------------------------------------
- def passable?(x, y, d, s = nil)
- return false unless valid?(x, y)
- bit = (1 << (d / 2 - 1)) & 0x0f
- (event_tiles(x, y, s) + layered_tiles(x, y)).each do |tile_id|
- return false if tile_id.nil?
- if @passages[tile_id] & bit != 0
- return false
- elsif @passages[tile_id] & 0x0f == 0x0f
- return false
- elsif @priorities[tile_id] == 0
- return true
- end
- end
- return true
- end
- #--------------------------------------------------------------------------
- # * Overwriten Method : bush?
- #--------------------------------------------------------------------------
- def bush?(x, y)
- return false if @map_id == 0
- layered_tiles(x, y).each do |tile_id|
- return false if tile_id.nil?
- passage = @passages[tile_id]
- return true if passage & 0x40 == 0x40
- end
- return false
- end
- #--------------------------------------------------------------------------
- # * Overwriten Method : counter?
- #--------------------------------------------------------------------------
- def counter?(x, y)
- return false if @map_id == 0
- layered_tiles(x, y).each do |tile_id|
- return false if tile_id.nil?
- passage = @passages[tile_id]
- return true if passage & 0x80 == 0x80
- end
- return false
- end
- #--------------------------------------------------------------------------
- # * Overwriten Method : terrain_tag
- #--------------------------------------------------------------------------
- def terrain_tag(x, y)
- return 0 if @map_id == 0
- layered_tiles(x, y).each do |tile_id|
- return 0 if tile_id.nil?
- tag = @terrain_tags[tile_id]
- return tag if tag > 0
- end
- return 0
- end
- #--------------------------------------------------------------------------
- # * New Method : decide_map_layer
- #--------------------------------------------------------------------------
- def decide_map_layer(*args)
- return if ($imported[:drg_core_engine]||0) < 1.16
- map_name = mapInfo[@map_id].name
- child_ids.each do |submap_id|
- map_info = mapInfo[submap_id]
- unless map_info.nil?
- if map_info.parent_id == map_id &&
- map_info.name.include?("[" + 'join' + "]")
- then
- map = sprintf("Data/Map%03d.rxdata", submap_id)
- unless File.exist?("#{map}")
- msgbox "File #{map} doesn't exist"
- next
- end
- submap = load_data(map)
- old_zsize = data.zsize
- data.resize(data.xsize, data.ysize, old_zsize + 3)
- for x in 0...data.xsize
- for y in 0...data.ysize
- data[x, y, old_zsize] = submap.data[x, y, 0]
- data[x, y, old_zsize + 1] = submap.data[x, y, 1]
- data[x, y, old_zsize + 2] = submap.data[x, y, 2]
- end
- end
- @need_redraw = true
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # * New Method : layered_tiles
- #--------------------------------------------------------------------------
- def layered_tiles(x, y)
- raise "This script needs edited King's Tilemap to work" unless self.respond_to?(:z_data)
- raise "This script needs Drago - Core Engine v1.16 or later to work" if ($imported[:drg_core_engine]||0) < 1.16
- z_data.collect {|z| tile_id(x, y, z) }
- end
- #--------------------------------------------------------------------------
- # * New Method : event_tiles
- #--------------------------------------------------------------------------
- def event_tiles(x, y, s=nil)
- return [] unless self.respond_to?(:events_xy_nt)
- e = events_xy_nt(x,y).select {|e| e.tile_id >= 0 && e != s }
- e.collect {|event| event.tile_id }
- end
- #--------------------------------------------------------------------------
- # * New Method : tile_id
- #--------------------------------------------------------------------------
- unless method_defined?(:tile_id)
- def tile_id(x, y, z)
- data[x, y, z]
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement