IEnumerator Start()
    {
        dogCutsceneController = playerController.GetComponent<DogCutsceneController>();
        canSkip = true;
        hud.gameObject.SetActive(false);
        movieBars.Show();
        playerController.enabled = false;
        dogCutsceneController.enabled = true;
        chihuahua.MoveToNextPoint();

        if (PersistentData.HasWatchedEndingCutscene)
        {
            skipButton.Show();
        }

        yield return new WaitForSeconds(startChattingDelay);

        bossFightChatting.Chat();
        yield return new WaitUntil(() => { return bossFightChatting.HasEnded; });

        chihuahua.transform.FlipX();
        chihuahua.MoveToNextPoint();

        yield return new WaitForSeconds(endDelay);

        canSkip = false;
        skipButton.Hide();
        cutsceneCamera.NextShot();
        hud.gameObject.SetActive(true);
        movieBars.Hide();
        playerController.enabled = true;
        dogCutsceneController.enabled = false;
        chihuahua.gameObject.SetActive(false);
        dragon.SetActive(true);
        flameThrowers.SetActive(false);

        yield return new WaitForSeconds(showHudDelay);
        hud.Show();

        PersistentData.HasWatchedEndingCutscene = true;
    }
    IEnumerator Start()
    {
        dogCutsceneController = playerController.GetComponent<DogCutsceneController>();
        canSkip = true;
        hud.gameObject.SetActive(false);
        movieBars.Show();
        hellfire.gameObject.SetActive(false);
        playerController.enabled = false;
        dogCutsceneController.enabled = true;

        if (PersistentData.HasWatchedDragonCutscene)
        {
            skipButton.Show();
        }

        yield return new WaitForSeconds(startChattingDelay);

        chatting.Chat();
        yield return new WaitUntil(() => { return chatting.HasEnded; });

        moveFade.Show();
        yield return new WaitForSeconds(fadeoutDuration);
        playerController.gameObject.SetActive(true);
        cutsceneCamera.Skip();
        moveFade.Hide();

        canSkip = false;
        skipButton.Hide();
        hud.gameObject.SetActive(true);
        hellfire.gameObject.SetActive(true);
        movieBars.Hide();
        playerController.enabled = true;
        dogCutsceneController.enabled = false;

        yield return new WaitForSeconds(showHudDelay);
        hud.Show();
        cutsceneCamera.enabled = false;

        PersistentData.HasWatchedDragonCutscene = true;
    }
    IEnumerator Start()
    {
        dogCutsceneController = playerController.GetComponent<DogCutsceneController>();
        canSkip = true;
        hud.gameObject.SetActive(false);
        movieBars.Show();
        playerController.enabled = false;
        dogCutsceneController.enabled = true;

        if (PersistentData.HasWatchedExplanationCutscene)
        {
            skipButton.Show();
        }

        yield return new WaitForSeconds(startChattingDelay);

        chatting.Chat();
        yield return new WaitUntil(() => { return chatting.HasEnded; });

        lift.SetTrigger(upAnimHash);

        yield return new WaitForSeconds(endDelay);

        canSkip = false;
        skipButton.Hide();
        cutsceneCamera.NextShot();
        hud.gameObject.SetActive(true);
        lift.gameObject.SetActive(false);
        movieBars.Hide();
        playerController.enabled = true;
        dogCutsceneController.enabled = false;

        yield return new WaitForSeconds(showHudDelay);
        hud.Show();
        cutsceneCamera.enabled = false;

        PersistentData.HasWatchedExplanationCutscene = true;
    }
    IEnumerator Start()
    {
        dogCutsceneController = playerController.GetComponent<DogCutsceneController>();
        canSkip = true;
        sleepingDoge.SetActive(false);
        hud.gameObject.SetActive(false);
        movieBars.Show();
        playerController.enabled = false;
        dogCutsceneController.enabled = true;

        if (PersistentData.HasWatchedIntroCutscene)
        {
            skipButton.Show();
        }

        king.MoveToNextPoint();
        yield return new WaitUntil(() => { return king.HasReachedCurrentPoint; });

        yield return new WaitForSeconds(startChattingDelay);

        welcomeChatting.Chat();
        yield return new WaitUntil(() => { return welcomeChatting.HasEnded; });

        lord.MoveToNextPoint();
        yield return new WaitUntil(() => { return lord.DistanceToCurrentPoint < distanceThresholdToContinue; });

        introduceChihuahuaChatting.Chat();
        yield return new WaitUntil(() => { return introduceChihuahuaChatting.HasEnded; });

        chihuahua.MoveToNextPoint();
        yield return new WaitUntil(() => { return chihuahua.DistanceToCurrentPoint < distanceThresholdToContinue; });

        afterIntroductionChatting.Chat();
        yield return new WaitUntil(() => { return afterIntroductionChatting.HasEnded; });

        moveFade.Show();
        yield return new WaitForSeconds(fadeoutDuration);

        king.gameObject.SetActive(false);
        lord.gameObject.SetActive(false);
        chihuahua.gameObject.SetActive(false);
        cutsceneCamera.NextShot();
        sleepingDoge.SetActive(true);
        playerController.gameObject.SetActive(false);
        moveFade.Hide();

        yield return new WaitForSeconds(sleepAnimationDuration);

        moveFade.Show();
        yield return new WaitForSeconds(fadeoutDuration);
        sleepingDoge.SetActive(false);
        playerController.gameObject.SetActive(true);
        cutsceneCamera.NextShot();
        kitten.SetActive(false);
        moveFade.Hide();

        yield return new WaitForSeconds(delayAfterFadeout);

        dogeWakesUpChatting.Chat();
        yield return new WaitUntil(() => { return dogeWakesUpChatting.HasEnded; });

        dogePivot.FlipX();

        endingChatting.Chat();
        yield return new WaitUntil(() => { return endingChatting.HasEnded; });

        canSkip = false;
        skipButton.Hide();
        dogePivot.FlipX();
        cutsceneCamera.NextShot();
        hud.gameObject.SetActive(true);
        movieBars.Hide();
        playerController.enabled = true;
        dogCutsceneController.enabled = false;

        yield return new WaitForSeconds(showHudDelay);
        hud.Show();

        yield return new WaitForSeconds(startTutorialDelay);

        cutsceneCamera.enabled = false;
        tutorial.SetTrigger(stepAnimHash);

        PersistentData.HasWatchedIntroCutscene = true;
    }
    IEnumerator Start()
    {
        dogCutsceneController = playerController.GetComponent<DogCutsceneController>();
        canSkip = true;
        hud.gameObject.SetActive(false);
        movieBars.Show();
        playerController.enabled = false;
        dogCutsceneController.enabled = true;

        if (PersistentData.HasWatchedPlotTwistCutscene)
        {
            skipButton.Show();
        }

        yield return new WaitForSeconds(startChattingDelay);

        introChatting.Chat();
        yield return new WaitUntil(() => { return introChatting.HasEnded; });

        knight.MoveToNextPoint();

        yield return new WaitForSeconds(guardIntroChattingDelay);

        guardIntroChatting.Chat();
        yield return new WaitUntil(() => { return guardIntroChatting.HasEnded; });

        lift.SetTrigger(upAnimHash);

        yield return new WaitForSeconds(outroChattingDelay);

        StartCoroutine(MoveHellfire());
        fireballThrowers.SetActive(true);

        outroChatting.Chat();
        yield return new WaitUntil(() => { return outroChatting.HasEnded; });

        canSkip = false;
        skipButton.Hide();
        cutsceneCamera.NextShot();
        hud.gameObject.SetActive(true);
        lift.gameObject.SetActive(false);
        fireballThrowers.SetActive(false);
        knight.GetComponent<Knight>().enabled = true;
        knight.enabled = false;
        movieBars.Hide();
        playerController.enabled = true;
        dogCutsceneController.enabled = false;
        SocialManager.UnlockAchievement(SocialManager.Achievements.kidnappedKitten);

        yield return new WaitForSeconds(showHudDelay);
        hud.Show();
        cutsceneCamera.enabled = false;

        PersistentData.HasWatchedPlotTwistCutscene = true;
    }