anchor.diff:  
     if (dx<>0) or (dy<>0) then
     begin
  -    MoveObject(FSelectedObject, FMap.CurrentLevelIndex, FSelectedObject.X + dx, FSelectedObject.Y + dy);
  +    if Assigned(FSelectedObject) then
  +    begin
  +      MoveObject(FSelectedObject, FMap.CurrentLevelIndex, FSelectedObject.X + dx, FSelectedObject.Y + dy);
  +    end
  +    else
  +    begin
  +
  +      if ssShift in Shift then
  +      begin
  +        dx *= FViewTilesH div 2 - 1;
  +        dy *= FViewTilesV div 2 - 1;
  +      end;
  +
  +      ChangeMapPosition(Point(dx, dy));
  +    end;
  +
       Key := VK_UNKNOWN;
       Exit;
     end;
  
positive.code: var
    dx,dy: integer;
  begin
    if not Assigned(FSelectedObject) then
    begin
      Exit;
    end;
  
    dx := 0;
    dy := 0;
  
  
negative.code:     procedure MapScrollByMinimap(x,y: integer);
      procedure MapScrollToObject(AObject:TMapObject);
      procedure SetMapPosition(APosition:TPoint);
      procedure ChangeMapPosition(ADelta:TPoint);
      procedure SetMapViewMouse(x,y: integer);
  
      procedure SetBrushTerrain(tt: TTerrainType);
  