anchor.diff:  procedure TKMTerrain.SetField(const Loc: TKMPoint; aOwner: TKMHandID; aFieldType: TKMFieldType; aStage: Byte = 0;
                                 aRandomAge: Boolean = False; aKeepOldObject: Boolean = False; aRemoveOverlay: Boolean = True;
                                 aDoUpdate: Boolean = True);
  +
     procedure SetLand(aFieldAge: Byte; aTerrain: Byte; aObj: Integer = -1);
     begin
       Land[Loc.Y, Loc.X].FieldAge := aFieldAge;
  
positive.code:     normDistance := Min(MaxDistance, Floor(KMLength(OriginPoint, TargetPoint)));
  
    while (normDistance >= 0)
      and (not IsDistBetweenPointsAllowed(OriginPoint, TargetPoint)
           or not CheckPassability(TargetPoint, aPass)) do
    begin
      normVector := KMNormVector(KMPoint(TargetPoint.X - OriginPoint.X, TargetPoint.Y - OriginPoint.Y), normDistance);
  
negative.code: function TKMTerrain.GetPassablePointWithinSegment(OriginPoint, TargetPoint: TKMPoint;
                                                    aPass: TKMTerrainPassability;
                                                    MaxDistance: Integer = -1): TKMPoint;
  
    function IsDistBetweenPointsAllowed(const OriginPoint, TargetPoint: TKMPoint; aMaxDistance: Integer): Boolean; inline;
    begin
      Result := (aMaxDistance = -1) or (KMDistanceSqr(OriginPoint, TargetPoint) <= Sqr(aMaxDistance));
    end;
  
  var
    normVector: TKMPoint;
    normDistance: Integer;
  