-- Sven Siggelkow 2003
-- ESPRIT #081

levelw = 39
levelh = 21
create_world(levelw, levelh)
display.SetFollowMode(display.FOLLOW_SCROLLING)
oxyd_default_flavor = "a"
set_actor("ac-blackball", 1.5,1.5, {player=0})
fill_floor("fl-leaves",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-brick", i-1,line)
      elseif c=="." then
         set_item("it-extralife",i-1,line)
      elseif c=="~" then
         set_item("it-crack0",i-1,line)
      elseif c=="1" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="s1"})
      elseif c=="2" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="s2"})
      elseif c=="3" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="s3"})
      elseif c=="4" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="s4"})
      elseif c=="5" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="s5"})
      elseif c=="6" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="s6"})
      elseif c=="7" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="s7"})
      elseif c=="8" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="s8"})
      elseif c=="9" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="s9"})
      elseif c=="0" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="s0"})
      elseif c=="A" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="sA"})
      elseif c=="B" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="sB"})
      elseif c=="C" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="sC"})
      elseif c=="D" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="sD"})
      elseif c=="E" then
	 set_stone("st-fourswitch", i-1,line, {action="callback", target="sE"})
      elseif c=="<" then
         set_stone("st-oneway_black-w",i-1,line)
      elseif c==">" then
         set_stone("st-oneway_black-e",i-1,line)
      elseif c=="v" then
         set_stone("st-oneway_black-s",i-1,line)
      elseif c=="^" then
         set_stone("st-oneway_black-n",i-1,line)
      elseif c=="O" then
	 oxyd(i-1,line)         
        end
    end  
end
--               012345678901234567890123456789012345678
renderLine(00 , "#######################################")
renderLine(01 , "#     ##     ##         ##     ##     #")
renderLine(02 , "#     ##     ##         ##     ##     #")
renderLine(03 , "#  1  ><  2  ><    3    ><  4  ><  5~ #")
renderLine(04 , "#     ##     ##         ##  ~  ##     #")  
renderLine(05 , "#     O#  ~  #O         #O     ##     #")
renderLine(06 , "###v######v########v########v######v###")
renderLine(07 , "###^######^########^########^######^###")
renderLine(08 , "#     ##     ##         ##     ##     #")
renderLine(09 , "#  ~  ## ~   ##         ##     ##     #")
renderLine(10 , "#  6  ><  7  ><    8    ><  9~ ><  0  #")
renderLine(11 , "#     ##     ##         ##     ##   ~ #")
renderLine(12 , "#     ##     O#         O#     ##     #") 
renderLine(13 , "###v######v########v########v######v###")
renderLine(14 , "###^######^########^########^######^###")
renderLine(15 , "#    .##     #O         ##     ##     #")
renderLine(16 , "#     ## ~   ##   ~     ##     ##     #")
renderLine(17 , "#  A  ><  B  ><    C    ><  D  ><  E  #")  
renderLine(18 , "#     ##     ##         ##   ~ ##     #")
renderLine(19 , "#     O#     ##         ##.    #O     #")
renderLine(20 , "#######################################")
--               012345678901234567890123456789012345678
                               
-- var        1 2 3 4 5 6 7 8 9 0 A B C D E 
local flag = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
-- I          1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 


function s1()                               
%flag[1] = %flag[1] + 1
if %flag[1] == 4 then %flag[1] = 0 end 
if %flag[1] == 0 then
    set_stone("st-oneway_black-w", 7,3)
    set_stone("st-oneway_black-n", 3,7)
 elseif %flag[1] == 1 then
    set_stone("st-oneway_black-e", 7,3)
    set_stone("st-oneway_black-n", 3,7)
 elseif %flag[1] == 2 then
    set_stone("st-oneway_black-w", 7,3)
    set_stone("st-oneway_black-s", 3,7)
 elseif %flag[1] == 3 then
    set_stone("st-oneway_black-w", 7,3)
    set_stone("st-oneway_black-n", 3,7)
 end
end                              
 
function s2()                               
%flag[2] = %flag[2] + 1
if %flag[2] == 4 then %flag[2] = 0 end
if %flag[2] == 0 then
    set_stone("st-oneway_black-w", 14,3)
    set_stone("st-oneway_black-n", 10,7)
    set_stone("st-oneway_black-e", 6 ,3)
 elseif %flag[2] == 1 then
    set_stone("st-oneway_black-e", 14,3)
    set_stone("st-oneway_black-n", 10,7)
    set_stone("st-oneway_black-e", 6 ,3)
 elseif %flag[2] == 2 then
    set_stone("st-oneway_black-w", 14,3)
    set_stone("st-oneway_black-s", 10,7)
    set_stone("st-oneway_black-e", 6 ,3)
 elseif %flag[2] == 3 then
    set_stone("st-oneway_black-w", 14,3)
    set_stone("st-oneway_black-n", 10,7)
    set_stone("st-oneway_black-w", 6 ,3)   
 end
end 

function s3()                               
%flag[3] = %flag[3] + 1
if %flag[3] == 4 then %flag[3] = 0 end
if %flag[3] == 0 then
    set_stone("st-oneway_black-w", 25,3)
    set_stone("st-oneway_black-n", 19,7)
    set_stone("st-oneway_black-e", 13,3)
 elseif %flag[3] == 1 then
    set_stone("st-oneway_black-e", 25,3)
    set_stone("st-oneway_black-n", 19,7)
    set_stone("st-oneway_black-e", 13,3)
 elseif %flag[3] == 2 then
    set_stone("st-oneway_black-w", 25,3)
    set_stone("st-oneway_black-s", 19,7)
    set_stone("st-oneway_black-e", 13,3)
 elseif %flag[3] == 3 then
    set_stone("st-oneway_black-w", 25,3)
    set_stone("st-oneway_black-n", 19,7)
    set_stone("st-oneway_black-w", 13,3)   
 end
end 

function s4()                               
%flag[4] = %flag[4] + 1
if %flag[4] == 4 then %flag[4] = 0 end
if %flag[4] == 0 then
    set_stone("st-oneway_black-w", 32,3)
    set_stone("st-oneway_black-n", 28,7)
    set_stone("st-oneway_black-e", 24,3)
 elseif %flag[4] == 1 then
    set_stone("st-oneway_black-e", 32,3)   
    set_stone("st-oneway_black-n", 28,7)   
    set_stone("st-oneway_black-e", 24,3)   
 elseif %flag[4] == 2 then
    set_stone("st-oneway_black-w", 32,3)
    set_stone("st-oneway_black-s", 28,7)
    set_stone("st-oneway_black-e", 24,3)
 elseif %flag[4] == 3 then
    set_stone("st-oneway_black-w", 32,3)
    set_stone("st-oneway_black-n", 28,7)
    set_stone("st-oneway_black-w", 24,3)   
 end
end 

function s5()                               
%flag[5] = %flag[5] + 1
if %flag[5] == 4 then %flag[5] = 0 end
if %flag[5] == 0 then
    set_stone("st-oneway_black-n", 35,7)
    set_stone("st-oneway_black-e", 31,3)
 elseif %flag[5] == 1 then
    set_stone("st-oneway_black-n", 35,7)
    set_stone("st-oneway_black-e", 31,3)
 elseif %flag[5] == 2 then
    set_stone("st-oneway_black-s", 35,7)
    set_stone("st-oneway_black-e", 31,3)
 elseif %flag[5] == 3 then
    set_stone("st-oneway_black-n", 35,7)
    set_stone("st-oneway_black-w", 31,3)   
 end
end 

function s6()                               
%flag[6] = %flag[6] + 1
if %flag[6] == 4 then %flag[6] = 0 end
if %flag[6] == 0 then
    set_stone("st-oneway_black-n", 3,6 )
    set_stone("st-oneway_black-w", 7,10)
    set_stone("st-oneway_black-n", 3,14)
 elseif %flag[6] == 1 then
    set_stone("st-oneway_black-s", 3,6 )
    set_stone("st-oneway_black-e", 7,10)
    set_stone("st-oneway_black-n", 3,14)
 elseif %flag[6] == 2 then
    set_stone("st-oneway_black-s", 3,6 )
    set_stone("st-oneway_black-w", 7,10)
    set_stone("st-oneway_black-s", 3,14)
 elseif %flag[6] == 3 then
    set_stone("st-oneway_black-s", 3,6 )
    set_stone("st-oneway_black-w", 7,10)
    set_stone("st-oneway_black-n", 3,14)
 end
end 

function s7()                               
%flag[7] = %flag[7] + 1
if %flag[7] == 4 then %flag[7] = 0 end
if %flag[7] == 0 then
    set_stone("st-oneway_black-n", 10,6 )
    set_stone("st-oneway_black-w", 14,10)
    set_stone("st-oneway_black-n", 10,14)
    set_stone("st-oneway_black-e",  6,10)
 elseif %flag[7] == 1 then
    set_stone("st-oneway_black-s", 10,6 )
    set_stone("st-oneway_black-e", 14,10)
    set_stone("st-oneway_black-n", 10,14)
    set_stone("st-oneway_black-e",  6,10)
 elseif %flag[7] == 2 then
    set_stone("st-oneway_black-s", 10,6 )
    set_stone("st-oneway_black-w", 14,10)
    set_stone("st-oneway_black-s", 10,14)
    set_stone("st-oneway_black-e",  6,10)
 elseif %flag[7] == 3 then
    set_stone("st-oneway_black-s", 10,6 )
    set_stone("st-oneway_black-w", 14,10)
    set_stone("st-oneway_black-n", 10,14)
    set_stone("st-oneway_black-w",  6,10)   
 end
end 

function s8()                               
%flag[8] = %flag[8] + 1
if %flag[8] == 4 then %flag[8] = 0 end
if %flag[8] == 0 then
    set_stone("st-oneway_black-n", 19,6 )
    set_stone("st-oneway_black-w", 25,10)
    set_stone("st-oneway_black-n", 19,14)
    set_stone("st-oneway_black-e", 13,10)
 elseif %flag[8] == 1 then
    set_stone("st-oneway_black-s", 19,6 )
    set_stone("st-oneway_black-e", 25,10)
    set_stone("st-oneway_black-n", 19,14)
    set_stone("st-oneway_black-e", 13,10)
 elseif %flag[8] == 2 then
    set_stone("st-oneway_black-s", 19,6 )
    set_stone("st-oneway_black-w", 25,10)
    set_stone("st-oneway_black-s", 19,14)
    set_stone("st-oneway_black-e", 13,10)
 elseif %flag[8] == 3 then
    set_stone("st-oneway_black-s", 19,6 )
    set_stone("st-oneway_black-w", 25,10)
    set_stone("st-oneway_black-n", 19,14)
    set_stone("st-oneway_black-w", 13,10)   
 end
end 

function s9()                               
%flag[9] = %flag[9] + 1
if %flag[9] == 4 then %flag[9] = 0 end
if %flag[9] == 0 then
    set_stone("st-oneway_black-n", 28, 6)
    set_stone("st-oneway_black-w", 32,10)
    set_stone("st-oneway_black-n", 28,14)
    set_stone("st-oneway_black-e", 24,10)
 elseif %flag[9] == 1 then
    set_stone("st-oneway_black-s", 28, 6)
    set_stone("st-oneway_black-e", 32,10)
    set_stone("st-oneway_black-n", 28,14)
    set_stone("st-oneway_black-e", 24,10)
 elseif %flag[9] == 2 then
    set_stone("st-oneway_black-s", 28, 6)
    set_stone("st-oneway_black-w", 32,10)
    set_stone("st-oneway_black-s", 28,14)
    set_stone("st-oneway_black-e", 24,10)
 elseif %flag[9] == 3 then
    set_stone("st-oneway_black-s", 28, 6)
    set_stone("st-oneway_black-w", 32,10)
    set_stone("st-oneway_black-n", 28,14)
    set_stone("st-oneway_black-w", 24,10)   
 end
end 

function s0()                               
%flag[10] = %flag[10] + 1
if %flag[10] == 4 then %flag[10] = 0 end
if %flag[10] == 0 then
    set_stone("st-oneway_black-n", 35, 6)
    set_stone("st-oneway_black-n", 35,14)
    set_stone("st-oneway_black-e", 31,10)
 elseif %flag[10] == 1 then
    set_stone("st-oneway_black-s", 35, 6)
    set_stone("st-oneway_black-n", 35,14)
    set_stone("st-oneway_black-e", 31,10)
 elseif %flag[10] == 2 then
    set_stone("st-oneway_black-s", 35, 6)
    set_stone("st-oneway_black-s", 35,14)
    set_stone("st-oneway_black-e", 31,10)
 elseif %flag[10] == 3 then
    set_stone("st-oneway_black-s", 35, 6)
    set_stone("st-oneway_black-n", 35,14)
    set_stone("st-oneway_black-w", 31,10)   
 end
end 

function sA()                               
%flag[11] = %flag[11] + 1
if %flag[11] == 4 then %flag[11] = 0 end
if %flag[11] == 0 then
    set_stone("st-oneway_black-n",  3,13)
    set_stone("st-oneway_black-w",  7,17)
 elseif %flag[11] == 1 then
    set_stone("st-oneway_black-s",  3,13)
    set_stone("st-oneway_black-e",  7,17)
 elseif %flag[11] == 2 then
    set_stone("st-oneway_black-s",  3,13)
    set_stone("st-oneway_black-w",  7,17)
 elseif %flag[11] == 3 then
    set_stone("st-oneway_black-s",  3,13)
    set_stone("st-oneway_black-w",  7,17)
 end
end 

function sB()                               
%flag[12] = %flag[12] + 1
if %flag[12] == 4 then %flag[12] = 0 end
if %flag[12] == 0 then
    set_stone("st-oneway_black-n", 10,13)
    set_stone("st-oneway_black-w", 14,17)
    set_stone("st-oneway_black-e",  6,17)
 elseif %flag[12] == 1 then
    set_stone("st-oneway_black-s", 10,13)
    set_stone("st-oneway_black-e", 14,17)
    set_stone("st-oneway_black-e",  6,17)
 elseif %flag[12] == 2 then
    set_stone("st-oneway_black-s", 10,13)
    set_stone("st-oneway_black-w", 14,17)
    set_stone("st-oneway_black-e",  6,17)
 elseif %flag[12] == 3 then
    set_stone("st-oneway_black-s", 10,13)
    set_stone("st-oneway_black-w", 14,17)
    set_stone("st-oneway_black-w",  6,17)   
 end
end 

function sC()                               
%flag[13] = %flag[13] + 1
if %flag[13] == 4 then %flag[13] = 0 end
if %flag[13] == 0 then
    set_stone("st-oneway_black-n", 19,13)
    set_stone("st-oneway_black-w", 25,17)
    set_stone("st-oneway_black-e", 13,17)
 elseif %flag[13] == 1 then
    set_stone("st-oneway_black-s", 19,13)
    set_stone("st-oneway_black-e", 25,17)
    set_stone("st-oneway_black-e", 13,17)
 elseif %flag[13] == 2 then
    set_stone("st-oneway_black-s", 19,13)
    set_stone("st-oneway_black-w", 25,17)
    set_stone("st-oneway_black-e", 13,17)
 elseif %flag[13] == 3 then
    set_stone("st-oneway_black-s", 19,13)
    set_stone("st-oneway_black-w", 25,17)
    set_stone("st-oneway_black-w", 13,17)   
 end
end 

function sD()                               
%flag[14] = %flag[14] + 1
if %flag[14] == 4 then %flag[14] = 0 end
if %flag[14] == 0 then
    set_stone("st-oneway_black-n", 28,13)
    set_stone("st-oneway_black-w", 32,17)
    set_stone("st-oneway_black-e", 24,17)
 elseif %flag[14] == 1 then
    set_stone("st-oneway_black-s", 28,13)
    set_stone("st-oneway_black-e", 32,17)
    set_stone("st-oneway_black-e", 24,17)
 elseif %flag[14] == 2 then
    set_stone("st-oneway_black-s", 28,13)
    set_stone("st-oneway_black-w", 32,17)
    set_stone("st-oneway_black-e", 24,17)
 elseif %flag[14] == 3 then
    set_stone("st-oneway_black-s", 28,13)
    set_stone("st-oneway_black-w", 32,17)
    set_stone("st-oneway_black-w", 24,17)   
 end
end 

function sE()                               
%flag[15] = %flag[15] + 1
if %flag[15] == 4 then %flag[15] = 0 end
if %flag[15] == 0 then
    set_stone("st-oneway_black-n", 35,13)
    set_stone("st-oneway_black-e", 31,17)
 elseif %flag[15] == 1 then
    set_stone("st-oneway_black-s", 35,13)
    set_stone("st-oneway_black-e", 31,17)
 elseif %flag[15] == 2 then
    set_stone("st-oneway_black-s", 35,13)
    set_stone("st-oneway_black-e", 31,17)
 elseif %flag[15] == 3 then        
    set_stone("st-oneway_black-s", 35,13)
    set_stone("st-oneway_black-w", 31,17)   
 end
end 


oxyd_shuffle()
