<?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="level">
      <el:identity el:title="Caterpillar" el:subtitle="" el:id="nat15"/>
      <el:version el:score="1" el:release="1" el:revision="0" el:status="released"/>
      <el:author  el:name="Nat Pryce" el:email="" el:homepage=""/>
      <el:copyright>Copyright © 2003 Nat Pryce</el:copyright>
      <el:license el:type="GPL version 2" el:open="true"/>
      <el:compatibility el:enigma="0.92">
      </el:compatibility>
      <el:modes el:easy="false" el:single="true" el:network="false"/>
      <el:comments>
        <el:code>Lua 5.1 and XML converted by Leveladministrators</el:code>
      </el:comments>
      <el:score el:easy="-" el:difficult="-"/>
    </el:info>
    <el:luamain><![CDATA[
enigma.ConserveLevel = FALSE

send_message = SendMessage

-- Snake functions

STRENGTH = 50

snake_end = nil

function snake_attach( actor )
    AddRubberBand( snake_end, actor, STRENGTH, 1 )
    snake_end = actor
end

function start_snake( x, y )
    snake_end = set_actor( "ac-blackball", x, y )
end

-----------------------------------------------------------------------------
-- Scenery constructors

function trigger( x, y, callback )
    set_item( "it-trigger", x, y, {action="callback", target=callback} )
end

function whiteball_start( x, y )
    set_stone( "st-white4", x, y )
    return set_actor( "ac-whiteball", x+0.5, y+0.5,
                      {player=0,controllers=0} )
end

function create_westward_shed( x, y, width, callback_name, door_type )
    fill_floor( "fl-water", x, y-1, width+1, 5 )
    fill_floor( "fl-samba", x, y, width, 3 )
    draw_border( "st-rock1", x, y, width, 3 )
    set_stone( door_type or "st-white4", x, y+1 )
    trigger( x+width-3, y+1, callback_name )
    return whiteball_start( x+width-2, y+1 )
end

function create_eastward_shed( x, y, width, callback_name, door_type )
    fill_floor( "fl-water", x-1, y-1, width+1, 5 )
    fill_floor( "fl-samba", x, y, width, 3 )
    draw_border( "st-rock1", x, y, width, 3 )
    set_stone( door_type or "st-white4", x+width-1, y+1 )
    trigger( x+2, y+1, callback_name )
    return whiteball_start( x+1, y+1 )
end

function create_northward_shed( x, y, height, callback_name, door_type )
    fill_floor( "fl-water", x-1, y, 5, height+1 )
    fill_floor( "fl-samba", x, y, 3, height )
    draw_border( "st-rock1", x, y, 3, height )
    set_stone( door_type or "st-white4", x+1, y )
    trigger( x+1, y+height-3, callback_name )
    return whiteball_start( x+1, y+height-2 )
end

function create_southward_shed( x, y, height, callback_name, door_type )
    fill_floor( "fl-water", x-1, y-1, 5, height+1 )
    fill_floor( "fl-samba", x, y, 3, height )
    draw_border( "st-rock1", x, y, 3, height )
    set_stone( door_type or "st-white4", x+1, y+height-1 )
    trigger( x+1, y+2, callback_name )
    return whiteball_start( x+1, y+1 )
end

function oxyd_chamber( x )
    local y = 27
    
    draw_stones( "st-rock1", {x, y}, {0,1}, 7 )
    set_stone( "st-oneway_white-s", x+1, y )
    oxyd( x+1, y+2 )
    set_stone( "st-rock1", x+1, y+3 )
    oxyd( x+1, y+4 )
    set_stone( "st-oneway_white-n", x+1, y+6 )
    draw_stones( "st-rock1", {x+2, y}, {0,1}, 7 )
end

-----------------------------------------------------------------------------
-- The world
-----------------------------------------------------------------------------

create_world( 39, 37 )

fill_floor( "fl-leaves", 0, 0, 39, 25 )
draw_border( "st-rock1", 0, 0, 39, 25 )

start_snake( 12.5, 21.5 )

ball_1 = create_southward_shed( 32, 15, 4, "attach_ball_1", "st-grate1" )
function attach_ball_1()
    if ball_1 then
        snake_attach(ball_1)
        ball_1 = nil
    end
end

ball_2 = create_southward_shed( 11, 4, 4, "attach_ball_2" )
function attach_ball_2()
    if ball_2 then
        snake_attach(ball_2)
        ball_2 = nil
    end
end

ball_3 = create_northward_shed( 2, 18, 5, "attach_ball_3" )
function attach_ball_3()
    if ball_3 then
        snake_attach(ball_3)
        ball_3 = nil
    end
end

ball_4 = create_westward_shed( 4, 7, 6, "attach_ball_4" )
function attach_ball_4()
    if ball_4 then
        snake_attach(ball_4)
        ball_4 = nil
    end
end

ball_5 = create_southward_shed( 34, 2, 7, "attach_ball_5" )
function attach_ball_5()
    if ball_5 then
        snake_attach(ball_5)
        ball_5 = nil
    end
end

ball_6 = create_westward_shed( 25, 4, 8, "attach_ball_6" )
function attach_ball_6()
    if ball_6 then
        snake_attach(ball_6)
        ball_6 = nil
    end
end

ball_7 = create_westward_shed( 8, 15, 9, "attach_ball_7" )
function attach_ball_7()
    if ball_7 then
        snake_attach(ball_7)
        ball_7 = nil
    end
end

ball_8 = create_eastward_shed( 22, 20, 10, "attach_ball_8" )
function attach_ball_8()
    if ball_8 then
        snake_attach(ball_8)
        send_message("door", "open")
        ball_8 = nil
    end
end

draw_border( "st-rock1", 0, 24, 39,13 )
draw_checkerboard_floor( "fl-red", "fl-white", 0, 24, 39, 13 ) 

set_stone( "st-door", 12, 24, {type="h", name="door"} )

set_stone( "st-scissors", 6, 30 )

oxyd_chamber( 22 )
oxyd_chamber( 26 )
oxyd_chamber( 30 )
oxyd_chamber( 34 )
    ]]></el:luamain>
    <el:i18n>
      <el:string el:key="title">
        <el:english el:translate="false"/>
      </el:string>
    </el:i18n>
  </el:protected>
</el:level>
