public void killOf(Card c)
    {
        printDebugMessage("Card is killed of: " + c.getReadableName(), OutputPriority.DAMAGES);
        BoardSide current = p1Board.Contains(c) ? p1Board : p2Board;

        if (!p2Board.Contains(c) && !p1Board.Contains(c))
        {
            throw new CardDoesNotExistException("killOf failed: card does not exist: " + c.ID);
        }
        List <Card> alreadyInformed = new List <Card>();

        for (int i = 0; i < current.Count; i++)
        {
            if (!alreadyInformed.Contains(current[i]))
            {
                alreadyInformed.Add(current[i]);
                current[i].performedAction(new CardKilledAction(c), this);
            }
        }
        current.Remove(c);
        current.graveyard.Add(new BoardSide.DeadCard(c.cardID, c.golden, c.getCardType()));

        printDebugMessage("Card killed: count is now: " + current.Count, OutputPriority.INTENSEDEBUG);
        printDebugMessage("Card killed: count is now on p2: " + p2Board.Count, OutputPriority.INTENSEDEBUG);
    }