if (card != null) {
controller.moveCardToExileWithInfo(card, exileId, "Cards exiled by " + mageObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY);
}
}
}
ExileZone exileZone = game.getExile().getExileZone(exileId);
while (exileZone != null && exileZone.count(filter, game) > 0
&& controller.chooseUse(Outcome.PlayForFree, "Cast cards exiled with " + mageObject.getLogName() +" without paying its mana cost?", game)) {
TargetCardInExile target = new TargetCardInExile(0,1, filter, exileId, false);
while (exileZone.count(filter, game) > 0 && controller.choose(Outcome.PlayForFree, exileZone, target, game)) {
Card card = game.getCard(target.getFirstTarget());
if (card != null) {
controller.cast(card.getSpellAbility(), game, true);
} else {
break;