public static boolean sacrificeTgtAI(AbilityFactory af, SpellAbility sa) {

        HashMap<String, String> params = af.getMapParams();
        Card card = sa.getSourceCard();
        Target tgt = af.getAbTgt();

        if (tgt != null) {
            tgt.resetTargets();
            if (AllZone.getHumanPlayer().canTarget(sa.getSourceCard()))
                tgt.addTarget(AllZone.getHumanPlayer());
            else
                return false;
        } else {
            String defined = params.get("Defined");
            if (defined == null) {
                // Self Sacrifice.
            } else if (defined.equals("Each")) {
                // If Sacrifice hits both players:
                // Only cast it if Human has the full amount of valid
                // Only cast it if AI doesn't have the full amount of Valid
                // TODO: Cast if the type is favorable: my "worst" valid is worse than his "worst" valid
                String valid = params.get("SacValid");
                String num = params.containsKey("Amount") ? params.get("Amount") : "1";
                int amount = AbilityFactory.calculateAmount(card, num, sa);

                Card source = sa.getSourceCard();
                if (num.equals("X") && source.getSVar(num).equals("Count$xPaid")) {
                    // Set PayX here to maximum value.
                    amount = Math.min(ComputerUtil.determineLeftoverMana(sa), amount);
                }

                CardList humanList = AllZoneUtil.getPlayerCardsInPlay(AllZone.getHumanPlayer());
                humanList = humanList.getValidCards(valid.split(","), sa.getActivatingPlayer(), sa.getSourceCard());
                CardList computerList = AllZoneUtil.getPlayerCardsInPlay(AllZone.getComputerPlayer());
                computerList = computerList.getValidCards(valid.split(","), sa.getActivatingPlayer(), sa.getSourceCard());

                //Since all of the cards have remAIDeck:True, I enabled 1 for 1 (or X for X) trades for special decks
                if (humanList.size() < amount /*|| computerList.size() >= amount */) return false;
            }
        }

        return true;
    }