Advertisement
LiTTleDRAgo

[RGSS] Drago - Multi Layer XP

Jan 26th, 2014
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 11.88 KB | None | 0 0
  1. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
  2. # Drago - Multi Layer XP
  3. # Version: 2.00 XP
  4. # Author : LiTTleDRAgo
  5. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
  6.  
  7. ($imported ||= {})[:drg_multi_layer_xp] = 1.00
  8.  
  9. core = "This script needs Drago - Core Engine ver 1.42 or above"
  10. rmxp = "This script only for RMXP"
  11.  
  12. $imported[:drg_core_engine]       || raise(core)
  13. LiTTleDRAgo::XP                   || raise(rmxp)
  14.  
  15. #==============================================================================
  16. # ** Spriteset_Map
  17. #------------------------------------------------------------------------------
  18. #  This class brings together map screen sprites, tilemaps, etc. It's used
  19. # within the Scene_Map class.
  20. #==============================================================================
  21. class Spriteset_Map
  22.   #--------------------------------------------------------------------------
  23.   # * Public Instance Variables
  24.   #--------------------------------------------------------------------------
  25.   attr_sec_reader :tilemap_layer, 'Array.new'
  26.   #--------------------------------------------------------------------------
  27.   # * Alias Listing
  28.   #--------------------------------------------------------------------------
  29.   alias_method :initialize_multi_layer_cr, :initialize
  30.   alias_method :update_multi_layer_cr,     :update
  31.   alias_method :dispose_multi_layer_cr,    :dispose
  32.   #--------------------------------------------------------------------------
  33.   # * Aliased Method : initialize
  34.   #--------------------------------------------------------------------------
  35.   def initialize
  36.     initialize_multi_layer_cr
  37.     create_multi_layer
  38.     update
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # * New Method : create_multi_layer
  42.   #--------------------------------------------------------------------------
  43.   def create_multi_layer
  44.     $game_map.layer_data.each_with_index do |data,index|
  45.       temp_map = Game_Map.new
  46.       temp_map.setup($game_map.layer_subs.at(index))
  47.       tilemap_layer[index] = Tilemap.new(@viewport1)
  48.       tilemap_layer[index].tileset = RPG::Cache.tileset(temp_map.tileset_name)
  49.       for i in 0..6
  50.         autotile_name = RPG::Cache.autotile(temp_map.autotile_names[i])
  51.         tilemap_layer[index].autotiles[i] = autotile_name
  52.       end
  53.       tilemap_layer[index].map_data   = temp_map.data
  54.       tilemap_layer[index].priorities = temp_map.priorities
  55.     end
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # * Aliased Method : update
  59.   #--------------------------------------------------------------------------
  60.   def update
  61.     update_multi_layer_cr
  62.     if @tilemap.not.disposed?
  63.       tilemap_layer.ox = @tilemap.ox
  64.       tilemap_layer.oy = @tilemap.oy
  65.       tilemap_layer.update
  66.     end
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # * Aliased Method : dispose
  70.   #--------------------------------------------------------------------------
  71.   def dispose
  72.     tilemap_layer.dispose
  73.     dispose_multi_layer_cr
  74.   end
  75.   #-------------------------------------------------------------------------
  76.   # * Drago - Custom Resolution
  77.   #-------------------------------------------------------------------------
  78.   if $imported[:drg_custom_resolution]
  79.     #-------------------------------------------------------------------------
  80.     # * Alias Listing
  81.     #-------------------------------------------------------------------------
  82.     alias_method :create_tilemap_ex_multi_layer,  :create_tilemap_ex
  83.     alias_method :update_new_tilemap_multi_layer, :update_new_tilemap
  84.     alias_method :dispose_tilemap_ex_multi_layer, :dispose_tilemap_ex
  85.     #-------------------------------------------------------------------------
  86.     # * Aliased method: create_tilemap_ex
  87.     #-------------------------------------------------------------------------
  88.     def create_tilemap_ex
  89.       create_tilemap_ex_multi_layer
  90.       create_multi_layer_ex
  91.     end
  92.     #-------------------------------------------------------------------------
  93.     # * New method: create_multi_layer_ex
  94.     #-------------------------------------------------------------------------
  95.     def create_multi_layer_ex
  96.       @tilemap_layer_ex = []
  97.       @extra_res.each_index do |a|
  98.         @tilemap_layer_ex[a] ||= []
  99.         $game_map.layer_data.each_with_index do |d,b|
  100.           temp_map = Game_Map.new
  101.           temp_map.setup($game_map.layer_subs.at(b))
  102.           tileset = RPG::Cache.tileset(temp_map.tileset_name)
  103.           @tilemap_layer_ex[a][b] = Tilemap.new(@viewport_ex[a])
  104.           @tilemap_layer_ex[a][b].tileset = tileset
  105.           for i in 0..6
  106.             autotile = RPG::Cache.autotile(temp_map.autotile_names[i])
  107.             @tilemap_layer_ex[a][b].autotiles[i] = autotile
  108.           end
  109.           @tilemap_layer_ex[a][b].map_data   = temp_map.data
  110.           @tilemap_layer_ex[a][b].priorities = temp_map.priorities
  111.         end
  112.       end
  113.     end
  114.     #-------------------------------------------------------------------------
  115.     # * Aliased method: update_new_tilemap
  116.     #-------------------------------------------------------------------------
  117.     def update_new_tilemap
  118.       update_new_tilemap_multi_layer
  119.       @tilemap_ex && @extra_res.each_index do |a|
  120.         $game_map.layer_data.each_index do |b|
  121.           if @tilemap_layer_ex && @tilemap_layer_ex[a] &&
  122.             @tilemap_layer_ex[a][b] && @tilemap_layer_ex[a][b].not.disposed?
  123.             @tilemap_ex[a].not.disposed?
  124.             @tilemap_layer_ex[a][b].ox = @tilemap_ex[a].ox
  125.             @tilemap_layer_ex[a][b].oy = @tilemap_ex[a].oy
  126.             @tilemap_layer_ex[a][b].update
  127.           end
  128.         end
  129.       end
  130.     end
  131.     #-------------------------------------------------------------------------
  132.     # * Aliased method: dispose_tilemap_ex
  133.     #-------------------------------------------------------------------------
  134.     def dispose_tilemap_ex
  135.       @tilemap_layer_ex.flatten.dispose
  136.       dispose_tilemap_ex_multi_layer
  137.     end
  138.   end
  139. end
  140.  
  141. #==============================================================================
  142. # ** Game_Map
  143. #------------------------------------------------------------------------------
  144. #  This class handles maps. It includes scrolling and passage determination
  145. # functions. The instance of this class is referenced by $game_map.
  146. #==============================================================================
  147. class Game_Map
  148.   #--------------------------------------------------------------------------
  149.   # * Public Instance Variables
  150.   #--------------------------------------------------------------------------  
  151.   attr_sec_accessor :layer_data, :layer_subs, 'Array.new'
  152.   #--------------------------------------------------------------------------
  153.   # * Alias Method
  154.   #--------------------------------------------------------------------------
  155.   alias_method :setup_multilayer, :setup
  156.   #--------------------------------------------------------------------------
  157.   # * Aliased Method : setup
  158.   #--------------------------------------------------------------------------
  159.   def setup(*args)
  160.     setup_multilayer(*args)  
  161.     @map_type = 'XP'
  162.     decide_map_layer(*args)          
  163.   end
  164.   #--------------------------------------------------------------------------
  165.   # * Overwriten Method : decide_map_layer
  166.   #--------------------------------------------------------------------------
  167.   def decide_map_layer(*args)
  168.     return if layer_subs.include?(@map_id)
  169.     @layer_data, @layer_subs = [], []
  170.     child_ids.each do |submap_id|
  171.       map_info = mapInfo[submap_id]
  172.       unless map_info.nil?
  173.         if map_info.parent_id == map_id &&
  174.           map_info.name.include?("[" + 'join' + "]")
  175.         then
  176.           submap = load_map_data(submap_id)
  177.           unless submap
  178.             print "Map #{submap_id} doesn't exist"
  179.             next
  180.           end
  181.           if [submap.width,submap.height] != [width,height]
  182.             raise "Dimension of child maps must be same with parent's dimension"
  183.           end
  184.           @layer_data << data
  185.           @layer_subs << submap_id
  186.           old_zsize = data.zsize
  187.           data.resize(data.xsize, data.ysize, old_zsize + 3)
  188.           for x in 0...data.xsize
  189.             for y in 0...data.ysize
  190.               if @map_type == 'XP'
  191.                 data[x, y, old_zsize]     = submap.data[x, y, 0]
  192.                 data[x, y, old_zsize + 1] = submap.data[x, y, 1]
  193.                 data[x, y, old_zsize + 2] = submap.data[x, y, 2]
  194.               else
  195.                 data[x, y, old_zsize]     = submap.data[x, y, 1]
  196.                 data[x, y, old_zsize + 1] = submap.data[x, y, 2]
  197.               end
  198.             end
  199.           end
  200.         end
  201.       end
  202.     end
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # * Overwriten Method : passable?
  206.   #--------------------------------------------------------------------------
  207.   def passable?(x, y, d, s = nil)
  208.     return false unless valid?(x, y)
  209.     bit = (1 << (d / 2 - 1)) & 0x0f
  210.     (event_tiles(x, y, s) + layered_tiles(x, y)).each do |tile_id|
  211.       return false if tile_id.nil?
  212.       if @passages[tile_id] & bit != 0
  213.         return false
  214.       elsif @passages[tile_id] & 0x0f == 0x0f
  215.         return false
  216.       elsif @priorities[tile_id] == 0
  217.         return true
  218.       end
  219.     end
  220.     return true
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # * Overwriten Method : bush?
  224.   #--------------------------------------------------------------------------
  225.   def bush?(x, y)
  226.     return false if @map_id == 0
  227.       layered_tiles(x, y).each do |tile_id|
  228.       return false if tile_id.nil?
  229.       passage = @passages[tile_id]
  230.       return true if passage & 0x40 == 0x40
  231.     end
  232.     return false
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # * Overwriten Method : counter?
  236.   #--------------------------------------------------------------------------
  237.   def counter?(x, y)
  238.     return false if @map_id == 0
  239.     layered_tiles(x, y).each do |tile_id|
  240.       return false if tile_id.nil?
  241.       passage = @passages[tile_id]
  242.       return true if passage & 0x80 == 0x80
  243.     end
  244.     return false
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # * Overwriten Method : terrain_tag
  248.   #--------------------------------------------------------------------------
  249.   def terrain_tag(x, y)
  250.     return 0 if @map_id == 0
  251.     layered_tiles(x, y).each do |tile_id|
  252.       return 0 if tile_id.nil?
  253.       tag = @terrain_tags[tile_id]
  254.       return tag if tag > 0
  255.     end
  256.     return 0
  257.   end
  258.   #--------------------------------------------------------------------------
  259.   # * New Method : layered_tiles
  260.   #--------------------------------------------------------------------------
  261.   def layered_tiles(x, y)
  262.     z_data.collect {|z| tile_id(x, y, z) }
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # * New Method : z_data
  266.   #--------------------------------------------------------------------------
  267.   unless method_defined?(:z_data)
  268.     def z_data
  269.       (0...data.zsize).to_a.reverse
  270.     end
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # * New Method : event_tiles
  274.   #--------------------------------------------------------------------------
  275.   def event_tiles(x, y, s=nil)
  276.     return [] unless self.respond_to?(:events_xy_nt)
  277.     e = events_xy_nt(x,y).select {|e| e.tile_id >= 0 && e != s }
  278.     e.collect {|event| event.tile_id }
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # * New Method : tile_id
  282.   #--------------------------------------------------------------------------
  283.   unless method_defined?(:tile_id)
  284.     def tile_id(x, y, z)
  285.       data[x, y, z]
  286.     end
  287.   end
  288. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement