mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-11 07:12:16 +00:00
- scriptified AÜpwerInvulnerable.
This commit is contained in:
parent
6990a46daf
commit
8f6571241d
5 changed files with 124 additions and 130 deletions
|
@ -422,124 +422,6 @@ void APowerup::OwnerDied ()
|
||||||
Destroy ();
|
Destroy ();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invulnerability Powerup ---------------------------------------------------
|
|
||||||
|
|
||||||
IMPLEMENT_CLASS(APowerInvulnerable, false, false)
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
//
|
|
||||||
// APowerInvulnerable :: InitEffect
|
|
||||||
//
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
void APowerInvulnerable::InitEffect ()
|
|
||||||
{
|
|
||||||
Super::InitEffect();
|
|
||||||
Owner->effects &= ~FX_RESPAWNINVUL;
|
|
||||||
Owner->flags2 |= MF2_INVULNERABLE;
|
|
||||||
if (Mode == NAME_None && Owner->IsKindOf(RUNTIME_CLASS(APlayerPawn)))
|
|
||||||
{
|
|
||||||
Mode = static_cast<PClassPlayerPawn *>(Owner->GetClass())->InvulMode;
|
|
||||||
}
|
|
||||||
if (Mode == NAME_Reflective)
|
|
||||||
{
|
|
||||||
Owner->flags2 |= MF2_REFLECTIVE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
//
|
|
||||||
// APowerInvulnerable :: DoEffect
|
|
||||||
//
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
void APowerInvulnerable::DoEffect ()
|
|
||||||
{
|
|
||||||
Super::DoEffect ();
|
|
||||||
|
|
||||||
if (Owner == NULL)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Mode == NAME_Ghost)
|
|
||||||
{
|
|
||||||
if (!(Owner->flags & MF_SHADOW))
|
|
||||||
{
|
|
||||||
// Don't mess with the translucency settings if an
|
|
||||||
// invisibility powerup is active.
|
|
||||||
Owner->RenderStyle = STYLE_Translucent;
|
|
||||||
if (!(level.time & 7) && Owner->Alpha > 0 && Owner->Alpha < 1)
|
|
||||||
{
|
|
||||||
if (Owner->Alpha == HX_SHADOW)
|
|
||||||
{
|
|
||||||
Owner->Alpha = HX_ALTSHADOW;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Owner->Alpha = 0;
|
|
||||||
Owner->flags2 |= MF2_NONSHOOTABLE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!(level.time & 31))
|
|
||||||
{
|
|
||||||
if (Owner->Alpha == 0)
|
|
||||||
{
|
|
||||||
Owner->flags2 &= ~MF2_NONSHOOTABLE;
|
|
||||||
Owner->Alpha = HX_ALTSHADOW;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Owner->Alpha = HX_SHADOW;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Owner->flags2 &= ~MF2_NONSHOOTABLE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
//
|
|
||||||
// APowerInvulnerable :: EndEffect
|
|
||||||
//
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
void APowerInvulnerable::EndEffect ()
|
|
||||||
{
|
|
||||||
Super::EndEffect();
|
|
||||||
|
|
||||||
if (Owner == NULL)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Owner->flags2 &= ~MF2_INVULNERABLE;
|
|
||||||
Owner->effects &= ~FX_RESPAWNINVUL;
|
|
||||||
if (Mode == NAME_Ghost)
|
|
||||||
{
|
|
||||||
Owner->flags2 &= ~MF2_NONSHOOTABLE;
|
|
||||||
if (!(Owner->flags & MF_SHADOW))
|
|
||||||
{
|
|
||||||
// Don't mess with the translucency settings if an
|
|
||||||
// invisibility powerup is active.
|
|
||||||
Owner->RenderStyle = STYLE_Normal;
|
|
||||||
Owner->Alpha = 1.;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (Mode == NAME_Reflective)
|
|
||||||
{
|
|
||||||
Owner->flags2 &= ~MF2_REFLECTIVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Owner->player != NULL)
|
|
||||||
{
|
|
||||||
Owner->player->fixedcolormap = NOFIXEDCOLORMAP;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Speed Powerup -------------------------------------------------------------
|
// Speed Powerup -------------------------------------------------------------
|
||||||
|
|
||||||
IMPLEMENT_CLASS(APowerSpeed, false, false)
|
IMPLEMENT_CLASS(APowerSpeed, false, false)
|
||||||
|
|
|
@ -57,15 +57,6 @@ public:
|
||||||
double Strength; // Meaning depends on powerup - currently used only by Invisibility
|
double Strength; // Meaning depends on powerup - currently used only by Invisibility
|
||||||
};
|
};
|
||||||
|
|
||||||
class APowerInvulnerable : public APowerup
|
|
||||||
{
|
|
||||||
DECLARE_CLASS (APowerInvulnerable, APowerup)
|
|
||||||
protected:
|
|
||||||
virtual void InitEffect () override;
|
|
||||||
virtual void DoEffect () override;
|
|
||||||
virtual void EndEffect () override;
|
|
||||||
};
|
|
||||||
|
|
||||||
class APowerSpeed : public APowerup
|
class APowerSpeed : public APowerup
|
||||||
{
|
{
|
||||||
DECLARE_CLASS (APowerSpeed, APowerup)
|
DECLARE_CLASS (APowerSpeed, APowerup)
|
||||||
|
|
|
@ -5373,7 +5373,7 @@ APlayerPawn *P_SpawnPlayer (FPlayerStart *mthing, int playernum, int flags)
|
||||||
(dmflags2 & DF2_YES_RESPAWN_INVUL) &&
|
(dmflags2 & DF2_YES_RESPAWN_INVUL) &&
|
||||||
(multiplayer || alwaysapplydmflags))
|
(multiplayer || alwaysapplydmflags))
|
||||||
{
|
{
|
||||||
APowerup *invul = static_cast<APowerup*>(p->mo->GiveInventoryType (RUNTIME_CLASS(APowerInvulnerable)));
|
APowerup *invul = static_cast<APowerup*>(p->mo->GiveInventoryType (PClass::FindActor(NAME_PowerInvulnerable)));
|
||||||
invul->EffectTics = 3*TICRATE;
|
invul->EffectTics = 3*TICRATE;
|
||||||
invul->BlendColor = 0; // don't mess with the view
|
invul->BlendColor = 0; // don't mess with the view
|
||||||
invul->ItemFlags |= IF_UNDROPPABLE; // Don't drop this
|
invul->ItemFlags |= IF_UNDROPPABLE; // Don't drop this
|
||||||
|
|
|
@ -100,6 +100,7 @@ static FFlagDef InternalActorFlagDefs[]=
|
||||||
DEFINE_FLAG(MF6, INTRYMOVE, AActor, flags6),
|
DEFINE_FLAG(MF6, INTRYMOVE, AActor, flags6),
|
||||||
DEFINE_FLAG(MF7, HANDLENODELAY, AActor, flags7),
|
DEFINE_FLAG(MF7, HANDLENODELAY, AActor, flags7),
|
||||||
DEFINE_FLAG(MF7, FLYCHEAT, AActor, flags7),
|
DEFINE_FLAG(MF7, FLYCHEAT, AActor, flags7),
|
||||||
|
DEFINE_FLAG(FX, RESPAWNINVUL, AActor, effects),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ class Powerup : Inventory native
|
||||||
//
|
//
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
class PowerInvulnerable : Powerup native
|
class PowerInvulnerable : Powerup
|
||||||
{
|
{
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
|
@ -46,6 +46,126 @@ class PowerInvulnerable : Powerup native
|
||||||
inventory.icon "SPSHLD0";
|
inventory.icon "SPSHLD0";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
// APowerInvulnerable :: InitEffect
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
override void InitEffect ()
|
||||||
|
{
|
||||||
|
Super.InitEffect();
|
||||||
|
Owner.bRespawnInvul = false;
|
||||||
|
Owner.bInvulnerable = true;
|
||||||
|
if (Mode == 'None' && Owner is "PlayerPawn")
|
||||||
|
{
|
||||||
|
Mode = PlayerPawn(Owner).InvulMode;
|
||||||
|
}
|
||||||
|
if (Mode == 'Reflective')
|
||||||
|
{
|
||||||
|
Owner.bReflective = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
// APowerInvulnerable :: DoEffect
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
override void DoEffect ()
|
||||||
|
{
|
||||||
|
Super.DoEffect ();
|
||||||
|
|
||||||
|
if (Owner == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Mode == 'Ghost')
|
||||||
|
{
|
||||||
|
if (!Owner.bShadow)
|
||||||
|
{
|
||||||
|
// Don't mess with the translucency settings if an
|
||||||
|
// invisibility powerup is active.
|
||||||
|
let alpha = Owner.Alpha;
|
||||||
|
if (!(level.time & 7) && alpha > 0 && alpha < 1)
|
||||||
|
{
|
||||||
|
if (alpha == HX_SHADOW)
|
||||||
|
{
|
||||||
|
alpha = HX_ALTSHADOW;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alpha = 0;
|
||||||
|
Owner.bNonShootable = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!(level.time & 31))
|
||||||
|
{
|
||||||
|
if (alpha == 0)
|
||||||
|
{
|
||||||
|
Owner.bNonShootable = false;
|
||||||
|
alpha = HX_ALTSHADOW;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alpha = HX_SHADOW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Owner.A_SetRenderStyle(alpha, STYLE_Translucent);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Owner.bNonShootable = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
// APowerInvulnerable :: EndEffect
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
override void EndEffect ()
|
||||||
|
{
|
||||||
|
Super.EndEffect();
|
||||||
|
|
||||||
|
if (Owner == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Owner.bRespawnInvul = false;
|
||||||
|
Owner.bInvulnerable = false;
|
||||||
|
if (Mode == 'Ghost')
|
||||||
|
{
|
||||||
|
Owner.bNonShootable = false;
|
||||||
|
if (!bShadow)
|
||||||
|
{
|
||||||
|
// Don't mess with the translucency settings if an
|
||||||
|
// invisibility powerup is active.
|
||||||
|
Owner.A_SetRenderStyle(1, STYLE_Normal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Mode == 'Reflective')
|
||||||
|
{
|
||||||
|
Owner.bReflective = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Owner.player != NULL)
|
||||||
|
{
|
||||||
|
Owner.player.fixedcolormap = PlayerInfo.NOFIXEDCOLORMAP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
// APowerInvulnerable :: AlterWeaponSprite
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
override void AlterWeaponSprite (VisStyle vis, in out int changed)
|
override void AlterWeaponSprite (VisStyle vis, in out int changed)
|
||||||
{
|
{
|
||||||
if (Owner != NULL)
|
if (Owner != NULL)
|
||||||
|
|
Loading…
Reference in a new issue