From 61b52ffaf950707c43ba7e9e1625e73552d72074 Mon Sep 17 00:00:00 2001 From: Matthew Bowra-Dean Date: Tue, 9 Mar 2010 17:59:00 +1300 Subject: [PATCH] Some changes to the nuke damage model + screen shake --- OpenRA.Game/Combat.cs | 17 +++++++++++++++++ OpenRA.Game/Effects/NukeLaunch.cs | 4 +++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/OpenRA.Game/Combat.cs b/OpenRA.Game/Combat.cs index c2fa65ca42..e36cd319ec 100644 --- a/OpenRA.Game/Combat.cs +++ b/OpenRA.Game/Combat.cs @@ -30,6 +30,12 @@ namespace OpenRA { public static void DoImpact(int2 loc, int2 visualLoc, WeaponInfo weapon, ProjectileInfo projectile, WarheadInfo warhead, Actor firedBy) + { + DoImpact(loc, visualLoc, weapon, projectile, warhead, firedBy, false); + } + + public static void DoImpact(int2 loc, int2 visualLoc, + WeaponInfo weapon, ProjectileInfo projectile, WarheadInfo warhead, Actor firedBy, bool nukeDamage) { var world = firedBy.World; @@ -62,6 +68,17 @@ namespace OpenRA foreach (var victim in hitActors) victim.InflictDamage(firedBy, (int)GetDamageToInflict(victim, loc, weapon, warhead, firepowerModifier), warhead); + + if (!nukeDamage) return; + foreach (var t in world.FindTilesInCircle(targetTile, warhead.SmudgeSize[0])) + { + var x = Util.CenterOfCell(t); + foreach (var unit in world.FindUnits(x, x)) + { + unit.InflictDamage(firedBy, + (int)(weapon.Damage * warhead.EffectivenessAgainst(unit.Info.Traits.Get().Armor)) / 4, warhead); + } + } } static float GetMaximumSpread(WeaponInfo weapon, WarheadInfo warhead, float modifier) diff --git a/OpenRA.Game/Effects/NukeLaunch.cs b/OpenRA.Game/Effects/NukeLaunch.cs index 1b5f1546b8..3b74c18e24 100644 --- a/OpenRA.Game/Effects/NukeLaunch.cs +++ b/OpenRA.Game/Effects/NukeLaunch.cs @@ -79,7 +79,9 @@ namespace OpenRA.Effects void Explode(World world) { world.AddFrameEndTask(w => w.Remove(this)); - Combat.DoImpact(pos.ToInt2(), pos.ToInt2(), weapon, Rules.ProjectileInfo[weapon.Projectile], Rules.WarheadInfo[weapon.Warhead], silo); + var warhead = Rules.WarheadInfo[weapon.Warhead]; + Combat.DoImpact(pos.ToInt2(), pos.ToInt2(), weapon, Rules.ProjectileInfo[weapon.Projectile], warhead, silo, true); + world.WorldActor.traits.Get().AddEffect(20, pos, 5); } public IEnumerable Render()