Add a lobby option to disable Concrete in D2k.

This commit is contained in:
Mustafa Alperen Seki
2020-08-25 13:44:47 +03:00
committed by abcdefg30
parent 7372da150a
commit be88c33399
4 changed files with 28 additions and 5 deletions

View File

@@ -25,6 +25,9 @@ namespace OpenRA.Mods.D2k.Traits
[Desc("Terrain types that should show the 'unsafe' footprint tile.")]
public readonly HashSet<string> UnsafeTerrainTypes = new HashSet<string> { "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<OwnerInit>().Value(world).PlayerActor.Trait<TechTree>();
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;

View File

@@ -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

View File

@@ -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:

View File

@@ -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