FilterCard filter = filterStatic.copy();
filter.add(new ConvertedManaCostPredicate(Filter.ComparisonType.LessThan, source.getManaCostsToPay().getX() + 1));
filter.setMessage("instant and sorcery cards with converted mana cost "+ source.getManaCostsToPay().getX() +" or less");
while (epicExperimentExileZone != null && epicExperimentExileZone.count(filter, game) > 0
&& controller.chooseUse(Outcome.PlayForFree, "Cast cards exiled with Epic Experiment without paying its mana cost?", game)) {
TargetCardInExile target = new TargetCardInExile(filter, source.getSourceId());
while (epicExperimentExileZone.count(filter, game) > 0 && controller.choose(Outcome.PlayForFree, epicExperimentExileZone, target, game)) {
Card card = game.getCard(target.getFirstTarget());
if (card != null) {
if (controller.cast(card.getSpellAbility(), game, true))
{
game.getExile().removeCard(card, game);
}
}
target.clearChosen();
}
}
// move cards not cast to graveyard
ExileZone exile = game.getExile().getExileZone(source.getSourceId());
if (exile != null) {