diff --git a/OpenRA.Mods.D2k/Traits/Buildings/D2kActorPreviewPlaceBuildingPreview.cs b/OpenRA.Mods.D2k/Traits/Buildings/D2kActorPreviewPlaceBuildingPreview.cs index 858ce441db..df233d26a1 100644 --- a/OpenRA.Mods.D2k/Traits/Buildings/D2kActorPreviewPlaceBuildingPreview.cs +++ b/OpenRA.Mods.D2k/Traits/Buildings/D2kActorPreviewPlaceBuildingPreview.cs @@ -25,6 +25,9 @@ namespace OpenRA.Mods.D2k.Traits [Desc("Terrain types that should show the 'unsafe' footprint tile.")] public readonly HashSet UnsafeTerrainTypes = new HashSet { "Rock" }; + [Desc("Only check for 'unsafe' footprint tiles when you have these prerequisites.")] + public readonly string[] RequiresPrerequisites = { }; + protected override IPlaceBuildingPreview CreatePreview(WorldRenderer wr, ActorInfo ai, TypeDictionary init) { return new D2kActorPreviewPlaceBuildingPreviewPreview(wr, ai, this, init); @@ -41,6 +44,7 @@ namespace OpenRA.Mods.D2k.Traits class D2kActorPreviewPlaceBuildingPreviewPreview : ActorPreviewPlaceBuildingPreviewPreview { readonly D2kActorPreviewPlaceBuildingPreviewInfo info; + readonly bool checkUnsafeTiles; readonly Sprite buildOk; readonly Sprite buildUnsafe; readonly Sprite buildBlocked; @@ -54,6 +58,9 @@ namespace OpenRA.Mods.D2k.Traits var world = wr.World; var sequences = world.Map.Rules.Sequences; + var techTree = init.Get().Value(world).PlayerActor.Trait(); + checkUnsafeTiles = info.RequiresPrerequisites.Any() && techTree.HasPrerequisites(info.RequiresPrerequisites); + buildOk = sequences.GetSequence("overlay", "build-valid").GetSprite(0); buildUnsafe = sequences.GetSequence("overlay", "build-unsafe").GetSprite(0); buildBlocked = sequences.GetSequence("overlay", "build-invalid").GetSprite(0); @@ -76,7 +83,7 @@ namespace OpenRA.Mods.D2k.Traits continue; var tile = HasFlag(c.Value, PlaceBuildingCellType.Invalid) ? buildBlocked : - candidateSafeTiles.Contains(c.Key) && info.UnsafeTerrainTypes.Contains(wr.World.Map.GetTerrainInfo(c.Key).Type) + (checkUnsafeTiles && candidateSafeTiles.Contains(c.Key) && info.UnsafeTerrainTypes.Contains(wr.World.Map.GetTerrainInfo(c.Key).Type)) ? buildUnsafe : buildOk; var pal = HasFlag(c.Value, PlaceBuildingCellType.LineBuild) ? linePalette : cellPalette; diff --git a/mods/d2k/rules/defaults.yaml b/mods/d2k/rules/defaults.yaml index 8aada48dfb..d975229cfb 100644 --- a/mods/d2k/rules/defaults.yaml +++ b/mods/d2k/rules/defaults.yaml @@ -410,6 +410,7 @@ TerrainTypes: Rock, Concrete BuildSounds: BUILD1.WAV D2kActorPreviewPlaceBuildingPreview: + RequiresPrerequisites: !global-auto-concrete OverridePalette: placebuilding RequiresBuildableArea: AreaTypes: building @@ -447,12 +448,20 @@ SellSounds: BUILD1.WAV Guardable: Range: 3c0 + GrantConditionOnPrerequisite@AUTOCONCRETE: + Condition: auto-concrete + Prerequisites: global-auto-concrete DamagedByTerrain: + RequiresCondition: !auto-concrete Damage: 500 DamageInterval: 100 Terrain: Rock DamageThreshold: 50 StartOnThreshold: true + LaysTerrain: + RequiresCondition: auto-concrete + TerrainTypes: Rock + Template: 88 ThrowsShrapnel: Weapons: Debris, Debris2, Debris3, Debris4 Pieces: 2, 5 diff --git a/mods/d2k/rules/player.yaml b/mods/d2k/rules/player.yaml index f9322a150a..abeb85deb9 100644 --- a/mods/d2k/rules/player.yaml +++ b/mods/d2k/rules/player.yaml @@ -98,10 +98,17 @@ Player: CashTickUpNotification: CashTickUp CashTickDownNotification: CashTickDown DeveloperMode: - CheckboxDisplayOrder: 7 + CheckboxDisplayOrder: 8 BaseAttackNotifier: Shroud: FogCheckboxDisplayOrder: 3 + LobbyPrerequisiteCheckbox@AUTOCONCRETE: + ID: autoconcrete + Label: Automatic Concrete + Description: Concrete foundations are automatically created beneath buildings + Enabled: False + DisplayOrder: 7 + Prerequisites: global-auto-concrete FrozenActorLayer: HarvesterAttackNotifier: PlayerStatistics: diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index f4129d80f1..be1fec0986 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -34,6 +34,7 @@ concretea: Cost: 20 Buildable: BuildPaletteOrder: 110 + Prerequisites: ~!global-auto-concrete BuildDuration: 62 BuildDurationModifier: 100 @@ -48,7 +49,7 @@ concreteb: Cost: 50 Buildable: BuildPaletteOrder: 210 - Prerequisites: upgrade.conyard + Prerequisites: upgrade.conyard, ~!global-auto-concrete BuildDuration: 94 BuildDurationModifier: 100 @@ -64,8 +65,7 @@ construction_yard: Dimensions: 3,3 LocalCenterOffset: 0,-512,0 LaysTerrain: - TerrainTypes: Rock - Template: 88 + -RequiresCondition: WithBuildingBib: Selectable: Bounds: 96,64