Cartographer's Map
From Redwall MUCK Wiki
Since someone asked, here’s the code I use to display the map generated by Cartographer. It (mostly) avoids function invocation limits by rendering the map in successive chunks. I copied this straight out of the file, so some things will need changing (dbrefs, mostly).
@create Cartographer's Map=me=cartomap
+reg $cartomap:laserbot=$laserbot
+reg $cartomap:laserbot=$laserbot
@act showmap=$cartomap=$cartomap:showmap=$nothing
@succ $cartomap:showmap={lexec:showmap,showmap}
lsedit $cartomap:showmap=showmap
.del ^ $
The device spins to life.\r<< Generating map... >>\rStart point: {name:{default:{prop:_map/1/100/6, #104924},{loc:#104924}}}
{null:
{with:i,1,
{with:stop,{count:{listprops:_map/1,#104924}},
{if:{prop:_explore/{loc:me}/y,#104924},
{set:i,{max:1,{subt:{tell:{lmember:{lsort:{subst:{listprops:_map/1,#104924},_map/1/,}},{prop:_explore/{loc:me}/y,#104924}}},7}}}
{set:stop,{add:{&i},7}}}
{while:{lt:{&i},{&stop}},
{delay:1,\{with:start\,{&i}\,\{lexec:doshow\}\}}
{set:i,{add:{&i},6}}}}}}
.end
lsedit $cartomap:showmap=doshow
.del ^ $
{func:repeat,str,times,
{left:,{mult:{×},{strlen:{&str}}},{&str}}}
{with:i,0,
{null:
{with:plist,{lsort:{subst:{listprops:_map/1,#104924},_map/1/,}},
{foreach:y,
{sublist:{&plist},
{&start},{add:{&start},5}},
{with:pw,{&i},
{set:i,1}
{with:line1,,
{with:line2,,
{with:line3,,
{foreach:x,{lsort:{subst:{listprops:_map/1/{&y},#104924},_map/1/{&y}/,}},
{if:{gt:{&x},{&i}},
{set:line1,{&line1}{repeat:+----,{subt:{&x},{&i}}}}
{set:line2,{&line2}{repeat:|::::,{subt:{&x},{&i}}}}
{set:line3,{&line3}{repeat:|::::,{subt:{&x},{&i}}}}}
{null:{set:i,{add:{&x},1}}}
{set:line1,{&line1}+----}
{set:line2,{&line2}| {if:{eq:{loc:#104924},{prop:_map/1/{&y}/{&x},#104924}},o, } }
{set:line3,{&line3}| {if:{eq:{loc:me},{prop:_map/1/{&y}/{&x},#104924}},*, } },
\r
}
{tell:
{&line1}+{if:{gt:{&pw},{&i}},
{repeat:----+,{subt:{&pw},{&i}}}}\r
{&line2}|\r
{&line3}|\r
}}}}}}}}}
.end