- Added BHS's death special flags submission.

SVN r1887 (trunk)
This commit is contained in:
Christoph Oelckers 2009-09-28 15:59:20 +00:00
parent 6d357b84b4
commit 9aab795c18
5 changed files with 16 additions and 3 deletions

View file

@ -1,4 +1,5 @@
September 28, 2009 (Changes by Graf Zahl)
- Added BHS's death special flags submission.
- Added Gez's A_Blast submission.
September 27, 2009 (Changes by Graf Zahl)

View file

@ -442,6 +442,8 @@ enum EThingSpecialActivationType
THINGSPEC_MonsterTrigger = 8, // The thing can be triggered by a monster
THINGSPEC_MissileTrigger = 16, // The thing can be triggered by a projectile
THINGSPEC_ClearSpecial = 32, // Clears special after successful activation
THINGSPEC_NoDeathSpecial = 64, // Don't activate special on death
THINGSPEC_TriggerActs = 128, // The trigger is the activator of the special (overrides LEVEL_ACTOWNSPECIAL Hexen hack)
};
// [RH] Like msecnode_t, but for the blockmap

View file

@ -420,10 +420,16 @@ void AActor::Die (AActor *source, AActor *inflictor)
// the activator of the script.
// New: In Hexen, the thing that died is the activator,
// so now a level flag selects who the activator gets to be.
if (special && (!(flags & MF_SPECIAL) || (flags3 & MF3_ISMONSTER)))
if (special && (!(flags & MF_SPECIAL) || (flags3 & MF3_ISMONSTER)) && !(activationtype & THINGSPEC_NoDeathSpecial))
{
LineSpecials[special] (NULL, level.flags & LEVEL_ACTOWNSPECIAL
? this : source, false, args[0], args[1], args[2], args[3], args[4]);
// Activation flags override LEVEL_ACTOWNSPECIAL if set.
AActor *activator = (activationtype & THINGSPEC_TriggerActs ? source :
(activationtype & THINGSPEC_ThingActs ? this : (level.flags & LEVEL_ACTOWNSPECIAL ? this : source)));
if (activationtype & THINGSPEC_ThingTargets)
this->target = source;
if (activationtype & THINGSPEC_TriggerTargets)
source->target = this;
LineSpecials[special] (NULL, activator, false, args[0], args[1], args[2], args[3], args[4]);
special = 0;
}

View file

@ -463,6 +463,8 @@ static int ParseThingActivation (FScanner &sc)
{ "THINGSPEC_MonsterTrigger", THINGSPEC_MonsterTrigger},
{ "THINGSPEC_MissileTrigger", THINGSPEC_MissileTrigger},
{ "THINGSPEC_ClearSpecial", THINGSPEC_ClearSpecial},
{ "THINGSPEC_NoDeathSpecial", THINGSPEC_NoDeathSpecial},
{ "THINGSPEC_TriggerActs", THINGSPEC_TriggerActs},
{ NULL, 0 }
};

View file

@ -86,6 +86,8 @@ enum
THINGSPEC_MonsterTrigger = 8,
THINGSPEC_MissileTrigger = 16,
THINGSPEC_ClearSpecial = 32,
THINGSPEC_NoDeathSpecial = 64,
THINGSPEC_TriggerActs = 128,
};
// Shorter aliases for same
const int AF_Default = 0;