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

  1. -- Helper functions for ralfXX.lua
  2. -- Filename:     ralf.lua
  3. -- Copyright:     (c) Feb 2003 Ralf Westram
  4. -- Contact:     amgine@reallysoft.de
  5. -- License:     GPL v2.0 or above
  6.  
  7. dofile(enigma.FindDataFile("levels/ant.lua")) -- Thanks to ant
  8.  
  9. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  10. -- draw maps of maps (metamaps)
  11. -- * each cell in a metamap refers to a normal map (here: basemap)
  12. --
  13. -- example:
  14. -- metacells = {}
  15. -- metacells["0"] = cell{parent={{draw_metamap_oriented, basemap, cells,0,0,0}}}
  16. -- metacells["1"] = cell{parent={{draw_metamap_oriented, basemap, cells,1,0,0}}}
  17. --
  18. -- use draw_map() or draw_map_oriented() to draw the metamap
  19. --
  20. function draw_metamap_oriented(x,y,bmap,cells,flipx, flipy,rotate)
  21.    local bmapw,bmaph = get_map_size(bmap)
  22.    if (bmapw~=bmaph) then
  23.       print("warning: [ralf.lua]: draw_metamap_oriented() prefers quadratic maps!")
  24.    end
  25.    draw_map_oriented(x*bmapw+1,y*bmaph+1,bmap,bmapw,bmaph,cells,flipx,flipy,rotate)
  26. end
  27.  
  28. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  29. -- a modified version of ant's draw_map()
  30. -- it allows to change the orientation of whats drawn
  31. --
  32. -- x0/y0 = left upper corner coordinates
  33. -- map   = map to draw
  34. -- width/height = size of map
  35. -- cellfuncs = what to draw
  36. -- flipx == 1 -> flip horizontally
  37. -- flipy == 1 -> flip vertically
  38. -- rot == 0 -> rotate   0 degrees clockwise
  39. -- rot == 1 -> rotate  90 degrees clockwise
  40. -- rot == 2 -> rotate 180 degrees clockwise
  41. -- rot == 3 -> rotate 270 degrees clockwise
  42. --
  43. function draw_map_oriented(x0, y0, map, width, height, cellfuncs, flipx, flipy,rotate)
  44.    local funcs = cellfuncs or cells or {}; --we hope that if nil is passed, global cells is defined.
  45.  
  46.    while (rotate > 3) do rotate = rotate-4 end
  47.    while (rotate < 0) do rotate = rotate+4 end
  48.  
  49.    for y,str in map do
  50.       for x = 1,width do
  51.          local key = strsub(str, (x-1)*CELL_KEY_WIDTH+1, x*CELL_KEY_WIDTH)
  52.          local func = funcs[key]
  53.          local ftype = type(func)
  54.  
  55.          if (ftype == "function") then
  56.             local xr = x0;
  57.             local yr = y0;
  58.  
  59.             if ((flipx == 1) or (flipy == 1)) then -- draw flipped
  60.                if (rotate ~= 0) then
  61.                   error("Warning [ralf.lua]: rotate and flip do not work together at the moment (rotation is ignored)")
  62.                end
  63.                if (flipx==1) then
  64.                   xr = xr + width - x
  65.                else
  66.                   xr = xr + x -1
  67.                end
  68.                if (flipy==1) then
  69.                   yr = yr + height - y
  70.                else
  71.                   yr = yr + y -1
  72.                end
  73.             else -- draw rotated
  74.                if (rotate==0) then
  75.                   xr = xr + (x-1)
  76.                   yr = yr + (y-1)
  77.                elseif (rotate==1) then
  78.                   xr = xr + (width-1) - (y-1)
  79.                   yr = yr + (x-1)
  80.                elseif (rotate==2) then
  81.                   xr = xr + (width-1) - (x-1)
  82.                   yr = yr + (height-1) - (y-1)
  83.                elseif (rotate==3) then
  84.                   xr = xr + (y-1)
  85.                   yr = yr + (height-1) - (x-1)
  86.                end
  87.             end
  88.  
  89.             func(xr,yr)
  90.  
  91.          elseif (ftype == "nil") then
  92.             print("warning: [ralf.lua]: function doesn't exist for map element '"..key.."'.")
  93.          else
  94.             print("warning: [ralf.lua]: cell element '"..key.."' is not a function, it's "..ftype..".")
  95.          end
  96.       end
  97.    end
  98. end
  99.  
  100. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  101. -- general world drawing function
  102. -- (works also with maps smaller than 20 x 13 ; outside filled with abyss)
  103. --
  104. -- map, mapcells        see draw_map()
  105. -- floorcell            used to draw the floor
  106. -- abysscell            used to draw the space outside the level (if nil -> "fl-abyss" is used)
  107. -- bordercell           used to draw the border (if nil -> no border)
  108. --
  109. -- sets some global variables:
  110. --
  111. -- mapw/maph            real size of map
  112. -- worldw/worldh        same including border
  113. -- xlo/ylo              left/upper corner coordinates (of map!)
  114.  
  115. function rs_create_world(map,mapcells,floorcell,abysscell,bordercell)
  116.    floorcell = floorcell or cells[" "] or cell{floor={face="fl-normal"}}
  117.    abysscell = abysscell or cell{floor={face="fl-abyss"}}
  118.    mapw,maph = get_map_size(map)
  119.  
  120.    if (bordercell) then
  121.       worldw,worldh   = mapw+2,maph+2
  122.    else
  123.       worldw,worldh   = mapw,maph
  124.    end
  125.  
  126.    local rworldw,rworldh = worldw,worldh
  127.    if rworldw<20 then rworldw=20 end
  128.    if rworldh<13 then rworldh=13 end
  129.  
  130.    xlo = floor((rworldw-mapw-1)/2)+1
  131.    ylo = floor((rworldh-maph-1)/2)+1
  132.  
  133. --   print("xlo="..xlo.." ylo="..ylo)
  134.  
  135.    local oxyd_flavor = oxyd_default_flavor
  136.    create_world(rworldw, rworldh)
  137.    oxyd_default_flavor = oxyd_flavor
  138.  
  139.    fill_world_func(abysscell)
  140.    fill_world_func(floorcell,xlo,ylo,mapw,maph)
  141.    if (bordercell) then
  142.       draw_border_func(bordercell,xlo-1,ylo-1,worldw,worldh)
  143.    end
  144.    draw_map(xlo,ylo,map,mapcells)
  145. end
  146.  
  147.