diff --git a/OpenRA.Mods.Common/Traits/Crates/DuplicateUnitCrateAction.cs b/OpenRA.Mods.Common/Traits/Crates/DuplicateUnitCrateAction.cs index ece58e17e6..ba20c0ad1b 100644 --- a/OpenRA.Mods.Common/Traits/Crates/DuplicateUnitCrateAction.cs +++ b/OpenRA.Mods.Common/Traits/Crates/DuplicateUnitCrateAction.cs @@ -101,11 +101,15 @@ namespace OpenRA.Mods.Common.Traits for (var i = 0; i < duplicates; i++) { - w.CreateActor(collector.Info.Name, new TypeDictionary + var actor = w.CreateActor(collector.Info.Name, new TypeDictionary { new LocationInit(candidateCells[i]), new OwnerInit(info.Owner ?? collector.Owner.InternalName) }); + + // Set the subcell and make sure to crush actors beneath. + var positionable = actor.OccupiesSpace as IPositionable; + positionable.SetPosition(actor, actor.Location, positionable.GetAvailableSubCell(actor.Location, ignoreActor: actor)); } }); diff --git a/OpenRA.Mods.Common/Traits/Crates/GiveUnitCrateAction.cs b/OpenRA.Mods.Common/Traits/Crates/GiveUnitCrateAction.cs index 71536e73b2..05eabd013d 100644 --- a/OpenRA.Mods.Common/Traits/Crates/GiveUnitCrateAction.cs +++ b/OpenRA.Mods.Common/Traits/Crates/GiveUnitCrateAction.cs @@ -83,11 +83,15 @@ namespace OpenRA.Mods.Common.Traits var location = ChooseEmptyCellNear(collector, unit); if (location != null) { - w.CreateActor(unit, new TypeDictionary + var actor = w.CreateActor(unit, new TypeDictionary { new LocationInit(location.Value), new OwnerInit(info.Owner ?? collector.Owner.InternalName) }); + + // Set the subcell and make sure to crush actors beneath. + var positionable = actor.OccupiesSpace as IPositionable; + positionable.SetPosition(actor, location.Value, positionable.GetAvailableSubCell(location.Value, ignoreActor: actor)); } } });