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

  1. -- Grow Your Own
  2. -- A level for Enigma
  3. -- Copyright (c) 2002 Nat Pryce
  4. -- License: GPL v2.0 or above
  5.  
  6. dofile( enigma.FindDataFile("levels/natmaze.lua") )
  7.  
  8.  
  9. maze = new_kruskal_maze(38,24)   
  10. originx = 1
  11. originy = 1
  12. visited = {}
  13.  
  14. function cell_to_level( cellx, celly )
  15.     return originx + cellx * 2, %originy + celly * 2
  16. end
  17.  
  18. function show_neighbours( cellx, celly )
  19.     local x, y = cell_to_level( cellx, celly )
  20.     
  21.     if maze:can_go_west( cellx, celly ) then
  22.         set_floor( "fl-gray", x-1, y )
  23.         show_cell( cellx-1, celly )
  24.     end
  25.     if maze:can_go_east( cellx, celly ) then
  26.         set_floor( "fl-gray", x+1, y )
  27.         show_cell( cellx+1, celly )
  28.     end
  29.     if maze:can_go_north( cellx, celly ) then
  30.         set_floor( "fl-gray", x, y-1 )
  31.         show_cell( cellx, celly-1 )
  32.     end
  33.     if maze:can_go_south( cellx, celly ) then
  34.         set_floor( "fl-gray", x, y+1 )
  35.         show_cell( cellx, celly+1 )
  36.     end
  37. end
  38.  
  39. function show_cell( cellx, celly )
  40.     cell_id = maze:coords_to_cell(cellx,celly)
  41.     if visited[cell_id] then
  42.         return
  43.     end
  44.     
  45.     local x, y = cell_to_level( cellx, celly )
  46.     function_name = "trigger_"..cell_id
  47.     
  48.     function trigger_callback( on )
  49.         if on == 1 then
  50.             show_neighbours( %cellx, %celly )
  51.         end
  52.     end
  53.     setglobal( function_name, trigger_callback )
  54.     
  55.     set_floor( "fl-gray", x, y )
  56.     set_item( "it-trigger", x, y, {action="callback",target=function_name} )
  57.     
  58.     visited[cell_id] = 1
  59. end
  60.  
  61.  
  62. create_world( maze.width*2 + 2, maze.height*2 + 2 )
  63. fill_floor( "fl-abyss", 0, 0, level_width, level_height )
  64.  
  65. oxyd(1,0)
  66. oxyd(2*maze.width-1,2*maze.height)
  67. oxyd(1,2*maze.height)
  68. oxyd(2*maze.width-1,0)
  69.  
  70. local startx, starty = random(maze.width)-1, random(maze.height)-1
  71. local actorx, actory = cell_to_level( startx, starty )
  72. set_floor( "fl-gray", actorx, actory )
  73. show_neighbours( startx, starty )
  74.  
  75. set_actor( "ac-blackball", actorx + 0.5, actory + 0.5, { player=0 } )
  76. display.SetFollowMode(display.FOLLOW_SCROLLING)
  77.  
  78.  
  79.  
  80.