diff --git a/CHANGELOG b/CHANGELOG index 17990fa332..1d19909214 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -40,6 +40,7 @@ NEW: Added the BLOXXMAS terrain tiles from the 1.06 patch. Saboteur can now plant C4 on vehicles. Added concrete plates and building weathering. + Walls will now extend themselves when placed in line with a turret. Red Alert: Engineers are now remapped to team colors. Added some remap to the bottom edge of SAM sites. @@ -138,6 +139,7 @@ NEW: Maps can define initial cargo for actors by adding "Cargo: actora, actorb, ..." to the actor reference. Modified Teleport activity to use the best/closest open cell to the target destination for teleports (for ChronoshiftPower this only applies on the return trip). Renamed ChronoshiftDeploy trait to PortableChrono. + Added LineBuildNode trait to filter which structure(s) a LineBuild actor can be attached to. Server: Message of the day is now shared between all mods and a default motd.txt gets created in the user directory. Asset Browser: diff --git a/OpenRA.Mods.RA/Buildings/LineBuild.cs b/OpenRA.Mods.RA/Buildings/LineBuild.cs index 621227c4bf..9dbf1b3330 100755 --- a/OpenRA.Mods.RA/Buildings/LineBuild.cs +++ b/OpenRA.Mods.RA/Buildings/LineBuild.cs @@ -1,6 +1,6 @@ #region Copyright & License Information /* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) + * Copyright 2007-2014 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, @@ -18,6 +18,9 @@ namespace OpenRA.Mods.RA.Buildings { [Desc("The maximum allowed length of the line.")] public readonly int Range = 5; + + [Desc("LineBuildNode 'Types' to attach to.")] + public readonly string[] NodeTypes = { "wall" }; } public class LineBuild {} diff --git a/OpenRA.Mods.RA/Buildings/LineBuildNode.cs b/OpenRA.Mods.RA/Buildings/LineBuildNode.cs new file mode 100644 index 0000000000..762d39f54f --- /dev/null +++ b/OpenRA.Mods.RA/Buildings/LineBuildNode.cs @@ -0,0 +1,24 @@ +#region Copyright & License Information +/* + * Copyright 2007-2014 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using OpenRA.FileFormats; +using OpenRA.Traits; + +namespace OpenRA.Mods.RA.Buildings +{ + [Desc("LineBuild actors attach to LineBuildNodes.")] + public class LineBuildNodeInfo : TraitInfo + { + [Desc("This actor is of LineBuild 'NodeType'...")] + public readonly string[] Types = { "wall" }; + } + + public class LineBuildNode {} +} diff --git a/OpenRA.Mods.RA/Buildings/Util.cs b/OpenRA.Mods.RA/Buildings/Util.cs index acea2349b5..5bddb8def5 100755 --- a/OpenRA.Mods.RA/Buildings/Util.cs +++ b/OpenRA.Mods.RA/Buildings/Util.cs @@ -42,7 +42,7 @@ namespace OpenRA.Mods.RA.Buildings public static IEnumerable GetLineBuildCells(World world, CPos location, string name, BuildingInfo bi) { - int range = Rules.Info[name].Traits.Get().Range; + var lbi = Rules.Info[name].Traits.Get(); var topLeft = location; // 1x1 assumption! if (world.IsCellBuildable(topLeft, bi)) @@ -54,17 +54,21 @@ namespace OpenRA.Mods.RA.Buildings int[] dirs = { 0, 0, 0, 0 }; for (int d = 0; d < 4; d++) { - for (int i = 1; i < range; i++) + for (int i = 1; i < lbi.Range; i++) { if (dirs[d] != 0) continue; - CPos cell = topLeft + i * vecs[d]; + var cell = topLeft + i * vecs[d]; if (world.IsCellBuildable(cell, bi)) continue; // Cell is empty; continue search // Cell contains an actor. Is it the type we want? - if (world.ActorsWithTrait().Any(a => (a.Actor.Info.Name == name && a.Actor.Location.X == cell.X && a.Actor.Location.Y == cell.Y))) + if (world.ActorsWithTrait().Any(a => + ( + a.Actor.Location == cell && + a.Actor.Info.Traits.Get().Types.Intersect(lbi.NodeTypes).Any() + ))) dirs[d] = i; // Cell contains actor of correct type else dirs[d] = -1; // Cell is blocked by another actor type diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 8aabe63573..2e4cf02d21 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -490,6 +490,7 @@ + diff --git a/mods/cnc/rules/defaults.yaml b/mods/cnc/rules/defaults.yaml index e0cf4e9851..6ea83ba548 100644 --- a/mods/cnc/rules/defaults.yaml +++ b/mods/cnc/rules/defaults.yaml @@ -447,6 +447,9 @@ CrushSound: sandbag2.aud LineBuild: Range: 8 + NodeTypes: wall + LineBuildNode: + Types: wall RenderBuildingWall: HasMakeAnimation: false Palette: staticterrain diff --git a/mods/cnc/rules/structures.yaml b/mods/cnc/rules/structures.yaml index dbdc9308dc..e32218487b 100644 --- a/mods/cnc/rules/structures.yaml +++ b/mods/cnc/rules/structures.yaml @@ -726,6 +726,11 @@ SBAG: HP: 100 Armor: Type: Light + LineBuild: + Range: 8 + NodeTypes: sandbag + LineBuildNode: + Types: sandbag CYCL: Inherits: ^Wall @@ -745,6 +750,11 @@ CYCL: HP: 100 Armor: Type: Light + LineBuild: + Range: 8 + NodeTypes: chain + LineBuildNode: + Types: chain BRIK: Inherits: ^Wall @@ -769,6 +779,11 @@ BRIK: -CrushSound: SoundOnDamageTransition: DestroyedSound: crumble.aud + LineBuild: + Range: 8 + NodeTypes: concrete + LineBuildNode: + Types: concrete BARRACKS: Tooltip: diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index 859e4474f8..87f8da53b7 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -412,6 +412,9 @@ CONCRETEB: CrushClasses: Concretewall LineBuild: Range: 8 + NodeTypes: wall, turret + LineBuildNode: + Types: wall TargetableBuilding: TargetTypes: Ground RenderBuildingWall: @@ -478,6 +481,8 @@ WALL: DetectCloaked: Range: 5 -WithCrumbleOverlay: + LineBuildNode: + Types: turret ^ROCKETTOWER: Inherits: ^Building @@ -527,6 +532,8 @@ WALL: DetectCloaked: Range: 6 -WithCrumbleOverlay: + LineBuildNode: + Types: turret ^REPAIR: Inherits: ^Building diff --git a/mods/ra/rules/defaults.yaml b/mods/ra/rules/defaults.yaml index fbde3e6677..cb824db2aa 100644 --- a/mods/ra/rules/defaults.yaml +++ b/mods/ra/rules/defaults.yaml @@ -287,6 +287,9 @@ CrushClasses: wall LineBuild: Range: 8 + NodeTypes: wall + LineBuildNode: + Types: wall TargetableBuilding: TargetTypes: Ground, DetonateAttack RenderBuildingWall: diff --git a/mods/ra/rules/structures.yaml b/mods/ra/rules/structures.yaml index 6923902743..4d4dae93dd 100644 --- a/mods/ra/rules/structures.yaml +++ b/mods/ra/rules/structures.yaml @@ -1355,6 +1355,11 @@ SBAG: HP: 300 Armor: Type: Wood + LineBuild: + Range: 8 + NodeTypes: sandbag + LineBuildNode: + Types: sandbag FENC: Inherits: ^Wall @@ -1375,6 +1380,11 @@ FENC: HP: 300 Armor: Type: Wood + LineBuild: + Range: 8 + NodeTypes: fence + LineBuildNode: + Types: fence BRIK: Inherits: ^Wall @@ -1400,6 +1410,11 @@ BRIK: Type: Concrete Wall: CrushClasses: heavywall + LineBuild: + Range: 8 + NodeTypes: concrete + LineBuildNode: + Types: concrete CYCL: Inherits: ^Wall diff --git a/mods/ts/rules/defaults.yaml b/mods/ts/rules/defaults.yaml index 4682b7e9ef..c44f884fb3 100644 --- a/mods/ts/rules/defaults.yaml +++ b/mods/ts/rules/defaults.yaml @@ -159,6 +159,9 @@ CrushClasses: wall LineBuild: Range: 8 + NodeTypes: wall + LineBuildNode: + Types: wall SelectionDecorations: Selectable: Priority: 1