function CreateTask(text_singular, text_plural, ...)
    local arg = {...}
   	local task = Task(text_singular, text_plural)
   	
    for i, v in ipairs(arg) do
        if play_field:HasObject(v) then
            task:AddObject(v)            
        end
    end

    assert(not play_field:GetLevelScreen():HasTask(task))    
    return task
end

function LevelScreen:AddTaskSafe(task)
    if task:GetNumberOfObjects() > 0 then
        self:AddTask(task)
    end
end

function ManualCreateTask(text_singular)
   	local task = Task(text_singular, '')
    assert(not play_field:GetLevelScreen():HasTask(task))
    return task
end

function AddRandomTasks(number_to_select, ...)
    local arg = {...}
	
    local level_screen = play_field:GetLevelScreen()

    local random_objects = {}

    for i, v in ipairs(arg) do
        if v:GetNumberOfObjects() > 0 then
            table.insert(random_objects, v)
        end
    end

	if debug_localization then
	    number_to_select = 10000
	end
	
    RandomTableSort(random_objects)

 --   assert(table.getn(random_objects) >= number_to_select)
    if table.getn(random_objects) < number_to_select then
        number_to_select = table.getn(random_objects);
    end

    for i = 1, number_to_select, 1 do -- select number_to_select objects
    --for i = 1, table.getn(random_objects), 1 do -- select all objects
        level_screen:AddTask(random_objects[i])
    end
end

function CreateTool(scene_object_name, tool_object_name)
    local tool = {}
    if scene_object_name ~= tool_object_name then
        play_field:GetObject(tool_object_name):SetOpacity(0)
    end
    tool.scene_object_name = scene_object_name
    tool.tool_object_name = tool_object_name

	if not game_state.tools then
        game_state.tools = {}
    end
    table.insert(game_state.tools, tool) 
    
    if not game_state.additional_hint_objects then
        game_state.additional_hint_objects = {}
    end
    
	tool.OnSuccess = function()
	end
	
	if scene_object_name ~= tool_object_name then
		tool.OnSet = function()
			play_field:GetObject(tool.scene_object_name):ChangeOpacity(1, 0, 0.3)
		end
		tool.OnFail = function()
			play_field:GetObject(tool.scene_object_name):ChangeOpacity(0, 1, 0.3)
			ShowToolFailEffect(tool.scene_object_name)
		end
	else	
		tool.OnFail = function()
			ShowToolFailEffect(tool.tool_object_name)		
		end
		tool.OnSet = function()
		end
	end
	
	--table.insert(game_state.additional_hint_objects, tool_object_name)
	
	return tool
end

function ToolFail(tool_object) 
    local tool = nil
    for i, v in ipairs(game_state.tools) do        
	    if tool_object:GetName() == v.tool_object_name then
            tool = v
            break        	    
		end
    end	
    tool.OnFail()
end

function DefaultOnToolApply(tool_object, object)
    local tool = nil
    assert(game_state.tools)
    for i, v in ipairs(game_state.tools) do        
	    if tool_object:GetName() == v.tool_object_name then
            tool = v
            break        	    
		end
    end	
    if game_state.zones then
        for k, w in ipairs(game_state.zones) do
            if w.zone.HasObject(tool.scene_object_name) then
                local StartCloseButton = function()
                    w.zone.close_button:Go()
                end
                TimerDo(play_field:GetTimer(), 0.3, StartCloseButton)
            end
        end
    end
    assert(tool)
	for i, v in pairs(game_state.inventory_zones) do		
		if OnActiveZoneToolApply(v, tool.tool_object_name, object) then		    
			tool.OnSuccess()
			--[[local pm = GetProfileManager();
            local currentProfile = pm:GetCurrentProfile();
            currentProfile:AddFoundObject(tool.scene_object_name)
            OnSceneStateChanged(play_field)]]
			return
		end
    end
    tool.OnFail()
end

-- TODO: Replace with more OO variant if possible
function AssignZoneMethods(zone)
    zone.IsVisible = function()
        for i, v in pairs(zone.objects) do
            if v == true and play_field:HasObject(i) then
                local obj = play_field:GetObject(i)
                if obj:IsVisible() and obj:GetOpacity() > 0. then
                    return true
                end
            end
        end

        return false
    end

    zone.SetVisible = function(is_visible)
        if is_visible == zone.IsVisible() then
            return
        end
		
		if is_visible then
			zone.bubbles:Hide()
		else
			zone.bubbles:Show()
		end
		
        zone.close_button:SetVisible(is_visible)

        if is_visible then
            zone.close_button:Go()
        else
            zone.close_button:Stop()
        end

        for i, v in pairs(zone.objects) do
            if v == true and play_field:HasObject(i) then
                obj = play_field:GetObject(i)
                if is_visible then
                    obj:ChangeOpacity(0., 1., ZOOM_ZONE_APPEARING_TIME)
                else
                    obj:ChangeOpacity(1., 0., ZOOM_ZONE_APPEARING_TIME)
                end
            end
        end
        if is_visible then
			TimerDo(play_field:GetTimer(), 1, zone.OnShown)
			zone.OnShownImmediate();
		else
			TimerDo(play_field:GetTimer(), 1, zone.OnHidden)
			zone.OnHiddenImmediate();
		end		
        
        zone.back_object:SetVisible(is_visible)
    end
    
    zone.SetOffset = function(offsetX, offsetY)        
        local x, y;
        
        for i, v in pairs(zone.objects) do
            if play_field:HasObject(i) then
                x = play_field:GetObject(i):GetX();
                y = play_field:GetObject(i):GetY();
                play_field:GetObject(i):SetXY(x + offsetX, y + offsetY);
             else
                zone.RemoveObject(i)
             end
        end	
    end
	
	zone.SetOffsetZ = function(offsetZ)
        for i, v in pairs(zone.objects) do
            if play_field:HasObject(i) then
                local obj = play_field:GetObject(i)
                obj:SetZ(obj:GetZ() + offsetZ)
            else
                zone.RemoveObject(i)
            end
        end		
    end

    zone.HasObject = function(object_name)
        return zone.objects[object_name] == true
    end

    zone.AddObject = function(object_name)
        zone.objects[object_name] = true
    end

    zone.RemoveObject = function(object_name)
        zone.objects[object_name] = false
		local biggest_object
		for i, v in pairs(zone.objects) do
			if play_field:HasObject(i) and zone.objects[i] then
	            local obj = play_field:GetObject(i)

				if biggest_object == nil or
					obj:GetAnimation():GetWidth() > biggest_object:GetAnimation():GetWidth() then
					biggest_object = obj
				end
			end
		end
		if biggest_object then
			zone.close_button:AttachTo(biggest_object)
		end
    end
    
    zone.OnShown = function()
    end
    
    zone.OnShownImmediate = function()
    end
    
    zone.OnHidden = function()
    end
    
    zone.OnHiddenImmediate = function()
    end

    
    zone.GetMinObjectZ = function()
        local minz = zone.close_button:GetZ()
        for i, v in pairs(zone.objects) do
            if play_field:HasObject(i) then            
                local obj = play_field:GetObject(i)
                if obj:GetZ() < minz then
                    minz = obj:GetZ()
                end
            else
                zone.RemoveObject(i)
            end
		end
		return minz
    end
    
    zone.GetMaxObjectZ = function()
        local maxz = -1
        for i, v in pairs(zone.objects) do
            if play_field:HasObject(i) then
                local obj = play_field:GetObject(i)
                if obj:GetZ() > maxz then
                    maxz = obj:GetZ()
                end
            else    
                zone.RemoveObject(i)
            end
		end
		return maxz
    end
end

function CreateZoomZone(close_button_message, trigger_name, ...)
    local arg = {...}

    local zone = {}

    zone.close_button =
        CreateCloseButton(ZOOM_ZONE_CLOSE_BUTTON_POS, close_button_message, play_field:GetLevelScreen(), play_field)
    zone.close_button_message = close_button_message
    zone.close_button:SetVisible(false)
    zone.close_button:Stop()
    zone.close_button:AttachTo(play_field)    

    local biggest_object

    zone.objects = {}
    for i, v in ipairs(arg) do
        if play_field:HasObject(v) then
            local obj = play_field:GetObject(v)

            if biggest_object == nil or
               obj:GetAnimation():GetWidth() > biggest_object:GetAnimation():GetWidth() then
                biggest_object = obj
            end
            obj:SetOpacity(0.)
            obj:GetAnimation():SetColor('0xFFFFFFFF')
            zone.objects[v] = true
        end
    end

    if biggest_object then
        zone.close_button:AttachTo(biggest_object)
    end

    AssignZoneMethods(zone)

    if trigger_name ~= '' then		
        RegisterZoomZone(zone, trigger_name)
    end
    
    if not game_state.unregistered_zoom_zones then
        game_state.unregistered_zoom_zones = {}            
    end
    
    return zone
end

function RegisterZoomZone(zone, trigger_name)
    if not game_state.zones then
        game_state.zones = {}
    end
	
	if zone.registered then
	    return
    end
    
    if game_state.unregistered_zoom_zones then
        for i, v in ipairs(game_state.unregistered_zoom_zones) do
            if v == trigger_name then
                return false
            end
        end
    end

    local info = {}
    info.zone = zone
    info.trigger_name = trigger_name
    table.insert(game_state.zones, info)

    game_state.custom_cursors[trigger_name] = 'CursorZoom'	
	
	local object = play_field:GetObject(trigger_name)
	zone.bubbles = AddBubblesAnimation(play_field, 3, 0, 0, 0, 0.25 / object:GetScaleX(), 0.25 / object:GetScaleY(), math.random(0, 5))	
	zone.bubbles:AttachTo(object)
	zone.trigger_name = trigger_name
	
	local anim = CreateAnimation('data/Texture/GUI/Zoom/Border.png',0,0,640,480,1,0)
	anim:SetHotSpot(320,240)
	anim:SetBlendMode(2)
	anim:SetColor('0xFFFFFFFF')
	local border_name = 'Border' .. trigger_name
	local obj = play_field:CreateObject(border_name ,anim,512,384,302,0,1,1)	
	obj:SetZ(zone.GetMaxObjectZ() + 1)
	zone.border_object = obj
	zone.objects[border_name] = true
	obj:SetOpacity(0)
	zone.close_button:SetZ(obj:GetZ() + 1)
	
	local anim = CreateAnimation('data/Texture/Scenes/Common/pixel.jpg',0,0,8,8,1,0)
	anim:SetHotSpot(4,4)
	anim:SetBlendMode(2)
	anim:SetColor('0x01FFFFFF')
	local obj = play_field:CreateObject('Back' .. trigger_name,anim,512,384,100,0,1024,768)
	obj:SetZ(zone.GetMinObjectZ() - 1)
	zone.back_object = obj
	obj:SetVisible(false)
	
	local obj = play_field:GetObject(trigger_name)
	if obj:GetOpacity() > 0 then
		local e = AddBubblesExplosion(obj, play_field, 1, obj:GetZ() + 10, 0, 0, 1 / obj:GetScaleX(), 1 / obj:GetScaleY(), 1)
	end
	
	zone.SetOffset(108, 0)
	zone.registered = true	return true
end

function UnregisterZoomZone(zone)
	zone.bubbles:Hide()
	zone.bubbles:AttachTo(play_field)
	game_state.custom_cursors[zone.trigger_name] = ""
	for i, v in ipairs(game_state.zones) do
	    if v.trigger_name == zone.trigger_name then 
	        game_state.zones[i] = nil
        end
	end	
    --RemoveObject(zone.trigger_name)
    play_field:DeleteObject(zone.trigger_name)
    if not game_state.unregistered_zoom_zones then
        game_state.unregistered_zoom_zones = {}
    end
    table.insert(game_state.unregistered_zoom_zones, zone.trigger_name)
    
    --table.insert(game_state.unregistered_zoom_zones, )
    OnSceneStateChanged(play_field)
end

function SetCursor(cursor_name)
    if not GetGameApp():IsCustomCursorVisible() then
        return
    end
    local trans_cursors = {}
    trans_cursors['CursorMech'] = 'CursorTransMech'
    trans_cursors['CursorArms'] = 'CursorTransArms'
    trans_cursors['CursorPhoto'] = 'CursorTransPhoto'
    trans_cursors['CursorZoom'] = 'CursorTransZoom'

    --if trans_cursors[cursor_name] == nil then
        GetGameApp():SetCustomCursor(cursor_name)
    --[[else
        local a = GetAnimation(cursor_name)
        local anim_length = a:GetFrames() / a:GetSpeed()
        GetGameApp():SetCustomCursor(trans_cursors[cursor_name])
        if trans_cursors[cursor_name] ~= nil then
            GetGameApp():SetCustomCursor(cursor_name, anim_length)
        end
    end
    ]]
end

function DefaultOnObjectMouseEnter(object)
    local custom_cursors = game_state.custom_cursors
    local locked_objects = game_state.locked_objects
	if custom_cursors[object:GetName()] ~= nil and custom_cursors[object:GetName()] ~= '' and not locked_objects[object:GetName()] then
	    name = custom_cursors[object:GetName()]
	    if play_field and not play_field:GetTool() then
	        if GetGameApp():IsCustomCursorVisible() then
	            SetCursor(name)
	        end
	    end
	end
	if game_state.inventory_zones then
	    for i, v in ipairs(game_state.inventory_zones) do
            OnActiveZoneMouseEnter(play_field, v, object:GetName())
        end	
    end
end

function DefaultOnObjectMouseLeave(object)
    SetCursor('CursorArrow')
    if game_state.inventory_zones then
        for i, v in ipairs(game_state.inventory_zones) do
            OnActiveZoneMouseLeave(play_field, v, object:GetName())
        end
    end
end

function GetAdditionalHintObjects(obj_vector)    
--[[	if game_state.inventory_zones then
	    for i, v in ipairs(game_state.inventory_zones) do
            if not v.visible and not v.IsCompleted() then
				local object = play_field:GetObject(v.bound_object);
				if object:GetOpacity() ~= 0 and object:IsVisible() and not game_state.locked_objects[v.bound_object] then--and not v.IsLocked() then
				
					obj_vector:push_back(v.bound_object)
				end
			end
        end	
    end]]


--[[    for i, v in ipairs(game_state.additional_hint_objects) do
        local object = play_field:GetObject(v);
        if object:GetOpacity() ~= 0 and object:IsVisible() and not game_state.locked_objects[v] then
            obj_vector:push_back(v)
        end
	end]]
	
	--[[if not obj_vector:empty() then
		return
	end]]
	
	if game_state.tools then
	    for i, v in ipairs(game_state.tools) do
            if not v.visible and play_field:HasObject(v.scene_object_name) then
				local object = play_field:GetObject(v.scene_object_name);
				local inventory_zone_is_unlocked = false
				
				if game_state.inventory_zones then
					for k, w in ipairs(game_state.inventory_zones) do
						if not w.IsLocked() and w.NeedsTool(v) then
							inventory_zone_is_unlocked = true
							break
						end
					end	
				end
				
				local can_be_hinted = game_state.locker:GetNReferences() == 0
				if inventory_zone_is_unlocked then
				    if game_state.zones then
                        for k, w in pairs(game_state.zones) do
                            if w.zone.HasObject(v.scene_object_name) and w.zone.IsVisible() then                            
                                can_be_hinted = true
                            end
                        end
                    end	
				end
				
				can_be_hinted = can_be_hinted and
                                object:GetOpacity() ~= 0 and
                                object:IsVisible() and
                                not game_state.locked_objects[v.scene_object_name] and
                                inventory_zone_is_unlocked
				if can_be_hinted then
					obj_vector:push_back(v.scene_object_name)
				end
			end
        end	
    end
	
	--[[if not obj_vector:empty() then
		return
	end]]
	
	for i, v in pairs(game_state.custom_cursors) do
        if v ~= "" and v ~= "CursorMech" and v ~= "CursorZoom" then
            if play_field:HasObject(i) then
                local object = play_field:GetObject(i);
                if object:GetOpacity() ~= 0 and object:IsVisible() and not game_state.locked_objects[i] then
                    obj_vector:push_back(i)
                end
            end
        end
    end
	
    if game_state.zones then
        for i, v in pairs(game_state.zones) do
            if v ~= nil and not v.zone.IsVisible() then
                local object = play_field:GetObject(v.trigger_name)
                if object:GetOpacity() ~= 0 and object:IsVisible() and not game_state.locked_objects[v.trigger_name] then
                    obj_vector:push_back(v.trigger_name)
                end            
            end
        end
    end	
end

function CanBeClicked(object_name)
    local object = play_field:GetObject(object_name)
    if object:IsVisible() and object:GetOpacity() > 0
       and not play_field:IsIgnoredOnTestPoint(object)
       and not game_state.locked_objects[object_name] then
        return true
    end
    return false
end

function GetFindableObjects(all_objects, findable_objects)
	if all_objects:empty() then
		return
	end
	for i = 0, all_objects:size() - 1 do	
		local object_name = all_objects:get(i)		
		local pf = play_field		
		if game_state.locker:GetNReferences() == 0 then
			if pf:GetLevelScreen():IsTaskObject(object_name) and CanBeClicked(object_name) then			    
				findable_objects:push_back(object_name)
			end
		end
		
		if game_state.zones then
	        for i, v in ipairs(game_state.zones) do
		        if v.zone.HasObject(object_name) and pf:GetLevelScreen():IsTaskObject(object_name) and v.zone.IsVisible() and CanBeClicked(object_name) then    			    
		            local unique = true
		            for k = 0, findable_objects:size() - 1 do		            
		                if object_name == findable_objects:get(k) then
		                    unique = false
		                end
		            end
		            if unique then
					    findable_objects:push_back(object_name)
					end
		        end
	        end
	    end
	end
end

function DefaultOnObjectMouseDown(object)
    local object_name = object:GetName()
    local is_wrong_click = true
    local pf = play_field
    local locked_objects = game_state.locked_objects
    
    if locked_objects[object_name] ~= true then
		if game_state.locker:GetNReferences() == 0 then
            if game_state.meta_object == object_name then
                pf:OnMetaObjectFound(object)
                local i, r = GetCurLevelId(play_field:GetName())
                if not r then
                    play_field:GetLevelScreen():GetPanel():SetAllowInput(false)
					play_field:GetLevelScreen():SetAllowInput(false)
                end
                is_wrong_click = false
            end
        end
		
        if game_state.locker:GetNReferences() == 0 then
            if pf:GetLevelScreen():IsTaskObject(object_name) and CanSilhouetteBeShown() then
                pf:OnObjectFound(object)
                is_wrong_click = false
            end
        end
	
	    if game_state.zones then
	        for i, v in ipairs(game_state.zones) do
		        if v.zone.HasObject(object:GetName()) and pf:GetLevelScreen():IsTaskObject(object_name) and CanSilhouetteBeShown() then
    			    v.zone.RemoveObject(object_name)
					pf:OnObjectFound(object)
	    		    is_wrong_click = false
		        end
	        end
	    end
	    
	    if game_state.tools then
	        for i, v in ipairs(game_state.tools) do	           
	            local zone_is_unlocked = false
				local bound_zone = nil
                if game_state.inventory_zones then
                    for k, w in ipairs(game_state.inventory_zones) do
                        if not w.IsLocked() and w.NeedsTool(v) and CanBeClicked(w.bound_object) then
                            zone_is_unlocked = true
							bound_zone = w
                            break
                        end
                    end
                end
		        if object_name == v.scene_object_name and object:GetOpacity() == 1 and zone_is_unlocked then
		            local tool_obj = pf:GetObject(v.tool_object_name)
    			    pf:SetTool(tool_obj)
    			    v.OnSet()
    			    
    			    if game_state.zones then
                        for k, w in ipairs(game_state.zones) do
                            if w.zone.HasObject(v.scene_object_name) then
                                w.zone.close_button:Stop()
                                tool_obj:SetZ(w.zone.close_button:GetScrPosZ() + 1)
                            end
                        end
                    end
    			    
					assert(bound_zone)
					bound_zone:Show(false)
	    		    is_wrong_click = false;
		        end
            end	
        end    
	end
    
    if game_state.inventory_zones then
        local zone_shown = ""
        for i, v in ipairs(game_state.inventory_zones) do
            if object_name == v['inventory']:GetName() then
                v.Hide(false);
                is_wrong_click = false;
            end
        
            if object_name == v.bound_object and not game_state.locked_objects[object_name] then
                if not v.visible then
                    v.Show(false);
                    is_wrong_click=false
                    zone_shown = object_name
                end
            end
        end	
        
        if zone_shown ~= "" then
            for i, v in ipairs(game_state.inventory_zones) do
                if zone_shown ~= v.bound_object then
                    v.Hide(false)
                end
            end	
        end
    end
    
    if game_state.active_objects then
        for i, v in pairs(game_state.active_objects) do
            if object_name == i and object:GetOpacity() == 1 then
                v()
                is_wrong_click=false
            end
        end	
    end

    if game_state.locker:GetNReferences() == 0 and
       locked_objects[object:GetName()] ~= true and
       game_state.zones ~= nil
    then
        for i, info in ipairs(game_state.zones) do
            if info.trigger_name == object:GetName() then
                game_state.locker:AddRef()
                info.zone.SetVisible(true)
                is_wrong_click=false
            end
        end
    end
    
    if is_wrong_click == false then
        play_field:ResetWrongClicksCount();
    end
    
    if not is_wrong_click then
        if play_field.extrahint then
            play_field.extrahint.root:Hide()
        end
    end
    
    return is_wrong_click;
end

function CGameObject:Move(dx, dy, time)
    local af = CreateAnimationEffector()--AnimationEffector()
    af:AttachTo(self)
    af:SetKey(_TRACK_X, 0.0, self:GetX())
    af:SetKey(_TRACK_Y, 0.0, self:GetY())
    af:SetKey(_TRACK_X, time, self:GetX() + dx)
    af:SetKey(_TRACK_Y, time, self:GetY() + dy)
    af:Play()
end

function CGameObject:Rotate(dangle, time)
    local af = CreateAnimationEffector()--AnimationEffector()
    af:AttachTo(self)
    af:SetKey(_TRACK_A, 0.0, self:GetAngle())
    af:SetKey(_TRACK_A, time, self:GetAngle() + dangle)
    af:Play()
end

function CGameObject:Scale(dscale, time)
    local af = CreateAnimationEffector()--AnimationEffector()
    af:AttachTo(self)
    af:SetKey(_TRACK_S, 0.0, self:GetAngle())
    af:SetKey(_TRACK_S, time, self:GetAngle() + dscale)
    af:Play()
end

function CGameObject:ChangeOpacity(start, finish, time)
    local af = CreateAnimationEffector()--AnimationEffector()
    af:AttachTo(self)
    af:SetKey(_TRACK_O, 0.0, start)
    af:SetKey(_TRACK_O, time, finish)
    af:Play()
end

function CTextEntity:ChangeOpacity(start, finish, time)
    local af = CreateAnimationEffector()--AnimationEffector()
    af:AttachTo(self)
    af:SetKey(_TRACK_O, 0.0, start)
    af:SetKey(_TRACK_O, time, finish)
    af:Play()
end

function CGameObject:MarkWithPS()
    self:AddParticleSystem('data/ParticleSystem/ObjectHighlight.psi',
                           'SolveLaterObjectParticle')
end

function PlayField:GetTopRightCornerScr(game_object_name, obj_to_place)
    if play_field:HasObject(game_object_name) then
        local obj = play_field:GetObject(game_object_name)
        local pos = Vector(obj:GetX(), obj:GetY())
        pos.x = pos.x - obj:GetAnimation():GetHotX()
        pos.y = pos.y - obj:GetAnimation():GetHotY()
        pos.x = pos.x - obj_to_place:GetX()
        pos.y = pos.y - obj_to_place:GetY()
        pos.x = pos.x + obj_to_place:GetAnimation():GetHotX()
        pos.y = pos.y + obj_to_place:GetAnimation():GetHotY()
        return Vector(pos.x + obj:GetAnimation():GetWidth(), pos.y)
    else
        return Vector()
    end
end

function StartMiniGame(func_to_create)
    play_field:GetLevelScreen():Hide()
    play_field:GetLevelScreen():Stop()
    game_state.mini_game = func_to_create(play_field:GetLevelScreen():GetPanel())
    GetGameApp():SetCustomCursor('CursorArrow')
    GTimerDoString("GetGameApp():SetCustomCursor('CursorArrow')", 0.2)
end

function DefaultOnMiniGameWin()
    --assert(game_state.mini_game ~= nil)
    if game_state.mini_game ~= nil then
        dofile(game_state.level_path)
        --ReleaseFocus(game_state.mini_game)
        game_state.mini_game:Destroy()
        game_state.mini_game = nil
        play_field:GetLevelScreen():Go()
        play_field:GetLevelScreen():ScreenShow()
        --SetFocusTo(play_field:GetLevelScreen())
    end
end

function StartLevel(level_path)
    if play_field then
        local timer = play_field:GetTimer()
        local destroy_current_level = 'play_field:GetLevelScreen():ScreenDestroy()'
        local load_next_level = "load_level('"..level_path.."')"
        GTimerDoString(destroy_current_level..' '..load_next_level, 0.5)
    else
        GetGameManager():GetCurrentScreen():Destroy()
        load_level(level_path);
    end
    
    menu = nil;
end

function DefaultOnIntroFinish()
    if game_state.intro ~= nil then
        --local timer = play_field:GetLevelScreen():GetTimer()
        dofile(game_state.level_path)
        --game_state.intro:SetOpacity(0.7)
        GTimerDoString('game_state.intro:ScreenDestroy()', 0.5)
    end
end

function StartCycledAnimation(obj_name, delay, period)
    if play_field:HasObject(obj_name) then
        local obj = play_field:GetObject(obj_name)
        local timer = play_field:GetTimer()
        if obj:GetAnimation():GetMode() ~= HGEANIM_NOLOOP + HGEANIM_PINGPONG then
            obj:GetAnimation():SetMode(HGEANIM_NOLOOP)
        end

        if delay == 0 then
            delay = period
            obj:GetAnimation():Play()
        else
            obj:GetAnimation():Stop()
        end

        local action = "StartCycledAnimation('"..obj_name.."', 0, "..period..")"
        TimerDoString(action, delay, timer)
    end
end

function StartCycledAnimationEx(obj_name, delay, period, hide_when_not_playing)
    if play_field:HasObject(obj_name) then
        local obj = play_field:GetObject(obj_name)
        local timer = play_field:GetTimer()
        if obj:GetAnimation():GetMode() ~= HGEANIM_NOLOOP + HGEANIM_PINGPONG then
            obj:GetAnimation():SetMode(HGEANIM_NOLOOP)
        end

        local anim_length = GetAnimationLength(obj:GetAnimation())

        if delay == 0 then
            delay = period
            obj:GetAnimation():Play()
            obj:SetVisible(true)
            TimerDoString("play_field:GetObject('"..obj_name.."'):SetVisible(false)", anim_length, timer)
        else
            obj:SetVisible(false)
        end

        local action = "StartCycledAnimationEx('"..
                        obj_name..
                        "', 0, "..
                        period..
                        ','..
                        tostring(hide_when_not_playing)..
                        ")"

        TimerDoString(action, delay, timer)
    end
end

--[[
function StartCycledAnimationEx(obj_name, delay, period, do_on_iter_start, do_on_iter_end)
    local obj = play_field:GetObject(obj_name)
    local timer = play_field:GetLevelScreen():GetTimer()
    obj:GetAnimation():SetMode(HGEANIM_NOLOOP)
    local anim_length = GetAnimationLength(obj:GetAnimation())

    if delay == 0 then
        delay = period
        obj:GetAnimation():Play()
        loadstring(do_on_iter_start)
        TimerDoString(do_on_iter_end, anim_length, timer)
    end

    local action = "StartCycledAnimationEx('"..
                    obj_name..
                    "', 0, "..
                    period..
                    ','..
                    "\""..do_on_iter_start.."\""..
                    ','..
                    "\""..do_on_iter_end.."\""..
                    ")"

    TimerDoString(action, delay, timer)
end
]]

function ShowTutorial()
    if game_state.next_button == nil then
        game_state.next_button =
            CreateNextButton(Vector(945., 727.), 'NEXT_TUTORIAL_SLIDE', play_field:GetLevelScreen())
    else
        game_state.next_button:SetVisible(true)
        game_state.next_button:Go()
    end

    local pf = play_field
    if pf:HasObject('notepad') then
        pf:GetObject('notepad'):SetOpacity(1.)
    end
    if pf:HasObject('page1') then
        pf:GetObject('page1'):SetOpacity(1.)
    end
    if pf:HasObject('page2') then
        pf:GetObject('page2'):SetOpacity(0.)
    end
    if pf:HasObject('page3') then
        pf:GetObject('page3'):SetOpacity(0.)
    end
    if pf:HasObject('page4') then
        pf:GetObject('page4'):SetOpacity(0.)
    end
end

function ShowNextTutorialSlide()
	local pf = play_field
    pf:GetObject('notepad'):SetOpacity(1.)
    local curr_page
    local next_page
    if pf:GetObject('page1'):GetOpacity() > 0. then
        curr_page = 'page1'
        next_page = 'page2'
    end
    if pf:GetObject('page2'):GetOpacity() > 0. then
        curr_page = 'page2'
        next_page = 'page3'
    end
    if pf:GetObject('page3'):GetOpacity() > 0. then
        curr_page = 'page3'
        next_page = 'page4'
    end
    if pf:GetObject('page4'):GetOpacity() > 0. then
        curr_page = 'page4'
        next_page = ''
    end
    pf:GetObject(curr_page):ChangeOpacity(pf:GetObject(curr_page):GetOpacity(), 0., 0.2)
    if next_page ~= '' then
        pf:GetObject(next_page):ChangeOpacity(pf:GetObject(next_page):GetOpacity(), 1., 0.2)
    else
        pf:GetObject('notepad'):ChangeOpacity(1., 0., 0.2)
        game_state.next_button:SetVisible(false)
        game_state.next_button:Stop()

        if game_state.first_help_showing == true then
            game_state.first_help_showing = false
            TimerDoString('ShowFirstComics()', 0.2, pf:GetTimer())
        end
    end
end

function DefaultOnButtonPress(title)
	if title == 'NEXT_TUTORIAL_SLIDE' then
        ShowNextTutorialSlide()
    end
    if title == 'Help' then
        ShowTutorial()
    end
    
    if title == 'CloseMetaGame' then
		play_field:GetLevelScreen():SetAllowInput(false)
        play_field:GetLevelScreen():ScreenDestroy()
        load_screen('data/Lua/Screens/GlobalMap.lua')
    end

    if game_state.zones ~= nil then
        for i, info in ipairs(game_state.zones) do
            if info.zone.close_button_message == title then
                game_state.locker:Release()
                info.zone.SetVisible(false)
            end
        end
    end
end

function ArePanelTasksComplete()
    local inv_zone_left = function()
        if game_state.inventory_zones then
			for i, v in pairs(game_state.inventory_zones) do
				Log("Items to use == "..tostring(v.items_to_use))
				if v.items_to_use ~= 0 then
					return true                
				end
			end
		end
        return false
    end
    local ls = play_field:GetLevelScreen()
    return not ls:HasTaskObjects() and not inv_zone_left() and ls:GetTaskList():GetExtraTaskText() == '' 
end

function OpenNotebook()
    local ls = play_field:GetLevelScreen()
    if ArePanelTasksComplete() then
        return
    end
    local panel = play_field:GetLevelScreen():GetPanel()
    local cover_animation = panel:GetObject("Cover"):GetAnimation()
	cover_animation:SetMode(HGEANIM_FWD + HGEANIM_NOLOOP)
	cover_animation:Play()
	TimerDoString('OnNotebookOpened()', GetAnimationLength(cover_animation), panel:GetTimer())	
end

function IsNotebookClosed(cover_animation)
    local panel = play_field:GetLevelScreen():GetPanel()
    if not cover_animation then
        cover_animation = panel:GetObject("Cover"):GetAnimation()
    end    
    if cover_animation:GetFrame() == 0 then
        return true
    end
    return false
end

function CloseNotebook()
    local cover_animation = panel:GetObject("Cover"):GetAnimation()
    if IsNotebookClosed(cover_animation) then
        return
    end
	Log("Calling CloseNotebook")
    local panel = play_field:GetLevelScreen():GetPanel()
    
	cover_animation:SetMode(HGEANIM_REV + HGEANIM_NOLOOP)
	cover_animation:Play()
	TimerDoString('OnNotebookClosed()', GetAnimationLength(cover_animation), panel:GetTimer())	
end

function OnNotebookOpened()
end

function OnNotebookClosed()
end

function TimerDo(timer, delay, fun, ...)
    assert(fun)
    TimerDoString('FunctionDispatcher.Call('..
                  FunctionDispatcher.AddFunction(fun,
                                                 ...)..
                  ')',
                  delay,
                  timer);
end

function IsLocked(object_name)
    local ret = false
    ret = game_state.locked_objects[object_name]
    if ret == nil then
        return false
    end
    return ret
end

function InitDialogWheels(screen)
	local anim = CreateAnimation('data/Texture/GUI/Options/shesterni/01.png',0,0,88,88,1,0)
	anim:SetHotSpot(44,44)
	anim:SetBlendMode(2)
	anim:SetColor('0xFFFFFFFF')
	screen:CreateObject('01',anim,548,486,105,0,1,1)
	local anim = CreateAnimation('data/Texture/GUI/Options/shesterni/02.png',0,0,72,71,1,0)
	anim:SetHotSpot(36,35)
	anim:SetBlendMode(2)
	anim:SetColor('0xFFFFFFFF')
	screen:CreateObject('02',anim,516,508,102,0,1,1)
	local anim = CreateAnimation('data/Texture/GUI/Options/shesterni/02.png',0,0,72,71,1,0)
	anim:SetHotSpot(36,35)
	anim:SetBlendMode(2)
	anim:SetColor('0xFFFFFFFF')
	screen:CreateObject('022',anim,467,470,106,0,1,1)
	local anim = CreateAnimation('data/Texture/GUI/Options/shesterni/03.png',0,0,42,42,1,0)
	anim:SetHotSpot(21,21)
	anim:SetBlendMode(2)
	anim:SetColor('0xFFFFFFFF')
	screen:CreateObject('03',anim,484,431,104,0,1,1)
	local anim = CreateAnimation('data/Texture/GUI/Options/shesterni/04.png',0,0,34,34,1,0)
	anim:SetHotSpot(17,17)
	anim:SetBlendMode(2)
	anim:SetColor('0xFFFFFFFF')
	screen:CreateObject('04',anim,483,469,112,0,1,1)
	local anim = CreateAnimation('data/Texture/GUI/Options/shesterni/05.png',0,0,67,67,1,0)
	anim:SetHotSpot(33,33)
	anim:SetBlendMode(2)
	anim:SetColor('0xFFFFFFFF')
	screen:CreateObject('05',anim,559,448,103,0,1,1)
	local anim = CreateAnimation('data/Texture/GUI/Options/shesterni/06.png',0,0,110,110,1,0)
	anim:SetHotSpot(55,55)
	anim:SetBlendMode(2)
	anim:SetColor('0xFFFFFFFF')
	screen:CreateObject('06',anim,520,474,101,0,1,1)
	local anim = CreateAnimation('data/Texture/GUI/Options/shesterni/07.png',0,0,62,61,1,0)
	anim:SetHotSpot(31,30)
	anim:SetBlendMode(2)
	anim:SetColor('0xFFFFFFFF')
	screen:CreateObject('07',anim,531,438,100,0,1,1)
	local anim = CreateAnimation('data/Texture/GUI/Options/shesterni/07.png',0,0,62,61,1,0)
	anim:SetHotSpot(31,30)
	anim:SetBlendMode(2)
	anim:SetColor('0xFFFFFFFF')
	screen:CreateObject('072',anim,491,456,100,0,1,1)
	local anim = CreateAnimation('data/Texture/GUI/Options/shesterni/03.png',0,0,42,42,1,0)
	anim:SetHotSpot(21,21)
	anim:SetBlendMode(2)
	anim:SetColor('0xFFFFFFFF')
	screen:CreateObject('032',anim,560,499,102,0,1,1)
	local anim = CreateAnimation('data/Texture/GUI/Options/shesterni/04.png',0,0,34,34,1,0)
	anim:SetHotSpot(17,17)
	anim:SetBlendMode(2)
	anim:SetColor('0xFFFFFFFF')
	screen:CreateObject('042',anim,499,483,127,0,1,1)
	local anim = CreateAnimation('data/Texture/GUI/Options/shesterni/04.png',0,0,34,34,1,0)
	anim:SetHotSpot(17,17)
	anim:SetBlendMode(2)
	anim:SetColor('0xFFFFFFFF')
	screen:CreateObject('043',anim,478,448,120,0,1,1)
	
	local af = CreateAnimationEffector()
	local object = screen:GetObject('02')
	af:AttachTo(object)
	af:SetMode(_ANIM_FWD + _ANIM_LOOP)
	af:SetKey(_TRACK_A, 0, 0);
	af:SetKey(_TRACK_A, 3.95833333333333, -6.2657320075);
	af:Play()	
	
	local af = CreateAnimationEffector()
	local object = screen:GetObject('022')
	af:AttachTo(object)
	af:SetMode(_ANIM_FWD + _ANIM_LOOP)
	af:SetKey(_TRACK_A, 0, 0);
	af:SetKey(_TRACK_A, 3.95833333333333, 6.2831853);
	af:Play()	
	
	local af = CreateAnimationEffector()
	local object = screen:GetObject('03')
	af:AttachTo(object)
	af:SetMode(_ANIM_FWD + _ANIM_LOOP)
	af:SetKey(_TRACK_A, 0, 0)
	af:SetKey(_TRACK_A, 3.95833333333333, -6.2657320075);
	af:Play()	
	
	local af = CreateAnimationEffector()
	local object = screen:GetObject('04')
	af:AttachTo(object)
	af:SetMode(_ANIM_FWD + _ANIM_LOOP)
	af:SetKey(_TRACK_A, 0, 0)
	af:SetKey(_TRACK_A, 3.95833333333333, -6.2657320075);
	af:Play()	
	
	local af = CreateAnimationEffector()
	local object = screen:GetObject('05')
	af:AttachTo(object)
	af:SetMode(_ANIM_FWD + _ANIM_LOOP)
	af:SetKey(_TRACK_A, 0, 0)
	af:SetKey(_TRACK_A, 3.95833333333333, -12.5489173075);
	af:Play()
	
	local af = CreateAnimationEffector()
	local object = screen:GetObject('06')
	af:AttachTo(object)
	af:SetMode(_ANIM_FWD + _ANIM_LOOP)
	af:SetKey(_TRACK_A, 0, 0)
	af:SetKey(_TRACK_A, 3.95833333333333, 6.2657320075)
	af:Play()	
	
	local af = CreateAnimationEffector()
	local object = screen:GetObject('07')
	af:AttachTo(object)
	af:SetMode(_ANIM_FWD + _ANIM_LOOP)
	af:SetKey(_TRACK_A, 0, 0)
	af:SetKey(_TRACK_A, 3.95833333333333, -12.5663706);
	af:Play()	
	
	local af = CreateAnimationEffector()
	local object = screen:GetObject('072')
	af:AttachTo(object)
	af:SetMode(_ANIM_FWD + _ANIM_LOOP)
	af:SetKey(_TRACK_A, 0, 0)
	af:SetKey(_TRACK_A, 3.95833333333333, 12.5663706);
	af:Play()
	
	local af = CreateAnimationEffector()
	local object = screen:GetObject('032')
	af:AttachTo(object)
	af:SetMode(_ANIM_FWD + _ANIM_LOOP)
	af:SetKey(_TRACK_A, 0, 0)
	af:SetKey(_TRACK_A, 3.95833333333333, -18.8321026075);
	af:Play()	
	
	local af = CreateAnimationEffector()
	local object = screen:GetObject('042')
	af:AttachTo(object)
	af:SetMode(_ANIM_FWD + _ANIM_LOOP)
	af:SetKey(_TRACK_A, 0, 0)
	af:SetKey(_TRACK_A, 3.95833333333333, 6.2657320075);
	af:Play()	
	
	local af = CreateAnimationEffector()
	local object = screen:GetObject('043')
	af:AttachTo(object)
	af:SetMode(_ANIM_FWD + _ANIM_LOOP)
	af:SetKey(_TRACK_A, 0, 0)
	af:SetKey(_TRACK_A, 3.95833333333333, 6.2657320075);
	af:Play()	
end

function OnObjectWasFound(object)
end

--[[function DefaultOnObjectWasFound(object)
    OnObjectWasFound(object)
end]]

function DefaultOnObjectWillBeFound(object)
    OnObjectWillBeFound(object)
    local pm = GetProfileManager();
	local currentProfile = pm:GetCurrentProfile();
	currentProfile:AddFoundObject(object:GetName())
    OnSceneStateChanged(play_field)
end

function DefaultOnMetaObjectWillBeFound(object)
	local pm = GetProfileManager();
	local currentProfile = pm:GetCurrentProfile();
	currentProfile:AddFoundObject(object:GetName())
	local i, r = GetCurLevelId(play_field:GetName())
    if not r then
        r = GetMetaObjectLevelId(play_field:GetName())
    end
    GetProfileManager():GetCurrentProfile().cigars_flying[r] = true
    OnSceneStateChanged(play_field)
    local i, r = GetCurLevelId(play_field:GetName())
	if not r then
	    currentProfile.level_to_load_ = "map"
	    GetProfileManager():SaveProfiles()
	end
end

function OnWin()
    local pm = GetProfileManager();
	local currentProfile = pm:GetCurrentProfile();
	if currentProfile then
	    currentProfile.game_state_ = {}
	    currentProfile.functions_to_call_on_start_ = {}
	    currentProfile.found_objects_ = {}
	end
	play_field:GetLevelScreen():GetPanel():SetAllowInput(false)
	play_field:GetLevelScreen():SetAllowInput(false)
    --StartNextLevel( play_field:GetName() );
    
    FinishLevel(play_field:GetName())
	
    play_field:SetEnabled(false);
end

function Restart()
	play_field:GetLevelScreen():GetPanel():SetAllowInput(false)
    StartLevel(play_field:GetName())
end

local bubblesCounter = 0;

function BubbleAnimationElementName()
    bubblesCounter = bubblesCounter + 1;
    return "Bubble_animation_element" .. bubblesCounter;
end


local bubblesCounter = 0;

function BubbleAnimationElementName()
    bubblesCounter = bubblesCounter + 1;
    return "Bubble_animation_element" .. bubblesCounter;
end

function AddBubblesAnimation(screen, speed, zOffset, xOffset, yOffset, xScale, yScale, timeOffset, clipping)
	if not clipping then
		clipping = {}
		clipping.x = 0;
		clipping.y = 0;
		clipping.w = 1024;
		clipping.h = 768;
	end
    local movieDuration = 9.12 / speed;
    -- Layer Bubble_1
    local anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
    local object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	local root = CreateAutoRegisterEntity()
	root:SetXY(0, 0)
	root:SetZ(0)
    -- Layer Layer_1
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 14);
    object:SetAngle(0);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(1.68 / speed, 4.76 / speed);
    effector:AttachTo(object);

    effector:SetKey(_TRACK_X, 1.68 / speed, 38.2693023681639 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.68 / speed, 34.756744384766 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.84 / speed, 71.795765277933 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.84 / speed, -17.2486096617459 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.04 / speed, 50.626552145445 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.04 / speed, -81.194170473924 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.24 / speed, 79.480642761065 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.24 / speed, -136.187198757652 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.52 / speed, 48.660017186192 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.52 / speed, -212.297270509856 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.84 / speed, 81.500871618618 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.84 / speed, -276.554245492819 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.16 / speed, 67.82840820416 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.16 / speed, -345.71414104292 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.2 / speed, 62.13242083145 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.2 / speed, -350.912259905199 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.6 / speed, 93.609847546641 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.6 / speed, -422.039614024742 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.92 / speed, 60.8265147649209 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.92 / speed, -486.951078054472 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4.32 / speed, 83.286388961928 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.32 / speed, -564.224222744346 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4.72 / speed, 50.757110595703 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.72 / speed, -655.818862915039 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 1.68 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 1.68 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 4.4 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 4.4 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 4.44 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 4.44 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 4.48 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 4.48 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 4.52 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 4.52 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 4.72 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 4.72 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 1.68 / speed, 0);
    effector:SetKey(_TRACK_O, 1.84 / speed, 1);
    effector:SetKey(_TRACK_O, 4.4 / speed, 1);
    effector:SetKey(_TRACK_O, 4.44 / speed, 0.75);
    effector:SetKey(_TRACK_O, 4.48 / speed, 0.6);
    effector:SetKey(_TRACK_O, 4.52 / speed, 0.46);
    effector:SetKey(_TRACK_O, 4.56 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);


    -- Layer Layer_2
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 13);
    object:SetAngle(0);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(1.36 / speed, 4.44 / speed);
    effector:AttachTo(object);

    effector:SetKey(_TRACK_X, 1.36 / speed, 3.30345153808605 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.36 / speed, 44.746994018555 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.52 / speed, 36.829914447855 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.52 / speed, -7.258360027957 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.72 / speed, 15.660701315367 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.72 / speed, -71.203920840135 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.92 / speed, 44.514791930987 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.92 / speed, -126.196949123863 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.2 / speed, 13.694166356114 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.2 / speed, -202.307020876067 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.52 / speed, 46.53502078854 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.52 / speed, -266.56399585903 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.84 / speed, 32.862557374082 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.84 / speed, -335.723891409131 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.88 / speed, 27.166570001372 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.88 / speed, -340.92201027141 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.28 / speed, 58.643996716562 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.28 / speed, -412.049364390953 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.6 / speed, 25.860663934843 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.6 / speed, -476.960828420683 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4 / speed, 48.32053813185 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4 / speed, -554.233973110557 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4.4 / speed, 15.791259765625 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.4 / speed, -645.82861328125 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 1.36 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 1.36 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 4.08 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 4.08 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 4.12 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 4.12 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 4.16 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 4.16 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 4.2 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 4.2 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 4.4 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 4.4 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 1.36 / speed, 0);
    effector:SetKey(_TRACK_O, 1.52 / speed, 1);
    effector:SetKey(_TRACK_O, 4.08 / speed, 1);
    effector:SetKey(_TRACK_O, 4.12 / speed, 0.75);
    effector:SetKey(_TRACK_O, 4.16 / speed, 0.6);
    effector:SetKey(_TRACK_O, 4.2 / speed, 0.46);
    effector:SetKey(_TRACK_O, 4.24 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);


    -- Layer Layer_3
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 12);
    object:SetAngle(0);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(0.96 / speed, 4.04 / speed);
    effector:AttachTo(object);

    effector:SetKey(_TRACK_X, 0.96 / speed, 3.30345153808605 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.96 / speed, 1.03967285156295 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.12 / speed, 36.829914447855 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.12 / speed, -50.96568119495 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.32 / speed, 15.660701315367 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.32 / speed, -114.911242007127 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.52 / speed, 44.514791930987 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.52 / speed, -169.904270290856 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.8 / speed, 13.694166356114 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.8 / speed, -246.01434204306 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.12 / speed, 46.53502078854 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.12 / speed, -310.271317026023 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.44 / speed, 32.862557374082 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.44 / speed, -379.431212576124 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.48 / speed, 27.166570001372 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.48 / speed, -384.629331438402 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.88 / speed, 58.643996716562 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.88 / speed, -455.756685557945 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.2 / speed, 25.860663934843 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.2 / speed, -520.668149587675 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.6 / speed, 48.32053813185 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.6 / speed, -597.941294277549 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4 / speed, 15.791259765625 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4 / speed, -689.535934448242 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 0.96 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 0.96 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 3.68 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 3.68 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 3.72 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 3.72 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 3.76 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 3.76 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 3.8 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 3.8 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 4 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 4 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 0.96 / speed, 0);
    effector:SetKey(_TRACK_O, 1.12 / speed, 1);
    effector:SetKey(_TRACK_O, 3.68 / speed, 1);
    effector:SetKey(_TRACK_O, 3.72 / speed, 0.75);
    effector:SetKey(_TRACK_O, 3.76 / speed, 0.6);
    effector:SetKey(_TRACK_O, 3.8 / speed, 0.46);
    effector:SetKey(_TRACK_O, 3.84 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);


    -- Layer Layer_4
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 11);
    object:SetAngle(0);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(0.6 / speed, 3.68 / speed);
    effector:AttachTo(object);

    effector:SetKey(_TRACK_X, 0.6 / speed, 63.244918823242 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.6 / speed, 29.761627197266 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 0.76 / speed, 96.771381733011 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.76 / speed, -22.2437268492459 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 0.96 / speed, 75.602168600523 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.96 / speed, -86.189287661424 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.16 / speed, 104.456259216143 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.16 / speed, -141.182315945152 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.44 / speed, 73.6356336412711 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.44 / speed, -217.292387697356 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.76 / speed, 106.476488073697 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.76 / speed, -281.549362680319 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.08 / speed, 92.8040246592381 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.08 / speed, -350.70925823042 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.12 / speed, 87.108037286529 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.12 / speed, -355.907377092699 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.52 / speed, 118.585464001719 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.52 / speed, -427.034731212242 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.84 / speed, 85.802131219999 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.84 / speed, -491.946195241972 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.24 / speed, 108.262005417006 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.24 / speed, -569.219339931846 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.64 / speed, 75.732727050781 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.64 / speed, -660.813980102539 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 0.6 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 0.6 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 3.32 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 3.32 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 3.36 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 3.36 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 3.4 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 3.4 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 3.44 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 3.44 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 3.64 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 3.64 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 0.6 / speed, 0);
    effector:SetKey(_TRACK_O, 0.76 / speed, 1);
    effector:SetKey(_TRACK_O, 3.32 / speed, 1);
    effector:SetKey(_TRACK_O, 3.36 / speed, 0.75);
    effector:SetKey(_TRACK_O, 3.4 / speed, 0.6);
    effector:SetKey(_TRACK_O, 3.44 / speed, 0.46);
    effector:SetKey(_TRACK_O, 3.48 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);


    -- Layer Layer_5
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 10);
    object:SetAngle(0);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(0.32 / speed, 3.4 / speed);
    effector:AttachTo(object);

    effector:SetKey(_TRACK_X, 0.32 / speed, 4.55223083496105 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.32 / speed, 33.507965087891 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 0.48 / speed, 38.07869374473 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.48 / speed, -18.4973889586209 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 0.68 / speed, 16.909480612242 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.68 / speed, -82.442949770799 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 0.88 / speed, 45.763571227862 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.88 / speed, -137.435978054527 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.16 / speed, 14.942945652989 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.16 / speed, -213.546049806731 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.48 / speed, 47.783800085415 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.48 / speed, -277.803024789694 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.8 / speed, 34.111336670957 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.8 / speed, -346.962920339795 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.84 / speed, 28.415349298247 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.84 / speed, -352.161039202074 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.24 / speed, 59.892776013437 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.24 / speed, -423.288393321617 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.56 / speed, 27.109443231718 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.56 / speed, -488.199857351347 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.96 / speed, 49.569317428725 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.96 / speed, -565.473002041221 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.36 / speed, 17.0400390625 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.36 / speed, -657.067642211914 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 0.32 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 0.32 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 3.04 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 3.04 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 3.08 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 3.08 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 3.12 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 3.12 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 3.16 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 3.16 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 3.36 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 3.36 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 0.32 / speed, 0);
    effector:SetKey(_TRACK_O, 0.48 / speed, 1);
    effector:SetKey(_TRACK_O, 3.04 / speed, 1);
    effector:SetKey(_TRACK_O, 3.08 / speed, 0.75);
    effector:SetKey(_TRACK_O, 3.12 / speed, 0.6);
    effector:SetKey(_TRACK_O, 3.16 / speed, 0.46);
    effector:SetKey(_TRACK_O, 3.2 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);


    -- Layer Layer_6
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 9);
    object:SetAngle(0);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(4.16 / speed, 7.24 / speed);
    effector:AttachTo(object);

    effector:SetKey(_TRACK_X, 4.16 / speed, 38.2693023681639 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.16 / speed, 34.756744384766 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4.32 / speed, 71.795765277933 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.32 / speed, -17.2486096617459 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4.52 / speed, 50.626552145445 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.52 / speed, -81.194170473924 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4.72 / speed, 79.480642761065 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.72 / speed, -136.187198757652 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 5 / speed, 48.660017186192 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5 / speed, -212.297270509856 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 5.32 / speed, 81.500871618618 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5.32 / speed, -276.554245492819 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 5.64 / speed, 67.82840820416 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5.64 / speed, -345.71414104292 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 5.68 / speed, 62.13242083145 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5.68 / speed, -350.912259905199 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 6.08 / speed, 93.609847546641 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 6.08 / speed, -422.039614024742 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 6.4 / speed, 60.8265147649209 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 6.4 / speed, -486.951078054472 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 6.8 / speed, 83.286388961928 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 6.8 / speed, -564.224222744346 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 7.2 / speed, 50.757110595703 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 7.2 / speed, -655.818862915039 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 4.16 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 4.16 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 6.88 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 6.88 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 6.92 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 6.92 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 6.96 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 6.96 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 7 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 7 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 7.2 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 7.2 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 4.16 / speed, 0);
    effector:SetKey(_TRACK_O, 4.32 / speed, 1);
    effector:SetKey(_TRACK_O, 6.88 / speed, 1);
    effector:SetKey(_TRACK_O, 6.92 / speed, 0.75);
    effector:SetKey(_TRACK_O, 6.96 / speed, 0.6);
    effector:SetKey(_TRACK_O, 7 / speed, 0.46);
    effector:SetKey(_TRACK_O, 7.04 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);


    -- Layer Layer_7
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 8);
    object:SetAngle(0);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(0 / speed, 3.08 / speed);
    effector:AttachTo(object);

    effector:SetKey(_TRACK_X, 0 / speed, 38.2693023681639 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0 / speed, 34.756744384766 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 0.16 / speed, 71.795765277933 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.16 / speed, -17.2486096617459 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 0.36 / speed, 50.626552145445 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.36 / speed, -81.194170473924 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 0.56 / speed, 79.480642761065 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.56 / speed, -136.187198757652 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 0.84 / speed, 48.660017186192 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.84 / speed, -212.297270509856 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.16 / speed, 81.500871618618 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.16 / speed, -276.554245492819 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.48 / speed, 67.82840820416 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.48 / speed, -345.71414104292 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.52 / speed, 62.13242083145 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.52 / speed, -350.912259905199 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.92 / speed, 93.609847546641 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.92 / speed, -422.039614024742 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.24 / speed, 60.8265147649209 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.24 / speed, -486.951078054472 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.64 / speed, 83.286388961928 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.64 / speed, -564.224222744346 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.04 / speed, 50.757110595703 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.04 / speed, -655.818862915039 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 0 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 0 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 2.72 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 2.72 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 2.76 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 2.76 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 2.8 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 2.8 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 2.84 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 2.84 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 3.04 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 3.04 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 0 / speed, 0);
    effector:SetKey(_TRACK_O, 0.16 / speed, 1);
    effector:SetKey(_TRACK_O, 2.72 / speed, 1);
    effector:SetKey(_TRACK_O, 2.76 / speed, 0.75);
    effector:SetKey(_TRACK_O, 2.8 / speed, 0.6);
    effector:SetKey(_TRACK_O, 2.84 / speed, 0.46);
    effector:SetKey(_TRACK_O, 2.88 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);


    -- Layer Layer_8
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 7);
    object:SetAngle(0);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(2.8 / speed, 5.88 / speed);
    effector:AttachTo(object);

    effector:SetKey(_TRACK_X, 2.8 / speed, -9.18435668945301 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.8 / speed, 6.03479003906295 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.96 / speed, -34.350597026754 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.96 / speed, -42.224226116825 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.16 / speed, -19.305149514711 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.16 / speed, -107.418566225877 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.36 / speed, -54.138879333662 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.36 / speed, -171.153049587731 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.64 / speed, -31.261934107753 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.64 / speed, -246.01434204306 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.96 / speed, -69.601560632358 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.96 / speed, -311.520096322898 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4.32 / speed, -46.511469549409 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.32 / speed, -387.126890032152 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4.72 / speed, -87.463318346914 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.72 / speed, -452.01034766732 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 5.04 / speed, -71.544212774142 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5.04 / speed, -521.916944143339 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 5.44 / speed, -122.762393386705 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5.44 / speed, -607.931543911338 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 5.84 / speed, -104.091674804687 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5.84 / speed, -705.770080566406 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 2.8 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 2.8 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 5.52 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 5.52 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 5.56 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 5.56 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 5.6 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 5.6 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 5.64 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 5.64 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 5.84 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 5.84 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 2.8 / speed, 0);
    effector:SetKey(_TRACK_O, 2.96 / speed, 1);
    effector:SetKey(_TRACK_O, 5.52 / speed, 1);
    effector:SetKey(_TRACK_O, 5.56 / speed, 0.75);
    effector:SetKey(_TRACK_O, 5.6 / speed, 0.6);
    effector:SetKey(_TRACK_O, 5.64 / speed, 0.46);
    effector:SetKey(_TRACK_O, 5.68 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);


    -- Layer Layer_9
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 6);
    object:SetAngle(0);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(2.52 / speed, 5.6 / speed);
    effector:AttachTo(object);

    effector:SetKey(_TRACK_X, 2.52 / speed, -16.677047729492 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.52 / speed, -10.199356079102 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.68 / speed, -41.843288066793 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.68 / speed, -58.458372234989 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.88 / speed, -26.79784055475 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.88 / speed, -123.652712344041 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.08 / speed, -61.631570373701 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.08 / speed, -187.387195705895 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.36 / speed, -38.754625147792 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.36 / speed, -262.248488161224 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.68 / speed, -77.094251672397 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.68 / speed, -327.754242441062 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4.04 / speed, -54.004160589448 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.04 / speed, -403.361036150316 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4.44 / speed, -94.956009386953 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.44 / speed, -468.244493785485 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4.76 / speed, -79.036903814181 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.76 / speed, -538.151090261503 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 5.16 / speed, -130.255084426744 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5.16 / speed, -624.165690029502 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 5.56 / speed, -111.584365844727 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5.56 / speed, -722.00422668457 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 2.52 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 2.52 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 5.24 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 5.24 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 5.28 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 5.28 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 5.32 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 5.32 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 5.36 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 5.36 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 5.56 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 5.56 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 2.52 / speed, 0);
    effector:SetKey(_TRACK_O, 2.68 / speed, 1);
    effector:SetKey(_TRACK_O, 5.24 / speed, 1);
    effector:SetKey(_TRACK_O, 5.28 / speed, 0.75);
    effector:SetKey(_TRACK_O, 5.32 / speed, 0.6);
    effector:SetKey(_TRACK_O, 5.36 / speed, 0.46);
    effector:SetKey(_TRACK_O, 5.4 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);


    -- Layer Layer_10
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 5);
    object:SetAngle(0);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(5.92 / speed, 9 / speed);
    effector:AttachTo(object);

    effector:SetKey(_TRACK_X, 5.92 / speed, 42.0156402587889 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5.92 / speed, -32.677398681641 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 6.08 / speed, 16.849399921488 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 6.08 / speed, -80.936414837528 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 6.28 / speed, 31.894847433531 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 6.28 / speed, -146.13075494658 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 6.48 / speed, -2.93888238542002 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 6.48 / speed, -209.865238308434 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 6.76 / speed, 19.938062840489 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 6.76 / speed, -284.726530763763 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 7.08 / speed, -18.401563684116 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 7.08 / speed, -350.232285043601 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 7.44 / speed, 4.688527398833 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 7.44 / speed, -425.839078752855 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 7.84 / speed, -36.263321398672 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 7.84 / speed, -490.722536388024 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 8.16 / speed, -20.344215825899 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 8.16 / speed, -560.629132864042 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 8.56 / speed, -71.562396438463 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 8.56 / speed, -646.643732632042 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 8.96 / speed, -52.891677856445 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 8.96 / speed, -744.482269287109 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 5.92 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 5.92 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 8.64 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 8.64 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 8.68 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 8.68 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 8.72 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 8.72 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 8.76 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 8.76 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 8.96 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 8.96 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 5.92 / speed, 0);
    effector:SetKey(_TRACK_O, 6.08 / speed, 1);
    effector:SetKey(_TRACK_O, 8.64 / speed, 1);
    effector:SetKey(_TRACK_O, 8.68 / speed, 0.75);
    effector:SetKey(_TRACK_O, 8.72 / speed, 0.6);
    effector:SetKey(_TRACK_O, 8.76 / speed, 0.46);
    effector:SetKey(_TRACK_O, 8.8 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);


    -- Layer Layer_11
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 4);
    object:SetAngle(0);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(2.04 / speed, 5.12 / speed);
    effector:AttachTo(object);

    effector:SetKey(_TRACK_X, 2.04 / speed, 42.0156402587889 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.04 / speed, -32.677398681641 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.2 / speed, 16.849399921488 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.2 / speed, -80.936414837528 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.4 / speed, 31.894847433531 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.4 / speed, -146.13075494658 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.6 / speed, -2.93888238542002 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.6 / speed, -209.865238308434 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.88 / speed, 19.938062840489 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.88 / speed, -284.726530763763 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.2 / speed, -18.401563684116 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.2 / speed, -350.232285043601 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.56 / speed, 4.688527398833 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.56 / speed, -425.839078752855 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.96 / speed, -36.263321398672 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.96 / speed, -490.722536388024 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4.28 / speed, -20.344215825899 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.28 / speed, -560.629132864042 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4.68 / speed, -71.562396438463 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.68 / speed, -646.643732632042 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 5.08 / speed, -52.891677856445 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5.08 / speed, -744.482269287109 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 2.04 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 2.04 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 4.76 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 4.76 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 4.8 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 4.8 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 4.84 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 4.84 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 4.88 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 4.88 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 5.08 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 5.08 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 2.04 / speed, 0);
    effector:SetKey(_TRACK_O, 2.2 / speed, 1);
    effector:SetKey(_TRACK_O, 4.76 / speed, 1);
    effector:SetKey(_TRACK_O, 4.8 / speed, 0.75);
    effector:SetKey(_TRACK_O, 4.84 / speed, 0.6);
    effector:SetKey(_TRACK_O, 4.88 / speed, 0.46);
    effector:SetKey(_TRACK_O, 4.92 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);


    -- Layer Layer_12
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 3);
    object:SetAngle(0);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(1 / speed, 4.08 / speed);
    effector:AttachTo(object);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector:SetKey(_TRACK_X, 1 / speed, -26.667282104492 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1 / speed, 4.78601074218795 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.16 / speed, -51.833522441793 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.16 / speed, -43.4730054137 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.36 / speed, -36.78807492975 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.36 / speed, -108.667345522752 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.56 / speed, -71.621804748701 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.56 / speed, -172.401828884606 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.84 / speed, -48.744859522792 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.84 / speed, -247.263121339935 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.16 / speed, -87.084486047397 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.16 / speed, -312.768875619773 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.52 / speed, -63.994394964448 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.52 / speed, -388.375669329027 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.92 / speed, -104.946243761953 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.92 / speed, -453.259126964195 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.24 / speed, -89.027138189181 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.24 / speed, -523.165723440214 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.64 / speed, -140.245318801744 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.64 / speed, -609.180323208213 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 4.04 / speed, -121.574600219727 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 4.04 / speed, -707.018859863281 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 1 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 1 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 3.72 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 3.72 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 3.76 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 3.76 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 3.8 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 3.8 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 3.84 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 3.84 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 4.04 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 4.04 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 1 / speed, 0);
    effector:SetKey(_TRACK_O, 1.16 / speed, 1);
    effector:SetKey(_TRACK_O, 3.72 / speed, 1);
    effector:SetKey(_TRACK_O, 3.76 / speed, 0.75);
    effector:SetKey(_TRACK_O, 3.8 / speed, 0.6);
    effector:SetKey(_TRACK_O, 3.84 / speed, 0.46);
    effector:SetKey(_TRACK_O, 3.88 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);


    -- Layer Layer_13
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 2);
    object:SetAngle(0);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(0.72 / speed, 3.8 / speed);
    effector:AttachTo(object);

    effector:SetKey(_TRACK_X, 0.72 / speed, 57.001007080078 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.72 / speed, 33.507965087891 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 0.88 / speed, 31.834766742777 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.88 / speed, -14.7510510679959 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.08 / speed, 46.88021425482 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.08 / speed, -79.945391177049 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.28 / speed, 12.04648443587 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.28 / speed, -143.679874538902 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.56 / speed, 34.923429661778 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.56 / speed, -218.541166994231 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.88 / speed, -3.41619686282701 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.88 / speed, -284.046921274069 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.24 / speed, 19.673894220122 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.24 / speed, -359.653714983324 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.64 / speed, -21.277954577383 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.64 / speed, -424.537172618492 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.96 / speed, -5.35884900461002 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.96 / speed, -494.443769094511 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.36 / speed, -56.577029617174 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.36 / speed, -580.45836886251 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.76 / speed, -37.906311035156 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.76 / speed, -678.296905517578 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 0.72 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 0.72 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 3.44 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 3.44 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 3.48 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 3.48 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 3.52 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 3.52 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 3.56 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 3.56 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 3.76 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 3.76 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 0.72 / speed, 0);
    effector:SetKey(_TRACK_O, 0.88 / speed, 1);
    effector:SetKey(_TRACK_O, 3.44 / speed, 1);
    effector:SetKey(_TRACK_O, 3.48 / speed, 0.75);
    effector:SetKey(_TRACK_O, 3.52 / speed, 0.6);
    effector:SetKey(_TRACK_O, 3.56 / speed, 0.46);
    effector:SetKey(_TRACK_O, 3.6 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);


    -- Layer Layer_14
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 1);
    object:SetAngle(0);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(5 / speed, 8.08 / speed);
    effector:AttachTo(object);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector:SetKey(_TRACK_X, 5 / speed, 9.54734802246105 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5 / speed, 14.776260375977 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 5.16 / speed, -15.61889231484 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5.16 / speed, -33.48275577991 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 5.36 / speed, -0.57344480279698 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5.36 / speed, -98.677095888963 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 5.56 / speed, -35.407174621748 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5.56 / speed, -162.411579250817 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 5.84 / speed, -12.530229395839 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 5.84 / speed, -237.272871706145 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 6.16 / speed, -50.869855920444 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 6.16 / speed, -302.778625985983 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 6.52 / speed, -27.779764837495 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 6.52 / speed, -378.385419695238 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 6.92 / speed, -68.731613635 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 6.92 / speed, -443.268877330406 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 7.24 / speed, -52.812508062228 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 7.24 / speed, -513.175473806425 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 7.64 / speed, -104.030688674791 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 7.64 / speed, -599.190073574424 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 8.04 / speed, -85.359970092773 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 8.04 / speed, -697.028610229492 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 5 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 5 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 7.72 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 7.72 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 7.76 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 7.76 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 7.8 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 7.8 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 7.84 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 7.84 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 8.04 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 8.04 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 5 / speed, 0);
    effector:SetKey(_TRACK_O, 5.16 / speed, 1);
    effector:SetKey(_TRACK_O, 7.72 / speed, 1);
    effector:SetKey(_TRACK_O, 7.76 / speed, 0.75);
    effector:SetKey(_TRACK_O, 7.8 / speed, 0.6);
    effector:SetKey(_TRACK_O, 7.84 / speed, 0.46);
    effector:SetKey(_TRACK_O, 7.88 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);


    -- Layer Layer_15
    anim = CreateAnimationByPath("data/Texture/Intro/bubble.png");
    object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
    anim:SetHotSpot(50, 50);
    object:SetZ(zOffset + 0);
    object:SetAngle(0);
    object:AttachTo(root);object:SetClipping(clipping.x, clipping.y, clipping.w, clipping.h);

    effector = CreateAnimationEffector();
    effector:SetLifeTime(0.44 / speed, 3.52 / speed);
    effector:AttachTo(object);

    effector:SetKey(_TRACK_X, 0.44 / speed, 9.54734802246105 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.44 / speed, 14.776260375977 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 0.6 / speed, -15.61889231484 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.6 / speed, -33.48275577991 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 0.8 / speed, -0.57344480279698 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 0.8 / speed, -98.677095888963 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1 / speed, -35.407174621748 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1 / speed, -162.411579250817 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.28 / speed, -12.530229395839 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.28 / speed, -237.272871706145 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.6 / speed, -50.869855920444 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.6 / speed, -302.778625985983 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 1.96 / speed, -27.779764837495 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 1.96 / speed, -378.385419695238 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.36 / speed, -68.731613635 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.36 / speed, -443.268877330406 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 2.68 / speed, -52.812508062228 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 2.68 / speed, -513.175473806425 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.08 / speed, -104.030688674791 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.08 / speed, -599.190073574424 * yScale + yOffset);
    effector:SetKey(_TRACK_X, 3.48 / speed, -85.359970092773 * xScale + xOffset);
    effector:SetKey(_TRACK_Y, 3.48 / speed, -697.028610229492 * yScale + yOffset);
    effector:SetKey(_TRACK_SX, 0.44 / speed, 0.0599845019226 * xScale);
    effector:SetKey(_TRACK_SY, 0.44 / speed, 0.0599845019226 * yScale);
    effector:SetKey(_TRACK_SX, 3.16 / speed, 0.29261608086997 * xScale);
    effector:SetKey(_TRACK_SY, 3.16 / speed, 0.29261608086997 * yScale);
    effector:SetKey(_TRACK_SX, 3.2 / speed, 0.42091518228204 * xScale);
    effector:SetKey(_TRACK_SY, 3.2 / speed, 0.42091518228204 * yScale);
    effector:SetKey(_TRACK_SX, 3.24 / speed, 0.65625261122024 * xScale);
    effector:SetKey(_TRACK_SY, 3.24 / speed, 0.23166724536658 * yScale);
    effector:SetKey(_TRACK_SX, 3.28 / speed, 0.72092337349177 * xScale);
    effector:SetKey(_TRACK_SY, 3.28 / speed, 0.72092337349177 * yScale);
    effector:SetKey(_TRACK_SX, 3.48 / speed, 0.3199845019226 * xScale);
    effector:SetKey(_TRACK_SY, 3.48 / speed, 0.3199845019226 * yScale);
    effector:SetKey(_TRACK_O, 0.44 / speed, 0);
    effector:SetKey(_TRACK_O, 0.6 / speed, 1);
    effector:SetKey(_TRACK_O, 3.16 / speed, 1);
    effector:SetKey(_TRACK_O, 3.2 / speed, 0.75);
    effector:SetKey(_TRACK_O, 3.24 / speed, 0.6);
    effector:SetKey(_TRACK_O, 3.28 / speed, 0.46);
    effector:SetKey(_TRACK_O, 3.32 / speed, 0);

    effector:SetMode(_ANIM_LOOP);
    effector:SetAnimationTime(movieDuration);
    effector:PlayAt(timeOffset);

	
	return root
end

function AddBubblesExplosion(object, screen, speed, zOffset, xOffset, yOffset, xScale, yScale, timeOffset)    
    local effectors_container = {}
    
    local CreateAnimationEffector = function()
        local af = CreateAnimationEffector()
        table.insert(effectors_container, af)
        return af
    end
    
    zOffset = zOffset + object:GetZ()
    xOffset = xOffset + object:GetX()
    yOffset = yOffset + object:GetY()
    xScale = xScale * object:GetScaleX()
    yScale = yScale * object:GetScaleY()

    local movieDuration = 2.16 / speed;
    -- Layer Bubble_1
    local anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
    local object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	local root = CreateAutoRegisterEntity()
	root:SetXY(0, 0)
	root:SetZ(0)
	
	-- Layer Bubble_1
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);	
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 96);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())	

	effector = CreateAnimationEffector();
	
	effector:SetLifeTime(0.68 / speed, 1.76 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.68 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.68 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.6 / speed, 75.176688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.6 / speed, 31.763708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.64 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.64 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.32 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.32 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.68 / speed, 0);
	effector:SetKey(_TRACK_O, 0.8 / speed, 1);
	effector:SetKey(_TRACK_O, 1.52 / speed, 1);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.64 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_2
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 95);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.76 / speed, 1.84 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.76 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.76 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.68 / speed, -4.683311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.68 / speed, 53.543708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.72 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.72 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.72 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.72 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.76 / speed, 0);
	effector:SetKey(_TRACK_O, 0.88 / speed, 1);
	effector:SetKey(_TRACK_O, 1.6 / speed, 1);
	effector:SetKey(_TRACK_O, 1.64 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.68 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.72 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_3
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 94);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.68 / speed, 1.76 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.68 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.68 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.6 / speed, -31.083311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.6 / speed, 62.123708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.64 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.64 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.32 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.32 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.68 / speed, 0);
	effector:SetKey(_TRACK_O, 0.8 / speed, 1);
	effector:SetKey(_TRACK_O, 1.52 / speed, 1);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.64 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_4
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 93);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.56 / speed, 1.64 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.56 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.56 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.48 / speed, -60.783311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.48 / speed, 21.863708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.52 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.52 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.56 / speed, 0);
	effector:SetKey(_TRACK_O, 0.68 / speed, 1);
	effector:SetKey(_TRACK_O, 1.4 / speed, 1);
	effector:SetKey(_TRACK_O, 1.44 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_5
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 92);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.76 / speed, 1.84 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.76 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.76 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.68 / speed, -104.343311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.68 / speed, -44.136291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.72 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.72 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.72 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.72 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.76 / speed, 0);
	effector:SetKey(_TRACK_O, 0.88 / speed, 1);
	effector:SetKey(_TRACK_O, 1.6 / speed, 1);
	effector:SetKey(_TRACK_O, 1.64 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.68 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.72 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_6
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 91);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.64 / speed, 1.72 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.64 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.64 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.56 / speed, -94.443311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.56 / speed, -77.136291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.6 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.6 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.64 / speed, 0);
	effector:SetKey(_TRACK_O, 0.76 / speed, 1);
	effector:SetKey(_TRACK_O, 1.48 / speed, 1);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_7
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 90);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.56 / speed, 1.64 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.56 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.56 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.48 / speed, -56.163311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.48 / speed, -100.896291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.52 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.52 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.2305993132078 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.21961004491511 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.31980176229994 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.14397346961702 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.56 / speed, 0);
	effector:SetKey(_TRACK_O, 0.68 / speed, 1);
	effector:SetKey(_TRACK_O, 1.4 / speed, 1);
	effector:SetKey(_TRACK_O, 1.44 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_8
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 89);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.76 / speed, 1.84 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.76 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.76 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.68 / speed, -19.203311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.68 / speed, -124.656291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.72 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.72 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.72 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.72 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.76 / speed, 0);
	effector:SetKey(_TRACK_O, 0.88 / speed, 1);
	effector:SetKey(_TRACK_O, 1.6 / speed, 1);
	effector:SetKey(_TRACK_O, 1.64 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.68 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.72 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_9
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 88);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.68 / speed, 1.76 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.68 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.68 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.6 / speed, 10.496688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.6 / speed, -119.376291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.64 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.64 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.32 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.32 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.68 / speed, 0);
	effector:SetKey(_TRACK_O, 0.8 / speed, 1);
	effector:SetKey(_TRACK_O, 1.52 / speed, 1);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.64 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_10
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 87);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.8 / speed, 1.88 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.8 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.8 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.72 / speed, 71.876688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.72 / speed, -97.596291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.76 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.76 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.72 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.72 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.76 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.76 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.8 / speed, 0);
	effector:SetKey(_TRACK_O, 0.92 / speed, 1);
	effector:SetKey(_TRACK_O, 1.64 / speed, 1);
	effector:SetKey(_TRACK_O, 1.68 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.72 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.76 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_11
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 86);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.52 / speed, 1.6 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.52 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.52 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.44 / speed, 104.876688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.44 / speed, -62.616291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.48 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.48 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.36 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.36 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.52 / speed, 0);
	effector:SetKey(_TRACK_O, 0.64 / speed, 1);
	effector:SetKey(_TRACK_O, 1.36 / speed, 1);
	effector:SetKey(_TRACK_O, 1.4 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.44 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_12
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 85);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.64 / speed, 1.72 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.64 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.64 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.56 / speed, 125.336688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.56 / speed, 1.403708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.6 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.6 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.64 / speed, 0);
	effector:SetKey(_TRACK_O, 0.76 / speed, 1);
	effector:SetKey(_TRACK_O, 1.48 / speed, 1);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_13
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 84);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.56 / speed, 1.64 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.56 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.56 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.48 / speed, 64.616688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.48 / speed, 62.783708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.52 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.52 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.56 / speed, 0);
	effector:SetKey(_TRACK_O, 0.68 / speed, 1);
	effector:SetKey(_TRACK_O, 1.4 / speed, 1);
	effector:SetKey(_TRACK_O, 1.44 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_14
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 83);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.84 / speed, 1.92 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.84 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.84 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.76 / speed, 30.956688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.76 / speed, 75.323708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.72 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.72 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.76 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.76 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.8 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.8 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0);
	effector:SetKey(_TRACK_O, 0.96 / speed, 1);
	effector:SetKey(_TRACK_O, 1.68 / speed, 1);
	effector:SetKey(_TRACK_O, 1.72 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.76 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.8 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_15
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 82);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.64 / speed, 1.72 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.64 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.64 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.56 / speed, -50.883311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.56 / speed, 75.323708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.6 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.6 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.64 / speed, 0);
	effector:SetKey(_TRACK_O, 0.76 / speed, 1);
	effector:SetKey(_TRACK_O, 1.48 / speed, 1);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_16
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 81);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.6 / speed, 1.68 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.6 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.6 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.52 / speed, 43.496688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.52 / speed, 91.163708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.56 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.56 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.6 / speed, 0);
	effector:SetKey(_TRACK_O, 0.72 / speed, 1);
	effector:SetKey(_TRACK_O, 1.44 / speed, 1);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_17
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 80);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.84 / speed, 1.92 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.84 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.84 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.76 / speed, 68.576688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.76 / speed, 89.183708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.72 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.72 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.76 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.76 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.8 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.8 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0);
	effector:SetKey(_TRACK_O, 0.96 / speed, 1);
	effector:SetKey(_TRACK_O, 1.68 / speed, 1);
	effector:SetKey(_TRACK_O, 1.72 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.76 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.8 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_18
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 79);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.6 / speed, 1.68 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.6 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.6 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.52 / speed, 1.91668823242196 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.52 / speed, 108.983708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.56 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.56 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.6 / speed, 0);
	effector:SetKey(_TRACK_O, 0.72 / speed, 1);
	effector:SetKey(_TRACK_O, 1.44 / speed, 1);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_19
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 78);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.72 / speed, 1.8 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.72 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.72 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.64 / speed, -99.063311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.64 / speed, 73.343708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.68 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.68 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.36 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.36 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.72 / speed, 0);
	effector:SetKey(_TRACK_O, 0.84 / speed, 1);
	effector:SetKey(_TRACK_O, 1.56 / speed, 1);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.64 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.68 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_20
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 77);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.52 / speed, 1.6 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.52 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.52 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.44 / speed, -117.543311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.44 / speed, 19.223708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.48 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.48 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.36 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.36 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.52 / speed, 0);
	effector:SetKey(_TRACK_O, 0.64 / speed, 1);
	effector:SetKey(_TRACK_O, 1.36 / speed, 1);
	effector:SetKey(_TRACK_O, 1.4 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.44 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_21
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 76);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.84 / speed, 1.92 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.84 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.84 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.76 / speed, -137.343311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.76 / speed, -69.876291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.72 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.72 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.76 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.76 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.8 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.8 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0);
	effector:SetKey(_TRACK_O, 0.96 / speed, 1);
	effector:SetKey(_TRACK_O, 1.68 / speed, 1);
	effector:SetKey(_TRACK_O, 1.72 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.76 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.8 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_22
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 75);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.6 / speed, 1.68 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.6 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.6 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.52 / speed, -109.623311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.52 / speed, -112.776291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.56 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.56 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.6 / speed, 0);
	effector:SetKey(_TRACK_O, 0.72 / speed, 1);
	effector:SetKey(_TRACK_O, 1.44 / speed, 1);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_23
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 74);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.84 / speed, 1.92 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.84 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.84 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.76 / speed, -48.903311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.76 / speed, -136.536291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.72 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.72 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.76 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.76 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.8 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.8 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0);
	effector:SetKey(_TRACK_O, 0.96 / speed, 1);
	effector:SetKey(_TRACK_O, 1.68 / speed, 1);
	effector:SetKey(_TRACK_O, 1.72 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.76 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.8 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_24
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 73);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.64 / speed, 1.72 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.64 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.64 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.56 / speed, 13.136688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.56 / speed, -146.436291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.6 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.6 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.64 / speed, 0);
	effector:SetKey(_TRACK_O, 0.76 / speed, 1);
	effector:SetKey(_TRACK_O, 1.48 / speed, 1);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_25
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 72);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.72 / speed, 1.8 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.72 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.72 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.64 / speed, 44.8166882324221 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.64 / speed, -146.436291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.68 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.68 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.36 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.36 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.72 / speed, 0);
	effector:SetKey(_TRACK_O, 0.84 / speed, 1);
	effector:SetKey(_TRACK_O, 1.56 / speed, 1);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.64 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.68 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_26
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 71);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.64 / speed, 1.72 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.64 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.64 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.56 / speed, 125.336688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.56 / speed, -109.476291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.6 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.6 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.64 / speed, 0);
	effector:SetKey(_TRACK_O, 0.76 / speed, 1);
	effector:SetKey(_TRACK_O, 1.48 / speed, 1);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_27
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 70);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.56 / speed, 1.64 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.56 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.56 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.48 / speed, 160.316688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.48 / speed, -60.636291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.52 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.52 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.56 / speed, 0);
	effector:SetKey(_TRACK_O, 0.68 / speed, 1);
	effector:SetKey(_TRACK_O, 1.4 / speed, 1);
	effector:SetKey(_TRACK_O, 1.44 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_28
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 69);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.72 / speed, 1.8 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.72 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.72 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.64 / speed, 176.816688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.64 / speed, 32.423708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.68 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.68 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.36 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.36 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.72 / speed, 0);
	effector:SetKey(_TRACK_O, 0.84 / speed, 1);
	effector:SetKey(_TRACK_O, 1.56 / speed, 1);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.64 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.68 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_29
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 68);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.52 / speed, 1.6 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.52 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.52 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.44 / speed, 57.356688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.44 / speed, 128.783708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.48 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.48 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.36 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.36 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.52 / speed, 0);
	effector:SetKey(_TRACK_O, 0.64 / speed, 1);
	effector:SetKey(_TRACK_O, 1.36 / speed, 1);
	effector:SetKey(_TRACK_O, 1.4 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.44 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_30
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 67);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.84 / speed, 1.92 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.84 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.84 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.76 / speed, 9.17668823242195 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.76 / speed, 102.383708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.72 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.72 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.76 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.76 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.8 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.8 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0);
	effector:SetKey(_TRACK_O, 0.96 / speed, 1);
	effector:SetKey(_TRACK_O, 1.68 / speed, 1);
	effector:SetKey(_TRACK_O, 1.72 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.76 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.8 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_31
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 66);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.6 / speed, 1.68 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.6 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.6 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.52 / speed, -87.183311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.52 / speed, 97.103708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.56 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.56 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.6 / speed, 0);
	effector:SetKey(_TRACK_O, 0.72 / speed, 1);
	effector:SetKey(_TRACK_O, 1.44 / speed, 1);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_32
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 65);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.52 / speed, 1.6 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.52 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.52 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.44 / speed, 50.756688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.44 / speed, 133.403708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.48 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.48 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.36 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.36 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.52 / speed, 0);
	effector:SetKey(_TRACK_O, 0.64 / speed, 1);
	effector:SetKey(_TRACK_O, 1.36 / speed, 1);
	effector:SetKey(_TRACK_O, 1.4 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.44 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_33
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 64);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.6 / speed, 1.68 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.6 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.6 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.52 / speed, -50.223311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.52 / speed, 138.023708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.56 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.56 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.6 / speed, 0);
	effector:SetKey(_TRACK_O, 0.72 / speed, 1);
	effector:SetKey(_TRACK_O, 1.44 / speed, 1);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_34
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 63);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.84 / speed, 1.92 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.84 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.84 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.76 / speed, -180.903311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.76 / speed, 72.683708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.72 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.72 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.76 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.76 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.8 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.8 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0);
	effector:SetKey(_TRACK_O, 0.96 / speed, 1);
	effector:SetKey(_TRACK_O, 1.68 / speed, 1);
	effector:SetKey(_TRACK_O, 1.72 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.76 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.8 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_35
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 62);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.68 / speed, 1.76 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.68 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.68 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.6 / speed, -194.103311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.6 / speed, -13.776291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.64 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.64 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.32 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.32 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.68 / speed, 0);
	effector:SetKey(_TRACK_O, 0.8 / speed, 1);
	effector:SetKey(_TRACK_O, 1.52 / speed, 1);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.64 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_36
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 61);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.64 / speed, 1.72 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.64 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.64 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.56 / speed, -182.883311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.56 / speed, -123.336291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.6 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.6 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.64 / speed, 0);
	effector:SetKey(_TRACK_O, 0.76 / speed, 1);
	effector:SetKey(_TRACK_O, 1.48 / speed, 1);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_37
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 60);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.56 / speed, 1.64 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.56 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.56 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.48 / speed, -130.083311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.48 / speed, -161.616291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.52 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.52 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.56 / speed, 0);
	effector:SetKey(_TRACK_O, 0.68 / speed, 1);
	effector:SetKey(_TRACK_O, 1.4 / speed, 1);
	effector:SetKey(_TRACK_O, 1.44 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_38
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 59);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.84 / speed, 1.92 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.84 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.84 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.76 / speed, -26.463311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.76 / speed, -173.496291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.72 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.72 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.76 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.76 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.8 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.8 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0);
	effector:SetKey(_TRACK_O, 0.96 / speed, 1);
	effector:SetKey(_TRACK_O, 1.68 / speed, 1);
	effector:SetKey(_TRACK_O, 1.72 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.76 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.8 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_39
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 58);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.6 / speed, 1.68 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.6 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.6 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.52 / speed, 67.256688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.52 / speed, -168.216291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.56 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.56 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.6 / speed, 0);
	effector:SetKey(_TRACK_O, 0.72 / speed, 1);
	effector:SetKey(_TRACK_O, 1.44 / speed, 1);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_40
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 57);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.68 / speed, 1.76 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.68 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.68 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.6 / speed, 130.616688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.6 / speed, -150.396291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.64 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.64 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.32 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.32 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.68 / speed, 0);
	effector:SetKey(_TRACK_O, 0.8 / speed, 1);
	effector:SetKey(_TRACK_O, 1.52 / speed, 1);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.64 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_41
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 56);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.48 / speed, 1.56 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.48 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.48 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.4 / speed, 182.096688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.4 / speed, -99.576291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.44 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.44 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.32 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.32 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.36 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.36 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.48 / speed, 0);
	effector:SetKey(_TRACK_O, 0.6 / speed, 1);
	effector:SetKey(_TRACK_O, 1.32 / speed, 1);
	effector:SetKey(_TRACK_O, 1.36 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.4 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.44 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_42
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 55);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.92 / speed, 2 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.92 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.92 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.84 / speed, 179.456688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.84 / speed, -28.296291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.76 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.76 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.8 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.8 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.84 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.84 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.88 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.88 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.92 / speed, 0);
	effector:SetKey(_TRACK_O, 1.04 / speed, 1);
	effector:SetKey(_TRACK_O, 1.76 / speed, 1);
	effector:SetKey(_TRACK_O, 1.8 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.84 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.88 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_43
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 54);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.68 / speed, 1.76 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.68 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.68 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.6 / speed, 152.396688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.6 / speed, 70.043708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.64 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.64 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.32 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.32 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.68 / speed, 0);
	effector:SetKey(_TRACK_O, 0.8 / speed, 1);
	effector:SetKey(_TRACK_O, 1.52 / speed, 1);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.6 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.64 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_44
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 53);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.88 / speed, 1.96 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.88 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.88 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.8 / speed, 85.076688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.8 / speed, 118.223708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.72 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.72 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.76 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.76 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.8 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.8 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.84 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.84 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.88 / speed, 0);
	effector:SetKey(_TRACK_O, 1 / speed, 1);
	effector:SetKey(_TRACK_O, 1.72 / speed, 1);
	effector:SetKey(_TRACK_O, 1.76 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.8 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.84 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_45
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 52);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(1 / speed, 2.08 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 1 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.92 / speed, -16.563311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.92 / speed, 101.063708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.84 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.84 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.88 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.88 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.92 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.92 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.96 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.96 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 1 / speed, 0);
	effector:SetKey(_TRACK_O, 1.12 / speed, 1);
	effector:SetKey(_TRACK_O, 1.84 / speed, 1);
	effector:SetKey(_TRACK_O, 1.88 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.92 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.96 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_46
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 51);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.6 / speed, 1.68 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.6 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.6 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.52 / speed, -100.383311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.52 / speed, 64.103708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.56 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.56 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.48 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.48 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.52 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.52 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.56 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.56 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.6 / speed, 0);
	effector:SetKey(_TRACK_O, 0.72 / speed, 1);
	effector:SetKey(_TRACK_O, 1.44 / speed, 1);
	effector:SetKey(_TRACK_O, 1.48 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.52 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.56 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_47
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 50);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.76 / speed, 1.84 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.76 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.76 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.68 / speed, -160.443311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.68 / speed, -9.156291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.72 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.72 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.6 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.6 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.64 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.64 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.68 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.68 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.72 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.72 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.76 / speed, 0);
	effector:SetKey(_TRACK_O, 0.88 / speed, 1);
	effector:SetKey(_TRACK_O, 1.6 / speed, 1);
	effector:SetKey(_TRACK_O, 1.64 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.68 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.72 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_48
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 49);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.44 / speed, 1.52 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.44 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.44 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.36 / speed, 75.176688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.36 / speed, 67.843708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.4 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.4 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.32 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.32 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.36 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.36 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.44 / speed, 0);
	effector:SetKey(_TRACK_O, 0.56 / speed, 1);
	effector:SetKey(_TRACK_O, 1.28 / speed, 1);
	effector:SetKey(_TRACK_O, 1.32 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.36 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.4 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_49
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 48);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.2 / speed, 1.28 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.2 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.2 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.12 / speed, -4.683311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.12 / speed, 89.623708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.16 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.16 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.2 / speed, 0);
	effector:SetKey(_TRACK_O, 0.32 / speed, 1);
	effector:SetKey(_TRACK_O, 1.04 / speed, 1);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_50
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 47);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.32 / speed, 1.4 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.32 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.32 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.24 / speed, -31.083311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.24 / speed, 98.203708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.28 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.28 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.32 / speed, 0);
	effector:SetKey(_TRACK_O, 0.44 / speed, 1);
	effector:SetKey(_TRACK_O, 1.16 / speed, 1);
	effector:SetKey(_TRACK_O, 1.2 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.24 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.28 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_51
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 46);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.32 / speed, 1.4 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.32 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.32 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.24 / speed, -60.783311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.24 / speed, 57.943708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.28 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.28 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.32 / speed, 0);
	effector:SetKey(_TRACK_O, 0.44 / speed, 1);
	effector:SetKey(_TRACK_O, 1.16 / speed, 1);
	effector:SetKey(_TRACK_O, 1.2 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.24 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.28 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_52
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 45);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.2 / speed, 1.28 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.2 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.2 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.12 / speed, -104.343311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.12 / speed, -8.05629150390598 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.16 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.16 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.2 / speed, 0);
	effector:SetKey(_TRACK_O, 0.32 / speed, 1);
	effector:SetKey(_TRACK_O, 1.04 / speed, 1);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_53
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 44);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.32 / speed, 1.4 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.32 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.32 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.24 / speed, -94.443311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.24 / speed, -41.056291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.28 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.28 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.32 / speed, 0);
	effector:SetKey(_TRACK_O, 0.44 / speed, 1);
	effector:SetKey(_TRACK_O, 1.16 / speed, 1);
	effector:SetKey(_TRACK_O, 1.2 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.24 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.28 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_54
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 43);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.4 / speed, 1.48 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.4 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.4 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.32 / speed, -56.163311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.32 / speed, -64.816291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.36 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.36 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.2305993132078 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.21961004491511 * yScale);
	effector:SetKey(_TRACK_SX, 1.32 / speed, 0.31980176229994 * xScale);
	effector:SetKey(_TRACK_SY, 1.32 / speed, 0.14397346961702 * yScale);
	effector:SetKey(_TRACK_SX, 1.36 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.36 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.4 / speed, 0);
	effector:SetKey(_TRACK_O, 0.52 / speed, 1);
	effector:SetKey(_TRACK_O, 1.24 / speed, 1);
	effector:SetKey(_TRACK_O, 1.28 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.32 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.36 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_55
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 42);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.2 / speed, 1.28 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.2 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.2 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.12 / speed, -19.203311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.12 / speed, -88.576291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.16 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.16 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.2 / speed, 0);
	effector:SetKey(_TRACK_O, 0.32 / speed, 1);
	effector:SetKey(_TRACK_O, 1.04 / speed, 1);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_56
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 41);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.28 / speed, 1.36 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.28 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.28 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.2 / speed, 10.496688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.2 / speed, -83.296291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.24 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.24 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.28 / speed, 0);
	effector:SetKey(_TRACK_O, 0.4 / speed, 1);
	effector:SetKey(_TRACK_O, 1.12 / speed, 1);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.2 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.24 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_57
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 40);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.32 / speed, 1.4 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.32 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.32 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.24 / speed, 71.876688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.24 / speed, -61.516291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.28 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.28 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.32 / speed, 0);
	effector:SetKey(_TRACK_O, 0.44 / speed, 1);
	effector:SetKey(_TRACK_O, 1.16 / speed, 1);
	effector:SetKey(_TRACK_O, 1.2 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.24 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.28 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_58
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 39);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.2 / speed, 1.28 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.2 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.2 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.12 / speed, 104.876688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.12 / speed, -26.536291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.16 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.16 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.2 / speed, 0);
	effector:SetKey(_TRACK_O, 0.32 / speed, 1);
	effector:SetKey(_TRACK_O, 1.04 / speed, 1);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_59
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 38);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.28 / speed, 1.36 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.28 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.28 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.2 / speed, 125.336688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.2 / speed, 37.483708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.24 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.24 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.28 / speed, 0);
	effector:SetKey(_TRACK_O, 0.4 / speed, 1);
	effector:SetKey(_TRACK_O, 1.12 / speed, 1);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.2 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.24 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_60
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 37);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.24 / speed, 1.32 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.24 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.24 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.16 / speed, 64.616688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.16 / speed, 98.863708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.2 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.2 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.24 / speed, 0);
	effector:SetKey(_TRACK_O, 0.36 / speed, 1);
	effector:SetKey(_TRACK_O, 1.08 / speed, 1);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.2 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_61
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 36);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.32 / speed, 1.4 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.32 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.32 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.24 / speed, 30.956688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.24 / speed, 111.403708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.28 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.28 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.32 / speed, 0);
	effector:SetKey(_TRACK_O, 0.44 / speed, 1);
	effector:SetKey(_TRACK_O, 1.16 / speed, 1);
	effector:SetKey(_TRACK_O, 1.2 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.24 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.28 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_62
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 35);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.24 / speed, 1.32 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.24 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.24 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.16 / speed, -50.883311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.16 / speed, 111.403708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.2 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.2 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.24 / speed, 0);
	effector:SetKey(_TRACK_O, 0.36 / speed, 1);
	effector:SetKey(_TRACK_O, 1.08 / speed, 1);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.2 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_63
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 34);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.28 / speed, 1.36 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.28 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.28 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.2 / speed, 43.496688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.2 / speed, 127.243708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.24 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.24 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.28 / speed, 0);
	effector:SetKey(_TRACK_O, 0.4 / speed, 1);
	effector:SetKey(_TRACK_O, 1.12 / speed, 1);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.2 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.24 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_64
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 33);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.32 / speed, 1.4 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.32 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.32 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.24 / speed, 68.576688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.24 / speed, 125.263708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.28 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.28 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.32 / speed, 0);
	effector:SetKey(_TRACK_O, 0.44 / speed, 1);
	effector:SetKey(_TRACK_O, 1.16 / speed, 1);
	effector:SetKey(_TRACK_O, 1.2 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.24 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.28 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_65
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 32);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.08 / speed, 1.16 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.08 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.08 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1 / speed, 1.91668823242196 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1 / speed, 145.063708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.04 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.04 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.72 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.72 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.08 / speed, 0);
	effector:SetKey(_TRACK_O, 0.2 / speed, 1);
	effector:SetKey(_TRACK_O, 0.92 / speed, 1);
	effector:SetKey(_TRACK_O, 0.96 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.04 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_66
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 31);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.2 / speed, 1.28 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.2 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.2 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.12 / speed, -99.063311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.12 / speed, 109.423708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.16 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.16 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.2 / speed, 0);
	effector:SetKey(_TRACK_O, 0.32 / speed, 1);
	effector:SetKey(_TRACK_O, 1.04 / speed, 1);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_67
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 30);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.2 / speed, 1.28 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.2 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.2 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.12 / speed, -117.543311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.12 / speed, 55.303708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.16 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.16 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.2 / speed, 0);
	effector:SetKey(_TRACK_O, 0.32 / speed, 1);
	effector:SetKey(_TRACK_O, 1.04 / speed, 1);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_68
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 29);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.08 / speed, 1.16 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.08 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.08 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1 / speed, -137.343311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1 / speed, -33.796291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.04 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.04 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.72 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.72 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.08 / speed, 0);
	effector:SetKey(_TRACK_O, 0.2 / speed, 1);
	effector:SetKey(_TRACK_O, 0.92 / speed, 1);
	effector:SetKey(_TRACK_O, 0.96 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.04 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_69
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 28);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.2 / speed, 1.28 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.2 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.2 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.12 / speed, -109.623311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.12 / speed, -76.696291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.16 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.16 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.2 / speed, 0);
	effector:SetKey(_TRACK_O, 0.32 / speed, 1);
	effector:SetKey(_TRACK_O, 1.04 / speed, 1);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_70
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 27);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.28 / speed, 1.36 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.28 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.28 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.2 / speed, -48.903311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.2 / speed, -100.456291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.24 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.24 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.28 / speed, 0);
	effector:SetKey(_TRACK_O, 0.4 / speed, 1);
	effector:SetKey(_TRACK_O, 1.12 / speed, 1);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.2 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.24 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_71
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 26);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.08 / speed, 1.16 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.08 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.08 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1 / speed, 13.136688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1 / speed, -110.356291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.04 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.04 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.72 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.72 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.08 / speed, 0);
	effector:SetKey(_TRACK_O, 0.2 / speed, 1);
	effector:SetKey(_TRACK_O, 0.92 / speed, 1);
	effector:SetKey(_TRACK_O, 0.96 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.04 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_72
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 25);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.16 / speed, 1.24 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.16 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.16 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.08 / speed, 44.8166882324221 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.08 / speed, -110.356291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.12 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.12 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.16 / speed, 0);
	effector:SetKey(_TRACK_O, 0.28 / speed, 1);
	effector:SetKey(_TRACK_O, 1 / speed, 1);
	effector:SetKey(_TRACK_O, 1.04 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_73
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 24);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.2 / speed, 1.28 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.2 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.2 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.12 / speed, 125.336688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.12 / speed, -73.396291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.16 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.16 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.2 / speed, 0);
	effector:SetKey(_TRACK_O, 0.32 / speed, 1);
	effector:SetKey(_TRACK_O, 1.04 / speed, 1);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_74
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 23);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.08 / speed, 1.16 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.08 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.08 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1 / speed, 160.316688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1 / speed, -24.556291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.04 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.04 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.72 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.72 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.08 / speed, 0);
	effector:SetKey(_TRACK_O, 0.2 / speed, 1);
	effector:SetKey(_TRACK_O, 0.92 / speed, 1);
	effector:SetKey(_TRACK_O, 0.96 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.04 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_75
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 22);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.16 / speed, 1.24 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.16 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.16 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.08 / speed, 176.816688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.08 / speed, 68.503708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.12 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.12 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.16 / speed, 0);
	effector:SetKey(_TRACK_O, 0.28 / speed, 1);
	effector:SetKey(_TRACK_O, 1 / speed, 1);
	effector:SetKey(_TRACK_O, 1.04 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_76
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 21);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.12 / speed, 1.2 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.12 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.12 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.04 / speed, 57.356688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.04 / speed, 164.863708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.08 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.08 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.76 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.76 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.12 / speed, 0);
	effector:SetKey(_TRACK_O, 0.24 / speed, 1);
	effector:SetKey(_TRACK_O, 0.96 / speed, 1);
	effector:SetKey(_TRACK_O, 1 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.04 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_77
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 20);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.2 / speed, 1.28 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.2 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.2 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.12 / speed, 9.17668823242195 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.12 / speed, 138.463708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.16 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.16 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.2 / speed, 0);
	effector:SetKey(_TRACK_O, 0.32 / speed, 1);
	effector:SetKey(_TRACK_O, 1.04 / speed, 1);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_78
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 19);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.12 / speed, 1.2 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.12 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.12 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.04 / speed, -87.183311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.04 / speed, 133.183708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.08 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.08 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.76 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.76 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.12 / speed, 0);
	effector:SetKey(_TRACK_O, 0.24 / speed, 1);
	effector:SetKey(_TRACK_O, 0.96 / speed, 1);
	effector:SetKey(_TRACK_O, 1 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.04 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_79
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 18);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.16 / speed, 1.24 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.16 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.16 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.08 / speed, 50.756688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.08 / speed, 169.483708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.12 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.12 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.16 / speed, 0);
	effector:SetKey(_TRACK_O, 0.28 / speed, 1);
	effector:SetKey(_TRACK_O, 1 / speed, 1);
	effector:SetKey(_TRACK_O, 1.04 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_80
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 17);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(-0.08 / speed, 1 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, -0.08 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, -0.08 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.84 / speed, -50.223311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.84 / speed, 174.103708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, -0.12 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, -0.12 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.56 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.56 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.76 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.76 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, -0.08 / speed, 0);
	effector:SetKey(_TRACK_O, 0.04 / speed, 1);
	effector:SetKey(_TRACK_O, 0.76 / speed, 1);
	effector:SetKey(_TRACK_O, 0.8 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 0.88 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_81
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 16);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.04 / speed, 1.12 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.04 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.04 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.96 / speed, -180.903311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.96 / speed, 108.763708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.68 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.68 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.04 / speed, 0);
	effector:SetKey(_TRACK_O, 0.16 / speed, 1);
	effector:SetKey(_TRACK_O, 0.88 / speed, 1);
	effector:SetKey(_TRACK_O, 0.92 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 0.96 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_82
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 15);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.04 / speed, 1.12 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.04 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.04 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.96 / speed, -194.103311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.96 / speed, 22.303708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.68 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.68 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.04 / speed, 0);
	effector:SetKey(_TRACK_O, 0.16 / speed, 1);
	effector:SetKey(_TRACK_O, 0.88 / speed, 1);
	effector:SetKey(_TRACK_O, 0.92 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 0.96 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_83
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 14);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(-0.08 / speed, 1 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, -0.08 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, -0.08 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.84 / speed, -182.883311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.84 / speed, -87.256291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, -0.12 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, -0.12 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.56 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.56 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.76 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.76 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, -0.08 / speed, 0);
	effector:SetKey(_TRACK_O, 0.04 / speed, 1);
	effector:SetKey(_TRACK_O, 0.76 / speed, 1);
	effector:SetKey(_TRACK_O, 0.8 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 0.88 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_84
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 13);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.04 / speed, 1.12 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.04 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.04 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.96 / speed, -130.083311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.96 / speed, -125.536291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.68 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.68 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.04 / speed, 0);
	effector:SetKey(_TRACK_O, 0.16 / speed, 1);
	effector:SetKey(_TRACK_O, 0.88 / speed, 1);
	effector:SetKey(_TRACK_O, 0.92 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 0.96 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_85
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 12);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.12 / speed, 1.2 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.12 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.12 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.04 / speed, -26.463311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.04 / speed, -137.416291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.08 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0.08 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.76 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.76 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 1.04 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 1.04 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.12 / speed, 0);
	effector:SetKey(_TRACK_O, 0.24 / speed, 1);
	effector:SetKey(_TRACK_O, 0.96 / speed, 1);
	effector:SetKey(_TRACK_O, 1 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 1.04 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1.08 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_86
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 11);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(-0.08 / speed, 1 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, -0.08 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, -0.08 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.84 / speed, 67.256688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.84 / speed, -132.136291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, -0.12 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, -0.12 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.56 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.56 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.76 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.76 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, -0.08 / speed, 0);
	effector:SetKey(_TRACK_O, 0.04 / speed, 1);
	effector:SetKey(_TRACK_O, 0.76 / speed, 1);
	effector:SetKey(_TRACK_O, 0.8 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 0.88 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_87
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 10);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0 / speed, 1.08 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.92 / speed, 130.616688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.92 / speed, -114.316291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, -0.04 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, -0.04 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.64 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.64 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0 / speed, 0);
	effector:SetKey(_TRACK_O, 0.12 / speed, 1);
	effector:SetKey(_TRACK_O, 0.84 / speed, 1);
	effector:SetKey(_TRACK_O, 0.88 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 0.92 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 0.96 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_88
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 9);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.04 / speed, 1.12 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.04 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.04 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.96 / speed, 182.096688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.96 / speed, -63.496291503906 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.68 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.68 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.04 / speed, 0);
	effector:SetKey(_TRACK_O, 0.16 / speed, 1);
	effector:SetKey(_TRACK_O, 0.88 / speed, 1);
	effector:SetKey(_TRACK_O, 0.92 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 0.96 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_89
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 8);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(-0.08 / speed, 1 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, -0.08 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, -0.08 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.84 / speed, 179.456688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.84 / speed, 7.78370849609399 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, -0.12 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, -0.12 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.56 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.56 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.76 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.76 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, -0.08 / speed, 0);
	effector:SetKey(_TRACK_O, 0.04 / speed, 1);
	effector:SetKey(_TRACK_O, 0.76 / speed, 1);
	effector:SetKey(_TRACK_O, 0.8 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 0.88 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_90
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 7);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0 / speed, 1.08 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.92 / speed, 152.396688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.92 / speed, 106.123708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, -0.04 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, -0.04 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.64 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.64 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0 / speed, 0);
	effector:SetKey(_TRACK_O, 0.12 / speed, 1);
	effector:SetKey(_TRACK_O, 0.84 / speed, 1);
	effector:SetKey(_TRACK_O, 0.88 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 0.92 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 0.96 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_91
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 6);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(-0.04 / speed, 1.04 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, -0.04 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, -0.04 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.88 / speed, 85.076688232422 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.88 / speed, 154.303708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, -0.08 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, -0.08 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.6 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.6 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, -0.04 / speed, 0);
	effector:SetKey(_TRACK_O, 0.08 / speed, 1);
	effector:SetKey(_TRACK_O, 0.8 / speed, 1);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 0.88 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 0.92 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_92
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 5);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.04 / speed, 1.12 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.04 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.04 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.96 / speed, -16.563311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.96 / speed, 137.143708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, 0 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.68 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.68 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 1 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 1 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, 0.04 / speed, 0);
	effector:SetKey(_TRACK_O, 0.16 / speed, 1);
	effector:SetKey(_TRACK_O, 0.88 / speed, 1);
	effector:SetKey(_TRACK_O, 0.92 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 0.96 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 1 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_93
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 4);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(-0.04 / speed, 1.04 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, -0.04 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, -0.04 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.88 / speed, -100.383311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.88 / speed, 100.183708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, -0.08 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, -0.08 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.6 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.6 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, -0.04 / speed, 0);
	effector:SetKey(_TRACK_O, 0.08 / speed, 1);
	effector:SetKey(_TRACK_O, 0.8 / speed, 1);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 0.88 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 0.92 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_94
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 3);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(-0.08 / speed, 1 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, -0.08 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, -0.08 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.84 / speed, -160.443311767578 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.84 / speed, 26.923708496094 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, -0.12 / speed, 0.04692149771948 * xScale);
	effector:SetKey(_TRACK_SY, -0.12 / speed, 0.04692149771948 * yScale);
	effector:SetKey(_TRACK_SX, 0.56 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.56 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.76 / speed, 0.09512429268293 * xScale);
	effector:SetKey(_TRACK_SY, 0.76 / speed, 0.09512429268293 * yScale);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.23059930698382 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.21961003869114 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.31980175607597 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.14397346339304 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.4050563187361 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.39406705044342 * yScale);
	effector:SetKey(_TRACK_O, -0.08 / speed, 0);
	effector:SetKey(_TRACK_O, 0.04 / speed, 1);
	effector:SetKey(_TRACK_O, 0.76 / speed, 1);
	effector:SetKey(_TRACK_O, 0.8 / speed, 0.36590909090909);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0.17590909090909);
	effector:SetKey(_TRACK_O, 0.88 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_95
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 2);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.4 / speed, 1.52 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.4 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.4 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.68 / speed, -17.033369750977 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.68 / speed, -70.88077331543 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.08 / speed, -36.264584350586 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.08 / speed, -96.705556030273 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.32 / speed, -3.29677734375002 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.32 / speed, -118.134635620117 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.56 / speed, -34.616195678711 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.56 / speed, -140.662627563477 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.4 / speed, 0.0553756097561 * xScale);
	effector:SetKey(_TRACK_SY, 0.4 / speed, 0.0553756097561 * yScale);
	effector:SetKey(_TRACK_SX, 0.68 / speed, 0.14328975609756 * xScale);
	effector:SetKey(_TRACK_SY, 0.68 / speed, 0.14328975609756 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.22021463414634 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.22021463414634 * yScale);
	effector:SetKey(_TRACK_SX, 1.28 / speed, 0.22021463414634 * xScale);
	effector:SetKey(_TRACK_SY, 1.28 / speed, 0.22021463414634 * yScale);
	effector:SetKey(_TRACK_SX, 1.32 / speed, 0.41802146341463 * xScale);
	effector:SetKey(_TRACK_SY, 1.32 / speed, 0.39604292682927 * yScale);
	effector:SetKey(_TRACK_SX, 1.36 / speed, 0.41802146341463 * xScale);
	effector:SetKey(_TRACK_SY, 1.36 / speed, 0.22021463414634 * yScale);
	effector:SetKey(_TRACK_SX, 1.4 / speed, 0.44 * xScale);
	effector:SetKey(_TRACK_SY, 1.4 / speed, 0.40703219512195 * yScale);
	effector:SetKey(_TRACK_SX, 1.44 / speed, 0.49494634146341 * xScale);
	effector:SetKey(_TRACK_SY, 1.44 / speed, 0.49494634146341 * yScale);
	effector:SetKey(_TRACK_O, 0.4 / speed, 0);
	effector:SetKey(_TRACK_O, 0.56 / speed, 1);
	effector:SetKey(_TRACK_O, 1.28 / speed, 1);
	effector:SetKey(_TRACK_O, 1.32 / speed, 0.71);
	effector:SetKey(_TRACK_O, 1.36 / speed, 0.54);
	effector:SetKey(_TRACK_O, 1.4 / speed, 0.32);
	effector:SetKey(_TRACK_O, 1.44 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_96
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 1);
	object:SetAngle(0); object:AttachTo(root); play_field:IgnoreOnTestPoint(object:GetName())

	effector = CreateAnimationEffector();
	effector:SetLifeTime(0.2 / speed, 1.52 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, 0.2 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.2 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.48 / speed, 51.100095825195 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.48 / speed, -82.968970336914 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.88 / speed, 83.518439941406 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.88 / speed, -114.288381958008 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.12 / speed, 61.539904174805 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.12 / speed, -133.519609985352 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.36 / speed, 80.771118774414 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.36 / speed, -158.245460205078 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, 0.2 / speed, 0.0553756097561 * xScale);
	effector:SetKey(_TRACK_SY, 0.2 / speed, 0.0553756097561 * yScale);
	effector:SetKey(_TRACK_SX, 0.48 / speed, 0.14328975609756 * xScale);
	effector:SetKey(_TRACK_SY, 0.48 / speed, 0.14328975609756 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.22021463414634 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.22021463414634 * yScale);
	effector:SetKey(_TRACK_SX, 1.08 / speed, 0.22021463414634 * xScale);
	effector:SetKey(_TRACK_SY, 1.08 / speed, 0.22021463414634 * yScale);
	effector:SetKey(_TRACK_SX, 1.12 / speed, 0.41802146341463 * xScale);
	effector:SetKey(_TRACK_SY, 1.12 / speed, 0.39604292682927 * yScale);
	effector:SetKey(_TRACK_SX, 1.16 / speed, 0.41802146341463 * xScale);
	effector:SetKey(_TRACK_SY, 1.16 / speed, 0.22021463414634 * yScale);
	effector:SetKey(_TRACK_SX, 1.2 / speed, 0.44 * xScale);
	effector:SetKey(_TRACK_SY, 1.2 / speed, 0.40703219512195 * yScale);
	effector:SetKey(_TRACK_SX, 1.24 / speed, 0.49494634146341 * xScale);
	effector:SetKey(_TRACK_SY, 1.24 / speed, 0.49494634146341 * yScale);
	effector:SetKey(_TRACK_O, 0.2 / speed, 0);
	effector:SetKey(_TRACK_O, 0.36 / speed, 1);
	effector:SetKey(_TRACK_O, 1.08 / speed, 1);
	effector:SetKey(_TRACK_O, 1.12 / speed, 0.71);
	effector:SetKey(_TRACK_O, 1.16 / speed, 0.54);
	effector:SetKey(_TRACK_O, 1.2 / speed, 0.32);
	effector:SetKey(_TRACK_O, 1.24 / speed, 0);

	effector:PlayAt(timeOffset);


	-- Layer Bubble_97
	anim = CreateAnimationByPath("data/Texture/Scenes/Common/bubble.png");
	object = screen:CreateObject(BubbleAnimationElementName(), anim, 0, 0, 0, 0, 1, 1);
	anim:SetHotSpot(50, 50);
	object:SetZ(zOffset + 0);
	object:SetAngle(0); object:AttachTo(root);

	effector = CreateAnimationEffector();
	effector:SetLifeTime(-0.08 / speed, 1.52 / speed);
	effector:AttachTo(object);

	effector:SetKey(_TRACK_X, -0.08 / speed, 0 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, -0.08 / speed, 0 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.2 / speed, -109.892685546875 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.2 / speed, -66.48507019043 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.6 / speed, -152.201368408203 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.6 / speed, -123.079801635742 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 0.84 / speed, -145.607807006836 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 0.84 / speed, -145.058337402344 * yScale + yOffset);
	effector:SetKey(_TRACK_X, 1.08 / speed, -162.09170715332 * xScale + xOffset);
	effector:SetKey(_TRACK_Y, 1.08 / speed, -163.740095825195 * yScale + yOffset);
	effector:SetKey(_TRACK_SX, -0.08 / speed, 0.0553756097561 * xScale);
	effector:SetKey(_TRACK_SY, -0.08 / speed, 0.0553756097561 * yScale);
	effector:SetKey(_TRACK_SX, 0.2 / speed, 0.14328975609756 * xScale);
	effector:SetKey(_TRACK_SY, 0.2 / speed, 0.14328975609756 * yScale);
	effector:SetKey(_TRACK_SX, 0.6 / speed, 0.22021463414634 * xScale);
	effector:SetKey(_TRACK_SY, 0.6 / speed, 0.22021463414634 * yScale);
	effector:SetKey(_TRACK_SX, 0.8 / speed, 0.22021463414634 * xScale);
	effector:SetKey(_TRACK_SY, 0.8 / speed, 0.22021463414634 * yScale);
	effector:SetKey(_TRACK_SX, 0.84 / speed, 0.41802146341463 * xScale);
	effector:SetKey(_TRACK_SY, 0.84 / speed, 0.39604292682927 * yScale);
	effector:SetKey(_TRACK_SX, 0.88 / speed, 0.41802146341463 * xScale);
	effector:SetKey(_TRACK_SY, 0.88 / speed, 0.22021463414634 * yScale);
	effector:SetKey(_TRACK_SX, 0.92 / speed, 0.44 * xScale);
	effector:SetKey(_TRACK_SY, 0.92 / speed, 0.40703219512195 * yScale);
	effector:SetKey(_TRACK_SX, 0.96 / speed, 0.49494634146341 * xScale);
	effector:SetKey(_TRACK_SY, 0.96 / speed, 0.49494634146341 * yScale);
	effector:SetKey(_TRACK_O, -0.08 / speed, 0);
	effector:SetKey(_TRACK_O, 0.08 / speed, 1);
	effector:SetKey(_TRACK_O, 0.8 / speed, 1);
	effector:SetKey(_TRACK_O, 0.84 / speed, 0.71);
	effector:SetKey(_TRACK_O, 0.88 / speed, 0.54);
	effector:SetKey(_TRACK_O, 0.92 / speed, 0.32);
	effector:SetKey(_TRACK_O, 0.96 / speed, 0);

	effector:PlayAt(timeOffset);
	
    root:AttachTo(screen)
	TimerDo(screen:GetTimer(),
			timeOffset,
			function()
				if root:IsVisible() then
					PlaySound("BubbleExplosion")
				end
			end)
    return root, effectors_container
end

function StartExtraHint()
    --DEBUG
    --return false;
    ---[[
    local objects = vector_string()
    GetAdditionalHintObjects(objects)
    local correct_objects = {}    
    
    if game_state.inventory_zones then        
	    for i, v in ipairs(game_state.inventory_zones) do
	        local isClickable = false
            if game_state.locker:GetNReferences() == 0 then
                isClickable = true
            else
                if game_state.zones then
                    for k, w in ipairs(game_state.zones) do
                        if w.zone.IsVisible() and w.zone.HasObject(v.bound_object) then
                            isClickable = true
                        end
                    end
                end
            end
	        
            if isClickable and not v.visible and not v.IsCompleted() and not v.IsLocked() then
				local object = play_field:GetObject(v.bound_object);
				if object:GetOpacity() ~= 0 and object:IsVisible() and not game_state.locked_objects[v.bound_object] then--and not v.IsLocked() then
				
					table.insert(correct_objects, v.bound_object)
				end
			end
        end	
    end
    
    if game_state.zones then
        for i, v in ipairs(game_state.zones) do
            for k = 0, objects:size() - 1, 1 do
                if v.trigger_name == objects:get(k) and play_field:HasObject(v.trigger_name) then
                    table.insert(correct_objects, v.trigger_name)
                end
            end            
        end
    end
    
    if table.getn(correct_objects) == 0 then
        return
    end
    
    local index = math.random(1, table.getn(correct_objects))
    
    local obj = play_field:GetObject(correct_objects[index])
    
    if not play_field.extrahint then
        if obj:GetOpacity() > 0 then
            play_field.extrahint = {}
			play_field.extrahint.root, play_field.extrahint.effectors = AddBubblesExplosion(obj, play_field, 1, obj:GetZ() + 10, - obj:GetX(),  - obj:GetY(), 1 / obj:GetScaleX(), 1 / obj:GetScaleY(), 1)
            play_field.extrahint.root:SetXY(obj:GetX(), obj:GetY())			
		end
    else
        play_field.extrahint.root:Show()
        play_field.extrahint.root:SetXY(obj:GetX(), obj:GetY())
        for i, v in ipairs(play_field.extrahint.effectors) do
            v:Play()
        end
      end
	  
	 PlaySound("BubbleExplosion")
        ---]]
   
end
    

function OnAllItemsFound()
	Log('Calling OnAllItemsFound')
    local close_immediately = true
    if game_state.inventory_zones then
        for i, v in pairs(game_state.inventory_zones) do
			Log("Items to use == "..tostring(v.items_to_use))
            if v.items_to_use ~= 0 then
                close_immediately = false
                v.request_notebook_on_complete = true
            end
        end
    end
    
    if close_immediately then
        CloseNotebook();
    end
end

function DefaultOnScreenShown()
    if not game_state.loaded then
        OnScreenShown()
    end
    if game_state.OnScreenShown then
        game_state.OnScreenShown()
    end
end
function DefaultMetaObjectWasFound()
    local i, r = GetCurLevelId(play_field:GetName())
    if not r then
        r = GetMetaObjectLevelId(play_field:GetName())
    end
    GetProfileManager():GetCurrentProfile().cigars_found[r] = true
    local z, y = nil
    z, y = GetCurLevelId(play_field:GetName())
    if not y then
        GetProfileManager():GetCurrentProfile().meta_object_just_found = GetMetaObjectLevelId(play_field:GetName())
    end
    panel.RefreshMetaGameCaption();
    if not panel:IsPaused() then
        local i, r = GetCurLevelId(play_field:GetName())
        if r then
		    panel:BlickCigarBoxButton()
		    if game_state.is_tutorial_must_be_shown then
		        panel.cigarBoxButton:Go()
		    end
		else
            load_screen('data/Lua/Screens/MetaGameScreen.lua');
        end
    end
end

function OnWindowedModeChanged()
	if GetProfileManager():GetCurrentProfile() then
		GetProfileManager():GetCurrentProfile().fullscreen = GetGameApp():IsFullScreen()
		GetProfileManager():SaveProfiles()
	end
end

function load_cigar_screen(path)
	load_level(path)
end

function DefaultOnSceneFree()
    OnSceneFree()
--    play_field = nil
end

function PlayAnimationPeriodically(anim_name, period, screen)
    local anim_obj = screen:GetObject(anim_name);
	local time_anim = GetAnimationLength(anim_obj:GetAnimation());
	local effector   = CreateAnimationEffector()
    effector:AttachTo(anim_obj)
    effector:SetMode(_ANIM_LOOP)
    effector:SetKey(_TRACK_O, 0.,                     1.);
    effector:SetKey(_TRACK_O, time_anim - 0.0001,     1.);
    effector:SetKey(_TRACK_O, time_anim,              0.);
    effector:SetKey(_TRACK_O, period * time_anim - 0.0001, 0.);
    effector:SetKey(_TRACK_O, period * time_anim,          1.);
    effector:Play();
end

function CanSilhouetteBeShown()
    if panel:GetObject('Cover'):GetAnimation():GetFrame() == 0 then
        return false
    end
    return true
end
function GetCurrentProfileName()
	if not GetProfileManager():GetCurrentProfile() then
		return ""
	end
	return GetProfileManager():GetCurrentProfile():GetName()
end

function ForceFullScreenSetting(val)
	local cp = GetProfileManager():GetCurrentProfile()
	if cp then
		cp.fullscreen = val
	end
end

function OnProfileActivated()
    if not menu then
        return
    end
    menu.game_state.playerName:SetText(GetProfileManager():GetCurrentProfile():GetName())
end
