Skip to content

Commit 8d7fa0f

Browse files
committed
fix: use m_nTickBase instead of usercmd sequence number for seed
1 parent ce21a06 commit 8d7fa0f

File tree

6 files changed

+11
-6
lines changed

6 files changed

+11
-6
lines changed

src/game/client/c_baseplayer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ class C_BasePlayer : public C_BaseCombatCharacter, public CGameEventListener
313313

314314
float GetTimeBase( void ) const;
315315
float GetFinalPredictedTime() const;
316+
int GetTickBase() const { return m_nTickBase; }
316317

317318
bool IsInVGuiInputMode() const;
318319
bool IsInViewModelVGuiInputMode() const;
@@ -572,6 +573,8 @@ class C_BasePlayer : public C_BaseCombatCharacter, public CGameEventListener
572573
friend class CHL2GameMovement;
573574
friend class CDODGameMovement;
574575
friend class CPortalGameMovement;
576+
577+
friend class CInput;
575578

576579
// Accessors for gamemovement
577580
float GetStepSize( void ) const { return m_Local.m_flStepSize; }

src/game/client/in_main.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,7 +1269,7 @@ void CInput::CreateMove ( int sequence_number, float input_sample_frametime, boo
12691269

12701270
m_flLastForwardMove = cmd->forwardmove;
12711271

1272-
cmd->random_seed = MD5_PseudoRandom( sequence_number ) & 0x7fffffff;
1272+
cmd->random_seed = MD5_PseudoRandom( C_BasePlayer::GetLocalPlayer()->m_nFinalPredictedTick ) & 0x7fffffff;
12731273

12741274
HLTVCamera()->CreateMove( cmd );
12751275
#if defined( REPLAY_ENABLED )
@@ -1315,7 +1315,8 @@ void CInput::DecodeUserCmdFromBuffer( bf_read& buf, int sequence_number )
13151315
CUserCmd nullcmd;
13161316
CUserCmd *cmd = &m_pCommands[ sequence_number % MULTIPLAYER_BACKUP];
13171317

1318-
ReadUsercmd( &buf, cmd, &nullcmd );
1318+
// TODO: demos sync with time base?
1319+
ReadUsercmd( &buf, cmd, &nullcmd, nullptr );
13191320
}
13201321

13211322
void CInput::ValidateUserCmd( CUserCmd *usercmd, int sequence_number )

src/game/server/gameinterface.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3122,7 +3122,7 @@ float CServerGameClients::ProcessUsercmds( edict_t *player, bf_read *buf, int nu
31223122
for ( i = totalcmds - 1; i >= 0; i-- )
31233123
{
31243124
to = &cmds[ i ];
3125-
ReadUsercmd( buf, to, from );
3125+
ReadUsercmd( buf, to, from, pPlayer );
31263126
from = to;
31273127
}
31283128

src/game/server/player.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,6 +725,7 @@ class CBasePlayer : public CBaseCombatCharacter
725725
// Bot accessors...
726726
void SetTimeBase( float flTimeBase );
727727
float GetTimeBase() const;
728+
int GetTickBase() const { return m_nTickBase; }
728729
void SetLastUserCommand( const CUserCmd &cmd );
729730
const CUserCmd *GetLastUserCommand( void );
730731

src/game/shared/usercmd.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ void WriteUsercmd( bf_write *buf, const CUserCmd *to, const CUserCmd *from )
196196
// *from -
197197
// Output : static void ReadUsercmd
198198
//-----------------------------------------------------------------------------
199-
void ReadUsercmd( bf_read *buf, CUserCmd *move, CUserCmd *from )
199+
void ReadUsercmd( bf_read *buf, CUserCmd *move, CUserCmd *from, CBasePlayer* player )
200200
{
201201
// Assume no change
202202
*move = *from;
@@ -277,7 +277,7 @@ void ReadUsercmd( bf_read *buf, CUserCmd *move, CUserCmd *from )
277277
}
278278

279279

280-
move->random_seed = MD5_PseudoRandom( move->command_number ) & 0x7fffffff;
280+
move->random_seed = MD5_PseudoRandom( player ? player->GetTickBase() : move->command_number ) & 0x7fffffff;
281281

282282
if ( buf->ReadOneBit() )
283283
{

src/game/shared/usercmd.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ class CUserCmd
174174

175175
};
176176

177-
void ReadUsercmd( bf_read *buf, CUserCmd *move, CUserCmd *from );
177+
void ReadUsercmd( bf_read *buf, CUserCmd *move, CUserCmd *from, CBasePlayer *player );
178178
void WriteUsercmd( bf_write *buf, const CUserCmd *to, const CUserCmd *from );
179179

180180
#endif // USERCMD_H

0 commit comments

Comments
 (0)