home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GameStar Special 2004 August
/
GSSH0804.iso
/
Geschicklichkeit
/
Enigma
/
Enigma-081.exe
/
data
/
levels
/
ralf03.lua
< prev
next >
Wrap
Text File
|
2003-03-28
|
5KB
|
217 lines
-- A level for Enigma
-- Name: Welcome to the machine
-- Filename: ralf03.lua
-- Copyright: (C) Mar 2003 Ralf Westram
-- Contact: amgine@reallysoft.de
-- License: GPL v2.0 or above
dofile(enigma.FindDataFile("levels/ralf.lua"))
--debug_mode()
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
first = 1
lightfloorface = "fl-sahara"
darkfloorface = "fl-tigris"
bluefloorface = "fl-bluegray"
stonefaces = { "st-rock1", "st-rock6", "st-rock2", "st-rock3"}
rotdirection = { 1, -1, 1, -1 }
switchface = "st-switch"
borderface = "st-rock5"
lightfloor = cell{floor={face = lightfloorface}}
border = cell{stone={face = borderface}}
--marble = cell{item={face = "ac-blackball", attr={player=0}, actor=1}}
marble = cell{actor={face="ac-blackball", attr={player=0}}}
test = 0 -- test layout
easy = 1 -- 1=easy 0=hard
mx,my = 1,1
if (test==0) then
floormap={
"** **",
"* *",
" ! ",
" !!! ",
" ! ",
"* *",
"** **"
}
stonemap={
" # ",
" ##### ",
"## ##",
" # O ",
" # ##",
" $# ## ",
" & # "
}
metamap={
"2413",
"4324",
"3112",
}
mx,my = 2,2
elseif (test==1) then
easy = 1
floormap={
"* ! *",
" ! ",
"!!!!!",
" ! ",
"* ! *"
}
stonemap={
" & & ",
" # ##",
" O ",
"#$ # ",
" # # "
}
metamap={
"4231",
"3421",
"1234",
"3142",
}
mx,my = 3,2
end
floorcells={}
floorcells["*"] = cell{parent = lightfloor}
floorcells[" "] = cell{floor={face = darkfloorface}}
floorcells["!"] = cell{floor={face = bluefloorface}}
-- ---------------
-- metamap
-- ---------------
usedmap = nil
usedcells = nil
currmetacell = nil
function draw_used_metamap_oriented(x,y,flipx,flipy,rotate)
draw_metamap_oriented(x,y,usedmap,usedcells,flipx, flipy,rotate)
end
metacellstate={1,2,3,4}
nextState={2,3,4,1} -- rotate
--nextState={2,1,4,3} -- toggle
function draw_metacell(x,y,metacellnum)
currmetacell = metacellnum --store for switch callback
draw_metamap_oriented(x,y,usedmap,usedcells,0,0,metacellstate[metacellnum])
end
metacells={}
metacells["1"] = cell{parent={{draw_metacell,1}}}
metacells["2"] = cell{parent={{draw_metacell,2}}}
metacells["3"] = cell{parent={{draw_metacell,3}}}
metacells["4"] = cell{parent={{draw_metacell,4}}}
function draw_my_metamap()
draw_map(0,0,metamap,metacells)
end
-- ----------------
-- rotation
-- ----------------
function rot(cellnum)
local oldstate = metacellstate[cellnum]
local newstate = oldstate + rotdirection[cellnum]
if (newstate < 1) then newstate = 4
elseif (newstate > 4) then newstate = 1
end
metacellstate[cellnum] = newstate
debug("rot cell #"..cellnum.." from state "..oldstate.." to "..newstate)
draw_my_metamap()
end
function rot1() rot(1) end
function rot2() rot(2) end
function rot3() rot(3) end
function rot4() rot(4) end
function rot0() error("illegal rotation callback (0)") end
function rot5() error("illegal rotation callback (5)") end
function add_oxyd(x,y) if (first==1) then oxyd(x,y) end end
function add_stone(x,y) set_stone(stonefaces[currmetacell],x,y) end
function rem(x,y) if (first==0) then enigma.KillStone(x,y) end end
function repby_switch(x,y)
rem(x,y)
set_stone(switchface,x,y,{action="callback", target="rot"..currmetacell})
end
function repby_stone(x,y)
rem(x,y)
set_stone(stonefaces[currmetacell],x,y)
end
function repby_stone_or_gap(x,y)
rem(x,y)
if (currmetacell ~= 2) then
set_stone(stonefaces[currmetacell],x,y)
end
end
stonecells={}
stonecells["O"]=cell{parent={{add_oxyd}}}
stonecells[" "]=cell{parent={{rem}}}
stonecells["#"]=cell{parent={{repby_stone}}}
stonecells["$"]=cell{parent={{repby_switch}}}
if (easy==1) then
stonecells["&"]=cell{parent={{repby_stone_or_gap}}}
else
stonecells["&"]= stonecells["#"]
end
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- build the level
mapw,maph = get_map_size(metamap)
blockw,blockh = get_map_size(stonemap)
blockw2,blockh2 = get_map_size(floormap)
if ((blockh ~= blockh2) or (blockw ~= blockw2)) then
error("floormap and stonemap must be of same size");
end
worldw,worldh = mapw*blockw+2,maph*blockh+2
create_world(worldw, worldh)
oxyd_default_flavor = "a"
enigma.ConserveLevel = FALSE
fill_world_func(lightfloor)
draw_border_func(border)
-- draw the floor
usedmap = floormap
usedcells = floorcells
draw_my_metamap()
-- draw the items
usedmap = stonemap
usedcells = stonecells
draw_my_metamap()
first = 0
document(4*blockw,1*blockh,"Sections which have the same color always turn at the same time and in the same way.")
oxyd_shuffle()
display.SetFollowMode(display.FOLLOW_SCROLLING)
marble(mx*blockw+0.5,my*blockh+0.5)