-- Pneumatic Delivery
-- (c) 2004 Manuel König

Require("levels/ant.lua")
multiplayer_mode()

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

cells={}
cells[" "]=cell{floor="fl-wood"}
cells["+"]=cell{item={"it-sensor", {action="callback", target="disable_conserve_level"}}}
cells["#"]=cell{stone="st-rock5"}
cells["A"]=cell{stone="st-black4"}
cells["a"]=cell{stone="st-white4"}
cells["B"]=cell{stone="st-mail-n"}
cells["b"]=cell{stone="st-mail-e"}
cells["C"]=cell{stone="st-mail-s"}
cells["c"]=cell{stone="st-turnstile", floor="fl-abyss"}
cells["D"]=cell{stone="st-turnstile-n", floor="fl-abyss"}
cells["d"]=cell{stone="st-turnstile-e", floor="fl-abyss"}
cells["E"]=cell{stone="st-turnstile-s", floor="fl-abyss"}
cells["e"]=cell{stone="st-turnstile-w", floor="fl-abyss"}
cells["F"]=cell{item="it-puller-n"}
cells["f"]=cell{item="it-puller-e"}
cells["G"]=cell{item="it-puller-s"}
cells["g"]=cell{item="it-puller-w"}
cells["H"]=cell{stone="st-stoneimpulse"}
cells["h"]=cell{stone={"st-fourswitch", {action="callback", target="mirrorswitch"}}}
cells["I"]=cell{stone="st-shogun-l"}
cells["i"]=cell{stone="st-shogun-m"}
cells["J"]=cell{stone="st-shogun-s", item={"it-shogun-l", {target="door2", action="openclose"}}}
cells["j"]=cell{stone="st-rotator_move-left"}
cells["k"]=cell{item={"it-document", {text="This is my first landscape, dedicated to my father. I hope you'll enjoy it!"}}}
cells["L"]=cell{stone={"st-laser-e", {name="laser", on=FALSE}}}
cells["l"]=cell{stone={"st-switch_white", {target="laser", on=FALSE, action="onoff"}}}
cells["N"]=cell{item="it-pipe-ne"}
cells["Q"]=cell{stone={"st-laserswitch", {action="callback", target="lasertrigger1"}}}
cells["q"]=cell{stone={"st-laserswitch", {action="callback", target="lasertrigger2"}}}
cells["R"]=cell{stone={"st-laserswitch", {action="callback", target="lasertrigger3"}}}
cells["r"]=cell{stone={"st-laserswitch", {action="callback", target="lasertrigger4"}}}
cells["S"]=cell{stone={"st-door", {type="v", name="door2"}}}
cells["s"]=cell{stone={"st-door", {type="h", name="door3"}}}
cells["T"]=cell{stone={"st-door", {type="v", name="door1"}}}
cells["t"]=cell{stone={"st-pmirror", {movable=0, transparent=0, orientation=2}}}
cells["U"]=cell{stone={"st-pmirror", {movable=0, transparent=1, orientation=4}}}
cells["u"]=cell{stone={"st-3mirror", {movable=0, transparent=0, orientation=1}}}
cells["V"]=cell{stone={"st-3mirror", {movable=0, transparent=0, orientation=2}}}
cells["v"]=cell{stone={"st-pmirror", {movable=1, transparent=0, orientation=1}}}
cells["w"]=cell{item={"it-trigger", {action="callback", target="trigger1"}}}
cells["X"]=cell{stone="st-grate2"}
cells["x"]=cell{stone="st-grate3"}
cells["Y"]=cell{stone={"st-pmirror", {movable=0, transparent=0, orientation=4, name="mirror1"}}}
cells["y"]=cell{stone={"st-switch_black", {action="callback", target="stonedoor"}}}
cells["Z"]=cell{item={"it-trigger", {action="callback", target="trigger2"}}}
cells["z"]=cell{item={"it-trigger", {action="callback", target="trigger3"}}}
cells["*"]=cell{stone={"st-door_c", {name="door4"}}}
cells[","]=cell{floor="fl-water"}
puzzles2 = {}
cells["?"]=cell{parent={{add_multicell, puzzles2}}}


if (difficult) then
cells["n"]=cell{item="it-pipe-sw"}
cells["P"]=cell{item="it-hammer"}
cells["p"]=cell{stone="st-stone_break"}
cells["K"]=cell{stone="st-knight"}
cells["$"]=cells["?"]
cells["m"]=cell{item="it-pipe-v"}
cells["M"]=cell{item="it-pipe-h"}
else
cells["n"]=cells[" "]
cells["P"]=cells[" "]
cells["p"]=cells[" "]
cells["K"]=cells[" "]
cells["m"]=cells[" "]
cells["M"]=cells[" "]
end



      level = {
      --	    1	      2		3
      --  012345678901234567890123456789012345678
         "#######################################",
         "# q      u  Q#    rxYx         #   #yM#",
         "#            #     xxx     ## W wW ##n#",
         "#L       U   X     x 1 v   # Wz Z#  Tm#",
         "#            #   $ A   ##### ### #  #k#",
         "# t      V  R#???? #  Fb..##     #  #K#",
         "#p############ ?N? #B###ecd#####C####0#",
         "#s## X #  ,,I# ?m? #  #  . .........###",
         "#mf# J H  j  X ????# 2# D. ec.. . ecd##",
         "#G###H #i# # X $   #  ..cN. . .ec. .  #",
         "#F#MPH   X # X     a    E+#ecdc ...#  #",
         "#0hM S   X   #     #l0#####.. EG ..##K#",
         "#####################################0#"
      --  012345678901234567890123456789012345678
      --	    1	      2		3
      }


--        -- [STONE DOOR] --
stonedoorswitchgreen=0
function stonedoor()
    if (stonedoorswitchgreen==0) then
      stonedoorswitchgreen=1
      set_stone("st-grate2", 31,1)
    elseif (stonedoorswitchgreen==1) then
      stonedoorswitchgreen=0
      set_stone("st-rock5", 31,1)
    end
end
--        -- [/STONE DOOR] --

--        -- [THREE TRIGGERS] --
local switchesdoor1={0, 0, 0}
function trigger1 () triggerdoor1(1) end 
function trigger2 () triggerdoor1(2) end 
function trigger3 () triggerdoor1(3) end
doorsopen1=0

function triggerdoor1(num)
   %switchesdoor1[num] = 1-%switchesdoor1[num]
   alldoor1=1
   for x=1,3 do
      if (%switchesdoor1[x]==0) then
         alldoor1 = 0
	end
   end
   if (doorsopen1==0 and alldoor1==1) then
      enigma.SendMessage(d1, "open", nil)
      doorsopen1 = 1
   elseif (doorsopen1==1 and alldoor1==0) then
      enigma.SendMessage(d1, "close", nil)
      doorsopen1 = 0
   end
end
--       -- [/THREE TRIGGERS] --

--        -- [FOURSWITCH] --
function mirrorswitch()
    mir=enigma.GetNamedObject("mirror1")
    enigma.SendMessage(mir, "turn", nil)
end
--       -- [/FOURSWITCH] --

--        -- [LASERSWITCHES] --
local switchesdoor3={0, 0, 0, 0}
function lasertrigger1 () triggerdoor3(1) end 
function lasertrigger2 () triggerdoor3(2) end 
function lasertrigger3 () triggerdoor3(3) end
function lasertrigger4 () triggerdoor3(4) end
doorsopen3=0

function triggerdoor3(num)
   %switchesdoor3[num] = 1-%switchesdoor3[num]
   allswitches3=1
   for x=1,4 do
      if (%switchesdoor3[x]==0) then
         allswitches3 = 0
	end
   end
   if (doorsopen3==0 and allswitches3==1) then
      enigma.SendMessage(d3, "open", nil)
      doorsopen3 = 1
   elseif (doorsopen3==1 and allswitches3==0) then
      enigma.SendMessage(d3, "close", nil)
      doorsopen3 = 0
   end
end
--       -- [/LASERSWITCHES] --

      oxyd_default_flavor = "d"
      set_default_parent(cells[" "])
      create_world_by_map(level)

      --       --  [PUZZLE] --
function scramble(x,y,d) enigma.AddScramble(x,y,d) end
enigma.SetScrambleIntensity(50)
scramble(14,5,"e")
scramble(15,5,"s")
scramble(18,8,"w")
scramble(17,8,"n")
--       -- [/PUZZLE] --

function disable_conserve_level ()
enigma.ConserveLevel = FALSE
end

d1=enigma.GetNamedObject("door1")
d3=enigma.GetNamedObject("door3")
render_puzzles(puzzles2, puzzle2)

fill_floor("fl-water", 14,5, 4, 1)
fill_floor("fl-water", 17,5, 1, 4)
set_floor("fl-water",18,8)

set_floor("fl-abyss",25,9)
set_floor("fl-abyss",25,10)
set_floor("fl-wood",27,8)
set_floor("fl-wood",34,8)
set_floor("fl-wood",36,8)

if (not difficult) then
set_item("it-pipe-sw",25,5)
set_item("it-pipe-v",25,6)
set_item("it-pipe-v",25,7)
set_item("it-pipe-h",26,9)
set_item("it-pipe-h",26,9)
set_item("it-pipe-h",3,10)
set_item("it-pipe-h",33,7)
set_item("it-pipe-v",37,1)
end

oxyd_shuffle()