diff --git a/LICENSE b/LICENSE index 5f937d3ae..6e729f1f5 100644 --- a/LICENSE +++ b/LICENSE @@ -18,6 +18,6 @@ WARRANTY OF ANY KIND. VALVE EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS O INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT, TITLE AND FITNESS FOR A PARTICULAR PURPOSE. LIMITATION OF LIABILITY. VALVE AND ITS LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, -OR CONSEQUENTIAL DAMAGES WHATSOEVER ) THAT MAY BE INCURRED BY YOU EVEN IF VALVE HAS BEEN ADVISED OF OR SHOULD HAVE BEEN AWARE OF THE POSSIBILITY OF SUCH DAMAGES. +OR CONSEQUENTIAL DAMAGES WHATSOEVER THAT MAY BE INCURRED BY YOU EVEN IF VALVE HAS BEEN ADVISED OF OR SHOULD HAVE BEEN AWARE OF THE POSSIBILITY OF SUCH DAMAGES. \ No newline at end of file diff --git a/README.md b/README.md index 4344b6d88..89e7d7d5a 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,11 @@ Clone the repository using the following command: Requirements: - Source SDK 2013 Multiplayer installed via Steam - - Visual Studio 2022 + - Visual Studio 2022 with the following workload and components: + - Desktop development with C++: + - MSVC v143 - VS 2022 C++ x64/x86 build tools (Latest) + - Windows 11 SDK (10.0.22621.0) or Windows 10 SDK (10.0.19041.1) + - Python 3.13 or later Inside the cloned directory, navigate to `src`, run: ```bat diff --git a/src/devtools/bin/tier0.dll b/src/devtools/bin/tier0.dll index c35333257..16cc2e714 100644 Binary files a/src/devtools/bin/tier0.dll and b/src/devtools/bin/tier0.dll differ diff --git a/src/devtools/bin/vpc.exe b/src/devtools/bin/vpc.exe index 8bdf3d169..e2270667a 100755 Binary files a/src/devtools/bin/vpc.exe and b/src/devtools/bin/vpc.exe differ diff --git a/src/devtools/bin/vstdlib.dll b/src/devtools/bin/vstdlib.dll index 319ef7e4d..44fff21ec 100644 Binary files a/src/devtools/bin/vstdlib.dll and b/src/devtools/bin/vstdlib.dll differ diff --git a/src/game/client/movehelper_client.cpp b/src/game/client/movehelper_client.cpp index ccdba9352..cb4b3e169 100644 --- a/src/game/client/movehelper_client.cpp +++ b/src/game/client/movehelper_client.cpp @@ -191,12 +191,12 @@ void CMoveHelperClient::ProcessImpacts( void ) } // misyl: Debug - if ( vOldLocalVel != vOldAbsVel ) - { - Msg( "%d\n", gpGlobals->tickcount ); - Msg( "vOldLocalVel: %f %f %f\n", vOldLocalVel.x, vOldLocalVel.y, vOldLocalVel.z ); - Msg( "vOldAbsVel: %f %f %f\n", vOldAbsVel.x, vOldAbsVel.y, vOldAbsVel.z ); - } +// if ( vOldLocalVel != vOldAbsVel ) +// { +// Msg( "%d\n", gpGlobals->tickcount ); +// Msg( "vOldLocalVel: %f %f %f\n", vOldLocalVel.x, vOldLocalVel.y, vOldLocalVel.z ); +// Msg( "vOldAbsVel: %f %f %f\n", vOldAbsVel.x, vOldAbsVel.y, vOldAbsVel.z ); +// } // Restore the velocity m_pHost->SetAbsVelocity( vOldAbsVel ); //m_pHost->SetLocalVelocity( vOldLocalVel ); diff --git a/src/game/client/tf/tf_autorp.cpp b/src/game/client/tf/tf_autorp.cpp index 32e2b93c0..adb7b24f5 100644 --- a/src/game/client/tf/tf_autorp.cpp +++ b/src/game/client/tf/tf_autorp.cpp @@ -547,7 +547,7 @@ void CTFAutoRP::ModifySpeech( const char *pszInText, char *pszOutText, int iOutL { szStoredWord[0] = toupper( szStoredWord[0] ); } - else if ( pszCurWord[0] >= 'a' && pszCurWord[0] <= 'a' ) + else if ( pszCurWord[0] >= 'a' && pszCurWord[0] <= 'z' ) { szStoredWord[0] = tolower( szStoredWord[0] ); } diff --git a/src/game/server/player.cpp b/src/game/server/player.cpp index c132bfc33..b8a0519d2 100644 --- a/src/game/server/player.cpp +++ b/src/game/server/player.cpp @@ -95,9 +95,9 @@ ConVar spec_freeze_traveltime( "spec_freeze_traveltime", "0.4", FCVAR_CHEAT | FC ConVar sv_bonus_challenge( "sv_bonus_challenge", "0", FCVAR_REPLICATED, "Set to values other than 0 to select a bonus map challenge type." ); -ConVar sv_chat_bucket_size_tier1( "sv_chat_bucket_size_tier1", "4", FCVAR_NONE, "The maxmimum size of the short term chat msg bucket." ); +ConVar sv_chat_bucket_size_tier1( "sv_chat_bucket_size_tier1", "4", FCVAR_NONE, "The maximum size of the short term chat msg bucket." ); ConVar sv_chat_seconds_per_msg_tier1( "sv_chat_seconds_per_msg_tier1", "3", FCVAR_NONE, "The number of seconds to accrue an additional short term chat msg." ); -ConVar sv_chat_bucket_size_tier2( "sv_chat_bucket_size_tier2", "30", FCVAR_NONE, "The maxmimum size of the long term chat msg bucket." ); +ConVar sv_chat_bucket_size_tier2( "sv_chat_bucket_size_tier2", "30", FCVAR_NONE, "The maximum size of the long term chat msg bucket." ); ConVar sv_chat_seconds_per_msg_tier2( "sv_chat_seconds_per_msg_tier2", "10", FCVAR_NONE, "The number of seconds to accrue an additional long term chat msg." ); static ConVar sv_maxusrcmdprocessticks( "sv_maxusrcmdprocessticks", "24", FCVAR_NOTIFY, "Maximum number of client-issued usrcmd ticks that can be replayed in packet loss conditions, 0 to allow no restrictions" ); @@ -8101,13 +8101,6 @@ void CMovementSpeedMod::InputSpeedMod(inputdata_t &data) } } -void SendProxy_CropFlagsToPlayerFlagBitsLength( const SendProp* pProp, const void* pStruct, const void* pVarData, DVariant* pOut, int iElement, int objectID ) -{ - int mask = ( 1 << PLAYER_FLAG_BITS ) - 1; - int data = *( int* )pVarData; - - pOut->m_Int = ( data & mask ); -} // -------------------------------------------------------------------------------- // // SendTable for CPlayerState. @@ -8187,7 +8180,7 @@ void SendProxy_CropFlagsToPlayerFlagBitsLength( const SendProp* pProp, const voi SendPropInt (SENDINFO(m_iBonusProgress), 15 ), SendPropInt (SENDINFO(m_iBonusChallenge), 4 ), SendPropFloat (SENDINFO(m_flMaxspeed), 12, SPROP_ROUNDDOWN, 0.0f, 2048.0f ), // CL - SendPropInt (SENDINFO(m_fFlags), PLAYER_FLAG_BITS, SPROP_UNSIGNED|SPROP_CHANGES_OFTEN, SendProxy_CropFlagsToPlayerFlagBitsLength ), + SendPropInt (SENDINFO(m_fFlags), 0, SPROP_UNSIGNED|SPROP_CHANGES_OFTEN ), SendPropInt (SENDINFO(m_iObserverMode), 3, SPROP_UNSIGNED ), SendPropEHandle (SENDINFO(m_hObserverTarget) ), SendPropInt (SENDINFO(m_iFOV), 8, SPROP_UNSIGNED ), diff --git a/src/game/server/team_control_point_master.cpp b/src/game/server/team_control_point_master.cpp index ba9c5e3df..22bd774dc 100644 --- a/src/game/server/team_control_point_master.cpp +++ b/src/game/server/team_control_point_master.cpp @@ -1156,7 +1156,8 @@ int CTeamControlPointMaster::GetNumPointsOwnedByTeam( int iTeam ) //----------------------------------------------------------------------------- int CTeamControlPointMaster::CalcNumRoundsRemaining( int iTeam ) { - if (m_ControlPointRounds.Count() == 0) return 0; + if ( m_ControlPointRounds.IsEmpty() ) + return 0; // To determine how many rounds remain for a given team if it consistently wins mini-rounds, we have to // simulate forward each mini-round and track the control point ownership that would result diff --git a/src/game/server/tf/tf_player.cpp b/src/game/server/tf/tf_player.cpp index 0e373ed9b..6864fd442 100644 --- a/src/game/server/tf/tf_player.cpp +++ b/src/game/server/tf/tf_player.cpp @@ -996,7 +996,6 @@ CTFPlayer::CTFPlayer() m_flNextChangeClassTime = 0.0f; m_flNextChangeTeamTime = 0.0f; - m_bScattergunJump = false; m_iOldStunFlags = 0; m_iLastWeaponSlot = 1; m_iNumberofDominations = 0; @@ -3751,7 +3750,6 @@ void CTFPlayer::Spawn() m_Shared.SetFeignDeathReady( false ); - m_bScattergunJump = false; m_iOldStunFlags = 0; m_flAccumulatedHealthRegen = 0; diff --git a/src/game/server/tf/tf_player.h b/src/game/server/tf/tf_player.h index 532d5b6ea..87620ffed 100644 --- a/src/game/server/tf/tf_player.h +++ b/src/game/server/tf/tf_player.h @@ -938,7 +938,6 @@ public: bool m_bSuicideExplode; - bool m_bScattergunJump; int m_iOldStunFlags; bool m_bFlipViewModels; diff --git a/src/game/shared/basegrenade_shared.cpp b/src/game/shared/basegrenade_shared.cpp index b981d0781..421bfaedd 100644 --- a/src/game/shared/basegrenade_shared.cpp +++ b/src/game/shared/basegrenade_shared.cpp @@ -54,8 +54,6 @@ BEGIN_DATADESC( CBaseGrenade ) END_DATADESC() -void SendProxy_CropFlagsToPlayerFlagBitsLength( const SendProp *pProp, const void *pStruct, const void *pVarData, DVariant *pOut, int iElement, int objectID); - #endif IMPLEMENT_NETWORKCLASS_ALIASED( BaseGrenade, DT_BaseGrenade ) @@ -70,7 +68,7 @@ BEGIN_NETWORK_TABLE( CBaseGrenade, DT_BaseGrenade ) SendPropVector( SENDINFO( m_vecVelocity ), 0, SPROP_NOSCALE ), // HACK: Use same flag bits as player for now - SendPropInt ( SENDINFO(m_fFlags), PLAYER_FLAG_BITS, SPROP_UNSIGNED, SendProxy_CropFlagsToPlayerFlagBitsLength ), + SendPropInt ( SENDINFO(m_fFlags), 0, SPROP_UNSIGNED ), #else RecvPropFloat( RECVINFO( m_flDamage ) ), RecvPropFloat( RECVINFO( m_DmgRadius ) ), diff --git a/src/game/shared/tf/tf_gamemovement.cpp b/src/game/shared/tf/tf_gamemovement.cpp index 56a36c663..c195f12b1 100644 --- a/src/game/shared/tf/tf_gamemovement.cpp +++ b/src/game/shared/tf/tf_gamemovement.cpp @@ -2957,9 +2957,9 @@ void CTFGameMovement::SetGroundEntity( trace_t *pm ) { m_pTFPlayer->SpeakConceptIfAllowed( MP_CONCEPT_DOUBLE_JUMP, "started_jumping:0" ); } - m_pTFPlayer->m_Shared.SetWeaponKnockbackID( -1 ); - m_pTFPlayer->m_bScattergunJump = false; #endif // GAME_DLL + m_pTFPlayer->m_Shared.SetWeaponKnockbackID( -1 ); + m_pTFPlayer->m_Shared.m_bScattergunJump = false; m_pTFPlayer->m_Shared.SetAirDash( 0 ); m_pTFPlayer->m_Shared.SetAirDucked( 0 ); diff --git a/src/game/shared/tf/tf_player_shared.cpp b/src/game/shared/tf/tf_player_shared.cpp index 84eeee03f..a2c26261d 100644 --- a/src/game/shared/tf/tf_player_shared.cpp +++ b/src/game/shared/tf/tf_player_shared.cpp @@ -788,6 +788,8 @@ CTFPlayerShared::CTFPlayerShared() m_flPrevInvisibility = 0.f; m_flTmpDamageBonusAmount = 1.0f; + m_bScattergunJump = false; + m_bFeignDeathReady = false; m_fCloakConsumeRate = tf_spy_cloak_consume_rate.GetFloat(); diff --git a/src/game/shared/tf/tf_player_shared.h b/src/game/shared/tf/tf_player_shared.h index 06acecfc6..fdaef9214 100644 --- a/src/game/shared/tf/tf_player_shared.h +++ b/src/game/shared/tf/tf_player_shared.h @@ -1216,6 +1216,8 @@ private: #endif public: + bool m_bScattergunJump; + float m_flStunFade; float m_flStunEnd; float m_flStunMid; diff --git a/src/game/shared/tf/tf_quest_restriction.cpp b/src/game/shared/tf/tf_quest_restriction.cpp index a4d5d298e..4fe768e52 100644 --- a/src/game/shared/tf/tf_quest_restriction.cpp +++ b/src/game/shared/tf/tf_quest_restriction.cpp @@ -1144,7 +1144,7 @@ protected: int nNumJumps = pNonConstPlayer->GetGroundEntity() == NULL ? 1 : 0; nNumJumps += pPlayer->m_Shared.GetAirDash(); - nNumJumps += pPlayer->m_bScattergunJump; + nNumJumps += pPlayer->m_Shared.m_bScattergunJump; if ( m_eJumpingState == JUMPING_STATE_IS_NOT_JUMPING ) { @@ -3027,7 +3027,7 @@ bool CTFJumpStateQuestModifier::BPassesModifier( const CTFPlayer *pOwner, Invali #else int nNumJumps = const_cast< CTFPlayer* >( pOwner )->GetGroundEntity() == NULL ? 1 : 0; nNumJumps += pOwner->m_Shared.GetAirDash(); - nNumJumps += pOwner->m_bScattergunJump; + nNumJumps += pOwner->m_Shared.m_bScattergunJump; // If we want them on the ground, make sure they're on the ground if ( m_nJumpCount == 0 ) diff --git a/src/game/shared/tf/tf_weapon_rocketpack.cpp b/src/game/shared/tf/tf_weapon_rocketpack.cpp index 38d5bbcef..452ec4a35 100644 --- a/src/game/shared/tf/tf_weapon_rocketpack.cpp +++ b/src/game/shared/tf/tf_weapon_rocketpack.cpp @@ -536,6 +536,7 @@ bool CTFRocketPack::Launch( void ) m_vecLaunchDir = CalcRocketForceFromPlayer( pOwner ); RocketLaunchPlayer( pOwner, m_vecLaunchDir, false ); + #ifdef GAME_DLL SetContextThink( &CTFRocketPack::PassengerDelayLaunchThink, gpGlobals->curtime + TF_ROCKETPACK_PASSENGER_DELAY_LAUNCH, "PassengerDelayLaunchThink" ); #endif diff --git a/src/game/shared/tf/tf_weapon_shotgun.cpp b/src/game/shared/tf/tf_weapon_shotgun.cpp index 4b97dc47e..54e360149 100644 --- a/src/game/shared/tf/tf_weapon_shotgun.cpp +++ b/src/game/shared/tf/tf_weapon_shotgun.cpp @@ -316,7 +316,6 @@ extern float AirBurstDamageForce( const Vector &size, float damage, float scale //----------------------------------------------------------------------------- void CTFScatterGun::FireBullet( CTFPlayer *pPlayer ) { -#ifndef CLIENT_DLL if ( HasKnockback() ) { // Perform some knock back. @@ -329,9 +328,9 @@ void CTFScatterGun::FireBullet( CTFPlayer *pPlayer ) return; // Knock the firer back! - if ( !(pOwner->GetFlags() & FL_ONGROUND) && !pPlayer->m_bScattergunJump ) + if ( !(pOwner->GetFlags() & FL_ONGROUND) && !pPlayer->m_Shared.m_bScattergunJump ) { - pPlayer->m_bScattergunJump = true; + pPlayer->m_Shared.m_bScattergunJump = true; pOwner->m_Shared.StunPlayer( 0.3f, 1.f, TF_STUN_MOVEMENT | TF_STUN_MOVEMENT_FORWARD_ONLY ); @@ -341,15 +340,15 @@ void CTFScatterGun::FireBullet( CTFPlayer *pPlayer ) AngleVectors( pOwner->EyeAngles(), &vecForward ); Vector vecForce = vecForward * -flForce; - EntityMatrix mtxPlayer; - mtxPlayer.InitFromEntity( pOwner ); + VMatrix mtxPlayer; + mtxPlayer.SetupMatrixOrgAngles( pOwner->GetAbsOrigin(), pOwner->EyeAngles() ); Vector vecAbsVelocity = pOwner->GetAbsVelocity(); Vector vecAbsVelocityAsPoint = vecAbsVelocity + pOwner->GetAbsOrigin(); - Vector vecLocalVelocity = mtxPlayer.WorldToLocal( vecAbsVelocityAsPoint ); + Vector vecLocalVelocity = mtxPlayer.VMul4x3Transpose( vecAbsVelocityAsPoint ); vecLocalVelocity.x = -300; - vecAbsVelocityAsPoint = mtxPlayer.LocalToWorld( vecLocalVelocity ); + vecAbsVelocityAsPoint = mtxPlayer.VMul4x3( vecLocalVelocity ); vecAbsVelocity = vecAbsVelocityAsPoint - pOwner->GetAbsOrigin(); pOwner->SetAbsVelocity( vecAbsVelocity ); @@ -360,7 +359,6 @@ void CTFScatterGun::FireBullet( CTFPlayer *pPlayer ) pOwner->RemoveFlag( FL_ONGROUND ); } } -#endif BaseClass::FireBullet( pPlayer ); } diff --git a/src/materialsystem/stdshaders/worldtwotextureblend_ps2x.fxc b/src/materialsystem/stdshaders/worldtwotextureblend_ps2x.fxc index 14ba7826e..688517eca 100644 --- a/src/materialsystem/stdshaders/worldtwotextureblend_ps2x.fxc +++ b/src/materialsystem/stdshaders/worldtwotextureblend_ps2x.fxc @@ -155,7 +155,7 @@ float4 main( PS_INPUT i ) : COLOR if( bFlashlight ) { float3 worldSpaceNormal; - // Make the unbumped version not so fucking stupid and not need tangentSpaceTranspose you knob. + // Make the unbumped version not need tangentSpaceTranspose worldSpaceNormal = mul( normal, i.tangentSpaceTranspose ); int nShadowSampleLevel = 0; diff --git a/src/vgui2/vgui_controls/PropertySheet.cpp b/src/vgui2/vgui_controls/PropertySheet.cpp index 81e84382b..46eb8c00c 100644 --- a/src/vgui2/vgui_controls/PropertySheet.cpp +++ b/src/vgui2/vgui_controls/PropertySheet.cpp @@ -1022,11 +1022,11 @@ void PropertySheet::PerformLayout() if(_showTabs) { - _activePage->SetBounds(0, tabHeight, wide, tall - tabHeight); + _activePage->SetBounds(0, tabHeight + m_iPageYOffset, wide, tall - tabHeight); } else { - _activePage->SetBounds(0, 0, wide, tall ); + _activePage->SetBounds(0, m_iPageYOffset, wide, tall ); } _activePage->InvalidateLayout(); } @@ -1060,11 +1060,11 @@ void PropertySheet::PerformLayout() if (m_PageTabs[i] == _activeTab) { // active tab is taller - _activeTab->SetBounds(xtab, 2, width, tabHeight); + _activeTab->SetBounds(xtab, 2 + m_iPageYOffset, width, tabHeight); } else { - m_PageTabs[i]->SetBounds(xtab, 4, width, tabHeight - 2); + m_PageTabs[i]->SetBounds(xtab, 4 + m_iPageYOffset, width, tabHeight - 2); } m_PageTabs[i]->SetVisible(true); xtab += (width + 1) + m_iTabXDelta;