Skip to content

Commit eb69891

Browse files
committed
Add player_flicker
1 parent 219bed2 commit eb69891

File tree

4 files changed

+71
-1
lines changed

4 files changed

+71
-1
lines changed

dlls/player.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,9 @@ TYPEDESCRIPTION CBasePlayer::m_playerSaveData[] =
133133
#if FEATURE_NIGHTVISION
134134
DEFINE_FIELD(CBasePlayer, m_fNVGisON, FIELD_BOOLEAN),
135135
#endif
136+
DEFINE_FIELD(CBasePlayer, m_fFlashlightON, FIELD_BOOLEAN),
137+
DEFINE_FIELD(CBasePlayer, m_fFlashlightFlicker, FIELD_BOOLEAN),
138+
DEFINE_FIELD(CBasePlayer, m_flNextFlashlightFlick, FIELD_TIME),
136139
#if FEATURE_ROPE
137140
DEFINE_FIELD(CBasePlayer, m_hRope, FIELD_EHANDLE),
138141
#endif
@@ -2607,6 +2610,20 @@ void CBasePlayer::PreThink( void )
26072610
}
26082611
}
26092612

2613+
if (m_fFlashlightON && m_fFlashlightFlicker && gpGlobals->time >= m_flNextFlashlightFlick)
2614+
{
2615+
if (FBitSet(pev->effects, EF_DIMLIGHT))
2616+
{
2617+
ClearBits(pev->effects, EF_DIMLIGHT);
2618+
}
2619+
else
2620+
{
2621+
SetBits(pev->effects, EF_DIMLIGHT);
2622+
}
2623+
2624+
m_flNextFlashlightFlick = gpGlobals->time + RANDOM_FLOAT(0.1f, 0.5f);
2625+
}
2626+
26102627
if( g_fGameOver )
26112628
return; // intermission or finale
26122629

@@ -4428,6 +4445,12 @@ void CBasePlayer::FlashlightTurnOn()
44284445
{
44294446
EmitSoundScript(Player::flashlightOnSoundScript);
44304447
SetBits( pev->effects, EF_DIMLIGHT );
4448+
m_fFlashlightON = true;
4449+
4450+
if (m_fFlashlightFlicker)
4451+
{
4452+
m_flNextFlashlightFlick = gpGlobals->time + 0.2f;
4453+
}
44314454

44324455
NVGTurnOff(false);
44334456
UpdateSuitLightBattery(true);
@@ -4442,6 +4465,7 @@ void CBasePlayer::FlashlightTurnOff( bool playOffSound )
44424465
EmitSoundScript(Player::flashlightOffSoundScript);
44434466

44444467
ClearBits( pev->effects, EF_DIMLIGHT );
4468+
m_fFlashlightON = false;
44454469
UpdateSuitLightBattery(false);
44464470
}
44474471
}
@@ -7655,6 +7679,35 @@ class CPlayerHevSentence : public CPointEntity
76557679

76567680
LINK_ENTITY_TO_CLASS( player_hevsentence, CPlayerHevSentence )
76577681

7682+
class CPlayerFlicker : public CPointEntity
7683+
{
7684+
public:
7685+
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
7686+
};
7687+
7688+
LINK_ENTITY_TO_CLASS( player_flicker, CPlayerFlicker )
7689+
7690+
void CPlayerFlicker::Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value)
7691+
{
7692+
CBasePlayer* pPlayer = g_pGameRules->EffectivePlayer(pActivator);
7693+
if (pPlayer)
7694+
{
7695+
if (ShouldToggle(useType, pPlayer->m_fFlashlightFlicker))
7696+
{
7697+
pPlayer->m_fFlashlightFlicker = !pPlayer->m_fFlashlightFlicker;
7698+
if (pPlayer->m_fFlashlightFlicker && pPlayer->FlashlightIsOn())
7699+
{
7700+
pPlayer->m_flNextFlashlightFlick = gpGlobals->time + 0.2f;
7701+
}
7702+
// Make sure the dimlight flag is set on player if the flashlight is supposed to be turned on
7703+
if (!pPlayer->m_fFlashlightFlicker && pPlayer->FlashlightIsOn())
7704+
{
7705+
SetBits(pPlayer->pev->effects, EF_DIMLIGHT);
7706+
}
7707+
}
7708+
}
7709+
}
7710+
76587711
static void DisableChangelevels()
76597712
{
76607713
CBaseEntity* pEntity = 0;

dlls/player.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ class CBasePlayer : public CBaseMonster
345345
virtual int ObjectCaps( void ) { return CBaseMonster :: ObjectCaps() & ~FCAP_ACROSS_TRANSITION; }
346346
virtual void Precache( void );
347347
bool IsOnLadder( void );
348-
bool FlashlightIsOn() { return FBitSet(pev->effects, EF_DIMLIGHT); }
348+
bool FlashlightIsOn() { return FBitSet(pev->effects, EF_DIMLIGHT) || m_fFlashlightON; }
349349
bool NVGIsOn() { return m_fNVGisON; }
350350
bool SuitLightIsOn( void ) { return FlashlightIsOn() || NVGIsOn(); }
351351
void SuitLightTurnOn( void );
@@ -478,6 +478,9 @@ class CBasePlayer : public CBaseMonster
478478
int m_DisplacerSndRoomtype;
479479
#endif
480480
bool m_fNVGisON;
481+
bool m_fFlashlightON;
482+
bool m_fFlashlightFlicker;
483+
float m_flNextFlashlightFlick;
481484
friend class CDisplacer;
482485
friend class CTriggerXenReturn;
483486

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
bookHidden: true
3+
bookToC: false
4+
---
5+
6+
# player_flicker
7+
8+
Make player's flashlight flicker.
9+
10+
### Reaction to use-type
11+
12+
Turns flickring on or off depending on the input use-type and current flicker state.

fgd/halflife.fgd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7936,6 +7936,8 @@
79367936
weapon_name(string): "Weapon name" : : "Classname of the weapon, e.g. weapon_9mmAR"
79377937
]
79387938

7939+
@PointClass base(Targetname) = player_flicker : "Start/Stop player's flashlight flickering" []
7940+
79397941
@PointClass base(Targetname) color(72 96 128) = player_hasitem : "Check if player has a specific item"
79407942
[
79417943
item_type(choices) : "Item Type" : 0 =

0 commit comments

Comments
 (0)