public void SelectQuest(Quest quest, bool selectOnLeftPage = true)
        {
            // open book if not open.
            if (!(SpiritMod.Instance.BookUserInterface.CurrentState is QuestBookUI))
            {
                QuestManager.SetBookState(true);
            }

            // this is here for external quest book openings.
            if (selectOnLeftPage)
            {
                _questSectionIndex = quest.IsCompleted ? 2 : (quest.IsActive ? 1 : 0);
                _questFilterIndex  = 0;
                for (int i = 0; i < _allQuestButtons.Length; i++)
                {
                    if (_allQuestButtons[i].MyQuest == quest)
                    {
                        _selectedQuestIndex = i;
                        break;
                    }
                }

                UpdateList();

                _questList.Goto((UIElement el) => (el is UISelectableQuest q) && q.MyQuest == quest);

                ButtonArraySelect(_questSectionIndex, _questSectionButtons);
                ButtonArraySelect(_questFilterIndex, _questFilterButtons);
                ButtonArraySelect(_selectedQuestIndex, _allQuestButtons);
            }

            _interactionWarningText.Text = "";
            _showingWarning = false;

            // show the undiscovered page.
            if (!quest.IsUnlocked)
            {
                _questTitleText.Scale = 0.47f;
                _questTitleText.Text  = "This quest hasn't been discovered.";
                _questTitleText.Top.Set(-28f, 0.5f);

                _questImage.Texture        = null;
                _questClientText.Text      = "";
                _questCategoryText.Text    = "";
                _questObjectivesText.Text  = "";
                _questClientTitle.Text     = "";
                _questObjectivesTitle.Text = "";
                _questRewardsTitle.Text    = "";
                _questRewardList.Clear();
                _questObjectivesPageText.Top.Set(-1000000f, 0f);
                UpdateArrows(0, -20);
                _obnoxiousTutorialGlow.Texture = null;
                // just move this off screen
                _questInteractButton.Left.Set(-1000000f, 0f);

                foreach (UISolid solid in _rightPageLines)
                {
                    solid.Color = Color.Transparent;
                }
                return;
            }

            foreach (UISolid solid in _rightPageLines)
            {
                solid.Color = new Color(102, 86, 67);
            }

            if (quest.RewardsGiven)
            {
                // just move this off screen
                _questInteractButton.Left.Set(-1000000f, 0f);
            }
            else
            {
                // bring the interact button back to the screen if it's gone
                _questInteractButton.Left.Set(-110f, 1f);
            }

            quest.UpdateBookOverlay(_bookOverlay);
            _obnoxiousTutorialGlow.Texture = (quest.TutorialActivateButton && !quest.IsActive && !quest.RewardsGiven) ? Main.blackTileTexture : null;
            _questTitleText.Top.Set(-8f, 0f);
            // TODO: Automate the scaling here:
            _questTitleText.Text = quest.QuestName;
            float titleWidth = _questTitleText.Font.MeasureString(_questTitleText.Text).X;
            float scale      = 0.8f;

            if (titleWidth >= 416.25f)
            {
                scale = 0.8f * (416.25f / titleWidth);
            }
            _questTitleText.Scale      = scale;
            _questObjectivesTitle.Text = "Objectives";
            _questRewardsTitle.Text    = "Rewards";
            _questImage.Texture        = quest.QuestImage;
            _questInteractText.Text    = quest.IsCompleted ? "Claim rewards!" : (quest.IsActive ? "Deactivate" : "Activate");
            _questClientTitle.Text     = "Client - " + quest.QuestClient;
            _questClientText.Text      = quest.QuestDescription;
            _questClientText.UpdateText();
            var category = QuestManager.GetCategoryInfo(quest.QuestCategory);

            _questCategoryText.Text   = category.Name;
            _questCategoryText.Colour = category.Color;
            _questObjectivesText.Page = 0;
            _questObjectivesText.Text = quest.GetObjectivesBook();
            _questObjectivesPageText.Top.Set(188f, 0f);
            UpdateArrows(_questObjectivesText.Page, _questObjectivesText.MaxPage);

            _questRewardList.Clear();
            if (quest.QuestRewards != null)
            {
                foreach (var reward in quest.QuestRewards)
                {
                    _questRewardList.Add(new UIRewardItem(reward.Item1, reward.Item2));
                }
            }

            // pick a "random" mask
            int maskIndex = (quest.QuestName.Length * quest.QuestDescription.Length) % _imageMasks.Length;

            _questImage.Effect.Parameters["AlphaMaskTexture"].SetValue(_imageMasks[maskIndex]);

            SelectedQuest = quest;
        }