anchor.diff:    function OrderAttackHouse(): Boolean;
     const
       INIT_THREAT = 1000000;
  -    SQR_CLOSE_COMBAT_DISTANCE_LIMIT = 12*12;
  +    LIMIT_RANGED_DESTROY_ALL_HOUSES = 6; // Archers will start to shoot at other houses if there is not enought close combat units in company
  +    SQR_CLOSE_COMBAT_DISTANCE_LIMIT = 12*12; // Order to attack house starts at this distance (close combat groups; watchtowers have exception)
       MAX_SOLDIERS_VS_HOUSE = 12;
  -    SQR_ATTACK_WATCHTOWER_WITH_CLOSE_COMBAT_DIST = 5*5;
  -    SQR_MAX_CLOSE_COMBAT_VS_UNIT_DIST = 3*3;
  +    MAX_ARCHERS_VS_TOWER = 9;
  +    SQR_ATTACK_WATCHTOWER_WITH_CLOSE_COMBAT_DIST = 5*5; // Attack watchtower with close combat units
  +    SQR_MAX_CLOSE_COMBAT_VS_UNIT_DIST = 3*3; // Kill citizens in this radius around house (workers tries to repair house)
     var
       Output: Boolean;
       TargetIdx: Word;
  
positive.code: // Update state of squad (group orders)
  procedure TAISquad.UpdateState(aTick: Cardinal);
  const
    RANGE_AIM_DELAY = 80;
    HOUSE_AIM_DELAY = 100;
  var
    ActPos, FinPos: TKMPoint;
  begin
  
negative.code:       Group.OrderWalk(FinPos, True, wtokAISquad, FinalPosition.Dir)
      else if fTargetChanged OR (fAttackTimeLimit < aTick) then
      begin
        fAttackTimeLimit := aTick + AIM_DELAY;
        fTargetChanged := False;
        Group.OrderAttackHouse(fTargetHouse, True);
      end;
  