home *** CD-ROM | disk | FTP | other *** search
/ GameStar Special 2004 August / GSSH0804.iso / Geschicklichkeit / Enigma / Enigma-081.exe / data / init.lua < prev    next >
Text File  |  2003-06-26  |  10KB  |  390 lines

  1. ------------------------------------------------------------------------
  2. -- Copyright (C) 2002,2003 Daniel Heck
  3. --
  4. -- This program is free software; you can redistribute it and/or
  5. -- modify it under the terms of the GNU General Public License
  6. -- as published by the Free Software Foundation; either version 2
  7. -- of the License, or (at your option) any later version.
  8. --
  9. -- This program is distributed in the hope that it will be useful,
  10. -- but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. -- GNU General Public License for more details.
  13. --
  14. -- You should have received a copy of the GNU General Public License along
  15. -- with this program; if not, write to the Free Software Foundation, Inc.,
  16. -- 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  17. --
  18. -- $Id: init.lua,v 1.26 2003/06/26 07:15:13 reallysoft Exp $
  19. ------------------------------------------------------------------------
  20.  
  21. TRUE = 1
  22. FALSE = 0
  23.  
  24. EASY = 0
  25. HARD = 1
  26.  
  27. ----------------------
  28. -- Global variables --
  29. ----------------------
  30.  
  31. level_width = 0
  32. level_height = 0
  33.  
  34. oxyd_default_flavor = "b"       -- Default flavor for oxyd stones.
  35. oxyd_count = 0
  36. oxyd_current_color = 0
  37.  
  38. DefaultAttribs = {}
  39.  
  40. ---------------------
  41. -- Helper routines --
  42. ---------------------
  43.  
  44. function PrintTable(t)
  45.     for i,v in t do
  46.         if type(v)=="table" then
  47.             print (i.." - "..v[1]..","..v[2])
  48.         else
  49.             print (i.." - "..v)
  50.         end
  51.     end
  52. end
  53.  
  54. function Require(filename)
  55.     dofile(enigma.FindDataFile(filename))
  56. end
  57.  
  58.  
  59. ----------------------------------
  60. -- Routines for creating levels --
  61. ----------------------------------
  62.  
  63. function CreateWorld(w, h)
  64.     oxyd_default_flavor = "b"
  65.     oxyd_count = 0
  66.     oxyd_current_color = 0
  67.     DefaultAttribs = {}
  68.  
  69.     level_width = w
  70.     level_height = h
  71.     world.Create(w, h)
  72. end
  73.  
  74.  
  75. function SetDefaultAttribs(objname, attribs)
  76.     local list = DefaultAttribs[objname]
  77.     if list then
  78.         for key,val in attribs do list[key] = val end
  79.     else
  80.         DefaultAttribs[objname]= attribs
  81.     end
  82. end
  83.  
  84. function SetAttrib(obj, key,val)
  85.     if key == "name" then
  86.         enigma.NameObject(obj, val)
  87.     end
  88.     enigma.SetAttrib(obj, key, val)
  89. end
  90. GetAttrib = enigma.GetAttrib
  91.  
  92. function set_attribs(obj, attrs)
  93.     if not attrs then return end
  94.     for key,val in attrs do
  95.     set_attrib(obj, key, val)
  96.     end
  97. end
  98.  
  99. function MakeObject(name, attrs)
  100.     local obj = enigma.MakeObject(name)
  101.     local a=DefaultAttribs[name]
  102.     if a then set_attribs(obj, a) end
  103.     set_attribs(obj, attrs)
  104.     return obj
  105. end
  106.  
  107. function set_floor(name, x, y, attrs)
  108.     local obj = make_object(name, attrs)
  109.     enigma.SetFloor(x,y,obj)
  110.     return obj
  111. end
  112. function set_item(name, x, y, attrs)
  113.     local obj = make_object(name, attrs)
  114.     enigma.SetItem(x,y,obj)
  115.     return obj
  116. end
  117. function set_stone(name, x,y, attrs)
  118.     local obj=make_object(name, attrs)
  119.     enigma.SetStone(x,y,obj)
  120.     return obj
  121. end
  122.  
  123. kill_stone = enigma.KillStone
  124.  
  125. function AddRubberBand(obj1,obj2, strength,length)
  126.     enigma.AddRubberBand(obj1,obj2, strength or 10, length or 2)
  127. end
  128.  
  129. function fill_floor(name, x0,y0, w,h)
  130.     if x0 == nil then x0 = 0 end
  131.     if y0 == nil then y0 = 0 end
  132.     if w  == nil then w  = level_width end
  133.     if h  == nil then h  = level_height end
  134.     for y=y0,y0+h-1 do
  135.     for x=x0,x0+w-1 do set_floor(name, x, y) end
  136.     end
  137. end
  138.  
  139. function fill_items(name, x0,y0,w,h)
  140.     for y=y0,y0+h-1 do
  141.     for x=x0,x0+w-1 do set_item(name, x, y) end
  142.     end
  143. end
  144.  
  145. function fill_stones(name, x0,y0, w,h)
  146.     for y=y0,y0+h-1 do
  147.         for x=x0,x0+w-1 do set_stone(name, x, y) end
  148.     end
  149. end
  150.  
  151. function draw_floor(name, xy0, xystep, n, attrs)
  152.     local x,y = xy0[1],xy0[2]
  153.     for i=1,n do
  154.     set_floor(name, x, y, attrs)
  155.     x = x+xystep[1]
  156.     y = y+xystep[2]
  157.     end
  158. end
  159.  
  160. function draw_checkerboard_floor( name1, name2, x, y, w, h, attrs)
  161.     for i=1,h do
  162.         for j=1,w do
  163.         if mod( i,2) == mod( j,2) then
  164.             set_floor( name1, x+j-1 ,x+i-1, attrs)
  165.         else
  166.             set_floor( name2, x+j-1 ,x+i-1, attrs)
  167.             end
  168.     end
  169.     end
  170. end
  171.  
  172. function draw_items(name, xy0, xystep, n, attrs)
  173.     local x,y = xy0[1],xy0[2]
  174.     for i=1,n do
  175.     set_item(name, x, y, attrs)
  176.     x = x+xystep[1]
  177.     y = y+xystep[2]
  178.     end
  179. end
  180.  
  181. function draw_stones(name, xy0, xystep, n, attrs)
  182.     local x,y = xy0[1],xy0[2]
  183.     for i=1,n do
  184.     set_stone(name, x, y, attrs)
  185.     x = x+xystep[1]
  186.     y = y+xystep[2]
  187.     end
  188. end
  189.  
  190. function draw_border(stonename, x0, y0, w, h)
  191.     if x0 == nil then x0 = 0 end
  192.     if y0 == nil then y0 = 0 end
  193.     if w  == nil then w  = level_width end
  194.     if h  == nil then h  = level_height end
  195.     draw_stones(stonename, {x0,y0}, {1,0}, w)
  196.     draw_stones(stonename, {x0,y0+h-1},{1,0}, w)
  197.     draw_stones(stonename, {x0,y0}, {0,1}, h)
  198.     draw_stones(stonename, {x0+w-1,y0},{0,1}, h)
  199. end
  200.  
  201. function set_stones(name, poslist, attrs)
  202.     for i,xy in poslist do
  203.     set_stone(name, xy[1], xy[2], attrs)
  204.     end
  205. end
  206.  
  207. function set_actor(name, x, y, attrs)
  208.     local obj=make_object(name, attrs)
  209.     enigma.SetActor(x, y,obj)
  210.     return obj
  211. end
  212.  
  213. ---------------------------------------------
  214. -- Creation of particular kinds of objects --
  215. ---------------------------------------------
  216. function fakeoxyd(x,y) return set_stone("st-fakeoxyd",x,y) end
  217.  
  218.  
  219. -- Create an oxyd stone with the current default flavor.
  220. function oxyd(x,y)
  221.     set_stone("st-oxyd",x,y, {
  222.                   flavor=oxyd_default_flavor,
  223.                   color=""..oxyd_current_color
  224.               })
  225.     oxyd_count = oxyd_count +1
  226.     if oxyd_count == 2 then
  227.         oxyd_count = 0
  228.         oxyd_current_color = oxyd_current_color + 1
  229.     end
  230. end
  231.  
  232. -- Shuffle the colors of all oxyd stones in the current landscape.
  233. function oxyd_shuffle()
  234.     enigma.SendMessage(enigma.GetObjectTemplate("st-oxyd"), "shuffle", nil)
  235. end
  236.  
  237. -- Close all oxyd stones in the current landscape
  238. function oxyd_closeall()
  239.     enigma.SendMessage(enigma.GetObjectTemplate("st-oxyd"), "closeall", nil)
  240. end
  241.  
  242. function oneway(x,y,orient)
  243.     return set_stone("st-oneway",x,y,{orientation=orient})
  244. end
  245. function laser(x,y,is_on,dir)
  246.     return set_stone("st-laser",x,y,{on=is_on, dir=dir})
  247. end
  248.  
  249. function mirrorp(x,y,movable, transp,orient)
  250.     return set_stone("st-pmirror", x, y, {movable=movable, transparent=transp,
  251.                          orientation=orient})
  252. end
  253. function mirror3(x,y,movable, transp, orient)
  254.     return set_stone("st-3mirror", x, y, {movable=movable, transparent=transp,
  255.                          orientation = orient})
  256. end
  257.  
  258. PUZ_0000=1                      -- hollow
  259. PUZ_0001=2                      -- w
  260. PUZ_0010=3                      -- s
  261. PUZ_0011=4                      -- sw
  262. PUZ_0100=5                      -- e
  263. PUZ_0101=6                      -- ew
  264. PUZ_0110=7                      -- es
  265. PUZ_0111=8                      -- esw
  266. PUZ_1000=9                      -- n
  267. PUZ_1001=10                     -- nw
  268. PUZ_1010=11                     -- ns
  269. PUZ_1011=12                     -- nsw
  270. PUZ_1100=13                     -- ne
  271. PUZ_1101=14                     -- new
  272. PUZ_1110=15                     -- nes
  273. PUZ_1111=16                     -- nesw
  274.  
  275. -- functions using puzzle-style tiles:
  276.  
  277. function puzzle(x, y, conn)
  278.     return set_stone("st-puzzle", x,y, {connections=conn})
  279. end
  280. function puzzle2(x, y, conn)
  281.     return set_stone("st-puzzle", x,y, {connections=conn,oxyd=1})
  282. end
  283. function bigbrick(x, y, conn)
  284.    return set_stone("st-bigbrick",x,y,{connections=conn})
  285. end
  286.  
  287. --
  288.  
  289. function switch(x,y,target,action)
  290.     return set_stone("st-switch", x,y, {target=target, action=action})
  291. end
  292.  
  293. function abyss(x,y) set_floor("fl-abyss",x,y) end
  294.  
  295.  
  296.  
  297.  
  298. -----------
  299. -- ITEMS --
  300. -----------
  301. function hollow(x,y) set_item("it-hollow", x,y) end
  302. function Document(x,y,t) set_item("it-document", x, y, {text=t}) end
  303. function hammer(x,y) set_item("it-hammer",x,y) end
  304. function dynamite(x,y) set_item("it-dynamite",x,y) end
  305. function bomb(x,y) set_item("it-blackbomb",x,y) end
  306. function shogundot(x,y,size,attrs)
  307.     if attrs==nil then attrs={} end
  308.     attrs.size = size
  309.     set_item("it-shogun", x, y, attrs)
  310. end
  311. function keya(x,y) set_item("it-key", x,y, {keycode=1.0}) end
  312. function keyb(x,y) set_item("it-key", x,y, {keycode=2.0}) end
  313. function keyc(x,y) set_item("it-key", x,y, {keycode=3.0}) end
  314.  
  315. function shogundot1(x,y,attrs) shogundot(x,y,1,attrs) end
  316. function shogundot2(x,y,attrs) shogundot(x,y,2,attrs) end
  317. function shogundot3(x,y,attrs) shogundot(x,y,3,attrs) end
  318.  
  319. function Wormhole(x,y,targetx, targety, attribs)
  320.     local attrs = attribs or {}
  321.     attrs.targetx = targetx
  322.     attrs.targety = targety
  323.  
  324.     set_item("it-wormhole", x,y, attrs)
  325. end
  326.  
  327. function Doorh(x,y,attrs)
  328.     local attrs = attrs or {}
  329.     attrs.type="h"
  330.     set_stone("st-door",x,y,attrs)
  331. end
  332. function Doorv(x,y,attrs)
  333.     local attrs = attrs or {}
  334.     attrs.type="v"
  335.     set_stone("st-door",x,y,attrs)
  336. end
  337.  
  338. EAST = enigma.EAST
  339. NORTH = enigma.NORTH
  340. SOUTH = enigma.SOUTH
  341. WEST = enigma.WEST
  342.  
  343. ---------------
  344. -- GRADIENTS --
  345. ---------------
  346.  
  347. SLOPE_S         = 1
  348. SLOPE_N         = 2
  349. SLOPE_E         = 3
  350. SLOPE_W         = 4
  351. SLOPE_LARGE_SE  = 5
  352. SLOPE_LARGE_SW  = 6
  353. SLOPE_LARGE_NE  = 7
  354. SLOPE_LARGE_NW  = 8
  355. SLOPE_SMALL_SE  = 9
  356. SLOPE_SMALL_NE  = 10
  357. SLOPE_SMALL_SW  = 11
  358. SLOPE_SMALL_NW  = 12
  359. SLOPE_S_FORCE_W = 13
  360. SLOPE_N_FORCE_W = 14
  361. SLOPE_S_FORCE_E = 15
  362. SLOPE_N_FORCE_E = 16
  363. SLOPE_E_FORCE_N = 17
  364. SLOPE_W_FORCE_N = 18
  365. SLOPE_E_FORCE_S = 19
  366. SLOPE_W_FORCE_S = 20
  367. FLAT_FORCE_S    = 21
  368. FLAT_FORCE_N    = 22
  369. FLAT_FORCE_E    = 23
  370. FLAT_FORCE_W    = 24
  371.  
  372. function Gradient( x, y, type )
  373.     set_floor( "fl-gradient", x, y, {type=type} )
  374. end
  375.  
  376.  
  377. ----------------------------------------------------
  378. -- Define lowercase aliases for various functions --
  379. ----------------------------------------------------
  380. create_world = CreateWorld
  381. get_attrib = GetAttrib
  382. set_attrib = SetAttrib
  383. make_object = MakeObject
  384.  
  385. document = Document
  386. doorh    = Doorh
  387. doorv    = Doorv
  388. gradient = Gradient
  389. wormhole = Wormhole
  390.