-- GO! -- the Enigma Level
-- (c) 2002 Petr Machata/ant_39
-- Licensed under GPL v2.0 or above
-- 2003-01-10 -- final glass block replaced by vertical door
-- 2003-01-25 -- enigma.ConserveLevel=FALSE added
-- 2003-06-28 -- fixes due to changes in Enigma: the bridge moves slower

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
enigma.ConserveLevel=FALSE                  -- \dh\

floortile = "fl-bluegray"
bordertile = "st-rock1"
walltile = "st-glass"
flbridge = "fl-wood"

levelw = 20
levelh = 13

waterx0 = 5
waterw0 = 8

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

swc = 0;

function sw1()
   if (swc == 0) then
      enigma.SendMessage(enigma.GetNamedObject("bolder01"),"direction",EAST);
      swc = 1
   end
end

function sw2()
   if (swc == 1) then
      enigma.SendMessage(enigma.GetNamedObject("bolder01"),"direction",WEST);
      swc = 2
   end
end

function sw3()
   if (swc == 2) then
      enigma.SendMessage(enigma.GetNamedObject("bolder02"),"direction",EAST);
      swc = 3
   end
end

function sw4()
   if (swc == 3) then
      enigma.SendMessage(enigma.GetNamedObject("bolder02"),"direction",WEST);
      swc = 4
   end
end

function sw5()
   if (swc == 4) then
      enigma.SendMessage(enigma.GetNamedObject("doorA"), "close", nil)
      swc = 5
   end
end

-- 20x13 --> +19, +12

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

create_world(levelw, levelh)
fill_floor(floortile,   0, 0, level_width, level_height)

draw_border(bordertile)
draw_stones(bordertile, {1,level_height-3}, { 1,0}, level_width-2)
draw_stones(bordertile, {1,2}, {1,0}, level_width-2)
set_stone(bordertile, 5,9)
draw_stones(walltile, {2,3}, {0,1}, 1)
draw_stones(walltile, {2,5}, {0,1}, level_height-8)
draw_stones(walltile, {level_width-3,3}, {0,1}, 3)
draw_stones(walltile, {level_width-3,7}, {0,1}, level_height-10)
draw_floor("fl-water", {level_width-4,3}, {0,1}, level_height-6)
set_stone("st-bolder", 2, 11, {name="bolder01", direction=NORTH})
set_stone("st-bolder", 2, 1, {name="bolder02", direction=SOUTH})
set_item("it-trigger", 2, 4, {action="callback", target="sw1"})
set_item("it-trigger", level_width-2, level_height-2, {action="callback", target="sw2"})
set_item("it-trigger", 1, level_height-2, {action="callback", target="sw3"})
set_item("it-trigger", level_width-2, 1, {action="callback", target="sw4"})
set_item("it-trigger", 1, 1, {action="callback", target="sw5"})
set_stone(walltile, 3,6)
set_stone(walltile, 4,6)
set_stone("st-wood", 5,6)
set_stone("st-door", level_width-3, 6, {name="doorA", type="v"})
enigma.SendMessage(enigma.GetNamedObject("doorA"), "open", nil)

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- bridges
cenbridge = 1
cunbridge = 2

function enbridge()
   set_floor(flbridge, waterx0+cenbridge, 5)
   set_floor(flbridge, waterx0+waterw0+1-cenbridge, 7)
   cenbridge = cenbridge + 1
   if (cenbridge>waterw0) then
      cenbridge = 1
   end
end

function unbridge()
   set_floor("fl-water", waterx0+cunbridge, 5)
   set_floor("fl-water", waterx0+waterw0+1-cunbridge, 7)
   cunbridge = cunbridge + 1
   if (cunbridge>waterw0) then
      cunbridge = 1
   end
end

fill_floor("fl-water", waterx0+1, 3, waterw0, level_height-6)
set_stone("st-timer", 0, 2,              {action="callback", target="enbridge", interval=0.4});
set_stone("st-timer", 0, level_height-3, {action="callback", target="unbridge", interval=0.4});
draw_floor(flbridge, {waterx0+1,5}, {1,0}, waterw0);
draw_floor(flbridge, {waterx0+1,7}, {1,0}, waterw0);

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

oxyd (level_width-2,3)
oxyd (level_width-2,level_height-4)
oxyd_shuffle()
set_actor("ac-blackball", 1.5, 5.5, {player=0})

enigma.ConserveLevel=FALSE
