khanhdu

SheolShade Minimap

Sep 27th, 2016
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 16.92 KB | None | 0 0
  1. #==============================================================================#
  2. #                          **Azraven Minimap**                                 #
  3. #------------------------------------------------------------------------------#
  4. #  ** Autor: Azraven                                                           #
  5. #  ** Versão: 1.5b                                                             #
  6. #  ** Data: 24/12/2012                                                         #
  7. #------------------------------------------------------------------------------#  
  8. #  - Descrição:                                                                #
  9. #     Este script adiciona um mini mapa circular no jogo.                      #
  10. #  - Utilização:                                                               #
  11. #     Cole este script na seção "Scripts Adicionais".                          #
  12. #==============================================================================#
  13. #  - Histórico                                                                 #
  14. #    24/12/2012 - Início e término da versão 1.0b                              #
  15. #    04/03/2013 - Versão 1.5b Correção de bugs e adição de novas funções.      #
  16. #               * Correção de um bug em que não verificava corretamente o      #
  17. #                 de determinados tiles.                                       #
  18. #               * Correção de um bug em que tiles de grama (bush) eram         #
  19. #                 apresentados como bloqueio.                                  #
  20. #               * Correção de um bug em que tiles de bloqueio posicionados     #
  21. #                 sobre tiles de grama era mrepresentados como passáveis.      #
  22. #               * Código melhorado.                                            #
  23. #               + Adicionado a função de mostrar os veiculos.                  #
  24. #               + Adicionado a função de mostrar os seguidores.                #
  25. #               + Adicionado a função para utilizar IDs de Região para         #
  26. #                 ocultar áreas passáveis.                                     #
  27. #    14/06/2014 * Bug relacionado ao comando "Apagar Evento Temporário"        #
  28. #                 corrigido.                                                   #
  29. #               * Limpeza no código.                                           #
  30. #------------------------------------------------------------------------------#
  31. module Azraven
  32.   module MiniMap
  33.     #--------------------------------------------------------------------------#
  34.     # CONFIGURAÇÂO                                                             #
  35.     #--------------------------------------------------------------------------#
  36.     #Tamanho do tile do mini mapa, recomendável não usar valores menores que 3.
  37.     TileSize = 8
  38.     #--------------------------------------------------------------------------#
  39.     #Ajuste do centralizamento do mini mapa, depende do tamanho do tile.
  40.     MapOffset = -4
  41.     #--------------------------------------------------------------------------#
  42.     #Define a cor do jogador no mapa.
  43.     PlayerColor = Color.new(255,0,0)
  44.     #--------------------------------------------------------------------------#
  45.     #Mostra os seguidores.
  46.     ShowFollowers = true
  47.     #--------------------------------------------------------------------------#
  48.     #Define a cor dos seguidores no mapa.
  49.     FollowerColor = Color.new(0,128,255)
  50.     #--------------------------------------------------------------------------#
  51.     #Define se irá mostrar os veiculos no map.
  52.     ShowVehicles = true
  53.     #--------------------------------------------------------------------------#
  54.     #Define a cor do barco.
  55.     BoatColor = Color.new(255,0,255)
  56.     #--------------------------------------------------------------------------#
  57.     #Define a cor do navio.
  58.     ShipColor = Color.new(255,0,255)
  59.     #--------------------------------------------------------------------------#
  60.     #Define a cor do aeronave.
  61.     AirshipColor = Color.new(255,0,255)
  62.     #--------------------------------------------------------------------------#
  63.     #Define a cor dos objetos mostrados no mapa.
  64.     #Objetos são NPCs, portas, teleportes, baús e o que mais o usuário puder
  65.     #imaginar.
  66.     #Para adicionar um novo objeto use a seguinte sintaxe dentro das {}:
  67.     #     "tag" => Color.new(R,G,B,A)
  68.     #Onde tag é o comentário que será adiocinado a tal evento.
  69.     #Separe cada objeto por "," sem as aspas.
  70.     ObjectColor = {"npc" => Color.new(0,255,0),
  71.                   "teleport" => Color.new(150,50,50),
  72.                   "chest" => Color.new(100,100,100)}
  73.     #--------------------------------------------------------------------------#
  74.     #Define a cor de contorno dos objetos e do jogador.
  75.     BorderColor = Color.new(0,0,0)
  76.     #--------------------------------------------------------------------------#
  77.     #Opacidade dos objetos mostrados no mapa.
  78.     ObjectLayerOpacity = 255
  79.     #--------------------------------------------------------------------------#
  80.     #Posição do mapa na tela.
  81.     #1 = Canto superior esquerdo.
  82.     #2 = Canto superior direito.
  83.     #3 = Canto inferior esquerdo.
  84.     #4 = Canto superior direito.
  85.     MiniMapCorner = 2
  86.     #--------------------------------------------------------------------------#
  87.     #Define se determinada região mostrará como bloqueada no mini mapa.
  88.     #Util pra não revelar "passagens secretas".
  89.     UseHideRegion = true
  90.     #--------------------------------------------------------------------------#
  91.     #Id da região caso UseHideRegion for true.
  92.     HideRegionId = 1
  93.     #--------------------------------------------------------------------------#
  94.     #Cor do da área impassável do mapa.
  95.     MapColor = Color.new(200,150,150)
  96.     #--------------------------------------------------------------------------#
  97.     #Cor do contorno da área impassável do mapa.
  98.     MapBorderColor = Color.new(50,50,50)
  99.     #--------------------------------------------------------------------------#
  100.     #Nome do arquivo de imagem da borda do mini mapa na pasta Graphics/System.
  101.     BorderName = "Border"
  102.     #--------------------------------------------------------------------------#
  103.     #Define se irá utilizar uam textura ao fundo.
  104.     UseBGTexture = true
  105.     #--------------------------------------------------------------------------#
  106.     #Nome do arquivo de imagem da textura usada ao
  107.     #fundo do mini mapa na pasta Graphics/System.
  108.     #Obs.: A imagem deve estar com as cores invertidas.
  109.     BackTextureName = "OldPaper"
  110.     #--------------------------------------------------------------------------#
  111.     #Cor de preenchimento do fundo caso nã oseja utilizado uma textura.
  112.     BGColor = Color.new( 100, 100, 100)
  113.     #--------------------------------------------------------------------------#
  114.     #Opção de preencher com uma cor a área externa do mapa.
  115.     ClearOutsideArea = true
  116.     #--------------------------------------------------------------------------#
  117.     #Cor utilizada para preencher a área externa do mapa.
  118.     ClearOutsideColor = Color.new(0,0,0)
  119.     #--------------------------------------------------------------------------#
  120.     #Opção de dermarcar os limites do mapa.
  121.     OutlineMapArea = true
  122.     #--------------------------------------------------------------------------#
  123.     #Cor da demarcação dos limites do mapa.
  124.     OutlineMapColor = Color.new(0,0,0)
  125.     #--------------------------------------------------------------------------#
  126.     #Id do switch que habilita/desabilita o mini mapa.
  127.     EnableSwitchId = 1
  128.     #--------------------------------------------------------------------------#
  129.     # FIM DA CONFIGURAÇÂO.                                                     #
  130.     #--------------------------------------------------------------------------#
  131.     MiniMapCoords = {1 => [0,0,112,112],
  132.                      2 => [Graphics.width - 112,0,112,112],
  133.                      3 => [0,Graphics.height - 112,112,112],
  134.                      4 => [Graphics.width - 112,Graphics.height - 112,112,112]}
  135.                      
  136.   end
  137. end
  138. #==============================================================================#
  139. # ** Classe Color
  140. #==============================================================================#
  141. class Color
  142.   #-----------------------------------------------------------------------------
  143.   # * Inverte o valor das cores
  144.   #-----------------------------------------------------------------------------
  145.   def invert
  146.     r = 255 - self.red
  147.     g = 255 - self.green
  148.     b = 255 - self.blue
  149.     a = self.alpha
  150.     self.set(r, g, b, a)
  151.   end
  152. end
  153.  
  154.  
  155. #==============================================================================#
  156. # ** Classe Mini Map
  157. #==============================================================================#
  158. class MiniMap
  159.  
  160.   include Azraven::MiniMap
  161.  
  162.   def initialize(viewport)
  163.     @viewport = viewport
  164.     @playercolor = PlayerColor.dup.invert
  165.     @followercolor = FollowerColor.dup.invert
  166.     @boatcolor = BoatColor.dup.invert
  167.     @shipcolor = ShipColor.dup.invert
  168.     @airshipcolor = AirshipColor.dup.invert
  169.     @objectcolor = ObjectColor.dup
  170.     @objectcolor.each_pair do |key, value|
  171.       @objectcolor[key] = value.dup.invert
  172.     end
  173.     @bordercolor = BorderColor.dup.invert
  174.     @mapcolor = MapColor.dup.invert
  175.     @mapbordercolor = MapBorderColor.dup.invert
  176.     @clearoutsidecolor = ClearOutsideColor.dup.invert
  177.     @outlinemapcolor = OutlineMapColor.dup.invert
  178.     refresh
  179.   end
  180.  
  181.   def refresh
  182.     @map_id = $game_map.map_id
  183.     @backmask = Sprite.new(@viewport)
  184.     @backmask.bitmap = Cache::system("Back_96")
  185.     @backmask.x = @backmask.y = 8
  186.     @backtile = Sprite.new(@viewport)
  187.     @backtile.blend_type = 2
  188.     @backtile.z = 1
  189.     @backtile.x = @backtile.y = -100
  190.     @map = Sprite.new(@viewport)
  191.     @map.z = 2
  192.     @map.blend_type = 2
  193.     @object_layer = Sprite.new(@viewport)
  194.     @object_layer.z = 3
  195.     @object_layer.blend_type = 2
  196.     @object_layer.bitmap = Bitmap.new($game_map.width*TileSize + 112,
  197.                                      $game_map.height*TileSize + 112)
  198.     @object_layer.opacity = ObjectLayerOpacity
  199.     @border = Sprite.new(@viewport)
  200.     @border.bitmap = Cache::system(BorderName)
  201.     @border.z = 4
  202.     @border.opacity = 255
  203.     @mask = Cache::system("Mask")
  204.     draw_back
  205.     draw_map
  206.   end
  207.  
  208.   def visible?
  209.     $game_switches[EnableSwitchId]
  210.   end
  211.  
  212.   def draw_map
  213.    
  214.     front = make_map_bitmap(@mapcolor)
  215.     border = make_map_bitmap(@mapbordercolor)
  216.    
  217.     result = Bitmap.new($game_map.width*TileSize + 112,
  218.                         $game_map.height*TileSize+ 112)
  219.                        
  220.     result.blt(-1, 0, border, border.rect)
  221.     result.blt(1, 0, border, border.rect)
  222.     result.blt(0, -1, border, border.rect)
  223.     result.blt(0, 1, border, border.rect)
  224.     result.blt(0, 0, front, front.rect)
  225.    
  226.     @mapbitmap = result
  227.   end
  228.  
  229.   def draw_back
  230.     bitmap = Bitmap.new($game_map.width*TileSize+112,
  231.                        $game_map.height*TileSize+112)
  232.     if UseBGTexture
  233.       bit = Cache::system(BackTextureName)
  234.       bitmap.stretch_blt(bitmap.rect, bit, bit.rect)
  235.     else
  236.       bitmap.fill_rect(bitmap.rect, BGColor)
  237.     end
  238.     if ClearOutsideArea
  239.       bitmap.fill_rect(0,0,bitmap.width, 56, @clearoutsidecolor)
  240.       bitmap.fill_rect(0,0,56, bitmap.height, @clearoutsidecolor)
  241.       bitmap.fill_rect(0,bitmap.height-56,bitmap.width, 56, @clearoutsidecolor)
  242.       bitmap.fill_rect(bitmap.width-56,0,56, bitmap.height, @clearoutsidecolor)
  243.     elsif OutlineMapArea
  244.       bitmap.fill_rect(56,55,bitmap.width-112,1,@outlinemapcolor)
  245.       bitmap.fill_rect(55,56,1,bitmap.height-112,@outlinemapcolor)
  246.       bitmap.fill_rect(bitmap.width-56,55,1,bitmap.height-112,@outlinemapcolor)
  247.       bitmap.fill_rect(56,bitmap.height-56,bitmap.width-112,1,@outlinemapcolor)
  248.     end
  249.     @backtilebitmap = bitmap
  250.   end
  251.  
  252.   def draw_object_layer
  253.     for event in $game_map.events.values
  254.       unless event.list.nil?
  255.         for item in event.list
  256.           if item.code == 108 or item.code == 408
  257.             if @objectcolor.has_key?(item.parameters[0])
  258.               draw_object(event.real_x*TileSize+56,
  259.               event.real_y*TileSize+56,
  260.               @objectcolor[item.parameters[0]])
  261.             end
  262.           end
  263.         end
  264.       end
  265.     end
  266.     if ShowFollowers
  267.       unless $game_player.vehicle
  268.         $game_player.followers.each do |follower|
  269.           draw_object(follower.real_x*TileSize+56,
  270.                       follower.real_y*TileSize+56,
  271.                       @followercolor) if follower.visible?
  272.         end
  273.       end
  274.     end
  275.     if ShowVehicles
  276.       unless $game_map.airship.transparent
  277.         draw_object($game_map.airship.real_x*TileSize+56,
  278.                 $game_map.airship.real_y*TileSize+56,
  279.                 @airshipcolor)
  280.       end
  281.       unless $game_map.ship.transparent
  282.         draw_object($game_map.ship.real_x*TileSize+56,
  283.                 $game_map.ship.real_y*TileSize+56,
  284.                 @shipcolor)
  285.       end
  286.       unless $game_map.boat.transparent
  287.         draw_object($game_map.boat.real_x*TileSize+56,
  288.                 $game_map.boat.real_y*TileSize+56,
  289.                 @boatcolor)
  290.       end        
  291.     end
  292.     draw_object($game_player.real_x*TileSize+56,
  293.                 $game_player.real_y*TileSize+56,
  294.                 @playercolor)
  295.   end
  296.  
  297.   def draw_object(x, y, color)
  298.     @object_layer.bitmap.fill_rect(x, y, TileSize, TileSize, @bordercolor)
  299.     @object_layer.bitmap.fill_rect(x+1, y+1, TileSize-2, TileSize-2, color)
  300.     @object_layer.bitmap.clear_rect(x,y,1,1)
  301.     @object_layer.bitmap.clear_rect(x,y+TileSize-1,1,1)
  302.     @object_layer.bitmap.clear_rect(x+TileSize-1,y,1,1)
  303.     @object_layer.bitmap.clear_rect(x+TileSize-1,y+TileSize-1,1,1)
  304.   end
  305.          
  306.   def make_map_bitmap(color)
  307.     bitmap = Bitmap.new($game_map.width*TileSize + 112,
  308.                        $game_map.height*TileSize + 112)
  309.     for x in 0..$game_map.width - 1
  310.       for y in 0..$game_map.height - 1
  311.         if $game_map.airship_land_ok?(x, y) || $game_map.bush?(x, y)
  312.           if UseHideRegion
  313.             bitmap.fill_rect(x*TileSize+56,
  314.                              y*TileSize+56,
  315.                              TileSize, TileSize,
  316.                              color) if $game_map.region_id(x, y) == HideRegionId
  317.           else
  318.              next                  
  319.           end
  320.           if $game_map.bush?(x, y)
  321.             unless $game_map.passable?(x, y, 4)
  322.                bitmap.fill_rect(x*TileSize+56, y*TileSize+56, TileSize, TileSize, color)
  323.             end
  324.           end
  325.           next
  326.         end
  327.         bitmap.fill_rect(x*TileSize+56, y*TileSize+56, TileSize, TileSize, color)
  328.       end
  329.     end
  330.     bitmap
  331.   end
  332.  
  333.   def update_object_layer
  334.    @object_layer.bitmap.clear
  335.    draw_object_layer
  336.   end
  337.  
  338.   def dispose
  339.     @backmask.dispose
  340.     @backtile.dispose
  341.     @map.dispose
  342.     @object_layer.dispose
  343.     @border.dispose
  344.   end
  345.  
  346.   def update
  347.     if @map_id != $game_map.map_id
  348.       dispose
  349.       @map_id = $game_map.map_id
  350.       refresh
  351.     end
  352.     @backmask.visible = visible?
  353.     @backtile.visible = visible?
  354.     @map.visible = visible?
  355.     @object_layer.visible = visible?
  356.     @border.visible = visible?
  357.     if visible?
  358.       @map.bitmap = @mapbitmap.dup
  359.       @backtile.bitmap = @backtilebitmap.dup
  360.       sx = $game_player.real_x * (TileSize * -1) + MapOffset
  361.       sy = $game_player.real_y * (TileSize * -1) + MapOffset
  362.       update_object_layer
  363.       @map.x = @backtile.x = @object_layer.x = sx
  364.       @map.y = @backtile.y = @object_layer.y = sy
  365.       @backtile.bitmap.blt(sx*-1, sy*-1,@mask,@mask.rect)
  366.       @map.bitmap.blt(sx*-1, sy*-1,@mask,@mask.rect)
  367.       @object_layer.bitmap.blt(sx*-1, sy*-1,@mask,@mask.rect)
  368.     end
  369.   end
  370. end
  371. #==============================================================================#
  372. # ** Classe Spriteset_Map
  373. #==============================================================================#
  374. class Spriteset_Map
  375.  
  376.   alias azraven_mini_map_init initialize
  377.   alias azraven_mini_map_updt update
  378.   alias azraven_mini_map_disp dispose
  379.  
  380.   include Azraven::MiniMap
  381.  
  382.   def initialize
  383.     create_minimap
  384.     azraven_mini_map_init
  385.   end
  386.  
  387.   def create_minimap
  388.     viewport = Viewport.new(Graphics.width - 112,0,112,112)
  389.     viewport.rect.set(MiniMapCoords[MiniMapCorner][0],
  390.                       MiniMapCoords[MiniMapCorner][1],
  391.                       MiniMapCoords[MiniMapCorner][2],
  392.                       MiniMapCoords[MiniMapCorner][3])
  393.     viewport.z = 500
  394.     @minimapa = MiniMap.new(viewport)
  395.   end
  396.  
  397.   def dispose
  398.     azraven_mini_map_disp
  399.     @minimapa.dispose
  400.   end
  401.  
  402.   def update
  403.     azraven_mini_map_updt
  404.     @minimapa.update
  405.   end
  406. end
  407. #==============================================================================#
  408. # ** Fim do Script
  409. #==============================================================================#
Advertisement
Add Comment
Please, Sign In to add comment