diff --git a/megamek/src/megamek/client/ui/swing/MovementDisplay.java b/megamek/src/megamek/client/ui/swing/MovementDisplay.java index e1aa624cc78..8a4acbbe917 100644 --- a/megamek/src/megamek/client/ui/swing/MovementDisplay.java +++ b/megamek/src/megamek/client/ui/swing/MovementDisplay.java @@ -813,7 +813,9 @@ private void updateButtons() { setWalkEnabled(!ce.isImmobile() && ((ce.getWalkMP() > 0) || (ce.getRunMP() > 0)) && !ce.isStuck()); - setJumpEnabled(!isAero && !ce.isImmobile() && !ce.isProne() && (ce.getJumpMP() > 0) + setJumpEnabled(!isAero && !ce.isImmobile() && !ce.isProne() + // Conventional infantry also uses jump MP for VTOL and UMU MP + && ((ce.getJumpMP() > 0) && (!ce.isConventionalInfantry() || ce.getMovementMode().isJumpInfantry())) && !(ce.isStuck() && !ce.canUnstickByJumping())); setSwimEnabled(!isAero && !ce.isImmobile() && (ce.getActiveUMUCount() > 0) && ce.isUnderwater()); diff --git a/megamek/src/megamek/common/Infantry.java b/megamek/src/megamek/common/Infantry.java index e7dd34a47ef..54376f74589 100644 --- a/megamek/src/megamek/common/Infantry.java +++ b/megamek/src/megamek/common/Infantry.java @@ -1670,7 +1670,7 @@ public void setMotorizedScuba() { @Override public String getMovementModeAsString() { - if (!hasETypeFlag(Entity.ETYPE_BATTLEARMOR)) { + if (isConventionalInfantry() && (mount == null)) { if (getMovementMode().isVTOL()) { return hasMicrolite() ? "Microlite" : "Microcopter"; } diff --git a/megamek/src/megamek/common/MoveStep.java b/megamek/src/megamek/common/MoveStep.java index 095557f606e..e181a674ac7 100644 --- a/megamek/src/megamek/common/MoveStep.java +++ b/megamek/src/megamek/common/MoveStep.java @@ -2970,7 +2970,8 @@ protected void calcMovementCostFor(Game game, MoveStep prevStep, CachedEntitySta // 0 MP infantry units can move 1 hex if (isInfantry && (cachedEntityState.getWalkMP() == 0) - && (moveMode != EntityMovementMode.SUBMARINE) + && !moveMode.isSubmarine() + && !moveMode.isVTOL() && getEntity().getPosition().equals(prev) && (getEntity().getPosition().distance(getPosition()) == 1) && (!isJumping())) { diff --git a/megamek/src/megamek/common/pathfinder/InfantryPathFinder.java b/megamek/src/megamek/common/pathfinder/InfantryPathFinder.java index 8e2af0e27f3..21fc0e895e1 100644 --- a/megamek/src/megamek/common/pathfinder/InfantryPathFinder.java +++ b/megamek/src/megamek/common/pathfinder/InfantryPathFinder.java @@ -106,9 +106,15 @@ private List generateChildren(MovePath startingPath) { // we've visited this hex already // we are walking and at or past our movement mp // we are jumping and at or past our jump mp - if (visitedCoords.contains(startingPath.getFinalCoords()) || - (!startingPath.isJumping() && (startingPath.getMpUsed() >= startingPath.getEntity().getRunMP()))|| - (startingPath.isJumping() && (startingPath.getMpUsed() >= startingPath.getEntity().getJumpMP()))) { + int mp; + if (startingPath.isJumping() || startingPath.getEntity().getMovementMode().isVTOL()) { + mp = startingPath.getEntity().getJumpMP(); + } else if (startingPath.getEntity().hasUMU()) { + mp = startingPath.getEntity().getActiveUMUCount(); + } else { + mp = startingPath.getEntity().getRunMP(); + } + if (visitedCoords.contains(startingPath.getFinalCoords()) || (startingPath.getMpUsed() >= mp)) { return retval; }