Skip to content

Commit

Permalink
Patch from Tim Angus, to fix a longstanding bug
Browse files Browse the repository at this point in the history
in the server, wherein running the server for
more than 24 hours would cause the game to
exhibit weirdness as described here:
http://forums.wireheadstudios.org/index.php?act=ST&f=11&t=2749

That page would also indicate that more work
needs to be done if the map isn't going to change
for more than 24 hours.
  • Loading branch information
NuclearMonster committed Sep 17, 2005
1 parent 4059295 commit 4bee7b4
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 13 deletions.
1 change: 1 addition & 0 deletions code/server/server.h
Expand Up @@ -78,6 +78,7 @@ typedef struct {
int gameClientSize; // will be > sizeof(playerState_t) due to game private data

int restartTime;
int time;
} server_t;


Expand Down
9 changes: 6 additions & 3 deletions code/server/sv_ccmds.c
Expand Up @@ -272,8 +272,10 @@ static void SV_MapRestart_f( void ) {
SV_RestartGameProgs();

// run a few frames to allow everything to settle
for ( i = 0 ;i < 3 ; i++ ) {
VM_Call( gvm, GAME_RUN_FRAME, svs.time );
for (i = 0; i < 3; i++)
{
VM_Call (gvm, GAME_RUN_FRAME, sv.time);
sv.time += 100;
svs.time += 100;
}

Expand Down Expand Up @@ -314,7 +316,8 @@ static void SV_MapRestart_f( void ) {
}

// run another frame to allow things to look at all the players
VM_Call( gvm, GAME_RUN_FRAME, svs.time );
VM_Call (gvm, GAME_RUN_FRAME, sv.time);
sv.time += 100;
svs.time += 100;
}

Expand Down
2 changes: 1 addition & 1 deletion code/server/sv_game.c
Expand Up @@ -898,7 +898,7 @@ static void SV_InitGameVM( qboolean restart ) {

// use the current msec count for a random seed
// init for this gamestate
VM_Call( gvm, GAME_INIT, svs.time, Com_Milliseconds(), restart );
VM_Call (gvm, GAME_INIT, sv.time, Com_Milliseconds(), restart);
}


Expand Down
13 changes: 8 additions & 5 deletions code/server/sv_init.c
Expand Up @@ -438,9 +438,11 @@ void SV_SpawnServer( char *server, qboolean killBots ) {
sv_gametype->modified = qfalse;

// run a few frames to allow everything to settle
for ( i = 0 ;i < 3 ; i++ ) {
VM_Call( gvm, GAME_RUN_FRAME, svs.time );
SV_BotFrame( svs.time );
for (i = 0;i < 3; i++)
{
VM_Call (gvm, GAME_RUN_FRAME, sv.time);
SV_BotFrame (sv.time);
sv.time += 100;
svs.time += 100;
}

Expand Down Expand Up @@ -495,8 +497,9 @@ void SV_SpawnServer( char *server, qboolean killBots ) {
}

// run another frame to allow things to look at all the players
VM_Call( gvm, GAME_RUN_FRAME, svs.time );
SV_BotFrame( svs.time );
VM_Call (gvm, GAME_RUN_FRAME, sv.time);
SV_BotFrame (sv.time);
sv.time += 100;
svs.time += 100;

if ( sv_pure->integer ) {
Expand Down
7 changes: 4 additions & 3 deletions code/server/sv_main.c
Expand Up @@ -785,7 +785,7 @@ void SV_Frame( int msec ) {

sv.timeResidual += msec;

if (!com_dedicated->integer) SV_BotFrame( svs.time + sv.timeResidual );
if (!com_dedicated->integer) SV_BotFrame (sv.time + sv.timeResidual);

if ( com_dedicated->integer && sv.timeResidual < frameMsec ) {
// NET_Sleep will give the OS time slices until either get a packet
Expand Down Expand Up @@ -835,15 +835,16 @@ void SV_Frame( int msec ) {
// update ping based on the all received frames
SV_CalcPings();

if (com_dedicated->integer) SV_BotFrame( svs.time );
if (com_dedicated->integer) SV_BotFrame (sv.time);

// run the game simulation in chunks
while ( sv.timeResidual >= frameMsec ) {
sv.timeResidual -= frameMsec;
svs.time += frameMsec;
sv.time += frameMsec;

// let everything in the world think and move
VM_Call( gvm, GAME_RUN_FRAME, svs.time );
VM_Call (gvm, GAME_RUN_FRAME, sv.time);
}

if ( com_speeds->integer ) {
Expand Down
2 changes: 1 addition & 1 deletion code/server/sv_snapshot.c
Expand Up @@ -160,7 +160,7 @@ static void SV_WriteSnapshotToClient( client_t *client, msg_t *msg ) {

// send over the current server time so the client can drift
// its view of time to try to match
MSG_WriteLong (msg, svs.time);
MSG_WriteLong (msg, sv.time);

// what we are delta'ing from
MSG_WriteByte (msg, lastframe);
Expand Down

0 comments on commit 4bee7b4

Please sign in to comment.