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.")] [Desc("Terrain types that should show the 'unsafe' footprint tile.")]
public readonly HashSet<string> UnsafeTerrainTypes = new HashSet<string> { "Rock" }; 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) protected override IPlaceBuildingPreview CreatePreview(WorldRenderer wr, ActorInfo ai, TypeDictionary init)
{ {
return new D2kActorPreviewPlaceBuildingPreviewPreview(wr, ai, this, init); return new D2kActorPreviewPlaceBuildingPreviewPreview(wr, ai, this, init);
@@ -41,6 +44,7 @@ namespace OpenRA.Mods.D2k.Traits
class D2kActorPreviewPlaceBuildingPreviewPreview : ActorPreviewPlaceBuildingPreviewPreview class D2kActorPreviewPlaceBuildingPreviewPreview : ActorPreviewPlaceBuildingPreviewPreview
{ {
readonly D2kActorPreviewPlaceBuildingPreviewInfo info; readonly D2kActorPreviewPlaceBuildingPreviewInfo info;
readonly bool checkUnsafeTiles;
readonly Sprite buildOk; readonly Sprite buildOk;
readonly Sprite buildUnsafe; readonly Sprite buildUnsafe;
readonly Sprite buildBlocked; readonly Sprite buildBlocked;
@@ -54,6 +58,9 @@ namespace OpenRA.Mods.D2k.Traits
var world = wr.World; var world = wr.World;
var sequences = world.Map.Rules.Sequences; 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); buildOk = sequences.GetSequence("overlay", "build-valid").GetSprite(0);
buildUnsafe = sequences.GetSequence("overlay", "build-unsafe").GetSprite(0); buildUnsafe = sequences.GetSequence("overlay", "build-unsafe").GetSprite(0);
buildBlocked = sequences.GetSequence("overlay", "build-invalid").GetSprite(0); buildBlocked = sequences.GetSequence("overlay", "build-invalid").GetSprite(0);
@@ -76,7 +83,7 @@ namespace OpenRA.Mods.D2k.Traits
continue; continue;
var tile = HasFlag(c.Value, PlaceBuildingCellType.Invalid) ? buildBlocked : 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; ? buildUnsafe : buildOk;
var pal = HasFlag(c.Value, PlaceBuildingCellType.LineBuild) ? linePalette : cellPalette; var pal = HasFlag(c.Value, PlaceBuildingCellType.LineBuild) ? linePalette : cellPalette;

View File

@@ -410,6 +410,7 @@
TerrainTypes: Rock, Concrete TerrainTypes: Rock, Concrete
BuildSounds: BUILD1.WAV BuildSounds: BUILD1.WAV
D2kActorPreviewPlaceBuildingPreview: D2kActorPreviewPlaceBuildingPreview:
RequiresPrerequisites: !global-auto-concrete
OverridePalette: placebuilding OverridePalette: placebuilding
RequiresBuildableArea: RequiresBuildableArea:
AreaTypes: building AreaTypes: building
@@ -447,12 +448,20 @@
SellSounds: BUILD1.WAV SellSounds: BUILD1.WAV
Guardable: Guardable:
Range: 3c0 Range: 3c0
GrantConditionOnPrerequisite@AUTOCONCRETE:
Condition: auto-concrete
Prerequisites: global-auto-concrete
DamagedByTerrain: DamagedByTerrain:
RequiresCondition: !auto-concrete
Damage: 500 Damage: 500
DamageInterval: 100 DamageInterval: 100
Terrain: Rock Terrain: Rock
DamageThreshold: 50 DamageThreshold: 50
StartOnThreshold: true StartOnThreshold: true
LaysTerrain:
RequiresCondition: auto-concrete
TerrainTypes: Rock
Template: 88
ThrowsShrapnel: ThrowsShrapnel:
Weapons: Debris, Debris2, Debris3, Debris4 Weapons: Debris, Debris2, Debris3, Debris4
Pieces: 2, 5 Pieces: 2, 5

View File

@@ -98,10 +98,17 @@ Player:
CashTickUpNotification: CashTickUp CashTickUpNotification: CashTickUp
CashTickDownNotification: CashTickDown CashTickDownNotification: CashTickDown
DeveloperMode: DeveloperMode:
CheckboxDisplayOrder: 7 CheckboxDisplayOrder: 8
BaseAttackNotifier: BaseAttackNotifier:
Shroud: Shroud:
FogCheckboxDisplayOrder: 3 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: FrozenActorLayer:
HarvesterAttackNotifier: HarvesterAttackNotifier:
PlayerStatistics: PlayerStatistics:

View File

@@ -34,6 +34,7 @@ concretea:
Cost: 20 Cost: 20
Buildable: Buildable:
BuildPaletteOrder: 110 BuildPaletteOrder: 110
Prerequisites: ~!global-auto-concrete
BuildDuration: 62 BuildDuration: 62
BuildDurationModifier: 100 BuildDurationModifier: 100
@@ -48,7 +49,7 @@ concreteb:
Cost: 50 Cost: 50
Buildable: Buildable:
BuildPaletteOrder: 210 BuildPaletteOrder: 210
Prerequisites: upgrade.conyard Prerequisites: upgrade.conyard, ~!global-auto-concrete
BuildDuration: 94 BuildDuration: 94
BuildDurationModifier: 100 BuildDurationModifier: 100
@@ -64,8 +65,7 @@ construction_yard:
Dimensions: 3,3 Dimensions: 3,3
LocalCenterOffset: 0,-512,0 LocalCenterOffset: 0,-512,0
LaysTerrain: LaysTerrain:
TerrainTypes: Rock -RequiresCondition:
Template: 88
WithBuildingBib: WithBuildingBib:
Selectable: Selectable:
Bounds: 96,64 Bounds: 96,64