anchor.diff:      fTopHill: Single;
       fPosition: TKMPointF;
       fScrolling: Boolean;
  -    PrevScrollAdv: array [1..24] of Single;
  -    PrevScrollPos: Byte;
  +    fPrevScrollAdv: array [0..24] of Single;
  +    fPrevScrollPos: Byte;
       fViewportClip: TPoint;
       fViewRect: TKMRect;
       fZoom: Single;
  
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: 
    ScrollAdv := (SCROLLSPEED + fGameApp.GameSettings.ScrollSpeed / 3) * aFrameTime / 100; //1-5 tiles per second
  
    fPrevScrollPos := (fPrevScrollPos + 1) mod Length(fPrevScrollAdv); //Position in ring-buffer
    fPrevScrollAdv[fPrevScrollPos] := ScrollAdv; //Replace oldest value
    for I := Low(fPrevScrollAdv) to High(fPrevScrollAdv) do //Compute average
      ScrollAdv := ScrollAdv + fPrevScrollAdv[I];
    ScrollAdv := ScrollAdv / Length(fPrevScrollAdv);
  
    I := 0; //That is our bitfield variable for directions, 0..12 range
    //    3 2 6  These are directions
    //    1 * 4  They are converted from bitfield to actual cursor constants, see Arr array
    //    9 8 12
  