Skip to content

Commit 5758e56

Browse files
ephphathaAJenbo
authored andcommitted
allow auto-equipping two-handed weapons with both hands occupied
specifically where the larger item is in the right hand, this would fail previously in certain circumstances.
1 parent 1b32872 commit 5758e56

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

Source/inv.cpp

+15-10
Original file line numberDiff line numberDiff line change
@@ -837,20 +837,25 @@ void CheckInvCut(Player &player, Point cursorPosition, bool automaticMove, bool
837837
// the left hand), invloc isn't used there.
838838
invloc = INVLOC_HAND_RIGHT;
839839
} else {
840-
// Both hands are holding items, we must unequip the right hand item and check that there's
841-
// space for the left before trying to auto-equip
842-
if (!AutoPlaceItemInInventory(player, player.InvBody[INVLOC_HAND_RIGHT])) {
843-
// No space to move right hand item to inventory, abort.
844-
break;
840+
// Both hands are holding items, we must unequip one of the items and check that there's
841+
// space for the other before trying to auto-equip
842+
inv_body_loc mainHand = INVLOC_HAND_LEFT;
843+
inv_body_loc offHand = INVLOC_HAND_RIGHT;
844+
if (!AutoPlaceItemInInventory(player, player.InvBody[offHand])) {
845+
// No space to move right hand item to inventory, can we move the left instead?
846+
std::swap(mainHand, offHand);
847+
if (!AutoPlaceItemInInventory(player, player.InvBody[offHand])) {
848+
break;
849+
}
845850
}
846-
if (!CouldFitItemInInventory(player, player.InvBody[INVLOC_HAND_LEFT], iv)) {
847-
// No space for left item. Move back right item to right hand and abort.
848-
player.InvBody[INVLOC_HAND_RIGHT] = player.InvList[player._pNumInv - 1];
851+
if (!CouldFitItemInInventory(player, player.InvBody[mainHand], iv)) {
852+
// No space for the main hand item. Move the other item back to the off hand and abort.
853+
player.InvBody[offHand] = player.InvList[player._pNumInv - 1];
849854
player.RemoveInvItem(player._pNumInv - 1, false);
850855
break;
851856
}
852-
RemoveEquipment(player, INVLOC_HAND_RIGHT, false);
853-
invloc = INVLOC_HAND_LEFT;
857+
RemoveEquipment(player, offHand, false);
858+
invloc = mainHand;
854859
}
855860
break;
856861
default:

0 commit comments

Comments
 (0)