Create a new damage model for the MAD Tank. Fixes #4105

This commit is contained in:
ScottNZ
2013-11-10 21:38:48 +13:00
parent 9eff54c217
commit 1aebf27abd
3 changed files with 20 additions and 8 deletions

View File

@@ -47,8 +47,6 @@ namespace OpenRA.GameRules
public readonly DamageModel DamageModel = DamageModel.Normal;
[Desc("Whether we should prevent prone response for infantry.")]
public readonly bool PreventProne = false;
[Desc("Whether to use the provided Damage value as a maximum health percentage.")]
public readonly bool ScaleDamageByTargetHealth = false;
public float EffectivenessAgainst(ActorInfo ai)
{
@@ -83,6 +81,7 @@ namespace OpenRA.GameRules
{
Normal, // classic RA damage model: point actors, distance-based falloff
PerCell, // like RA's "nuke damage"
HealthPercentage // for MAD Tank
}
public class ProjectileArgs

View File

@@ -122,6 +122,23 @@ namespace OpenRA.Mods.RA
unit.InflictDamage(firedBy, damage, warhead);
}
} break;
case DamageModel.HealthPercentage:
{
var range = new WRange(warhead.Size[0] * 1024);
var hitActors = world.FindActorsInCircle(pos, range);
foreach (var victim in hitActors)
{
var damage = GetDamageToInflict(pos, victim, warhead, weapon, firepowerModifier, false);
if (damage != 0) // will be 0 if the target doesn't have HealthInfo
{
var healthInfo = victim.Info.Traits.Get<HealthInfo>();
damage = (float)(damage / 100 * healthInfo.HP);
}
victim.InflictDamage(firedBy, (int)damage, warhead);
}
} break;
}
}
@@ -174,8 +191,6 @@ namespace OpenRA.Mods.RA
return 0;
var rawDamage = (float)warhead.Damage;
if (warhead.ScaleDamageByTargetHealth)
rawDamage = (float)(rawDamage / 100 * healthInfo.HP);
if (withFalloff)
{
var distance = (int)Math.Max(0, (target.CenterPosition - pos).Length * Game.CellSize / 1024 - healthInfo.Radius);

View File

@@ -1331,9 +1331,8 @@ Mandible:
MADTankThump:
InvalidTargets: MADTank
Warhead:
DamageModel: PerCell
DamageModel: HealthPercentage
Damage: 1
ScaleDamageByTargetHealth: True
Versus:
None: 0%
Size: 7,6
@@ -1341,9 +1340,8 @@ MADTankThump:
MADTankDetonate:
InvalidTargets: MADTank
Warhead:
DamageModel: PerCell
DamageModel: HealthPercentage
Damage: 19
ScaleDamageByTargetHealth: True
Versus:
None: 0%
Size: 7,6