Skip to content

Commit 72b1654

Browse files
committed
Change the value of Player Can't Use spawnflag of func_button. Fix #22
Deprecate the old value. Add a temporary hack for Blue Shift campaign
1 parent 8382559 commit 72b1654

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

dlls/buttons.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@
3535
#define SF_BUTTON_TOGGLE 32 // button stays pushed until reactivated
3636
#define SF_BUTTON_SPARK_IF_OFF 64 // button sparks in OFF state
3737
#define SF_BUTTON_TOUCH_ONLY 256 // button only fires as a result of USE key.
38-
#define SF_BUTTON_PLAYER_CANT_USE 512 // Player can't impulse use this button
38+
#define SF_BUTTON_PLAYER_CANT_USE_OLD 512
3939
#define SF_BUTTON_CHECK_MASTER_ON_TOGGLE_RETURN 1024 // Check master and play locked and unlocked sounds on toggle return
40+
#define SF_BUTTON_PLAYER_CANT_USE 16384 // Player can't impulse use this button
4041

4142
#define SF_GLOBAL_SET 1 // Set global state to initial state on spawn
4243
#define SF_GLOBAL_ACT_AS_MASTER 4
@@ -861,7 +862,7 @@ class CBaseButton : public CBaseToggle
861862

862863
bool IsAllowedToSpeak( void ) override { return true; }
863864
bool IsUsefulToDisplayHint(CBaseEntity *pPlayer) {
864-
return !FBitSet(pev->spawnflags, SF_BUTTON_PLAYER_CANT_USE);
865+
return !FBitSet(pev->spawnflags, SF_BUTTON_PLAYER_CANT_USE|SF_BUTTON_PLAYER_CANT_USE_OLD);
865866
}
866867

867868
bool m_fStayPushed; // button stays pushed in until touched again?
@@ -900,7 +901,7 @@ static constexpr const char* sparkSoundScript = "DoSpark";
900901
int CBaseButton::ObjectCaps( void )
901902
{
902903
int objectCaps = (CBaseToggle:: ObjectCaps() & ~FCAP_ACROSS_TRANSITION);
903-
if (!pev->takedamage && !FBitSet(pev->spawnflags,SF_BUTTON_PLAYER_CANT_USE))
904+
if (!pev->takedamage && !FBitSet(pev->spawnflags, SF_BUTTON_PLAYER_CANT_USE|SF_BUTTON_PLAYER_CANT_USE_OLD))
904905
objectCaps |= FCAP_IMPULSE_USE;
905906
if (FBitSet(pev->spawnflags, SF_BUTTON_ONLYDIRECT) || m_iDirectUse == PLAYER_USE_POLICY_DIRECT)
906907
objectCaps |= FCAP_ONLYDIRECT_USE;
@@ -1205,7 +1206,17 @@ where it can be triggered again.
12051206
LINK_ENTITY_TO_CLASS( func_button, CBaseButton )
12061207

12071208
void CBaseButton::Spawn()
1208-
{
1209+
{
1210+
if (FBitSet(pev->spawnflags, SF_BUTTON_PLAYER_CANT_USE_OLD))
1211+
{
1212+
ALERT(at_warning, "Deprecated button spawnflag (512) is used! Use spawnflag 16384 instead!\n");
1213+
if (FStrEq(STRING(gpGlobals->mapname), "ba_teleport2"))
1214+
{
1215+
ALERT(at_console, "Blue Shift map detected. Removing the deprecated spawnflag\n");
1216+
ClearBits(pev->spawnflags, SF_BUTTON_PLAYER_CANT_USE_OLD);
1217+
}
1218+
}
1219+
12091220
const char *pszSound;
12101221

12111222
//----------------------------------------------------
@@ -1277,7 +1288,7 @@ void CBaseButton::Spawn()
12771288
else
12781289
{
12791290
SetTouch( NULL );
1280-
if (FBitSet(pev->spawnflags, SF_BUTTON_PLAYER_CANT_USE))
1291+
if (FBitSet(pev->spawnflags, SF_BUTTON_PLAYER_CANT_USE|SF_BUTTON_PLAYER_CANT_USE_OLD))
12811292
SetUse( &CBaseButton::ButtonUse_IgnorePlayer );
12821293
else
12831294
SetUse( &CBaseButton::ButtonUse );
@@ -1766,7 +1777,7 @@ void CRotButton::Spawn( void )
17661777
if( !FBitSet( pev->spawnflags, SF_BUTTON_TOUCH_ONLY ) )
17671778
{
17681779
SetTouch( NULL );
1769-
if (FBitSet(pev->spawnflags, SF_BUTTON_PLAYER_CANT_USE))
1780+
if (FBitSet(pev->spawnflags, SF_BUTTON_PLAYER_CANT_USE|SF_BUTTON_PLAYER_CANT_USE_OLD))
17701781
SetUse( &CBaseButton::ButtonUse_IgnorePlayer );
17711782
else
17721783
SetUse( &CBaseButton::ButtonUse );

fgd/halflife.fgd

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2790,8 +2790,9 @@
27902790
32: "Toggle" : 0
27912791
64: "Sparks" : 0
27922792
256:"Touch Activates": 0
2793-
512:"Player Can't Use": 0
2793+
512:"Deprecated (untick this!)": 0
27942794
1024:"Check master on return": 0
2795+
16384:"Player Can't Use": 0
27952796
]
27962797
target_on_locked(target_destination) : "Target on locked" : : "Trigger if used when locked"
27972798
_minlight(string) : "Minimum light level"

0 commit comments

Comments
 (0)