|
  |
Minimap by Selwyn, Easy Yet Complicated! |
|
|
|
|
Jun 10 2009, 09:29 AM
|

:<

Group: Revolutionary
Posts: 2,327
Type: Developer
RM Skill: Advanced

|
The reason why I say "Easy Yet Complicated" is because this is very easy to use and install, and you don't have to do practically anything with loads of pictures, finding out what goes where, huge events, just one script and a couple of pictures is all. This is also made by Selwyn so make sure to give him credit! QUOTE Second, you MUST put this script above main and name it Minimap: CODE #============================================================================== # ƒ ‚¹â‚šƒ¢â€š¬â‚“ Passability Mini Map #------------------------------------------------------------------------------ # made by Selwyn/Squall // selwyn@rmxp.ch # released the 30th of May 2006 #============================================================================== #============================================================================== # ƒ ‚¹â‚šƒ¢â€š¬â‚“ 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 #============================================================================== class Scene_Map alias main_passminimap main alias update_passminimap update alias transfer_passminimap transfer_player #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ initialize #-------------------------------------------------------------------------- def initialize @corner = 4 # 1 or 2 or 3 or 4 end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ main #-------------------------------------------------------------------------- def main @mini_map = Map_Event.new(@corner) main_passminimap @mini_map.dispose end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ update #-------------------------------------------------------------------------- def update @mini_map.update if $game_system.map_interpreter.running? @mini_map.visible = false elsif not $game_system.map_interpreter.running? and @mini_map.on? @mini_map.visible = true end update_passminimap end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ transfer_player #-------------------------------------------------------------------------- def transfer_player transfer_passminimap @mini_map.dispose @mini_map = Map_Event.new(@corner) end end #============================================================================== # ƒ ‚¹â‚šƒ¢â€š¬â‚“ Map_Base #------------------------------------------------------------------------------ # ƒ ‚¹ï¿½'ƒ¢â‚š‚¬ƒ¢â‚š‚¬Base class for mini maps #============================================================================== class Map_Base < Sprite #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ constants and instances #-------------------------------------------------------------------------- PMP_VERSION = 6 ACTIVATED_ID = 1 # set the switch id for the minimap display (on/off) attr_reader :event #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ initialize #-------------------------------------------------------------------------- def initialize(corner) super(Viewport.new(16, 16, width, height)) viewport.z = 8000 @border = Sprite.new @border.x = viewport.rect.x - 6 @border.y = viewport.rect.y - 6 @border.z = viewport.z - 1 @border.bitmap = RPG::Cache.picture("mapback") self.visible = on? 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 self.visible = on? end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ dispose #-------------------------------------------------------------------------- def dispose @border.dispose super end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ x= #-------------------------------------------------------------------------- def x=(x) self.viewport.rect.x = x @border.x = x - 6 end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ y= #-------------------------------------------------------------------------- def y=(y) self.viewport.rect.y = y @border.y = y - 6 end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ visible= #-------------------------------------------------------------------------- def visible=(bool) super self.viewport.visible = bool @border.visible = bool end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ minimap_on? #-------------------------------------------------------------------------- def on? return $game_switches[ACTIVATED_ID] end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ update #-------------------------------------------------------------------------- def update super self.visible = on? if viewport.ox < display_x viewport.ox += 1 elsif viewport.ox > display_x viewport.ox -= 1 end if viewport.oy < display_y viewport.oy += 1 elsif viewport.oy > display_y viewport.oy -= 1 end end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ width #-------------------------------------------------------------------------- def width return 120 end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ height #-------------------------------------------------------------------------- def height return 90 end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ display_x #-------------------------------------------------------------------------- def display_x return $game_map.display_x * 3 / 64 end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ display_y #-------------------------------------------------------------------------- def display_y return $game_map.display_y * 3 / 64 end end #============================================================================== # ƒ ‚¹â‚šƒ¢â€š¬â‚“ Map_Passability #------------------------------------------------------------------------------ # draws the mini map # # ƒ ‚¹ï¿½'ƒ¢â‚š‚¬ƒ¢â‚š‚¬thanks to Fanha Giang (aka fanha99) for the autotile drawing method #============================================================================== class Map_Passability < Map_Base #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ constants #-------------------------------------------------------------------------- INDEX = [ 26, 27, 32, 33, 4, 27, 32, 33, 26, 5, 32, 33, 4, 5, 32, 33, 26, 27, 32, 11, 4, 27, 32, 11, 26, 5, 32, 11, 4, 5, 32, 11, 26, 27, 10, 33, 4, 27, 10, 33, 26, 5, 10, 33, 4, 5, 10, 33, 26, 27, 10, 11, 4, 27, 10, 11, 26, 5, 10, 11, 4, 5, 10, 11, 24, 25, 30, 31, 24, 5, 30, 31, 24, 25, 30, 11, 24, 5, 30, 11, 14, 15, 20, 21, 14, 15, 20, 11, 14, 15, 10, 21, 14, 15, 10, 11, 28, 29, 34, 35, 28, 29, 10, 35, 4, 29, 34, 35, 4, 29, 10, 35, 38, 39, 44, 45, 4, 39, 44, 45, 38, 5, 44, 45, 4, 5, 44, 45, 24, 29, 30, 35, 14, 15, 44, 45, 12, 13, 18, 19, 12, 13, 18, 11, 16, 17, 22, 23, 16, 17, 10, 23, 40, 41, 46, 47, 4, 41, 46, 47, 36, 37, 42, 43, 36, 5, 42, 43, 12, 17, 18, 23, 12, 13, 42, 43, 36, 41, 42, 47, 16, 17, 46, 47, 12, 17, 42, 47, 0, 1, 6, 7 ] X = [0, 1, 0, 1] Y = [0, 0, 1, 1] #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ initialize #-------------------------------------------------------------------------- def initialize(corner) super(corner) @autotile = RPG::Cache.picture("minimap_tiles") setup() end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ setup #-------------------------------------------------------------------------- def setup() @map = load_data(sprintf("Data/Map%03d.rxdata", $game_map.map_id)) tileset = $data_tilesets[@map.tileset_id] @passages = tileset.passages @priorities = tileset.priorities redefine_tiles refresh end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ pass #-------------------------------------------------------------------------- def pass(tile_id) return 15 if tile_id == nil return @passages[tile_id] != nil ? @passages[tile_id] : 15 end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ passable #-------------------------------------------------------------------------- def passable(tile_id) return pass(tile_id) < 15 end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ redefine_tile #-------------------------------------------------------------------------- def redefine_tiles width = @map.width height = @map.height map = RPG::Map.new(width, height) map.data = @map.data.dup for x in 0...width for y in 0...height for level in [1, 2] id = @map.data[x, y, level] if id != 0 and @priorities[id] == 0 @map.data[x, y, 0] = id @passages[@map.data[x, y, 0]] = @passages[id] end end end end for x in 0...width for y in 0...height for level in [0] tile = @map.data[x, y, level] u = @map.data[x, y-1, level] l = @map.data[x-1, y, level] r = @map.data[x+1, y, level] d = @map.data[x, y+1, level] if !passable(tile) map.data[x, y] = 0 else if tile == 0 map.data[x, y, level] = 0 next end if pass(tile) < 15 if !passable(u) and !passable(l) and !passable(r) and !passable(d) map.data[x, y, level] = 0 elsif !passable(u) and !passable(l) and !passable(r) and passable(d) map.data[x, y, level] = 90 elsif !passable(u) and !passable(l) and !passable(d) and passable(r) map.data[x, y, level] = 91 elsif !passable(u) and !passable(r) and !passable(d) and passable(l) map.data[x, y, level] = 93 elsif !passable(l) and !passable(r) and !passable(d) and passable(u) map.data[x, y, level] = 92 elsif !passable(u) and !passable(d) and passable(r) and passable(l) map.data[x, y, level] = 81 elsif !passable(u) and !passable(r) and passable(d) and passable(l) map.data[x, y, level] = 84 elsif !passable(u) and !passable(l) and passable(d) and passable(r) map.data[x, y, level] = 82 elsif !passable(d) and !passable(r) and passable(l) and passable(u) map.data[x, y, level] = 86 elsif !passable(d) and !passable(l) and passable(r) and passable(u) map.data[x, y, level] = 88 elsif !passable(r) and !passable(l) and passable(d) and passable(u) map.data[x, y, level] = 80 elsif !passable(u) and passable(d) and passable(r) and passable(l) map.data[x, y, level] = 68 elsif !passable(d) and passable(u) and passable(r) and passable(l) map.data[x, y, level] = 76 elsif !passable(r) and passable(d) and passable(u) and passable(l) map.data[x, y, level] = 72 elsif !passable(l) and passable(d) and passable(u) and passable(r) map.data[x, y, level] = 64 else map.data[x, y, level] = 48 end else map.data[x, y, level] = 0 end end end end end @map = map.dup map = nil end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ refresh #-------------------------------------------------------------------------- def refresh self.visible = false self.bitmap = Bitmap.new(@map.width * 6, @map.height * 6) bitmap = Bitmap.new(@map.width * 6, @map.height * 6) rect1 = Rect.new(6, 0, 6, 6) for y in 0...@map.height for x in 0...@map.width for level in [0] tile_id = @map.data[x, y, level] next if tile_id == 0 id = tile_id / 48 - 1 tile_id %= 48 for g in 0..3 h = 4 * tile_id + g y1 = INDEX[h] / 6 x1 = INDEX[h] % 6 rect2 = Rect.new(x1 * 3, y1 * 3, 3, 3) bitmap.blt(x * 6 + X[g] * 3, y * 6 + Y[g] * 3, @autotile, rect2) end end end end d_rect = Rect.new(0, 0, @map.width * 6, @map.height * 6) s_rect = Rect.new(0, 0, bitmap.width, bitmap.height) self.bitmap.stretch_blt(d_rect, bitmap, s_rect) self.viewport.ox = display_x self.viewport.oy = display_y bitmap.clear bitmap.dispose end end #============================================================================== # ƒ ‚¹â‚šƒ¢â€š¬â‚“ Map_Event #------------------------------------------------------------------------------ # ƒ ‚¹ï¿½'ƒ¢â‚š‚¬ƒ¢â‚š‚¬draw the events and hero position #============================================================================== class Map_Event < Map_Passability #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ initialize #-------------------------------------------------------------------------- def initialize(corner = 4) super(corner) @dots = [] @player = Sprite.new(self.viewport) @player.bitmap = RPG::Cache.picture("mmcursors") @player.src_rect = Rect.new(0, 0, 15, 15) @player.z = self.z + 3 @events = {} for key in $game_map.events.keys event = $game_map.events[key] next if event.list == nil for i in 0...event.list.size next if event.list[i].code != 108 @events[key] = Sprite.new(self.viewport) @events[key].z = self.z + 2 if event.list[i].parameters[0].include?("event") @events[key].bitmap = RPG::Cache.picture("event") elsif event.list[i].parameters[0].include?("enemy") @events[key].bitmap = RPG::Cache.picture("enemy") elsif event.list[i].parameters[0].include?("teleport") @events[key].bitmap = RPG::Cache.picture("teleport") elsif event.list[i].parameters[0].include?("chest") @events[key].bitmap = RPG::Cache.picture("chest") elsif event.list[i].parameters[0].include?("npc") @events[key].bitmap = RPG::Cache.picture("npc") elsif event.list[i].parameters[0].include?("savepoint") @events[key].bitmap = RPG::Cache.picture("savepoint") end end end end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ dispose #-------------------------------------------------------------------------- def dispose @player.dispose for event in @events.values event.dispose end super end #-------------------------------------------------------------------------- # ƒ ‚¹â‚šƒ¢â€š¬â‚ƒ¯‚¿‚½ update #-------------------------------------------------------------------------- def update super @player.x = $game_player.real_x * 3 / 64 - 5 @player.y = $game_player.real_y * 3 / 64 - 4 @player.src_rect.x = ($game_player.direction / 2 - 1) * 15 for key in @events.keys event = @events[key] mapevent = $game_map.events[key] event.x = mapevent.real_x * 3 / 64 event.y = mapevent.real_y * 3 / 64 end end end The little dots that appear on the screen (your character is a red dot, i believe) are color coded, for NPCs, Treasure, Events, and other stuff. You must put the following in a comment on your event page depending on what color you want the dot to be: ____________________  npc  teleport  chest  enemy  event  savepoint ____________________ Whichever word you have in that comment is what color your dot will be, so if you typed "enemy" in a comment then the dot on the minimap would show a red dot where that enemy is. By default, the minimap is in the lower right hand of the screen, though you can change it to any different one. If you need any more help with this, just ask me! source : http://translate.google.com/translate?js=n...history_state0=(Translated From Thai)OH CRAP I forgot something! On the site I got it from, at the bottom it tells you about how to turn the minimap on and off with a switch. The one it is currently at in the script is Switch #1, but you can change it somehow. Just look at the site and it will explain it for you! TESTED AND WORKS!
__________________________
 
|
|
|
|
|
|
|
|
  |
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:
RPG RPG Revolution is an Privacy
Policy and Legal
|
|