Changes for TF2 demo compatibility
This commit is contained in:
parent
42b4ca87b7
commit
5e43ccfa06
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
#include "demofile.h"
|
#include "demofile.h"
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
int main(const int argc, const char* argv[])
|
int main(const int argc, const char* argv[])
|
||||||
{
|
{
|
||||||
@ -14,6 +15,14 @@ int main(const int argc, const char* argv[])
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto demoHeader = demoFile.GetDemoHeader();
|
||||||
|
|
||||||
|
unsigned char cmd;
|
||||||
|
int32 tick;
|
||||||
|
demoFile.ReadCmdHeader(cmd, tick);
|
||||||
|
|
||||||
|
assert(cmd == dem_synctick && tick == 0);
|
||||||
|
|
||||||
demoFile.Close();
|
demoFile.Close();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -27,7 +27,9 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "demofile.h"
|
#include "demofile.h"
|
||||||
|
|
||||||
CDemoFile::CDemoFile()
|
CDemoFile::CDemoFile():
|
||||||
|
m_DemoHeader(),
|
||||||
|
m_fileBufferPos(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,7 +58,7 @@ void CDemoFile::ReadCmdInfo( democmdinfo_t& info )
|
|||||||
m_fileBufferPos += sizeof( democmdinfo_t );
|
m_fileBufferPos += sizeof( democmdinfo_t );
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDemoFile::ReadCmdHeader( unsigned char& cmd, int32& tick, unsigned char& playerSlot )
|
void CDemoFile::ReadCmdHeader( unsigned char& cmd, int32& tick )
|
||||||
{
|
{
|
||||||
if ( !m_fileBuffer.size() )
|
if ( !m_fileBuffer.size() )
|
||||||
return;
|
return;
|
||||||
@ -77,10 +79,6 @@ void CDemoFile::ReadCmdHeader( unsigned char& cmd, int32& tick, unsigned char& p
|
|||||||
// Read the timestamp
|
// Read the timestamp
|
||||||
tick = *( int32 * )( &m_fileBuffer[ m_fileBufferPos ] );
|
tick = *( int32 * )( &m_fileBuffer[ m_fileBufferPos ] );
|
||||||
m_fileBufferPos += sizeof( int32 );
|
m_fileBufferPos += sizeof( int32 );
|
||||||
|
|
||||||
// read playerslot
|
|
||||||
playerSlot = *( unsigned char * )( &m_fileBuffer[ m_fileBufferPos ] );
|
|
||||||
m_fileBufferPos += sizeof( unsigned char );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 CDemoFile::ReadUserCmd( char *buffer, int32 &size )
|
int32 CDemoFile::ReadUserCmd( char *buffer, int32 &size )
|
||||||
@ -164,6 +162,14 @@ bool CDemoFile::Open( const char *name )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const int32 signOnLength = m_DemoHeader.signonlength;
|
||||||
|
if (signOnLength > 0)
|
||||||
|
{
|
||||||
|
m_signOnData.resize(signOnLength);
|
||||||
|
fread(&m_signOnData[0], 1, signOnLength, fp);
|
||||||
|
Length -= signOnLength;
|
||||||
|
}
|
||||||
|
|
||||||
m_fileBuffer.resize( Length );
|
m_fileBuffer.resize( Length );
|
||||||
fread( &m_fileBuffer[ 0 ], 1, Length, fp );
|
fread( &m_fileBuffer[ 0 ], 1, Length, fp );
|
||||||
|
|
||||||
@ -186,7 +192,8 @@ bool CDemoFile::Open( const char *name )
|
|||||||
void CDemoFile::Close()
|
void CDemoFile::Close()
|
||||||
{
|
{
|
||||||
m_szFileName.clear();
|
m_szFileName.clear();
|
||||||
|
m_signOnData.clear();
|
||||||
|
m_fileBuffer.clear();
|
||||||
|
|
||||||
m_fileBufferPos = 0;
|
m_fileBufferPos = 0;
|
||||||
m_fileBuffer.clear();
|
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#define DEMO_HEADER_ID "HL2DEMO"
|
#define DEMO_HEADER_ID "HL2DEMO"
|
||||||
#define DEMO_PROTOCOL 4
|
#define DEMO_PROTOCOL 3
|
||||||
|
|
||||||
#if !defined( MAX_OSPATH )
|
#if !defined( MAX_OSPATH )
|
||||||
#define MAX_OSPATH 260 // max length of a filesystem pathname
|
#define MAX_OSPATH 260 // max length of a filesystem pathname
|
||||||
@ -92,7 +92,7 @@ struct demoheader_t
|
|||||||
#define FDEMO_USE_ANGLES2 ( 1 << 1 )
|
#define FDEMO_USE_ANGLES2 ( 1 << 1 )
|
||||||
#define FDEMO_NOINTERP ( 1 << 2 ) // don't interpolate between this an last view
|
#define FDEMO_NOINTERP ( 1 << 2 ) // don't interpolate between this an last view
|
||||||
|
|
||||||
#define MAX_SPLITSCREEN_CLIENTS 2
|
#define MAX_SPLITSCREEN_CLIENTS 1
|
||||||
|
|
||||||
struct QAngle
|
struct QAngle
|
||||||
{
|
{
|
||||||
@ -218,11 +218,11 @@ struct democmdinfo_t
|
|||||||
Split_t u[ MAX_SPLITSCREEN_CLIENTS ];
|
Split_t u[ MAX_SPLITSCREEN_CLIENTS ];
|
||||||
};
|
};
|
||||||
|
|
||||||
class CDemoFile
|
class CDemoFile
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CDemoFile();
|
CDemoFile();
|
||||||
virtual ~CDemoFile();
|
~CDemoFile();
|
||||||
|
|
||||||
bool Open( const char *name );
|
bool Open( const char *name );
|
||||||
void Close();
|
void Close();
|
||||||
@ -233,19 +233,32 @@ public:
|
|||||||
|
|
||||||
void ReadCmdInfo( democmdinfo_t& info );
|
void ReadCmdInfo( democmdinfo_t& info );
|
||||||
|
|
||||||
void ReadCmdHeader( unsigned char &cmd, int32 &tick, unsigned char& playerSlot );
|
void ReadCmdHeader( unsigned char &cmd, int32 &tick );
|
||||||
|
|
||||||
int32 ReadUserCmd( char *buffer, int32 &size );
|
int32 ReadUserCmd( char *buffer, int32 &size );
|
||||||
|
|
||||||
demoheader_t *ReadDemoHeader();
|
const demoheader_t *GetDemoHeader() const;
|
||||||
|
|
||||||
public:
|
const std::string& GetSignOnData() const;
|
||||||
|
|
||||||
|
private:
|
||||||
demoheader_t m_DemoHeader; //general demo info
|
demoheader_t m_DemoHeader; //general demo info
|
||||||
|
|
||||||
std::string m_szFileName;
|
std::string m_szFileName;
|
||||||
|
std::string m_signOnData;
|
||||||
|
std::string m_fileBuffer;
|
||||||
|
|
||||||
size_t m_fileBufferPos;
|
size_t m_fileBufferPos;
|
||||||
std::string m_fileBuffer;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline const demoheader_t *CDemoFile::GetDemoHeader() const
|
||||||
|
{
|
||||||
|
return &m_DemoHeader;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline const std::string& CDemoFile::GetSignOnData() const
|
||||||
|
{
|
||||||
|
return m_signOnData;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // DEMOFILE_H
|
#endif // DEMOFILE_H
|
||||||
|
Loading…
Reference in New Issue
Block a user