anchor.diff:    H: TKMHouse;
     U: TKMUnit;
   begin
  -  Assert((fParsingMode <> mpmEditor) or (fAttackPositions.Count = 0), 'AttackPositions should be handled by MapEd');
  -
  -  for I := 0 to fAttackPositions.Count - 1 do
  -    with fAttackPositions[I] do
  +  Assert((fParsingMode <> mpmEditor) or (fGroupOrders.Count = 0), 'AttackPositions should be handled by MapEd');
  +
  +  for I := 0 to fGroupOrders.Count - 1 do
  +    with fGroupOrders[I] do
       begin
  -      H := gHands.HousesHitTest(Target.X, Target.Y); //Attack house
  -      if (H <> nil) and (not H.IsDestroyed) and (gHands.CheckAlliance(Group.Owner, H.Owner) = atEnemy) then
  -        Group.OrderAttackHouse(H, True)
  -      else
  -      begin
  -        U := gTerrain.UnitsHitTest(Target.X, Target.Y); //Chase/attack unit
  -        if (U <> nil) and (not U.IsDeadOrDying) and (gHands.CheckAlliance(Group.Owner, U.Owner) = atEnemy) then
  -          Group.OrderAttackUnit(U, True)
  -        else
  -          Group.OrderWalk(Target, True, wtokMissionScript); //Just move to position
  +      case Kind of
  +        gioNoOrder:         ;
  +        gioSendGroup:       Group.OrderWalk(Target, True, wtokMissionScript, Dir);
  +        gioAttackPosition:  begin
  +                              H := gHands.HousesHitTest(Target.X, Target.Y); //Attack house
  +                              if (H <> nil) and (not H.IsDestroyed) and (gHands.CheckAlliance(Group.Owner, H.Owner) = atEnemy) then
  +                                Group.OrderAttackHouse(H, True)
  +                              else
  +                              begin
  +                                U := gTerrain.UnitsHitTest(Target.X, Target.Y); //Chase/attack unit
  +                                if (U <> nil) and (not U.IsDeadOrDying) and (gHands.CheckAlliance(Group.Owner, U.Owner) = atEnemy) then
  +                                  Group.OrderAttackUnit(U, True)
  +                                else
  +                                  Group.OrderWalk(Target, True, wtokMissionScript); //Just move to position
  +                              end;
  +                            end;
         end;
       end;
   end;
  
positive.code: uses
    Generics.Collections,
    KM_MissionScript, KM_UnitGroup, KM_Units, KM_Houses,
    KM_AIAttacks, KM_Points, KM_Defaults;
  
  
  type
    TKMAttackPosition = record
      Group: TKMUnitGroup;
      Target: TKMPoint;
    end;
  
    TKMMissionParserStandard = class(TKMMissionParserCommon)
  
negative.code:   KM_AI, KM_AIDefensePos,
    KM_Resource, KM_ResHouses, KM_ResUnits, KM_ResWares,
    KM_CommonClasses, KM_CommonTypes, KM_Terrain,
    KM_HandTypes;
  
  
  type
  