The mod redefines the Sigil for Strife, but the new version ("PsySigil") cannot actually inherit from Sigil because it needs to inherit from Psychic's base weapon definition to allow casing of altfires. Everything works as expected except for A_FireSigil1 emulation, which results in a nasty bug in which Spectres are unkillable due to the way the SPECTRAL flag is handled.
The problem is on line 989 of p_interaction.cpp, in the function P_DamageMobj:
Code: Select all
...
else if (target->flags4 & MF4_SPECTRAL)
{
if (inflictor->FriendPlayer == 0 && !target->IsHostile(inflictor)) // Line 989
return;
}
...
I thought the trouble with SpectralLightningSpot was due to it not actually being a projectile, but I've tried redefining it with +MISSILE (and +FLOORHUGGER and a bunch of A_ScaleVelocity hacks) and using A_SpawnItemEx with SXF_TRANSFERPOINTERS to spawn the SpectralLightningV1/V2 projectiles, but no matter what I do, I can't get the engine to pass the check.
The purpose of this check, if I'm interpreting it correctly, is to not take damage from Spectral projectiles unless a player fired it or the monster who shot it is hostile toward the target, presumably to prevent infighting between Spectres and EntitySecond actors unless Thing_Hate is used. The trouble is that it also cancels damage from this projectile in a way I cannot figure out how to fix, and some way around this or alternative to this hardcoded check would be most welcome. As-is, I cannot figure out how on Earth to emulate Sigil 1's attack without running into this issue, which throws a monkey wrench into Strife modding.