mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 10:08:18 +00:00
Restore compatibility with older demo versions
This commit is contained in:
parent
6364e3e176
commit
723bf0f6dc
|
@ -15,8 +15,9 @@
|
||||||
#include "snapshot.h"
|
#include "snapshot.h"
|
||||||
|
|
||||||
static const unsigned char gs_aHeaderMarker[7] = {'T', 'W', 'D', 'E', 'M', 'O', 0};
|
static const unsigned char gs_aHeaderMarker[7] = {'T', 'W', 'D', 'E', 'M', 'O', 0};
|
||||||
static const unsigned char gs_ActVersion = 4;
|
static const unsigned char gs_ActVersion = 5;
|
||||||
static const unsigned char gs_OldVersion = 3;
|
static const unsigned char gs_OldVersion = 3;
|
||||||
|
static const unsigned char gs_VersionTickCompression = 5; // demo files with this version or higher will use `CHUNKTICKFLAG_TICK_COMPRESSED`
|
||||||
static const int gs_LengthOffset = 152;
|
static const int gs_LengthOffset = 152;
|
||||||
static const int gs_NumMarkersOffset = 176;
|
static const int gs_NumMarkersOffset = 176;
|
||||||
|
|
||||||
|
@ -155,6 +156,7 @@ enum
|
||||||
CHUNKTICKFLAG_TICK_COMPRESSED = 0x20, // when we store the tick value in the first chunk
|
CHUNKTICKFLAG_TICK_COMPRESSED = 0x20, // when we store the tick value in the first chunk
|
||||||
|
|
||||||
CHUNKMASK_TICK = 0x1f,
|
CHUNKMASK_TICK = 0x1f,
|
||||||
|
CHUNKMASK_TICK_LEGACY = 0x3f,
|
||||||
CHUNKMASK_TYPE = 0x60,
|
CHUNKMASK_TYPE = 0x60,
|
||||||
CHUNKMASK_SIZE = 0x1f,
|
CHUNKMASK_SIZE = 0x1f,
|
||||||
|
|
||||||
|
@ -372,9 +374,14 @@ int CDemoPlayer::ReadChunkHeader(int *pType, int *pSize, int *pTick)
|
||||||
if(Chunk&CHUNKTYPEFLAG_TICKMARKER)
|
if(Chunk&CHUNKTYPEFLAG_TICKMARKER)
|
||||||
{
|
{
|
||||||
// decode tick marker
|
// decode tick marker
|
||||||
|
int Tickdelta_legacy = Chunk&(CHUNKMASK_TICK_LEGACY); // compatibility
|
||||||
*pType = Chunk&(CHUNKTYPEFLAG_TICKMARKER|CHUNKTICKFLAG_KEYFRAME);
|
*pType = Chunk&(CHUNKTYPEFLAG_TICKMARKER|CHUNKTICKFLAG_KEYFRAME);
|
||||||
|
|
||||||
if(Chunk&(CHUNKTICKFLAG_TICK_COMPRESSED))
|
if(m_Info.m_Header.m_Version < gs_VersionTickCompression && Tickdelta_legacy != 0)
|
||||||
|
{
|
||||||
|
*pTick += Tickdelta_legacy;
|
||||||
|
}
|
||||||
|
else if(Chunk&(CHUNKTICKFLAG_TICK_COMPRESSED))
|
||||||
{
|
{
|
||||||
int Tickdelta = Chunk&(CHUNKMASK_TICK);
|
int Tickdelta = Chunk&(CHUNKMASK_TICK);
|
||||||
*pTick += Tickdelta;
|
*pTick += Tickdelta;
|
||||||
|
|
Loading…
Reference in a new issue