- Added a separate cheat flag to handle buddha powerups. Currently, Buddha powerups could interfere and disable the actual player cheat unintentionally, when the player may not want their actual cheat to be turned off.

- Set some overlooked 1000000 damage points to TELEFRAG_DAMAGE inside the falling damage code.
This commit is contained in:
Major Cooke 2017-05-14 09:59:43 -05:00 committed by Christoph Oelckers
parent 49e4c8968f
commit 795f8f0578
6 changed files with 10 additions and 8 deletions

View file

@ -211,6 +211,7 @@ typedef enum
CF_BUDDHA2 = 1 << 24, // [MC] Absolute buddha. No voodoo can kill it either.
CF_GODMODE2 = 1 << 25, // [MC] Absolute godmode. No voodoo can kill it either.
CF_BUDDHA = 1 << 27, // [SP] Buddha mode - take damage, but don't die
CF_POWERBUDDHA = 1 << 28, // [MC] Powerup version of Buddha to prevent interference with actual cheat.
CF_NOCLIP2 = 1 << 30, // [RH] More Quake-like noclip
} cheat_t;

View file

@ -1360,7 +1360,7 @@ static int DamageMobj (AActor *target, AActor *inflictor, AActor *source, int da
// but telefragging should still do enough damage to kill the player)
// Ignore players that are already dead.
// [MC]Buddha2 absorbs telefrag damage, and anything else thrown their way.
if (!(flags & DMG_FORCED) && (((player->cheats & CF_BUDDHA2) || (((player->cheats & CF_BUDDHA) || (player->mo->flags7 & MF7_BUDDHA)) && !telefragDamage)) && (player->playerstate != PST_DEAD)))
if (!(flags & DMG_FORCED) && (((player->cheats & CF_BUDDHA2) || (((player->cheats & CF_BUDDHA|CF_POWERBUDDHA) || (player->mo->flags7 & MF7_BUDDHA)) && !telefragDamage)) && (player->playerstate != PST_DEAD)))
{
// If this is a voodoo doll we need to handle the real player as well.
player->mo->health = target->health = player->health = 1;
@ -1896,7 +1896,7 @@ void P_PoisonDamage (player_t *player, AActor *source, int damage, bool playPain
target->health -= damage;
if (target->health <= 0)
{ // Death
if ((((player->cheats & CF_BUDDHA) || (player->mo->flags7 & MF7_BUDDHA)) && damage < TELEFRAG_DAMAGE) || (player->cheats & CF_BUDDHA2))
if ((((player->cheats & CF_BUDDHA|CF_POWERBUDDHA) || (player->mo->flags7 & MF7_BUDDHA)) && damage < TELEFRAG_DAMAGE) || (player->cheats & CF_BUDDHA2))
{ // [SP] Save the player...
player->health = target->health = 1;
}

View file

@ -2977,7 +2977,7 @@ FUNC(LS_SetPlayerProperty)
switch (arg2)
{
case PROP_BUDDHA:
mask = CF_BUDDHA;
mask = CF_POWERBUDDHA;
break;
case PROP_FROZEN:
mask = CF_FROZEN;

View file

@ -2105,7 +2105,7 @@ void P_FallingDamage (AActor *actor)
}
if (vel >= 63)
{ // automatic death
damage = 1000000;
damage = TELEFRAG_DAMAGE;
}
else
{
@ -2126,7 +2126,7 @@ void P_FallingDamage (AActor *actor)
}
if (vel >= 84)
{ // automatic death
damage = 1000000;
damage = TELEFRAG_DAMAGE;
}
else
{
@ -2156,7 +2156,7 @@ void P_FallingDamage (AActor *actor)
{
S_Sound (actor, CHAN_AUTO, "*land", 1, ATTN_NORM);
P_NoiseAlert (actor, actor, true);
if (damage == 1000000 && (actor->player->cheats & (CF_GODMODE | CF_BUDDHA)))
if (damage >= TELEFRAG_DAMAGE && (actor->player->cheats & (CF_GODMODE | CF_BUDDHA | CF_POWERBUDDHA )))
{
damage = 999;
}

View file

@ -1114,6 +1114,7 @@ enum EPlayerCheats
CF_BUDDHA2 = 1 << 24, // [MC] Absolute buddha. No voodoo can kill it either.
CF_GODMODE2 = 1 << 25, // [MC] Absolute godmode. No voodoo can kill it either.
CF_BUDDHA = 1 << 27, // [SP] Buddha mode - take damage, but don't die
CF_POWERBUDDHA = 1 << 28, // [MC] Powerup version of Buddha to prevent interference with actual cheat.
CF_NOCLIP2 = 1 << 30, // [RH] More Quake-like noclip
// These flags no longer exist, but keep the names for some stray mod that might have used them.

View file

@ -1458,7 +1458,7 @@ class PowerBuddha : Powerup
if (Owner== null || Owner.player == null)
return;
Owner.player.cheats |= CF_BUDDHA;
Owner.player.cheats |= CF_POWERBUDDHA;
}
override void EndEffect ()
@ -1468,7 +1468,7 @@ class PowerBuddha : Powerup
if (Owner== null || Owner.player == null)
return;
Owner.player.cheats &= ~CF_BUDDHA;
Owner.player.cheats &= ~CF_POWERBUDDHA;
}
}