anchor.diff:              end
               else
               // Ensure down click was successful (could have been over a mountain, then dragged to a walkable location)
  -            if SelectingTroopDirection and group.CanWalkTo(P, 0) then
  +            if fSelectingTroopDirection and group.CanWalkTo(P, 0) then
               begin
  -              gGame.GameInputProcess.CmdArmy(gicArmyWalk, group, P, SelectedDirection);
  +              gGame.GameInputProcess.CmdArmy(gicArmyWalk, group, P, fSelectedDirection);
                 gSoundPlayer.PlayWarrior(group.UnitType, spMove);
               end;
             end;
  
positive.code:     fPlayMoreMsg: TKMGameResultMsg; // Remember which message we are showing
      fPlacingBeacon: Boolean;
      fNetWaitDropPlayersDelayStarted: Cardinal;
      SelectedDirection: TKMDirection;
      SelectingTroopDirection: Boolean;
      SelectingDirPosition: TPoint;
      fSaves: TKMSavesCollection;
      fUnitsTeamNames: TList<TKMUnit>;
      fGroupsTeamNames: TList<TKMUnitGroup>;
  
negative.code: 
    if gGame.IsPaused and (fUIMode in [umSP, umMP]) then Exit;
  
    if fSelectingTroopDirection then
    begin
      deltaX := X - fSelectingDirPosition.X;
      deltaY := Y - fSelectingDirPosition.Y;
      deltaDistanceSqr := Sqr(deltaX) + Sqr(deltaY);
      // Manually force the cursor to remain within a circle (+2 to avoid infinite loop due to rounding)
      if deltaDistanceSqr > Sqr(DIR_CURSOR_CIRCLE_RAD + 2) then
      begin
        deltaX := Round(deltaX / Sqrt(deltaDistanceSqr) * DIR_CURSOR_CIRCLE_RAD);
        deltaY := Round(deltaY / Sqrt(deltaDistanceSqr) * DIR_CURSOR_CIRCLE_RAD);
        newPoint := gMain.ClientToScreen(fSelectingDirPosition);
        newPoint.X := newPoint.X + deltaX;
        newPoint.Y := newPoint.Y + deltaY;
        SetCursorPos(newPoint.X, newPoint.Y);
      end;
  
      // Compare cursor position and decide which direction it is
      fSelectedDirection := KMGetDirection(deltaX, deltaY, DIR_CURSOR_NA_RAD);
      // Update the cursor based on this direction and negate the offset
      DirectionCursorShow(fSelectingDirPosition.X, fSelectingDirPosition.Y, fSelectedDirection);
      gRes.Cursors.Cursor := kmcInvisible; // Keep it invisible, just in case
      Exit;
    end;
  