home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / Enigma / Enigma-1.01-w7.exe / data / init.lua < prev    next >
Text File  |  2009-12-13  |  11KB  |  437 lines

  1. ------------------------------------------------------------------------
  2. -- Copyright (C) 2002,2003,2004,2005 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. ------------------------------------------------------------------------
  19.  
  20. TRUE = 1
  21. FALSE = 0
  22.  
  23. EASY = 1
  24. HARD = 2
  25.  
  26. difficult = options.Difficulty==2
  27.  
  28. function Tick (deltatime)
  29.     -- do nothing by default
  30. end
  31.  
  32.  
  33. ----------------------
  34. -- Global variables --
  35. ----------------------
  36.  
  37. level_width = 0
  38. level_height = 0
  39.  
  40. oxyd_default_flavor = "b"       -- Default flavor for oxyd stones.
  41. oxyd_count = 0
  42. oxyd_current_color = 0
  43.  
  44. DefaultAttribs = {}
  45.  
  46. ---------------------
  47. -- Helper routines --
  48. ---------------------
  49.  
  50. function PrintTable(t)
  51.     for i,v in pairs(t) do
  52.         if type(v)=="table" then
  53.             print (i.." - "..v[1]..","..v[2])
  54.         else
  55.             print (i.." - "..v)
  56.         end
  57.     end
  58. end
  59.  
  60.  
  61. function Require(filename)
  62.     enigma.LoadLib(string.sub(filename,8,string.len(filename)-4))
  63. end
  64.  
  65. -- randseed is issued by Enigma application and must not be disturbed
  66. math.randomseed = function () end
  67.  
  68. ----------------------------------
  69. -- Routines for creating levels --
  70. ----------------------------------
  71.  
  72. function CreateWorld(w, h)
  73.     oxyd_default_flavor = "b"
  74.     oxyd_count = 0
  75.     oxyd_current_color = 0
  76.     DefaultAttribs = {}
  77.  
  78.     level_width = w
  79.     level_height = h
  80.     world.Resize(w, h)
  81. end
  82.  
  83.  
  84. function SetDefaultAttribs(objname, attribs)
  85.     local list = DefaultAttribs[objname]
  86.     if list then
  87.         for key,val in pairs(attribs) do list[key] = val end
  88.     else
  89.         DefaultAttribs[objname]= attribs
  90.     end
  91. end
  92.  
  93. function SetAttrib(obj, key,val)
  94.     if key == "name" then
  95.         enigma.NameObject(obj, val)
  96.     end
  97.     enigma.SetAttrib(obj, key, val)
  98. end
  99.  
  100. GetAttrib = enigma.GetAttrib
  101. GetKind   = enigma.GetKind
  102.  
  103. function set_attribs(obj, attrs)
  104.     if not attrs then return end
  105.     for key,val in pairs(attrs) do
  106.     set_attrib(obj, key, val)
  107.     end
  108. end
  109.  
  110. function MakeObject(name, attrs)
  111.     local obj = enigma.MakeObject(name)
  112.     local a=DefaultAttribs[name]
  113.     if a then set_attribs(obj, a) end
  114.     set_attribs(obj, attrs)
  115.     return obj
  116. end
  117.  
  118. function set_floor(name, x, y, attrs)
  119.     local obj = make_object(name, attrs)
  120.     enigma.SetFloor(x,y,obj)
  121.     return obj
  122. end
  123. function set_item(name, x, y, attrs)
  124.     local obj = make_object(name, attrs)
  125.     enigma.SetItem(x,y,obj)
  126.     return obj
  127. end
  128. function set_stone(name, x,y, attrs)
  129.     local obj=make_object(name, attrs)
  130.     enigma.SetStone(x,y,obj)
  131.     return obj
  132. end
  133.  
  134. kill_stone = enigma.KillStone
  135. kill_item = enigma.KillItem
  136.  
  137. function SendMessage (target, msg, arg)
  138.     if type(target) == "string" then
  139.         enigma.SendMessage (enigma.GetNamedObject (target), msg, arg)
  140.     else
  141.         enigma.SendMessage (target, msg, arg)
  142.     end
  143. end
  144.  
  145. function SetAttribs (target, attribs)
  146.     if type (target) == "string" then
  147.         set_attribs(enigma.GetNamedObject(target), attribs)
  148.     else
  149.         set_attribs(target, attribs)
  150.     end
  151. end
  152.  
  153.  
  154. function AddRubberBand(obj1,obj2, strength,length, minlen)
  155.     enigma.AddRubberBand(obj1,obj2, strength or 10, length or 2, minlen or 0)
  156. end
  157.  
  158. function fill_floor(name, x0,y0, w,h)
  159.     if x0 == nil then x0 = 0 end
  160.     if y0 == nil then y0 = 0 end
  161.     if w  == nil then w  = level_width end
  162.     if h  == nil then h  = level_height end
  163.     for y=y0,y0+h-1 do
  164.     for x=x0,x0+w-1 do
  165.             set_floor(name, x, y) 
  166.         end
  167.     end
  168. end
  169.  
  170. function fill_items(name, x0,y0,w,h)
  171.     for y=y0,y0+h-1 do
  172.     for x=x0,x0+w-1 do set_item(name, x, y) end
  173.     end
  174. end
  175.  
  176. function fill_stones(name, x0,y0, w,h)
  177.     for y=y0,y0+h-1 do
  178.         for x=x0,x0+w-1 do set_stone(name, x, y) end
  179.     end
  180. end
  181.  
  182. function draw_floor(name, xy0, xystep, n, attrs)
  183.     local x,y = xy0[1],xy0[2]
  184.     for i=1,n do
  185.     set_floor(name, x, y, attrs)
  186.     x = x+xystep[1]
  187.     y = y+xystep[2]
  188.     end
  189. end
  190.  
  191. function draw_checkerboard_floor (name1, name2, x, y, w, h, attrs)
  192.     for i=1,h do
  193.         for j=1,w do
  194.              if mod(i,2) == mod(j,2) then
  195.                  set_floor (name1, x+j-1, y+i-1, attrs )
  196.              else
  197.                  set_floor (name2, x+j-1, y+i-1, attrs )
  198.             end
  199.         end
  200.     end
  201. end
  202.  
  203. function draw_items(name, xy0, xystep, n, attrs)
  204.     local x,y = xy0[1],xy0[2]
  205.     for i=1,n do
  206.     set_item(name, x, y, attrs)
  207.     x = x+xystep[1]
  208.     y = y+xystep[2]
  209.     end
  210. end
  211.  
  212. function draw_stones(name, xy0, xystep, n, attrs)
  213.     local x,y = xy0[1],xy0[2]
  214.     for i=1,n do
  215.     set_stone(name, x, y, attrs)
  216.     x = x+xystep[1]
  217.     y = y+xystep[2]
  218.     end
  219. end
  220.  
  221. function draw_border(stonename, x0, y0, w, h)
  222.     if x0 == nil then x0 = 0 end
  223.     if y0 == nil then y0 = 0 end
  224.     if w  == nil then w  = level_width end
  225.     if h  == nil then h  = level_height end
  226.     draw_stones(stonename, {x0,y0}, {1,0}, w)
  227.     draw_stones(stonename, {x0,y0+h-1},{1,0}, w)
  228.     draw_stones(stonename, {x0,y0}, {0,1}, h)
  229.     draw_stones(stonename, {x0+w-1,y0},{0,1}, h)
  230. end
  231.  
  232. function set_stones(name, poslist, attrs)
  233.     for i,xy in pairs(poslist) do
  234.     set_stone(name, xy[1], xy[2], attrs)
  235.     end
  236. end
  237.  
  238. function SetActor(name, x, y, attrs)
  239.     local obj=make_object(name, attrs)
  240.     enigma.SetActor(x, y,obj)
  241.     return obj
  242. end
  243.  
  244. ---------------------------------------------
  245. -- Creation of particular kinds of objects --
  246. ---------------------------------------------
  247. function fakeoxyd(x,y) 
  248.     return set_stone("st-fakeoxyd",x,y) 
  249. end
  250.  
  251.  
  252. -- Create an oxyd stone with the current default flavor.
  253. function oxyd(x, y, flavor, color)
  254.     local f = flavor or oxyd_default_flavor
  255.     local c = color or oxyd_current_color
  256.     local a = {flavor=f, color=""..c}
  257.     local obj = set_stone("st-oxyd", x, y, a)
  258.  
  259.     -- if "color" argument not provided, use next available color
  260.     if not color then
  261.         oxyd_count = oxyd_count +1
  262.  
  263.         if oxyd_count == 2 then
  264.             oxyd_count = 0
  265.             oxyd_current_color = oxyd_current_color + 1
  266.         end
  267.     end
  268.  
  269.     return obj
  270. end
  271.  
  272. -- Shuffle the colors of all oxyd stones in the current landscape.
  273. function oxyd_shuffle()
  274.     enigma.SendMessage(enigma.GetObjectTemplate("st-oxyd"), "shuffle", nil)
  275. end
  276.  
  277. -- Close all oxyd stones in the current landscape
  278. function oxyd_closeall()
  279.     enigma.SendMessage(enigma.GetObjectTemplate("st-oxyd"), "closeall", nil)
  280. end
  281.  
  282. function oneway(x,y,orient)
  283.     return set_stone("st-oneway",x,y,{orientation=orient})
  284. end
  285. function laser(x,y,is_on,dir)
  286.     return set_stone("st-laser",x,y,{on=is_on, dir=dir})
  287. end
  288.  
  289. function mirrorp(x,y,movable, transp,orient)
  290.     return set_stone("st-pmirror", x, y, {movable=movable, transparent=transp,
  291.                          orientation=orient})
  292. end
  293. function mirror3(x,y,movable, transp, orient)
  294.     return set_stone("st-3mirror", x, y, {movable=movable, transparent=transp,
  295.                          orientation = orient})
  296. end
  297.  
  298. PUZ_0000=1                      -- hollow
  299. PUZ_0001=2                      -- w
  300. PUZ_0010=3                      -- s
  301. PUZ_0011=4                      -- sw
  302. PUZ_0100=5                      -- e
  303. PUZ_0101=6                      -- ew
  304. PUZ_0110=7                      -- es
  305. PUZ_0111=8                      -- esw
  306. PUZ_1000=9                      -- n
  307. PUZ_1001=10                     -- nw
  308. PUZ_1010=11                     -- ns
  309. PUZ_1011=12                     -- nsw
  310. PUZ_1100=13                     -- ne
  311. PUZ_1101=14                     -- new
  312. PUZ_1110=15                     -- nes
  313. PUZ_1111=16                     -- nesw
  314.  
  315. -- functions using puzzle-style tiles:
  316.  
  317. function puzzle(x, y, conn)
  318.     return set_stone("st-puzzle", x,y, {connections=conn})
  319. end
  320. function puzzle2(x, y, conn)
  321.     return set_stone("st-puzzle", x,y, {connections=conn,oxyd=1})
  322. end
  323. function bigbrick(x, y, conn)
  324.    return set_stone("st-bigbrick-n",x,y,{connections=conn})
  325. end
  326.  
  327. --
  328.  
  329. function switch(x,y,target,action)
  330.     return set_stone("st-switch", x,y, {target=target, action=action})
  331. end
  332.  
  333. function abyss(x,y) set_floor("fl-abyss",x,y) end
  334.  
  335.  
  336.  
  337.  
  338. -----------
  339. -- ITEMS --
  340. -----------
  341. function hollow(x,y) set_item("it-hollow", x,y) end
  342. function Document(x,y,t) set_item("it-document", x, y, {text=t}) end
  343. function hammer(x,y) set_item("it-hammer",x,y) end
  344. function dynamite(x,y) set_item("it-dynamite",x,y) end
  345. function bomb(x,y) set_item("it-blackbomb",x,y) end
  346. function keya(x,y) set_item("it-key", x,y, {keycode=1.0}) end
  347. function keyb(x,y) set_item("it-key", x,y, {keycode=2.0}) end
  348. function keyc(x,y) set_item("it-key", x,y, {keycode=3.0}) end
  349.  
  350. function shogundot1(x,y,attrs) set_item("it-shogun-s", x, y, attrs) end
  351. function shogundot2(x,y,attrs) set_item("it-shogun-m", x, y, attrs) end
  352. function shogundot3(x,y,attrs) set_item("it-shogun-l", x, y, attrs) end
  353.  
  354. function Wormhole(x,y,targetx, targety, attribs)
  355.     local attrs = attribs or {}
  356.     attrs.targetx = targetx
  357.     attrs.targety = targety
  358.  
  359.     set_item("it-wormhole", x,y, attrs)
  360. end
  361.  
  362. function Doorh(x,y,attrs)
  363.     local attrs = attrs or {}
  364.     attrs.type="h"
  365.     set_stone("st-door",x,y,attrs)
  366. end
  367. function Doorv(x,y,attrs)
  368.     local attrs = attrs or {}
  369.     attrs.type="v"
  370.     set_stone("st-door",x,y,attrs)
  371. end
  372.  
  373. EAST = enigma.EAST
  374. NORTH = enigma.NORTH
  375. SOUTH = enigma.SOUTH
  376. WEST = enigma.WEST
  377.  
  378. ---------------
  379. -- GRADIENTS --
  380. ---------------
  381.  
  382. SLOPE_S         = 1
  383. SLOPE_N         = 2
  384. SLOPE_E         = 3
  385. SLOPE_W         = 4
  386. SLOPE_LARGE_SE  = 5
  387. SLOPE_LARGE_SW  = 6
  388. SLOPE_LARGE_NE  = 7
  389. SLOPE_LARGE_NW  = 8
  390. SLOPE_SMALL_SE  = 9
  391. SLOPE_SMALL_NE  = 10
  392. SLOPE_SMALL_SW  = 11
  393. SLOPE_SMALL_NW  = 12
  394. SLOPE_S_FORCE_W = 13
  395. SLOPE_N_FORCE_W = 14
  396. SLOPE_S_FORCE_E = 15
  397. SLOPE_N_FORCE_E = 16
  398. SLOPE_E_FORCE_N = 17
  399. SLOPE_W_FORCE_N = 18
  400. SLOPE_E_FORCE_S = 19
  401. SLOPE_W_FORCE_S = 20
  402. FLAT_FORCE_S    = 21
  403. FLAT_FORCE_N    = 22
  404. FLAT_FORCE_E    = 23
  405. FLAT_FORCE_W    = 24
  406.  
  407. function Gradient( x, y, type )
  408.    if (type==nil) then error("Illegal gradient type"); end
  409.    if (type>=1 and type<=24) then
  410.       set_floor( "fl-gradient", x, y, {type=type} )
  411.    else
  412.       error("Unknown gradient type '"..type.."'");
  413.    end
  414. end
  415.  
  416.  
  417. Signal = enigma.AddSignal
  418. SetItem = set_item
  419.  
  420. ----------------------------------------------------
  421. -- Define lowercase aliases for various functions --
  422. ----------------------------------------------------
  423.  
  424. create_world = CreateWorld
  425. get_attrib = GetAttrib
  426. get_kind = GetKind
  427. set_attrib = SetAttrib
  428. make_object = MakeObject
  429. set_actor = SetActor
  430.  
  431. document = Document
  432. doorh    = Doorh
  433. doorv    = Doorv
  434. gradient = Gradient
  435. wormhole = Wormhole
  436.  
  437.