Advertisement
EvilEagles

FiMark's Minimap

Feb 7th, 2012
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 12.70 KB | None | 0 0
  1.  
  2. =begin ************************************************************************
  3.   š ƒtƒB[ƒ‹ƒhƒ}ƒbƒv‚Ì•\Ž¦
  4. =end # ************************************************************************
  5.  
  6. module FiMark
  7.  
  8.   # ¥ Ý’è
  9.   OnMap   = [15]            # •\Ž¦‚·‚éƒ}ƒbƒvID (—á [1, 2, 5])
  10.   NZoom   = 0.3            # ƒ}ƒbƒv‚ÌŠg‘å—¦
  11.   OnSwi   = 0              # •\Ž¦Ø‚è‘Ö‚¦ƒXƒCƒbƒ`ID (0‚ŏí‚É•\Ž¦)
  12.   CX , CY = 544 , 416      # XÀ•W , YÀ•W (•\Ž¦‚·‚éƒ}ƒbƒv‚Ì’†SˆÊ’u)
  13.   Spa     = 4              # —]”’ (’[‚̂͂ݏo‚µ‚ð‹­§‚·‚é”͈Í)
  14.  
  15.   # ¥ F  ( Ô , —Î , Â , “§–¾“x )  0 ` 255 ‚͈̔͂Őݒè
  16.   Land = Color.new(192, 192, 192, 144) # —¤’n
  17.   Sea  = Color.new(  0,   0,   0, 144) # ŠC
  18.   OffS = Color.new( 32,  32,  32, 144) # ŠC (ó)
  19.   Mtn  = Color.new(128, 128, 128, 144) # ŽR
  20.   Now  = Color.new(208, 112,   0, 255) # Œ»Ý’n
  21.  
  22.   # ¤ Ú×Ý’è (’†‹‰)
  23.   LoMap = []               # ‚ ‚ç‚©‚¶‚ߓǂݍž‚Þƒ}ƒbƒv
  24.   MZoom = {}               # ƒ}ƒbƒv‚²‚Æ‚ÌŠg‘å—¦‚ðŒˆ‚ß‚é ( ID=>Šg‘å—¦, )
  25.  
  26.   # ¦ ƒ}ƒbƒv‚ð“ǂݍž‚ÞŽž‚É’x‚¢‚ÆŠ´‚¶‚½‚çA‚»‚̃}ƒbƒv‚ð LoMap ‚Ì’†‚É“ü‚ê‚Ü‚·
  27.   # ¦ ‰æ‘œ‚́A‰æ–Ê‚ÌŠO‚ɂ͂͂ݏo‚³‚È‚¢—l‚ɐݒ肳‚ê‚Ä‚¢‚Ü‚·
  28.  
  29.   # “ÁŽêÝ’è (»ì—p)
  30.   Point = Color.new(255, 255, 0, 255)  # F ƒ|ƒCƒ“ƒg
  31. end
  32.  
  33. #-mymemo-----------------------------------------------------------------------
  34. #  ŠC‚Í ˆê‘w–ڂ̃^ƒCƒ‹ID ‚ª‘S‚Ä“¯‚¶ (“ñ‘w–ڂŃ^ƒCƒ‹”»•Ê)
  35. #  ŽR‚Í “ñ‘w–ڂ̃ŒƒCƒ„[ ‚Ƀ^ƒCƒ‹”ԍ†‚ªÚ‚Á‚Ä‚¢‚é (ˆê‘w–ڂ̏°‚ª“¯‚¶¶’n)
  36. #  ì¬‚·‚é‰æ‘œ‚ð•ÏX‚·‚é‚Æ‚«‚́ACache ‚Ì create_map(map_id) ‚ð•ÏX
  37. #------------------------------------------------------------------------------
  38.  
  39. #==============================================================================
  40. # ¡ Cache
  41. #==============================================================================
  42.  
  43. module Cache
  44.   #--------------------------------------------------------------------------
  45.   # œ ’萔
  46.   #--------------------------------------------------------------------------
  47.   MtnIndex = [18, 26, 34, 42]             # ŽR‚̃Cƒ“ƒfƒbƒNƒX
  48.   #--------------------------------------------------------------------------
  49.   # œ ƒQ[ƒ€ŠJŽnŽž‚̐ݒè
  50.   #--------------------------------------------------------------------------
  51.   def self.start_up_by_fimark
  52.     for i in FiMark::LoMap do self.load_map(i) end # •\Ž¦‚·‚éƒ}ƒbƒv‚ðì¬
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # œ ƒ}ƒbƒv ƒrƒbƒgƒ}ƒbƒv ‚̍쐬
  56.   #     map_id : ƒ}ƒbƒv ID
  57.   #--------------------------------------------------------------------------
  58.   def self.create_map(map_id)
  59.     map    = load_data(sprintf("Data/Map%03d.rvdata", map_id))
  60.     bitmap = Bitmap.new(map.width, map.height)
  61.     for y in 0...map.height
  62.       for x in 0...map.width
  63.         tile1 = map.data[x, y, 0]
  64.         tile2 = map.data[x, y, 1]
  65.         # ŠC (ƒ^ƒCƒ‹A : ƒCƒ“ƒfƒbƒNƒX1 : ‰º‘wƒŒƒCƒ„[)
  66.         if Zii.tile_info(tile1) == [0, 0]
  67.           if Zii.tile_number(tile2) == 1
  68.             bitmap.set_pixel(x, y, FiMark::Sea)
  69.           else # ó‚¢ŠC
  70.             bitmap.set_pixel(x, y, FiMark::OffS)
  71.           end
  72.         # ŽR (ƒ^ƒCƒ‹A : ’萔ƒCƒ“ƒfƒbƒNƒX : ’†‘wƒŒƒCƒ„[)
  73.         elsif (MtnIndex.include?(Zii.tile_number(tile2)) and
  74.             Zii.tile_type(tile2) == 0)
  75.           bitmap.set_pixel(x, y, FiMark::Mtn)
  76.         # —¤’n (‚»‚Ì‘¼)
  77.         else
  78.           bitmap.set_pixel(x, y, FiMark::Land)
  79.         end
  80.       end
  81.     end
  82.     return bitmap
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # œ ƒ}ƒbƒv ƒrƒbƒgƒ}ƒbƒv ‚̓ǂݍž‚Ý
  86.   #     map_id : ƒ}ƒbƒv ID
  87.   #--------------------------------------------------------------------------
  88.   def self.load_map(map_id)
  89.     @cache = {} if @cache == nil
  90.     path = "ZiiFieldMap/" + map_id.to_s
  91.     if not @cache.include?(path) or @cache[path].disposed?
  92.       if map_id <= 0
  93.         @cache[path] = Bitmap.new(32, 32)
  94.       else
  95.         @cache[path] = self.create_map(map_id)
  96.       end
  97.     end
  98.     return @cache[path]
  99.   end
  100. end
  101.  
  102. #****************************************************************************
  103. # š ƒ^ƒCƒ‹ƒf[ƒ^‚̉ðÍ (»ì—p)
  104. #****************************************************************************
  105.  
  106. module Zii # Ver2.00
  107.   #--------------------------------------------------------------------------
  108.   # œ ƒ^ƒCƒ‹ˆÃ† ‚̎擾 (”z—ñ)
  109.   #     type  : °‚ÌŽí—Þ (0`4 : A`E)
  110.   #     index : ƒ^ƒCƒ‹”ԍ†
  111.   #--------------------------------------------------------------------------
  112.   def self.tile_data(type, index)
  113.     return [] if type == nil
  114.     return [] if index == nil
  115.     if type == 0 # Aƒ^ƒCƒ‹
  116.       if index < 128
  117.         result = []
  118.         for i in 0...48
  119.           result.push(i + index * 48 + 2048)
  120.         end
  121.         return result
  122.       else # ƒp[ƒc5 ‚̏ꍇ
  123.         return [index + 1408]
  124.       end
  125.     else # Bƒ^ƒCƒ‹ˆÈ~
  126.       return [(type - 1) * 256 + index]
  127.     end
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # œ ƒ^ƒCƒ‹ƒ^ƒCƒv ‚̎擾
  131.   #     data : ƒ^ƒCƒ‹ˆÃ†
  132.   #--------------------------------------------------------------------------
  133.   def self.tile_type(data)
  134.     return nil if data == nil
  135.     if data >= 1280 # Aƒ^ƒCƒ‹ (0)
  136.       return 0
  137.     else # Bƒ^ƒCƒ‹ ˆÈ~ (1..)
  138.       return (data / 256 + 1)
  139.     end
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # œ ƒ^ƒCƒ‹”ԍ† ‚̎擾
  143.   #     data : ƒ^ƒCƒ‹ˆÃ†
  144.   #--------------------------------------------------------------------------
  145.   def self.tile_number(data)
  146.     return nil if data == nil
  147.     if data >= 1280 # Aƒ^ƒCƒ‹
  148.       if data >= 2048
  149.         return (data - 2048) / 48
  150.       else # ƒp[ƒc5 ‚̏ꍇ
  151.         return (data - 1408)
  152.       end
  153.     else # Bƒ^ƒCƒ‹ ˆÈ~
  154.       return (data % 256)
  155.     end
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # œ ƒ^ƒCƒ‹ƒ^ƒCƒv ‚̎擾
  159.   #     data : ƒ^ƒCƒ‹ˆÃ†
  160.   #--------------------------------------------------------------------------
  161.   def self.tile_info(data)
  162.     return [self.tile_type(data), self.tile_number(data)]
  163.   end
  164. end
  165.  
  166. #****************************************************************************
  167. # š ƒV[ƒ“‚Ì—˜—p
  168. #****************************************************************************
  169. #==============================================================================
  170. # ¡ Spriteset_Map
  171. #==============================================================================
  172.  
  173. class Spriteset_Map
  174.   #--------------------------------------------------------------------------
  175.   # œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
  176.   #--------------------------------------------------------------------------
  177.   alias :zii_fimark_initialize :initialize
  178.   def initialize
  179.     create_fieldmark
  180.     zii_fimark_initialize
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # œ ‰ð•ú
  184.   #--------------------------------------------------------------------------
  185.   alias :zii_fimark_dispose :dispose
  186.   def dispose
  187.     dispose_fieldmark
  188.     zii_fimark_dispose
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # œ ƒtƒŒ[ƒ€XV
  192.   #--------------------------------------------------------------------------
  193.   alias :zii_fimark_update :update
  194.   def update
  195.     zii_fimark_update
  196.     update_fieldmark
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # œ ƒ}ƒbƒv‰æ‘œ‚̍쐬
  200.   #--------------------------------------------------------------------------
  201.   def create_fieldmark
  202.     return unless FiMark::OnMap.include?($game_map.map_id)
  203.     # ƒrƒ…[ƒ|[ƒgì¬
  204.     @mark_view = Viewport.new(0, 0, 544, 416)
  205.     @mark_view.z = 80
  206.     # ƒ}ƒbƒv‰æ‘œì¬
  207.     @field_mark = Sprite.new(@mark_view)
  208.     @field_mark.bitmap = Cache.load_map($game_map.map_id)
  209.     # ƒ|ƒCƒ“ƒ^[ì¬
  210.     @mark_pointer = Sprite.new(@mark_view)
  211.     @mark_pointer.bitmap = Bitmap.new(3, 3)
  212.     @mark_pointer.bitmap.fill_rect(0, 0, 3, 3, FiMark::Now)
  213.     @mark_pointer.ox = @mark_pointer.width  / 2
  214.     @mark_pointer.oy = @mark_pointer.height / 2
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # œ ƒ}ƒbƒv‰æ‘œ‚̉ð•ú
  218.   #--------------------------------------------------------------------------
  219.   def dispose_fieldmark
  220.     if @mark_pointer != nil
  221.       @mark_pointer.bitmap.dispose
  222.       @mark_pointer.dispose
  223.     end
  224.     if @field_mark != nil
  225.       @field_mark.dispose
  226.     end
  227.     if @mark_view != nil
  228.       @mark_view.dispose
  229.     end
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # œ ƒ}ƒbƒv‰æ‘œ‚̍XV
  233.   #--------------------------------------------------------------------------
  234.   def update_fieldmark
  235.     return if @field_mark == nil
  236.     return if @mark_pointer == nil
  237.     move_fieldmark
  238.     @field_mark.update
  239.     @mark_pointer.update
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # œ ’†S‚Ì X À•WŽæ“¾
  243.   #--------------------------------------------------------------------------
  244.   def fieldmark_cx
  245.     return FiMark::CX
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   # œ ’†S‚Ì Y À•WŽæ“¾
  249.   #--------------------------------------------------------------------------
  250.   def fieldmark_cy
  251.     return FiMark::CY
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # œ ƒ}ƒbƒv‰æ‘œŠg‘å—¦‚̎擾
  255.   #--------------------------------------------------------------------------
  256.   def zoom_fieldmark
  257.     if FiMark::MZoom.include?($game_map.map_id)
  258.       zoom = FiMark::MZoom[$game_map.map_id]
  259.     else
  260.       zoom = FiMark::NZoom
  261.     end
  262.     return zoom
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # œ ƒ}ƒbƒv‰æ‘œ‚̈ړ®
  266.   #--------------------------------------------------------------------------
  267.   def move_fieldmark
  268.     if(@zoom_fieldmark != zoom_fieldmark or
  269.        @fieldmark_cx   != fieldmark_cx or @fieldmark_cy   != fieldmark_cy)
  270.       @zoom_fieldmark = zoom_fieldmark
  271.       @fieldmark_cx   = fieldmark_cx
  272.       @fieldmark_cy   = fieldmark_cy
  273.       cx , cy = @fieldmark_cx , @fieldmark_cy        # ’†S‚̍À•W‚̎擾
  274.       width   = @field_mark.width  * @zoom_fieldmark # ‰¡•‚̎擾
  275.       height  = @field_mark.height * @zoom_fieldmark # ‚‚³‚̎擾
  276.       @field_mark.x = cx - width  / 2
  277.       @field_mark.y = cy - height / 2
  278.       # X À•W‚̈ʒu‚¸‚êC³
  279.       if @field_mark.x < FiMark::Spa
  280.         @field_mark.x = FiMark::Spa
  281.       elsif @field_mark.x + width > 544 - FiMark::Spa
  282.         @field_mark.x = 544 - FiMark::Spa - width
  283.       end
  284.       # Y À•W‚̈ʒu‚¸‚êC³
  285.       if @field_mark.y < FiMark::Spa
  286.         @field_mark.y = FiMark::Spa
  287.       elsif @field_mark.y + height > 416 - FiMark::Spa
  288.         @field_mark.y = 416 - FiMark::Spa - height
  289.       end
  290.       @field_mark.zoom_x = @zoom_fieldmark
  291.       @field_mark.zoom_y = @zoom_fieldmark
  292.     end
  293.     @mark_pointer.x = @field_mark.x + $game_player.x * @zoom_fieldmark
  294.     @mark_pointer.y = @field_mark.y + $game_player.y * @zoom_fieldmark
  295.     if FiMark::OnSwi > 0
  296.       @field_mark.visible   = $game_switches[FiMark::OnSwi]
  297.       @mark_pointer.visible = $game_switches[FiMark::OnSwi]
  298.     end
  299.   end
  300. end
  301.  
  302. #****************************************************************************
  303. # š ‰Šúˆ—
  304. #****************************************************************************
  305.  
  306. # œ ‹N“®Žž‚Ƀ}ƒbƒv‰æ‘œ‚ðì¬
  307. Cache.start_up_by_fimark
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement