User Tools

Site Tools


lua:scripting:firetemple

Build 5×5 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
lua/scripting/firetemple.txt · Last modified: 2015/01/01 09:50 by vodur