public void Consume(Character carrier, Token carriedItem) { if (this.HasToken("charge")) { var charge = carriedItem.Path("charge"); if (charge == null && carriedItem.Name == "charge") { charge = carriedItem; } if (charge == null || charge.Value == 1) { if (HasToken("revert")) { carriedItem.Name = GetToken("revert").Text; carriedItem.Tokens.Clear(); } else { carrier.GetToken("items").Tokens.Remove(carriedItem); carrier.CheckHasteSlow(); } } else { charge.Value--; } } else { if (HasToken("revert")) { carriedItem.Name = GetToken("revert").Text; carriedItem.Tokens.Clear(); } else { carrier.GetToken("items").Tokens.Remove(carriedItem); carrier.CheckHasteSlow(); } } }