Build 5x5 grid. do local cols=5 local rows=5 local basevnum=501 local function getvnum( col, row) return basevnum-1 + (row-1)*cols + col end local function setexflag( dir, flg) if not(mob.room[dir]:flag(flg)) then olc(dir.." "..flg) end end for col=1,cols do for row=1,rows do mdo("redit create "..getvnum(col,row) ) end end for col=1,cols do for row=1,rows do local vnum=getvnum(col,row) mdo("goto "..vnum) if not(row==1) then -- do north stuff olc("north dig "..getvnum(col,row-1)) setexflag( "north", "door") setexflag( "north", "dormant") end if not(row==rows) then -- do south stuff olc("south dig "..getvnum(col,row+1)) setexflag( "south", "door") setexflag( "south", "dormant") end if not(col==1) then -- do west stuff olc("west dig "..getvnum(col-1,row)) setexflag( "west", "door") setexflag( "west", "dormant") end if not(col==cols) then -- do east stuff olc("east dig "..getvnum(col+1,row)) setexflag( "east", "door") setexflag( "east", "dormant") end end end end Print map do local cols=5 local rows=5 local basevnum=501 local function getvnum( col, row) return basevnum-1 + (row-1)*cols + col end local function setexflag( dir, flg) if not(mob.room[dir]:flag(flg)) then olc(dir.." "..flg) end end local out={} for row=1,rows do local second={} for col=1,cols do table.insert(out, "#") local room=getroom(getvnum(col,row)) if room.east then table.insert(out, room.east:flag("dormant") and " " or "-") end if room.south then table.insert(second, room.south:flag("dormant") and " " or "| ") end end table.insert(out,"\n\r"..table.concat(second).."\n\r") end sendtochar(mob, table.concat(out)) end Generate maze do local function revdir( dir ) if dir == "north" then return "south" elseif dir == "south" then return "north" elseif dir == "east" then return "west" elseif dir == "west" then return "east" end end --Randomized Prim's algorithm http://en.wikipedia.org/wiki/Maze_generation_algorithm local walls={} local maze={} for k,v in pairs(getroom(501).exits) do table.insert(walls, { dir=v, exit=getroom(501)[v]} ) end while #walls>0 do local wallind=randnum(1,#walls) local wall=walls[wallind] table.remove(walls, wallind) if not maze[wall.exit.toroom] then wall.exit:setflag("dormant", false) wall.exit:setflag("door", false) wall.exit.toroom[revdir(wall.dir)]:setflag("dormant", false) wall.exit.toroom[revdir(wall.dir)]:setflag("door", false) maze[wall.exit.toroom]=true for k,v in pairs(wall.exit.toroom.exits) do table.insert(walls, { dir=v, exit=wall.exit.toroom[v]} ) end end end end