private boolean shouldTgtP(SpellAbility sa, int d, final boolean noPrevention) {
        int restDamage = d;
        Player human = AllZone.getHumanPlayer();
        Player comp = AllZone.getComputerPlayer();

        if (!noPrevention)
            restDamage = human.predictDamage(restDamage, AF.getHostCard(), false);
        else restDamage = human.staticReplaceDamage(restDamage, AF.getHostCard(), false);

        if (restDamage == 0) return false;

        if (!human.canLoseLife()) return false;

        CardList hand = AllZoneUtil.getPlayerHand(comp);

        if (AF.isSpell()) {
            // If this is a spell, cast it instead of discarding
            if ((AllZone.getPhase().is(Constant.Phase.End_Of_Turn) || AllZone.getPhase().is(Constant.Phase.Main2)) &&
                    AllZone.getPhase().isPlayerTurn(comp) && (hand.size() > comp.getMaxHandSize()))
                return true;
        }

        if (human.getLife() - restDamage < 5) // if damage from this spell would drop the human to less than 5 life
            return true;

        return false;
    }