Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow overriding weapon base damage for purposes of flyovers #1275

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@ function Init()
local array<X2Action> RunningActions;
local array<X2Action> ApplyDamageToUnitActions;
local X2Action ParentFireAction;

local int EffectDamageTypeIndex;
local name EffectDamageTypeName;
super.Init();

History = `XCOMHISTORY;
Expand Down Expand Up @@ -156,33 +157,48 @@ function Init()
if (SourceItemGameState != none)
WeaponTemplate = X2WeaponTemplate(SourceItemGameState.GetMyTemplate());
}

/// HL-Docs: feature:OverRideWeaponBaseDamageForFlyover; issue:1274; tags:tactical
// Begin by using the damage results from the unit state and finding the damage types applied:

//Set up a damage type
if (WeaponTemplate != none)
{
DamageTypeName = WeaponTemplate.BaseDamage.DamageType;
if (DamageTypeName == '')
{
DamageTypeName = WeaponTemplate.DamageTypeTemplateName;
}
}
else if (TickContext != none || WorldEffectsContext != none)
if (TickContext != none || WorldEffectsContext != none)
{
// Iterate through damage results on unit state
for (DmgIndex = 0; DmgIndex < UnitState.DamageResults.Length; ++DmgIndex)
{
if (UnitState.DamageResults[DmgIndex].Context == StateChangeContext)
{
LookupEffect = UnitState.DamageResults[DmgIndex].SourceEffect.EffectRef;
SourceEffect = class'X2Effect'.static.GetX2Effect(LookupEffect);
DamageEffect = SourceEffect;
if (SourceEffect.DamageTypes.Length > 0)
DamageTypeName = SourceEffect.DamageTypes[0];
m_iDamage = UnitState.DamageResults[DmgIndex].DamageAmount;
// Use the damage result of the first element in the array by default
DamageTypeName = SourceEffect.DamageTypes[0];
// Iterate over the damage types applied by the effect
for (EffectDamageTypeIndex = 0; EffectDamageTypeIndex < SourceEffect.DamageTypes.Length; ++EffectDamageTypeIndex)
{
effectDamageTypeName = SourceEffect.DamageTypes[EffectDamageTypeIndex];
// If the array contains psionic damage, set the damage type name to psionic for use in the flyover
If (effectDamageTypeName = 'Psi')
{
DamageTypeName = SourceEffect.DamageTypes[EffectIndex];
}
}
m_iDamage = UnitState.DamageResults[DmgIndex].DamageAmount;
break;
}
}
}

// Fall back on the damage type on the weapon template
if (DamageTypeName == '' && WeaponTemplate != none)
{
DamageTypeName = WeaponTemplate.BaseDamage.DamageType;
if (DamageTypeName == '')
{
DamageTypeName = WeaponTemplate.DamageTypeTemplateName;
}
}

// Start Issue #326: If we still don't have a damage type, try to pull from the manually configured
/// HL-Docs: ref:Bugfixes; issue:326
/// Allow damage flyovers from weapon-less Psi abilities to use the Psi damage popup
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ var bool bIgnoreArmor;
var bool bBypassSustainEffects;
var array<name> HideVisualizationOfResultsAdditional;

// Issue #1274
var bool bIgnoreWeaponBaseDamageTypeForFlyover;
// Issue #321
var config bool NO_MINIMUM_DAMAGE;
// Issue #743
Expand Down
Loading