diff --git a/OpenRA.Mods.Common/Effects/Bullet.cs b/OpenRA.Mods.Common/Effects/Bullet.cs index bef851c0da..e8576b3078 100644 --- a/OpenRA.Mods.Common/Effects/Bullet.cs +++ b/OpenRA.Mods.Common/Effects/Bullet.cs @@ -177,11 +177,13 @@ namespace OpenRA.Mods.Common.Effects if (anim == null || ticks >= length) yield break; - if (!args.SourceActor.World.FogObscures(pos)) + var world = args.SourceActor.World; + if (!world.FogObscures(pos)) { if (info.Shadow) { - var shadowPos = pos - new WVec(0, 0, pos.Z); + var dat = world.Map.DistanceAboveTerrain(pos); + var shadowPos = pos - new WVec(0, 0, dat.Length); foreach (var r in anim.Render(shadowPos, wr.Palette(info.ShadowPalette))) yield return r; } diff --git a/OpenRA.Mods.Common/Effects/GravityBomb.cs b/OpenRA.Mods.Common/Effects/GravityBomb.cs index 0a3bb40a08..196053eb50 100644 --- a/OpenRA.Mods.Common/Effects/GravityBomb.cs +++ b/OpenRA.Mods.Common/Effects/GravityBomb.cs @@ -84,11 +84,13 @@ namespace OpenRA.Mods.Common.Effects public IEnumerable Render(WorldRenderer wr) { - if (!args.SourceActor.World.FogObscures(pos)) + var world = args.SourceActor.World; + if (!world.FogObscures(pos)) { if (info.Shadow) { - var shadowPos = pos - new WVec(0, 0, pos.Z); + var dat = world.Map.DistanceAboveTerrain(pos); + var shadowPos = pos - new WVec(0, 0, dat.Length); foreach (var r in anim.Render(shadowPos, wr.Palette("shadow"))) yield return r; } diff --git a/OpenRA.Mods.Common/Effects/Missile.cs b/OpenRA.Mods.Common/Effects/Missile.cs index bfd59ea81c..e621d0245f 100644 --- a/OpenRA.Mods.Common/Effects/Missile.cs +++ b/OpenRA.Mods.Common/Effects/Missile.cs @@ -227,11 +227,13 @@ namespace OpenRA.Mods.Common.Effects if (info.ContrailLength > 0) yield return contrail; - if (!args.SourceActor.World.FogObscures(pos)) + var world = args.SourceActor.World; + if (!world.FogObscures(pos)) { if (info.Shadow) { - var shadowPos = new WPos(pos.X, pos.Y, 0); + var dat = world.Map.DistanceAboveTerrain(pos); + var shadowPos = new WPos(pos.X, pos.Y, dat.Length); foreach (var r in anim.Render(shadowPos, wr.Palette("shadow"))) yield return r; }