diff --git a/OpenRA.Mods.Common/Activities/Move/Move.cs b/OpenRA.Mods.Common/Activities/Move/Move.cs index 86c72b4504..d19e461baf 100644 --- a/OpenRA.Mods.Common/Activities/Move/Move.cs +++ b/OpenRA.Mods.Common/Activities/Move/Move.cs @@ -451,7 +451,13 @@ namespace OpenRA.Mods.Common.Activities if (progress >= Distance) { - mobile.SetCenterPosition(self, To); + var toPos = To; + + // apply ramp offset to ground units + if (MovingOnGroundLayer) + toPos -= new WVec(WDist.Zero, WDist.Zero, self.World.Map.DistanceAboveTerrain(toPos)); + mobile.SetCenterPosition(self, toPos); + mobile.Facing = TurnsWhileMoving ? Util.TickFacing(mobile.Facing, ToFacing, mobile.TurnSpeed) : ToFacing; diff --git a/OpenRA.Mods.Common/Traits/Mobile.cs b/OpenRA.Mods.Common/Traits/Mobile.cs index bca9fa82a9..68a1b3e809 100644 --- a/OpenRA.Mods.Common/Traits/Mobile.cs +++ b/OpenRA.Mods.Common/Traits/Mobile.cs @@ -471,8 +471,10 @@ namespace OpenRA.Mods.Common.Traits var position = cell.Layer == 0 ? self.World.Map.CenterOfCell(cell) : self.World.GetCustomMovementLayers()[cell.Layer].CenterOfCell(cell); - var subcellOffset = self.World.Map.Grid.OffsetOfSubCell(subCell); - SetCenterPosition(self, position + subcellOffset); + position += self.World.Map.Grid.OffsetOfSubCell(subCell); + position -= new WVec(0, 0, self.World.Map.DistanceAboveTerrain(position).Length); + + SetCenterPosition(self, position); FinishedMoving(self); }