diff --git a/OpenRA.Game/Map/Map.cs b/OpenRA.Game/Map/Map.cs index bc9912addb4b..aa4cc214f1ee 100644 --- a/OpenRA.Game/Map/Map.cs +++ b/OpenRA.Game/Map/Map.cs @@ -821,7 +821,14 @@ public WDist DistanceAboveTerrain(WPos pos) { var cell = CellContaining(pos); var delta = pos - CenterOfCell(cell); - return new WDist(delta.Z); + + // No correction is needed for flat ground + var ti = Rules.TileSet.GetTileInfo(Tiles[cell]); + if (ti == null || ti.RampType == 0) + return new WDist(delta.Z); + + // Apply ramp offset + return Grid.Ramps[ti.RampType].DistanceAboveTerrain(delta); } public WVec Offset(CVec delta, int dz) diff --git a/OpenRA.Mods.Common/Activities/Move/Move.cs b/OpenRA.Mods.Common/Activities/Move/Move.cs index 5fb74f87add0..00757f93cc74 100644 --- a/OpenRA.Mods.Common/Activities/Move/Move.cs +++ b/OpenRA.Mods.Common/Activities/Move/Move.cs @@ -464,6 +464,7 @@ void UpdateCenterLocation(Actor self, Mobile mobile) else pos = WPos.Lerp(From, To, moveFraction, MoveFractionTotal); + pos -= new WVec(WDist.Zero, WDist.Zero, self.World.Map.DistanceAboveTerrain(pos)); mobile.SetVisualPosition(self, pos); } else