public string PlayLine(Message dialog)
 {
     if(dialog==null)
     {
         return "NULL DIALOG: " + currentDialog;
     }
     //Message Lines
     if(currentMessage<dialog.GetLines())
     {
         CharacterSprite.sprite = CharacterInfo.instance.CharacterList[dialog.Character].EmoteSprites[dialog.Lines[currentMessage].Emotion];
         return dialog.Lines[currentMessage].Text;
     }
     //End lines
     else if(currentMessage == dialog.GetLines())
     {
         if (dialog.JumpsAtEnd)
         {
             currentMessage = 0;
             currentDialog = dialog.JumpID;
             StopAllCoroutines();
             StartCoroutine(AnimateText());
         }
         else if (dialog.JustEnds)
         {
             DialogEnd();
         }
         else if (dialog.EndsInChoice)
         {
             currentMessage = 0;
             ChoiceMode = true;
             NextArrow.SetActive(false);
         }
         else if (dialog.BoolJump)
         {
             currentMessage = 0;
             currentDialog = dialog.JumpBool.Test() ? dialog.JumpBool.TrueID : dialog.JumpBool.FalseID;
             StopAllCoroutines();
             StartCoroutine(AnimateText());
         }
         else if(dialog.FavorJump)
         {
             currentMessage = 0;
             Character current = CharacterInfo.instance.GetByName(dialog.JumpFavor.CharName);
             currentDialog = current.Favor >= dialog.JumpFavor.Value ? dialog.JumpFavor.AboveID : dialog.JumpFavor.BelowID;
             StopAllCoroutines();
             StartCoroutine(AnimateText());
         }
         // add the actual incorperation of variables and bools and such
         foreach(BoolChange c in dialog.BoolChanges)
         {
             if(Booleans.instance.Dictionary["METGHOST"])
             {
                 bool x = false;
             }
             if (Booleans.instance.Dictionary.ContainsKey(c.BoolName))
             {
                 Booleans.instance.Dictionary[c.BoolName] = c.Value; 
             }
             else
             {
                 Debug.Log("NoSuchBoolAs: " + c.BoolName);
             }
         }
         foreach(CharachterFavorChange c in dialog.FavorChanges)
         {
             Character current = CharacterInfo.instance.GetByName(c.CharName);
             current.Favor += c.Value;
         }
         foreach(ItemTransfer c in dialog.ItemTransfers)
         {
             if(c.Method == ItemMethod.GIVE)
             {
                 if(Booleans.instance.Inventory.ContainsKey(c.Item))
                 {
                     if (Booleans.instance.Inventory[c.Item] == true)
                         Booleans.instance.Inventory[c.Item] = false;
                     else
                         Debug.Log("YouCan'tGiveItem: " + c.Item + " BecauseYouDon'tHaveIt");
                 }
                 else
                 {
                     Debug.Log("NoSuchItemas: " + c.Item);
                 }
             }
             else if(c.Method == ItemMethod.TAKE)
             {
                 if (Booleans.instance.Inventory.ContainsKey(c.Item))
                 {
                     if (Booleans.instance.Inventory[c.Item] == false)
                         Booleans.instance.Inventory[c.Item] = true;
                     else
                         Debug.Log("YouCan'tTakeItem: " + c.Item + " BecauseYouAlreadyHaveIt");
                 }
                 else
                 {
                     Debug.Log("NoSuchItemas: " + c.Item);
                 }
             }
         }
         return "";
     }
     else
          return "ERROR";
 }