<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<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">
  <el:protected>
    <el:info el:type="library">
      <el:identity el:title="" el:id="lib/libsoko_designlist"/>
      <el:version el:score="1" el:release="1" el:revision="5" el:status="released"/>
      <el:author el:name="Enigma Team" el:email="" el:homepage=""/>
      <el:copyright>Copyright © 2007, 2008, 2009 Enigma Team</el:copyright>
      <el:license el:type="GPL v2.0 or above" el:open="true"/>
      <el:compatibility el:enigma="1.10">
      </el:compatibility>
      <el:modes el:easy="false" el:single="false" el:network="false"/>
      <el:comments>
      </el:comments>
      <el:score el:easy="-" el:difficult="-"/>
    </el:info>
    <el:luamain><![CDATA[

-- This "library" is merely a collection of designs, outsourced from
-- libsoko.xml.

------------------------------------------------------------------------
-- Designs
------------------------------------------------------------------------

-- This section holds a table with all predefined designs. Each design
-- is again a table consisting of the following entries, called "fields":
--   inf, outf, box, wall, goal, door, open_door, oxyd, white, endp
-- Each of these entries is either a string or tile representing the
-- objects to be used, or a table if several objects shall be used.
-- Such a declaration of one or more objects will be called "element".
--
-- An element consists of a sequence of other elements, plus a single
-- entry called "res", holding the information how to resolve the
-- subelements. If no "res" is given, all subelements will be resolved.
-- An example:
--   wall = {"st_rawglass", {"fl_wood", "fl_sahara", res = RESOLVE_CHECKERBOARD}}
-- This means, that whenever a wall should be drawn, it will consist
-- of an "st_rawglass", plus one of the floors "fl_wood" or "fl_sahara",
-- which will be used in a checkerboard manner.
--
-- The fields oxyd, white and endp are special. "oxyd" only holds
-- the oxyd's flavor, "white" can be a boolean to define the main actor
-- to be the white marble. "endp" defines what happens after the Sokoban
-- part of the level has been completed, i.e. how to redraw the level
-- and how to open the oxyds.
--
-- Example:
--
--  [129] = {inf = ti{"fl_dunes", friction = 3.0, adhesion = 1.0},
--           outf = {"fl_lawn_e1", "fl_lawn_e2", "fl_lawn_e3", "fl_lawn_e4", res = RESOLVE_WAVES},
--           wall = {"st_ancient", "fl_lawn_b"},
--           box = "st_camouflage_movable",
--           door = {{"fl_bridge_bw", "fl_bridge_bn", res = RESOLVE_RANDOM}, "st_nil"},
--           oxyd = "d",
--         endp = {goal = "st_camouflage_hollow",
--                 alg = "ralf"}},
--
--   will define design 129. The walls will be "st_ancient" on "fl_lawn_b",
--   the inner floor is "fl_dunes" with higher friction values. The outer
--   floor will be in a special lawn-pattern due to RESOLVE_WAVES.
--   The boxes are movable camouflage stones, which become hollow after
--   all boxes are on triggers. The end phase algorithm to be used is
--   "ralf", i.e. all but one oxyd can be reached during the Sokoban
--   part, the corresponding doors are randomly oriented bridges.
--
-- Design-Algorithms:
--
--   RESOLVE_ALL = 0          : default, used for elements which can be rendered simultaneously
--   RESOLVE_RANDOM = 1       : choose randomly among the elements
--   RESOLVE_CHECKERBOARD = 2 : up to 3 different elements in checkerboard pattern
--   RESOLVE_LINES = 3        : arbitrary number of elements in diagonal lines
--   RESOLVE_WAVES = 4        : works best with 4 different elements
--   RESOLVE_ORIENTED = 5     : special version for st_door, used internally
--
--   RESOLVE_RANDOM may take additional attributes to define the
--   percentages of the subelements. Example:
--     outf = {"fl_water", "fl_swamp", res = {RESOLVE_RANDOM, 5, 1}}
--   The outer floor will be 5 parts water to 1 part swamp.
--
-- Endphase-Algorithms:
--
--   circle         : arrange eight oxyds in a circle (default)
--   hide           : position oxyds in the outer walls
--     gradients    : like hide, create gradients
--     magnets      : like hide, create magnets
--   fourswitch     : create a fourswitch puzzle
--   block          : arrange oxyds with doors
--   ralf           : arrange oxyds with doors, which open by triggers
--     vortex       : like ralf, create vortices between clusters
--     allcrack     : like ralf, create cracks everywhere
--     knock        : like ralf, open doors on knocking on other doors
--   outside        : create oxyds in the outside and outer walls
--
--   You can use "max_pairs" to determine the maximal number of
--   oxyd pairs in "block", "ralf", "vortex", "allcrack", "knock",
--   and "outside"; and "strength" to determine the strength of
--   the gradients and magnets in "gradients" and "magnets".
--

lib.soko_designlist = {}
setmetatable(lib.soko_designlist, getmetatable(lib))

RESOLVE_ALL = 0
RESOLVE_RANDOM = 1
RESOLVE_CHECKERBOARD = 2
RESOLVE_LINES = 3
RESOLVE_WAVES = 4
RESOLVE_ORIENTED = 5

-- The MAXDESIGN-constant is a read-only list to hold the number of available
-- designs in each version of Enigma.
MAXDESIGN = {}
MAXDESIGN[1.1] = 150
setmetatable(MAXDESIGN,
    {__index = function(self, key)
         if rawget(self, key) == nil then
             error("The requested designs are not available -- maybe you tried to run "
                 .."this level with an outdated version of Enigma?", 2)
         else
             return rawget(self, key)
         end
     end,
     __newindex = function(self, key, value)
         error("The MAXDESIGN-constant is read-only.", 2)
     end})

-- The default design must not be nested!
lib.soko_designlist.default = {
    wall = "st_plaster",
     inf = "fl_wood",
    outf = "st_invisible_hollow",
     box = "st_brownie",
    goal = "it_trigger",
    oxyd = "b",
    endp = {alg = "circle"},
}

-- outf_default_stone has the following meaning: When outf is drawn
-- by set_element, but no stone is set, outf_default_stone is used
-- instead. You can suppress this behaviour by explicitly setting
-- outf = { "fl_myfloor", "st_nil" }.
-- This is done to avoid a chess-stone from jumping into the void,
-- as a present to the gamer.

lib.soko_designlist.list = {

-- endp-algs: circle, ralf, hide, outside, allcrack, block, fourswitch
--            vortex, gradients, magnets


  [1] = {inf = "fl_bluegray",
         outf = "fl_space",
         wall = "st_bluegray",
         box = "st_brownie",
         door = "st_door_a",
         oxyd = "a",
         endp = {goal = "st_nil",
                 alg = "circle"}},
  [2] = {inf = "fl_bluegray",
         outf = "fl_water",
         wall = "st_bluegray",
         box = "st_rawglass_movable",
         door = "st_door_b",
         oxyd = "a",
         endp = {goal = "st_lightglass_hollow",
                 alg = "ralf"}},
  [3] = {inf = "fl_bluegray",
         outf = "fl_abyss",
         wall = "st_bluegray",
         box = "st_box_wood_growing",
         door = "st_flat_cracked",
         oxyd = "a",
         endp = {goal = {"st_nil", "fl_wood_framed", "it_nil"},
                 give = "it_hammer",
                 alg = "block"}},
  [4] = {inf = "fl_bright",
         outf = "fl_sahara",
         wall = "st_bluegray",
         box = "st_brownie",
         door = "st_door_a",
         oxyd = "c",
         endp = {wall = {"st_nil", "fl_bluegray"},
                 goal = "st_nil",
                 alg = "outside"}},
  [5] = {inf = "fl_bright",
         outf = "fl_space",
         wall = "st_bluegray",
         box = "st_box_wood",
         door = "st_door_c",
         oxyd = "c",
         endp = {wall = "st_bluegray_hollow",
                 goal = {"st_nil", "fl_wood_framed", "it_nil"},
                 alg = "outside", max_pairs = 3}},
  [6] = {inf = "fl_bright",
         outf = "fl_space",
         wall = "st_bluegray",
         box = "st_greenbrown_movable",
         door = "st_knight",
         oxyd = "c",
         endp = {goal = "st_greenbrown_hollow",
                 give = "it_sword",
                 alg = "block"}},
  [7] = {inf = "fl_bright",
         outf = "fl_space",
         wall = "st_bluegray",
         box = "st_box_wood",
         door = "st_door_c",
         oxyd = "c",
         endp = {goal = {"st_nil", "fl_wood_framed", "it_nil"},
                 alg = "fourswitch"}},
  [8] = {inf = "fl_ivory",
         outf = "fl_blueslab",
         wall = "st_bluesand",
         box = "st_plaster_movable",
         door = "st_door_b",
         oxyd = "d",
         endp = {goal = "st_plaster_breakable",
                 give = "it_hammer",
                 alg = "ralf"}},
  [9] = {inf = "fl_ivory",
         outf = "fl_blueslab",
         wall = "st_bluesand",
         box = "st_plop",
         door = "st_blocker",
         oxyd = "d",
         endp = {goal = "st_nil",
                 alg = "circle"}},
 [10] = {inf = "fl_rough",
         outf = "fl_space",
         wall = "st_bluesand",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_door_a",
         oxyd = "b",
         endp = {goal = "st_nil",
                 alg = "magnets"}},
 [11] = {inf = "fl_rough",
         outf = "fl_abyss",
         wall = "st_bluesand",
         box = "st_redbrown_movable",
         door = "st_door_b",
         oxyd = "b",
         endp = {goal = "st_redbrown",
                 alg = "vortex"}},
 [12] = {inf = "fl_rough",
         outf = "fl_space",
         wall = "st_bluesand",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_break_oxydc",
         oxyd = "b",
         endp = {goal = "st_nil",
                 give = "it_hammer",
                 alg = "block"}},
 [13] = {inf = "fl_rough",
         outf = "fl_lawn_a",
         wall = "st_bluesand",
         box = "st_plop",
         door = "st_blocker",
         oxyd = "b",
         endp = {goal = {"fl_swamp", "it_nil"},
                 alg = "ralf"}},
 [14] = {inf = "fl_himalaya",
         outf = "fl_water",
         wall = {"st_rawglass", {"fl_himalaya", "fl_water", res = RESOLVE_CHECKERBOARD}},
         box = "st_brownie",
         door = "st_door_a",
         oxyd = "a",
         endp = {goal = "st_pull",
                 alg = "magnets"}},
 [15] = {inf = "fl_himalaya",
         outf = "fl_water",
         wall = {"st_rawglass", {"fl_himalaya", "fl_water", res = RESOLVE_CHECKERBOARD}},
         box = "st_brownie",
         door = "st_door_a",
         oxyd = "a",
         endp = {goal = "st_nil",
                 alg = "fourswitch"}},
 [16] = {inf = "fl_redslab",
         outf = "fl_abyss",
         wall = {"st_rawglass", {"fl_redslab", "fl_abyss", res = RESOLVE_CHECKERBOARD}},
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_door_b",
         oxyd = "c",
         endp = {alg = "circle"}},
 [17] = {inf = "fl_redslab",
         outf = "fl_sahara",
         wall = {"st_rawglass", {"fl_redslab", "fl_sahara", res = RESOLVE_CHECKERBOARD}},
         box = "st_brownie",
         door = "st_door_a",
         oxyd = "c",
         endp = {wall = "st_grate_framed",
                 goal = "st_grate_framed",
                 alg = "outside"}},
 [18] = {inf = "fl_wood",
         outf = "fl_water",
         wall = {"st_rawglass", {"fl_wood", "fl_water", res = RESOLVE_CHECKERBOARD}},
         box = "st_greenbrown_movable",
         door = {"st_door_b", "fl_wood"},
         oxyd = "c",
         endp = {goal = "st_greenbrown_hollow",
                 alg = "ralf"}},
 [19] = {inf = "fl_wood",
         outf = "fl_abyss",
         wall = {"st_rawglass", {"fl_wood", "fl_abyss", res = RESOLVE_CHECKERBOARD}},
         box = "st_plop",
         door = {"st_blocker", "fl_wood"},
         oxyd = "d",
         endp = {goal = "st_granite",
                 alg = "vortex"}},
 [20] = {inf = "fl_wood",
         outf = "fl_abyss",
         wall = {"st_rawglass", {"fl_wood", "fl_abyss", res = RESOLVE_CHECKERBOARD}},
         box = "st_box_wood_growing",
         door = {"st_door_c", "fl_wood"},
         oxyd = "a",
         endp = {goal = {"fl_swamp", "it_nil"},
                 alg = "magnets"}},
 [21] = {inf = "fl_wood",
         outf = "fl_sahara",
         wall = {"st_rawglass", {"fl_wood", "fl_sahara", res = RESOLVE_CHECKERBOARD}},
         box = "st_box_wood",
         door = "st_break_bug",
         oxyd = "c",
         endp = {goal = {"fl_swamp", "it_nil"},
                 give = "#ac_bug",
                 alg = "block"}},
 [22] = {inf = "fl_wood",
         outf = "fl_lawn_a",
         wall = {"st_rawglass", {"fl_wood", "fl_lawn_a", res = RESOLVE_CHECKERBOARD}},
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_knight",
         oxyd = "b",
         endp = {goal = "st_nil",
                 give = "it_sword",
                 alg = "block"}},
 [23] = {inf = "fl_wood",
         outf = {"fl_abyss", {"it_nil", "it_crack_s", "it_crack_m", "it_crack_l", res = {RESOLVE_RANDOM, 20, 1, 1, 1}}},
         wall = {"st_rawglass", {"fl_wood", "fl_abyss", res = RESOLVE_CHECKERBOARD}},
         box = "st_plop",
         door = {"st_blocker", "fl_wood"},
         oxyd = "d",
         endp = {goal = {"st_nil", "it_nil"},
                 alg = "allcrack", max_pairs = 1}},
 [24] = {inf = "fl_wood",
         outf = "fl_sahara",
         wall = {"st_rawglass", {"fl_wood", "fl_sahara", res = RESOLVE_CHECKERBOARD}},
         box = "st_brownie",
         door = "st_break_bug",
         oxyd = "c",
         endp = {goal = "st_nil",
                 give = "#ac_bug",
                 alg = "block"}},
 [25] = {inf = "fl_wood",
         outf = "fl_lawn_a",
         wall = {"st_rawglass", "it_cherry", {"fl_wood", "fl_lawn_a", res = RESOLVE_CHECKERBOARD}},
         box = "st_brownie",
         door = "st_door_a",
         oxyd = "a",
         endp = {goal = {"st_rawglass", "it_cherry", {"fl_wood", "fl_lawn_a", res = RESOLVE_CHECKERBOARD}},
                 give = "it_cherry",
                 alg = "outside"}},
 [26] = {inf = ti{"fl_yinyang_yin", invisible = true},
         outf = "fl_water",
         wall = ti{"st_fake_oxydc", state = OPEN},
         box = "st_brownie",
         door = "st_door_a",
         oxyd = "c",
         endp = {goal = "st_grate_cross",
                 alg = "ralf"}},
 [27] = {inf = ti{"fl_yinyang_yin", invisible = true},
         outf = "fl_water",
         wall = ti{"st_fake_oxydc", state = OPEN},
         box = "st_greenbrown_movable",
         door = "st_door_b",
         oxyd = "c",
         endp = {goal = "st_greenbrown_hollow",
                 alg = "hide"}},
 [28] = {inf = "fl_tigris",
         outf = "fl_sahara",
         wall = ti{"st_fake_oxydc", state = OPEN},
         box = "st_box_wood_growing",
         door = "st_door_c",
         oxyd = "a",
         endp = {goal = {"fl_swamp", "it_nil"},
                 alg = "fourswitch"}},
 [29] = {inf = "fl_tigris",
         outf = "fl_lawn_a",
         wall = ti{"st_fake_oxydc", state = OPEN},
         box = "st_brownie",
         door = "st_knight",
         oxyd = "a",
         endp = {goal = "st_pull",
                 give = "it_sword",
                 alg = "block"}},
 [30] = {inf = "fl_tigris",
         outf = "fl_sahara",
         wall = ti{"st_fake_oxydc", state = OPEN},
         box = "st_box_wood_growing",
         door = "st_break_oxydc",
         oxyd = "a",
         endp = {goal = {"st_nil", "fl_wood_framed", "it_nil"},
                 give = "it_hammer",
                 alg = "block"}},
 [31] = {inf = "fl_tigris",
         outf = "fl_space",
         wall = ti{"st_fake_oxydc", state = OPEN},
         box = "st_rawglass_movable",
         door = "st_door_b",
         oxyd = "a",
         endp = {goal = "st_rawglass_movable",  -- could be chess stones!
                 wall = "st_grate_cross",
                 give = "it_cherry",
                 alg = "outside", max_pairs = 3}},
 [32] = {inf = "fl_bluegray",
         outf = "fl_space",
         wall = "st_metal",
         box = "st_plop",
         door = "st_blocker",
         oxyd = "d",
         endp = {goal = "st_granite",
                 alg = "vortex"}},
 [33] = {inf = "fl_bluegray",
         outf = "fl_blueslab",
         wall = "st_metal",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_door_a",
         oxyd = "d",
         endp = {goal = "st_metal_hollow",
                 alg = "magnets"}},
 [34] = {inf = "fl_bright",
         outf = "fl_abyss",
         wall = "st_metal",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_door_a",
         oxyd = "b",
         endp = {goal = "st_nil",
                 alg = "gradients"}},
 [35] = {inf = "fl_bright",
         outf = "fl_abyss",
         wall = "st_metal",
         box = "st_plop",
         door = "st_blocker",
         oxyd = "b",
         endp = {goal = {"fl_swamp", "it_nil"},
                 alg = "ralf"}},
 [36] = {inf = "fl_bright",
         outf = "fl_abyss",
         wall = "st_metal",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_door_a",
         oxyd = "b",
         endp = {alg = "circle"}},
 [37] = {inf = "fl_ivory",
         outf = "fl_lawn_a",
         wall = "st_granite",
         box = "st_box_wood_growing",
         door = "st_door_c",
         oxyd = "a",
         endp = {wall = "st_grate_framed",
                 goal = {"fl_swamp", "it_nil"},
                 alg = "outside"}},
 [38] = {inf = "fl_ivory",
         outf = "fl_abyss",
         wall = "st_granite",
         box = "st_rawglass_movable",
         door = "st_door_b",
         oxyd = "a",
         endp = {goal = "st_rawglass_movable",  -- could be chess stones!
                 give = {"it_cherry", "it_cherry", "it_cherry", "it_cherry", "it_cherry", "it_cherry", "it_cherry"},
                 alg = "ralf", max_pairs = 1}},
 [39] = {inf = "fl_ivory",
         outf = "fl_abyss",
         wall = "st_granite",
         box = "st_brownie",
         door = "st_door_a",
         oxyd = "a",
         endp = {goal = "st_grate_framed",
                 alg = "fourswitch"}},
 [40] = {inf = "fl_ivory",
         outf = "fl_abyss",
         wall = "st_granite",
         box = "st_rawglass_movable",
         door = "st_knight",
         oxyd = "a",
         endp = {goal = "st_lightglass_hollow",
                 give = "it_sword",
                 alg = "block"}},
 [41] = {inf = "fl_rough",
         outf = "fl_space",
         wall = "st_granite",
         box = "st_brownie",
         door = "st_door_a",
         oxyd = "c",
         endp = {wall = "st_granite_hollow",
                 goal = {"st_nil", "it_nil", "fl_hay"},
                 alg = "outside", max_pairs = 3}},
 [42] = {inf = "fl_rough",
         outf = "fl_sahara",
         wall = "st_granite",
         box = "st_greenbrown_movable",
         door = "st_door_b",
         oxyd = "c",
         endp = {goal = "st_greenbrown",
                 alg = "vortex"}},
 [43] = {inf = "fl_lawn_a",
         outf = "fl_space",
         wall = "st_plaster",
         box = "st_brownie",
         door = "st_door_a",
         oxyd = "a",
         endp = {wall = "st_plaster_hollow",
                 goal = "st_plaster_hollow",
                 alg = "outside", max_pairs = 3}},
 [44] = {inf = "fl_lawn_a",
         outf = "fl_blueslab",
         wall = "st_plaster",
         box = "st_redbrown_movable",
         door = "st_door_b",
         oxyd = "b",
         endp = {goal = "st_redbrown_hollow",
                 alg = "ralf"}},
 [45] = {inf = "fl_lawn_a",
         outf = "fl_lawn_a",
         wall = "st_plaster",
         box = "st_box_wood_growing",
         door = "st_break_bug",
         oxyd = "a",
         endp = {goal = {"fl_swamp", "it_nil"},
                 give = "#ac_bug",
                 alg = "block"}},
 [46] = {inf = "fl_lawn_a",
         outf = "fl_abyss",
         wall = "st_plaster",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_flat_cracked",
         oxyd = "d",
         endp = {goal = "st_nil",
                 give = "it_hammer",
                 alg = "block"}},
 [47] = {inf = "fl_lawn_a",
         outf = "fl_sahara",
         wall = "st_plaster",
         box = "st_greenbrown_movable",
         door = "st_break_bug",
         oxyd = "c",
         endp = {goal = "st_greenbrown_hollow",
                 give = "#ac_bug",
                 alg = "block"}},
 [48] = {inf = "fl_lawn_a",
         outf = "fl_lawn_a",
         wall = "st_flat",
         box = "st_rawglass_movable",
         door = "st_door_b",
         oxyd = "a",
         endp = {goal = "st_rawglass_movable",  -- could be chess stones!
                 wall = "st_flat_breakable",
                 give = {"it_cherry", "it_cherry", "it_cherry", "it_hammer"},
                 alg = "ralf"}},
 [49] = {inf = "fl_lawn_a",
         outf = "fl_blueslab",
         wall = "st_plaster",
         box = "st_redbrown_movable",
         door = "st_flat_cracked",
         oxyd = "b",
         endp = {goal = "st_redbrown_hollow",
                 give = "it_hammer",
                 alg = "block"}},
 [50] = {inf = "fl_lawn_a",
         outf = "fl_lawn_a",
         wall = "st_plaster",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_door_c",
         oxyd = "a",
         endp = {alg = "circle"}},
 [51] = {inf = "fl_lawn_a",
         outf = "fl_lawn_a",
         wall = "st_plaster",
         box = "st_box_wood_growing",
         door = "st_door_c",
         oxyd = "a",
         endp = {wall = {"st_flat_breaking", "fl_sahara"},
                 goal = {"fl_swamp", "it_nil"},
                 alg = "outside"}},
 [52] = {inf = "fl_lawn_a",
         outf = "fl_water",
         wall = "st_plaster",
         box = "st_box_wood",
         door = "st_door_c",
         oxyd = "c",
         endp = {goal = {"st_grate_cross", "it_nil"},
                 alg = "ralf"}},
 [53] = {inf = "fl_lawn_a",
         outf = "fl_space",
         wall = "st_plaster",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_door_b",
         oxyd = "d",
         endp = {goal = {"st_nil", "fl_swamp"},
                 alg = "fourswitch"}},
 [54] = {inf = "fl_himalaya",
         outf = "fl_water",
         wall = "st_purplemarble",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_door_a",
         oxyd = "b",
         endp = {goal = "st_purplemarble",
                 alg = "vortex"}},
 [55] = {inf = "fl_himalaya",
         outf = "fl_abyss",
         wall = "st_purplemarble",
         box = "st_redbrown_movable",
         door = "st_door_b",
         oxyd = "b",
         endp = {goal = "st_redbrown_hollow",
                 alg = "ralf"}},
 [56] = {inf = "fl_himalaya",
         outf = "fl_abyss",
         wall = "st_purplemarble",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_door_b",
         oxyd = "b",
         endp = {alg = "circle"}},
 [57] = {inf = "fl_redslab",
         outf = "fl_blueslab",
         wall = "st_purplemarble",
         box = "st_plop",
         door = "st_blocker",
         oxyd = "d",
         endp = {wall = {"st_nil", "it_explosion"},
                 goal = {"st_nil", "it_explosion"},
                 alg = "outside"}},
 [58] = {inf = "fl_redslab",
         outf = "fl_space",
         wall = "st_purplemarble",
         box = "st_plaster_movable",
         door = "st_flat_cracked",
         oxyd = "d",
         endp = {goal = "st_flat_cracked",
                 give = "it_hammer",
                 alg = "block"}},
 [59] = {inf = "fl_redslab",
         outf = "fl_space",
         wall = "st_purplemarble",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_door_a",
         oxyd = "d",
         endp = {goal = "st_nil",
                 alg = "ralf"}},
 [60] = {inf = "fl_redslab",
         outf = "fl_space",
         wall = "st_purplemarble",
         box = "st_plaster_movable",
         door = "st_break_bug",
         oxyd = "d",
         endp = {goal = "st_break_bug",
                 give = "#ac_bug",
                 alg = "block"}},
 [61] = {inf = "fl_samba",
         outf = "fl_lawn_a",
         wall = "st_tigris",
         box = "st_greenbrown_movable",
         door = "st_door_b",
         oxyd = "c",
         endp = {goal = "st_greenbrown_hollow",
                 alg = "fourswitch"}},
 [62] = {inf = "fl_samba",
         outf = "fl_water",
         wall = "st_tigris",
         box = "st_plop",
         door = "st_blocker",
         oxyd = "b",
         endp = {goal = "st_blocker",
                 alg = "vortex"}},
 [63] = {inf = "fl_samba",
         outf = "fl_lawn_a",
         wall = "st_tigris",
         box = "st_plaster_movable",
         door = "st_flat_cracked",
         oxyd = "d",
         endp = {goal = "st_flat_cracked",
                 give = "it_hammer",
                 alg = "block"}},
 [64] = {inf = "fl_samba",
         outf = "fl_water",
         wall = "st_tigris",
         box = "st_redbrown_movable",
         door = "st_door_b",
         oxyd = "b",
         endp = {goal = "st_redbrown_hollow",
                 alg = "gradients"}},
 [65] = {inf = "fl_samba",
         outf = "fl_space",
         wall = "st_tigris",
         box = "st_box_wood_growing",
         door = "st_door_c",
         oxyd = "a",
         endp = {goal = {"st_nil", "fl_wood_framed", "it_nil"},
                 alg = "ralf"}},
 [66] = {inf = "fl_samba",
         outf = "fl_lawn_a",
         wall = "st_tigris",
         box = "st_greenbrown_movable",
         door = "st_door_b",
         oxyd = "c",
         endp = {goal = "st_greenbrown",
                 alg = "vortex"}},
 [67] = {inf = "fl_samba",
         outf = "fl_water",
         wall = "st_tigris",
         box = "st_plop",
         door = "st_blocker",
         oxyd = "b",
         endp = {alg = "circle"}},
 [68] = {inf = "fl_samba",
         outf = {"fl_water", "fl_samba",
                 {"fl_samba", ti{"it_crack_s", flavor = "water"}},
                 {"fl_samba", ti{"it_crack_m", flavor = "water"}},
                 {"fl_samba", ti{"it_crack_l", flavor = "water"}}, res = RESOLVE_WAVES},
         wall = "st_tigris",
         box = "st_brownie",
         door = "st_door_a",
         oxyd = "a",
         endp = {goal = "st_nil",
                 alg = "allcrack", max_pairs = 1}},
 [69] = {inf = "fl_samba",
         outf = "fl_space",
         wall = "st_tigris",
         box = "st_plop",
         door = "st_blocker",
         oxyd = "d",
         endp = {goal = {"fl_swamp", "it_nil"},
                 alg = "ralf"}},
 [70] = {inf = ti{"fl_yinyang_yin", invisible = true},
         outf = "fl_space",
         wall = "st_purplegray",
         box = "st_plaster_movable",
         door = "st_door_b",
         oxyd = "d",
         endp = {goal = "st_flat_breaking",
                 alg = "ralf"}},
 [71] = {inf = ti{"fl_yinyang_yin", invisible = true},
         outf = "fl_lawn_a",
         wall = "st_purplegray",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_door_a",
         oxyd = "d",
         endp = {wall = {"st_nil", "it_explosion"},
                 goal = {"st_nil", "it_explosion"},
                 alg = "outside"}},
 [72] = {inf = ti{"fl_yinyang_yin", invisible = true},
         outf = "fl_lawn_a",
         wall = "st_purplegray",
         box = "st_plop",
         door = "st_blocker",
         oxyd = "d",
         endp = {goal = {"fl_swamp", "it_nil"},
                 alg = "magnets"}},
 [73] = {inf = ti{"fl_yinyang_yin", invisible = true},
         outf = "fl_lawn_a",
         wall = "st_purplegray",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_knight",
         oxyd = "d",
         endp = {goal = "st_knight",
                 give = "it_sword",
                 alg = "block"}},
 [74] = {inf = "fl_tigris",
         outf = "fl_blueslab",
         wall = "st_purplegray",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_blocker",
         oxyd = "b",
         endp = {goal = "st_nil",
                 alg = "fourswitch"}},
 [75] = {inf = "fl_tigris",
         outf = "fl_water",
         wall = "st_purplegray",
         box = "st_shogun",
         goal = "it_shogun_s",
         door = "st_door_a",
         oxyd = "b",
         endp = {goal = {"st_nil", "it_explosion"},
                 alg = "gradients"}},
 [76] = {inf = "fl_platinum",
         outf = "fl_abyss",
         wall = "st_darkglass",
         box = "st_lightglass_movable",
         door = "st_door_a",
         oxyd = "b",
         endp = {goal = "st_pull",
                 alg = "hide"}},
 [77] = {inf = "fl_darkgray",
         outf = "fl_lawn_b",
         wall = "st_brick",
         box = "st_flat_movable",
         door = "st_door_d",
         oxyd = "a",
         endp = {goal = "st_flat_cracked",
                 give = "it_hammer",
                 alg = "knock"}},
 [78] = {inf = ti{"fl_dunes", friction = 3.0, adhesion = 1.0},
         outf = "fl_sand",
         wall = "st_pinkbumps",
         box = "st_plaster_movable",
         door = "st_flat_cracked",
         oxyd = "a",
         endp = {goal = "st_flat_breakable",
                 give = "it_hammer",
                 alg = "block"}},
 [79] = {inf = "fl_gravel",
         outf = {"fl_gravel", "st_disco_medium"},
         wall = "st_camouflage",
         box = "st_box_rock",
         door = "st_camouflage",
         open_door = {"st_nil", "fl_lawn_b"},
         oxyd = "b",
         endp = {goal = "st_camouflage",
                 alg = "vortex"}},
 [80] = {inf = "fl_lawn_a",
         outf = {"fl_water", "fl_swamp", res = {RESOLVE_RANDOM, 5, 1}},
         wall = "st_camouflage",
         box = "st_box_hay",
         door = "st_door_a",
         oxyd = "d",
         endp = {wall = {"fl_swamp", {"st_camouflage_hollow", "st_nil", res = {RESOLVE_RANDOM, 1, 2}}},
                 goal = {"fl_swamp", "it_nil"},
                 give = "it_umbrella",
                 alg = "outside", max_pairs = 1}},
 [81] = {inf = "fl_dark",
         outf = "fl_bright",
         wall = {"st_lightglass", "fl_platinum"},
         box = "st_darkglass_movable",
         door = "st_passage_black_frame",
         open_door = "st_passage_white_frame",
         oxyd = "c",
         white = true,
         endp = {goal = "st_blur_straight",
                 alg = "ralf"}},
 [82] = {inf = "fl_sand",
         outf = "fl_water",
         wall = {"st_lightglass", "fl_water"},
         box = "st_box_wood",
         door = {"st_door_a", "fl_sand"},
         oxyd = "c",
         endp = {goal = {"st_nil", "fl_wood_framed", "it_nil"},
                 alg = "fourswitch"}},
 [83] = {inf = "fl_platinum",
         outf = {"fl_lawn_b", "st_disco_medium"},
         wall = "st_darkglass",
         box = "st_camouflage_movable",
         door = "st_darkglass",
         open_door = "st_lightglass_hollow",
         oxyd = "b",
         endp = {outf = "st_nil",
                 goal = "st_camouflage_hollow",
                 alg = "ralf"}},
 [84] = {inf = "fl_sand",
         outf = {"fl_water", "st_disco_medium"},
         wall = "st_darkglass",
         box = "st_box_rock",
         door = "st_door_d",
         oxyd = "b",
         endp = {goal = {"fl_swamp", "it_nil"},
                 alg = "knock"}},
 [85] = {inf = "fl_sand",
         outf = {"fl_water", "st_disco_medium"},
         wall = "st_brick",
         box = "st_box_rock",
         door = "st_door_d",
         oxyd = "a",
         endp = {goal = "st_passage_black_frame",
                 alg = "ralf"}},
 [86] = {inf = ti{"fl_red", burnable = false, friction = 3.0},
         outf = "fl_space",
         wall = {"st_redfiber", "fl_fake_abyss"},
         box = "st_lightglass_movable",
         door = {"st_nil", ti{"fl_red", burnable = true, eternal = true, friction = 3.0}, "it_burnable_ignited"},
         open_door = {"it_nil", ti{"fl_red", burnable = false, friction = 3.0}},
         oxyd = "a",
         endp = {goal = {"st_nil", "it_explosion"},
                 alg = "ralf"}},
 [87] = {inf = "fl_plank",
         outf = "fl_water",
         wall = {"st_redfiber", "fl_blueslab"},
         box = "st_flat_movable",
         door = "st_redfiber",
         open_door = "st_lightglass_hollow",
         oxyd = "a",
         endp = {goal = "st_greengray",
                 alg = "vortex"}},
 [88] = {inf = "fl_dark",
         outf = "fl_abyss",
         wall = "st_fake_oxyda",
         box = "st_lightglass_movable",
         door = "st_door_a",
         oxyd = "a",
         endp = {goal = "st_lightglass_hollow",
                 alg = "hide"}},
 [89] = {inf = "fl_brick",
         outf = {"fl_mortar", "st_disco_medium"},
         wall = ti{"st_fake_oxyda", state = OPEN},
         box = "st_greenbrown_movable",
         door = "st_door_d",
         oxyd = "a",
         endp = {goal = "st_grate_framed",
                 alg = "knock"}},
 [90] = {inf = "fl_redslab",
         outf = "fl_space",
         wall = "st_fake_oxydb",
         box = "st_plaster_movable",
         door = "st_door_a",
         oxyd = "b",
         endp = {goal = "st_flat_breaking",
                 alg = "hide"}},
 [91] = {inf = "fl_blueslab",
         outf = {"fl_swamp", "st_disco_light"},
         wall = ti{"st_fake_oxydb", state = OPEN},
         box = "st_box_hay",
         door = "st_break_plain",
         oxyd = "b",
         endp = {goal = "st_break_plain",
                 give = "it_hammer",
                 alg = "block"}},
 [92] = {inf = "fl_sahara",
         outf = {"fl_water", "st_disco_light"},
         wall = "st_fake_oxydc",
         box = "st_darkglass_movable",
         door = "st_door_a",
         oxyd = "c",
         endp = {goal = "st_lightglass_hollow",
                 alg = "hide"}},
 [93] = {inf = ti{"fl_red", friction = 3.0},
         outf = {"fl_abyss", {"st_jamb_black", "st_jamb_white", res = RESOLVE_RANDOM}},
         wall = ti{"st_fake_oxydc", state = OPEN},
         box = "st_rawglass_movable",
         door = "st_door_a",
         oxyd = "c",
         endp = {goal = "st_passage_black_frame",
                 alg = "fourswitch"}},
 [94] = {inf = "fl_concrete",
         outf = "fl_sand",
         wall = "st_fake_oxydd",
         box = "st_darkglass_movable",
         door = "st_door_a",
         oxyd = "d",
         endp = {goal = "st_lightglass_hollow",
                 alg = "hide"}},
 [95] = {inf = "fl_marble",
         outf = "fl_water",
         wall = ti{"st_fake_oxydd", state = OPEN},
         box = "st_box_rock",
         door = "st_door_a",
         oxyd = "b",
         endp = {outf = "fl_swamp",
                 wall = "st_break_plain",
                 goal = {"fl_swamp", "it_nil"},
                 give = "it_hammer",
                 alg = "outside"}},
 [96] = {inf = "fl_marble",
         outf = {"fl_lawn_c3", "fl_lawn_d3", res = RESOLVE_CHECKERBOARD},
         wall = "st_redbrown",
         box = "st_box_rock",
         door = "st_door_d",
         oxyd = "a",
         endp = {goal = {"st_grate_framed", "it_nil"},
                 alg = "knock"}},
 [97] = {inf = "fl_lawn_a",
         outf = {"fl_lawn_a", "st_redbrown"},
         wall = "st_redbrown",
         box = "st_camouflage_movable",
         door = "st_door_a",
         oxyd = "a",
         endp = {outf = "st_redbrown_hollow",
                 wall = "st_redbrown_hollow",
                 goal = "st_camouflage_hollow",
                 alg = "outside"}},
 [98] = {inf = ti{"fl_yinyang_yin", invisible = true},
         outf = {ti{"fl_yinyang_yin", invisible = true}, "st_redrock"},
         wall = "st_redrock",
         box = "st_granite_movable",
         door = "st_purplegray",
         open_door = "st_nil",
         oxyd = "b",
         endp = {goal = "st_purplegray",
                 alg = "vortex"}},
 [99] = {inf = "fl_mortar",
         outf = "fl_brick",
         wall = "st_redrock",
         box = "st_lightglass_movable",
         door = "st_door_a",
         oxyd = "b",
         endp = {wall = {"st_lightglass_hollow", "fl_tigris"},
                 goal = "st_lightglass_hollow",
                 alg = "outside"}},
[100] = {inf = "fl_mortar",
         outf = "fl_water",
         wall = "st_redrock",
         box = "st_plop",
         door = "st_door_d",
         oxyd = "b",
         endp = {goal = {"fl_swamp", "it_nil"},
                 alg = "ralf"}},
[101] = {inf = "fl_lawn_b",
         outf = {"fl_lawn_c3", "fl_lawn_d4", res = RESOLVE_CHECKERBOARD},
         wall = "st_redrock",
         box = "st_darkglass_movable",
         door = "st_door_a",
         oxyd = "a",
         endp = {goal = "st_lightglass_hollow",
                 alg = "hide"}},
[102] = {inf = "fl_rock",
         outf = {"fl_rock", "st_disco_medium"},
         wall = "st_darkgray",
         box = "st_camouflage_movable",
         door = "st_door_a",
         oxyd = "b",
         endp = {wall = {"st_disco_light", "fl_gray"},
                 goal = {"it_nil", "st_disco_light", "fl_lawn_b"},
                 alg = "outside", max_pairs = 3}},
[103] = {inf = ti{"fl_stone", friction = 3.0, adhesion = 1.0},
         outf = {"fl_water", "st_disco_medium"},
         wall = "st_darkgray",
         box = "st_darkglass_movable",
         door = "st_door_a",
         oxyd = "b",
         endp = {goal = {"st_pull", "it_nil", "fl_dark"},
                 alg = "fourswitch"}},
[104] = {inf = "fl_platinum",
         outf = "fl_space",
         wall = "st_darkgray",
         box = "st_box_wood",
         door = "st_door_d",
         oxyd = "b",
         endp = {goal = {"st_nil", "fl_marble", "it_nil"},
                 alg = "knock"}},
[105] = {inf = "fl_woven",
         outf = "fl_gravel",
         wall = "st_greengray",
         box = "st_camouflage_movable",
         door = "st_door_a",
         oxyd = "a",
         endp = {goal = {"fl_aquamarine", "it_nil", "st_nil"},
                 alg = "magnets"}},
[106] = {inf = "fl_dark",
         outf = "fl_abyss",
         wall = "st_greengray",
         box = "st_brownie",
         door = "st_flat_cracked",
         oxyd = "b",
         endp = {goal = "st_break_bug",
                 give = {"#ac_bug", "it_hammer"},
                 alg = "block"}},
[107] = {inf = "fl_plank",
         outf = {"fl_plank", "st_concrete"},
         wall = "st_concrete",
         box = "st_rawglass_movable",
         door = "st_door_d",
         oxyd = "d",
         endp = {goal = {"st_nil", "it_explosion"},
                 alg = "knock"}},
[108] = {inf = "fl_lawn_a",
         outf = "fl_water",
         wall = {"st_concrete", "fl_water"},
         box = "st_darkglass_movable",
         door = {"st_break_plain", "fl_lawn_a"},
         oxyd = "c",
         endp = {goal = "st_pull",
                 give = "it_hammer",
                 alg = "block"}},
[109] = {inf = ti{"fl_stone", friction = 3.0, adhesion = 1.0},
         outf = "fl_space",
         wall = {"st_concrete", "fl_fake_abyss"},
         box = "st_redbrown_movable",
         door = "st_door_a",
         oxyd = "c",
         endp = {wall = {"st_nil", "fl_darkgray"},
                 goal = {"st_nil", "it_nil", "fl_hay"},
                 alg = "outside", max_pairs = 3}},
[110] = {inf = "fl_rock",
         outf = {"fl_rock", "st_ancient"},
         wall = "st_ancient",
         box = "st_greenbrown_movable",
         door = "st_ancient",
         open_door = "st_nil",
         oxyd = "b",
         endp = {goal = "st_ancient",
                 alg = "vortex"}},
[111] = {inf = "fl_sand",
         outf = "fl_water",
         wall = "st_ancient",
         box = "st_rawglass_movable",
         door = "st_door_c",
         oxyd = "c",
         endp = {goal = "st_grate_framed",
                 alg = "ralf"}},
[112] = {inf = ti{"fl_stone", friction = 3.0, adhesion = 1.0},
         outf = "fl_swamp",
         wall = "st_ancient",
         box = "st_camouflage_movable",
         door = "st_door_d",
         oxyd = "a",
         endp = {goal = "st_camouflage_hollow",
                 alg = "knock"}},
[113] = {inf = "fl_bluegreen",
         outf = "fl_abyss",
         wall = "st_brownmarble",
         box = "st_plop",
         door = "st_door_a",
         oxyd = "a",
         endp = {wall = {{"st_nil", "it_explosion"}, "fl_marble"},
                 goal = {{"st_nil", "it_explosion"}, "it_nil", "fl_aquamarine"},
                 give = "it_umbrella",
                 alg = "outside", max_pairs = 1}},
[114] = {inf = "fl_sand",
         outf = {"fl_sand", "st_brownmarble"},
         wall = "st_brownmarble",
         box = "st_box_wood",
         door = "st_knight",
         oxyd = "b",
         endp = {goal = {"fl_swamp", "it_nil"},
                 give = "it_sword",
                 alg = "block"}},
[115] = {inf = {"fl_platinum", "fl_bright", res = RESOLVE_CHECKERBOARD},
         outf = {"fl_space", "fl_abyss", res = RESOLVE_CHECKERBOARD},
         wall = "st_brownpyramid",
         box = "st_darkglass_movable",
         door = "st_brownpyramid",
         open_door = "st_grate_cross",
         oxyd = "a",
         endp = {wall = "st_grate_cross",
                 goal = "st_lightglass_hollow",
                 give = "it_umbrella",
                 alg = "block"}},
[116] = {inf = "fl_wood_framed",
         outf = "fl_water",
         wall = "st_brownpyramid",
         box = "st_granite_movable",
         door = "st_brownpyramid",
         open_door = "st_grate_cross",
         oxyd = "b",
         endp = {goal = "st_granite_hollow",
                 alg = "ralf"}},
[117] = {inf = "fl_dark",
         outf = "st_brownpyramid",
         wall = "st_brownpyramid",
         box = "st_rawglass_movable",
         door = "st_door_a",
         oxyd = "d",
         endp = {inf = "fl_ice",
                 outf = "st_fake_oxydd",
                 wall = "st_fake_oxydd",
                 goal = {"st_nil", "it_nil", "fl_ice"},
                 alg = "hide", max_pairs = 1}},
[118] = {inf = "fl_dark",
         outf = "fl_gravel",
         wall = "st_redmarble",
         box = "st_rawglass_movable",
         door = "st_door_a",
         oxyd = "b",
         endp = {goal = "st_rawglass",
                 alg = "vortex"}},
[119] = {inf = "fl_redslab",
         outf = {"fl_blueslab", "st_disco_light",
                 {"it_nil",
                  ti{"it_crack_s", flavor = "water"},
                  ti{"it_crack_m", flavor = "water"},
                  ti{"it_crack_l", flavor = "water"},
                  res = {RESOLVE_RANDOM, 3, 1, 1, 1}}},
         wall = "st_redmarble",
         box = "st_plop",
         door = "st_door_a",
         oxyd = "d",
         endp = {goal = "st_nil",
                 alg = "allcrack", max_pairs = 1}},
[120] = {inf = "fl_dark",
         outf = {"st_redbrown", "st_redmarble", res = RESOLVE_CHECKERBOARD},
         wall = {"st_redbrown", "st_redmarble", res = RESOLVE_CHECKERBOARD},
         box = "st_plaster_movable",
         open_door = "st_nil",
         oxyd = "b",
         endp = {goal = "st_flat_cracked",
                 give = "it_hammer",
                 alg = "ralf"}},
[121] = {inf = "fl_wood",
         outf = {"fl_lawn_d3", "fl_lawn_d2", res = RESOLVE_CHECKERBOARD},
         wall = "st_panel",
         box = "st_box_wood",
         door = "st_box_wood",
         open_door = "fl_swamp",
         oxyd = "a",
         endp = {goal = {"it_nil", "fl_swamp"},
                 alg = "block"}},
[122] = {inf = "fl_lawn_a",
         outf = "fl_lawn_b",
         wall = "st_panel",
         box = "st_plop",
         door = "st_door_a",
         oxyd = "a",
         endp = {goal = {"it_nil", "fl_swamp"},
                 alg = "fourswitch"}},
[123] = {inf = ti{"fl_dunes", friction = 3.0, adhesion = 1.0},
         outf = "fl_bluegreen",
         wall = "st_woven",
         box = "st_lightglass_movable",
         door = "st_lightglass",
         open_door = "st_pull",
         oxyd = "a",
         endp = {goal = "st_pull",
                 alg = "ralf"}},
[124] = {inf = "fl_hay",
         outf = "fl_water",
         wall = "st_woven",
         box = "st_redbrown_movable",
         door = "st_door_a",
         oxyd = "a",
         endp = {wall = {"st_nil", "fl_woven"},
                 goal = "st_redbrown_hollow",
                 give = "it_umbrella",
                 alg = "outside", max_pairs = 1}},
[125] = {inf = "fl_lawn_b",
         outf = "fl_lawn_a",
         wall = "st_yellow",
         box = "st_plaster_movable",
         door = "st_door_c",
         oxyd = "a",
         endp = {goal = "st_grate_framed",
                 alg = "ralf"}},
[126] = {inf = "fl_blueslab",
         outf = "fl_abyss",
         wall = "st_yellow",
         box = "st_rawglass_movable",
         door = "st_break_bug",
         oxyd = "d",
         endp = {goal = {"st_nil", "it_nil", "fl_ice"},
                 give = "#ac_bug",
                 alg = "block"}},
[127] = {inf = "fl_platinum",
         outf = "fl_space",
         wall = "st_yellow",
         box = "st_plop",
         door = "st_door_a",
         oxyd = "d",
         endp = {goal = "st_brownmarble",
                 alg = "vortex"}},
[128] = {inf = "fl_himalaya",
         outf = {"fl_himalaya", {"st_concrete", "st_greengray", res = RESOLVE_CHECKERBOARD}},
         wall = "st_greengray",
         box = "st_lightglass_movable",
         door = "st_door_a",
         oxyd = "d",
         endp = {goal = {"st_nil", "it_explosion"},
                 alg = "magnets"}},
[129] = {inf = ti{"fl_dunes", friction = 3.0, adhesion = 1.0},
         outf = {"fl_lawn_e1", "fl_lawn_e2", "fl_lawn_e3", "fl_lawn_e4", res = RESOLVE_WAVES},
         wall = {"st_ancient", "fl_lawn_b"},
         box = "st_camouflage_movable",
         door = {{"fl_bridge_bw", "fl_bridge_bn", res = RESOLVE_RANDOM}, "st_nil"},
         oxyd = "d",
         endp = {goal = "st_camouflage_hollow",
                 alg = "ralf"}},
[130] = {inf = "fl_darkgray",
         outf = {"fl_dark", {"st_redrock", "st_invisible", "st_invisible", "st_invisible", res = RESOLVE_WAVES}},
         wall = "st_redrock",
         box = "st_lightglass_movable",
         door = "st_door_a",
         oxyd = "a",
         endp = {goal = "st_nil",
                 alg = "gradients"}},
[131] = {inf = "fl_wood",
         outf = {"fl_wood", {"st_yellow", "st_yellow", "st_redrock", "st_redrock", res = RESOLVE_WAVES}},
         wall = {"st_yellow", "st_yellow", "st_redrock", "st_redrock", res = RESOLVE_WAVES},
         box = "st_lightglass_movable",
         door = "st_flat_breakable",
         oxyd = "d",
         endp = {goal = "st_lightglass_hollow",
                 give = "it_hammer",
                 alg = "block"}},
[132] = {inf = "fl_lawn_b",
         outf = {"fl_water", "fl_swamp", res = {RESOLVE_RANDOM, 3, 1}},
         wall = "st_camouflage",
         box = "st_box_wood",
         door = {"fl_water", "st_lightglass_hollow"},
         open_door = "fl_swamp",
         oxyd = "d",
         endp = {inf = {"fl_lawn_b", "fl_swamp", res = RESOLVE_RANDOM},
                 goal = {"fl_swamp", "it_nil"},
                 alg = "ralf"}},
[133] = {inf = "fl_metal",
         outf = {"fl_space", "fl_abyss", res = {RESOLVE_RANDOM, 1, 3}},
         wall = "st_metal",
         box = "st_darkglass_movable",
         door = "st_knight",
         oxyd = "d",
         endp = {goal = "st_lightglass_hollow",
                 give = "it_sword",
                 alg = "block"}},
[134] = {inf = "fl_bright",
         outf = {"fl_abyss", {"st_grate_cross", "st_invisible", "st_invisible", "st_invisible", res = RESOLVE_WAVES}},
         wall = "st_metal",
         box = "st_redbrown_movable",
         door = "st_door_a",
         oxyd = "d",
         endp = {goal = "st_redbrown_hollow",
                 alg = "fourswitch"}},
[135] = {inf = "fl_bright",
         outf = {"fl_bright", {"st_granite", "st_invisible", res = {RESOLVE_RANDOM, 1, 3}}},
         wall = "st_fake_oxydc",
         box = "st_rawglass_movable",
         door = "st_door_a",
         oxyd = "c",
         endp = {goal = {"st_lightglass_hollow", "it_nil"},
                 alg = "hide"}},
[136] = {inf = "fl_rough",
         outf = {"st_oneway_white_n", "st_oneway_white_s", "st_oneway_white_e", "st_oneway_white_w", res = RESOLVE_RANDOM},
         wall = {"st_oneway_white_n", "st_oneway_white_s", "st_oneway_white_e", "st_oneway_white_w", res = RESOLVE_RANDOM},
         box = "st_plop",
         oxyd = "b",
         endp = {alg = "circle"}},
[137] = {inf = "fl_metal",
         outf = {"st_mirror_slab_n", "st_mirror_slab_e", "st_mirror_slab_s", "st_mirror_slab_w", res = RESOLVE_RANDOM},
         wall = {"st_redfiber", "fl_abyss"},
         box = {"st_mirror_slab_nm", "st_mirror_slab_em", "st_mirror_slab_sm", "st_mirror_slab_wm", res = RESOLVE_RANDOM},
         door = "st_redfiber",
         open_door = "st_lightglass_hollow",
         oxyd = "b",
         endp = {goal = {"st_nil", "it_nil", "fl_darkgray"},
                 alg = "ralf"}},
[138] = {inf = "fl_wood_framed",
         outf = "fl_water",
         wall = {ti{"st_panel", cluster = 1}, ti{"st_panel", cluster = 2}, res = RESOLVE_RANDOM},
         box = "st_shogun_s",
         goal = "it_shogun_s",
         open_door = "st_nil",
         oxyd = "a",
         endp = {goal = "st_nil",
                 alg = "ralf"}},
[139] = {inf = "fl_dark",
         outf = {{"st_passage_white_square", "fl_white"}, {"st_passage_black_square", "fl_fake_abyss"}, res = RESOLVE_CHECKERBOARD},
         wall = "st_blocker",
         box = "st_shogun_s",
         door = "st_blocker",
         oxyd = "b",
         endp = {inf = {"fl_white", "fl_fake_abyss", res = RESOLVE_CHECKERBOARD},
                 goal = {"st_nil", "it_nil", {"fl_white", "fl_fake_abyss", res = RESOLVE_CHECKERBOARD}},
                 alg = "ralf"}},
[140] = {inf = ti{"fl_bast", friction = 7.0, adhesion = 2.0},
         outf = {"fl_lawn_e4", "fl_lawn_e2", "fl_lawn_e1", "fl_lawn_e3", res = RESOLVE_WAVES},
         wall = {"st_brownpyramid", "fl_lawn_b"},
         box = "st_brownie",
         door = "st_door_a",
         oxyd = "d",
         endp = {goal = {"st_grate_cross", "it_nil"},
                 alg = "fourswitch"}},
[141] = {inf = ti{"fl_aquamarine", adhesion = 1.0, friction = 3.0},
         outf = {"fl_water", {"st_brownmarble", "st_invisible", "st_invisible", "st_invisible", res = RESOLVE_WAVES}},
         wall = {"st_purplemarble", "fl_lawn_b"},
         box = "st_brownie",
         door = "st_knight",
         oxyd = "d",
         endp = {goal = "st_nil",
                 give = "it_sword",
                 alg = "block"}},
[142] = {inf = "fl_lawn_b",
         outf = {"fl_lawn_c4", "fl_lawn_d2", "fl_lawn_c2", "fl_lawn_e3", res = RESOLVE_WAVES},
         wall = {"st_lightglass", "fl_lawn_b"},
         box = "st_darkglass_movable",
         door = "st_door_a",
         oxyd = "d",
         endp = {goal = "st_lightglass_hollow",
                 alg = "hide"}},
[143] = {inf = "fl_wood",
         outf = {"st_disco_light", {"fl_wood_h", "fl_wood_h", "fl_wood_h", "fl_wood_v", res = RESOLVE_WAVES}},
         wall = {"st_tigris", "fl_wood_framed"},
         box = "st_plop",
         door = "st_door_a",
         oxyd = "a",
         endp = {goal = "st_purplemarble",
                 alg = "vortex"}},
[144] = {inf = "fl_bluegreen",
         outf = {"fl_space", {"it_squashed", "it_nil", res = {RESOLVE_RANDOM, 1, 3}}},
         wall = "st_purplegray",
         box = "st_box_wood",
         door = "st_door_a",
         oxyd = "d",
         endp = {wall = "st_lightglass_hollow",
                 goal = "st_darkglass_hollow",
                 alg = "outside", max_pairs = 3}},
[145] = {inf = ti{"fl_dunes", friction = 3.0, adhesion = 1.0},
         outf = {"fl_sand", {"it_landmine", "it_bottle_broken", "it_nil", res = {RESOLVE_RANDOM, 3, 1, 15}}},
         wall = {"st_greenbrown", "fl_sand"},
         box = "st_lightglass_movable",
         door = {"st_door_a", ti{"fl_dunes", friction = 3.0, adhesion = 1.0}},
         oxyd = "a",
         endp = {goal = "st_lightglass_hollow",
                 alg = "ralf"}},
[146] = {inf = "fl_dark",
         outf = {"fl_abyss", {"st_grate_cross", "st_nil", res = {RESOLVE_RANDOM, 1, 10}}},
         wall = "st_granite",
         box = "st_box_wood",
         door = "st_door_a",
         oxyd = "b",
         white = true,
         endp = {goal = {"st_grate_cross", "it_nil"},
                 alg = "magnets"}},
[147] = {inf = "fl_gray",
         outf = {"fl_slope_ose", "fl_slope_osw", "fl_slope_one", "fl_slope_onw", res = RESOLVE_WAVES},
         wall = "st_jamb_white",
         box = "st_box_wood",
         door = "st_door_a",
         oxyd = "a",
         white = true,
         endp = {goal = {"st_nil", "it_nil"},
                 alg = "gradients"}},
[148] = {inf = "fl_blueslab",
         outf = {{"fl_redslab", "fl_blueslab", res = RESOLVE_CHECKERBOARD}, "st_disco_light"},
         wall = "st_metal",
         box = "st_shogun_s",
         door = "st_break_white",
         oxyd = "a",
         white = true,
         endp = {goal = "st_break_white",
                 give = "it_hammer",
                 alg = "block"}},
[149] = {inf = "fl_samba",
         outf = "fl_swamp",
         wall = "st_yellow",
         box = "st_shogun_s",
         goal = "it_shogun_s",
         door = "st_door_a",
         oxyd = "c",
         white = true,
         endp = {wall = {{"st_nil", "it_explosion"}, "fl_tigris"},
                 goal = {"st_nil", "it_explosion"},
                 alg = "outside"}},
[150] = {inf = "fl_brick",
         outf = "fl_space",
         wall = "st_redrock",
         box = "st_box_rock",
         door = "st_blocker",
         oxyd = "a",
         white = true,
         endp = {goal = {"st_nil", "fl_rock", "it_nil"},
                 alg = "ralf"}},
}

-- Next follows a table to convert the codes Ralf used in his levels
-- and ralf_sokoban to libsoko-designs. Note that there is a shift
-- by -1 of the ralfcode in his library, except for design 0.
-- Hence, when you start an old sokoban level with
--   play_sokoban(level,715)
-- then ralf_sokoban.init is called with argument 714, which corresponds
-- to libsoko-design 4. Use
--   lib.soko.create_sokoball(..., ...,
--        lib.soko_designlist.ralfcode_conversion_table[715])
-- to activate it manually.
--
lib.soko_designlist.ralfcode_conversion_table = {
     [0]   = 1,
   [714+1] = 4,
   [715+1] = 70,
   [716+1] = 37,
   [718+1] = 18,
   [719+1] = 57,
   [720+1] = 43,
   [764+1] = 28,
   [765+1] = 10,
   [766+1] = 61,
   [767+1] = 19,
   [768+1] = 14,
   [769+1] = 44,
   [770+1] = 5,
   [771+1] = 71,
   [772+1] = 38,
   [773+1] = 62,
   [775+1] = 58,
   [776+1] = 45,
   [777+1] = 34,
   [867+1] = 46,
   [868+1] = 2,
   [869+1] = 74,
   [870+1] = 41,
   [871+1] = 63,
   [872+1] = 20,
   [873+1] = 54,
   [874+1] = 47,
   [875+1] = 32,
   [876+1] = 29,
   [877+1] = 11,
   [910+1] = 6,
   [911+1] = 72,
   [912+1] = 39,
   [913+1] = 64,
   [914+1] = 21,
   [915+1] = 59,
   [916+1] = 48,
   [917+1] = 35,
   [918+1] = 26,
   [919+1] = 8,
   [920+1] = 65,
   [921+1] = 22,
   [922+1] = 16,
  [1184+1] = 30,
  [1185+1] = 12,
  [1186+1] = 66,
  [1187+1] = 23,
  [1188+1] = 15,
  [1189+1] = 49,
  [1190+1] = 7,
  [1191+1] = 73,
  [1192+1] = 40,
  [1193+1] = 67,
  [1194+1] = 24,
  [1195+1] = 60,
  [1196+1] = 50,
  [1196+1] = 51,
  [1197+1] = 36,
  [1198+1] = 27,
  [1199+1] = 9,
  [1200+1] = 68,
  [1232+1] = 3,
  [1233+1] = 75,
  [1234+1] = 42,
  [1235+1] = 69,
  [1236+1] = 25,
  [1237+1] = 55,
  [1237+1] = 56,
  [1238+1] = 52,
  [1239+1] = 33,
  [1240+1] = 31,
  [1241+1] = 13,
  [1314+1] = 17,
  [1315+1] = 53
}

-- statistics uses print to output statistics
-- of the used endphase algorithms.
function lib.soko_designlist.statistics()
    alglist = {}
    for k, v in pairs(lib.soko.design_list) do
        if v.endp then
            alg = v.endp.alg
            if alg then
                alglist[alg] = (alglist[alg] or 0) + 1
            end
        else
            alglist["default"] = (alglist["default"] or 0) + 1
        end
    end
    for k, v in pairs(alglist) do
        print(k..": "..v)
    end
end

    ]]></el:luamain>
    <el:i18n>
    </el:i18n>
  </el:protected>
</el:level>
