private static String poisonStackDescription(AbilityFactory af, SpellAbility sa) {
        HashMap<String, String> params = af.getMapParams();
        StringBuilder sb = new StringBuilder();
        int amount = AbilityFactory.calculateAmount(af.getHostCard(), params.get("Num"), sa);

        if (!(sa instanceof Ability_Sub))
            sb.append(sa.getSourceCard()).append(" - ");
        else
            sb.append(" ");

        String conditionDesc = params.get("ConditionDescription");
        if (conditionDesc != null)
            sb.append(conditionDesc).append(" ");

        ArrayList<Player> tgtPlayers;

        Target tgt = af.getAbTgt();
        if (tgt != null)
            tgtPlayers = tgt.getTargetPlayers();
        else
            tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);

        if (tgtPlayers.size() > 0) {
            Iterator<Player> it = tgtPlayers.iterator();
            while (it.hasNext()) {
                Player p = it.next();
                sb.append(p);
                if (it.hasNext()) sb.append(", ");
                else sb.append(" ");
            }
        }

        sb.append("get");
        if (tgtPlayers.size() < 2) sb.append("s");
        sb.append(" ").append(amount).append(" poison counter");
        if (amount != 1) sb.append("s.");
        else sb.append(".");

        Ability_Sub abSub = sa.getSubAbility();
        if (abSub != null) {
            sb.append(abSub.getStackDescription());
        }

        return sb.toString();
    }