private static boolean tapAllTrigger(AbilityFactory af, SpellAbility sa, boolean mandatory) {
        if (!ComputerUtil.canPayCost(sa))
            return false;

        if (mandatory)
            return true;

        Card source = sa.getSourceCard();
        HashMap<String, String> params = af.getMapParams();

        String valid = "";
        if (params.containsKey("ValidCards"))
            valid = params.get("ValidCards");

        CardList validTappables = getTapAllTargets(valid, source);

        Random r = MyRandom.random;
        boolean rr = false;
        if (r.nextFloat() <= Math.pow(.6667, source.getAbilityUsed()))
            rr = true;

        if (validTappables.size() > 0) {
            CardList human = validTappables.filter(new CardListFilter() {
                public boolean addCard(Card c) {
                    return c.getController().isHuman();
                }
            });
            CardList compy = validTappables.filter(new CardListFilter() {
                public boolean addCard(Card c) {
                    return c.getController().isHuman();
                }
            });
            if (human.size() > compy.size()) {
                return rr;
            }
        }

        return false;
    }