function CreateChapter(f)
    local characters = {
        f.Character("Sherlock", "s01c02_character_Sherlock_name"),
        f.Character("Swifty", "s01c02_character_Swifty_name"),
        f.Character("Babbidge", "s01c02_character_Babbidge_name"),
        f.Character("MrsPrice", "s01c02_character_MrsPrice_name")
    }
    local locations = {
        f.Location("0000_SherlockApartment", { "Assets/Scenes/Locations/s01c02/0000_SherlockApartment.unity" }),
        f.Location("0003_PriceApartment", { "Assets/Scenes/Locations/s01c02/0003_PriceApartment.unity" }),
        f.Location("0004_BabbidgeApartment", { "Assets/Scenes/Locations/s01c02/0004_BabbidgeApartment.unity" })
    }

    local points = {
        f.KeyPointPage(1, "s01c02_key_point_1", { 1 }),
        f.KeyPointPage(2, "s01c02_key_point_2", { 4 }),
        f.KeyPointPage(3, "s01c02_key_point_3", { 7 }),
        f.KeyPointPage(4, "s01c02_key_point_4", { 11 }),
        f.KeyPointPage(5, "s01c02_key_point_5", { 14 }),
        f.KeyPointPage(6, "s01c02_key_point_6", { 15 })
    }

    local newspaper = f.Newspaper("Hamster", "s01c02_newspaper_title", "s01c02_newspaper_article", "s01c02_newspaper_author")
    return f.Chapter(1, 2, "s01c02_chapter_title", characters, locations, points, newspaper)
end

function CreateInvestigation(f)
    local missions = {
        f.Mission(1, "s01c02_mission_1", { 0 }, { f.SimpleAction() }, 1),
        f.Mission(2, "s01c02_mission_2", { 1 }, { f.SimpleAction() }, 1),
        f.Mission(3, "s01c02_mission_3", { 2 }, { f.SimpleAction() }, 1),
        f.Mission(4, "s01c02_mission_4", { 3 }, { f.ActionWithTimer(120, "s01c02_mission_5_0_motivation") }, 2),
        f.Mission(5, "s01c02_mission_5", { 4 }, { f.SimpleAction() }, 1),
        f.Mission(6, "s01c02_mission_6", { 5 }, { f.SimpleAction() }, 1),
        f.Mission(7, "s01c02_mission_7", { 6 }, { f.SimpleAction() }, 1),
        f.Mission(8, "s01c02_mission_8", { 7 }, { f.SimpleAction() }, 1),
        f.Mission(9, "s01c02_mission_9", { 7 }, { f.SimpleAction() }, 1),
        f.Mission(10, "s01c02_mission_10", { 8, 9 }, { f.SimpleAction() }, 1),
        f.Mission(11, "s01c02_mission_11", { 10 }, { f.SimpleAction() }, 1),
        f.Mission(12, "s01c02_mission_12", { 11 }, { f.SimpleAction() }, 2),
        f.Mission(13, "s01c02_mission_13", { 12 }, { f.SimpleAction() }, 1),
        f.Mission(14, "s01c02_mission_14", { 13 }, { f.SimpleAction() }, 1),
        f.Mission(15, "s01c02_mission_15", { 14 }, { f.SimpleAction() }, 1)
    }

    return f.Investigation(4, missions)
end

function PrepareLocation()
    SetupLocation(function()
        SetupAnim('Sherlock', 'IdleSit')
        ApplyAnim('Sherlock')
        SetState('Babbidge', 'SittingIdle')
    end)

    ChangeLocation('0000_SherlockApartment')
end

function StartInvestigation()
    SetInteractive('decoration-vase_2', false)
    SetInteractive('decoration-window', false)
    Parallel(function()
        ShowLocationCaption('s01c02_location_0_caption', 's01c02_location_0_time')
        Play('Sherlock', 'DrinkTeaSit')
        Sequence(function()
            Delay(0.8)
            SetActive('cup', true)
            SetActive('decoration-teacup', false)
            SetActive('decoration-saucer', true)
        end)
        Sequence(function()
            Play('Swifty', 'Eat')
            Play('Swifty', 'Eat')
            Play('Swifty', 'Eat')
        end)
        Sequence(function()
            Delay(6.5)
            SetActive('cup', false)
            SetActive('decoration-teacup', true)
            SetActive('decoration-saucer', false)
        end)
    end)

    StartDialog()
    SetupAnim('Sherlock', 'TalkSit', { const = true })
    Say('Sherlock', 'Cheerful', 's01c02_Sherlock_mission_1_0_phrase_0', 'Swifty', nil, 'Amiable')
    SetupAnim('Sherlock', 'GesticulationSit', { notLoop = true })
    Say('Sherlock', 'Enchanted', 's01c02_Sherlock_mission_1_0_phrase_1', 'Sherlock')
    Say('Sherlock', 'Discomposedly', 's01c02_Sherlock_mission_1_0_phrase_2', 'Sherlock')
    SetActive('Babbidge', true)
    SetActive('CeilingDrop', true)
    EndDialog()
    
    -- [Анимация: Падение Бэббиджа]
    Parallel(function()
        MoveCamera('camera_point_1_0', 0.5)
        MoveTo('Babbidge', 'Babbidge_point_1_0', 1.2)
        MoveTo('CeilingDrop', 'CeilingDrop_point_1_0', 1, 2)
        Play('CeilingDrop', 'CeilingDrop')
        Sequence(function()
            Delay(1)
            Play('Sherlock', 'JumpsUp')
            ResetAnim('Sherlock')
            Walk('Sherlock', 'Sherlock_point_0_0')
        end)
        Sequence(function()
            Play('Babbidge', 'Fall')
            SetupAnim('Babbidge', 'SittingIdle')
            ApplyAnim('Babbidge')
        end)
        Sequence(function()
            Delay(1)
            Play('Swifty', 'Fright')
            Walk('Swifty', 'Swifty_point_1_0')
            SetActive('Swifty', false)
        end)
    end)

    SetupAnim('Babbidge', 'SittingTalk')
    ApplyAnim('Babbidge')
    
    StartDialog()
    SetupAnim('Babbidge', 'SufferSit', { notLoop = true })
    Say('Babbidge', 'spec:SufferMessy', 's01c02_Babbidge_mission_1_0_phrase_3', 'Babbidge')

    SetupAnim('Babbidge', 'SittingIdle')
    ApplyAnim('Babbidge')
    SetupAnim('Sherlock', 'Surprised', { notLoop = true })
    Say('Sherlock', 'Surprised', 's01c02_Sherlock_mission_1_0_phrase_4')
    EndDialog()
    ShowChapterTitle()
end

-- Поприветствовать гостя
function ApplyMission1Action0()

    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_2_0')
        CameraTo('camera_point_2_0', 1, 1)
    end)
    
    StartDialog()
    Say('Sherlock', 'Politely', 's01c02_Sherlock_mission_2_0_phrase_0', 'Babbidge', nil, 'spec:GuiltilyMessy')
    Say('Sherlock', 'Amiable', 's01c02_Sherlock_mission_2_0_phrase_1', 'Babbidge', nil, 'spec:GuiltilyMessy')
    EndDialog()
    
    -- [Анимация: Шерлок помогает Бэббиджу подняться]
    Parallel(function()
        Sequence(function()
            Delay(0.6)
            Play('Sherlock', 'HelpUp')
        end)
        Play('Babbidge', 'GetUp')
        ResetAnim('Babbidge')
    end)

    SetState('Babbidge', 'Idle')
    
    StartDialog()
    Say('Babbidge', 'spec:GuiltilyMessy', 's01c02_Babbidge_mission_2_0_phrase_2')
    Say('Sherlock', 'Calm', 's01c02_Sherlock_mission_2_0_phrase_3')
    Say('Babbidge', 'Upset', 's01c02_Babbidge_mission_2_0_phrase_4')
    Say('Sherlock', 'Calm', 's01c02_Sherlock_mission_2_0_phrase_5')
    Say('Babbidge', 'Inspired', 's01c02_Babbidge_mission_2_0_phrase_6')
    Say('Babbidge', 'Upset', 's01c02_Babbidge_mission_2_0_phrase_7')
    Say('Sherlock', 'Calm', 's01c02_Sherlock_mission_2_0_phrase_8')
    Say('Babbidge', 'Enchanted', 's01c02_Babbidge_mission_2_0_phrase_9')
    Say('Babbidge', 'Interrogative', 's01c02_Babbidge_mission_2_0_phrase_10')
    SetupAnim('Babbidge', 'PointAtConsequences', { notLoop = true })
    Say('Babbidge', 'Upset', 's01c02_Babbidge_mission_2_0_phrase_11')

    ActionCompleted()
    Say('Sherlock', 'Politely', 's01c02_Sherlock_mission_2_0_phrase_12')
    EndDialog()
    
    Walk('Babbidge', 'Babbidge_point_2_0')
    Walk('Babbidge', 'Babbidge_point_2_1')
    CameraTo('camera_point_2_0')

    SetInteractive('decoration-vase_2', true)
    SetInteractive('decoration-window', true)
end

-- Принять приглашение
function ApplyMission2Action0()

    Parallel(function()
        CameraTo('camera_point_2_0', 1, 1)
        Walk('Sherlock', 'Sherlock_point_2_4')
    end)

    Play('Door', 'Open')
    Parallel(function()
        -- TODO тут костыль для исправления: Шерлок не может двигаться там где стоял Бэббидж, он просто объодит пустое место.
        Walk('Babbidge', 'Babbidge_point_2_2')
        Walk('Sherlock', 'Sherlock_point_2_5')
    end)
    ChangeLocation('0004_BabbidgeApartment')
    ShowLocationCaption('s01c02_location_1_caption', 's01c02_location_1_time')
    Play('Door', 'Open')
    Parallel(function()
        Walk('Babbidge', 'Babbidge_point_3_0')
        Sequence(function()
            Delay(0.3)
            Walk('Sherlock', 'Sherlock_point_3_0')
        end)
        Sequence(function()
            Delay(0.7)
            Walk('Swifty', 'Swifty_point_3_0')
        end)
    end)

    Play('Door', 'Close')

    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_3_1')
        Sequence(function()
            Walk('Babbidge', 'Babbidge_point_3_1_1')
            Walk('Babbidge', 'Babbidge_point_3_1')
        end)
        MoveCamera('camera_point_3_0', 1.5)
        Sequence(function()
            Delay(0.5)
            Walk('Swifty', 'Swifty_point_3_0_1')
        end)
    end)

    Parallel(function()
        Sequence(function()
            Parallel(function()
                Play('Babbidge', 'TakeCake')
                Sequence(function()
                    Delay(0.5)
                    SetActive('decoration-cake', false)
                end)
            end)
            SetupAnim('Babbidge', 'WalkCake')
            Walk('Babbidge', 'Babbidge_point_3_2')
            SetupAnim('Babbidge', 'CakeIdle')
            ApplyAnim('Babbidge')
        end)

        Play('Sherlock', 'SearchOnTable')
    end)

    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_3_2')
    end)

    -- [Анимация: Бэббидж даёт Шерлоку кусок пирога]
    Parallel(function()
        Sequence(function()
            Delay(0.9)
            SetActive('pie', true)
        end)
        Play('Babbidge', 'GiveCake')
        ResetAnim('Babbidge')
        Sequence(function()
            Play('Sherlock', 'TakeShort')
            SetupAnim('Sherlock', 'IdleSandwich')
            ApplyAnim('Sherlock')
        end)
    end)

    SetupAnim('Sherlock', 'WalkSandwich')
    Walk('Sherlock', 'Sherlock_point_3_2_1')
    Parallel(function()
        -- [Анимация: Шерлок берет кусок пирога и откусывает кусок]

        Play('Sherlock', 'EatShort')
        -- [Анимация: Бэббидж начинает чинить оборудование]
        Sequence(function()
            Walk('Babbidge', 'Babbidge_point_3_3')
            SetupAnim('Babbidge', 'Repair')
            ApplyAnim('Babbidge')
        end)
    end)

    StartDialog()
    SetupAnim('Sherlock', 'TalkSandwich')
    Say('Sherlock', 'Politely', 's01c02_Sherlock_mission_3_0_phrase_0', 'Babbidge', nil, 'Calm')
    EndDialog()
    
    -- [Анимация: Шерлок делится пирогом со Свифти]
    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_3_3')
        Walk('Swifty', 'Swifty_point_3_1')
    end)

    Parallel(function()
        Sequence(function()
            Play('Sherlock', 'GiveSandwich')
            ResetAnim('Sherlock')
        end)
        Play('Swifty', 'Take')
        Sequence(function()
            Delay(2)
            SetActive('pie', false)
            SetActive('pieMouse', true)
            Play('Swifty', 'TakeEnd')
        end)
    end)
    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_3_4')
        Play('Swifty', 'Eat')
    end)
    SetActive('pieMouse', false)

    --MoveAndZoomCamera('camera_point_3_1', 1.2, .3)

    MoveCamera('camera_point_3_1', .3, 1.2)
    
    StartDialog()
    Say('Sherlock', 'Amiable', 's01c02_Sherlock_mission_3_0_phrase_1', 'Babbidge', nil, 'Calm')
    SetupAnim('Babbidge', '')
    Say('Babbidge', 'Inspired', 's01c02_Babbidge_mission_3_0_phrase_2')
    SetupAnim('Babbidge', '')
    Say('Babbidge', 'Inspired', 's01c02_Babbidge_mission_3_0_phrase_3')
    SetupAnim('Babbidge', '')
    Say('Babbidge', 'Upset', 's01c02_Babbidge_mission_3_0_phrase_4')
    Say('Sherlock', 'Amiable', 's01c02_Sherlock_mission_3_0_phrase_5')
    EndDialog()
    
    -- [Анимация: Раздаётся стук в дверь]
    MoveCamera('camera_point_3_2', .4)
    SetActive('Bam', true)
    Parallel(function()
        Play('Bam', 'Bam')
        Play('Door', 'WrathKnock')
    end)
    SetActive('Bam', false)

    Walk('Swifty', 'Swifty_point_3_2')
    MoveCamera('camera_point_3_1', .4)

    ActionCompleted()
    
    StartDialog()
    SetupAnim('Babbidge', '')
    Say('Babbidge', 'Scattered', 's01c02_Babbidge_mission_3_0_phrase_6')
    EndDialog()
    
    --MoveAndZoomCamera('camera_point_0_0', 1, .3)
    MoveCamera('camera_point_0_0', .3, 1)
end

-- Открыть дверь
function ApplyMission3Action0()

    --CameraTo('camera_point_0_0', 1, 1)

    -- Шерлок идет открывать дверь
    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_3_5')
        --MoveAndZoomCamera('camera_point_4_0', 1.2, .3)
        CameraTo('camera_point_4_0', 1, 1.2)
    end)

    -- [Анимация: Открытие двери]
    Play('Door', 'Open')

    SetActive('MrsPrice', true)
    Parallel(function()
        Sequence(function()
            Delay(0.5)
            Play('Sherlock', 'PushedAway')
        end)
        Play('MrsPrice', 'PushOff')
        Sequence(function()
            SetupAnim('MrsPrice', '')
            Walk('MrsPrice', 'MrsPrice_point_4_0', 1.93)
        end)
    end)
    
    StartDialog()
    SetupAnim('MrsPrice', 'TalkRampant', { notLoop = true })
    Say('MrsPrice', 'Rampant', 's01c02_MrsPrice_mission_4_0_phrase_0')
    Say('MrsPrice', 'Furious', 's01c02_MrsPrice_mission_4_0_phrase_1')
    EndDialog()
    
    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_4_0')
        MoveCamera('camera_point_4_1', .3)
    end)
    
    StartDialog()
    Say('Sherlock', 'Politely', 's01c02_Sherlock_mission_4_0_phrase_2','MrsPrice',nil,'Rampant')
    Say('MrsPrice', 'Rampant', 's01c02_MrsPrice_mission_4_0_phrase_3')
    Say('Sherlock', 'Politely', 's01c02_Sherlock_mission_4_0_phrase_4')
    Say('MrsPrice', 'Surprised', 's01c02_MrsPrice_mission_4_0_phrase_5')
    Say('Sherlock', 'Politely', 's01c02_Sherlock_mission_4_0_phrase_6')
    Say('MrsPrice', 'Grumpily', 's01c02_MrsPrice_mission_4_0_phrase_7')
    SetupAnim('Sherlock', 'Surprised', { notLoop = true })
    Say('Sherlock', 'Surprised', 's01c02_Sherlock_mission_4_0_phrase_8')
    Say('MrsPrice', 'Grumpily', 's01c02_MrsPrice_mission_4_0_phrase_9')
    ActionCompleted()
    Say('MrsPrice', 'AlmostCalm', 's01c02_MrsPrice_mission_4_0_phrase_10')
    EndDialog()

    Parallel(function()
        Sequence(function()
            Walk('MrsPrice', 'MrsPrice_point_4_2')
            Play('Door', 'Close')
        end)
        --MoveAndZoomCamera('camera_point_0_0', 1, .3)
        MoveCamera('camera_point_0_0', .3, 1)
    end)
end

-- Изучить машину Бэббиджа
function ApplyMission4Action0Start()

    --CameraTo('camera_point_0_0', 1, 1)

    SetupAnim('Babbidge', 'Repair')
    ApplyAnim('Babbidge')
    -- [Анимация: Бэббидж продолжает чинить оборудование]
    
    Parallel(function()
        --MoveAndZoomCamera()
        CameraTo('camera_point_5_0', 1, 1.2)
        Walk('Sherlock', 'Sherlock_point_5_0')
    end)
    
    StartDialog()
    Say('Sherlock', 'Curious', 's01c02_Sherlock_mission_5_0_phrase_0', 'Babbidge', nil, 'Scattered')
    SetupAnim('Babbidge', '')
    Say('Babbidge', 'Scattered', 's01c02_Babbidge_mission_5_0_phrase_1')
    EndDialog()
    
    -- [Анимация: Шерлок осматривает машину]
    Play('Sherlock', 'SearchOnTable')
    
    StartDialog()
    SetupAnim('Sherlock', 'Thinking', { notLoop = true })
    Say('Sherlock', 'Thoughtful', 's01c02_Sherlock_mission_5_0_phrase_2')
    EndDialog()
    
    Parallel(function()
        Sequence(function()
            StartDialog()
            SetupAnim('Babbidge', '')
            Say('Babbidge', 'Upset', 's01c02_Babbidge_mission_5_0_phrase_3')
            SetupAnim('Babbidge', '')
            Say('Babbidge', 'Upset', 's01c02_Babbidge_mission_5_0_phrase_4')
            EndDialog()
        end)
        Sequence(function()
            Walk('Sherlock', 'Sherlock_point_5_1')
            Play('Sherlock', 'SearchOnTable')
        end)
    end)

    -- [Анимация: Шерлок изучает машину, запускается таймер 2 минуты]
    SetupAnim('Sherlock', 'Explore')
    ApplyAnim('Sherlock')
    SetLock('Sherlock', true)
    SetInteractive('decoration-machine_3', false)


    --MoveAndZoomCamera()
    MoveCamera('camera_point_0_0', .3, 1)
end

-- Изучить машину Бэббиджа - время вышло
function ApplyMission4Action0TimeUp()
    ResetAnim('Sherlock')
    SetLock('Sherlock', false)
    SetInteractive('decoration-machine_3', true)
    Walk('Sherlock', 'Sherlock_point_5_2')
end

-- Изучить машину Бэббиджа - Завершить
function ApplyMission4Action0Completed()

    --CameraTo('camera_point_0_0', 1, 1)
    
    ResetAnim('Babbidge')
    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_5_3')
        Walk('Babbidge', 'Babbidge_point_5_0')
        --MoveAndZoomCamera('camera_point_3_1', 1.2, .3)
        --MoveCamera('camera_point_3_1', .3, 1.2)
        CameraTo('camera_point_3_1', 1, 1.2)
    end)
    
    StartDialog()
    Say('Sherlock', 'Curious', 's01c02_Sherlock_mission_5_0_phrase_5', 'Babbidge', nil, 'Calm')
    SetupAnim('Babbidge', 'TalkEnchanted', { notLoop = true })
    Say('Babbidge', 'Inspired', 's01c02_Babbidge_mission_5_0_phrase_6')

    SetupAnim('Sherlock', 'Thinking', { notLoop = true })
    Say('Sherlock', 'Thoughtful', 's01c02_Sherlock_mission_5_0_phrase_7')
    Say('Babbidge', 'Upset', 's01c02_Babbidge_mission_5_0_phrase_8')
    Say('Sherlock', 'Sincerely', 's01c02_Sherlock_mission_5_0_phrase_9')
    EndDialog()
    
    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_5_5')
        Walk('Babbidge', 'Babbidge_point_5_4')
        --MoveAndZoomCamera('camera_point_0_0', 1, .3)
        MoveCamera('camera_point_0_0', .3, 1)
    end)
    SetupAnim('Babbidge', 'Repair')
    ApplyAnim('Babbidge')
    
    StartDialog()
    Say('Sherlock', 'Thoughtful', 's01c02_Sherlock_mission_5_0_phrase_10', 'Sherlock')
    ActionCompleted()
    Say('Sherlock', 'Surprised', 's01c02_Sherlock_mission_5_0_phrase_11', 'Sherlock')
    EndDialog()
end

-- Посетить миссис Прайс
function ApplyMission5Action0()

    Parallel(function()
        CameraTo('camera_point_0_0', 1, 1)
        Walk('Sherlock', 'Sherlock_point_6_0')
    end)

    Walk('Swifty', 'Swifty_point_6_0')
    --[Анимация: Шерлок забирает мыша]
    PocketMouse()
    --Walk('Sherlock', 'Sherlock_point_6_1')
    --Parallel(function()

    Walk('Sherlock', 'Sherlock_point_6_2')
    Play('Door', 'Open')
    Walk('Sherlock', 'Sherlock_point_6_3')
    --end)

    SetupLocation(function()
        SetState('MrsPrice', 'SittingIdle')
        SetupAnim('MrsPrice', 'SmokingSit')
        ApplyAnim('MrsPrice')
    end)
    ChangeLocation('0003_PriceApartment')
    ShowLocationCaption('s01c02_location_2_caption', 's01c02_location_2_time')
    SetInteractive('decoration-rockingChair', false)

    Play('Door', 'Open')
    Walk('Sherlock', 'Sherlock_point_6_0')
    Play('Door', 'Close')

    Play('Sherlock', 'LookAround')

    --MoveAndZoomCamera('camera_point_5_1', 1.2, .3)
    MoveCamera('camera_point_5_1', .3, 1.2)
    ActionCompleted()
    
    StartDialog()
    SetupAnim('MrsPrice', 'TalkSit')
    Say('MrsPrice', 'Grumpily', 's01c02_MrsPrice_mission_6_0_phrase_0', 'Sherlock', nil, 'Calm')
    EndDialog()

    --MoveAndZoomCamera('camera_point_0_0', 1, .3)
    MoveCamera('camera_point_0_0', .3, 1)
end

-- Выпить чаю с миссис Прайс
function ApplyMission6Action0()

    --CameraTo('camera_point_0_0', 1, 1)

    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_7_1')
        --MoveAndZoomCamera('camera_point_7_0', 1.2, .8)
        CameraTo('camera_point_7_0', 1, 1.2)
    end)

    Play('Sherlock', 'SitDown')
    SetState('Sherlock', 'Sitting')
    SetInteractive('decoration-chair', false)
    SetupAnim('Sherlock', 'IdleSit')
    ApplyAnim('Sherlock')

    SetupAnim('MrsPrice', 'SmokingSit')
    ApplyAnim('MrsPrice')

    StartDialog()
    SetupAnim('MrsPrice', 'TalkSit', { const = true })
    Say('MrsPrice', 'Grumpily', 's01c02_MrsPrice_mission_7_0_phrase_0')
    EndDialog()
    
    Parallel(function()
        -- [Анимация: Шерлок берет чашку и отпивает чай]
        Play('Sherlock', 'DrinkTeaSit')
        Sequence(function()
            Delay(0.8)
            SetActive('cup', true)
            SetActive('decoration-teacup', false)
            SetActive('decoration-saucer', true)
        end)
        Sequence(function()
            Delay(6.5)
            SetActive('cup', false)
            SetActive('decoration-teacup', true)
            SetActive('decoration-saucer', false)
        end)
        Sequence(function()
            StartDialog()
            Say('MrsPrice', 'Grumpily', 's01c02_MrsPrice_mission_7_0_phrase_1')
            Say('MrsPrice', 'Contemptuously', 's01c02_MrsPrice_mission_7_0_phrase_2')
            EndDialog()
        end)
    end)

    StartDialog()
    SetupAnim('Sherlock', 'GesticulationSit', { notLoop = true })
    Say('Sherlock', 'Politely', 's01c02_Sherlock_mission_7_0_phrase_3','MrsPrice',nil,'Rampant')
    Say('MrsPrice', 'Rampant', 's01c02_MrsPrice_mission_7_0_phrase_4')
    EndDialog()
    
    Parallel(function()
        -- [Анимация: Шерлок берет чашку и отпивает чай]
        Play('Sherlock', 'DrinkTeaSit')
        Sequence(function()
            Delay(0.8)
            SetActive('cup', true)
            SetActive('decoration-teacup', false)
            SetActive('decoration-saucer', true)
        end)
        Sequence(function()
            Delay(6.5)
            SetActive('cup', false)
            SetActive('decoration-teacup', true)
            SetActive('decoration-saucer', false)
        end)
        Sequence(function()
            StartDialog()
            SetupAnim('MrsPrice', 'TalkIndignantly', { notLoop = true })
            Say('MrsPrice', 'Furious', 's01c02_MrsPrice_mission_7_0_phrase_5')
            Say('MrsPrice', 'Grumpily', 's01c02_MrsPrice_mission_7_0_phrase_6')
            EndDialog()
        end)
    end)
    
    StartDialog()
    SetupAnim('Sherlock', 'GesticulationToRightSit', { notLoop = true })
    Say('Sherlock', 'Politely', 's01c02_Sherlock_mission_7_0_phrase_7','MrsPrice',nil,'Grumpily')

    ActionCompleted()
    Say('MrsPrice', 'Grumpily', 's01c02_MrsPrice_mission_7_0_phrase_8')
    EndDialog()
    --MoveAndZoomCamera('camera_point_0_0', 1, .3)
    MoveCamera('camera_point_0_0', .3, 1)

    SetLock('Sherlock', true)
end

-- Бэббидж - вор?
function ApplyMission7Action0()
    --MoveAndZoomCamera('camera_point_7_0', 1.2, .3)
    CameraTo('camera_point_7_0', 1, 1.2)

    -- TODO: Шерлока может тоже стоит усадить на вскякий пожарный?

    SetupAnim('MrsPrice', 'SmokingSit')
    ApplyAnim('MrsPrice')

    StartDialog()
    SetupAnim('Sherlock', 'GesticulationSit', { notLoop = true })
    Say('Sherlock', 'Upset', 's01c02_Sherlock_mission_8_0_phrase_9', 'MrsPrice', nil, 'Grumpily')
    SetupAnim('MrsPrice', 'TalkSit', { const = true })
    Say('MrsPrice', 'Grumpily', 's01c02_MrsPrice_mission_8_0_phrase_10')
    Say('MrsPrice', 'Rampant', 's01c02_MrsPrice_mission_8_0_phrase_11')
    SetupAnim('MrsPrice', 'TalkFuriouslSit')
    Say('MrsPrice', 'Furious', 's01c02_MrsPrice_mission_8_0_phrase_12')
    Say('MrsPrice', 'Grumpily', 's01c02_MrsPrice_mission_8_0_phrase_13')
    Say('MrsPrice', 'Rampant', 's01c02_MrsPrice_mission_8_0_phrase_14')
    SetupAnim('MrsPrice', 'IdleSit')
    ApplyAnim('MrsPrice')
    SetupAnim('Sherlock', 'GesticulationEmotionalSit', { notLoop = true })
    Say('Sherlock', 'Upset', 's01c02_Sherlock_mission_8_0_phrase_15')
    Say('MrsPrice', 'Grumpily', 's01c02_MrsPrice_mission_8_0_phrase_16')
    ActionCompleted()
    --SetupAnim('Sherlock', 'GesticulationSit', {notLoop=true})
    SetupAnim('Sherlock', 'TalkSit', { const = true })
    Say('Sherlock', 'Thoughtful', 's01c02_Sherlock_mission_8_0_phrase_17')
    EndDialog()
    
    Parallel(function()
        Sequence(function()
            Play('Sherlock', 'StandUp')
            ResetAnim('Sherlock')
        end)
        --MoveAndZoomCamera('camera_point_7_0', 1, .3)
        MoveCamera('camera_point_7_0', .3, 1)
    end)
    Walk('Sherlock', 'Sherlock_point_7_2')

    SetState('Sherlock', 'Idle')
    SetInteractive('decoration-chair', true)
    SetLock('Sherlock', false)
end

-- Осмотреть комнату
function ApplyMission8Action0()

    --CameraTo('Sherlock', 1, 1)

    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_9_1')
        --MoveAndZoomCamera('camera_point_9_0', 1.2, .3)
        CameraTo('camera_point_9_0', 1, 1.2)
    end)
    --Walk('Sherlock', 'Sherlock_point_9_1')
    StartDialog()
    SetupAnim('Sherlock', 'Thinking', { notLoop = true })
    Say('Sherlock', 'Thoughtful', 's01c02_Sherlock_mission_9_0_phrase_0')
    EndDialog()
    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_9_3')
        --MoveAndZoomCamera('camera_point_9_1', 1, 2)
        MoveCamera('camera_point_9_1', 2, 1)
    end)
    StartDialog()
    --Walk('Sherlock', 'Sherlock_point_9_3')
    Say('Sherlock', 'Calm', 's01c02_Sherlock_mission_9_0_phrase_1')
    SetupAnim('Sherlock', 'Thinking', { notLoop = true })
    Say('Sherlock', 'Thoughtful', 's01c02_Sherlock_mission_9_0_phrase_2')
    EndDialog()
    
    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_9_4')
        --MoveAndZoomCamera('camera_point_9_2', 1.2, .4)
        MoveCamera('camera_point_9_2', .4, 1.2)
    end)

    ActionCompleted()
    
    StartDialog()
    SetupAnim('Sherlock', 'Thinking', { notLoop = true })
    Say('Sherlock', 'Thoughtful', 's01c02_Sherlock_mission_9_0_phrase_3')
    EndDialog()
    --MoveAndZoomCamera('camera_point_9_2', 1, .3)
    MoveCamera('camera_point_9_2', .3, 1)
end

-- Проверить комод
function ApplyMission9Action0()

    --CameraTo('Sherlock', 1, 1)

    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_10_0')
        --MoveAndZoomCamera('camera_point_10_0', 1.2, 1)
        CameraTo('camera_point_10_0', 1, 1.2)
    end)
    
    StartDialog()
    Say('Sherlock', 'Thoughtful', 's01c02_Sherlock_mission_10_0_phrase_0')
    Say('Sherlock', 'Thoughtful', 's01c02_Sherlock_mission_10_0_phrase_1')
    EndDialog()
    
    Play('Sherlock', 'SearchOnTable')
    ActionCompleted()
    
    StartDialog()
    Say('Sherlock', 'Thoughtful', 's01c02_Sherlock_mission_10_0_phrase_2')
    EndDialog()
    
    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_10_1')
        --MoveAndZoomCamera('camera_point_10_1', 1, 1)
        MoveCamera('camera_point_10_1', 1, 1)
    end)
end

-- Применить дедукцию
function ApplyMission10Action0()

    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_11_0')
        CameraTo('camera_point_10_1', 1, 1)
        --MoveAndZoomCamera('camera_point_11_0', 1.2, .3)
    end)
    -- [Анимация: Стоит задумавшись]
    StartDialog()
    SetupAnim('Sherlock', 'Thinking', { notLoop = true })
    Say('Sherlock', 'Thoughtful', 's01c02_Sherlock_mission_11_0_phrase_0', 'Sherlock')
    Say('Sherlock', 'Calm', 's01c02_Sherlock_mission_11_0_phrase_1', 'Sherlock')
    SetupAnim('Sherlock', 'Enlightened', { notLoop = true })
    Say('Sherlock', 'Joyous', 's01c02_Sherlock_mission_11_0_phrase_2', 'Sherlock')
    Say('Swifty', 'Puzzled', 's01c02_Swifty_mission_11_0_phrase_3')
    ActionCompleted()
    SetupAnim('Sherlock', 'TalkToPocket', { notLoop = true })
    Say('Sherlock', 'Joyous', 's01c02_Sherlock_mission_11_0_phrase_4')
    EndDialog()
    --MoveAndZoomCamera('camera_point_0_0', 1.2, .3)
end

-- Поговорить с миссис Прайс
function ApplyMission11Action0()

    --CameraTo('Sherlock', 1, 1)

    ResetAnim('MrsPrice')
    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_12_0')
        Play('MrsPrice', 'StandUp')
        SetState('MrsPrice', 'Idle')
        --MoveAndZoomCamera('camera_point_12_0', 1.2, .5)
        CameraTo('camera_point_12_0', 1, 1.2)
    end)
    SetInteractive('decoration-rockingChair', true)
    StartDialog()
    Say('Sherlock', 'Calm', 's01c02_Sherlock_mission_12_0_phrase_0', 'MrsPrice', nil, 'Grumpily')
    Say('MrsPrice', 'InConfusion', 's01c02_MrsPrice_mission_12_0_phrase_1')
    Say('Sherlock', 'Confidently', 's01c02_Sherlock_mission_12_0_phrase_2')
    Say('MrsPrice', 'InConfusion', 's01c02_MrsPrice_mission_12_0_phrase_3')
    Say('Sherlock', 'Crafty', 's01c02_Sherlock_mission_12_0_phrase_4')
    EndDialog()
    
    Parallel(function()
        Walk('Sherlock', 'Sherlock_point_12_1_1')
        Walk('MrsPrice', 'MrsPrice_point_12_1')
        --MoveAndZoomCamera('camera_point_12_1', 1, 1.5)
        MoveCamera('camera_point_12_1', 1.5, 1)
    end)
    -- [Анимация: Шерлок отодвигает комод. Там лежат столовые приборы]
    --Walk('Sherlock', 'Sherlock_point_12_1_1')

    Parallel(function()
        Play('Sherlock', 'PullBig')
        Sequence(function()
            Delay(1.8)
            Play('Mirror_display', 'Move')
        end)
        Sequence(function()
            Delay(1.8)
            MoveTo('decoration-dresser', 'decoration-dresser_pooint_12_0', 0.3)
            Delay(0.4)
            MoveTo('decoration-dresser', 'decoration-dresser_pooint_12_1', 0.3)
        end)
    end)
    Parallel(function()
        --ZoomCamera(1.4, .3)
        --MoveAndZoomCamera('camera_point_12_2', 1.2, .3)
        MoveCamera('camera_point_12_2', .3, 1.2)
        Walk('Sherlock', 'Sherlock_point_12_1_2')
    end)
    
    StartDialog()
    Say('MrsPrice', 'Amazedly', 's01c02_MrsPrice_mission_12_0_phrase_5')
    EndDialog()
    
    Parallel(function()
        Sequence(function() 
            StartDialog()
            Say('Sherlock', 'Calm', 's01c02_Sherlock_mission_12_0_phrase_6')
            EndDialog()
            MoveCamera('camera_point_12_2', .3, 1)
        end)
    end)
    
    StartDialog()
    SetupAnim('MrsPrice', 'TalkRampant', { notLoop = true })
    Say('MrsPrice', 'Rampant', 's01c02_MrsPrice_mission_12_0_phrase_7')
    Say('Sherlock', 'Calm', 's01c02_Sherlock_mission_12_0_phrase_8')
    Say('Sherlock', 'Confidently', 's01c02_Sherlock_mission_12_0_phrase_9')
    Say('Sherlock', 'Thoughtful', 's01c02_Sherlock_mission_12_0_phrase_10')
    Say('MrsPrice', 'Rampant', 's01c02_MrsPrice_mission_12_0_phrase_11')
    Say('Sherlock', 'Calm', 's01c02_Sherlock_mission_12_0_phrase_12')
    SetupAnim('MrsPrice', 'TalkFurious', { notLoop = true })
    Say('MrsPrice', 'Furious', 's01c02_MrsPrice_mission_12_0_phrase_13')
    EndDialog()
    
    -- [Анимация: В квартире Бэббиджа раздаётся взрыв!]
    -- [Анимация: миссис Прайс пугается]
    -- [Анимация: Шерлок отшатывается от неожиданности]

    Parallel(function()
        SetActive('Boom', true)
    end)

    Parallel(function()
        Play('Mirror_display', 'Boom')
        Play('Door', 'DoorBoom')
        Play('Sherlock', 'FrightenByExplosion')
        Play('MrsPrice', 'FrightenByExplosion')
        Play('Boom', 'Boom')
        Play('ExplosionLeftWall_display', 'ExplosionLeftWall')
        Play('ExplosionLeftWallBig_display', 'ExplosionLeftWallBig')
        Play('ExplosionRightWall_display', 'ExplosionRightWall')
    end)
    Parallel(function()
        SetActive('Boom', false)
    end)

    StartDialog()
    ActionCompleted()
    Say('Sherlock', 'Calm', 's01c02_Sherlock_mission_12_0_phrase_14')
    EndDialog()
end

-- Поспешить к Бэббиджу
function ApplyMission12Action0()

    --CameraTo('camera_point_12_2', 1, 1)
    Parallel(function()
        Sequence(function()
            Delay(0.2)
            Play('Door', 'Open')
        end)

        Sequence(function()
            SetupAnim('Sherlock', 'Run')
            Walk('Sherlock', 'Sherlock_point_12_3')
            --end)
            --Sequence(function()
            --Delay(0.5)
            SetupAnim('MrsPrice', 'Run')
            Walk('MrsPrice', 'MrsPrice_point_12_3', 1.5)
        end)
        CameraTo('camera_point_13_0', 1, 1)
    end)

    SetupLocation(function()
        SetActive('decoration-cabinet_1', false)
        SetActive('Cabinet', true)
        SetActive('Swifty', false)
        SetActive('MrsPrice', true)

        SetTo('Swifty', 'Swifty_point_13_0')
        SetState('Babbidge', 'IdleLie')
        SetupAnim('Babbidge', 'IdleLie')
        ApplyAnim('Babbidge')
        SetTo('Babbidge', 'Babbidge_point_13_0')
        MoveCamera('camera_point_13_0', 0)

        SetActive('BrokenMachine', true)
        SetActive('Discharges', true)
        SetActive('decoration-cake', false)
        SetActive('decoration-machine_3', false)
        SetActive('decoration-wire_4', false)
    end)

    ChangeLocation('0004_BabbidgeApartment')
    ShowLocationCaption('s01c02_location_3_caption', 's01c02_location_3_time')
    -- [Анимация: В квартире Бэббиджа дым, главная машина искрится, не позволяя подойти к учёному, который лежит в дальней комнате, придавленный шкафом]
    Play('Door', 'Open')
    Parallel(function()
        Sequence(function()
            Delay(0.5)
            SetupAnim('Sherlock', 'Run')
            --Walk('Sherlock', 'Sherlock_point_13_0')
            Walk('Sherlock', 'Sherlock_point_13_1')
        end)
        Sequence(function()
            SetupAnim('MrsPrice', 'Run')
            --Walk('MrsPrice', 'MrsPrice_point_13_0')
            Walk('MrsPrice', 'MrsPrice_point_13_1', 1.5)
        end)
    end)
    ResetAnim('MrsPrice')
    ResetAnim('Sherlock')
    --MoveAndZoomCamera('camera_point_13_1', 1.2, .6)
    MoveCamera('camera_point_13_1', .6, 1.2)
    
    StartDialog()
    Say('Sherlock', 'Anxious', 's01c02_Sherlock_mission_13_0_phrase_0')
    EndDialog()
    
    Parallel(function()
        Play('Babbidge', 'CrushedByCabinet')
        --MoveAndZoomCamera('camera_point_13_0_1', 1.4, .6)
        MoveCamera('camera_point_13_0_1', .6, 1.4)
    end)
    --MoveAndZoomCamera('camera_point_13_1', 1.2, .6)
    MoveCamera('camera_point_13_1', .6, 1.2)
    StartDialog()
    ActionCompleted()
    SetupAnim('Sherlock', 'InConfusion', { notLoop = true })
    Say('Sherlock', 'InConfusion', 's01c02_Sherlock_mission_13_0_phrase_1')
    EndDialog()
    
    --MoveAndZoomCamera('camera_point_13_0', 1, .3)
    MoveCamera('camera_point_13_0', .3, 1)
end

-- Отключить машину Бэббиджа
function ApplyMission13Action0()
    --Parallel(function()
    --Walk('Sherlock', 'Sherlock_point_14_0')
    --Walk('MrsPrice', 'MrsPrice_point_14_0')
    --CameraTo('camera_point_14_0')
    --end)
    Parallel(function()
        CameraTo('camera_point_13_0', 1, 1.2)
        Walk('Sherlock', 'Sherlock_point_13_1_1')
    end)

    StartDialog()
    --MoveAndZoomCamera('camera_point_13_1', 1.2, .6)
    Say('Sherlock', 'Anxious', 's01c02_Sherlock_mission_14_0_phrase_0', 'MrsPrice', nil, 'InConfusion')
    Say('MrsPrice', 'InConfusion', 's01c02_MrsPrice_mission_14_0_phrase_1')
    Say('Sherlock', 'Concentrated', 's01c02_Sherlock_mission_14_0_phrase_2')
    Say('Sherlock', 'Enlightened', 's01c02_Sherlock_mission_14_0_phrase_3', 'Swifty', nil, 'Resolute')
    Say('Swifty', 'Resolute', 's01c02_Swifty_mission_14_0_phrase_4')
    EndDialog()
    
    ReleaseMouse()
    Walk('Swifty', 'Swifty_point_14_0')
    
    StartDialog()
    Say('Sherlock', 'Concentrated', 's01c02_Sherlock_mission_14_0_phrase_5')
    Say('Swifty', 'Resolute', 's01c02_Swifty_mission_14_0_phrase_6')
    Say('Sherlock', 'Confidently', 's01c02_Sherlock_mission_14_0_phrase_7')
    EndDialog()
    
    Parallel(function()
        MoveCamera('camera_point_14_1', .5)
        Walk('Swifty', 'Swifty_point_14_1')
    end)
    -- [Анимация: Свифти бежит к машине, выключает рубильник, разряды прекращаются]
    Parallel(function()
        Play('Swifty', 'TurnOffSwitch')
        Sequence(function()
            Delay(0.5)
            Play('Cutout', 'move')
        end)
    end)

    Parallel(function()
        SetActive('BrokenMachine', false)
        SetActive('Discharges', false)

        SetActive('decoration-machine_3', true)
        SetActive('decoration-wire_4', true)
    end)
    Parallel(function()
        MoveCamera('camera_point_13_1', .4)
        Sequence(function() 
            StartDialog()
            Say('Sherlock', 'Joyous', 's01c02_Sherlock_mission_14_0_phrase_8', 'Swifty', nil, 'Proudly')
            EndDialog()
        end)
    end)
    
    StartDialog()
    ActionCompleted()
    Say('MrsPrice', 'Grumpily', 's01c02_MrsPrice_mission_14_0_phrase_9')
    EndDialog()
    --MoveAndZoomCamera('camera_point_13_0', 1, .3)
    MoveCamera('camera_point_13_0', .3, 1)
end

-- Спасти Бэббиджа
function ApplyMission14Action0()

    --CameraTo('camera_point_13_0', 1, 1)

    -- TODO: переделать на промежуточные точки
    Parallel(function()
        Sequence(function()
            Delay(2)
            Walk('Sherlock', 'Sherlock_point_15_0')
            Walk('Sherlock', 'Sherlock_point_15_1')
        end)
        Sequence(function()
            Walk('MrsPrice', 'MrsPrice_point_15_0')
            Walk('MrsPrice', 'MrsPrice_point_15_1')
            Walk('MrsPrice', 'MrsPrice_point_15_2')
            Walk('MrsPrice', 'MrsPrice_point_15_3')
            Walk('MrsPrice', 'MrsPrice_point_15_4')
        end)
        --MoveAndZoomCamera('camera_point_15_0', 1.3, 2)
        CameraTo('camera_point_15_0', 1, 1.3)
    end)
    StartDialog()
    Say('Sherlock', 'Anxious', 's01c02_Sherlock_mission_15_0_phrase_0', 'Babbidge', nil, 'Suffer')
    SetupAnim('Babbidge', "TalkLie")
    Say('Babbidge', 'Suffer', 's01c02_Babbidge_mission_15_0_phrase_1', nil, nil, nil, nil, true, false)
    EndDialog()

    -- [Анимация: Шерлок поднимает шкаф]
    -- [Анимация: Прайс вытаскивает Бэббиджа из-под шкафа]
    -- [Анимация: Шерлок опускает шкаф назад]
    -- [Бэббидж остается на полу. Свифти озабоченно подбегает к нему. Прайс и Шерлок стоят рядом]

    Parallel(function()
        Play("Sherlock", 'LiftUpBig')
        Sequence(function()
            Delay(0.25)
            Play("Cabinet", 'LiftUp')
        end)
        Sequence(function()
            Delay(2)
            Play("Babbidge", 'GiveHand')
            Parallel(function()
                Play("Babbidge", 'GetOutCabinet')
                MoveTo('Babbidge', 'Babbidge_point_15_0', 0.8)
            end)
        end)

        Sequence(function()
            Delay(2.45)
            Parallel(function()
                Play("MrsPrice", 'PullBabbidge')
                Sequence(function()
                    Delay(0.5)
                    MoveTo('MrsPrice', 'MrsPrice_point_15_5', 1)
                end)

            end)
        end)
    end)
    --SetupAnim('Babbidge', 'IdleLie')
    --ApplyAnim('Babbidge')
    Walk('Sherlock', 'Sherlock_point_15_2')

    StartDialog()
    Say('Sherlock', 'Relief', 's01c02_Sherlock_mission_15_0_phrase_2', 'MrsPrice', nil, 'Embarrassed', nil, true, false)
    ActionCompleted()
    Say('MrsPrice', 'Embarrassed', 's01c02_MrsPrice_mission_15_0_phrase_3')
    EndDialog()
end

-- Вернуться в свою квартиру
function ApplyMission15Action0()

    SetupLocation(function()
        SetTo('Sherlock', 'Sherlock_point_16_0')
        SetTo('Swifty', 'Swifty_point_16_0')
        SetTo('Babbidge', 'Babbidge_point_16_0')
        SetTo('MrsPrice', 'MrsPrice_point_16_0')
        SetActive('Babbidge', true)
        SetActive('MrsPrice', true)
        SetState('Babbidge', 'IdleLie')
        SetupAnim('Babbidge', "IdleLie")
        ApplyAnim('Babbidge')
        MoveCamera('camera_point_16_0', 0)
        SetLock('Bed', true)
        SetCustomizableLock('Bed', true)
    end)
    ChangeLocation('0000_SherlockApartment')
    ShowLocationCaption('s01c02_location_4_caption', 's01c02_location_4_time')

    StartDialog()
    SetupAnim('Babbidge', "TalkLie")
    Say('Babbidge', 'Guiltily', 's01c02_Babbidge_mission_16_0_phrase_0')
    Say('Swifty', 'Proudly', 's01c02_Swifty_mission_16_0_phrase_1')
    SetupAnim('Babbidge', "TalkLie")
    Say('Babbidge', 'Guiltily', 's01c02_Babbidge_mission_16_0_phrase_2', 'MrsPrice', nil, 'AlmostCalm')
    Say('MrsPrice', 'Embarrassed', 's01c02_MrsPrice_mission_16_0_phrase_3')
    SetupAnim('MrsPrice', 'TalkRampant', { notLoop = true })
    Say('MrsPrice', 'Rampant', 's01c02_MrsPrice_mission_16_0_phrase_4')

    Say('Sherlock', 'Calm', 's01c02_Sherlock_mission_16_0_phrase_5', 'Babbidge')
    Say('Sherlock', 'Confidently', 's01c02_Sherlock_mission_16_0_phrase_6', 'Babbidge')
    SetupAnim('Babbidge', "TalkLie")
    Say('Babbidge', 'Joyous', 's01c02_Babbidge_mission_16_0_phrase_7')
    ActionCompleted()
    Say('Sherlock', 'Ironically', 's01c02_Sherlock_mission_16_0_phrase_8', 'MrsPrice', nil, 'InConfusion')
    EndDialog()
    InvestigationCompleted()
end

function ApplyMissionActionBeforeNextChapter()
end

function ReleaseMouse()
    Parallel(function()
        SetActive('SwiftyHand', true)
        Play('Sherlock', 'ReleaseMouse')
        Sequence(function()
            Play('SwiftyHand', 'Release')
            Parallel(function()
                SetActive('SwiftyHand', false)
                -- TODO: включить когда будет поддержка вложенных точек
                -- SetTo('Swifty', 'Swifty_release_point')
                SetActive('Swifty', true)
            end)
        end)
    end)
end

function PocketMouse()
    -- TODO: включить когда будет поддержка вложенных точек
    -- Walk('Swifty', 'Swifty_pocket_point')

    Parallel(function()
        SetActive('Swifty', false)
        SetActive('SwiftyPocket', true)
        Play('Sherlock', 'PocketMouse')
        Sequence(function()
            Play('SwiftyPocket', 'Pocket')
            SetActive('SwiftyPocket', false)
        end)
    end)
end

function MoveAndZoomCamera(pointUid, zoom, duration)
    MoveCamera(pointUid, duration, zoom)
end

function CreateInteractiveEnvironment(f)

    function NoTimePhrase()
        return { { 's01c02_lio_0004_decoration_common_1' }, { 's01c02_lio_0004_decoration_common_2' } }
    end

    function HurryUpPhrase()
        return
        {
            { 's01c02_lio_0003_decoration_common_0' },
            { 's01c02_lio_0003_decoration_common_1' },
            { 's01c02_lio_0003_decoration_common_2' }
        }
    end

    function HurryUpSherlockCommon()
        return CharacterSpeech(f, 'Sherlock', HurryUpPhrase(), RestrictionHurryUp())
    end

    function NoTimeSherlockCommon(...)
        return CharacterSpeech(f, 'Sherlock', NoTimePhrase(), ...)
    end

    function SherlockNotCompleteHurryUp(objectName, phrases)
        return SherlockWalkToObjectAndSpeech(f, objectName, phrases, RestrictionHurryUpNotCompleted())
    end

    function SherlockBeforeHurryUpWithPoint(point, phrases)
        return SherlockWalkAndSpeech(f, point, phrases, RestrictionHurryUpNotCompleted())
    end

    function SherlockBeforeHurryUpAndCommonNeedHelp(objectName, phrases)
        return
        {
            SherlockWalkToObjectAndSpeech(f, objectName, phrases, RestrictionHurryUpNotCompleted()),
            SherlockCommonBabbidgeNeedHelpTurnOffAndSave()
        }
    end

    function CommonInteractive(name, phrases)
        return f.InteractiveObject(name, SherlockBeforeHurryUpAndCommonNeedHelp(name, phrases))
    end

    function CommonInteractiveWithPoint(name, point, phrases)
        return f.InteractiveObject(name, {
            SherlockWalkAndSpeech(f, point, phrases, RestrictionHurryUpNotCompleted()),
            SherlockCommonBabbidgeNeedHelpTurnOffAndSave()
        })
    end

    function SherlockCommonBabbidgeNeedHelpTurnOffAndSave()
        return NoTimeSherlockCommon(RestrictionNeedHelpTurnOffAndSave())
    end

    function RestrictionBeforeHurryUp()
        return f.InvestigationRestriction(12, '<')
    end

    function RestrictionHurryUp()
        return f.InvestigationRestriction(12, '=')
    end

    function RestrictionHurryUpNotCompleted()
        return f.InvestigationRestriction(12, '<=')
    end

    function RestrictionHurryUpCompleted()
        return f.InvestigationRestriction(12, '>')
    end

    function RestrictionNeedHelpTurnOffAndSave()
        return UnionAny(f, f.InvestigationRestriction(13, '='), f.InvestigationRestriction(14, '='))
    end

    return f.InteractiveEnvironment(
    {
        CreateInteractiveLocation(f, '0000_SherlockApartment',
        {
            f.InteractiveObject('BabbidgeIso',
            {
                SherlockWalkToObjectAndSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0000_babbidge_0' } }),
                SherlockWalkToObjectAndSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0000_babbidge_1' },
                      { 's01c02_lio_0000_babbidge_2' },
                      { 's01c02_lio_0000_babbidge_3' },
                      { 's01c02_lio_0000_babbidge_10', 's01c02_lio_0000_babbidge_11' } },
                    f.InvestigationRestriction(1, '=')),
                SherlockWalkToObjectAndSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0000_babbidge_4' },
                      { 's01c02_lio_0000_babbidge_5' },
                      { 's01c02_lio_0000_babbidge_6' } },
                    f.InvestigationRestriction(2, '=')),
                SherlockWalkToObjectAndSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0000_babbidge_7' },
                      { 's01c02_lio_0000_babbidge_8' },
                      { 's01c02_lio_0000_babbidge_9' } },
                    f.InvestigationRestriction(15, '>')),
                CharacterSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0000_babbidge_phrase_0' },
                      { 's01c02_lio_0000_babbidge_phrase_1' },
                      { 's01c02_lio_0000_babbidge_phrase_2' },
                      { 's01c02_lio_0000_babbidge_phrase_3' } },
                      {'Babbidge'},
                    f.InvestigationRestriction(1, '=')),
                CharacterSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0000_babbidge_phrase_4' },
                      { 's01c02_lio_0000_babbidge_phrase_5' },
                      { 's01c02_lio_0000_babbidge_phrase_6' } },
                      {'Babbidge'},
                    f.InvestigationRestriction(2, '=')),
                CharacterSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0000_babbidge_phrase_7' },
                      { 's01c02_lio_0000_babbidge_phrase_8' },
                      { 's01c02_lio_0000_babbidge_phrase_9' } },
                      {'Babbidge'},
                    f.InvestigationRestriction(15, '>'))
            }),
            f.InteractiveObject('CeilingDrop',
            {
                SherlockWalkAndSpeech(f, 'io_ceiling_drop_point',
                    { { 's01c02_lio_0000_ceiling_drop_0' } },
                    f.InvestigationRestriction(1, '=')),
                SherlockWalkAndSpeech(f, 'io_ceiling_drop_point',
                    { { 's01c02_lio_0000_ceiling_drop_1' },
                      { 's01c02_lio_0000_ceiling_drop_2' },
                      { 's01c02_lio_0000_ceiling_drop_3' },
                      { 's01c02_lio_0000_ceiling_drop_4' } },
                    f.InvestigationRestriction(2, '<'))
            }),
            f.InteractiveObject('Table',
                {
                    SherlockWalkAndSpeech(f, 'io_decoration_desk_1_point',
                        { { 's01c02_lio_0000_decoration_desk_1_0' },
                          { 's01c02_lio_0000_decoration_desk_1_1' },
                          { 's01c02_lio_0000_decoration_desk_1_2' } })
                }),
            f.InteractiveObject('Bed',
                {
                    SherlockWalkAndSpeech(f, 'io_decoration_bed_point',
                        { { 's01c02_lio_0000_decoration_bed_0' },
                          { 's01c02_lio_0000_decoration_bed_1' } }),
                    SherlockWalkAndSpeech(f, 'io_decoration_bed_point',
                        { { 's01c02_lio_0000_decoration_bed_2' },
                          { 's01c02_lio_0000_decoration_bed_3' } },
                        f.InvestigationRestriction(2, '<')),
                    SherlockWalkAndSpeech(f, 'io_decoration_bed_point',
                        { { 's01c02_lio_0000_decoration_bed_4' } },
                        f.InvestigationRestriction(15, '>'))
                }),
            f.InteractiveObject('decoration-desk_2',
            {
                SherlockWalkAndSpeech(f, 'io_decoration_desk_2_point',
                    { { 's01c02_lio_0000_decoration_desk_2_0' } }),
                SherlockWalkAndSpeech(f, 'io_decoration_desk_2_point',
                    { { 's01c02_lio_0000_decoration_desk_2_1' },
                      { 's01c02_lio_0000_decoration_desk_2_2' } },
                    f.InvestigationRestriction(2, '<'))
            }),
            f.InteractiveObject('decoration-portrait',
            {
                SherlockWalkAndSpeech(f, 'io_fireplace_point',
                    { { 's01c02_lio_0000_decoration_portrait_0' },
                      { 's01c02_lio_0000_decoration_portrait_1' } })
            }),
            f.InteractiveObject('Fireplace',
            {
                SherlockWalkAndSpeech(f, 'io_fireplace_point',
                    { { 's01c02_lio_0000_place_fire_0' },
                      { 's01c02_lio_0000_place_fire_1' },
                      { 's01c02_lio_0000_place_fire_2' },
                      { 's01c02_lio_0000_place_fire_3' },
                      { 's01c02_lio_0000_place_fire_4' } })
            }),
            f.InteractiveObject('decoration-firewood',
            {
                SherlockWalkAndSpeech(f, 'io_firewood_point',
                    { { 's01c02_lio_0000_place_wood_0' },
                      { 's01c02_lio_0000_place_wood_1' },
                      { 's01c02_lio_0000_place_wood_2' } })
            }),
            f.InteractiveObject('Door',
            {
                SherlockWalkAndSpeech(f, 'io_door_point',
                    { { 's01c02_lio_0000_door_0' },
                      { 's01c02_lio_0000_door_1' } }),
                SherlockWalkAndSpeech(f, 'io_door_point',
                    { { 's01c02_lio_0000_door_2' },
                      { 's01c02_lio_0000_door_3' },
                      { 's01c02_lio_0000_door_4' } },
                    f.InvestigationRestriction(2, '='))
            }),
            CreateInteractiveObjects(f,
                {
                    'decoration-vase',
                    'decoration-vase_3'
                },
                CreateSameActions(f, {
                    'io_decoration_vase_point',
                    'io_decoration_vase_point_3'
                }, SherlockWalkAndSpeech,
                    {{'s01c02_lio_0000_vase_0'},
                     {'s01c02_lio_0000_vase_1'},
                     {'s01c02_lio_0000_vase_2'},
                     {'s01c02_lio_0000_vase_3'}})
            ),
            f.InteractiveObject('decoration-vase_2',
            {
                SherlockWalkToObjectAndSpeech(f, 'decoration-vase_2',
                    { { 's01c02_lio_0000_vase_0' },
                      { 's01c02_lio_0000_vase_1' },
                      { 's01c02_lio_0000_vase_2' },
                      { 's01c02_lio_0000_vase_3' } })
            }),
            f.InteractiveObject('Clock',
            {
                SherlockWalkAndSpeech(f, 'io_clock_point',
                    { { 's01c02_lio_0000_clock_0' },
                      { 's01c02_lio_0000_clock_1' },
                      { 's01c02_lio_0000_clock_2' } })
            }),
            f.InteractiveObject('Cage',
            {
                SherlockWalkAndSpeech(f, 'io_bird_cage_point',
                    { { 's01c02_lio_0000_bird_cage_0' },
                      { 's01c02_lio_0000_bird_cage_1' },
                      { 's01c02_lio_0000_bird_cage_2' } })
            }),
            f.InteractiveObject('decoration-cabinet_1',
            {
                SherlockWalkAndSpeech(f, 'io_decoration_cabinet_1_point',
                    { { 's01c02_lio_0000_cabinet_1_0' },
                      { 's01c02_lio_0000_cabinet_1_1' },
                      { 's01c02_lio_0000_cabinet_1_2' },
                      { 's01c02_lio_0000_cabinet_1_3' },
                      { 's01c02_lio_0000_cabinet_1_4' },
                      { 's01c02_lio_0000_cabinet_1_5' } })
            }),
            f.InteractiveObject('decoration-window',
            {
                SherlockWalkToObjectAndSpeech(f, 'decoration-window',
                    { { 's01c02_lio_0000_decoration_window_0' },
                      { 's01c02_lio_0000_decoration_window_1' },
                      { 's01c02_lio_0000_decoration_window_2' },
                      { 's01c02_lio_0000_decoration_window_3' } })
            }),
            f.InteractiveObject('decoration-chest_of_drawers',
            {
                SherlockWalkAndSpeech(f, 'io_decoration_mirror_point',
                    { { 's01c02_lio_0000_decoration_chest_of_drawers_0' },
                      { 's01c02_lio_0000_decoration_chest_of_drawers_1' },
                      { 's01c02_lio_0000_decoration_chest_of_drawers_2' } })
            }),
            f.InteractiveObject('decoration-mirror',
            {
                SherlockWalkAndSpeech(f, 'io_decoration_mirror_point',
                    { { 's01c02_lio_0000_decoration_mirror_0' },
                      { 's01c02_lio_0000_decoration_mirror_1' },
                      { 's01c02_lio_0000_decoration_mirror_2' } })
            }),
            f.InteractiveObject('decoration-cabinet_2',
            {
                SherlockWalkAndSpeech(f, 'io_decoration_cabinet_2_point',
                    { { 's01c02_lio_0000_decoration_cabinet_2_0' },
                      { 's01c02_lio_0000_decoration_cabinet_2_1' },
                      { 's01c02_lio_0000_decoration_cabinet_2_2' } })
            }),
            f.InteractiveObject('decoration-box',
            {
                SherlockWalkAndSpeech(f, 'io_decoration_box_point',
                    { { 's01c02_lio_0000_decoration_box_0' },
                      { 's01c02_lio_0000_decoration_box_1' },
                      { 's01c02_lio_0000_decoration_box_2' },
                      { 's01c02_lio_0000_decoration_box_3' } })
            }),
            f.InteractiveObject('decoration-sofa',
            {
                SherlockWalkAndSpeech(f, 'io_decoration_sofa_point',
                    { { 's01c02_lio_0000_decoration_sofa_0' },
                      { 's01c02_lio_0000_decoration_sofa_1' },
                      { 's01c02_lio_0000_decoration_sofa_2' },
                      { 's01c02_lio_0000_decoration_sofa_3' } })
            }),
            f.InteractiveObject('decoration-bar_chair',
            {
                SherlockWalkAndSpeech(f, 'io_decoration_bar_chair_point',
                    { { 's01c02_lio_0000_decoration_bar_chair_0' },
                      { 's01c02_lio_0000_decoration_bar_chair_1_0', 's01c02_lio_0000_decoration_bar_chair_1_1' },
                      { 's01c02_lio_0000_decoration_bar_chair_2' },
                      { 's01c02_lio_0000_decoration_bar_chair_3' } })
            }),
            f.InteractiveObject('decoration-kitchen',
            {
                SherlockWalkAndSpeech(f, 'io_decoration_kitchen_point',
                    { { 's01c02_lio_0000_decoration_kitchen_0' },
                      { 's01c02_lio_0000_decoration_kitchen_1_0', 's01c02_lio_0000_decoration_kitchen_1_1' },
                      { 's01c02_lio_0000_decoration_kitchen_2_0', 's01c02_lio_0000_decoration_kitchen_2_1' },
                      { 's01c02_lio_0000_decoration_kitchen_3' }}),
                SherlockWalkAndSpeech(f, 'io_decoration_kitchen_point',
                    { { 's01c02_lio_0000_decoration_kitchen_4_0', 's01c02_lio_0000_decoration_kitchen_4_1' }},
                    f.InvestigationRestriction(15, '>'))
            }),
            CreateInteractiveObjects(f,
            {
                'decoration-chair_1',
                'decoration-chair_2',
                'decoration-chair_3'
            },
            CreateSameActions(f, {
                'io_decoration_chair_1_point',
                'io_decoration_chair_2_point',
                'io_decoration_chair_3_point'
            }, SherlockWalkAndSpeech,
                {{'s01c02_lio_0000_decoration_chair_0'},
                 {'s01c02_lio_0000_decoration_chair_1'},
                 {'s01c02_lio_0000_decoration_chair_2'}})
            ),
            f.InteractiveObject('decoration-armchair',
            {
                SherlockWalkAndSpeech(f, 'io_decoration_armchair_point',
                    { { 's01c02_lio_0000_decoration_armchair_0' },
                      { 's01c02_lio_0000_decoration_armchair_1_0', 's01c02_lio_0000_decoration_armchair_1_1' },
                      { 's01c02_lio_0000_decoration_armchair_2_0', 's01c02_lio_0000_decoration_armchair_2_1' },
                      { 's01c02_lio_0000_decoration_armchair_3' },
                      { 's01c02_lio_0000_decoration_armchair_4' }})
            }),
            f.InteractiveObject('decoration-nightstand',
            {
                SherlockWalkAndSpeech(f, 'io_decoration_nightstand_point',
                    { { 's01c02_lio_0000_decoration_nightstand_0' },
                      { 's01c02_lio_0000_decoration_nightstand_1_0', 's01c02_lio_0000_decoration_nightstand_1_1' },
                      { 's01c02_lio_0000_decoration_nightstand_2' },
                      { 's01c02_lio_0000_decoration_nightstand_3' }})
            }),
            f.InteractiveObject('decoration-shield',
            {
                SherlockWalkAndSpeech(f, 'io_decoration_shield_point',
                    {{'s01c02_lio_0000_decoration_shield_0'},
                     {'s01c02_lio_0000_decoration_shield_1'},
                     {'s01c02_lio_0000_decoration_shield_2'},
                     {'s01c02_lio_0000_decoration_shield_3'}})
            }),
            CreateInteractiveObjects(f,
            {
                'decoration-picture_1',
                'decoration-picture_2',
                'decoration-picture_3'
            },
            CreateSameActions(f, {
                'io_decoration_picture_point_1',
                'io_decoration_picture_point_2',
                'io_decoration_picture_point_3'
            }, SherlockWalkAndSpeech,
                {{'s01c02_lio_0000_decoration_picture_0_0', 's01c02_lio_0000_decoration_picture_0_1'},
                 {'s01c02_lio_0000_decoration_picture_1'},
                 {'s01c02_lio_0000_decoration_picture_2_0', 's01c02_lio_0000_decoration_picture_2_1'},
                 {'s01c02_lio_0000_decoration_picture_3'}})
            ),
            f.InteractiveObject('MrsPriceIso',
            {
                SherlockSpeech(f,
                    { { 's01c02_lio_0000_price_0' },
                      { 's01c02_lio_0000_price_1' },
                      { 's01c02_lio_0000_price_2' } },
                      f.InvestigationRestriction(15, '>')),
                CharacterSpeech(f, 'MrsPrice',
                    { { 's01c02_lio_0000_price_phrase_0' },
                      { 's01c02_lio_0000_price_phrase_1' },
                      { 's01c02_lio_0000_price_phrase_2' } },
                      {'MrsPrice'},
                      f.InvestigationRestriction(15, '>'))
            }),
            f.InteractiveObject('SwiftyIso',
            {
                SherlockSpeech(f,
                    { { 's01c02_lio_0000_swifty_0' },
                      { 's01c02_lio_0000_swifty_1' },
                      { 's01c02_lio_0000_swifty_2' } },
                      f.InvestigationRestriction(15, '>'))
            }),
            f.InteractiveObject('SherlockIso',
            {
                SherlockSpeech(f,
                    {{'s01c02_lio_sherlock_common_phrase_1'},
                    {'s01c02_lio_0000_sherlock_0'},
                    {'s01c02_lio_0000_sherlock_1'},
                    {'s01c02_lio_0000_sherlock_2'}}, true),
                SherlockSpeech(f,
                    {{'s01c02_lio_0000_sherlock_3'},
                    {'s01c02_lio_0000_sherlock_4'}},
                    true,
                    f.InvestigationRestriction(1, '=')),
                SherlockSpeech(f,
                    {{'s01c02_lio_0000_sherlock_5'},
                    {'s01c02_lio_0000_sherlock_6'}},
                    true,
                    f.InvestigationRestriction(2, '=')),
                SherlockSpeech(f,
                    {{'s01c02_lio_0000_sherlock_7'},
                    {'s01c02_lio_0000_sherlock_8'},
                    {'s01c02_lio_0000_sherlock_9'}},
                    true,
                    f.InvestigationRestriction(15, '>'))
            })
        });

        CreateInteractiveLocation(f, '0003_PriceApartment',
        {
            f.InteractiveObject('MrsPriceIso',
            {
                SherlockSpeech(f,
                    { { 's01c02_lio_0003_price_0' },
                      { 's01c02_lio_0003_price_1' },
                      { 's01c02_lio_0003_price_2' } }),
                SherlockWalkToObjectAndSpeech(f, 'MrsPrice',
                    { { 's01c02_lio_0003_price_3' } },
                    f.InvestigationRestriction(6, '=')),
                SherlockSpeech(f,
                    { { 's01c02_lio_0003_price_4' } },
                    f.InvestigationRestriction(6, '=')),
                SherlockSpeech(f,
                    { { 's01c02_lio_0003_price_5_0', 's01c02_lio_0003_price_5_1' },
                      { 's01c02_lio_0003_price_6' },
                      { 's01c02_lio_0003_price_7' }, },
                    f.InvestigationRestriction(12, '=')),
                CharacterSpeech(f, 'MrsPrice',
                    { { 's01c02_lio_0003_price_phrase_0' },
                      { 's01c02_lio_0003_price_phrase_1' } },
                      {'MrsPrice'}),
                CharacterSpeech(f, 'MrsPrice',
                    { { 's01c02_lio_0003_price_phrase_2' },
                      { 's01c02_lio_0003_price_phrase_3' },
                      { 's01c02_lio_0003_price_phrase_4' } },
                      {'MrsPrice'},
                      f.InvestigationRestriction(6, '=')),
                CharacterSpeech(f, 'MrsPrice',
                    { { 's01c02_lio_0003_price_phrase_5' },
                      { 's01c02_lio_0003_price_phrase_6' },
                      { 's01c02_lio_0003_price_phrase_7' } },
                      {'MrsPrice'},
                      f.InvestigationRestriction(7, '=')),
                CharacterSpeech(f, 'MrsPrice',
                    { { 's01c02_lio_0003_price_phrase_8' },
                      { 's01c02_lio_0003_price_phrase_9' },
                      { 's01c02_lio_0003_price_phrase_10' } },
                      {'MrsPrice'},
                    UnionAll(f, f.InvestigationRestriction(7, '>'),
                        f.InvestigationRestriction(11, '<='))),
                CharacterSpeech(f, 'MrsPrice',
                    { { 's01c02_lio_0003_price_phrase_11' },
                      { 's01c02_lio_0003_price_phrase_12' },
                      { 's01c02_lio_0003_price_phrase_13' } },
                      {'MrsPrice'},
                      f.InvestigationRestriction(12, '=')),
            }),
            f.InteractiveObject('PricesCat',
            {
                SherlockWalkAndSpeech(f, 'io_arround_sofa_point',
                    { { 's01c02_lio_0003_cat_0' },
                      { 's01c02_lio_0003_cat_1' },
                      { 's01c02_lio_0003_cat_2' },
                      { 's01c02_lio_0003_cat_3_0', 's01c02_lio_0003_cat_3_1' } },
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon(),
                CharacterSpeech(f, 'MrsPrice',
                    { { 's01c02_lio_0003_cat_price_phase_0' },
                      { 's01c02_lio_0003_cat_price_phase_1' },
                      { 's01c02_lio_0003_cat_price_phase_2' },
                      { 's01c02_lio_0003_cat_price_phase_3' } },
                      {'MrsPrice'},
                    RestrictionBeforeHurryUp()),
                CharacterSpeech(f, 'MrsPrice',
                    { { 's01c02_lio_0003_cat_price_phase_4' },
                      { 's01c02_lio_0003_cat_price_phase_5' } },
                      {'MrsPrice'},
                    RestrictionHurryUp())
            }),
            f.InteractiveObject('decoration-passage',
            {
                SherlockWalkAndSpeech(f, 'io_passage_point',
                    { { 's01c02_lio_0003_passage_0' },
                      { 's01c02_lio_0003_passage_1' },
                      { 's01c02_lio_0003_passage_2' } },
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon(),
                CharacterSpeech(f, 'MrsPrice',
                    { { 's01c02_lio_0003_passage_price_phrase_0' },
                      { 's01c02_lio_0003_passage_price_phrase_1' } },
                      {'MrsPrice'},
                    RestrictionBeforeHurryUp())
            }),
            f.InteractiveObject('decoration-cabinet_2',
            {
                SherlockWalkAndSpeech(f, 'io_arround_cabinet',
                    { { 's01c02_lio_0003_cabinet_2_0' },
                      { 's01c02_lio_0003_cabinet_2_1' },
                      { 's01c02_lio_0003_cabinet_2_2' } },
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon()
            }),
            f.InteractiveObject('ExplosionLeftWall',
            {
                SherlockWalkAndSpeech(f, 'io_arround_cabinet',
                    { { 's01c02_lio_0003_left_pictures_0_0', 's01c02_lio_0003_left_pictures_0_1' },
                      { 's01c02_lio_0003_left_pictures_2' } },
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon()
            }),
            f.InteractiveObject('decoration-rockingChair',
            {
                SherlockWalkToObjectAndSpeech(f, 'decoration-rockingChair',
                    { { 's01c02_lio_0003_decoration_rocking_chair_0' },
                      { 's01c02_lio_0003_decoration_rocking_chair_1' },
                      { 's01c02_lio_0003_decoration_rocking_chair_2_0', 's01c02_lio_0003_decoration_rocking_chair_2_1' } },
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon()
            }),
            f.InteractiveObject('decoration-desk',
            {
                SherlockWalkToObjectAndSpeech(f, 'decoration-desk',
                    { { 's01c02_lio_0003_decoration_desk_0' },
                      { 's01c02_lio_0003_decoration_desk_1' },
                      { 's01c02_lio_0003_decoration_desk_2' } },
                    f.InvestigationRestriction(6, '=')),
                SherlockWalkToObjectAndSpeech(f, 'decoration-desk',
                    { { 's01c02_lio_0003_decoration_desk_3' },
                      { 's01c02_lio_0003_decoration_desk_4' },
                      { 's01c02_lio_0003_decoration_desk_5' } },
                    f.InvestigationRestriction(6, '>'),
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon()
            }),
            f.InteractiveObject('decoration-chair',
            {
                SherlockWalkToObjectAndSpeech(f, 'decoration-chair',
                    { { 's01c02_lio_0003_decoration_chair_0' },
                      { 's01c02_lio_0003_decoration_chair_1' },
                      { 's01c02_lio_0003_decoration_chair_2' } },
                    f.InvestigationRestriction(6, '=')),
                SherlockWalkToObjectAndSpeech(f, 'decoration-chair',
                    { { 's01c02_lio_0003_decoration_chair_3' },
                      { 's01c02_lio_0003_decoration_chair_4' },
                      { 's01c02_lio_0003_decoration_chair_5' } },
                    f.InvestigationRestriction(6, '>'),
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon()
            }),
            f.InteractiveObject('decoration-window',
            {
                SherlockWalkToObjectAndSpeech(f, 'decoration-window',
                    { { 's01c02_lio_0003_decoration_window_0' },
                      { 's01c02_lio_0003_decoration_window_1_0', 's01c02_lio_0003_decoration_window_1_1' } },
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon()
            }),
            f.InteractiveObject('ExplosionLeftWallBig',
            {
                SherlockWalkToObjectAndSpeech(f, 'ExplosionLeftWallBig',
                    { { 's01c02_lio_0003_mr_price_picture_0' },
                      { 's01c02_lio_0003_mr_price_picture_1' },
                      { 's01c02_lio_0003_mr_price_picture_2' } },
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon()
            }),
            f.InteractiveObject('Mirror',
            {
                SherlockWalkAndSpeech(f, 'io_front_of_mirror',
                    { { 's01c02_lio_0003_mirror_0' },
                      { 's01c02_lio_0003_mirror_1' },
                      { 's01c02_lio_0003_mirror_2' } },
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon()
            }),
            f.InteractiveObject('decoration-dresser',
            {
                SherlockWalkToObjectAndSpeech(f, 'decoration-dresser',
                    { { 's01c02_lio_0003_decoration_dresser_0' },
                      { 's01c02_lio_0003_decoration_dresser_1' },
                      { 's01c02_lio_0003_decoration_dresser_2' } },
                    RestrictionBeforeHurryUp()),
                SherlockWalkToObjectAndSpeech(f, 'decoration-dresser',
                    { { 's01c02_lio_0003_decoration_dresser_3' },
                      { 's01c02_lio_0003_decoration_dresser_4' },
                      { 's01c02_lio_0003_decoration_dresser_5' },
                      { 's01c02_lio_0003_decoration_dresser_6' } },
                    f.InvestigationRestriction(9, '=')),
                HurryUpSherlockCommon()
            }),
            f.InteractiveObject('Door',
            {
                SherlockWalkAndSpeech(f, 'io_door_point',
                    { { 's01c02_lio_0003_door_0' },
                      { 's01c02_lio_0003_door_1', 's01c02_lio_0003_door_2' } }),
                SherlockWalkAndSpeech(f, 'io_door_point',
                    { { 's01c02_lio_0003_door_3' },
                      { 's01c02_lio_0003_door_4' },
                      { 's01c02_lio_0003_door_5' } },
                    RestrictionBeforeHurryUp()),
                SherlockWalkAndSpeech(f, 'io_door_point',
                    { { 's01c02_lio_0003_door_6' },
                      { 's01c02_lio_0003_door_7' },
                      { 's01c02_lio_0003_door_8' } },
                    RestrictionHurryUp())
            }),
            f.InteractiveObject('decoration-sofa',
            {
                SherlockWalkAndSpeech(f, 'io_arround_sofa_point',
                    { { 's01c02_lio_0003_decoration_sofa_0' },
                      { 's01c02_lio_0003_decoration_sofa_1' },
                      { 's01c02_lio_0003_decoration_sofa_2' } },
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon()
            }),
            f.InteractiveObject('decoration-coffeeTable',
            {
                SherlockWalkToObjectAndSpeech(f, 'decoration-coffeeTable',
                    { { 's01c02_lio_0003_decoration_coffee_table_0' },
                      { 's01c02_lio_0003_decoration_coffee_table_1_0', 's01c02_lio_0003_decoration_coffee_table_1_1' },
                      { 's01c02_lio_0003_decoration_coffee_table_2' } },
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon()
            }),
            f.InteractiveObject('ExplosionRightWall',
            {
                SherlockWalkAndSpeech(f, 'io_arround_sofa_point',
                    { { 's01c02_lio_0003_right_pictures_0' },
                      { 's01c02_lio_0003_right_pictures_1' },
                      { 's01c02_lio_0003_right_pictures_2' } },
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon()
            }),
            f.InteractiveObject('decoration-vase',
            {
                SherlockWalkToObjectAndSpeech(f, 'decoration-vase',
                    { { 's01c02_lio_0003_decoration_vase_0' },
                      { 's01c02_lio_0003_decoration_vase_1' },
                      { 's01c02_lio_0003_decoration_vase_2' } },
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon()
            }),
            f.InteractiveObject('decoration-cabinet_1',
            {
                SherlockWalkAndSpeech(f, 'io_clother_cabinet_point',
                    { { 's01c02_lio_0003_decoration_cabinet_1_0' },
                      { 's01c02_lio_0003_decoration_cabinet_1_1' },
                      { 's01c02_lio_0003_decoration_cabinet_1_2' } },
                    RestrictionBeforeHurryUp()),
                HurryUpSherlockCommon()
            }),
            f.InteractiveObject('SherlockIso',
            {
                SherlockSpeech(f,
                    {{'s01c02_lio_sherlock_common_phrase_0'},
                    {'s01c02_lio_0003_sherlock_0'},
                    {'s01c02_lio_0003_sherlock_1'},
                    {'s01c02_lio_0003_sherlock_2'},
                    {'s01c02_lio_0003_sherlock_3', 's01c02_lio_0003_sherlock_4'}}, true),
                SherlockSpeech(f,
                    {{'s01c02_lio_0003_sherlock_5'},
                    {'s01c02_lio_0003_sherlock_6'}},
                    true,
                    f.InvestigationRestriction(12, '=')),
                SherlockSpeech(f,
                    {{'s01c02_lio_0003_sherlock_7'},
                    {'s01c02_lio_0003_sherlock_8'}},
                    true,
                    UnionAll(f,
                        f.InvestigationRestriction(7, '>'),
                        f.InvestigationRestriction(11, '<=')))
            })
        });

        CreateInteractiveLocation(f, '0004_BabbidgeApartment',
        {
            f.InteractiveObject('BabbidgeIso',
            {
                SherlockWalkToObjectAndSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0004_babbidge_0_0',
                        's01c02_lio_0004_babbidge_0_1' },
                      { 's01c02_lio_0004_babbidge_1' },
                      { 's01c02_lio_0004_babbidge_2' },
                      { 's01c02_lio_0004_babbidge_3' },
                      { 's01c02_lio_0004_babbidge_4' } },
                    UnionAny(f,
                        f.InvestigationRestriction(13, '<'),
                        f.InvestigationRestriction(14, '>'))),
                SherlockWalkToObjectAndSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0004_babbidge_5' },
                      { 's01c02_lio_0004_babbidge_6' },
                      { 's01c02_lio_0004_babbidge_7' } },
                    f.InvestigationRestriction(3, '=')),
                SherlockWalkToObjectAndSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0004_babbidge_8_0',
                        's01c02_lio_0004_babbidge_8_1' } },
                    f.InvestigationRestriction(4, '=')),
                CharacterSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0004_babbidge_phrase_0' },
                      { 's01c02_lio_0004_babbidge_phrase_1' },
                      { 's01c02_lio_0004_babbidge_phrase_2' } },
                      {'Babbidge'},
                    UnionAny(f,
                        f.InvestigationRestriction(13, '<'),
                        f.InvestigationRestriction(14, '>'))),
                CharacterSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0004_babbidge_phrase_3' },
                      { 's01c02_lio_0004_babbidge_phrase_4' } },
                      {'Babbidge'},
                    f.InvestigationRestriction(3, '>')),
                CharacterSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0004_babbidge_phrase_5' },
                      { 's01c02_lio_0004_babbidge_phrase_6' },
                      { 's01c02_lio_0004_babbidge_phrase_7' },
                      { 's01c02_lio_0004_babbidge_phrase_8' } },
                      {'Babbidge'},
                    UnionAny(f, f.InvestigationRestriction(13, '='),
                            f.InvestigationRestriction(14, '=')))
            }),
            f.InteractiveObject('MrsPriceIso',
            {
                CharacterSpeech(f, 'Sherlock',
                    { { 's01c02_lio_0004_price_0' },
                      { 's01c02_lio_0004_price_1' } },
                    UnionAny(f, f.InvestigationRestriction(13, '='),
                            f.InvestigationRestriction(14, '='))),
                CharacterSpeech(f, 'MrsPrice',
                    { { 's01c02_lio_0004_price_phrase_0' },
                      { 's01c02_lio_0004_price_phrase_1' },
                      { 's01c02_lio_0004_price_phrase_2' } },
                      {'MrsPrice'},
                    UnionAny(f, f.InvestigationRestriction(13, '='),
                            f.InvestigationRestriction(14, '=')))
            }),
            f.InteractiveObject('SwiftyIso',
            {
                SherlockWalkToObjectAndSpeech(f, 'Swifty',
                    { { 's01c02_lio_0004_swifty_0' },
                      { 's01c02_lio_0004_swifty_1' },
                      { 's01c02_lio_0004_swifty_2' } },
                    UnionAny(f,
                        f.InvestigationRestriction(13, '<'),
                        f.InvestigationRestriction(14, '>'))),
                SherlockWalkToObjectAndSpeech(f, 'Swifty',
                    { { 's01c02_lio_0004_swifty_3' },
                      { 's01c02_lio_0004_swifty_4' },
                      { 's01c02_lio_0004_swifty_5' } },
                    f.InvestigationRestriction(14, '='))
            }),
            CreateSameInteractiveObjectsByName(f,
                {
                    'decoration-carton_1',
                    'decoration-carton_2',
                }, function(f, name)
                    return
                    {
                        SherlockBeforeHurryUpWithPoint('io_blackboard_point',
                            { { 's01c02_lio_0004_boxes_0' },
                              { 's01c02_lio_0004_boxes_1' },
                              { 's01c02_lio_0004_boxes_2' } }),
                        CharacterSpeech(f, 'Sherlock', NoTimePhrase(), RestrictionHurryUpCompleted())
                    }
            end
            ),
            CreateSameInteractiveObjectsByName(f,
                {
                    'decoration-carton_3',
                    'decoration-carton_4'
                }, function(f, name)
                    return
                    {
                        SherlockBeforeHurryUpWithPoint('io_around_cabinet_chaos_point',
                            { { 's01c02_lio_0004_boxes_0' },
                              { 's01c02_lio_0004_boxes_1' },
                              { 's01c02_lio_0004_boxes_2' } }),
                        CharacterSpeech(f, 'Sherlock', NoTimePhrase(), RestrictionHurryUpCompleted())
                    }
            end
            ),
            CommonInteractive('decoration-holeFloor_2',
                { { 's01c02_lio_0004_decoration_holeFloor_2_0', 's01c02_lio_0004_decoration_holeFloor_2_0_1' },
                  { 's01c02_lio_0004_decoration_holeFloor_2_1' },
                  { 's01c02_lio_0004_decoration_holeFloor_2_2' } }
            ),
            CommonInteractiveWithPoint('decoration-debris', 'io_debris_point',
                { { 's01c02_lio_0004_decoration_debris_0' },
                  { 's01c02_lio_0004_decoration_debris_1' },
                  { 's01c02_lio_0004_decoration_debris_2' } }
            ),
            CommonInteractiveWithPoint('decoration-blackboard', 'io_blackboard_point',
                { { 's01c02_lio_0004_decoration_blackboard_0' },
                  { 's01c02_lio_0004_decoration_blackboard_1' },
                  { 's01c02_lio_0004_decoration_blackboard_2' } }
            ),
            f.InteractiveObject('Door',
            {
                SherlockWalkAndSpeech(f, 'io_door_point',
                    { { 's01c02_lio_0004_Door_0' },
                      { 's01c02_lio_0004_Door_1' },
                      { 's01c02_lio_0004_Door_2' } },
                    f.InvestigationRestriction(12, '<')),
                SherlockWalkAndSpeech(f, 'io_door_point',
                    { { 's01c02_lio_0004_Door_3' },
                      { 's01c02_lio_0004_Door_4' },
                      { 's01c02_lio_0004_Door_5' } },
                    f.InvestigationRestriction(3, '=')),
                SherlockWalkAndSpeech(f, 'io_door_point',
                    { { 's01c02_lio_0004_Door_6' },
                      { 's01c02_lio_0004_Door_7_0', 's01c02_lio_0004_Door_7_1' } },
                    f.InvestigationRestriction(5, '=')),
                CharacterSpeech(f, 'Sherlock',
                    { { 's01c02_lio_0004_Door_8' },
                      { 's01c02_lio_0004_Door_9' } },
                    RestrictionNeedHelpTurnOffAndSave()),
                CharacterSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0004_Door_babbidge_phrase_9' },
                      { 's01c02_lio_0004_Door_babbidge_phrase_10' } },
                      {'Babbidge'},
                    f.InvestigationRestriction(3, '=')),
                CharacterSpeech(f, 'Babbidge',
                    { { 's01c02_lio_0004_Door_babbidge_phrase_11' },
                      { 's01c02_lio_0004_Door_babbidge_phrase_12' } },
                      {'Babbidge'},
                    RestrictionNeedHelpTurnOffAndSave())
            }),
            f.InteractiveObject('decoration-machine_3',
            {
                SherlockWalkToObjectAndSpeech(f, 'decoration-machine_3',
                    { { 's01c02_lio_0004_decoration_machine_3_0' },
                      { 's01c02_lio_0004_decoration_machine_3_1' },
                      { 's01c02_lio_0004_decoration_machine_3_2' } },
                    f.InvestigationRestriction(12, '<')),
                SherlockWalkToObjectAndSpeech(f, 'decoration-machine_3',
                    { { 's01c02_lio_0004_decoration_machine_3_3' },
                      { 's01c02_lio_0004_decoration_machine_3_4' },
                      { 's01c02_lio_0004_decoration_machine_3_5' } },
                    f.InvestigationRestriction(4, '=')),
                CharacterSpeech(f, 'Sherlock',
                    { { 's01c02_lio_0004_decoration_machine_3_6' },
                      { 's01c02_lio_0004_decoration_machine_3_7' },
                      { 's01c02_lio_0004_decoration_machine_3_8' },
                      { 's01c02_lio_0004_decoration_machine_3_9' } },
                    f.InvestigationRestriction(13, '=')),
                CharacterSpeech(f, 'Sherlock',
                    { { 's01c02_lio_0004_decoration_machine_3_10' },
                      { 's01c02_lio_0004_decoration_machine_3_11' },
                      { 's01c02_lio_0004_decoration_machine_3_12' } },
                    f.InvestigationRestriction(14, '=')),
            }),
            CommonInteractiveWithPoint('decoration-picture_3', 'io_picture_3_point',
                { { 's01c02_lio_0004_decoration_picture_3_0' },
                  { 's01c02_lio_0004_decoration_picture_3_1' },
                  { 's01c02_lio_0004_decoration_picture_3_2' } }
            ),
            f.InteractiveObject('decoration-cabinet_1',
            {
                SherlockNotCompleteHurryUp('decoration-cabinet_1',
                    { { 's01c02_lio_0004_decoration_cabinet_1_0' },
                      { 's01c02_lio_0004_decoration_cabinet_1_1' },
                      { 's01c02_lio_0004_decoration_cabinet_1_2' } }
                ),
                CharacterSpeech(f, 'Sherlock',
                    { { 's01c02_lio_0004_decoration_cabinet_1_3' },
                      { 's01c02_lio_0004_decoration_cabinet_1_4' },
                      { 's01c02_lio_0004_decoration_cabinet_1_5' } },
                    f.InvestigationRestriction(13, '=')),
                CharacterSpeech(f, 'Sherlock',
                    { { 's01c02_lio_0004_decoration_cabinet_1_6_0', 's01c02_lio_0004_decoration_cabinet_1_6_1' },
                      { 's01c02_lio_0004_decoration_cabinet_1_7_0', 's01c02_lio_0004_decoration_cabinet_1_7_1' },
                      { 's01c02_lio_0004_decoration_cabinet_1_8' } },
                    f.InvestigationRestriction(14, '=')),
            }),
            f.InteractiveObject('decoration-machine_1',
            {
                SherlockNotCompleteHurryUp('decoration-machine_1',
                    { { 's01c02_lio_0004_decoration_machine_1_0' },
                      { 's01c02_lio_0004_decoration_machine_1_1' },
                      { 's01c02_lio_0004_decoration_machine_1_2_0', 's01c02_lio_0004_decoration_machine_1_2_1' } }
                ),
                CharacterSpeech(f, 'Sherlock',
                    { { 's01c02_lio_0004_decoration_machine_1_3' },
                      { 's01c02_lio_0004_decoration_machine_1_4' },
                      { 's01c02_lio_0004_decoration_machine_1_5' } },
                    f.InvestigationRestriction(13, '=')),
                CharacterSpeech(f, 'Sherlock',
                    { { 's01c02_lio_0004_decoration_machine_1_6' },
                      { 's01c02_lio_0004_decoration_machine_1_7' },
                      { 's01c02_lio_0004_decoration_machine_1_8' } },
                    f.InvestigationRestriction(14, '=')),
            }),
            f.InteractiveObject('SherlockIso',
            {
                SherlockSpeech(f,
                    {{'s01c02_lio_sherlock_common_phrase_0'},
                    {'s01c02_lio_sherlock_common_phrase_1'},
                    {'s01c02_lio_0004_sherlock_0'},
                    {'s01c02_lio_0004_sherlock_1'}},
                    true,
                    UnionAny(f,
                        f.InvestigationRestriction(13, '<'),
                        f.InvestigationRestriction(14, '>'))),
                SherlockSpeech(f,
                    {{'s01c02_lio_0004_sherlock_2'},
                    {'s01c02_lio_0004_sherlock_3'},
                    {'s01c02_lio_0004_sherlock_4'}},
                    true,
                    UnionAny(f,
                        f.InvestigationRestriction(13, '='),
                        f.InvestigationRestriction(14, '='))),
            }),
            CreateSameInteractiveObjectsByName(f,
                {
                    'decoration-picture_1',
                    'decoration-picture_2'
                },
                function(f, name)
                    return {
                        SherlockWalkAndSpeech(f, 'io_arround_desk_point',
                        { { 's01c02_lio_0004_decoration_picture_1_2_0' },
                          { 's01c02_lio_0004_decoration_picture_1_2_1' },
                          { 's01c02_lio_0004_decoration_picture_1_2_2' } },
                        RestrictionHurryUpNotCompleted()),
                        SherlockCommonBabbidgeNeedHelpTurnOffAndSave()
                    }
                end
            ),
            CommonInteractive('decoration-desk',
                { { 's01c02_lio_0004_decoration_desk_0' },
                  { 's01c02_lio_0004_decoration_desk_1' },
                  { 's01c02_lio_0004_decoration_desk_2_0', 's01c02_lio_0004_decoration_desk_2_1' } }
            ),
            CommonInteractive('decoration-chair',
                { { 's01c02_lio_0004_decoration_chair_0' },
                  { 's01c02_lio_0004_decoration_chair_1' },
                  { 's01c02_lio_0004_decoration_chair_2' } }
            ),
            CommonInteractive('decoration-window',
                { { 's01c02_lio_0004_decoration_window_0' },
                  { 's01c02_lio_0004_decoration_window_1' },
                  { 's01c02_lio_0004_decoration_window_2' } }
            ),
            CommonInteractive('decoration-sofa',
                { { 's01c02_lio_0004_decoration_sofa_0' },
                  { 's01c02_lio_0004_decoration_sofa_1' },
                  { 's01c02_lio_0004_decoration_sofa_2_0', 's01c02_lio_0004_decoration_sofa_2_1' } }
            ),
            CommonInteractiveWithPoint('decoration-shelf', 'io_shelf_point',
                { { 's01c02_lio_0004_decoration_shelf_0' },
                  { 's01c02_lio_0004_decoration_shelf_1_0', 's01c02_lio_0004_decoration_shelf_1_1' } }
            ),
            CommonInteractiveWithPoint('decoration-cabinet_2', 'io_around_cabinet_chaos_point',
                { { 's01c02_lio_0004_decoration_cabinet_2_0_0', 's01c02_lio_0004_decoration_cabinet_2_0_1' },
                  { 's01c02_lio_0004_decoration_cabinet_2_1' },
                  { 's01c02_lio_0004_decoration_cabinet_2_2' } }
            ),
            CommonInteractiveWithPoint('decoration-stool', 'io_around_cabinet_chaos_point',
                { { 's01c02_lio_0004_decoration_stool_0' },
                  { 's01c02_lio_0004_decoration_stool_1' },
                  { 's01c02_lio_0004_decoration_stool_2' } }
            ),
            CreateSameInteractiveObjectsByName(f,
                {
                    'decoration-book_1',
                    'decoration-book_2',
                    'decoration-book_3'
                },
                function(f, name)
                    return {
                       SherlockWalkAndSpeech(f, 'io_around_cabinet_chaos_point',
                       { { 's01c02_lio_0004_decoration_books_0' },
                         { 's01c02_lio_0004_decoration_books_1' },
                         { 's01c02_lio_0004_decoration_books_2' } },
                       RestrictionHurryUpNotCompleted()),
                       SherlockCommonBabbidgeNeedHelpTurnOffAndSave()
                    }
                end
            ),
            CommonInteractive('decoration-holeFloor',
                { { 's01c02_lio_0004_decoration_holeFloor_0' },
                  { 's01c02_lio_0004_decoration_holeFloor_1' },
                  { 's01c02_lio_0004_decoration_holeFloor_2' } }
            )
        });
    })
end