Card_Color determineColor(ArrayList<Card_Color> globalChanges) {
        Card_Color colors = new Card_Color(this);
        int i = cardColor.size() - 1;
        int j = globalChanges.size() - 1;
        // if both have changes, see which one is most recent
        while (i >= 0 && j >= 0) {
            Card_Color cc = null;
            if (cardColor.get(i).getStamp() > globalChanges.get(j).getStamp()) {
                // Card has a more recent color stamp
                cc = cardColor.get(i);
                i--;
            } else {
                // Global effect has a more recent color stamp
                cc = globalChanges.get(j);
                j--;
            }

            for (String s : cc.toStringArray())
                colors.addToCardColor(s);
            if (!cc.getAdditional())
                return colors;
        }
        while (i >= 0) {
            Card_Color cc = cardColor.get(i);
            i--;
            for (String s : cc.toStringArray())
                colors.addToCardColor(s);
            if (!cc.getAdditional())
                return colors;
        }
        while (j >= 0) {
            Card_Color cc = globalChanges.get(j);
            j--;
            for (String s : cc.toStringArray())
                colors.addToCardColor(s);
            if (!cc.getAdditional())
                return colors;
        }

        return colors;
    }