anchor.diff:    if ScrollKeyRight then fPosition.X := fPosition.X + ScrollAdv;
     if ScrollKeyDown  then fPosition.Y := fPosition.Y + ScrollAdv;
     //Mouse
  -  if CursorPoint.X <= ScreenBounds.Left   + SCROLLFLEX then begin inc(Temp,1); fPosition.X := fPosition.X - ScrollAdv*(1+(ScreenBounds.Left   - CursorPoint.X)/SCROLLFLEX); end;
  -  if CursorPoint.Y <= ScreenBounds.Top    + SCROLLFLEX then begin inc(Temp,2); fPosition.Y := fPosition.Y - ScrollAdv*(1+(ScreenBounds.Top    - CursorPoint.Y)/SCROLLFLEX); end;
  -  if CursorPoint.X >= ScreenBounds.Right -1-SCROLLFLEX then begin inc(Temp,4); fPosition.X := fPosition.X + ScrollAdv*(1-(ScreenBounds.Right -1-CursorPoint.X)/SCROLLFLEX); end;
  -  if CursorPoint.Y >= ScreenBounds.Bottom-1-SCROLLFLEX then begin inc(Temp,8); fPosition.Y := fPosition.Y + ScrollAdv*(1-(ScreenBounds.Bottom-1-CursorPoint.Y)/SCROLLFLEX); end;
  +  if CursorPoint.X <= ScreenBounds.Left   + SCROLLFLEX then begin inc(I,1); fPosition.X := fPosition.X - ScrollAdv*(1+(ScreenBounds.Left   - CursorPoint.X)/SCROLLFLEX); end;
  +  if CursorPoint.Y <= ScreenBounds.Top    + SCROLLFLEX then begin inc(I,2); fPosition.Y := fPosition.Y - ScrollAdv*(1+(ScreenBounds.Top    - CursorPoint.Y)/SCROLLFLEX); end;
  +  if CursorPoint.X >= ScreenBounds.Right -1-SCROLLFLEX then begin inc(I,4); fPosition.X := fPosition.X + ScrollAdv*(1-(ScreenBounds.Right -1-CursorPoint.X)/SCROLLFLEX); end;
  +  if CursorPoint.Y >= ScreenBounds.Bottom-1-SCROLLFLEX then begin inc(I,8); fPosition.Y := fPosition.Y + ScrollAdv*(1-(ScreenBounds.Bottom-1-CursorPoint.Y)/SCROLLFLEX); end;
   
     //Now do actual the scrolling, if needed
  -  fScrolling := Temp <> 0;
  +  fScrolling := I <> 0;
     if fScrolling then
  -    fResource.Cursors.Cursor := DirectionsBitfield[Temp] //Sample cursor type from bitfield value
  +    fResource.Cursors.Cursor := DirectionsBitfield[I] //Sample cursor type from bitfield value
     else
       if (fResource.Cursors.Cursor in [kmc_Scroll0 .. kmc_Scroll7]) then
         fResource.Cursors.Cursor := kmc_Default;
  
positive.code:   fMapX := 1; //Avoid division by 0
    fMapY := 1; //Avoid division by 0
  
    FillChar(PrevScrollAdv, SizeOf(PrevScrollAdv), #0);
    PrevScrollPos := 0;
    fZoom := 1;
    ReleaseScrollKeys;
    gSoundPlayer.UpdateListener(fPosition.X, fPosition.Y);
  
negative.code:     fTopHill: Single;
      fPosition: TKMPointF;
      fScrolling: Boolean;
      fPrevScrollAdv: array [0..24] of Single;
      fPrevScrollPos: Byte;
      fViewportClip: TPoint;
      fViewRect: TKMRect;
      fZoom: Single;
  