diff --git a/Source/controls/plrctrls.cpp b/Source/controls/plrctrls.cpp index ea5d472dd..01bdbf50a 100644 --- a/Source/controls/plrctrls.cpp +++ b/Source/controls/plrctrls.cpp @@ -744,15 +744,22 @@ void ResetInvCursorPosition() { Point mousePos {}; if (Slot >= SLOTXY_INV_FIRST && Slot <= SLOTXY_INV_LAST) { - int8_t itemInvId = GetItemIdOnSlot(Slot); - if (itemInvId != 0) { - mousePos = GetSlotCoord(FindFirstSlotOnItem(itemInvId)); - Size itemSize = GetItemSizeOnSlot(Slot); - mousePos.x += ((itemSize.width - 1) * InventorySlotSizeInPixels.width) / 2; - mousePos.y += ((itemSize.height - 1) * InventorySlotSizeInPixels.height) / 2; + auto slot = Slot; + Size itemSize = { 1, 1 }; + + if (MyPlayer->HoldItem.isEmpty()) { + int8_t itemInvId = GetItemIdOnSlot(Slot); + if (itemInvId != 0) { + slot = FindFirstSlotOnItem(itemInvId); + itemSize = GetItemSizeOnSlot(Slot); + } } else { - mousePos = GetSlotCoord(Slot); + itemSize = GetInventorySize(MyPlayer->HoldItem); } + + mousePos = GetSlotCoord(slot); + mousePos.x += ((itemSize.width - 1) * InventorySlotSizeInPixels.width) / 2; + mousePos.y += ((itemSize.height - 1) * InventorySlotSizeInPixels.height) / 2; } else if (Slot >= SLOTXY_BELT_FIRST && Slot <= SLOTXY_BELT_LAST) { mousePos = GetSlotCoord(Slot); } else { @@ -1198,7 +1205,7 @@ void StashMove(AxisDirection dir) Point rightPanelCoord = { GetRightPanel().position.x, stashSlotCoord.y }; Slot = FindClosestInventorySlot(rightPanelCoord, holdItem, [](Point mousePos, int slot) { Point slotPos = GetSlotCoord(slot); - // Exagerrate the vertical difference so that moving from the top 6 rows of the + // Exaggerate the vertical difference so that moving from the top 6 rows of the // stash is more likely to land on a body slot. The value 3 was found by trial and // error, this allows moving from the top row of the stash to the head while // empty-handed while 4 causes the amulet to be preferenced (due to less vertical