home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / Enigma / Enigma-1.01-w7.exe / data / levels / lib / ralf.xml < prev    next >
Extensible Markup Language  |  2009-12-13  |  6KB  |  171 lines

  1. <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
  2. <el:level xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://enigma-game.org/schema/level/1 level.xsd" xmlns:el="http://enigma-game.org/schema/level/1">
  3.   <el:protected>
  4.     <el:info el:type="library">
  5.       <el:identity el:title="" el:id="lib/ralf"/>
  6.       <el:version el:score="1" el:release="1" el:revision="0" el:status="released"/>
  7.       <el:author  el:name="Ralf Westram" el:email="amgine@reallysoft.de" el:homepage=""/>
  8.       <el:copyright>Copyright ┬⌐ Feb 2003 Ralf Westram</el:copyright>
  9.       <el:license el:type="GPL v2.0 or above" el:open="true"/>
  10.       <el:compatibility el:enigma="0.92">
  11.         <el:dependency el:path="lib/ant" el:id="lib/ant" el:release="1" el:preload="true"/>
  12.       </el:compatibility>
  13.       <el:modes el:easy="false" el:single="false" el:network="false"/>
  14.       <el:comments>
  15.         <el:code>Lua 5.1 and XML converted by Leveladministrators</el:code>
  16.       </el:comments>
  17.       <el:score el:easy="-" el:difficult="-"/>
  18.     </el:info>
  19.     <el:luamain><![CDATA[
  20. -- Thanks to ant
  21.  
  22. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  23. -- draw maps of maps (metamaps)
  24. -- * each cell in a metamap refers to a normal map (here: basemap)
  25. --
  26. -- example:
  27. -- metacells = {}
  28. -- metacells["0"] = cell{parent={{draw_metamap_oriented, basemap, cells,0,0,0}}}
  29. -- metacells["1"] = cell{parent={{draw_metamap_oriented, basemap, cells,1,0,0}}}
  30. --
  31. -- use draw_map() or draw_map_oriented() to draw the metamap
  32. --
  33. function draw_metamap_oriented(x,y,bmap,cells,flipx, flipy,rotate)
  34.    local bmapw,bmaph = get_map_size(bmap)
  35.    if (bmapw~=bmaph) then
  36.       print("warning: [ralf.lua]: draw_metamap_oriented() prefers quadratic maps!")
  37.    end
  38.    draw_map_oriented(x*bmapw+1,y*bmaph+1,bmap,bmapw,bmaph,cells,flipx,flipy,rotate)
  39. end
  40.  
  41. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  42. -- a modified version of ant's draw_map()
  43. -- it allows to change the orientation of whats drawn
  44. --
  45. -- x0/y0 = left upper corner coordinates
  46. -- map   = map to draw
  47. -- width/height = size of map
  48. -- cellfuncs = what to draw
  49. -- flipx == 1 -> flip horizontally
  50. -- flipy == 1 -> flip vertically
  51. -- rot == 0 -> rotate   0 degrees clockwise
  52. -- rot == 1 -> rotate  90 degrees clockwise
  53. -- rot == 2 -> rotate 180 degrees clockwise
  54. -- rot == 3 -> rotate 270 degrees clockwise
  55. --
  56. function draw_map_oriented(x0, y0, map, width, height, cellfuncs, flipx, flipy,rotate)
  57.    local funcs = cellfuncs or cells or {}; --we hope that if nil is passed, global cells is defined.
  58.  
  59.    while (rotate > 3) do rotate = rotate-4 end
  60.    while (rotate < 0) do rotate = rotate+4 end
  61.  
  62.    for y,str in pairs(map) do
  63.       for x = 1,width do
  64.          local key = strsub(str, (x-1)*CELL_KEY_WIDTH+1, x*CELL_KEY_WIDTH)
  65.          local func = funcs[key]
  66.          local ftype = type(func)
  67.  
  68.          if (ftype == "function") then
  69.             local xr = x0;
  70.             local yr = y0;
  71.  
  72.             if ((flipx == 1) or (flipy == 1)) then -- draw flipped
  73.                if (rotate ~= 0) then
  74.                   error("Warning [ralf.lua]: rotate and flip do not work together at the moment (rotation is ignored)")
  75.                end
  76.                if (flipx==1) then
  77.                   xr = xr + width - x
  78.                else
  79.                   xr = xr + x -1
  80.                end
  81.                if (flipy==1) then
  82.                   yr = yr + height - y
  83.                else
  84.                   yr = yr + y -1
  85.                end
  86.             else -- draw rotated
  87.                if (rotate==0) then
  88.                   xr = xr + (x-1)
  89.                   yr = yr + (y-1)
  90.                elseif (rotate==1) then
  91.                   xr = xr + (width-1) - (y-1)
  92.                   yr = yr + (x-1)
  93.                elseif (rotate==2) then
  94.                   xr = xr + (width-1) - (x-1)
  95.                   yr = yr + (height-1) - (y-1)
  96.                elseif (rotate==3) then
  97.                   xr = xr + (y-1)
  98.                   yr = yr + (height-1) - (x-1)
  99.                end
  100.             end
  101.  
  102.             func(xr,yr)
  103.  
  104.          elseif (ftype == "nil") then
  105.             print("warning: [ralf.lua]: function doesn't exist for map element '"..key.."'.")
  106.          else
  107.             print("warning: [ralf.lua]: cell element '"..key.."' is not a function, it's "..ftype..".")
  108.          end
  109.       end
  110.    end
  111. end
  112.  
  113. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  114. -- general world drawing function
  115. -- (works also with maps smaller than 20 x 13 ; outside filled with abyss)
  116. --
  117. -- map, mapcells        see draw_map()
  118. -- floorcell            used to draw the floor
  119. -- abysscell            used to draw the space outside the level (if nil -> "fl-abyss" is used)
  120. -- bordercell           used to draw the border (if nil -> no border)
  121. --
  122. -- sets some global variables:
  123. --
  124. -- mapw/maph            real size of map
  125. -- worldw/worldh        same including border
  126. -- xlo/ylo              left/upper corner coordinates (of map!)
  127.  
  128. preferred_width,preferred_height = 20,13
  129.  
  130. function rs_init_world(map, bordercell)
  131.    mapw,maph = get_map_size(map)
  132.  
  133.    if (bordercell) then
  134.       worldw,worldh   = mapw+2,maph+2
  135.    else
  136.       worldw,worldh   = mapw,maph
  137.    end
  138.  
  139.    local rworldw,rworldh = worldw,worldh
  140.    if rworldw<preferred_width  then rworldw=preferred_width  end
  141.    if rworldh<preferred_height then rworldh=preferred_height end
  142.  
  143.    xlo = floor((rworldw-mapw-1)/2)+1
  144.    ylo = floor((rworldh-maph-1)/2)+1
  145.  
  146.    --print("xlo="..xlo.." ylo="..ylo)
  147.  
  148.    local oxyd_flavor = oxyd_default_flavor
  149.    create_world(rworldw, rworldh)
  150.    oxyd_default_flavor = oxyd_flavor
  151. end
  152.  
  153. function rs_create_world(map,mapcells,floorcell,abysscell,bordercell)
  154.    floorcell = floorcell or cells[" "] or cell{floor={face="fl-normal"}}
  155.    abysscell = abysscell or cell{floor={face="fl-abyss"}}
  156.  
  157.    rs_init_world(map,bordercell)
  158.  
  159.    fill_world_func(abysscell)
  160.    fill_world_func(floorcell,xlo,ylo,mapw,maph)
  161.    if (bordercell) then
  162.       draw_border_func(bordercell,xlo-1,ylo-1,worldw,worldh)
  163.    end
  164.    draw_map(xlo,ylo,map,mapcells)
  165. end
  166.     ]]></el:luamain>
  167.     <el:i18n>
  168.     </el:i18n>
  169.   </el:protected>
  170. </el:level>
  171.