anchor.diff:      property Evaluation[aPlayer: TKMHandIndex]: TKMArmyEval read GetEvaluation;
       property AllianceEvaluation[aPlayer: TKMHandIndex; aAlliance: TAllianceType]: TKMArmyEval read GetAllianceStrength;
   
  +    //function AttackForceChance(aOponent: TKMHandIndex; aGroups: TKMUnitGroupArray): Single;
       function CompareAllianceStrength(aPlayer, aOponent: TKMHandIndex): Single;
       procedure UpdateState(aTick: Cardinal);
     end;
  
positive.code: 
  
  procedure TKMArmyEvaluation.Save(SaveStream: TKMemoryStream);
  var
    I: Integer;
    GT: TGroupType;
  begin
    SaveStream.WriteA('ArmyEvaluation');
    for I := 0 to MAX_HANDS - 1 do
      for GT := Low(TGroupType) to High(TGroupType) do
        SaveStream.Write(fEvals[I,GT], SizeOf(TKMGroupEval));
  end;
  
  
  procedure TKMArmyEvaluation.Load(LoadStream: TKMemoryStream);
  var
    I: Integer;
    GT: TGroupType;
  begin
    LoadStream.ReadAssert('ArmyEvaluation');
    for I := 0 to MAX_HANDS - 1 do
      for GT := Low(TGroupType) to High(TGroupType) do
        LoadStream.Read(fEvals[I,GT], SizeOf(TKMGroupEval));
  end;
  
  
  
negative.code:   begin
      for GT := Low(TGroupType) to High(TGroupType) do
        with aEval[GT] do
        begin
          Result[GT] := Attack * Hitpoints * Defence;
          //if (GT = gt_AntiHorse) then
          //  Resutl[GT] := Result[GT] * AttackHorse;
        end;
    end;
  var
    Sum, Diff: Single;
  