- added handling of MF3_FOILINVUL for A_BFGSpray. This function needs special treatment because the shooting player is considered the inflictor of the spray damage.

This commit is contained in:
Christoph Oelckers 2013-07-26 00:52:12 +02:00
parent 897a17309b
commit 992ba0bbf4
3 changed files with 4 additions and 2 deletions

View file

@ -589,7 +589,8 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_BFGSpray)
damage += (pr_bfgspray() & 7) + 1; damage += (pr_bfgspray() & 7) + 1;
thingToHit = linetarget; thingToHit = linetarget;
int newdam = P_DamageMobj (thingToHit, self->target, self->target, damage, spray != NULL? FName(spray->DamageType) : FName(NAME_BFGSplash)); int newdam = P_DamageMobj (thingToHit, self->target, self->target, damage, spray != NULL? FName(spray->DamageType) : FName(NAME_BFGSplash),
spray != NULL && (spray->flags3 & MF3_FOILINVUL)? DMG_FOILINVUL : 0);
P_TraceBleed (newdam > 0 ? newdam : damage, thingToHit, self->target); P_TraceBleed (newdam > 0 ? newdam : damage, thingToHit, self->target);
} }
} }

View file

@ -965,7 +965,7 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage,
{ // actor is invulnerable { // actor is invulnerable
if (target->player == NULL) if (target->player == NULL)
{ {
if (inflictor == NULL || !(inflictor->flags3 & MF3_FOILINVUL)) if (inflictor == NULL || (!(inflictor->flags3 & MF3_FOILINVUL) && !(flags & DMG_FOILINVUL)))
{ {
return -1; return -1;
} }

View file

@ -554,6 +554,7 @@ enum EDmgFlags
DMG_FORCED = 8, DMG_FORCED = 8,
DMG_NO_FACTOR = 16, DMG_NO_FACTOR = 16,
DMG_PLAYERATTACK = 32, DMG_PLAYERATTACK = 32,
DMG_FOILINVUL = 64,
}; };