From d4baf2d75725776e5f35bab258b2e67f4e14dc1f Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 22 May 2011 13:06:14 +1200 Subject: [PATCH] Refactor UnitInfluence trait -> world.ActorMap --- .../World/UnitInfluence.cs => ActorMap.cs} | 22 ++++++++++------ OpenRA.Game/OpenRA.Game.csproj | 2 +- OpenRA.Game/Orders/UnitOrderGenerator.cs | 3 +-- OpenRA.Game/Traits/TraitsInterfaces.cs | 10 ------- OpenRA.Game/Traits/World/ResourceLayer.cs | 4 +-- OpenRA.Game/World.cs | 6 +++-- OpenRA.Mods.RA/Activities/LayMines.cs | 2 +- OpenRA.Mods.RA/Activities/UnloadCargo.cs | 2 +- OpenRA.Mods.RA/Air/Aircraft.cs | 2 +- OpenRA.Mods.RA/Bridge.cs | 4 +-- OpenRA.Mods.RA/Buildings/Util.cs | 2 +- OpenRA.Mods.RA/Crate.cs | 8 +++--- OpenRA.Mods.RA/CrateDrop.cs | 2 +- OpenRA.Mods.RA/CrateSpawner.cs | 2 +- OpenRA.Mods.RA/Effects/Bullet.cs | 2 +- OpenRA.Mods.RA/Effects/Missile.cs | 2 +- OpenRA.Mods.RA/Move/Mobile.cs | 26 ++++++------------- OpenRA.Mods.RA/Move/Move.cs | 2 +- OpenRA.Mods.RA/Move/PathSearch.cs | 4 +-- OpenRA.Mods.RA/Production.cs | 3 +-- .../Render/RenderBuildingWarFactory.cs | 4 +-- .../SupportPowers/ChronoshiftPower.cs | 3 +-- .../SupportPowers/IronCurtainPower.cs | 3 +-- mods/cnc/rules/system.yaml | 1 - mods/ra/rules/system.yaml | 1 - 25 files changed, 49 insertions(+), 73 deletions(-) rename OpenRA.Game/{Traits/World/UnitInfluence.cs => ActorMap.cs} (92%) diff --git a/OpenRA.Game/Traits/World/UnitInfluence.cs b/OpenRA.Game/ActorMap.cs similarity index 92% rename from OpenRA.Game/Traits/World/UnitInfluence.cs rename to OpenRA.Game/ActorMap.cs index 532428add7..a0c3337217 100644 --- a/OpenRA.Game/Traits/World/UnitInfluence.cs +++ b/OpenRA.Game/ActorMap.cs @@ -13,15 +13,21 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using OpenRA.FileFormats; +using OpenRA.Traits; -namespace OpenRA.Traits +namespace OpenRA { - public class UnitInfluenceInfo : ITraitInfo - { - public object Create( ActorInitializer init ) { return new UnitInfluence( init.world ); } - } - - public class UnitInfluence + public enum SubCell + { + FullCell, + TopLeft, + TopRight, + Center, + BottomLeft, + BottomRight + } + + public class ActorMap { class InfluenceNode { @@ -33,7 +39,7 @@ namespace OpenRA.Traits InfluenceNode[,] influence; Map map; - public UnitInfluence( World world ) + public ActorMap( World world ) { map = world.Map; influence = new InfluenceNode[world.Map.MapSize.X, world.Map.MapSize.Y]; diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index be7011fb21..1e169379b2 100755 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -136,7 +136,6 @@ - @@ -185,6 +184,7 @@ + diff --git a/OpenRA.Game/Orders/UnitOrderGenerator.cs b/OpenRA.Game/Orders/UnitOrderGenerator.cs index df0c1bfe04..04c8dd9c00 100644 --- a/OpenRA.Game/Orders/UnitOrderGenerator.cs +++ b/OpenRA.Game/Orders/UnitOrderGenerator.cs @@ -84,13 +84,12 @@ namespace OpenRA.Orders if( mi.Button == MouseButton.Right ) { - var uim = self.World.WorldActor.Trait(); foreach( var o in self.TraitsImplementing() .SelectMany( trait => trait.Orders .Select( x => new { Trait = trait, Order = x } ) ) .OrderByDescending( x => x.Order.OrderPriority ) ) { - var actorsAt = uim.GetUnitsAt( xy ).ToList(); + var actorsAt = self.World.ActorMap.GetUnitsAt( xy ).ToList(); string cursor = null; if( underCursor != null ) diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index 3864faaf05..bbaf192825 100755 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -85,16 +85,6 @@ namespace OpenRA.Traits public interface IRadarColorModifier { Color RadarColorOverride(Actor self); } public interface IHasLocation { int2 PxPosition { get; } } - public enum SubCell - { - FullCell, - TopLeft, - TopRight, - Center, - BottomLeft, - BottomRight - } - public interface IOccupySpace : IHasLocation { int2 TopLeft { get; } diff --git a/OpenRA.Game/Traits/World/ResourceLayer.cs b/OpenRA.Game/Traits/World/ResourceLayer.cs index 8de5aff5d6..9c004f7251 100644 --- a/OpenRA.Game/Traits/World/ResourceLayer.cs +++ b/OpenRA.Game/Traits/World/ResourceLayer.cs @@ -15,7 +15,7 @@ using OpenRA.Graphics; namespace OpenRA.Traits { - public class ResourceLayerInfo : TraitInfo, Requires { } + public class ResourceLayerInfo : TraitInfo { } public class ResourceLayer: IRenderOverlay, IWorldLoaded { @@ -84,7 +84,7 @@ namespace OpenRA.Traits { if (!world.Map.IsInMap(a.X, a.Y)) return false; if (!rt.info.AllowedTerrainTypes.Contains(world.GetTerrainInfo(a).Type)) return false; - if (!rt.info.AllowUnderActors && world.WorldActor.Trait().AnyUnitsAt(a)) return false; + if (!rt.info.AllowUnderActors && world.ActorMap.AnyUnitsAt(a)) return false; return true; } diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index 2c42faee26..82f3f27c10 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -55,7 +55,8 @@ namespace OpenRA public readonly Actor WorldActor; public readonly Map Map; public readonly TileSet TileSet; - + public readonly ActorMap ActorMap; + public void IssueOrder( Order o ) { orderManager.IssueOrder( o ); } /* avoid exposing the OM to mod code */ IOrderGenerator orderGenerator_; @@ -100,7 +101,8 @@ namespace OpenRA WorldActor = CreateActor( "World", new TypeDictionary() ); LocalShroud = WorldActor.Trait(); - + ActorMap = new ActorMap(this); + // Add players foreach (var cmp in WorldActor.TraitsImplementing()) cmp.CreatePlayers(this); diff --git a/OpenRA.Mods.RA/Activities/LayMines.cs b/OpenRA.Mods.RA/Activities/LayMines.cs index 9f45a1722c..9d4bba7315 100644 --- a/OpenRA.Mods.RA/Activities/LayMines.cs +++ b/OpenRA.Mods.RA/Activities/LayMines.cs @@ -70,7 +70,7 @@ namespace OpenRA.Mods.RA.Activities bool ShouldLayMine(Actor self, int2 p) { // if there is no unit (other than me) here, we want to place a mine here - return !self.World.WorldActor.Trait() + return !self.World.ActorMap .GetUnitsAt(p).Any(a => a != self); } diff --git a/OpenRA.Mods.RA/Activities/UnloadCargo.cs b/OpenRA.Mods.RA/Activities/UnloadCargo.cs index 01faedb26b..c32e5f70ad 100644 --- a/OpenRA.Mods.RA/Activities/UnloadCargo.cs +++ b/OpenRA.Mods.RA/Activities/UnloadCargo.cs @@ -22,7 +22,7 @@ namespace OpenRA.Mods.RA.Activities int2? ChooseExitTile(Actor self, Actor cargo) { // is anyone still hogging this tile? - if (self.World.WorldActor.Trait().GetUnitsAt(self.Location).Count() > 1) + if (self.World.ActorMap.GetUnitsAt(self.Location).Count() > 1) return null; var mobile = cargo.Trait(); diff --git a/OpenRA.Mods.RA/Air/Aircraft.cs b/OpenRA.Mods.RA/Air/Aircraft.cs index b3b055ae99..be2a734b3d 100755 --- a/OpenRA.Mods.RA/Air/Aircraft.cs +++ b/OpenRA.Mods.RA/Air/Aircraft.cs @@ -170,7 +170,7 @@ namespace OpenRA.Mods.RA.Air if (!self.World.Map.IsInMap(cell)) return false; - if (self.World.WorldActor.Trait().AnyUnitsAt(cell)) + if (self.World.ActorMap.AnyUnitsAt(cell)) return false; var type = self.World.GetTerrainType(cell); diff --git a/OpenRA.Mods.RA/Bridge.cs b/OpenRA.Mods.RA/Bridge.cs index 3aff7dbfb1..8cd5f6a62a 100644 --- a/OpenRA.Mods.RA/Bridge.cs +++ b/OpenRA.Mods.RA/Bridge.cs @@ -144,10 +144,8 @@ namespace OpenRA.Mods.RA void KillUnitsOnBridge() { - var uim = self.World.WorldActor.Trait(); - foreach (var c in TileSprites[currentTemplate].Keys) - foreach (var a in uim.GetUnitsAt(c)) + foreach (var a in self.World.ActorMap.GetUnitsAt(c)) if (a.HasTrait() && !a.Trait().CanEnterCell(c)) a.Kill(self); } diff --git a/OpenRA.Mods.RA/Buildings/Util.cs b/OpenRA.Mods.RA/Buildings/Util.cs index f98c6f3d1d..4ec4863c7c 100755 --- a/OpenRA.Mods.RA/Buildings/Util.cs +++ b/OpenRA.Mods.RA/Buildings/Util.cs @@ -24,7 +24,7 @@ namespace OpenRA.Mods.RA.Buildings public static bool IsCellBuildable(this World world, int2 a, bool waterBound, Actor toIgnore) { if (world.WorldActor.Trait().GetBuildingAt(a) != null) return false; - if (world.WorldActor.Trait().GetUnitsAt(a).Any(b => b != toIgnore)) return false; + if (world.ActorMap.GetUnitsAt(a).Any(b => b != toIgnore)) return false; if (waterBound) return world.Map.IsInMap(a.X,a.Y) && world.GetTerrainInfo(a).IsWater; diff --git a/OpenRA.Mods.RA/Crate.cs b/OpenRA.Mods.RA/Crate.cs index 770e50afcb..ac4404930a 100644 --- a/OpenRA.Mods.RA/Crate.cs +++ b/OpenRA.Mods.RA/Crate.cs @@ -100,17 +100,15 @@ namespace OpenRA.Mods.RA return false; if (self.World.WorldActor.Trait().GetBuildingAt(cell) != null) return false; - if (self.World.WorldActor.Trait().GetUnitsAt(cell).Any()) return false; + if (self.World.ActorMap.GetUnitsAt(cell).Any()) return false; return true; } public void SetPosition(Actor self, int2 cell) { - var uim = self.World.WorldActor.Trait(); - if( self.IsInWorld ) - uim.Remove(self, this); + self.World.ActorMap.Remove(self, this); Location = cell; PxPosition = Util.CenterOfCell(cell); @@ -121,7 +119,7 @@ namespace OpenRA.Mods.RA rs.anim.PlayRepeating(seq); if( self.IsInWorld ) - uim.Add(self, this); + self.World.ActorMap.Add(self, this); } public IEnumerable CrushClasses { get { yield return "crate"; } } diff --git a/OpenRA.Mods.RA/CrateDrop.cs b/OpenRA.Mods.RA/CrateDrop.cs index e68142456e..2b4f492732 100644 --- a/OpenRA.Mods.RA/CrateDrop.cs +++ b/OpenRA.Mods.RA/CrateDrop.cs @@ -66,7 +66,7 @@ namespace OpenRA.Mods.RA // Don't drop on any actors if (self.World.WorldActor.Trait().GetBuildingAt(p) != null) continue; - if (self.World.WorldActor.Trait().GetUnitsAt(p).Any()) continue; + if (self.World.ActorMap.GetUnitsAt(p).Any()) continue; return p; } diff --git a/OpenRA.Mods.RA/CrateSpawner.cs b/OpenRA.Mods.RA/CrateSpawner.cs index 8c8df81a8f..6e935897c9 100644 --- a/OpenRA.Mods.RA/CrateSpawner.cs +++ b/OpenRA.Mods.RA/CrateSpawner.cs @@ -64,7 +64,7 @@ namespace OpenRA.Mods.RA // Don't spawn on any actors if (self.World.WorldActor.Trait().GetBuildingAt(p) != null) continue; - if (self.World.WorldActor.Trait().GetUnitsAt(p).Any()) continue; + if (self.World.ActorMap.GetUnitsAt(p).Any()) continue; self.World.AddFrameEndTask( w => crates.Add(w.CreateActor("crate", new TypeDictionary diff --git a/OpenRA.Mods.RA/Effects/Bullet.cs b/OpenRA.Mods.RA/Effects/Bullet.cs index 4b8d550bbe..b9d8ba4110 100755 --- a/OpenRA.Mods.RA/Effects/Bullet.cs +++ b/OpenRA.Mods.RA/Effects/Bullet.cs @@ -133,7 +133,7 @@ namespace OpenRA.Mods.RA.Effects var pos = float2.Lerp(Args.src, Args.dest, at); var cell = Traits.Util.CellContaining(pos); - if (world.WorldActor.Trait().GetUnitsAt(cell).Any( + if (world.ActorMap.GetUnitsAt(cell).Any( a => a.HasTrait())) { Args.dest = pos.ToInt2(); diff --git a/OpenRA.Mods.RA/Effects/Missile.cs b/OpenRA.Mods.RA/Effects/Missile.cs index 1e14ab5af4..9f6784e5bb 100755 --- a/OpenRA.Mods.RA/Effects/Missile.cs +++ b/OpenRA.Mods.RA/Effects/Missile.cs @@ -135,7 +135,7 @@ namespace OpenRA.Mods.RA.Effects if (!Info.High) // check for hitting a wall { var cell = Traits.Util.CellContaining(PxPosition); - if (world.WorldActor.Trait().GetUnitsAt(cell).Any( + if (world.ActorMap.GetUnitsAt(cell).Any( a => a.HasTrait())) Explode(world); } diff --git a/OpenRA.Mods.RA/Move/Mobile.cs b/OpenRA.Mods.RA/Move/Mobile.cs index a8c923fe3d..47cab7ed25 100755 --- a/OpenRA.Mods.RA/Move/Mobile.cs +++ b/OpenRA.Mods.RA/Move/Mobile.cs @@ -83,15 +83,15 @@ namespace OpenRA.Mods.RA.Move {SubCell.FullCell, new int2(0,0)}, }; - public bool CanEnterCell(World world, UnitInfluence uim, int2 cell, Actor ignoreActor, bool checkTransientActors) + public bool CanEnterCell(World world, int2 cell, Actor ignoreActor, bool checkTransientActors) { if (MovementCostForCell(world, cell) == int.MaxValue) return false; - if (SharesCell && uim.HasFreeSubCell(cell)) + if (SharesCell && world.ActorMap.HasFreeSubCell(cell)) return true; - var blockingActors = uim.GetUnitsAt(cell).Where(x => x != ignoreActor).ToList(); + var blockingActors = world.ActorMap.GetUnitsAt(cell).Where(x => x != ignoreActor).ToList(); if (checkTransientActors && blockingActors.Count > 0) { // Non-sharable unit can enter a cell with shareable units only if it can crush all of them @@ -105,12 +105,6 @@ namespace OpenRA.Mods.RA.Move return true; } - - public bool CanEnterCell(World world, int2 cell, Actor ignoreActor, bool checkTransientActors) - { - var uim = world.WorldActor.Trait(); - return CanEnterCell(world, uim, cell, ignoreActor, checkTransientActors); - } } public class Mobile : IIssueOrder, IResolveOrder, IOrderVoice, IOccupySpace, IMove, IFacing, INudge, ISync @@ -163,8 +157,6 @@ namespace OpenRA.Mods.RA.Move AddInfluence(); } - UnitInfluence uim; - const int avgTicksBeforePathing = 5; const int spreadTicksBeforePathing = 5; internal int ticksBeforePathing = 0; @@ -174,7 +166,6 @@ namespace OpenRA.Mods.RA.Move this.self = init.self; this.Info = info; - uim = self.World.WorldActor.Trait(); __toSubCell = __fromSubCell = info.SharesCell ? SubCell.Center : SubCell.FullCell; if (init.Contains()) { @@ -321,7 +312,7 @@ namespace OpenRA.Mods.RA.Move return new[]{ __fromSubCell, SubCell.TopLeft, SubCell.TopRight, SubCell.Center, SubCell.BottomLeft, SubCell.BottomRight}.First(b => { - var blockingActors = uim.GetUnitsAt(a,b).Where(c => c != ignoreActor); + var blockingActors = self.World.ActorMap.GetUnitsAt(a,b).Where(c => c != ignoreActor); if (blockingActors.Count() > 0) { // Non-sharable unit can enter a cell with shareable units only if it can crush all of them @@ -343,13 +334,12 @@ namespace OpenRA.Mods.RA.Move public bool CanEnterCell(int2 cell, Actor ignoreActor, bool checkTransientActors) { - var uim = self.World.WorldActor.Trait(); - return Info.CanEnterCell(self.World, uim, cell, ignoreActor, checkTransientActors); + return Info.CanEnterCell(self.World, cell, ignoreActor, checkTransientActors); } public void FinishedMoving(Actor self) { - var crushable = uim.GetUnitsAt(toCell).Where(a => a != self && a.HasTrait()); + var crushable = self.World.ActorMap.GetUnitsAt(toCell).Where(a => a != self && a.HasTrait()); foreach (var a in crushable) { var crushActions = a.TraitsImplementing().Where(b => b.CrushClasses.Intersect(Info.Crushes).Any()); @@ -374,13 +364,13 @@ namespace OpenRA.Mods.RA.Move public void AddInfluence() { if (self.IsInWorld) - uim.Add(self, this); + self.World.ActorMap.Add(self, this); } public void RemoveInfluence() { if (self.IsInWorld) - uim.Remove(self, this); + self.World.ActorMap.Remove(self, this); } public void OnNudge(Actor self, Actor nudger) diff --git a/OpenRA.Mods.RA/Move/Move.cs b/OpenRA.Mods.RA/Move/Move.cs index f423bf0e56..c1bfd31f34 100755 --- a/OpenRA.Mods.RA/Move/Move.cs +++ b/OpenRA.Mods.RA/Move/Move.cs @@ -162,7 +162,7 @@ namespace OpenRA.Mods.RA.Move void NudgeBlocker(Actor self, int2 nextCell) { - var blocker = self.World.WorldActor.Trait().GetUnitsAt(nextCell).FirstOrDefault(); + var blocker = self.World.ActorMap.GetUnitsAt(nextCell).FirstOrDefault(); if (blocker == null) return; Log.Write("debug", "NudgeBlocker #{0} nudges #{1} at {2} from {3}", diff --git a/OpenRA.Mods.RA/Move/PathSearch.cs b/OpenRA.Mods.RA/Move/PathSearch.cs index 23cb1ec4ab..da1d3201f9 100755 --- a/OpenRA.Mods.RA/Move/PathSearch.cs +++ b/OpenRA.Mods.RA/Move/PathSearch.cs @@ -27,12 +27,10 @@ namespace OpenRA.Mods.RA.Move public bool inReverse; MobileInfo mobileInfo; - UnitInfluence uim; public PathSearch(World world, MobileInfo mobileInfo) { this.world = world; - uim = world.WorldActor.Trait(); cellInfo = InitCellInfo(); this.mobileInfo = mobileInfo; queue = new PriorityQueue(); @@ -105,7 +103,7 @@ namespace OpenRA.Mods.RA.Move if (costHere == int.MaxValue) continue; - if (!mobileInfo.CanEnterCell(world, uim, newHere, ignoreBuilding, checkForBlocked)) + if (!mobileInfo.CanEnterCell(world, newHere, ignoreBuilding, checkForBlocked)) continue; if (customBlock != null && customBlock(newHere)) diff --git a/OpenRA.Mods.RA/Production.cs b/OpenRA.Mods.RA/Production.cs index d70772c8bb..9671a2af86 100755 --- a/OpenRA.Mods.RA/Production.cs +++ b/OpenRA.Mods.RA/Production.cs @@ -121,11 +121,10 @@ namespace OpenRA.Mods.RA static bool CanUseExit(Actor self, ActorInfo producee, ExitInfo s) { - var uim = self.World.WorldActor.Trait(); var mobileInfo = producee.Traits.GetOrDefault(); return mobileInfo == null || - mobileInfo.CanEnterCell(self.World, uim, self.Location + s.ExitCell, self, true); + mobileInfo.CanEnterCell(self.World, self.Location + s.ExitCell, self, true); } } } diff --git a/OpenRA.Mods.RA/Render/RenderBuildingWarFactory.cs b/OpenRA.Mods.RA/Render/RenderBuildingWarFactory.cs index 815ae36ff9..c479ea0a5d 100755 --- a/OpenRA.Mods.RA/Render/RenderBuildingWarFactory.cs +++ b/OpenRA.Mods.RA/Render/RenderBuildingWarFactory.cs @@ -66,8 +66,8 @@ namespace OpenRA.Mods.RA.Render public override void Tick(Actor self) { base.Tick(self); - if (isOpen && !self.World.WorldActor.Trait() - .GetUnitsAt(openExit).Any( a => a != self )) + if (isOpen && !self.World.ActorMap.GetUnitsAt(openExit) + .Any( a => a != self )) { isOpen = false; roof.PlayBackwardsThen(NormalizeSequence(self, "build-top"), () => roof.Play(NormalizeSequence(self, "idle-top"))); diff --git a/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs b/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs index dc1ba292b1..f8fe418539 100755 --- a/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs +++ b/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs @@ -62,11 +62,10 @@ namespace OpenRA.Mods.RA public IEnumerable UnitsInRange(int2 xy) { int range = (Info as ChronoshiftPowerInfo).Range; - var uim = self.World.WorldActor.Trait(); var tiles = self.World.FindTilesInCircle(xy, range); var units = new List(); foreach (var t in tiles) - units.AddRange(uim.GetUnitsAt(t)); + units.AddRange(self.World.ActorMap.GetUnitsAt(t)); return units.Distinct().Where(a => a.HasTrait()); } diff --git a/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs b/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs index 674fe2d16d..77521f2937 100755 --- a/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs +++ b/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs @@ -48,11 +48,10 @@ namespace OpenRA.Mods.RA public IEnumerable UnitsInRange(int2 xy) { int range = (Info as IronCurtainPowerInfo).Range; - var uim = self.World.WorldActor.Trait(); var tiles = self.World.FindTilesInCircle(xy, range); var units = new List(); foreach (var t in tiles) - units.AddRange(uim.GetUnitsAt(t)); + units.AddRange(self.World.ActorMap.GetUnitsAt(t)); return units.Distinct().Where(a => a.HasTrait()); } diff --git a/mods/cnc/rules/system.yaml b/mods/cnc/rules/system.yaml index 4279a35d4a..d093180c4d 100644 --- a/mods/cnc/rules/system.yaml +++ b/mods/cnc/rules/system.yaml @@ -53,7 +53,6 @@ World: NukePaletteEffect: CncWaterPaletteRotation: BuildingInfluence: - UnitInfluence: BridgeLayer: Bridges: bridge1, bridge2, bridge3, bridge4 PaletteFromCurrentTileset@terrain: diff --git a/mods/ra/rules/system.yaml b/mods/ra/rules/system.yaml index 824797a5b3..3fa4487d43 100644 --- a/mods/ra/rules/system.yaml +++ b/mods/ra/rules/system.yaml @@ -107,7 +107,6 @@ World: NukePaletteEffect: LightPaletteRotator: BuildingInfluence: - UnitInfluence: ChooseBuildTabOnSelect: BridgeLayer: Bridges: bridge1, bridge2, br1, br2, br3