mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-11 15:21:51 +00:00
This commit is contained in:
commit
0f54d7f854
15 changed files with 43 additions and 37 deletions
|
@ -398,6 +398,10 @@ enum ActorFlag7
|
|||
MF7_FORCEINFIGHTING = 0x40000000, // overrides a map setting of 'no infighting'.
|
||||
MF7_SPRITEFLIP = 0x80000000, // sprite flipped on x-axis
|
||||
};
|
||||
enum ActorFlag8
|
||||
{
|
||||
MF8_FRIGHTENING = 0x00000001, // for those moments when halloween just won't do
|
||||
};
|
||||
|
||||
// --- mobj.renderflags ---
|
||||
enum ActorRenderFlag
|
||||
|
@ -517,6 +521,7 @@ typedef TFlags<ActorFlag4> ActorFlags4;
|
|||
typedef TFlags<ActorFlag5> ActorFlags5;
|
||||
typedef TFlags<ActorFlag6> ActorFlags6;
|
||||
typedef TFlags<ActorFlag7> ActorFlags7;
|
||||
typedef TFlags<ActorFlag8> ActorFlags8;
|
||||
typedef TFlags<ActorRenderFlag> ActorRenderFlags;
|
||||
typedef TFlags<ActorBounceFlag, uint16_t> ActorBounceFlags;
|
||||
DEFINE_TFLAGS_OPERATORS (ActorFlags)
|
||||
|
@ -526,6 +531,7 @@ DEFINE_TFLAGS_OPERATORS (ActorFlags4)
|
|||
DEFINE_TFLAGS_OPERATORS (ActorFlags5)
|
||||
DEFINE_TFLAGS_OPERATORS (ActorFlags6)
|
||||
DEFINE_TFLAGS_OPERATORS (ActorFlags7)
|
||||
DEFINE_TFLAGS_OPERATORS (ActorFlags8)
|
||||
DEFINE_TFLAGS_OPERATORS (ActorRenderFlags)
|
||||
DEFINE_TFLAGS_OPERATORS (ActorBounceFlags)
|
||||
|
||||
|
@ -1022,6 +1028,7 @@ public:
|
|||
ActorFlags5 flags5; // OMG! We need another one.
|
||||
ActorFlags6 flags6; // Shit! Where did all the flags go?
|
||||
ActorFlags7 flags7; // WHO WANTS TO BET ON 8!?
|
||||
ActorFlags8 flags8; // I see your 8, and raise you a bet for 9.
|
||||
double Floorclip; // value to use for floor clipping
|
||||
double radius, Height; // for movement checking
|
||||
|
||||
|
|
|
@ -211,7 +211,6 @@ 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;
|
||||
|
||||
|
|
|
@ -207,6 +207,7 @@ xx(QuestItem28)
|
|||
xx(QuestItem29)
|
||||
xx(PowerDoubleFiringSpeed)
|
||||
xx(PowerInfiniteAmmo)
|
||||
xx(PowerBuddha)
|
||||
|
||||
xx(AcolyteBlue)
|
||||
xx(SpectralLightningV1)
|
||||
|
|
|
@ -3765,6 +3765,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Respawn)
|
|||
self->flags5 = defs->flags5;
|
||||
self->flags6 = defs->flags6;
|
||||
self->flags7 = defs->flags7;
|
||||
self->flags8 = defs->flags8;
|
||||
self->SetState (self->SpawnState);
|
||||
self->renderflags &= ~RF_INVISIBLE;
|
||||
|
||||
|
|
|
@ -996,7 +996,8 @@ void P_NewChaseDir(AActor * actor)
|
|||
if (!(actor->flags6 & MF6_NOFEAR))
|
||||
{
|
||||
if ((actor->target->player != NULL && (actor->target->player->cheats & CF_FRIGHTENING)) ||
|
||||
(actor->flags4 & MF4_FRIGHTENED))
|
||||
(actor->flags4 & MF4_FRIGHTENED) ||
|
||||
(actor->target->flags8 & MF8_FRIGHTENING))
|
||||
{
|
||||
delta = -delta;
|
||||
}
|
||||
|
@ -2658,7 +2659,7 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
|
|||
|
||||
// [RH] Scared monsters attack less frequently
|
||||
if (((actor->target->player == NULL ||
|
||||
!(actor->target->player->cheats & CF_FRIGHTENING)) &&
|
||||
!((actor->target->player->cheats & CF_FRIGHTENING) || (actor->target->flags8 & MF8_FRIGHTENING))) &&
|
||||
!(actor->flags4 & MF4_FRIGHTENED)) ||
|
||||
pr_scaredycat() < 43)
|
||||
{
|
||||
|
|
|
@ -963,7 +963,7 @@ static int DamageMobj (AActor *target, AActor *inflictor, AActor *source, int da
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
if (target == source && damage < TELEFRAG_DAMAGE)
|
||||
if (target == source && (!telefragDamage || target->flags7 & MF7_LAXTELEFRAGDMG))
|
||||
{
|
||||
damage = int(damage * target->SelfDamageFactor);
|
||||
}
|
||||
|
@ -1360,7 +1360,9 @@ 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|CF_POWERBUDDHA) || (player->mo->flags7 & MF7_BUDDHA)) && !telefragDamage)) && (player->playerstate != PST_DEAD)))
|
||||
if (!(flags & DMG_FORCED) && (((player->cheats & CF_BUDDHA2) || (((player->cheats & CF_BUDDHA) ||
|
||||
(player->mo->FindInventory (PClass::FindActor(NAME_PowerBuddha),true) != nullptr) ||
|
||||
(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 +1898,9 @@ 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|CF_POWERBUDDHA) || (player->mo->flags7 & MF7_BUDDHA)) && damage < TELEFRAG_DAMAGE) || (player->cheats & CF_BUDDHA2))
|
||||
if ((((player->cheats & CF_BUDDHA) || (player->cheats & CF_BUDDHA2) ||
|
||||
(player->mo->flags7 & MF7_BUDDHA)) && damage < TELEFRAG_DAMAGE) ||
|
||||
(player->mo->FindInventory (PClass::FindActor(NAME_PowerBuddha),true) != nullptr))
|
||||
{ // [SP] Save the player...
|
||||
player->health = target->health = 1;
|
||||
}
|
||||
|
|
|
@ -2873,7 +2873,7 @@ FUNC(LS_SetPlayerProperty)
|
|||
// Add or remove a power
|
||||
if (arg2 >= PROP_INVULNERABILITY && arg2 <= PROP_SPEED)
|
||||
{
|
||||
static ENamedName powers[13] =
|
||||
static ENamedName powers[14] =
|
||||
{
|
||||
NAME_PowerInvulnerable,
|
||||
NAME_PowerStrength,
|
||||
|
@ -2887,7 +2887,8 @@ FUNC(LS_SetPlayerProperty)
|
|||
NAME_None,
|
||||
NAME_PowerSpeed,
|
||||
NAME_PowerInfiniteAmmo,
|
||||
NAME_PowerDoubleFiringSpeed
|
||||
NAME_PowerDoubleFiringSpeed,
|
||||
NAME_PowerBuddha
|
||||
};
|
||||
int power = arg2 - PROP_INVULNERABILITY;
|
||||
|
||||
|
@ -2977,7 +2978,7 @@ FUNC(LS_SetPlayerProperty)
|
|||
switch (arg2)
|
||||
{
|
||||
case PROP_BUDDHA:
|
||||
mask = CF_POWERBUDDHA;
|
||||
mask = CF_BUDDHA;
|
||||
break;
|
||||
case PROP_FROZEN:
|
||||
mask = CF_FROZEN;
|
||||
|
|
|
@ -407,6 +407,7 @@ void AActor::Serialize(FSerializer &arc)
|
|||
A("flags5", flags5)
|
||||
A("flags6", flags6)
|
||||
A("flags7", flags7)
|
||||
A("flags8", flags8)
|
||||
A("weaponspecial", weaponspecial)
|
||||
A("special1", special1)
|
||||
A("special2", special2)
|
||||
|
@ -8397,6 +8398,9 @@ void PrintMiscActorInfo(AActor *query)
|
|||
Printf("\n flags7: %x", query->flags7.GetValue());
|
||||
for (flagi = 0; flagi <= 31; flagi++)
|
||||
if (query->flags7 & ActorFlags7::FromInt(1<<flagi)) Printf(" %s", FLAG_NAME(1<<flagi, flags7));
|
||||
Printf("\n flags8: %x", query->flags8.GetValue());
|
||||
for (flagi = 0; flagi <= 31; flagi++)
|
||||
if (query->flags8 & ActorFlags8::FromInt(1<<flagi)) Printf(" %s", FLAG_NAME(1<<flagi, flags8));
|
||||
Printf("\nBounce flags: %x\nBounce factors: f:%f, w:%f",
|
||||
query->BounceFlags.GetValue(), query->bouncefactor,
|
||||
query->wallbouncefactor);
|
||||
|
|
|
@ -2156,9 +2156,10 @@ void P_FallingDamage (AActor *actor)
|
|||
{
|
||||
S_Sound (actor, CHAN_AUTO, "*land", 1, ATTN_NORM);
|
||||
P_NoiseAlert (actor, actor, true);
|
||||
if (damage >= TELEFRAG_DAMAGE && (actor->player->cheats & (CF_GODMODE | CF_BUDDHA | CF_POWERBUDDHA )))
|
||||
if (damage >= TELEFRAG_DAMAGE && ((actor->player->cheats & (CF_GODMODE | CF_BUDDHA) ||
|
||||
(actor->FindInventory(PClass::FindActor(NAME_PowerBuddha), true) != nullptr))))
|
||||
{
|
||||
damage = 999;
|
||||
damage = TELEFRAG_DAMAGE - 1;
|
||||
}
|
||||
}
|
||||
P_DamageMobj (actor, NULL, NULL, damage, NAME_Falling);
|
||||
|
|
|
@ -324,6 +324,8 @@ static FFlagDef ActorFlagDefs[]=
|
|||
DEFINE_FLAG(MF7, FORCEINFIGHTING, AActor, flags7),
|
||||
DEFINE_FLAG(MF7, SPRITEFLIP, AActor, flags7),
|
||||
|
||||
DEFINE_FLAG(MF8, FRIGHTENING, AActor, flags8),
|
||||
|
||||
// Effect flags
|
||||
DEFINE_FLAG(FX, VISIBILITYPULSE, AActor, effects),
|
||||
DEFINE_FLAG2(FX_ROCKET, ROCKETTRAIL, AActor, effects),
|
||||
|
|
|
@ -989,6 +989,7 @@ DEFINE_PROPERTY(clearflags, 0, Actor)
|
|||
defaults->flags5 = 0;
|
||||
defaults->flags6 = 0;
|
||||
defaults->flags7 = 0;
|
||||
defaults->flags8 = 0;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
|
|
@ -1768,9 +1768,9 @@ void ScaleWithAspect (int &w, int &h, int Width, int Height)
|
|||
}
|
||||
double y = w/yratio;
|
||||
if (y > h)
|
||||
w = h*yratio;
|
||||
w = static_cast<int>(h * yratio);
|
||||
else
|
||||
h = y;
|
||||
h = static_cast<int>(y);
|
||||
}
|
||||
|
||||
void IVideo::DumpAdapters ()
|
||||
|
|
|
@ -1114,7 +1114,6 @@ 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.
|
||||
|
|
|
@ -1450,26 +1450,6 @@ class PowerBuddha : Powerup
|
|||
{
|
||||
Powerup.Duration -60;
|
||||
}
|
||||
|
||||
override void InitEffect ()
|
||||
{
|
||||
Super.InitEffect();
|
||||
|
||||
if (Owner== null || Owner.player == null)
|
||||
return;
|
||||
|
||||
Owner.player.cheats |= CF_POWERBUDDHA;
|
||||
}
|
||||
|
||||
override void EndEffect ()
|
||||
{
|
||||
Super.EndEffect();
|
||||
|
||||
if (Owner== null || Owner.player == null)
|
||||
return;
|
||||
|
||||
Owner.player.cheats &= ~CF_POWERBUDDHA;
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
|
|
@ -363,6 +363,7 @@ class ListMenuItemSlider : ListMenuItemSelectable
|
|||
int mMinrange, mMaxrange;
|
||||
int mStep;
|
||||
int mSelection;
|
||||
int mDrawX;
|
||||
|
||||
//=============================================================================
|
||||
//
|
||||
|
@ -380,6 +381,7 @@ class ListMenuItemSlider : ListMenuItemSelectable
|
|||
mMinrange = min;
|
||||
mMaxrange = max;
|
||||
mStep = step;
|
||||
mDrawX = 0;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
|
@ -398,6 +400,7 @@ class ListMenuItemSlider : ListMenuItemSelectable
|
|||
mMinrange = min;
|
||||
mMaxrange = max;
|
||||
mStep = step;
|
||||
mDrawX = 0;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
|
@ -466,8 +469,8 @@ class ListMenuItemSlider : ListMenuItemSelectable
|
|||
lm.ReleaseFocus();
|
||||
}
|
||||
|
||||
int slide_left = SmallFont.StringWidth ("Green") + 8 + int(mXpos);
|
||||
int slide_right = slide_left + 12*8; // 12 char cells with 8 pixels each.
|
||||
int slide_left = mDrawX + 8;
|
||||
int slide_right = slide_left + 10*8; // 12 char cells with 8 pixels each.
|
||||
|
||||
if (type == Menu.MOUSE_Click)
|
||||
{
|
||||
|
@ -520,6 +523,8 @@ class ListMenuItemSlider : ListMenuItemSelectable
|
|||
|
||||
double x = SmallFont.StringWidth ("Green") + 8 + mXpos;
|
||||
double x2 = SmallFont.StringWidth (text) + 8 + mXpos;
|
||||
DrawSlider (MAX(x2, x), mYpos);
|
||||
mDrawX = MAX(x2, x);
|
||||
|
||||
DrawSlider (mDrawX, mYpos);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue