Advertisement
LiTTleDRAgo

[RGSS] DRG - Multi Layer

Aug 5th, 2013
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 5.67 KB | None | 0 0
  1. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
  2. # [XP] DRG - Multi Layer
  3. # Version: 1.00
  4. # Author : LiTTleDRAgo
  5. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
  6. ($imported ||= {})[:drg_multi_layer] = 1.00
  7. #==============================================================================
  8. # ** Game_Map
  9. #------------------------------------------------------------------------------
  10. #  This class handles the map. It includes scrolling and passable determining
  11. #  functions. Refer to "$game_map" for the instance of this class.
  12. #==============================================================================
  13.  
  14. class Game_Map
  15.  
  16.   if method_defined?(:z_data)
  17.     #--------------------------------------------------------------------------
  18.     # * Alias Method
  19.     #--------------------------------------------------------------------------
  20.     alias_method :setup_multilayer, :setup
  21.     #--------------------------------------------------------------------------
  22.     # * Aliased Method : setup
  23.     #--------------------------------------------------------------------------
  24.     def setup(*args)
  25.       setup_multilayer(*args)  
  26.       decide_map_layer(*args)          
  27.     end
  28.     #--------------------------------------------------------------------------
  29.     # * Overwriten Method : passable?
  30.     #--------------------------------------------------------------------------
  31.     def passable?(x, y, d, s = nil)
  32.       return false unless valid?(x, y)
  33.       bit = (1 << (d / 2 - 1)) & 0x0f
  34.       (event_tiles(x, y, s) + layered_tiles(x, y)).each do |tile_id|
  35.         return false if tile_id.nil?
  36.         if @passages[tile_id] & bit != 0
  37.           return false
  38.         elsif @passages[tile_id] & 0x0f == 0x0f
  39.           return false
  40.         elsif @priorities[tile_id] == 0
  41.           return true
  42.         end
  43.       end
  44.       return true
  45.     end
  46.     #--------------------------------------------------------------------------
  47.     # * Overwriten Method : bush?
  48.     #--------------------------------------------------------------------------
  49.     def bush?(x, y)
  50.       return false if @map_id == 0
  51.       layered_tiles(x, y).each do |tile_id|
  52.         return false if tile_id.nil?
  53.         passage = @passages[tile_id]
  54.         return true if passage & 0x40 == 0x40
  55.       end
  56.       return false
  57.     end
  58.     #--------------------------------------------------------------------------
  59.     # * Overwriten Method : counter?
  60.     #--------------------------------------------------------------------------
  61.     def counter?(x, y)
  62.       return false if @map_id == 0
  63.       layered_tiles(x, y).each do |tile_id|
  64.         return false if tile_id.nil?
  65.         passage = @passages[tile_id]
  66.         return true if passage & 0x80 == 0x80
  67.       end
  68.       return false
  69.     end
  70.     #--------------------------------------------------------------------------
  71.     # * Overwriten Method : terrain_tag
  72.     #--------------------------------------------------------------------------
  73.     def terrain_tag(x, y)
  74.       return 0 if @map_id == 0
  75.       layered_tiles(x, y).each do |tile_id|
  76.         return 0 if tile_id.nil?
  77.         tag = @terrain_tags[tile_id]
  78.         return tag if tag > 0
  79.       end
  80.       return 0
  81.     end
  82.     #--------------------------------------------------------------------------
  83.     # * New Method : decide_map_layer
  84.     #--------------------------------------------------------------------------
  85.     def decide_map_layer(*args)
  86.       return if ($imported[:drg_core_engine]||0) < 1.16
  87.       map_name = mapInfo[@map_id].name
  88.       child_ids.each do |submap_id|
  89.         map_info = mapInfo[submap_id]
  90.         unless map_info.nil?
  91.           if map_info.parent_id == map_id &&
  92.             map_info.name.include?("[" + 'join' + "]")
  93.           then
  94.             map = sprintf("Data/Map%03d.rxdata", submap_id)
  95.             unless File.exist?("#{map}")
  96.               msgbox "File #{map} doesn't exist"
  97.               next
  98.             end
  99.             submap = load_data(map)
  100.             old_zsize = data.zsize
  101.             data.resize(data.xsize, data.ysize, old_zsize + 3)
  102.             for x in 0...data.xsize
  103.               for y in 0...data.ysize
  104.                 data[x, y, old_zsize] = submap.data[x, y, 0]
  105.                 data[x, y, old_zsize + 1] = submap.data[x, y, 1]
  106.                 data[x, y, old_zsize + 2] = submap.data[x, y, 2]
  107.               end
  108.             end
  109.             @need_redraw = true
  110.           end
  111.         end
  112.       end
  113.     end
  114.     #--------------------------------------------------------------------------
  115.     # * New Method : layered_tiles
  116.     #--------------------------------------------------------------------------
  117.     def layered_tiles(x, y)
  118.       raise "This script needs edited King's Tilemap to work" unless self.respond_to?(:z_data)
  119.       raise "This script needs Drago - Core Engine v1.16 or later to work" if ($imported[:drg_core_engine]||0) < 1.16
  120.       z_data.collect {|z| tile_id(x, y, z) }
  121.     end
  122.     #--------------------------------------------------------------------------
  123.     # * New Method : event_tiles
  124.     #--------------------------------------------------------------------------
  125.     def event_tiles(x, y, s=nil)
  126.       return [] unless self.respond_to?(:events_xy_nt)
  127.       e = events_xy_nt(x,y).select {|e| e.tile_id >= 0 && e != s }
  128.       e.collect {|event| event.tile_id }
  129.     end
  130.     #--------------------------------------------------------------------------
  131.     # * New Method : tile_id
  132.     #--------------------------------------------------------------------------
  133.     unless method_defined?(:tile_id)
  134.       def tile_id(x, y, z)
  135.         data[x, y, z]
  136.       end
  137.     end
  138.   end
  139. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement