home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GameStar Special 2004 August
/
GSSH0804.iso
/
Geschicklichkeit
/
Enigma
/
Enigma-081.exe
/
data
/
levels
/
ralf12.lua
< prev
next >
Wrap
Text File
|
2003-09-21
|
4KB
|
174 lines
-- A level for Enigma
-- Name: -- puzzle meditation --
-- Filename: ralf12.lua
-- Copyright: (C) Jun 2003 Ralf Westram
-- Contact: amgine@reallysoft.de
-- License: GPL v2.0 or above
dofile(enigma.FindDataFile("levels/ralf.lua"))
--debug_mode()
level={
"!!#!@@########@@!#!!",
"!!+!@@ .... @@!+!!",
"#+++U **** U+++#",
"!!+# $$++*+$$ #+!!",
"@@T $ ++++ T@@",
"@@. *++ ++* .@@",
"#.b.***+ bb +***.b.#",
"@@. *++ ++* .@@",
"@@T ++++ $ T@@",
"!!+# $$+*++$$ #+!!",
"#+++U **** U+++#",
"!!+!@@ .... @@!+!!",
"!!#!@@########@@!#!!",
}
state={}
group={1,2,2,1,3,4,5,5,6,6,3,4,7,8,8,7} -- trigger->target
count={0,0,0,0,0,0,0,0} -- how many triggers of each group are active (2 exist per group)
difficult=nil
if (options.Difficulty==2) then difficult=1 end
triggers=0
targets=0
function trigger_group(num)
local target = enigma.GetNamedObject("target"..num)
enigma.SendMessage(target,"openclose",nil)
end
function trigger(num)
local newstate = 1-state[num]
local offset = 1
if (newstate==0) then offset=-1 end
local g = group[num]
if (count[g]==2) then
trigger_group(g) -- deactivate target
end
count[g] = count[g]+offset
if (count[g]==2) then
trigger_group(g) -- activate target
elseif (count[g]>2 or count[g]<0) then
error("group count overflow")
end
state[num] = newstate
end
function set_trigger(x,y)
triggers = triggers + 1
state[triggers] = 0
local funcn = "trig_"..triggers
dostring(funcn.." = function() trigger("..triggers..") end")
set_item("it-trigger",x,y,{action="callback",target=funcn});
end
function set_target(x,y,t)
targets = targets + 1
set_stone("st-door_b",x,y,{name="target"..targets,type="v"});
end
function set_targetv(x,y) set_target(x,y,"v") end
function set_targeth(x,y) set_target(x,y,"h") end
cells={}
cells[" "] = cell{floor="fl-hay"}
cells["!"] = cell{floor="fl-abyss"}
cells["#"] = cell{parent=cells[" "],stone="st-brick"}
cells["b"] = cell{parent=cells[" "],actor={"ac-whiteball-small", {player=0}}}
cells["."] = cell{parent={cells[" "],set_trigger}}
cells["T"] = cell{parent={cells[" "],set_targeth}}
cells["U"] = cell{parent={cells[" "],set_targetv}}
cells["o"] = cell{oxyd}
cells["w"] = cell{parent=cells[" "], item="it-magicwand"}
puzzles1 = {}
puzzles2 = {}
bigbricks = {}
cells["*"]=cell{parent={{add_multicell, puzzles1}}}
cells["+"]=cell{parent={{add_multicell, puzzles2}}}
cells["@"]=cell{parent={{add_multicell, bigbricks}}}
if (difficult) then
cells["$"]=cells["+"]
else
cells["$"]=cells[" "]
end
rs_create_world(level,cells)
render_puzzles(puzzles1)
render_puzzles(puzzles2, puzzle2)
render_puzzles(bigbricks, bigbrick)
function scrambleDiff(x,y,d) if (difficult) then enigma.AddScramble(x,y,d) end end
function scrambleEasy(x,y,d) if (not difficult) then enigma.AddScramble(x,y,d) end end
function scrambleBoth(x,y,d) enigma.AddScramble(x,y,d) end
-- tiles in corners:
enigma.SetScrambleIntensity(30)
scrambleBoth(2,3,"n")
scrambleBoth(3,2,"w")
scrambleBoth(2,9,"s")
scrambleBoth(3,10,"w")
scrambleBoth(17,3,"n")
scrambleBoth(16,2,"e")
scrambleBoth(17,9,"s")
scrambleBoth(16,10,"e")
-- tile(s) in center:
-- north
scrambleEasy(8,3,"e")
scrambleBoth(8,4,"n")
scrambleEasy(8,4,"e")
scrambleBoth(9,4,"n")
scrambleBoth(11,4,"w")
scrambleBoth(11,4,"n")
-- west
scrambleEasy(7,5,"s")
scrambleBoth(7,5,"w")
scrambleBoth(7,7,"n")
scrambleBoth(7,7,"w")
-- east
scrambleBoth(12,5,"s")
scrambleBoth(12,5,"e")
scrambleEasy(12,7,"n")
scrambleBoth(12,7,"e")
-- south
scrambleBoth(8,8,"s")
scrambleBoth(8,8,"e")
scrambleBoth(10,8,"s")
scrambleEasy(11,8,"w")
scrambleBoth(11,8,"s")
scrambleEasy(11,9,"w")
-- outer corners
scrambleDiff(13,3,"w")
scrambleDiff(6,3,"e")
scrambleDiff(6,3,"s")
scrambleDiff(6,9,"e")
scrambleDiff(13,9,"w")
scrambleDiff(13,9,"n")
oxyd_shuffle()
-- Added hollows (dh)
set_item("it-hollow", 2, 2)
set_item("it-hollow", 2, 10)
set_item("it-hollow", 17, 2)
set_item("it-hollow", 17, 10)