function map_techtest.init()
	
	local soundhax = load_particle("orb/soundhax.obj")

	function map_techtest.orbInit(object)
		local x, y = object:pos()
		object:data().xTarg = x
		object:data().yTarg = y
	end
	
	function map_techtest.orbUpdateTarg(object)
		local worm = object:get_closest_worm()
		if worm then
			local x, y = worm:pos()
			object:data().xTarg = x
			object:data().yTarg = y
		else
			local oldx, oldy = object:pos()
			if map_is_blocked(object:data().xTarg, object:data().yTarg, oldx, oldy) then
				object:data().xTarg = oldx
				object:data().yTarg = oldy
			elseif vector_distance( object:data().xTarg,object:data().yTarg, object:pos() ) < 40 then
				local newx, newy = angle_vector( randomfloat(0,360), randomfloat(5,150) )
				newx = newx + oldx
				newy = newy + oldy
				object:set_pos( newx, newy )
				worm = object:get_closest_worm()
				if worm and not map_is_blocked(newx, newy, oldx, oldy) then
					object:data().xTarg = newx
					object:data().yTarg = newy
				end
				object:set_pos( oldx, oldy )
			end
		end
	end

	function map_techtest.orbThink(object)
		local worm = object:get_closest_worm()
		local x1, y1 = object:pos()
		if ( not worm ) or ( vector_distance( x1,y1, worm:pos() ) > 20 ) then
			local x1, y1 = object:pos()
			local angle = vector_direction(x1, y1, object:data().xTarg, object:data().yTarg)
			object:push(angle_vector(angle,0.1))
		else
			object:push(0,-0.05)
		end
	end

	function map_techtest.orbClank(object)
		if vector_distance( object:spd() ) > 1.3 then
			object:shoot(soundhax, 1, 0, 0, 0, 0, 0, 0, 0)
		end
	end

	function dotInsideBox(x,y,x1,y1,x2,y2)
		if x > x1 and x < x2 then
		if y > y1 and y < y2 then
			return true
		end
		end
		return false
	end

	function bindings.viewportRender(viewport, worm)
		local bitmap = viewport:get_bitmap()
		local x,y = worm:pos()
		if dotInsideBox(x,y,60,15,140,75) then
			fonts.liero:render( bitmap, "Distortions", 10, 20, 190, 190, 190, Font.Shadow)
		elseif dotInsideBox(x,y,150,15,235, 75) then
			fonts.liero:render( bitmap, "3D Sounds", 10, 20, 190, 190, 190, Font.Shadow)
		elseif dotInsideBox(x,y,240,15,366, 75) then
			fonts.liero:render( bitmap, "Level Particles + Add blender", 10, 20, 190, 190, 190, Font.Shadow)
		elseif dotInsideBox(x,y,281,92,379,149) then
			fonts.liero:render( bitmap, "WU Lines", 10, 20, 190, 190, 190, Font.Shadow)
		elseif dotInsideBox(x,y,160,92,250,149) then
			fonts.liero:render( bitmap, "Dynamic lights", 10, 20, 190, 190, 190, Font.Shadow)
		elseif dotInsideBox(x,y,40,92,140,149) then
			fonts.liero:render( bitmap, "Paralax", 10, 20, 190, 190, 190, Font.Shadow)
		elseif dotInsideBox(x,y,63,166,205,225) then
			fonts.liero:render( bitmap, "Normal Line vs WU Line", 10, 20, 190, 190, 190, Font.Shadow)
		elseif dotInsideBox(x,y,242,166,367,225) then
			fonts.liero:render( bitmap, "Particle <-> Particle collisions", 10, 20, 190, 190, 190, Font.Shadow)
		end
	end
end