Merge pull request #4114 from ScottNZ/madtank
Fix MAD Tank damage model
This commit is contained in:
@@ -47,8 +47,6 @@ namespace OpenRA.GameRules
|
|||||||
public readonly DamageModel DamageModel = DamageModel.Normal;
|
public readonly DamageModel DamageModel = DamageModel.Normal;
|
||||||
[Desc("Whether we should prevent prone response for infantry.")]
|
[Desc("Whether we should prevent prone response for infantry.")]
|
||||||
public readonly bool PreventProne = false;
|
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)
|
public float EffectivenessAgainst(ActorInfo ai)
|
||||||
{
|
{
|
||||||
@@ -83,6 +81,7 @@ namespace OpenRA.GameRules
|
|||||||
{
|
{
|
||||||
Normal, // classic RA damage model: point actors, distance-based falloff
|
Normal, // classic RA damage model: point actors, distance-based falloff
|
||||||
PerCell, // like RA's "nuke damage"
|
PerCell, // like RA's "nuke damage"
|
||||||
|
HealthPercentage // for MAD Tank
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ProjectileArgs
|
public class ProjectileArgs
|
||||||
|
|||||||
@@ -122,6 +122,23 @@ namespace OpenRA.Mods.RA
|
|||||||
unit.InflictDamage(firedBy, damage, warhead);
|
unit.InflictDamage(firedBy, damage, warhead);
|
||||||
}
|
}
|
||||||
} break;
|
} 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;
|
return 0;
|
||||||
|
|
||||||
var rawDamage = (float)warhead.Damage;
|
var rawDamage = (float)warhead.Damage;
|
||||||
if (warhead.ScaleDamageByTargetHealth)
|
|
||||||
rawDamage = (float)(rawDamage / 100 * healthInfo.HP);
|
|
||||||
if (withFalloff)
|
if (withFalloff)
|
||||||
{
|
{
|
||||||
var distance = (int)Math.Max(0, (target.CenterPosition - pos).Length * Game.CellSize / 1024 - healthInfo.Radius);
|
var distance = (int)Math.Max(0, (target.CenterPosition - pos).Length * Game.CellSize / 1024 - healthInfo.Radius);
|
||||||
|
|||||||
@@ -1332,9 +1332,8 @@ Mandible:
|
|||||||
MADTankThump:
|
MADTankThump:
|
||||||
InvalidTargets: MADTank
|
InvalidTargets: MADTank
|
||||||
Warhead:
|
Warhead:
|
||||||
DamageModel: PerCell
|
DamageModel: HealthPercentage
|
||||||
Damage: 1
|
Damage: 1
|
||||||
ScaleDamageByTargetHealth: True
|
|
||||||
Versus:
|
Versus:
|
||||||
None: 0%
|
None: 0%
|
||||||
Size: 7,6
|
Size: 7,6
|
||||||
@@ -1342,9 +1341,8 @@ MADTankThump:
|
|||||||
MADTankDetonate:
|
MADTankDetonate:
|
||||||
InvalidTargets: MADTank
|
InvalidTargets: MADTank
|
||||||
Warhead:
|
Warhead:
|
||||||
DamageModel: PerCell
|
DamageModel: HealthPercentage
|
||||||
Damage: 19
|
Damage: 19
|
||||||
ScaleDamageByTargetHealth: True
|
|
||||||
Versus:
|
Versus:
|
||||||
None: 0%
|
None: 0%
|
||||||
Size: 7,6
|
Size: 7,6
|
||||||
|
|||||||
Reference in New Issue
Block a user