Submit Your Article


 
RPG Maker

Welcome Guest ( Log In | Register )


  Games Resources RPG Maker VX RPG Maker XP Scripts Tutorials Downloads

 
Closed TopicStart new topic
> Minimap by Selwyn, Easy Yet Complicated!
Redd
post Jun 10 2009, 09:29 AM
Post #1


:<
Group Icon

Group: Revolutionary
Posts: 2,310
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:
[Show/Hide] The Code
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!


__________________________
Go to the top of the page
 
+Quote Post
   
Redd
post Jun 11 2009, 11:50 AM
Post #2


:<
Group Icon

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




bump^^


__________________________
Go to the top of the page
 
+Quote Post
   
Wextell
post Jun 11 2009, 04:31 PM
Post #3



Group Icon

Group: Member
Posts: 1
Type: Scripter
RM Skill: Advanced




Thanks for posting this, been looking for it for awhile.
Go to the top of the page
 
+Quote Post
   
Sniper308
post Jun 12 2009, 09:06 PM
Post #4


Level 5
Group Icon

Group: Member
Posts: 71
Type: Artist
RM Skill: Advanced




This sounds rather interesting, do you think you can make a demo of such a thing? huh.gif
Go to the top of the page
 
+Quote Post
   
Redd
post Jun 15 2009, 12:42 PM
Post #5


:<
Group Icon

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




Sure I'll make a demo right away!


__________________________
Go to the top of the page
 
+Quote Post
   
Redd
post Jun 18 2009, 02:10 PM
Post #6


:<
Group Icon

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




http://www.megaupload.com/?d=I46U26LC

Just a little bump! And there's your demo Sniper!


__________________________
Go to the top of the page
 
+Quote Post
   
Sniper308
post Jun 20 2009, 10:00 PM
Post #7


Level 5
Group Icon

Group: Member
Posts: 71
Type: Artist
RM Skill: Advanced




QUOTE (Redd @ Jun 18 2009, 03:10 PM) *
http://www.megaupload.com/?d=I46U26LC

Just a little bump! And there's your demo Sniper!


Thanks Redd! The demo is a perfect example! I might use this my future games! happy.gif
Go to the top of the page
 
+Quote Post
   

Closed TopicStart new topic
3 User(s) are reading this topic (3 Guests and 0 Anonymous Users)
0 Members:

 

Lo-Fi Version Time is now: 19th May 2013 - 12:43 PM
RPG RPG Revolution is an Privacy Policy and Legal
eXTReMe Tracker