anchor.diff:  begin
     if IsAtLeastAB() then
     begin
  -    cnt := ifthen(IsAtLeastAB(),18,17);
  +    cnt := ifthen(IsAtLeastSoD(),18,17);
   
       ReadBitmask(FMap.AllowedArtifacts, cnt, ARTIFACT_QUANTITY, @FMapEnv.lm.ArtifactIndexToString, true);
     end;
  
positive.code:       end;
      end;
    end;
  
    SetLength(ADest, real_count);
  
  end;
  
  procedure TMapReaderH3m.ReadBitmask(ADest: TStrings; AMaskSize: SizeInt;
    ACount: SizeInt; ACallback: TIdToString; Negate: Boolean);
  var
    tmp: array of TCustomID;
  
    iter: TCustomID;
  begin
    ADest.Clear;
  
    SetLength(tmp, 0);
  
    ReadBitmask(tmp, AMaskSize, ACount, Negate);
  
    for iter in tmp do
    begin
      ADest.Add(ACallback(iter));
    end;
  
  end;
  
  procedure TMapReaderH3m.ReadBitmask(ADest: TLogicalIDCondition;
  
negative.code: var
    cnt: Integer;
  begin
    cnt := ifthen(IsAtLeastAB(),20,16);
  
    ReadBitmask(FMap.AllowedHeroes, cnt, HERO_QUANTITY, @FMapEnv.lm.HeroIndexToString, False);
  