mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-12-03 01:12:23 +00:00
- fixed: P_PoisonPlayer and P_PoisonDamage did not check for NODAMAGE.
- fixed: P_PoisonDamage's check for Buddha2 and the Buddha powerup were inverted. - fixed: P_PoisonDamage checked the modified damage instead of the raw, allowing amplifiers to boost the damage beyond telefrag and circumventing regular buddha.
This commit is contained in:
parent
807df33e1a
commit
6fd3bea38c
1 changed files with 14 additions and 6 deletions
|
@ -1663,7 +1663,8 @@ bool AActor::CallOkayToSwitchTarget(AActor *other)
|
||||||
|
|
||||||
bool P_PoisonPlayer (player_t *player, AActor *poisoner, AActor *source, int poison)
|
bool P_PoisonPlayer (player_t *player, AActor *poisoner, AActor *source, int poison)
|
||||||
{
|
{
|
||||||
if((player->cheats&CF_GODMODE) || (player->mo->flags2 & MF2_INVULNERABLE) || (player->cheats & CF_GODMODE2))
|
if ((player->cheats & CF_GODMODE) || (player->mo->flags2 & MF2_INVULNERABLE) || (player->cheats & CF_GODMODE2) ||
|
||||||
|
(player->mo->flags5 & MF5_NODAMAGE))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1720,8 +1721,15 @@ void P_PoisonDamage (player_t *player, AActor *source, int damage, bool playPain
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((damage < TELEFRAG_DAMAGE && ((target->flags2 & MF2_INVULNERABLE) ||
|
|
||||||
(player->cheats & CF_GODMODE))) || (player->cheats & CF_GODMODE2))
|
// [MC] This must be checked before any modifications. Otherwise, power amplifiers
|
||||||
|
// may result in doing too much damage that cannot be negated by regular buddha,
|
||||||
|
// which is inconsistent. The raw damage must be the only determining factor for
|
||||||
|
// determining if telefrag is actually desired.
|
||||||
|
const bool telefragDamage = (damage >= TELEFRAG_DAMAGE && !(target->flags7 & MF7_LAXTELEFRAGDMG));
|
||||||
|
|
||||||
|
if ((player->cheats & CF_GODMODE2) || (target->flags5 & MF5_NODAMAGE) || //These two are never subjected to telefrag thresholds.
|
||||||
|
(!telefragDamage && ((target->flags2 & MF2_INVULNERABLE) || (player->cheats & CF_GODMODE))))
|
||||||
{ // target is invulnerable
|
{ // target is invulnerable
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1759,9 +1767,9 @@ void P_PoisonDamage (player_t *player, AActor *source, int damage, bool playPain
|
||||||
target->health -= damage;
|
target->health -= damage;
|
||||||
if (target->health <= 0)
|
if (target->health <= 0)
|
||||||
{ // Death
|
{ // Death
|
||||||
if ((((player->cheats & CF_BUDDHA) || (player->cheats & CF_BUDDHA2) ||
|
if ((player->cheats & CF_BUDDHA2) || //Buddha2 is never subjected to telefrag damage thresholds.
|
||||||
(player->mo->flags7 & MF7_BUDDHA)) && damage < TELEFRAG_DAMAGE) ||
|
((player->cheats & CF_BUDDHA) || (player->mo->flags7 & MF7_BUDDHA) ||
|
||||||
(player->mo->FindInventory (PClass::FindActor(NAME_PowerBuddha),true) != nullptr))
|
(player->mo->FindInventory(PClass::FindActor(NAME_PowerBuddha), true) != nullptr) && !telefragDamage))
|
||||||
{ // [SP] Save the player...
|
{ // [SP] Save the player...
|
||||||
player->health = target->health = 1;
|
player->health = target->health = 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue