ID:2597675
 
Source:
dmm
var{list/ids=new;raw;maxx;maxy;list/data = new}
New(f)
var a,b,c,d; f = file2text(f)
for()
a = findtext(f,"\"");b = findtext(f,"\"",a+1)
c = findtext(f,"(",b+1);d = findtext(f,")",c+1)
if(!a||!b||!c||!d){break}
ids[copytext(f,a+1,b)] = params2list(replacetext(copytext(f,c+1,d),",","&"))
f = copytext(f,1,a) + copytext(f,d+1)
a = findtext(f,"{\"");b = findtext(f,"\"}")
if(!a||!b){return}; f = raw = copytext(f,a+3,b)
while((a = findtext(f,"\n",a+1))){.++};maxy = .+1
maxx = length(copytext(f,1,findtext(f,"\n")))
var node_size = length(ids[1]),x = 0,y = maxy
f = replacetext(raw,"\n","")
for(var/p = 1 to length(f) step node_size)
x++; if(x > maxx){x = 1;y--}
data["[x],[y]"] = copytext(f,p,p+node_size)

proc/PrepareChunk(sx,sy,ex,ey)
var list/l = new
for(var/Y = sy to ey){for(var/X = sx to ex){l += data["[X],[Y]"]};l+="_"}
return l

proc/LoadChunk(sx,sy,sz,list/c)
var x = sx, y = sy
for(var/i in c)
if(i == "_"){y++;x=sx;continue}
for(. in ids[i]){new . (locate(x,y,sz))}
x++

Example Usage:
mob/Login()
var dmm/map = new/dmm('Map.dmm')
var house = map.PrepareChunk(8,7,12,10)
map.LoadChunk(1,1,1,house)
map.LoadChunk(1,6,1,house)
..()


Result: