anchor.diff:          json["name"] = name;
           json["tier"] = "$tier";
           json["desc"] = desc;
  -        json["target"] = "${effects.first.target}";
  -        //just assume all fraymotifs just have each of the 4 main effects, targeted at the same thing
  -        //allEffectsTargetOne
  +        List<JSONObject> effectArray = new List<JSONObject>();
  +
  +        for(FraymotifEffect s in effects) {
  +          effectArray.add(s.toJSON());
  +        }
  +        json["effects"] = effectArray.toString();
  +
           return json;
  +    }
  +
  +    void copyFromJSON(String jsonString) {
  +      JSONObject json = new JSONObject.fromJSONString(jsonString);
  +      name = json["name"];
  +      tier = int.parse(json["tier"]);
  +      desc = json["desc"];
  +      String traitsString = json["effects"];
  +      loadEffects(traitsString);
  +    }
  +
  +    void loadEffects(String weirdString) {
  +      if(weirdString == null) return;
  +      List<dynamic> what = JSON.decode(weirdString);
  +      for(dynamic d in what) {
  +        FraymotifEffect ss = new FraymotifEffect(null, 0, false);
  +        ss.copyFromJSON(d);
  +        effects.add(ss);
  +      }
       }
   
       @override
  
positive.code: import "SBURBSim.dart";
  
  /*
  stat effects from a fraymotif are temporary. wear off after battle.
  
negative.code: 
      /// target 0  = self, 1 = allies, 2 = enemy 3 = enemies.
      FraymotifEffect(Stat this.statName, num this.target, bool this.damageInsteadOfBuff, [String this.flavorText = ""]) {}
  
      JSONObject toJSON() {
        JSONObject json = new JSONObject();
        json["stat"] = statName.name;
        json["target"] = "$target";
        json["damageInsteadOfBuff"] = damageInsteadOfBuff.toString();
      }
  
      void copyFromJSON(String jsonString) {
        JSONObject json = new JSONObject.fromJSONString(jsonString);
        statName = Stats.byName[json["name"]];
        target = int.parse(json["target"]);
        if(json["damageInsteadOfBuff"] == "true") {
          damageInsteadOfBuff = true;
        }else {
          damageInsteadOfBuff = false;
        }
      }
  
  
      static List<FraymotifEffect> allEffectsTargetAll() {
          List<FraymotifEffect> ret = new List<FraymotifEffect>();
  