home *** CD-ROM | disk | FTP | other *** search
/ GameStar Special 2004 August / GSSH0804.iso / Geschicklichkeit / Enigma / Enigma-081.exe / data / levels / nat4.lua < prev    next >
Text File  |  2003-01-05  |  8KB  |  279 lines

  1. -- Walk the Plank
  2. -- A level for Enigma
  3. -- Copyright (c) 2002 Nat Pryce
  4. -- License: GPL v2.0 or above
  5.  
  6.  
  7. function send_message( obj_name, message )
  8.     --print( "sending message " .. message .. " to " .. obj_name )
  9.     obj = enigma.GetNamedObject( obj_name )
  10.     enigma.SendMessage( obj, message, nil )
  11. end
  12.  
  13. function island( left, top, width, height )
  14.     fill_floor( "fl-sand", left, top, width, height )
  15.     fill_floor( "fl-leaves", left+1, top+1, width-2, height-2 )
  16. end
  17.  
  18. function stipple( setter, type, left, top, width, height, attrs )
  19.     if attrs == nil then
  20.         attrs = {}
  21.     end
  22.     for y = top, top+height-1 do
  23.         for x = left, left+width-1 do
  24.             if mod(x,2) == mod(y,2) then
  25.                 setter( type, x, y, attrs )
  26.             end
  27.         end
  28.     end
  29. end
  30.  
  31.  
  32. screen_width = 20
  33. screen_height = 13
  34.  
  35. screens_x = 5
  36. screens_y = 3
  37.  
  38. create_world( (screens_x-1)*(screen_width-1) + screen_width,
  39.               (screens_y-1)*(screen_height-1) + screen_height )
  40. draw_border( "st-greenbrown" )
  41.  
  42. fill_floor( "fl-water", 0, 0, level_width, level_height )
  43.  
  44. -------------------------------------------------------------------------------
  45. -- An easter egg for curious players
  46.  
  47. island( 4, 16, 5, 5 )
  48. document( 6, 18, "Here lies Black Ball the pirate, marooned in the year 1802 after travelling in the wrong direction.")
  49.  
  50. -------------------------------------------------------------------------------
  51. -- Starting screen
  52.  
  53. island( 20, 13, 7, screen_height-2 )
  54. stipple( set_stone, "st-wood", 21, 14, 5, screen_height-4 )
  55.  
  56. start_x = 23.5
  57. start_y = 18.5
  58.  
  59.  
  60.  
  61. -------------------------------------------------------------------------------
  62. -- Ferry terminal
  63.  
  64. ferry_started = nil
  65. ferry_x = 45
  66. ferry_y = 17
  67. ferry_width = 4
  68. ferry_height = 3
  69. ferry_end = 80
  70. ferry_floor = "fl-hay"
  71.  
  72. function move_ferry()
  73.     fill_floor( "fl-water", ferry_x, ferry_y, 1, ferry_height )
  74.     fill_floor( ferry_floor, ferry_x+ferry_width, ferry_y, 1, ferry_height )
  75.     ferry_x = ferry_x + 1
  76. end
  77.  
  78. function timer_callback()
  79.     if ferry_started and ferry_x < ferry_end then
  80.         move_ferry()
  81.     end
  82. end
  83.  
  84. function start_ferry()
  85.     if not ferry_started then
  86.         move_ferry()
  87.         send_message( "timer", "on" )
  88.         send_message( "laser_timer1", "on" )
  89.         send_message( "laser_timer2", "on" )
  90.         ferry_started = 1
  91.     end
  92. end
  93.  
  94. island( 40, 16, 5, 5 )
  95.  
  96. set_stone( "st-timer", 42, 18,
  97.            {target="timer_callback", action="callback",
  98.             name="timer", interval=0.75} )
  99. send_message( "timer", "off" )
  100. set_item( "it-trigger", 44, 18, 
  101.           {target="start_ferry", action="callback"} )
  102.  
  103. fill_floor( ferry_floor, ferry_x, ferry_y, ferry_width, ferry_height )
  104. document( ferry_x+2, ferry_y+1, "To cure sea sickness hold a large bank note between your teeth and lean over the side")
  105.  
  106.  
  107. -------------------------------------------------------------------------------
  108. -- Ferry journey
  109.  
  110. set_stone( "st-fakeoxyd", 60, ferry_y )
  111. set_stone( "st-fakeoxyd", 60, ferry_y+1 )
  112. set_stone( "st-fakeoxyd", 63, ferry_y+2 )
  113. set_stone( "st-fakeoxyd", 63, ferry_y+1 )
  114. set_stone( "st-fakeoxyd", 66, ferry_y+1 )
  115. set_stone( "st-fakeoxyd", 66, ferry_y )
  116. set_stone( "st-fakeoxyd", 68, ferry_y+1 )
  117. set_stone( "st-fakeoxyd", 68, ferry_y+2 )
  118.  
  119. set_stone( "st-fakeoxyd", 70, ferry_y )
  120. set_stone( "st-fakeoxyd", 70, ferry_y+1 )
  121.  
  122. set_stone( "st-fakeoxyd", 72, ferry_y+1 )
  123. set_stone( "st-fakeoxyd", 72, ferry_y+2 )
  124.  
  125. set_stone( "st-fakeoxyd", 74, ferry_y )
  126. set_stone( "st-fakeoxyd", 74, ferry_y+1 )
  127.  
  128.  
  129. set_stone( "st-fakeoxyd", 76, ferry_y )
  130. set_stone( "st-fakeoxyd", 76, ferry_y+2 )
  131.  
  132. set_stone( "st-laser", 73, ferry_y-2, {name="laser1",dir=SOUTH,on=1} )
  133. set_stone( "st-timer", 73, ferry_y+4, 
  134.            {action="onoff",target="laser1",interval="1.75",
  135.             name="laser_timer1"} )
  136.  
  137. set_stone( "st-laser", 75, ferry_y+4, {name="laser2",dir=NORTH,on=0} )
  138. set_stone( "st-timer", 75, ferry_y-2, 
  139.            {action="onoff",target="laser2",interval="1.75",
  140.             name="laser_timer2"} )
  141.  
  142. send_message( "laser_timer1", "off" )
  143. send_message( "laser_timer2", "off" )
  144.  
  145.  
  146.  
  147. -------------------------------------------------------------------------------
  148. -- Final Destination
  149.  
  150. count = 0
  151. function on_trigger( on )
  152.     if on == 1 then
  153.         count = count + 1
  154.         if count == 4 then
  155.             send_message( "door1", "open" )
  156.             send_message( "door2", "open" )
  157.             send_message( "door3", "open" )
  158.         end
  159.     else
  160.         count = count - 1
  161.         send_message( "door1", "close" )
  162.         send_message( "door2", "close" )
  163.         send_message( "door3", "close" )
  164.     end
  165. end
  166.  
  167. function trigger( x, y )
  168.     set_item("it-trigger", x, y, {action="callback", target="on_trigger"} )
  169. end
  170.  
  171.  
  172. fill_floor( "fl-gray", 84, 11, 11, screen_height+2 )
  173. set_floor( "fl-gray", 83, ferry_y-1 )
  174. set_floor( "fl-gray", 83, ferry_y+ferry_height )
  175.  
  176. draw_stones( "st-greenbrown", {84,12}, {1,0}, 11 )
  177. draw_stones( "st-greenbrown", {84,24}, {1,0}, 11 )
  178.  
  179. doorh( 86, 12, {name="door1"} )
  180. doorh( 86, 24, {name="door2"} )
  181.  
  182. set_stone( "st-brick", 86, 17 )
  183. set_stone( "st-brick", 86, 16 )
  184. set_stone( "st-brick", 85, 17 )
  185. doorv( 85, 18, {name="door4"} )
  186. set_item( "it-trigger", 84, 18, {target="door4",action="open"} )
  187. set_item( "it-trigger", 87, 18, {target="door4",action="close"} )
  188. set_stone( "st-brick", 85, 19 )
  189. set_stone( "st-brick", 86, 19)
  190. set_stone( "st-brick", 86, 20 )
  191.  
  192. set_stone( "st-brick", 87, 16 )
  193. set_stone( "st-brick", 87, 15 )
  194.  
  195. set_stone( "st-brick", 87, 20 )
  196. set_stone( "st-brick", 87, 21 )
  197.  
  198. draw_stones( "st-brick", {87,14}, {1,0}, 5 )
  199. draw_stones( "st-brick", {87,22}, {1,0}, 5 )
  200.  
  201. set_stone( "st-brick", 91, 15 )
  202. set_stone( "st-brick", 91, 16 )
  203.  
  204. set_stone( "st-brick", 91, 20 )
  205. set_stone( "st-brick", 91, 21 )
  206.  
  207. set_stone( "st-brick", 92, 16 )
  208. set_stone( "st-brick", 92, 17 )
  209. doorv( 92, 18, {name="door3"} )
  210. set_stone( "st-brick", 92, 19 )
  211. set_stone( "st-brick", 92, 20 )
  212.  
  213. set_stone( "st-brick", 88, 18 )
  214. set_stone( "st-brick", 89, 16 )
  215. set_stone( "st-brick", 89, 20 )
  216.  
  217. trigger( 89, 17 )
  218. trigger( 89, 19 )
  219. trigger( 90, 16 )
  220. trigger( 90, 20 )
  221.  
  222. set_stone( "st-brownie", 89, 18 )
  223. set_stone( "st-brownie", 90, 18 )
  224. set_stone( "st-brownie", 88, 16 )
  225. set_stone( "st-brownie", 88, 20 )
  226.  
  227. fill_floor( "fl-plank", 87, 15, 5, 7 )
  228. set_floor( "fl-plank", 85, 18 )
  229. set_floor( "fl-plank", 86, 18 )
  230. set_floor( "fl-plank", 92, 18 )
  231.  
  232. -------------------------------------------------------------------------------
  233. -- Harbour walls
  234.  
  235. draw_floor( "fl-gray",   {39,11}, {1,0}, 46 )
  236. set_floor( "fl-gray", 39, 10 )
  237. set_floor( "fl-gray", 39, 9 )
  238. draw_floor( "fl-leaves", {40,10}, {1,0}, 56 )
  239. draw_floor( "fl-sand",   {40,9},  {1,0}, 56 )
  240. set_stone( "st-wood", 39, 11 )
  241. set_stone( "st-wood", 39, 10 )
  242.  
  243. draw_floor( "fl-gray", {39,25}, {1,0}, 46 )
  244. set_floor( "fl-gray", 39, 26 )
  245. set_floor( "fl-gray", 39, 27 )
  246. draw_floor( "fl-leaves", {40,26}, {1,0}, 56 )
  247. draw_floor( "fl-sand",   {40,27}, {1,0}, 56 )
  248. set_stone( "st-wood", 39, 25 )
  249. set_stone( "st-wood", 39, 26 )
  250.  
  251. -------------------------------------------------------------------------------
  252. -- Place the Oxyds
  253.  
  254. oxyd(37,12)
  255. oxyd(94,13)
  256.  
  257. oxyd(37,24)
  258. oxyd(94,23)
  259.  
  260.  
  261. -------------------------------------------------------------------------------
  262. -- The starting point
  263.  
  264. set_actor( "ac-blackball", start_x, start_y, {player=0} )
  265.  
  266.  
  267.  
  268. -------------------------------------------------------------------------------
  269. -- For testing: comment out the set_actor line above and uncomment one of these
  270.  
  271. -- To test the ferry start
  272. --set_actor( "ac-blackball", 46.5, 18.5, {player=0} )
  273. --set_stone( "st-wood", 45, 18 )
  274.  
  275. -- To test the final destination
  276. --set_actor( "ac-blackball", 84.5, 18.5, {player=0} )
  277. --fill_floor( ferry_floor, ferry_end, ferry_y, ferry_width, ferry_height )
  278.  
  279.