Skip to content

Commit c722b45

Browse files
authored
[Minor] ExpireWeapon/RevengeWeapon/ReflectDamage UseInvokerAsOwner (#1725)
- `ExpireWeapon.UseInvokerAsOwner` can be used to set the house and TechnoType that created the effect (e.g firer of the weapon that applied it) as the weapon's owner & invoker instead of the object the effect is attached to. - `RevengeWeapon.UseInvokerAsOwner` can be used to set the house and TechnoType that created the effect (e.g firer of the weapon that applied it) as the weapon's owner & invoker instead of the object the effect is attached to. - `ReflectDamage.UseInvokerAsOwner` can be used to set the house and TechnoType that created the effect (e.g firer of the weapon that applied it) as the reflected damage's owner & invoker instead of the object the effect is attached to. In `rulesmd.ini`: ```ini [SOMEATTACHEFFECT] ; AttachEffectType ExpireWeapon.UseInvokerAsOwner=false ; boolean RevengeWeapon.UseInvokerAsOwner=false ; boolean ReflectDamage.UseInvokerAsOwner=false ; boolean ```
1 parent ae3e44a commit c722b45

File tree

8 files changed

+110
-23
lines changed

8 files changed

+110
-23
lines changed

docs/New-or-Enhanced-Logics.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ This page describes all the engine features that are either new and introduced b
3333
- Attached effect can fire off a weapon when expired / removed / object dies by setting `ExpireWeapon`.
3434
- `ExpireWeapon.TriggerOn` determines the exact conditions upon which the weapon is fired, defaults to `expire` which means only if the effect naturally expires.
3535
- `ExpireWeapon.CumulativeOnlyOnce`, if set to true, makes it so that `Cumulative=true` attached effects only detonate the weapon once period, instead of once per active instance. On `remove` and `expire` condition this means it will only detonate after last instance has expired or been removed.
36+
- `ExpireWeapon.UseInvokerAsOwner` can be used to set the house and TechnoType that created the effect (e.g firer of the weapon that applied it) as the weapon's owner & invoker instead of the object the effect is attached to.
3637
- `Tint.Color` & `Tint.Intensity` can be used to set a color tint effect and additive lighting increase/decrease on the object the effect is attached to, respectively.
3738
- `Tint.VisibleToHouses` can be used to control which houses can see the tint effect.
3839
- `FirepowerMultiplier`, `ArmorMultiplier`, `SpeedMultiplier` and `ROFMultiplier` can be used to modify the object's firepower, armor strength, movement speed and weapon reload rate, respectively.
@@ -47,8 +48,10 @@ This page describes all the engine features that are either new and introduced b
4748
- `Crit.AllowWarheads` can be used to list only Warheads that can benefit from this critical hit chance multiplier and `Crit.DisallowWarheads` weapons that are not allowed to, respectively.
4849
- `RevengeWeapon` can be used to temporarily grant the specified weapon as a [revenge weapon](#revenge-weapon) for the attached object.
4950
- `RevengeWeapon.AffectsHouses` customizes which houses can trigger the revenge weapon.
51+
- `RevengeWeapon.UseInvokerAsOwner` can be used to set the house and TechnoType that created the effect (e.g firer of the weapon that applied it) as the weapon's owner & invoker instead of the object the effect is attached to.
5052
- `ReflectDamage` can be set to true to have any positive damage dealt to the object the effect is attached to be reflected back to the attacker. `ReflectDamage.Warhead` determines which Warhead is used to deal the damage, defaults to `[CombatDamage] -> C4Warhead`. If `ReflectDamage.Warhead.Detonate` is set to true, the Warhead is fully detonated instead of used to simply deal damage. `ReflectDamage.Chance` determines the chance of reflection. `ReflectDamage.Multiplier` is a multiplier to the damage received and then reflected back, while `ReflectDamage.Override` directly overrides the damage. Already reflected damage cannot be further reflected back.
5153
- Warheads can prevent reflect damage from occuring by setting `SuppressReflectDamage` to true. `SuppressReflectDamage.Types` can control which AttachEffectTypes' reflect damage is suppressed, if none are listed then all of them are suppressed. `SuppressReflectDamage.Groups` does the same thing but for all AttachEffectTypes in the listed groups.
54+
- `ReflectDamage.UseInvokerAsOwner` can be used to set the house and TechnoType that created the effect (e.g firer of the weapon that applied it) as the reflected damage's owner & invoker instead of the object the effect is attached to.
5255
- `DisableWeapons` can be used to disable ability to fire any and all weapons.
5356
- On TechnoTypes with `OpenTopped=true`, `OpenTopped.CheckTransportDisableWeapons` can be set to true to make passengers not be able to fire out if transport's weapons are disabled by `DisableWeapons`.
5457
- `Unkillable` can be used to prevent the techno from being killed by taken damage (minimum health will be 1).
@@ -105,6 +108,7 @@ CumulativeAnimations.RestartOnChange=true ; boolean
105108
ExpireWeapon= ; WeaponType
106109
ExpireWeapon.TriggerOn=expire ; List of expire weapon trigger condition enumeration (none|expire|remove|death|discard|all)
107110
ExpireWeapon.CumulativeOnlyOnce=false ; boolean
111+
ExpireWeapon.UseInvokerAsOwner=false ; boolean
108112
Tint.Color= ; integer - R,G,B
109113
Tint.Intensity= ; floating point value
110114
Tint.VisibleToHouses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
@@ -127,13 +131,15 @@ Crit.AllowWarheads= ; List of WarheadTypes
127131
Crit.DisallowWarheads= ; List of WarheadTypes
128132
RevengeWeapon= ; WeaponType
129133
RevengeWeapon.AffectsHouses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
134+
RevengeWeapon.UseInvokerAsOwner=false ; boolean
130135
ReflectDamage=false ; boolean
131136
ReflectDamage.Warhead= ; WarheadType
132137
ReflectDamage.Warhead.Detonate=false ; WarheadType
133138
ReflectDamage.Multiplier=1.0 ; floating point value, percents or absolute
134139
ReflectDamage.AffectsHouses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
135140
ReflectDamage.Chance=1.0 ; floating point value
136141
ReflectDamage.Override= ; integer
142+
ReflectDamage.UseInvokerAsOwner=false ; boolean
137143
DisableWeapons=false ; boolean
138144
Unkillable=false ; boolean
139145
Groups= ; comma-separated list of strings (group IDs)

src/Ext/Techno/Body.Update.cpp

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1620,7 +1620,7 @@ void TechnoExt::ExtData::UpdateAttachEffects()
16201620
bool markForRedraw = false;
16211621
bool altered = false;
16221622
std::vector<std::unique_ptr<AttachEffectClass>>::iterator it;
1623-
std::vector<WeaponTypeClass*> expireWeapons;
1623+
std::vector<std::pair<WeaponTypeClass*, TechnoClass*>> expireWeapons;
16241624

16251625
for (it = this->AttachedEffects.begin(); it != this->AttachedEffects.end(); )
16261626
{
@@ -1655,7 +1655,17 @@ void TechnoExt::ExtData::UpdateAttachEffects()
16551655
|| (shouldDiscard && (pType->ExpireWeapon_TriggerOn & ExpireWeaponCondition::Discard) != ExpireWeaponCondition::None)))
16561656
{
16571657
if (!pType->Cumulative || !pType->ExpireWeapon_CumulativeOnlyOnce || this->GetAttachedEffectCumulativeCount(pType) < 1)
1658-
expireWeapons.push_back(pType->ExpireWeapon);
1658+
{
1659+
if (pType->ExpireWeapon_UseInvokerAsOwner)
1660+
{
1661+
if (auto const pInvoker = attachEffect->GetInvoker())
1662+
expireWeapons.push_back(std::make_pair(pType->ExpireWeapon, pInvoker));
1663+
}
1664+
else
1665+
{
1666+
expireWeapons.push_back(std::make_pair(pType->ExpireWeapon, pThis));
1667+
}
1668+
}
16591669
}
16601670

16611671
if (shouldDiscard && attachEffect->ResetIfRecreatable())
@@ -1680,11 +1690,11 @@ void TechnoExt::ExtData::UpdateAttachEffects()
16801690
pThis->MarkForRedraw();
16811691

16821692
auto const coords = pThis->GetCoords();
1683-
auto const pOwner = pThis->Owner;
16841693

1685-
for (auto const& pWeapon : expireWeapons)
1694+
for (auto const& pair : expireWeapons)
16861695
{
1687-
WeaponTypeExt::DetonateAt(pWeapon, coords, pThis, pOwner, pThis);
1696+
auto const pInvoker = pair.second;
1697+
WeaponTypeExt::DetonateAt(pair.first, coords, pInvoker, pInvoker->Owner, pThis);
16881698
}
16891699
}
16901700

@@ -1694,7 +1704,7 @@ void TechnoExt::ExtData::UpdateSelfOwnedAttachEffects()
16941704
auto const pThis = this->OwnerObject();
16951705
auto const pTypeExt = this->TypeExtData;
16961706
std::vector<std::unique_ptr<AttachEffectClass>>::iterator it;
1697-
std::vector<WeaponTypeClass*> expireWeapons;
1707+
std::vector<std::pair<WeaponTypeClass*, TechnoClass*>> expireWeapons;
16981708
bool markForRedraw = false;
16991709
bool altered = false;
17001710

@@ -1711,7 +1721,17 @@ void TechnoExt::ExtData::UpdateSelfOwnedAttachEffects()
17111721
if (pType->ExpireWeapon && (pType->ExpireWeapon_TriggerOn & ExpireWeaponCondition::Expire) != ExpireWeaponCondition::None)
17121722
{
17131723
if (!pType->Cumulative || !pType->ExpireWeapon_CumulativeOnlyOnce || this->GetAttachedEffectCumulativeCount(pType) < 1)
1714-
expireWeapons.push_back(pType->ExpireWeapon);
1724+
{
1725+
if (pType->ExpireWeapon_UseInvokerAsOwner)
1726+
{
1727+
if (auto const pInvoker = attachEffect->GetInvoker())
1728+
expireWeapons.push_back(std::make_pair(pType->ExpireWeapon, pInvoker));
1729+
}
1730+
else
1731+
{
1732+
expireWeapons.push_back(std::make_pair(pType->ExpireWeapon, pThis));
1733+
}
1734+
}
17151735
}
17161736

17171737
markForRedraw |= pType->HasTint();
@@ -1725,11 +1745,11 @@ void TechnoExt::ExtData::UpdateSelfOwnedAttachEffects()
17251745
}
17261746

17271747
auto const coords = pThis->GetCoords();
1728-
auto const pOwner = pThis->Owner;
17291748

1730-
for (auto const& pWeapon : expireWeapons)
1749+
for (auto const& pair : expireWeapons)
17311750
{
1732-
WeaponTypeExt::DetonateAt(pWeapon, coords, pThis, pOwner, pThis);
1751+
auto const pInvoker = pair.second;
1752+
WeaponTypeExt::DetonateAt(pair.first, coords, pInvoker, pInvoker->Owner, pThis);
17331753
}
17341754

17351755
// Add new ones.

src/Ext/Techno/Hooks.ReceiveDamage.cpp

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ DEFINE_HOOK(0x702050, TechnoClass_ReceiveDamage_AttachEffectExpireWeapon, 0x6)
258258

259259
auto const pExt = TechnoExt::ExtMap.Find(pThis);
260260
std::set<AttachEffectTypeClass*> cumulativeTypes;
261-
std::vector<WeaponTypeClass*> expireWeapons;
261+
std::vector<std::pair<WeaponTypeClass*, TechnoClass*>> expireWeapons;
262262

263263
for (auto const& attachEffect : pExt->AttachedEffects)
264264
{
@@ -271,17 +271,25 @@ DEFINE_HOOK(0x702050, TechnoClass_ReceiveDamage_AttachEffectExpireWeapon, 0x6)
271271
if (pType->Cumulative && pType->ExpireWeapon_CumulativeOnlyOnce)
272272
cumulativeTypes.insert(pType);
273273

274-
expireWeapons.push_back(pType->ExpireWeapon);
274+
if (pType->ExpireWeapon_UseInvokerAsOwner)
275+
{
276+
if (auto const pInvoker = attachEffect->GetInvoker())
277+
expireWeapons.push_back(std::make_pair(pType->ExpireWeapon, pInvoker));
278+
}
279+
else
280+
{
281+
expireWeapons.push_back(std::make_pair(pType->ExpireWeapon, pThis));
282+
}
275283
}
276284
}
277285
}
278286

279287
auto const coords = pThis->GetCoords();
280-
auto const pOwner = pThis->Owner;
281288

282-
for (auto const& pWeapon : expireWeapons)
289+
for (auto const& pair : expireWeapons)
283290
{
284-
WeaponTypeExt::DetonateAt(pWeapon, coords, pThis, pOwner, pThis);
291+
auto const pInvoker = pair.second;
292+
WeaponTypeExt::DetonateAt(pair.first, coords, pInvoker, pInvoker->Owner, pThis);
285293
}
286294

287295
return 0;
@@ -334,7 +342,24 @@ DEFINE_HOOK(0x701E18, TechnoClass_ReceiveDamage_ReflectDamage, 0x7)
334342
auto const pWH = pType->ReflectDamage_Warhead.Get(RulesClass::Instance->C4Warhead);
335343
int damage = pType->ReflectDamage_Override.Get(static_cast<int>(*pDamage * pType->ReflectDamage_Multiplier));
336344

337-
if (EnumFunctions::CanTargetHouse(pType->ReflectDamage_AffectsHouses, pThis->Owner, pSourceHouse))
345+
if (pType->ReflectDamage_UseInvokerAsOwner)
346+
{
347+
auto const pInvoker = attachEffect->GetInvoker();
348+
349+
if (pInvoker && EnumFunctions::CanTargetHouse(pType->ReflectDamage_AffectsHouses, pInvoker->Owner, pSourceHouse))
350+
{
351+
auto const pWHExtRef = WarheadTypeExt::ExtMap.Find(pWH);
352+
pWHExtRef->Reflected = true;
353+
354+
if (pType->ReflectDamage_Warhead_Detonate)
355+
WarheadTypeExt::DetonateAt(pWH, pSource, pInvoker, damage, pInvoker->Owner);
356+
else
357+
pSource->ReceiveDamage(&damage, 0, pWH, pInvoker, false, false, pInvoker->Owner);
358+
359+
pWHExtRef->Reflected = false;
360+
}
361+
}
362+
else if (EnumFunctions::CanTargetHouse(pType->ReflectDamage_AffectsHouses, pThis->Owner, pSourceHouse))
338363
{
339364
auto const pWHExtRef = WarheadTypeExt::ExtMap.Find(pWH);
340365
pWHExtRef->Reflected = true;

src/Ext/Techno/WeaponHelpers.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,17 @@ void TechnoExt::ApplyRevengeWeapon(TechnoClass* pThis, TechnoClass* pSource, War
278278
if (pWHExt->SuppressRevengeWeapons && (!hasFilters || pWHExt->SuppressRevengeWeapons_Types.Contains(pType->RevengeWeapon)))
279279
continue;
280280

281-
if (EnumFunctions::CanTargetHouse(pType->RevengeWeapon_AffectsHouses, pThis->Owner, pSource->Owner))
281+
if (pType->RevengeWeapon_UseInvokerAsOwner)
282+
{
283+
auto const pInvoker = attachEffect->GetInvoker();
284+
285+
if (pInvoker && EnumFunctions::CanTargetHouse(pType->RevengeWeapon_AffectsHouses, pInvoker->Owner, pSource->Owner))
286+
WeaponTypeExt::DetonateAt(pType->RevengeWeapon, pSource, pInvoker);
287+
}
288+
else if (EnumFunctions::CanTargetHouse(pType->RevengeWeapon_AffectsHouses, pThis->Owner, pSource->Owner))
289+
{
282290
WeaponTypeExt::DetonateAt(pType->RevengeWeapon, pSource, pThis);
291+
}
283292
}
284293
}
285294

src/New/Entity/AttachEffectClass.cpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,11 @@ bool AttachEffectClass::IsFromSource(TechnoClass* pInvoker, AbstractClass* pSour
566566
return pInvoker == this->Invoker && pSource == this->Source;
567567
}
568568

569+
TechnoClass* AttachEffectClass::GetInvoker() const
570+
{
571+
return this->Invoker;
572+
}
573+
569574
#pragma region StaticFunctions_AttachDetachTransfer
570575

571576
/// <summary>
@@ -835,7 +840,7 @@ int AttachEffectClass::RemoveAllOfType(AttachEffectTypeClass* pType, TechnoClass
835840

836841
auto const targetAEs = &pTargetExt->AttachedEffects;
837842
std::vector<std::unique_ptr<AttachEffectClass>>::iterator it;
838-
std::vector<WeaponTypeClass*> expireWeapons;
843+
std::vector<std::pair<WeaponTypeClass*, TechnoClass*>> expireWeapons;
839844

840845
for (it = targetAEs->begin(); it != targetAEs->end(); )
841846
{
@@ -852,7 +857,17 @@ int AttachEffectClass::RemoveAllOfType(AttachEffectTypeClass* pType, TechnoClass
852857
{
853858
// can't be GetAttachedEffectCumulativeCount(pType) < 2, or inactive AE might make it stack more than once
854859
if (!pType->Cumulative || !pType->ExpireWeapon_CumulativeOnlyOnce || stackCount == 1)
855-
expireWeapons.push_back(pType->ExpireWeapon);
860+
{
861+
if (pType->ExpireWeapon_UseInvokerAsOwner)
862+
{
863+
if (auto const pInvoker = attachEffect->Invoker)
864+
expireWeapons.push_back(std::make_pair(pType->ExpireWeapon, pInvoker));
865+
}
866+
else
867+
{
868+
expireWeapons.push_back(std::make_pair(pType->ExpireWeapon, pTarget));
869+
}
870+
}
856871
}
857872

858873
if (pType->Cumulative && pType->CumulativeAnimations.size() > 0)
@@ -877,13 +892,12 @@ int AttachEffectClass::RemoveAllOfType(AttachEffectTypeClass* pType, TechnoClass
877892
}
878893
}
879894

880-
881895
auto const coords = pTarget->GetCoords();
882-
auto const pOwner = pTarget->Owner;
883896

884-
for (auto const& pWeapon : expireWeapons)
897+
for (auto const& pair : expireWeapons)
885898
{
886-
WeaponTypeExt::DetonateAt(pWeapon, coords, pTarget, pOwner, pTarget);
899+
auto const pInvoker = pair.second;
900+
WeaponTypeExt::DetonateAt(pair.first, coords, pInvoker, pInvoker->Owner, pTarget);
887901
}
888902

889903
return detachedCount;

src/New/Entity/AttachEffectClass.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class AttachEffectClass
3232
bool IsActive() const;
3333
bool IsActiveIgnorePowered() const;
3434
bool IsFromSource(TechnoClass* pInvoker, AbstractClass* pSource) const;
35+
TechnoClass* GetInvoker() const;
3536

3637
static void PointerGotInvalid(void* ptr, bool removed);
3738
bool Load(PhobosStreamReader& Stm, bool RegisterForChange);

src/New/Type/AttachEffectTypeClass.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ void AttachEffectTypeClass::LoadFromINI(CCINIClass* pINI)
118118
this->ExpireWeapon.Read<true>(exINI, pSection, "ExpireWeapon");
119119
this->ExpireWeapon_TriggerOn.Read(exINI, pSection, "ExpireWeapon.TriggerOn");
120120
this->ExpireWeapon_CumulativeOnlyOnce.Read(exINI, pSection, "ExpireWeapon.CumulativeOnlyOnce");
121+
this->ExpireWeapon_UseInvokerAsOwner.Read(exINI, pSection, "ExpireWeapon.UseInvokerAsOwner");
121122

122123
this->Tint_Color.Read(exINI, pSection, "Tint.Color");
123124
this->Tint_Intensity.Read(exINI, pSection, "Tint.Intensity");
@@ -146,6 +147,7 @@ void AttachEffectTypeClass::LoadFromINI(CCINIClass* pINI)
146147

147148
this->RevengeWeapon.Read<true>(exINI, pSection, "RevengeWeapon");
148149
this->RevengeWeapon_AffectsHouses.Read(exINI, pSection, "RevengeWeapon.AffectsHouses");
150+
this->RevengeWeapon_UseInvokerAsOwner.Read(exINI, pSection, "RevengeWeapon.UseInvokerAsOwner");
149151

150152
this->ReflectDamage.Read(exINI, pSection, "ReflectDamage");
151153
this->ReflectDamage_Warhead.Read(exINI, pSection, "ReflectDamage.Warhead");
@@ -154,6 +156,7 @@ void AttachEffectTypeClass::LoadFromINI(CCINIClass* pINI)
154156
this->ReflectDamage_AffectsHouses.Read(exINI, pSection, "ReflectDamage.AffectsHouses");
155157
this->ReflectDamage_Chance.Read(exINI, pSection, "ReflectDamage.Chance");
156158
this->ReflectDamage_Override.Read(exINI, pSection, "ReflectDamage.Override");
159+
this->ReflectDamage_UseInvokerAsOwner.Read(exINI, pSection, "ReflectDamage.UseInvokerAsOwner");
157160

158161
this->DisableWeapons.Read(exINI, pSection, "DisableWeapons");
159162
this->Unkillable.Read(exINI, pSection, "Unkillable");
@@ -188,6 +191,7 @@ void AttachEffectTypeClass::Serialize(T& Stm)
188191
.Process(this->ExpireWeapon)
189192
.Process(this->ExpireWeapon_TriggerOn)
190193
.Process(this->ExpireWeapon_CumulativeOnlyOnce)
194+
.Process(this->ExpireWeapon_UseInvokerAsOwner)
191195
.Process(this->Tint_Color)
192196
.Process(this->Tint_Intensity)
193197
.Process(this->Tint_VisibleToHouses)
@@ -210,13 +214,15 @@ void AttachEffectTypeClass::Serialize(T& Stm)
210214
.Process(this->Crit_DisallowWarheads)
211215
.Process(this->RevengeWeapon)
212216
.Process(this->RevengeWeapon_AffectsHouses)
217+
.Process(this->RevengeWeapon_UseInvokerAsOwner)
213218
.Process(this->ReflectDamage)
214219
.Process(this->ReflectDamage_Warhead)
215220
.Process(this->ReflectDamage_Warhead_Detonate)
216221
.Process(this->ReflectDamage_Multiplier)
217222
.Process(this->ReflectDamage_AffectsHouses)
218223
.Process(this->ReflectDamage_Chance)
219224
.Process(this->ReflectDamage_Override)
225+
.Process(this->ReflectDamage_UseInvokerAsOwner)
220226
.Process(this->DisableWeapons)
221227
.Process(this->Unkillable)
222228
.Process(this->Groups)

src/New/Type/AttachEffectTypeClass.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class AttachEffectTypeClass final : public Enumerable<AttachEffectTypeClass>
6161
Valueable<WeaponTypeClass*> ExpireWeapon;
6262
Valueable<ExpireWeaponCondition> ExpireWeapon_TriggerOn;
6363
Valueable<bool> ExpireWeapon_CumulativeOnlyOnce;
64+
Valueable<bool> ExpireWeapon_UseInvokerAsOwner;
6465
Nullable<ColorStruct> Tint_Color;
6566
Valueable<double> Tint_Intensity;
6667
Valueable<AffectedHouse> Tint_VisibleToHouses;
@@ -83,13 +84,15 @@ class AttachEffectTypeClass final : public Enumerable<AttachEffectTypeClass>
8384
ValueableVector<WarheadTypeClass*> Crit_DisallowWarheads;
8485
Valueable<WeaponTypeClass*> RevengeWeapon;
8586
Valueable<AffectedHouse> RevengeWeapon_AffectsHouses;
87+
Valueable<bool> RevengeWeapon_UseInvokerAsOwner;
8688
Valueable<bool> ReflectDamage;
8789
Nullable<WarheadTypeClass*> ReflectDamage_Warhead;
8890
Valueable<bool> ReflectDamage_Warhead_Detonate;
8991
Valueable<double> ReflectDamage_Multiplier;
9092
Valueable<AffectedHouse> ReflectDamage_AffectsHouses;
9193
Valueable<double> ReflectDamage_Chance;
9294
Nullable<int> ReflectDamage_Override;
95+
Valueable<bool> ReflectDamage_UseInvokerAsOwner;
9396
Valueable<bool> DisableWeapons;
9497
Valueable<bool> Unkillable;
9598

@@ -117,6 +120,7 @@ class AttachEffectTypeClass final : public Enumerable<AttachEffectTypeClass>
117120
, ExpireWeapon {}
118121
, ExpireWeapon_TriggerOn { ExpireWeaponCondition::Expire }
119122
, ExpireWeapon_CumulativeOnlyOnce { false }
123+
, ExpireWeapon_UseInvokerAsOwner { false }
120124
, Tint_Color {}
121125
, Tint_Intensity { 0.0 }
122126
, Tint_VisibleToHouses { AffectedHouse::All }
@@ -140,12 +144,14 @@ class AttachEffectTypeClass final : public Enumerable<AttachEffectTypeClass>
140144
, RevengeWeapon {}
141145
, RevengeWeapon_AffectsHouses { AffectedHouse::All }
142146
, ReflectDamage { false }
147+
, RevengeWeapon_UseInvokerAsOwner { false }
143148
, ReflectDamage_Warhead {}
144149
, ReflectDamage_Warhead_Detonate { false }
145150
, ReflectDamage_Multiplier { 1.0 }
146151
, ReflectDamage_AffectsHouses { AffectedHouse::All }
147152
, ReflectDamage_Chance { 1.0 }
148153
, ReflectDamage_Override {}
154+
, ReflectDamage_UseInvokerAsOwner { false }
149155
, DisableWeapons { false }
150156
, Unkillable { false }
151157
, Groups {}

0 commit comments

Comments
 (0)