anchor.diff:  const
     SF = 17; //Full width/height of a scroll cursor
     SH = 8; //Half width/height of a scroll cursor
  -  //Measured manually
  -  CursorOffsetsX: array [TKMCursor] of Integer = (0,0,20, 0, 0,-8, 9,0, 1,1,1,0,-1,-1,-1,0, SH,SF,SF,SF,SH, 0, 0,0, 0,0,0,27);
  -  CursorOffsetsY: array [TKMCursor] of Integer = (0,9,10,18,20,44,13,0,-1,0,1,1, 1, 0,-1,0, 0 ,0 ,SH,SF,SF,SF,SH,0,28,0,0,28);
  +  // Measured manually
  +  CURSOR_OFFSET_X: array [TKMCursor] of Integer = (0,0,20, 0, 0,-8, 9,0, 1,1,1,0,-1,-1,-1,0, SH,SF,SF,SF,SH, 0, 0,0, 0,0,0,27);
  +  CURSOR_OFFSET_Y: array [TKMCursor] of Integer = (0,9,10,18,20,44,13,0,-1,0,1,1, 1, 0,-1,0, 0 ,0 ,SH,SF,SF,SF,SH,0,28,0,0,28);
   var
     KMC: TKMCursor;
     sx,sy,x,y: Integer;
  
positive.code:     kmcDir0, kmcDir1, kmcDir2, kmcDir3, kmcDir4, kmcDir5, kmcDir6, kmcDir7, kmcDirNA,
      kmcScroll0, kmcScroll1, kmcScroll2, kmcScroll3, kmcScroll4, kmcScroll5, kmcScroll6, kmcScroll7,
      kmcBeacon, kmcDrag,
      kmcInvisible, //for some reason kmcInvisible should be at its current position in enum. Otherwise 1px dot will appear while TroopSelection is on
      kmcPaintBucket);
  
  
    TKMResCursors = class
    private
      fRXData: PRXData; //Store pointer to record instead of duplicating it
      function GetCursor: TKMCursor;
      procedure SetCursor(Value: TKMCursor);
    public
  
negative.code:         Px := bm.ScanLine[y];
          for x:=0 to sx-1 do
          begin
            if fRXData.RGBA[CURSOR_SPRITE_INDEX[KMC],y*sx+x] and $FF000000 = 0 then
              Px.rgbReserved := $00
            else
              Px.rgbReserved := $FF;
            // Here we have BGR, not RGB
            Px.rgbBlue := (fRXData.RGBA[CURSOR_SPRITE_INDEX[KMC],y*sx+x] and $FF0000) shr 16;
            Px.rgbGreen := (fRXData.RGBA[CURSOR_SPRITE_INDEX[KMC],y*sx+x] and $FF00) shr 8;
            Px.rgbRed := fRXData.RGBA[CURSOR_SPRITE_INDEX[KMC],y*sx+x] and $FF;
            inc(Px);
          end;
        end;
        //Load hotspot offsets from RX file, adding the manual offsets (normally 0)
        IconInfo.xHotspot := Math.max(-fRXData.Pivot[CURSOR_SPRITE_INDEX[KMC]].x+CURSOR_OFFSET_X[KMC],0);
        IconInfo.yHotspot := Math.max(-fRXData.Pivot[CURSOR_SPRITE_INDEX[KMC]].y+CURSOR_OFFSET_Y[KMC],0);
      end;
  
      //Release the Mask, otherwise there is black rect in Lazarus
  