-- Copyright (c) 2004 Jacob Scott
-- License: GPL v2.0 or above
-- Enigma Level: Variety Pack

rooms_wide=3
rooms_high=3

levelw=1+(19*rooms_wide)
levelh=1+(12*rooms_high)

create_world( levelw, levelh)
enigma.ConserveLevel=FALSE

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 =="W" then
			set_stone( "st-greenbrown", i-1, line)
		   set_floor("fl-water",i-1,line)
		elseif c =="S" then
			set_stone( "st-greenbrown", i-1, line)
		   set_floor("fl-space",i-1,line)
		elseif c =="q" then
			set_stone( "st-actorimpulse_invisible", i-1, line)
		elseif c =="%" then
			set_stone( "st-rock6", i-1, line)
			set_floor("fl-space",i-1,line)
		elseif c == "o" then
			oxyd( i-1, line)
		elseif c == "O" then
			oxyd( i-1, line)
		   set_floor("fl-water",i-1,line)
		elseif c == "&" then
			oxyd( i-1, line)
		   set_floor("fl-space",i-1,line)
		elseif c == "@" then
			oxyd( i-1, line)
			abyss(i-1,line)
		elseif c == "*" then
			set_stone( "st-brownie", i-1, line)
                elseif c == "!" then
			abyss(i-1,line)
		elseif c == "~" then
		   set_floor("fl-water",i-1,line)
		elseif c == "m" then
		   set_floor("fl-metal",i-1,line)
		elseif c=="z" then
		   set_actor("ac-blackball", i-1,line+.5, {player=0})
		elseif c=="y" then
		   set_actor("ac-whiteball", i-1,line+.5, {player=1})
		elseif c == "g" then
			draw_stones("st-grate1",{i-1,line}, {1,1}, 1)
		elseif c == "Q" then
			draw_stones("st-grate1",{i-1,line}, {1,1}, 1)
			abyss(i-1,line)
		elseif c == "a" then
			draw_stones("st-grate1",{i-1,line}, {1,1}, 1)
		   set_floor("fl-metal",i-1,line)
		elseif c == "G" then
			draw_stones("st-grate1",{i-1,line}, {1,1}, 1)
			abyss(i-1,line)
		elseif c=="+" then
			set_stone( "st-wood", i-1, line)
		elseif c=="=" then
			set_floor("fl-space",i-1,line)
		elseif c=="R" then
		   set_actor("ac-rotor", i-.5,line+.5, {range=7, force=30})
		elseif c == "-" then
		   puzzle(i-1,line,PUZ_0101)
		elseif c == "_" then
		   puzzle(i-1,line,PUZ_0101)
			abyss(i-1,line)
		elseif c == "i" then
		   puzzle(i-1,line,PUZ_1010)
		elseif c == "/" then
		   puzzle(i-1,line,PUZ_0110)
		elseif c == "`" then
		   puzzle(i-1,line,PUZ_0011)
		elseif c == "^" then
		   puzzle(i-1,line,PUZ_1001)
		elseif c == ";" then
		   puzzle(i-1,line,PUZ_1100)
		elseif c == "2" then
		   puzzle(i-1,line,PUZ_1000)
		elseif c == "4" then
		   puzzle(i-1,line,PUZ_0100)
		elseif c == "6" then
		   puzzle(i-1,line,PUZ_0001)
		elseif c == "8" then
		   puzzle(i-1,line,PUZ_0010)
		elseif c == "$" then
		   puzzle(i-1,line,PUZ_0000)
		elseif c == "5" then
		   puzzle(i-1,line,PUZ_0100)
		   abyss(i-1,line)
		elseif c=="U" then
                    set_stone("st-oneway-n", i-1,line)
--		elseif c=="R" then
-- 			set_stone("st-oneway", i-1,line, {orientation=enigma.EAST})
		elseif c=="D" then
			set_stone("st-oneway-s", i-1,line)	
		elseif c=="L" then
 			set_stone("st-oneway-w", i-1,line)
		elseif c=="?" then
		   fill_floor("fl-ice_001",i-2,line,19,12)
		elseif c=="b" then
			yy1( "black",  i-1, line)
		elseif c=="l" then
			set_attrib(laser(i-1,line, TRUE, WEST), "name", "laser1")
		   set_floor("fl-water",i-1,line)
		elseif c=="<" then
			set_attrib(laser(i-1,line, TRUE, EAST), "name", "laser2")
		elseif c==">" then
			set_attrib(laser(i-1,line, TRUE, WEST), "name", "laser3")
		elseif c=="f" then	
			set_item("it-floppy", i-1,line)
		elseif c=="F" then
			set_stone( "st-floppy", i-1,line,{action="callback",target="funcc1"})
		elseif c=="A" then
		   set_stone("st-door_a",i-1,line,{name="door1"})
		elseif c=="B" then
		   set_stone("st-door_a",i-1,line,{name="door2"})
		elseif c=="C" then
		   set_stone("st-door_a",i-1,line,{name="door3"})
	     end
	end	
     end

function yy1( color, x, y)
        stone = format( "st-%s4", color)
        set_stone( stone, x, y)
end

renderLine(00,"############################oo#########SSSSSSSSSSSSSSSSSSS")
renderLine(01,"#                  #    <        >    #==================S")
renderLine(02,"#~~~~~~~~~         #      DUUUUD      #==m============mm=S")
renderLine(03,"#~o     +~         #        RR        #===============mm=S")
renderLine(04,"#~~~~~~~~~         #                  #========%%========S")
renderLine(05,"#                  #                  #==================S")
renderLine(06,"#                  *                  +a===%=m==========%S")
renderLine(07,"#        qq        #                  #===%========%=====S")
renderLine(08,"#                  #       ~~~~       #==%==========%====S")
renderLine(09,"#                  #                  #==============%===S")
renderLine(10,"#                  #                  #==m=====mm========S")
renderLine(11,"#                  #                  #========mm==%====&S")
renderLine(12,"#########  #################gg#################  #########")
renderLine(13,"#o             ~~  #f                 #       #          #")
renderLine(14,"#              *~  #                  #       ########## #")
renderLine(15,"#              ~~  #                  # gg    + + + +  # #")
renderLine(16,"#              ~~  #                  # +++  ggggggggg## #")
renderLine(17,"#              ~~  #                  #  g+  ~~~~~~~~~   #")
renderLine(18,"#g~~~~~~~~~~~~~l~  g         z        g+ +   ~~~~~~~~Wo#o#")
renderLine(19,"#              ~~  #                  #  g+  ~~~~~~~~~   #")
renderLine(20,"#              ~~  #                  # +++  ggggggggg## #")
renderLine(21,"#              ~~  #                  # gg    + + + +  # #")
renderLine(22,"#              *~  #                  #       ########## #")
renderLine(23,"#o             ~~  #                 F#       #          #")
renderLine(24,"#########  #################AB#################  #########")
renderLine(25,"#? /-----$--6      #                  #    !!      !!!!#o#")
renderLine(26,"#  i               #  +  +  +  +  +   #    !!#     !!!! 8#")
renderLine(27,"#  i               #!!!!!!!!!!!!!!!!!!#    G5$--$--__`g i#")
renderLine(28,"#  i               #QQQQQQQQ!!QQQQQQQQ#    !! !!  !!!i  i#")
renderLine(29,"#  i               #!!!!!!!!!!!!!!!!!!#    !! !!# !!!i  i#")
renderLine(30,"#  $               g   +!!!!!!!!!!+   g    !!D!!!U!! $C $#")
renderLine(31,"#  i               # +++!!!!!!!!!!+++ #              2# i#")
renderLine(32,"#  i               #   +!!!!!!!!!!+   #               # i#")
renderLine(33,"#  i               #!!!!!@!!!!!!@!!!!!#              ## i#")
renderLine(34,"#  i               #!!!!!!!!!!!!!!!!!!#              ## i#")
renderLine(35,"#o ;----------------__________________------------------^#")
renderLine(36,"##########################################################")

oxyd_shuffle()

ff1=0
function funcc1()
if ff1==0 then
   SendMessage("door1", "open")
   SendMessage("door2", "open")
   SendMessage("door3", "close")
ff1=1
elseif ff1==1 then
    SendMessage("door1","close")
    SendMessage("door2","close")
    SendMessage("door3","open")
ff1=0
end
end