private void LoadMessage()
    {
        currentText = currentMessage.Text;
        currentText = currentText.Replace("~~", playerName);
        textIndex   = 0;
        typing      = true;

        bool player = currentMessage.Player;

        playerBubble.transform.parent.gameObject.SetActive(player);
        npcBubble.transform.parent.gameObject.SetActive(!player);

        playerBubble.text = "";
        npcBubble.text    = "";

        playerAnim.SetInteger("MessageState", currentMessage.PlayerAnimState);
        npcAnim.SetInteger("MessageState", currentMessage.NpcAnimState);

        //player response buttons
        if (currentMessage.Branching)
        {
            Dictionary <string, int> branches   = currentMessage.Branches;
            List <string>            buttonText = new List <string>(branches.Keys);
            int numOfButtons = branches.Count;

            for (int i = 0; i < buttonList.Length; i++)
            {
                bool active = i <= (numOfButtons - 1);

                buttonList[i].transform.parent.gameObject.SetActive(active);

                if (active)
                {
                    int textIndex = random.Next(0, buttonText.Count - 1);

                    buttonList[i].text = buttonText[textIndex].Replace("~~", dataHolder.player.PlayerName);

                    buttonText.RemoveAt(textIndex);
                }
            }
        }
        else
        {
            for (int i = 0; i < buttonList.Length; i++)
            {
                buttonList[i].transform.parent.gameObject.SetActive(false);
            }
        }


        //Audio
        playAudioScript.PlayVoiceLine(currentMessage.Voice);
    }