private void addStaticEffects(StaticEffect se, Card source, CardList affectedCards, String details, ArrayList<String> types, String colors) {

            for (int i = 0; i < affectedCards.size(); i++) {
                Card affectedCard = affectedCards.get(i);

                if (!details.equals("no changes")) {
                    String[] keyword = details.split("/", 3);
                    String powerStr = keyword[0];
                    String toughStr = keyword[1];
                    //copied from stSetPT power/toughness
                    if (!powerStr.equals("no change")) {
                        int power = powerStr.matches("[0-9][0-9]?") ? Integer.parseInt(powerStr) : CardFactoryUtil.xCount(affectedCard, powerStr);
                        se.addOriginalPT(affectedCard, affectedCard.getBaseAttack(), affectedCard.getBaseDefense());
                        affectedCard.setBaseAttack(power);
                    }
                    if (!toughStr.equals("no change")) {
                        int toughness = toughStr.matches("[0-9][0-9]?") ? Integer.parseInt(toughStr) : CardFactoryUtil.xCount(affectedCard, toughStr);
                        se.addOriginalPT(affectedCard, affectedCard.getBaseAttack(), affectedCard.getBaseDefense());
                        affectedCard.setBaseDefense(toughness);
                    }
                    if (se.isOverwriteKeywords()) {
                        se.addOriginalKeywords(affectedCard, affectedCard.getIntrinsicKeyword());
                        affectedCard.clearAllKeywords();
                    } else {
                        if (keyword.length != 2) {
                            int index = 2;
                            if (keyword.length == 1) index = 0;
                            String keywords[] = keyword[index].split(" & ");
                            for (int j = 0; j < keywords.length; j++) {
                                String kw = keywords[j];
                                affectedCard.addExtrinsicKeyword(kw);
                            }
                        }
                    }
                }

                if (se.isOverwriteTypes()) {
                    se.addOriginalTypes(affectedCard, affectedCard.getType());
                    if (!se.isKeepSupertype()) {
                        affectedCard.clearAllTypes();
                    } else {
                        ArrayList<String> acTypes = affectedCard.getType();
                        for (String t : acTypes) {
                            if (!CardUtil.isASuperType(t)) affectedCard.removeType(t);
                        }
                    }
                }
                if (se.isRemoveSubTypes()) {
                    se.addOriginalTypes(affectedCard, affectedCard.getType());
                    ArrayList<String> acTypes = affectedCard.getType();
                    for (String t : acTypes) {
                        if (CardUtil.isASubType(t)) affectedCard.removeType(t);
                    }
                }
                for (String type : types) {
                    if (!affectedCard.isType(type)) {
                        affectedCard.addType(type);
                        se.addType(affectedCard, type);
                    } else {
                        se.removeType(affectedCard, type);
                    }
                }
                //Abilities
                if (se.isOverwriteAbilities()) {
                    se.addOriginalAbilities(affectedCard, affectedCard.getAllButFirstSpellAbility());
                    affectedCard.clearAllButFirstSpellAbility();
                } else {
                    //TODO - adding SpellAbilities statically here not supported at this time
                }

                long t = affectedCard.addColor(colors, affectedCard, !se.isOverwriteColors(), true);
                se.addTimestamp(affectedCard, t);
            }//end for
        }