I'll try to express Benito's idea in some sample code.. keep in mind you'll still have to decide on how the mini-map will look and act like I explained.
Say you want one that's in OOT style: a single sprite drawn in a fixed position. The room you're in is 1280x960, the view is 320x240, and the mini-map sprite is 64x48 (with its origin at 0,0), and you want it 16 pixels from the bottom-left edge. First, do a bit of math:
64/1280 = 0.05, so that's the scale of the mini-map. It will be drawn at an x of view_xview+16 obviously, and the y will be view_yview+view_hview-16 (16-pixel space from the bottom) -48 (for the height of the sprite).
So this can go in the Draw event:
var map_x, map_y;
map_x = view_xview + 16
map_y = view_yview + view_hview - 64
draw_sprite(sprMiniMap, 0, map_x, map_y)
Now to draw a yellow dot for Link, you need to find out where he is in the room, and scale that down for the map.
var link_x, link_y;
link_x = objLink.x * 0.05
link_y = objLink.y * 0.05
draw_sprite(sprYellowDot, 0, map_x+link_x, map_y+link_y)
Then if you want a red dot for every NPC or enemy, I would recommend making a parent object for them all. Just create an object called objNPC with no code or sprite, you don't even need to place it in the room, then set all the other NPC objects' parent to that. You can use a simple loop to check all of their positions and draw them in the same manner.
var i, npc_id, npc_x, npc_y;
for (i=0; i<instance_number(objNPC); i+=1) { // iterate once for each NPC
npc_id = instance_find(objNPC, i) // find the id of the i'th NPC
npc_x = npc_id.x * 0.05
npc_y = npc_id.y * 0.05
draw_sprite(sprRedDot, 0, map_x+npc_x, map_y+npc_y)
}
I hope that helps a bit. There are lots of other ways to do it too. Say for instance, the room sizes and mini-map sizes all vary from room to room. Instead of calculating a different scale number for each room, you can figure it out on the fly by comparing the sprite size to the room width.
// in Create:
switch room {
case roomA: sprite_index=sprMiniMapA; break;
case roomB: sprite_index=sprMiniMapB; break;
case roomC: sprite_index=sprMiniMapC; break;
}
scale_x = sprite_width / room_width
scale_y = sprite_height / room_height
// in Draw:
link_x = objLink.x * scale_x
link_y = objLink.y * scale_y
And so forth.