anchor.diff:      property CastleDefName: AnsiString read FCastleDefName write SetCastleDefName;
       property CapitolDefName:  AnsiString read FCapitolDefName write SetCapitolDefName;
       property HasTown: Boolean read FHasTown write SetHasTown;
  +
  +  public //ISerializeNotify
  +    procedure BeforeSerialize(Sender:TObject);
  +    procedure AfterSerialize(Sender:TObject; AData: TJSONData);
  +    procedure BeforeDeSerialize(Sender:TObject; AData: TJSONData);
  +    procedure AfterDeSerialize(Sender:TObject; AData: TJSONData);
     published
       property Town: TTownInfo read FTown;
     end;
  
positive.code:       legacy_data.Add(o);
      end;
  
      FConfig.Load(AProgess, APaths, ResourceLoader, FCombinedConfig);
  
      MergeLegacy(legacy_data, FCombinedConfig);
  
      for iter in FCombinedConfig do
      begin
        info := FHeroInfos.Add;
  
        info.Identifier := iter.Key;
  
        FDestreamer.JSONToObjectEx(iter.Value as TJSONObject, info);
  
      end;
  
    finally
      FCombinedConfig.Free;
      FConfig.Free;
      hotraits.free;
      herobios.Free;
      legacy_data.Free;
  
negative.code: 
    row: Integer;
  
    legacy_config: TJsonObjectList; //index = lecacy ID
    i: integer;
    spell_config: TJSONObject;
    loc_name: String;
  begin
    sptrairs := TTextResource.Create(SPELL_TRAITS);
    legacy_config := TJsonObjectList.Create(True);
  
  