Segue um script descomplicado e rápido de instalar que cria um minimapa na tela de um jogo feito no RPG Maker XP (ou projeto em andamento) do mapa em que o herói se encontra.
Por padrão, ele mostra no minimapa apenas a posição do herói e o terreno (os layers). Mas você pode determinar quais eventos também são exibidos e também pode mudar a janelinha do minimapa, se editar a figura.
Veja uma screen deste projeto teste que eu criei rápidamente para demonstrar o minimapa:
Como dissemos, você pode determinar quais eventos, além do herói, serão exibidos no minimapa. Para isto, basta editar o evento e inserir um comentário, e inserir a figura correspondente na pasta Graphics/Pictures
do seu projeto:
Comentario Tipo De Evento Nome Da Figura A Ser Inserida event eventos event.png enemy inimigos enemy.png teleport teleportadores teleport.png
Você também pode mudar o background do minimapa editando a figura: mapback.png
.
Para instalar, é mais simples ainda, basta você copiar as imagens .PNG (hero.png
, event.png
, enemy.png
, teleport.png
e mapback.png
) do pacote que estão disponíveis para download aqui para a pasta Graphics/Pictures
e inserir o código do script abaixo acima do Main:
################################################################# ##################### Autor Squall ############################## ################################################################# # Para que a posição dos seus NPCs, inimigos ou teleportes apareça # no mapa você deve adicionar comentários neste eventos, # Entre no comando de eventos e selecione o comando 'comentário'. # Digite event para eventos # Digite enemy para inimigos # Digite teleport para teleportes ################################################################# class Game_Event < Game_Character #-------------------------------------------------------------------------- # ? name #-------------------------------------------------------------------------- def name return @event.name end end #============================================================================== # ¦ Map_Base #------------------------------------------------------------------------------ # Base class for mini maps # # made by squall // squall@loeher.zzn.com #============================================================================== class Map_Base MP_VERSION = 5 #-------------------------------------------------------------------------- # ? Initialize #-------------------------------------------------------------------------- def initialize(corner, use_windowskin) @tileset_name = $game_map.tileset_name @bg = Window_Base.new(0, 0, 144, 112) @bg.z = 9000 if no_display? @bg.windowskin = nil else unless use_windowskin @bg.dispose @bg = Window_Base.new(0, 0, 160, 128) @bg.contents = Bitmap.new(128, 96) @bg.windowskin = nil bmp = RPG::Cache.picture("mapback") @bg.contents.blt(0, 0, bmp, Rect.new(0, 0, 128, 96)) @bg.z = 9015 end end @map = Sprite.new @map.bitmap = Bitmap.new(map_width, map_height) @map.z = 9005 @event = Sprite.new @event.bitmap = Bitmap.new(map_width, map_height) @event.z = 9010 self.back_opacity = 180 self.opacity = 180 case corner when 1 self.x = 16 self.y = 16 when 2 self.x = 640 - width - 16 self.y = 16 when 3 self.x = 16 self.y = 480 - height - 16 when 4 self.x = 640 - width - 16 self.y = 480 - height - 16 else self.x = 16 self.y = 16 end end #-------------------------------------------------------------------------- # ? display_map? #-------------------------------------------------------------------------- def no_map_display? for event in $game_map.events.values if event.name.include?("[no map]") return true end end return false end #-------------------------------------------------------------------------- # ? display_map? #-------------------------------------------------------------------------- def no_event_display? for event in $game_map.events.values if event.name.include?("[no event]") return true end end return false end #-------------------------------------------------------------------------- # ? display_map? #-------------------------------------------------------------------------- def no_display? for event in $game_map.events.values if event.name.include?("[no map]") and event.name.include?("[no event]") return true end end return false end #-------------------------------------------------------------------------- # ? dispose #-------------------------------------------------------------------------- def dispose @bg.dispose @map.bitmap.dispose @map.dispose @event.bitmap.dispose @event.dispose end #-------------------------------------------------------------------------- # ? map #-------------------------------------------------------------------------- def map return @map end #-------------------------------------------------------------------------- # ? event #-------------------------------------------------------------------------- def event return @event end #-------------------------------------------------------------------------- # ? width #-------------------------------------------------------------------------- def width return 128 end #-------------------------------------------------------------------------- # ? opacity= #-------------------------------------------------------------------------- def height return 96 end #-------------------------------------------------------------------------- # ? opacity= #-------------------------------------------------------------------------- def visible=(bool) @bg.visible = bool @event.visible = bool @map.visible = bool end #-------------------------------------------------------------------------- # ? opacity #-------------------------------------------------------------------------- def visible return @bg.visible end #-------------------------------------------------------------------------- # ? opacity= #-------------------------------------------------------------------------- def opacity=(opacity) @event.opacity = opacity @map.opacity = opacity end #-------------------------------------------------------------------------- # ? opacity #-------------------------------------------------------------------------- def opacity return @event.opacity end #-------------------------------------------------------------------------- # ? back_opacity= #-------------------------------------------------------------------------- def back_opacity=(opacity) @bg.opacity = opacity @bg.contents_opacity = opacity if @bg.contents != nil end #-------------------------------------------------------------------------- # ? back_opacity #-------------------------------------------------------------------------- def back_opacity return @bg.opacity end #-------------------------------------------------------------------------- # ? x= #-------------------------------------------------------------------------- def x=(x) @bg.x = x - (@bg.width - 128) / 2 @event.x = x + 8 @map.x = x + 8 end #-------------------------------------------------------------------------- # ? x #-------------------------------------------------------------------------- def x return @bg.x end #-------------------------------------------------------------------------- # ? y= #-------------------------------------------------------------------------- def y=(y) @bg.y = y - (@bg.height - 96) / 2 @event.y = y + 8 @map.y = y + 8 end #-------------------------------------------------------------------------- # ? y #-------------------------------------------------------------------------- def y return @bg.y end #-------------------------------------------------------------------------- # ? map_width #-------------------------------------------------------------------------- def map_width return $game_map.width * 112/20 end #-------------------------------------------------------------------------- # ? map_height #-------------------------------------------------------------------------- def map_height return $game_map.height * 80/15 end #-------------------------------------------------------------------------- # ? display_x #-------------------------------------------------------------------------- def display_x return $game_map.display_x / 128 * 112/20 end #-------------------------------------------------------------------------- # ? map_height #-------------------------------------------------------------------------- def display_y return $game_map.display_y / 128 * 80/15 end end #============================================================================== # ¦ Map_Mini #------------------------------------------------------------------------------ # Base class for mini maps # # made by squall // squall@loeher.zzn.com #============================================================================== class Map_Mini < Map_Base #-------------------------------------------------------------------------- # ? initialize #-------------------------------------------------------------------------- def initialize(corner, use_windowskin) super(corner, use_windowskin) unless no_map_display? draw_map end end #-------------------------------------------------------------------------- # ? update #-------------------------------------------------------------------------- def update map.src_rect.set(display_x, display_y, width - 16, height - 16) if @tileset_name != $game_map.tileset_name @tileset_name = $game_map.tileset_name unless no_map_display? map.bitmap.clear draw_map end end end #-------------------------------------------------------------------------- # ? draw_map #-------------------------------------------------------------------------- def draw_map bitmap = Bitmap.new($game_map.width * 32, $game_map.height * 32) for i in 0...($game_map.width * $game_map.height) x = i % $game_map.width y = i / $game_map.width for level in 0...3 tile_id = $game_map.data[x, y, level] if tile_id >= 384 tileset_bitmap = RPG::Cache.tile($game_map.tileset_name, tile_id, 0) src_rect = Rect.new(0, 0, 32, 32) bitmap.blt(x * 32, y * 32, tileset_bitmap, src_rect) end if tile_id >= 48 and tile_id < 384 id = tile_id / 48 - 1 tileset_bitmap = RPG::Cache.autotile($game_map.autotile_names[id]) src_rect = Rect.new(32, 64, 32, 32) bitmap.blt(x * 32, y * 32, tileset_bitmap, src_rect) end end end d_rect = Rect.new(0, 0, map_width, map_height) s_rect = Rect.new(0, 0, bitmap.width, bitmap.height) map.bitmap.stretch_blt(d_rect, bitmap, s_rect) bitmap.clear bitmap.dispose end end #============================================================================== # ¦ Map_Event #------------------------------------------------------------------------------ # draw the events and hero position #============================================================================== class Map_Event < Map_Mini #-------------------------------------------------------------------------- # ? initialize #-------------------------------------------------------------------------- def initialize(corner = 4, windowskin = true) super(corner, windowskin) @dots = [] end #-------------------------------------------------------------------------- # ? refresh_dots #-------------------------------------------------------------------------- def refresh_event_dots for event in $game_map.events.values bitmap = nil x = event.x * map_width / $game_map.width y = event.y * map_height / $game_map.height next if event.list == nil for i in 0...event.list.size if event.list[i].parameters[0].is_a?(String) if event.list[i].parameters[0] == "event" bitmap = RPG::Cache.picture(event.list[i].parameters[0]) break elsif event.list[i].parameters[0] == "enemy" bitmap = RPG::Cache.picture(event.list[i].parameters[0]) break elsif event.list[i].parameters[0].include?("teleport") bitmap = RPG::Cache.picture("teleport") break elsif event.list[i].parameters[0] == "chest" bitmap = RPG::Cache.picture(event.list[i].parameters[0]) break elsif event.list[i].parameters[0] == "npc" bitmap = RPG::Cache.picture(event.list[i].parameters[0]) break elsif event.list[i].parameters[0] == "savepoint" bitmap = RPG::Cache.picture(event.list[i].parameters[0]) break else bitmap = nil end end end @dots.push([x, y, bitmap]) end end #-------------------------------------------------------------------------- # ? refresh_dots #-------------------------------------------------------------------------- def refresh_player_dot x = $game_player.x * map_width / $game_map.width y = $game_player.y * map_height / $game_map.height bitmap = RPG::Cache.picture("hero") @dots.push([x, y, bitmap]) end #-------------------------------------------------------------------------- # ? update #-------------------------------------------------------------------------- def update super @dots.clear event.bitmap.clear refresh_event_dots unless no_event_display? refresh_player_dot unless no_display? for dot in @dots unless dot[2] == nil event.bitmap.blt(dot[0], dot[1], dot[2], Rect.new(0, 0, 4, 4)) end end event.src_rect.set(display_x, display_y, width - 16, height - 16) end end #============================================================================== # ¦ Map_Full #------------------------------------------------------------------------------ # made by squall // squall@loeher.zzn.com #============================================================================== class Map_Full #-------------------------------------------------------------------------- # ? Initialize #-------------------------------------------------------------------------- def initialize @dots = [] @teleport_sprites = [] if $game_map.width > $game_map.height @map_width = 640 @map_height = $game_map.height * @map_width / $game_map.width if @map_height > 480 @map_height = 480 end else @map_height = 480 @map_width = $game_map.width * @map_height / $game_map.height if @map_width > 640 @map_width = 640 end end @map = Sprite.new @event = Sprite.new @map.bitmap = Bitmap.new(width, height) @event.bitmap = Bitmap.new(width, height) @map.x = @event.x = 320 - width / 2 @map.y = @event.y = 240 - height / 2 draw_map unless no_map_display? draw_event_dots unless no_event_display? draw_player_dot unless no_display? if no_display? @message = Window_Base.new(0, 208, 640, 64) message = "the map is not available" @message.contents = Bitmap.new(608, 32) @message.contents.font.name = $fontface @message.contents.font.size = 32 @message.contents.font.color.set(255, 255, 255, 100) @message.contents.draw_text(-1, -1, 608, 32, message, 1) @message.contents.draw_text(-1, 1, 608, 32, message, 1) @message.contents.draw_text(1, -1, 608, 32, message, 1) @message.contents.draw_text(1, 1, 608, 32, message, 1) @message.contents.font.color.set(255, 255, 255, 50) @message.contents.draw_text(-2, -2, 608, 32, message, 1) @message.contents.draw_text(-2, 2, 608, 32, message, 1) @message.contents.draw_text(2, -2, 608, 32, message, 1) @message.contents.draw_text(2, 2, 608, 32, message, 1) @message.contents.font.color.set(255, 255, 255) @message.contents.draw_text(0, 0, 608, 32, message, 1) @message.windowskin = nil end end #-------------------------------------------------------------------------- # ? display_map? #-------------------------------------------------------------------------- def no_map_display? for event in $game_map.events.values if event.name.include?("[full]") return false end if event.name.include?("[no map]") return true end end return false end #-------------------------------------------------------------------------- # ? display_map? #-------------------------------------------------------------------------- def no_event_display? for event in $game_map.events.values if event.name.include?("[full]") return false end if event.name.include?("[no event]") return true end end return false end #-------------------------------------------------------------------------- # ? display_map? #-------------------------------------------------------------------------- def no_display? for event in $game_map.events.values if event.name.include?("[full]") return false end if event.name.include?("[no map]") and event.name.include?("[no event]") return true end end return false end #-------------------------------------------------------------------------- # ? dispose #-------------------------------------------------------------------------- def dispose for sprite in @teleport_sprites sprite.dispose end @message.dispose if no_display? @map.bitmap.dispose @map.dispose @event.bitmap.dispose @event.dispose end #-------------------------------------------------------------------------- # ? width #-------------------------------------------------------------------------- def width return @map_width end #-------------------------------------------------------------------------- # ? opacity= #-------------------------------------------------------------------------- def height return @map_height end #-------------------------------------------------------------------------- # ? draw_map #-------------------------------------------------------------------------- def draw_map bitmap = Bitmap.new($game_map.width * 32, $game_map.height * 32) for i in 0...($game_map.width * $game_map.height) x = i % $game_map.width y = i / $game_map.width for level in 0...3 tile_id = $game_map.data[x, y, level] if tile_id >= 384 tileset_bitmap = RPG::Cache.tile($game_map.tileset_name, tile_id, 0) src_rect = Rect.new(0, 0, 32, 32) bitmap.blt(x * 32, y * 32, tileset_bitmap, src_rect) end if tile_id >= 48 and tile_id < 384 id = tile_id / 48 - 1 tileset_bitmap = RPG::Cache.autotile($game_map.autotile_names[id]) src_rect = Rect.new(32, 64, 32, 32) bitmap.blt(x * 32, y * 32, tileset_bitmap, src_rect) end end end d_rect = Rect.new(0, 0, width, height) s_rect = Rect.new(0, 0, bitmap.width, bitmap.height) @map.bitmap.stretch_blt(d_rect, bitmap, s_rect) bitmap.clear bitmap.dispose end #-------------------------------------------------------------------------- # ? refresh_dots #-------------------------------------------------------------------------- def draw_event_dots for event in $game_map.events.values bitmap = nil x = event.x * width / $game_map.width y = event.y * height / $game_map.height next if event.list == nil for i in 0...event.list.size if event.list[i].parameters[0].is_a?(String) if event.list[i].parameters[0] == "event" bitmap = RPG::Cache.picture(event.list[i].parameters[0]) break elsif event.list[i].parameters[0] == "enemy" bitmap = RPG::Cache.picture(event.list[i].parameters[0]) break elsif event.list[i].parameters[0].include?("teleport") bitmap = RPG::Cache.picture("teleport") name = event.list[i].parameters[0].dup name.slice!("teleport, ") @teleport_sprites.push(new_name_sprite(name, x, y)) break elsif event.list[i].parameters[0] == "chest" bitmap = RPG::Cache.picture(event.list[i].parameters[0]) break elsif event.list[i].parameters[0] == "npc" bitmap = RPG::Cache.picture(event.list[i].parameters[0]) break elsif event.list[i].parameters[0] == "savepoint" bitmap = RPG::Cache.picture(event.list[i].parameters[0]) break else bitmap = nil end end end @dots.push([x, y, bitmap]) end for dot in @dots unless dot[2] == nil @event.bitmap.blt(dot[0], dot[1], dot[2], Rect.new(0, 0, 4, 4)) end end end #-------------------------------------------------------------------------- # ? new_name_sprite #-------------------------------------------------------------------------- def new_name_sprite(name, x, y) sprite = Sprite.new sprite.y = y + 240 - height / 2 x + 128 > 640 ? sprite.x = 512 : sprite.x = x + 320 - width / 2 bitmap = Bitmap.new(128, 32) bitmap.font.name, bitmap.font.size = $fontface, 20 bitmap.font.color.set(255, 255, 255) bitmap.draw_text(0, 0, 128, 32, name) sprite.bitmap = bitmap return sprite end #-------------------------------------------------------------------------- # ? refresh_dots #-------------------------------------------------------------------------- def draw_player_dot x = $game_player.x * width / $game_map.width y = $game_player.y * height / $game_map.height bitmap = RPG::Cache.picture("hero") @event.bitmap.blt(x, y, bitmap, Rect.new(0, 0, 4, 4)) end end #============================================================================== # ¦ Scene_MiniMap #------------------------------------------------------------------------------ # draw the map full screen #============================================================================== class Scene_MiniMap #-------------------------------------------------------------------------- # ? main #-------------------------------------------------------------------------- def main @map = Map_Full.new Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @map.dispose end #-------------------------------------------------------------------------- # ? Update the contents of all five windows on the main menu #-------------------------------------------------------------------------- def update if Input.trigger?(Input::B) | Input.trigger?(Input::ALT) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end end end #============================================================================== # ¦ Scene_Map #------------------------------------------------------------------------------ # draw the mini map # @corner is the corner you want the mini map to be displayed in. # 1 is upper left, 2 is upper right, 3 is bottom left and 4 is bottom right # # @use_windowskin is whether true or false. true if you want to use the # the current windowskin for the minimap background. # or false if you want to use the picture named mapback in your picture folder. #============================================================================== class Scene_Map alias main_minimap main alias update_minimap update alias transfer_minimap transfer_player #-------------------------------------------------------------------------- # ? initialize #-------------------------------------------------------------------------- def initialize @corner = 4 # 1 or 2 or 3 or 4 @use_windowskin = false # true or false end #-------------------------------------------------------------------------- # ? main #-------------------------------------------------------------------------- def main @event_map = Map_Event.new(@corner, @use_windowskin) main_minimap @event_map.dispose end #-------------------------------------------------------------------------- # ? update #-------------------------------------------------------------------------- def update @event_map.update if $game_system.map_interpreter.running? @event_map.visible = false else @event_map.visible = true end if Input.trigger?(Input::ALT) $game_system.se_play($data_system.decision_se) $scene = Scene_MiniMap.new return end update_minimap end #-------------------------------------------------------------------------- # ? transfer_player #-------------------------------------------------------------------------- def transfer_player transfer_minimap @event_map.dispose @event_map = Map_Event.new(@corner, @use_windowskin) end end
Observação: se você gostou deste post ou ele lhe foi útil de alguma forma, por favor considere apoiar financeiramente a Gaming Room. Fico feliz só de ajudar, mas a contribuição do visitante é muito importante para que este site continua existindo e para que eu possa continuar provendo este tipo de conteúdo e melhorar cada vez mais. Acesse aqui e saiba como. Obrigado!