diff --git a/OpenRa.Game/Traits/Crate.cs b/OpenRa.Game/Traits/Crate.cs index 69fb378feb..ec91673f9d 100644 --- a/OpenRa.Game/Traits/Crate.cs +++ b/OpenRa.Game/Traits/Crate.cs @@ -10,7 +10,6 @@ Armor=10,ARMOR,2.0 ; armor of nearby objects increased (armor multi Cloak=0,STEALTH2 ; enable cloaking on nearby objects Darkness=1,EMPULSE ; cloak entire radar map Explosion=5,NONE,500 ; high explosive baddie (damage per explosion) -Firepower=10,FPOWER,2.0 ; firepower of nearby objects increased (firepower multiplier) HealBase=1,INVUN ; all buildings to full strength ICBM=1,MISSILE2 ; nuke missile one time shot Napalm=5,NONE,600 ; fire explosion baddie (damage) diff --git a/OpenRa.Mods.RA/Crate Actions/ArmorUpgradeCrateAction.cs b/OpenRa.Mods.RA/Crate Actions/ArmorUpgradeCrateAction.cs new file mode 100644 index 0000000000..d330464e4e --- /dev/null +++ b/OpenRa.Mods.RA/Crate Actions/ArmorUpgradeCrateAction.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using OpenRa.Traits; +using OpenRa.Mods.RA.Effects; + +namespace OpenRa.Mods.RA +{ + class ArmorUpgradeCrateActionInfo : ITraitInfo + { + public float Multiplier = 2.0f; + public int SelectionShares = 10; + public object Create(Actor self) { return new ArmorUpgradeCrateAction(self); } + } + + class ArmorUpgradeCrateAction : ICrateAction + { + Actor self; + public ArmorUpgradeCrateAction(Actor self) + { + this.self = self; + } + + public int SelectionShares + { + get { return self.Info.Traits.Get().SelectionShares; } + } + + public void Activate(Actor collector) + { + Sound.PlayToPlayer(collector.Owner, "armorup1.aud"); + collector.World.AddFrameEndTask(w => + { + var multiplier = self.Info.Traits.Get().Multiplier; + collector.traits.Add(new ArmorUpgrade(multiplier)); + w.Add(new CrateEffect(collector, "armor")); + }); + } + } + + class ArmorUpgrade : IDamageModifier + { + float multiplier; + public ArmorUpgrade(float multiplier) { this.multiplier = 1/multiplier; } + public float GetArmorModifier() { return multiplier; } + } +} diff --git a/OpenRa.Mods.RA/Crate Actions/FirepowerUpgradeCrateAction.cs b/OpenRa.Mods.RA/Crate Actions/FirepowerUpgradeCrateAction.cs new file mode 100644 index 0000000000..371ea36cf8 --- /dev/null +++ b/OpenRa.Mods.RA/Crate Actions/FirepowerUpgradeCrateAction.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using OpenRa.Traits; +using OpenRa.Mods.RA.Effects; + +namespace OpenRa.Mods.RA +{ + class FirepowerUpgradeCrateActionInfo : ITraitInfo + { + public float Multiplier = 2.0f; + public int SelectionShares = 10; + public object Create(Actor self) { return new FirepowerUpgradeCrateAction(self); } + } + + class FirepowerUpgradeCrateAction : ICrateAction + { + Actor self; + public FirepowerUpgradeCrateAction(Actor self) + { + this.self = self; + } + + public int SelectionShares + { + get { return self.Info.Traits.Get().SelectionShares; } + } + + public void Activate(Actor collector) + { + Sound.PlayToPlayer(collector.Owner, "firepo1.aud"); + collector.World.AddFrameEndTask(w => + { + var multiplier = self.Info.Traits.Get().Multiplier; + collector.traits.Add(new FirepowerUpgrade(multiplier)); + w.Add(new CrateEffect(collector, "fpower")); + }); + } + } + + class FirepowerUpgrade : IFirepowerModifier + { + float multiplier; + public FirepowerUpgrade(float multiplier) { this.multiplier = multiplier; } + public float GetFirepowerModifier() { return multiplier; } + } +} diff --git a/OpenRa.Mods.RA/Crate Actions/SpeedUpgradeCrateAction.cs b/OpenRa.Mods.RA/Crate Actions/SpeedUpgradeCrateAction.cs index 83f70d70ca..98c0166be7 100644 --- a/OpenRa.Mods.RA/Crate Actions/SpeedUpgradeCrateAction.cs +++ b/OpenRa.Mods.RA/Crate Actions/SpeedUpgradeCrateAction.cs @@ -28,7 +28,7 @@ namespace OpenRa.Mods.RA Sound.PlayToPlayer(collector.Owner, "unitspd1.aud"); collector.World.AddFrameEndTask(w => { - float multiplier = self.Info.Traits.Get().Multiplier; + var multiplier = self.Info.Traits.Get().Multiplier; collector.traits.Add(new SpeedUpgrade(multiplier)); w.Add(new CrateEffect(collector, "speed")); }); diff --git a/OpenRa.Mods.RA/OpenRa.Mods.RA.csproj b/OpenRa.Mods.RA/OpenRa.Mods.RA.csproj index 4ca44f030a..880ba08c72 100644 --- a/OpenRa.Mods.RA/OpenRa.Mods.RA.csproj +++ b/OpenRa.Mods.RA/OpenRa.Mods.RA.csproj @@ -52,6 +52,8 @@ + + diff --git a/mods/ra/rules.yaml b/mods/ra/rules.yaml index dac165c981..01e818f7cf 100644 --- a/mods/ra/rules.yaml +++ b/mods/ra/rules.yaml @@ -556,6 +556,12 @@ CRATE: GiveCashCrateAction: Amount: 2000 SelectionShares: 50 + FirepowerUpgradeCrateAction: + Multiplier: 2.0 + SelectionShares: 10 + ArmorUpgradeCrateAction: + Multiplier: 2.0 + SelectionShares: 10 Unit: HP: 1 RenderUnit: