mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-27 22:42:29 +00:00
- MF2_NODMGTHRUST now works with players, too. (Previously, it was only for
missiles.) Also added PPF_NOTHRUSTWHILEINVUL to prevent invulnerable players from being thrusted while taking damage. (Non-players were already unthrusted.) SVN r1695 (trunk)
This commit is contained in:
parent
37b6e547cd
commit
f2b7417020
8 changed files with 43 additions and 11 deletions
|
@ -1,4 +1,8 @@
|
|||
June 30, 2009
|
||||
- MF2_NODMGTHRUST now works with players, too. (Previously, it was only for
|
||||
missiles.) Also added PPF_NOTHRUSTWHILEINVUL to prevent invulnerable players
|
||||
from being thrusted while taking damage. (Non-players were already
|
||||
unthrusted.)
|
||||
- A_ZoomFactor now scales turning with the FOV by default. ZOOM_NOSCALETURNING
|
||||
will leave it unaltered.
|
||||
- Added Gez's PowerInvisibility changes.
|
||||
|
|
|
@ -118,6 +118,7 @@ public:
|
|||
int crouchsprite;
|
||||
int MaxHealth;
|
||||
int RunHealth;
|
||||
int PlayerFlags;
|
||||
TObjPtr<AInventory> InvFirst; // first inventory item displayed on inventory bar
|
||||
TObjPtr<AInventory> InvSel; // selected inventory item
|
||||
|
||||
|
@ -145,6 +146,14 @@ class APlayerChunk : public APlayerPawn
|
|||
DECLARE_CLASS (APlayerChunk, APlayerPawn)
|
||||
};
|
||||
|
||||
//
|
||||
// PlayerPawn flags
|
||||
//
|
||||
enum
|
||||
{
|
||||
PPF_NOTHRUSTWHENINVUL = 1, // Attacks do not thrust the player if they are invulnerable.
|
||||
};
|
||||
|
||||
//
|
||||
// Player states.
|
||||
//
|
||||
|
|
|
@ -916,18 +916,20 @@ void P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage
|
|||
}
|
||||
if ((target->flags2 & MF2_INVULNERABLE) && damage < 1000000 && !(flags & DMG_FORCED))
|
||||
{ // actor is invulnerable
|
||||
if (!target->player)
|
||||
if (target->player == NULL)
|
||||
{
|
||||
if (!inflictor || !(inflictor->flags3 & MF3_FOILINVUL))
|
||||
if (inflictor == NULL || !(inflictor->flags3 & MF3_FOILINVUL))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Only in Hexen invulnerable players are excluded from getting
|
||||
// thrust by damage.
|
||||
if (gameinfo.gametype == GAME_Hexen) return;
|
||||
// Players are optionally excluded from getting thrust by damage.
|
||||
if (static_cast<APlayerPawn *>(target)->PlayerFlags & PPF_NOTHRUSTWHENINVUL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1024,7 +1026,8 @@ void P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage
|
|||
if (inflictor && inflictor != target // [RH] Not if hurting own self
|
||||
&& !(target->flags & MF_NOCLIP)
|
||||
&& !(inflictor->flags2 & MF2_NODMGTHRUST)
|
||||
&& !(flags & DMG_THRUSTLESS))
|
||||
&& !(flags & DMG_THRUSTLESS)
|
||||
&& (source == NULL || source->player == NULL || !(source->flags2 & MF2_NODMGTHRUST)))
|
||||
{
|
||||
int kickback;
|
||||
|
||||
|
|
|
@ -425,6 +425,10 @@ void APlayerPawn::Serialize (FArchive &arc)
|
|||
<< InvSel
|
||||
<< MorphWeapon
|
||||
<< DamageFade;
|
||||
if (SaveVersion >= 1695)
|
||||
{
|
||||
arc << PlayerFlags;
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
|
|
@ -264,7 +264,6 @@ static FFlagDef InventoryFlags[] =
|
|||
DEFINE_FLAG(IF, PERSISTENTPOWER, AInventory, ItemFlags),
|
||||
|
||||
DEFINE_DEPRECATED_FLAG(PICKUPFLASH),
|
||||
|
||||
};
|
||||
|
||||
static FFlagDef WeaponFlags[] =
|
||||
|
@ -292,13 +291,20 @@ static FFlagDef WeaponFlags[] =
|
|||
DEFINE_DUMMY_FLAG(NOLMS),
|
||||
};
|
||||
|
||||
static FFlagDef PlayerPawnFlags[] =
|
||||
{
|
||||
// PlayerPawn flags
|
||||
DEFINE_FLAG(PPF, NOTHRUSTWHENINVUL, APlayerPawn, PlayerFlags),
|
||||
};
|
||||
|
||||
static const struct { const PClass *Type; FFlagDef *Defs; int NumDefs; } FlagLists[] =
|
||||
{
|
||||
{ RUNTIME_CLASS(AActor), ActorFlags, sizeof(ActorFlags)/sizeof(FFlagDef) },
|
||||
{ RUNTIME_CLASS(AInventory), InventoryFlags, sizeof(InventoryFlags)/sizeof(FFlagDef) },
|
||||
{ RUNTIME_CLASS(AWeapon), WeaponFlags, sizeof(WeaponFlags)/sizeof(FFlagDef) }
|
||||
{ RUNTIME_CLASS(AActor), ActorFlags, countof(ActorFlags) },
|
||||
{ RUNTIME_CLASS(AInventory), InventoryFlags, countof(InventoryFlags) },
|
||||
{ RUNTIME_CLASS(AWeapon), WeaponFlags, countof(WeaponFlags) },
|
||||
{ RUNTIME_CLASS(APlayerPawn), PlayerPawnFlags,countof(PlayerPawnFlags) },
|
||||
};
|
||||
#define NUM_FLAG_LISTS 3
|
||||
#define NUM_FLAG_LISTS (countof(FlagLists))
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
|
|
|
@ -9,6 +9,8 @@ ACTOR ClericPlayer : PlayerPawn
|
|||
Height 64
|
||||
Speed 1
|
||||
+NOSKIN
|
||||
+NODAMAGETHRUST
|
||||
+NOTHRUSTWHENINVUL
|
||||
PainSound "PlayerClericPain"
|
||||
RadiusDamageFactor 0.25
|
||||
Player.JumpZ 9.75
|
||||
|
|
|
@ -8,6 +8,8 @@ ACTOR FighterPlayer : PlayerPawn
|
|||
Height 64
|
||||
Speed 1
|
||||
+NOSKIN
|
||||
+NODAMAGETHRUST
|
||||
+NOTHRUSTWHENINVUL
|
||||
PainSound "PlayerFighterPain"
|
||||
RadiusDamageFactor 0.25
|
||||
Player.JumpZ 9.75
|
||||
|
|
|
@ -9,6 +9,8 @@ ACTOR MagePlayer : PlayerPawn
|
|||
Height 64
|
||||
Speed 1
|
||||
+NOSKIN
|
||||
+NODAMAGETHRUST
|
||||
+NOTHRUSTWHENINVUL
|
||||
PainSound "PlayerMagePain"
|
||||
RadiusDamageFactor 0.25
|
||||
Player.JumpZ 9.75
|
||||
|
|
Loading…
Reference in a new issue