Skip to content

Commit f90488d

Browse files
authored
Multiplayer RoffSystem Fixes (#1165)
* [MP] Fix ROFF system using incorrect time value. The ROFF system previously used engine time instead of module time when setting the time values for trajectories of shared entities. This caused issues when the server module time has been reset on map change, because the game module would misinterpret the trajectories. * [MP] Fix roff not working on 64 bit builds. Change type of mVersion in TROFFHeader and TROFF2Header from long to int.
1 parent 802c9b1 commit f90488d

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

codemp/qcommon/RoffSystem.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -647,7 +647,7 @@ qboolean CROFFSystem::Play( int entID, int id, qboolean doTranslation, qboolean
647647

648648
roffing_ent->mEntID = entID;
649649
roffing_ent->mROFFID = id;
650-
roffing_ent->mNextROFFTime = svs.time;
650+
roffing_ent->mNextROFFTime = sv.time;
651651
roffing_ent->mROFFFrame = 0;
652652
roffing_ent->mKill = qfalse;
653653
roffing_ent->mSignal = qtrue; // TODO: hook up the real signal code
@@ -864,7 +864,7 @@ qboolean CROFFSystem::ApplyROFF( SROFFEntity *roff_ent, CROFFSystem::CROFF *roff
864864
float *origin = NULL, *angle = NULL;
865865

866866

867-
if ( svs.time < roff_ent->mNextROFFTime )
867+
if ( sv.time < roff_ent->mNextROFFTime )
868868
{ // Not time to roff yet
869869
return qtrue;
870870
}
@@ -900,8 +900,8 @@ qboolean CROFFSystem::ApplyROFF( SROFFEntity *roff_ent, CROFFSystem::CROFF *roff
900900

901901
if ( roff_ent->mROFFFrame >= roff->mROFFEntries )
902902
{ // we are done roffing, so stop moving and flag this ent to be removed
903-
SetLerp( originTrajectory, TR_STATIONARY, origin, NULL, svs.time, roff->mLerp );
904-
SetLerp( angleTrajectory, TR_STATIONARY, angle, NULL, svs.time, roff->mLerp );
903+
SetLerp( originTrajectory, TR_STATIONARY, origin, NULL, sv.time, roff->mLerp );
904+
SetLerp( angleTrajectory, TR_STATIONARY, angle, NULL, sv.time, roff->mLerp );
905905
if (!roff_ent->mIsClient)
906906
{
907907
ent->r.mIsRoffing = qfalse;
@@ -922,11 +922,11 @@ qboolean CROFFSystem::ApplyROFF( SROFFEntity *roff_ent, CROFFSystem::CROFF *roff
922922
}
923923

924924
// Set up our origin interpolation
925-
SetLerp( originTrajectory, TR_LINEAR, origin, result, svs.time, roff->mLerp );
925+
SetLerp( originTrajectory, TR_LINEAR, origin, result, sv.time, roff->mLerp );
926926

927927
// Set up our angle interpolation
928928
SetLerp( angleTrajectory, TR_LINEAR, angle,
929-
roff->mMoveRotateList[roff_ent->mROFFFrame].mRotateOffset, svs.time, roff->mLerp );
929+
roff->mMoveRotateList[roff_ent->mROFFFrame].mRotateOffset, sv.time, roff->mLerp );
930930

931931
if (roff->mMoveRotateList[roff_ent->mROFFFrame].mStartNote >= 0)
932932
{
@@ -940,7 +940,7 @@ qboolean CROFFSystem::ApplyROFF( SROFFEntity *roff_ent, CROFFSystem::CROFF *roff
940940

941941
// Advance ROFF frames and lock to a 10hz cycle
942942
roff_ent->mROFFFrame++;
943-
roff_ent->mNextROFFTime = svs.time + roff->mFrameTime;
943+
roff_ent->mNextROFFTime = sv.time + roff->mFrameTime;
944944

945945
//rww - npcs need to know when they're getting roff'd
946946
if ( !roff_ent->mIsClient )
@@ -1044,8 +1044,8 @@ qboolean CROFFSystem::ClearLerp( SROFFEntity *roff_ent )
10441044
angle = ent->r.currentAngles;
10451045
}
10461046

1047-
SetLerp( originTrajectory, TR_STATIONARY, origin, NULL, svs.time, ROFF_SAMPLE_RATE );
1048-
SetLerp( angleTrajectory, TR_STATIONARY, angle, NULL, svs.time, ROFF_SAMPLE_RATE );
1047+
SetLerp( originTrajectory, TR_STATIONARY, origin, NULL, sv.time, ROFF_SAMPLE_RATE );
1048+
SetLerp( angleTrajectory, TR_STATIONARY, angle, NULL, sv.time, ROFF_SAMPLE_RATE );
10491049

10501050
return qtrue;
10511051
}

codemp/qcommon/RoffSystem.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class CROFFSystem
6464
//-------------------------------
6565
{
6666
char mHeader[4]; // should match roff_string defined above
67-
long mVersion; // version num, supported version defined above
67+
int mVersion; // version num, supported version defined above
6868
float mCount; // I think this is a float because of a limitation of the roff exporter
6969

7070
} TROFFHeader;
@@ -81,7 +81,7 @@ class CROFFSystem
8181
//-------------------------------
8282
{
8383
char mHeader[4]; // should match roff_string defined above
84-
long mVersion; // version num, supported version defined above
84+
int mVersion; // version num, supported version defined above
8585
int mCount; // I think this is a float because of a limitation of the roff exporter
8686
int mFrameRate; // Frame rate the roff should be played at
8787
int mNumNotes; // number of notes (null terminated strings) after the roff data

0 commit comments

Comments
 (0)