levelw=25
levelh=15

create_world( levelw, levelh)

fill_floor("fl-hay", 0,0,levelw,levelh)

function renderLine( line, pattern)
	for i=1, strlen(pattern) do
		local c = strsub( pattern, i, i)
		if c =="#" then
			set_stone( "st-greenbrown", i-1, line)
		elseif c =="@" then
			set_stone( "st-glass", i-1, line)
           	fill_floor("fl-ice_001", i-1,line, 1,1)
		elseif c == "g" then
		   set_stone("st-oxyd", i-1, line,{color="0",name="o1"})
		elseif c == "h" then
		   set_stone("st-oxyd", i-1, line,{color="0",name="o2"})
		elseif c == "i" then
		   set_stone("st-oxyd", i-1, line,{color="1",name="o3"})
		elseif c == "j" then
		   set_stone("st-oxyd", i-1, line,{color="1",name="o4"})
		elseif c == "k" then
		   set_stone("st-oxyd", i-1, line,{color="2",name="o5"})
		elseif c == "l" then
		   set_stone("st-oxyd", i-1, line,{color="2",name="o6"})
		elseif c == "m" then
		   set_stone("st-oxyd", i-1, line,{color="3",name="o7"})
		elseif c == "n" then
		   set_stone("st-oxyd", i-1, line,{color="3",name="o8"})
		elseif c == "p" then
		   set_stone("st-oxyd", i-1, line,{color="4",name="o9"})
		elseif c == "q" then
		   set_stone("st-oxyd", i-1, line,{color="4",name="o10"})
		elseif c == "r" then
		   set_stone("st-oxyd", i-1, line,{color="5",name="o11"})
		elseif c == "s" then
		   set_stone("st-oxyd", i-1, line,{color="5",name="o12"})
		elseif c == "t" then
		   set_stone("st-oxyd", i-1, line,{color="6",name="o13"})
		elseif c == "u" then
		   set_stone("st-oxyd", i-1, line,{color="6",name="o14"})
		elseif c == "v" then
		   set_stone("st-oxyd", i-1, line,{color="7",name="o15"})
		elseif c == "w" then
		   set_stone("st-oxyd", i-1, line,{color="7",name="o16"})
                elseif c == "!" then
			abyss(i-1,line)
--	           	fill_floor("fl-water", i-1,line, 1,1)
		elseif c=="z" then
		   set_actor("ac-blackball", i-.5,line+.5, {player=0})
      elseif c == "A" then
         set_stone("st-door_a",i-1,line,{name="gate1"})
      elseif c == "B" then
         set_stone("st-door_a",i-1,line,{name="gate2"})
      elseif c == "C" then
         set_stone("st-door_a",i-1,line,{name="gate3"})
      elseif c == "D" then
         set_stone("st-door_a",i-1,line,{name="gate4"})
      elseif c == "E" then
         set_stone("st-door_a",i-1,line,{name="gate5"})
      elseif c == "F" then
         set_stone("st-door_a",i-1,line,{name="gate6"})
elseif c=="a" then
set_item("it-trigger", i-1,line, {action="openclose", target="gate1"})
elseif c=="b" then
set_item("it-trigger", i-1,line, {action="openclose", target="gate2"})
elseif c=="c" then
set_item("it-trigger", i-1,line, {action="openclose", target="gate3"})
elseif c=="d" then
set_item("it-trigger", i-1,line, {action="openclose", target="gate4"})
elseif c=="e" then
set_item("it-trigger", i-1,line, {action="openclose", target="gate5"})
elseif c=="f" then
set_item("it-trigger", i-1,line, {action="openclose", target="gate6"})
		elseif c=="1" then
			set_stone("st-switch", i-1,line, {action="callback",target="funccU"})
		elseif c=="2" then
			set_stone("st-switch", i-1,line, {action="callback",target="funccR"})
		elseif c=="3" then
			set_stone("st-switch", i-1,line, {action="callback",target="funccD"})
		elseif c=="4" then
			set_stone("st-switch", i-1,line, {action="callback",target="funccL"})
		elseif c=="5" then
			set_stone("st-switch", i-1,line, {action="callback",target="funccP"})
		elseif c=="R" then
		   set_stone("st-switch", i-1,line, {action="callback",target="funccX"})
		elseif c=="G" then
		   set_stone("st-switch", i-1,line, {action="callback",target="funccU2"})
		elseif c=="H" then
		   set_stone("st-switch", i-1,line, {action="callback",target="funccR2"})
		elseif c=="I" then
		   set_stone("st-switch", i-1,line, {action="callback",target="funccD2"})
		elseif c=="J" then
		   set_stone("st-switch", i-1,line, {action="callback",target="funccL2"})
		elseif c=="K" then
		   set_stone("st-switch", i-1,line, {action="callback",target="funccP2"})
		elseif c == "=" then
		   puzzle(i-1,line,PUZ_0101)
		elseif c == "$" then
		   puzzle(i-1,line,PUZ_1010)
		elseif c == "`" then
		   puzzle(i-1,line,PUZ_0011)
		elseif c == "/" then
		   puzzle(i-1,line,PUZ_0110)
		elseif c == "%" then
		   puzzle(i-1,line,PUZ_1001)
		elseif c == "L" then
		   puzzle(i-1,line,PUZ_1100)
	end
	end	
end

-- Floor:  " "
-- Border: "#"
-- Oxyd:   "o"

renderLine(00,"/======`############")
renderLine(01,"$a#     #ghij#  G  #")
renderLine(02,"$       #klmn# J#H #")
renderLine(03,"$      b#pqrs#  I  #")
renderLine(04,"$       #tuvw#K    #")
renderLine(05,"$   c   ##########F#")
renderLine(06,"$       #        #E#")
renderLine(07,"$  d    # z  1   #D#")
renderLine(08,"$       #        #C#")
renderLine(09,"$     e #  4 5 2 #B#")
renderLine(10,"$       #        #A#")
renderLine(11,"$ f     #R   3     #")
renderLine(12,"L======%############")
renderLine(13,"####################")

oxyd_shuffle()

o1=enigma.GetNamedObject("o1")
o2=enigma.GetNamedObject("o2")
o3=enigma.GetNamedObject("o3")
o4=enigma.GetNamedObject("o4")
o5=enigma.GetNamedObject("o5")
o6=enigma.GetNamedObject("o6")
o7=enigma.GetNamedObject("o7")
o8=enigma.GetNamedObject("o8")
o9=enigma.GetNamedObject("o9")
o10=enigma.GetNamedObject("o10")
o11=enigma.GetNamedObject("o11")
o12=enigma.GetNamedObject("o12")
o13=enigma.GetNamedObject("o13")
o14=enigma.GetNamedObject("o14")
o15=enigma.GetNamedObject("o15")
o16=enigma.GetNamedObject("o16")


xx=4
yy=6
xx2=10
yy2=2

direc=0
mv=0

function funccU()
if yy<2 then
if xx==7 then
yy=11
   move()
end
else
if xx<2 or xx>2 or yy<2 or yy>1 then
yy=yy-1
   move()
end
end
end

function funccR()
if xx<7 then
if xx<1 or xx>1 or yy<1 or yy>1 then
xx=xx+1
   move()
end
end
end

function funccD()
if yy>10 then
if xx==7 then
yy=1
   move()
end
else
yy=yy+1
   move()
end
end

function funccL()
if xx>1 then
if xx<3 or xx>3 or yy<1 or yy>1 then
xx=xx-1
   move()
end
end
end

pla=0
function funccP()
if direc==0 then
placx=xx
placy=yy-1
elseif direc==1 then
placx=xx+1
placy=yy
elseif direc==2 then
placx=xx
placy=yy+1
elseif direc==3 then
placx=xx-1
placy=yy
end
if pla<6 then
if placx>0 and placx<8 and placy>0 and placy<12 then
if placx<2 or placx>2 or placy<1 or placy>1 then
   set_stone( "st-rock1", placx, placy)
pla=pla+1
end
end
end
end

function funccX()
   for i=1,7 do
   for j=1,11 do
if i<2 or i>2 or j<1 or j>1 then
   enigma.KillStone(i,j)
end
end
end
pla=0
xx=4
yy=6
direc=0
end

function move()
if direc<3 then
direc=direc+1
else
direc=0
end
end

function funccU2()
if mv==0 then
if yy2>1 then
yy2=yy2-1
   move2()
end
elseif mv==1 then
if yy2>2 then
yy2=yy2-2
   move2()
end
end
end

function funccR2()
if mv==0 then
if xx2<12 then
xx2=xx2+1
   move2()
end
elseif mv==1 then
if xx2<11 then
xx2=xx2+2
   move2()
end
end
end

function funccD2()
if mv==0 then
if yy2<4 then
yy2=yy2+1
   move2()
end
elseif mv==1 then
if yy2<3 then
yy2=yy2+2
   move2()
end
end
end

function funccL2()
if mv==0 then
if xx2>9 then
xx2=xx2-1
   move2()
end
elseif mv==1 then
if xx2>10 then
xx2=xx2-2
   move2()
end
end
end

function move2()
if mv==0 then
mv=1
elseif mv==1 then
mv=0
end
end

function funccP2()
if yy2==1 then
if xx2==9 then
ox=o1
elseif xx2==10 then
ox=o2
elseif xx2==11 then
ox=o3
elseif xx2==12 then
ox=o4
end
elseif yy2==2 then
if xx2==9 then
ox=o5
elseif xx2==10 then
ox=o6
elseif xx2==11 then
ox=o7
elseif xx2==12 then
ox=o8
end
elseif yy2==3 then
if xx2==9 then
ox=o9
elseif xx2==10 then
ox=o10
elseif xx2==11 then
ox=o11
elseif xx2==12 then
ox=o12
end
elseif yy2==4 then
if xx2==9 then
ox=o13
elseif xx2==10 then
ox=o14
elseif xx2==11 then
ox=o15
elseif xx2==12 then
ox=o16
end
end
enigma.SendMessage(ox, "trigger", nil)
end