private static void OpenYNDialogue(GameObject shiny, IEnumerable <AbstractItem> items, Cost cost)
        {
            FSMUtility.LocateFSM(GameObject.Find("DialogueManager"), "Box Open YN").SendEvent("BOX UP YN");
            FSMUtility.LocateFSM(GameObject.Find("Text YN"), "Dialogue Page Control").FsmVariables
            .GetFsmGameObject("Requester").Value = shiny;

            // If the text pushes the Y/N buttons off of the page, it results in an input lock
            // These lengths are a little generous--all MMMMMs will still overflow
            string itemText = string.Join(", ", items.Select(i => i.UIDef.GetDisplayName()).ToArray());

            if (itemText.Length > 120)
            {
                itemText = itemText.Substring(0, 117) + "...";
            }

            string costText = cost.GetCostText();

            if (costText.Length > 40)
            {
                costText = costText.Substring(0, 37) + "...";
            }

            LanguageStringManager.SetString("UI", "RANDOMIZER_YN_DIALOGUE", $"{itemText}<br>{costText}");

            if (!cost.CanPay())
            {
                FSMUtility.LocateFSM(GameObject.Find("Text YN"), "Dialogue Page Control")
                .StartCoroutine(KillGeoText());
            }

            FSMUtility.LocateFSM(GameObject.Find("Text YN"), "Dialogue Page Control").FsmVariables
            .GetFsmInt("Toll Cost").Value = 0;
            FSMUtility.LocateFSM(GameObject.Find("Text YN"), "Dialogue Page Control").FsmVariables
            .GetFsmGameObject("Geo Text").Value.SetActive(true);

            GameObject.Find("Text YN").GetComponent <DialogueBox>().StartConversation("RANDOMIZER_YN_DIALOGUE", "UI");
        }