public static void sacrificeAllResolve(final AbilityFactory af, final SpellAbility sa) {
        HashMap<String, String> params = af.getMapParams();

        Card card = sa.getSourceCard();

        String Valid = "";

        if (params.containsKey("ValidCards"))
            Valid = params.get("ValidCards");

        // Ugh. If calculateAmount needs to be called with DestroyAll it _needs_ to use the X variable
        // We really need a better solution to this
        if (Valid.contains("X"))
            Valid = Valid.replace("X", Integer.toString(AbilityFactory.calculateAmount(card, "X", sa)));

        CardList list = AllZoneUtil.getCardsInPlay();

        boolean remSacrificed = params.containsKey("RememberSacrificed");
        if (remSacrificed)
            card.clearRemembered();

        list = list.getValidCards(Valid.split(","), card.getController(), card);

        for (int i = 0; i < list.size(); i++)
            if (AllZone.getGameAction().sacrifice(list.get(i)) && remSacrificed)
                card.addRemembered(list.get(i));
    }