diff --git a/OpenRA.Mods.CA/Traits/MindController.cs b/OpenRA.Mods.CA/Traits/MindController.cs index 63a30070e8..221a92ef69 100644 --- a/OpenRA.Mods.CA/Traits/MindController.cs +++ b/OpenRA.Mods.CA/Traits/MindController.cs @@ -455,7 +455,7 @@ void UpdateCapacity(Actor self) var newCapacity = info.Capacity; // Modifiers have no effect if the base capacity is unlimited. - if (info.Capacity == 0) + if (info.Capacity <= 0) return; foreach (var capacityModifier in capacityModifiers) diff --git a/OpenRA.Mods.CA/Traits/PortableChronoCA.cs b/OpenRA.Mods.CA/Traits/PortableChronoCA.cs index 5cbeda1c80..ab7dcf78fb 100644 --- a/OpenRA.Mods.CA/Traits/PortableChronoCA.cs +++ b/OpenRA.Mods.CA/Traits/PortableChronoCA.cs @@ -357,7 +357,7 @@ public PortableChronoOrderGenerator(Actor self, PortableChronoCA portableChrono) info = portableChrono.Info; selectedWithAbility = self.World.Selection.Actors - .Where(a => a.Info.HasTraitInfo() && a != self && a.Owner == self.Owner) + .Where(a => a.Info.HasTraitInfo() && a != self && a.Owner == self.Owner && !a.IsDead) .Select(a => new TraitPair(a, a.Trait())); } diff --git a/OpenRA.Mods.CA/Widgets/ExternalLinkButtonWidget.cs b/OpenRA.Mods.CA/Widgets/ExternalLinkButtonWidget.cs index 56a16541ed..b902116adf 100644 --- a/OpenRA.Mods.CA/Widgets/ExternalLinkButtonWidget.cs +++ b/OpenRA.Mods.CA/Widgets/ExternalLinkButtonWidget.cs @@ -40,7 +40,7 @@ public override void MouseEntered() public override void MouseExited() { - base.MouseEntered(); + base.MouseExited(); hovering = false; } diff --git a/mods/ca/maps/ca07-subversion/ca07.lua b/mods/ca/maps/ca07-subversion/ca07.lua index 377046cc2e..9be35bf690 100644 --- a/mods/ca/maps/ca07-subversion/ca07.lua +++ b/mods/ca/maps/ca07-subversion/ca07.lua @@ -94,7 +94,7 @@ WorldLoaded = function() end) end - local revealPoints = { EntranceReveal1, EntranceReveal2, EntranceReveal3, EntranceReveal4, BridgeDefendersReveal1, BridgeDefendersReveal2 } + local revealPoints = { EntranceReveal1, EntranceReveal2, EntranceReveal3, EntranceReveal4, BridgeDefendersReveal1, BridgeDefendersReveal2, EmpDroneReveal } Utils.Do(revealPoints, function(p) Trigger.OnEnteredProximityTrigger(p.CenterPosition, WDist.New(11 * 1024), function(a, id) if a.Owner == Nod and a.Type ~= "smallcamera" then @@ -103,6 +103,10 @@ WorldLoaded = function() BridgeTipShown = true Tip("Too many guards up ahead. Find a way to neutralise them.") end + if Difficulty ~= "hard" and p == EmpDroneReveal and not EmpDroneTipShown then + EmpDroneTipShown = true + Media.DisplayMessage("That E.M.P Drone could come in handy.", "Hacker", HSLColor.FromHex("00FF00")) + end local camera = Actor.Create("smallcamera", true, { Owner = Nod, Location = p.Location }) Trigger.AfterDelay(DateTime.Seconds(4), function() camera.Destroy() diff --git a/mods/ca/maps/ca07-subversion/map.yaml b/mods/ca/maps/ca07-subversion/map.yaml index a632a0c463..058d7fbcc9 100644 --- a/mods/ca/maps/ca07-subversion/map.yaml +++ b/mods/ca/maps/ca07-subversion/map.yaml @@ -4374,6 +4374,9 @@ Actors: BridgeDefendersReveal2: waypoint Owner: Neutral Location: 72,42 + EmpDroneReveal: waypoint + Owner: Neutral + Location: 37,36 Rules: ca|rules/campaign-rules.yaml, ca|rules/campaign-tooltips.yaml, ca|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ca/maps/ca25-singularity/map.yaml b/mods/ca/maps/ca25-singularity/map.yaml index c5835dbbbb..44eedde41e 100644 --- a/mods/ca/maps/ca25-singularity/map.yaml +++ b/mods/ca/maps/ca25-singularity/map.yaml @@ -5002,7 +5002,7 @@ Actors: Location: 120,63 HackerDropLanding: waypoint Owner: Neutral - Location: 124,99 + Location: 124,103 WestAttackNode2: waypoint Owner: Neutral Location: 27,59 diff --git a/mods/ca/maps/tfca/tfca-rules-base.yaml b/mods/ca/maps/tfca/tfca-rules-base.yaml index 5c0248231d..962d476e3d 100644 --- a/mods/ca/maps/tfca/tfca-rules-base.yaml +++ b/mods/ca/maps/tfca/tfca-rules-base.yaml @@ -184,6 +184,11 @@ SPAWN: Delay: 25 StartIfBelow: 100 RequiresCondition: shielded + FirepowerMultiplier@ENGIBUFF: + RequiresCondition: engibuff + Modifier: 115 + ExternalCondition@ENGIBUFF: + Condition: engibuff XO: Inherits@TFUNIT: ^TFUnit @@ -287,6 +292,13 @@ E3: Modifier: 40 -ReloadDelayMultiplier@FRENZYDEBUFF: -SpeedMultiplier@FRENZYDEBUFF: + GrantConditionOnBotOwner@ISBOT: + Bots: bot + Condition: is-bot + AutoTargetPriority@BOTPRIO: + RequiresCondition: is-bot + ValidTargets: Defense + Priority: 10 MEDI: Inherits@TFUNIT: ^TFUnit @@ -327,7 +339,7 @@ E4: TooltipExtras: Strengths: • High sustained damage Weaknesses: • Short range - Attributes: • Pyroblast ability + Attributes: • Pyroblast ability\n• Impervious to fire Mobile: Speed: 100 RevealsShroud: @@ -369,6 +381,8 @@ E4: Count: 1 ShowSelectionBar: true SelectionBarColor: ff6600 + Targetable@FIREPROOF: + TargetTypes: Fireproof SEAL: Inherits@TFUNIT: ^TFUnit @@ -427,7 +441,7 @@ E6: BuildPaletteOrder: 9 TooltipExtras: Weaknesses: • Unarmed - Attributes: • Detects mines + Attributes: • Detects mines\n• Nearby allies deal 15% more damage Mobile: Speed: 100 RevealsShroud: @@ -486,6 +500,14 @@ E6: DetectCloaked: Range: 5c0 DetectionTypes: Mine + WithRangeCircle: + Color: ffff00aa + Range: 3c512 + ValidRelationships: Ally + ProximityExternalCondition@ENGIBUFF: + Range: 3c512 + Condition: engibuff + ValidRelationships: Ally SAB: Inherits@TFUNIT: ^TFUnit @@ -572,12 +594,13 @@ IVAN: Bots: bot Condition: is-bot Armament@PRIMARY: - PauseOnCondition: reloading + RequiresCondition: !is-bot Armament@PRIMARYBOT: PauseOnCondition: reloading Weapon: BotIvanbomb LocalOffset: 0,0,555 FireDelay: 15 + RequiresCondition: is-bot Armament@PRIMARYBOTDEF: Weapon: BotIvanbombDef LocalOffset: 0,0,555 @@ -587,7 +610,6 @@ IVAN: AutoTargetPriority@DEFAULTDEF: RequiresCondition: is-bot ValidTargets: Defense - InvalidTargets: NoAutoTarget Priority: 10 SNIP: @@ -598,7 +620,7 @@ SNIP: TooltipExtras: Strengths: • Long range\n• High single-target damage Weaknesses: • Fragile\n• Slow - Attributes: + Attributes: • Must aim before shooting Mobile: Speed: 75 RevealsShroud: @@ -702,6 +724,14 @@ HQ: -BeingCapturedCondition: -RangedGpsRadarProvider: -WithRangeCircle: + -SpawnActorPowerCA@sathack: + -SpawnActorPowerCA@sathacklegion: + -ProduceActorPowerCA@hackercell: + -ProduceActorPowerCA@hackercellAI: + -DropPodsPowerCA@Zocom: + -CashHackPower@Legion: + -AirstrikePower@BlackhandFirebomb: + -AirReinforcementsPower@ShadowTeam: APWR: -Sellable: @@ -741,14 +771,14 @@ GUN: SPAWNGUN: Inherits: GUN - DamageMultiplier@INVULN: - Modifier: 0 RenderSprites: Image: gun MustBeDestroyed: RequiredForShortGame: true WithColoredSelectionBox@REL: ColorSource: Player + -Targetable: + -Targetable@EXPLOSIVES: SHIELDZONE: Inherits@1: CAMERA @@ -757,6 +787,7 @@ SHIELDZONE: Visible: Always Color: 00ffbbaa Range: 3c0 + ValidRelationships: Ally ProximityExternalCondition@SHIELD: Range: 3c0 Condition: shielded @@ -782,6 +813,7 @@ PYROZONE: Visible: Always Color: ff6600aa Range: 3c0 + ValidRelationships: Enemy, Ally KillsSelf: RemoveInstead: true Delay: 200 diff --git a/mods/ca/maps/tfca/tfca-weapons.yaml b/mods/ca/maps/tfca/tfca-weapons.yaml index 4dab6b0078..7d783ae525 100644 --- a/mods/ca/maps/tfca/tfca-weapons.yaml +++ b/mods/ca/maps/tfca/tfca-weapons.yaml @@ -16,6 +16,8 @@ Dragon: Ivanbomb: Range: 6c0 ReloadDelay: 30 + Warhead@AttachDelayedWeapon: AttachDelayedWeapon + TriggerTime: 80 BotIvanbomb: Inherits: Ivanbomb @@ -38,13 +40,14 @@ HeavyFlameTankFlamer: -BurstDelays: Warhead@1Dam: SpreadDamage ValidRelationships: Enemy, Ally, Neutral + InvalidTargets: Fireproof Damage: 450 Uzi: Inherits: M60mgTD Range: 6c0 Projectile: Bullet - Speed: 700 + Speed: 850 ContrailLength: 9 ContrailStartColor: 88888844 ContrailStartColorAlpha: 68 @@ -96,7 +99,7 @@ Heal: Damage: -4000 Repair: - ReloadDelay: 60 + ReloadDelay: 40 Warhead@highlight: GrantExternalCondition ValidTargets: Structure Warhead@1Dam: SpreadDamage @@ -111,6 +114,7 @@ Pyroblast: Warhead@1Dam: SpreadDamage Spread: 768 Damage: 35000 + InvalidTargets: Fireproof Versus: Concrete: 1 Warhead@3Eff: CreateEffect diff --git a/mods/ca/maps/tfca/tfca.lua b/mods/ca/maps/tfca/tfca.lua index a5ab27154a..8c9ff77c58 100644 --- a/mods/ca/maps/tfca/tfca.lua +++ b/mods/ca/maps/tfca/tfca.lua @@ -151,6 +151,9 @@ BlueWins = function() Utils.Do(spawnguns, function(g) g.Kill() end) + Utils.Do(Objectives, function(o) + o.Actor.Owner = Blue + end) end RedWins = function() @@ -164,6 +167,9 @@ RedWins = function() Utils.Do(spawnguns, function(g) g.Kill() end) + Utils.Do(Objectives, function(o) + o.Actor.Owner = Red + end) end BotSetup = function() @@ -248,7 +254,7 @@ BotTick = function() if BotEngiTurrets[selfString] ~= nil and not BotEngiTurrets[selfString].IsDead then local guardChance = Utils.RandomInteger(0, 100) - if guardChance > 50 then + if guardChance > 15 then self.Guard(BotEngiTurrets[selfString]) end end diff --git a/mods/ca/rules/defaults.yaml b/mods/ca/rules/defaults.yaml index fe1f7eb76b..7328588222 100644 --- a/mods/ca/rules/defaults.yaml +++ b/mods/ca/rules/defaults.yaml @@ -117,6 +117,9 @@ ProductionCostMultiplier@vhardbonus: Multiplier: 95 Prerequisites: is-vhard-ai + ProductionTimeMultiplier@easybonus: + Multiplier: 110 + Prerequisites: is-easy-ai # Refineries have an explicit BuildDuration so build time is unaffected by ProductionCostMultiplier ^BotRefinery: @@ -156,6 +159,9 @@ ProductionCostMultiplier@brutalbonus: Multiplier: 95 Prerequisites: is-brutal-ai + ProductionTimeMultiplier@easybonus: + Multiplier: 115 + Prerequisites: is-easy-ai # The Bot does not know how to sell up when he does not have an income. This provides an income, when floating less than 2500$ ^BotFallbackInsurance: @@ -1139,7 +1145,7 @@ Targetable@AICAPTURE: TargetTypes: NoCrew RequiresCondition: driver-dead - TooltipDescription: + TooltipDescription@DRIVER_DEAD: Description: Crewless. Capturable by infantry. RequiresCondition: driver-dead diff --git a/mods/ca/rules/infantry.yaml b/mods/ca/rules/infantry.yaml index a548b44155..9822d668c0 100644 --- a/mods/ca/rules/infantry.yaml +++ b/mods/ca/rules/infantry.yaml @@ -3807,9 +3807,9 @@ SEAL: BuildLimit: -1 Description: Elite infantry armed with an SMG and C4. TooltipExtras: - Strengths: • Strong vs Infantry, Buildings + Strengths: • Strong vs Infantry, Light Armor, Buildings Weaknesses: • Cannot attack Aircraft - Attributes: • Can detect cloaked units\n• Plants C4 to destroy structures and vehicles + Attributes: • Can detect cloaked units\n• Plants C4 to destroy structures Voiced: VoiceSet: SealVoice Mobile: @@ -3955,7 +3955,7 @@ ENLI: Description: Heavy cyborg infantry unit armed with\n a particle cannon that deals area damage. TooltipExtras: Strengths: • Strong vs Heavy Armor, Light Armor - Weaknesses: • Weak vs Infantry, Defenses\n• Cannot attack Aircraft + Weaknesses: • Weak vs Infantry\n• Cannot attack Aircraft Attributes: • Heals on Tiberium\n• EMP blast ability Valued: Cost: 1000 diff --git a/mods/ca/rules/vehicles.yaml b/mods/ca/rules/vehicles.yaml index 60cd1f1fc8..22e7ad1f3d 100644 --- a/mods/ca/rules/vehicles.yaml +++ b/mods/ca/rules/vehicles.yaml @@ -3276,6 +3276,7 @@ MTNK.Drone: -Capturable@DRIVER_DEAD: -GrantConditionIfOwnerIsNeutral: -ChangesHealth@DRIVER_DEAD: + -TooltipDescription@DRIVER_DEAD: -Targetable@DRIVERKILL: -Targetable@DRIVERKILLLOWHP: -GrantConditionOnDamageState@DRIVERKILLLOWHP: @@ -3365,6 +3366,7 @@ MDRN: -Capturable@DRIVER_DEAD: -GrantConditionIfOwnerIsNeutral: -ChangesHealth@DRIVER_DEAD: + -TooltipDescription@DRIVER_DEAD: -Targetable@DRIVERKILL: -Targetable@DRIVERKILLLOWHP: -GrantConditionOnDamageState@DRIVERKILLLOWHP: @@ -3627,6 +3629,7 @@ HTNK.Drone: -Capturable@DRIVER_DEAD: -GrantConditionIfOwnerIsNeutral: -ChangesHealth@DRIVER_DEAD: + -TooltipDescription@DRIVER_DEAD: -Targetable@DRIVERKILL: -Targetable@DRIVERKILLLOWHP: -GrantConditionOnDamageState@DRIVERKILLLOWHP: @@ -6300,6 +6303,7 @@ MEMP: -Capturable@DRIVER_DEAD: -GrantConditionIfOwnerIsNeutral: -ChangesHealth@DRIVER_DEAD: + -TooltipDescription@DRIVER_DEAD: -Targetable@DRIVERKILL: -Targetable@DRIVERKILLLOWHP: -GrantConditionOnDamageState@DRIVERKILLLOWHP: @@ -6395,6 +6399,7 @@ CDRN: -Capturable@DRIVER_DEAD: -GrantConditionIfOwnerIsNeutral: -ChangesHealth@DRIVER_DEAD: + -TooltipDescription@DRIVER_DEAD: -Targetable@DRIVERKILL: -Targetable@DRIVERKILLLOWHP: -GrantConditionOnDamageState@DRIVERKILLLOWHP: diff --git a/mods/ca/weapons/ballistics.yaml b/mods/ca/weapons/ballistics.yaml index c1750dbcea..5cc0a2ea10 100644 --- a/mods/ca/weapons/ballistics.yaml +++ b/mods/ca/weapons/ballistics.yaml @@ -230,7 +230,7 @@ Inherits: ^Cannon ReloadDelay: 135 Report: vapoat1a.aud - Range: 5c0 + Range: 5c768 Burst: 2 BurstDelays: 8 InvalidTargets: Air, AirSmall diff --git a/mods/ca/weapons/missiles.yaml b/mods/ca/weapons/missiles.yaml index 0ee63b2c7d..ed11a9dfd5 100644 --- a/mods/ca/weapons/missiles.yaml +++ b/mods/ca/weapons/missiles.yaml @@ -976,7 +976,7 @@ SCUD: Damage: 3400 Spread: 448 Falloff: 1000, 448, 192, 50, 18, 7, 0 - ValidTargets: Vehicle + ValidTargets: Vehicle, Husk Versus: Heavy: 20 None: 0 @@ -1011,7 +1011,7 @@ V3Weapon: Damage: 3400 Spread: 448 Falloff: 1000, 448, 192, 50, 18, 7, 0 - ValidTargets: Vehicle + ValidTargets: Vehicle, Husk Versus: Heavy: 35 None: 0 @@ -1229,7 +1229,7 @@ BikeRockets.TibCore: Warhead@antiHeavySplash: SpreadDamage Damage: 4400 Spread: 341 - ValidTargets: Vehicle + ValidTargets: Vehicle, Husk Versus: Heavy: 66 None: 0 @@ -1306,7 +1306,7 @@ IFVRocketsE: Warhead@antiHeavySplash: SpreadDamage Spread: 341 Damage: 3750 - ValidTargets: Vehicle + ValidTargets: Vehicle, Husk Versus: Heavy: 100 None: 0 @@ -1548,7 +1548,7 @@ StnkMissile: Warhead@tankbuster: SpreadDamage Spread: 128 Damage: 5500 - ValidTargets: Vehicle + ValidTargets: Vehicle, Husk Versus: Heavy: 30 None: 0 diff --git a/mods/ca/weapons/other.yaml b/mods/ca/weapons/other.yaml index e4f0afad3e..4ec6b4dc88 100644 --- a/mods/ca/weapons/other.yaml +++ b/mods/ca/weapons/other.yaml @@ -1129,20 +1129,20 @@ EnlightenedBeam: Falloff: 100, 85, 60, 25, 0 DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath Versus: - None: 10 + None: 5 Wood: 70 Concrete: 45 - Light: 75 + Light: 70 ValidRelationships: Enemy, Neutral Warhead@friendlyFire: SpreadDamage Spread: 256 Damage: 2500 DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath Versus: - None: 10 + None: 5 Wood: 70 Concrete: 45 - Light: 75 + Light: 70 ValidRelationships: Ally Warhead@2Eff: CreateEffect Explosions: enliexplode1, enliexplode2 diff --git a/mods/ca/weapons/scrin.yaml b/mods/ca/weapons/scrin.yaml index 47fca9bbfa..1f132e1d14 100644 --- a/mods/ca/weapons/scrin.yaml +++ b/mods/ca/weapons/scrin.yaml @@ -204,7 +204,7 @@ IntruderDiscs: None: 25 Wood: 100 Light: 65 - Heavy: 95 + Heavy: 90 Concrete: 100 DevastatorDiscs: