-- Island of Mirrors -- Oxyd Extra -- the Enigma Level
-- (c) 2002 Petr Machata/ant_39
-- Licensed under GPL v2.0 or above
-- 2003-02-21

dofile(enigma.FindDataFile("levels/ant.lua"))
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
num = 0
function engine(x, y, delta, faces, attribs, modattrib, modvalues)
   local it = {}
   it.state = 1

   num = num +1
   local fname = "switchfunc"..num

   attribs[1].action = "callback"
   attribs[1].target = fname

   local x2, y2 = x+delta[1], y+delta[2]
   set_stone(faces[1], x, y, attribs[1])
   it.tgt = set_stone(faces[2], x2, y2, attribs[2])

   local func0 = function()
		    -- switch
		    %it.state = %it.state +1
		    if (%it.state>getn(%modvalues)) then
		       %it.state = 1
		    end
		    -- set state of desired target object
		    kill_stone(%x2, %y2)
		    %attribs[2][%modattrib] = %modvalues[%it.state]
		    set_stone(%faces[2], %x2, %y2, %attribs[2])
		    --set_attrib(%it.tgt, %modattrib, %modvalues[%it.state])
		 end

   setglobal(fname, func0)
end
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

local dlt  = {11,0} -- delta
local mir3 = {"st-switch", "st-3mirror"}
local mirp = {"st-switch", "st-pmirror"}
local lsr =  {"st-switch", "st-laser"}
local trn = {transparent=TRUE,  movable = TRUE}
local ntr = {transparent=FALSE, movable = FALSE}

cells={}
cells["."] = abyss
cells["0"] = oxyd
cells[" "] = cell{floor="fl-samba"}
cells["#"] = cell{stone="st-rock5"}
cells["O"] = cell{actor={"ac-blackball", {player=0}}}

cells["A"] = cell{{{engine, dlt, mir3, {{},{orientation=3}}, "orientation", {3,4}}}}
cells["B"] = cell{{{engine, dlt, mirp, {{},{orientation=2}}, "orientation", {2,3}}}}
cells["C"] = cell{{{engine, dlt, mir3, {{},{orientation=1}}, "orientation", {1,2}}}}
cells["D"] = cell{{{engine, dlt, mir3, {{},{orientation=1}}, "orientation", {1,2}}}}
cells["E"] = cell{{{engine, dlt, mirp, {{},{transparent=TRUE, orientation=1}}, "orientation", {1,2}}}}
cells["F"] = cell{{{engine, dlt, mir3, {{},{orientation=2}}, "orientation", {2,3}}}}
cells["G"] = cell{{{engine, dlt, mirp, {{},{orientation=1}}, "orientation", {1,2}}}}
cells["H"] = cell{{{engine, dlt, mir3, {{},{orientation=2}}, "orientation", {2,3}}}}
cells["L"] = cell{stone={"st-laser", {on=FALSE, dir=NORTH, name="laser1"}}}
cells["S"] = cell{{{switch, "laser1", "onoff"}}}

level = {
   "....................",
   "....................",
   ".#...#.......0...0..",
   ".       ....       .",
   ". A B C ....       0",
   ".       #...       .",
   ". D E F ...0       .",
   ".  O    ....       .",
   "# G   H ....       0",
   ".       ....       .",
   "....S...#......L.0..",
   "....................",
   "....................",
}
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
oxyd_default_flavor="c"
set_default_parent(cells[" "])
create_world_by_map(level)
oxyd_shuffle()
