about summary refs log tree commit diff
diff options
context:
space:
mode:
authorChoupom <andycootlapin@hotmail.fr>2010-09-12 13:03:54 +0200
committeroy <Tom_Adams@web.de>2010-09-12 16:40:39 +0200
commit006fd711b46035a18b6e6a115b81ca0259dee1f1 (patch)
tree848a45d435deec26fc03d6f47ea991b3147553c0
parent0c1261620f9554974239b57ce52ff9c39b087bf0 (diff)
downloadzcatch-006fd711b46035a18b6e6a115b81ca0259dee1f1.tar.gz
zcatch-006fd711b46035a18b6e6a115b81ca0259dee1f1.zip
made versions system for demos
-rw-r--r--src/engine/shared/demo.cpp28
-rw-r--r--src/engine/shared/demo.h3
2 files changed, 12 insertions, 19 deletions
diff --git a/src/engine/shared/demo.cpp b/src/engine/shared/demo.cpp
index 93219a81..ed0692e8 100644
--- a/src/engine/shared/demo.cpp
+++ b/src/engine/shared/demo.cpp
@@ -9,9 +9,11 @@
 #include "network.h"
 #include "engine.h"
 
-static const unsigned char gs_aHeaderMarker[8] = {'T', 'W', 'D', 'E', 'M', 'O', '1', 0};
-static const unsigned char gs_aHeaderMarkerOld[8] = {'T', 'W', 'D', 'E', 'M', 'O', 0, 1}; // TODO: remove this later on
-static const unsigned char gs_aMapMarker[8] = {'M', 'A', 'P', 'D', 'A', 'T', 'A', 0,};
+static const unsigned char gs_aHeaderMarker[7] = {'T', 'W', 'D', 'E', 'M', 'O', 0};
+
+//Versions :
+//1 : 0.5.0
+//2 : 0.5.3/0.6.0, includes the map
 
 
 CDemoRecorder::CDemoRecorder(class CSnapshotDelta *pSnapshotDelta)
@@ -44,6 +46,7 @@ int CDemoRecorder::Start(class IStorage *pStorage, class IConsole *pConsole, con
 	// write header
 	mem_zero(&Header, sizeof(Header));
 	mem_copy(Header.m_aMarker, gs_aHeaderMarker, sizeof(Header.m_aMarker));
+	Header.m_Version = 2;
 	str_copy(Header.m_aNetversion, pNetVersion, sizeof(Header.m_aNetversion));
 	str_copy(Header.m_aMap, pMap, sizeof(Header.m_aMap));
 	str_copy(Header.m_aType, pType, sizeof(Header.m_aType));
@@ -67,9 +70,6 @@ int CDemoRecorder::Start(class IStorage *pStorage, class IConsole *pConsole, con
 	}
 	if(MapFile)
 	{
-		// write map marker
-		io_write(m_File, &gs_aMapMarker, sizeof(gs_aMapMarker));
-		
 		// write map size
 		int MapSize = io_length(MapFile);
 		unsigned char aBufMapSize[4];
@@ -533,8 +533,7 @@ int CDemoPlayer::Load(class IStorage *pStorage, class IConsole *pConsole, const
 
 	// read the header
 	io_read(m_File, &m_Info.m_Header, sizeof(m_Info.m_Header));
-	if(mem_comp(m_Info.m_Header.m_aMarker, gs_aHeaderMarker, sizeof(gs_aHeaderMarker)) != 0 &&
-		mem_comp(m_Info.m_Header.m_aMarker, gs_aHeaderMarkerOld, sizeof(gs_aHeaderMarkerOld)) != 0)
+	if(mem_comp(m_Info.m_Header.m_aMarker, gs_aHeaderMarker, sizeof(gs_aHeaderMarker)) != 0)
 	{
 		char aBuf[256];
 		str_format(aBuf, sizeof(aBuf), "'%s' is not a demo file", pFilename);
@@ -545,11 +544,8 @@ int CDemoPlayer::Load(class IStorage *pStorage, class IConsole *pConsole, const
 	}
 	
 	
-	// check if the demo includes a map
-	unsigned char aMapMarker[8];
-	io_read(m_File, &aMapMarker, sizeof(aMapMarker));
-	
-	if(mem_comp(aMapMarker, gs_aMapMarker, sizeof(gs_aMapMarker)) == 0)
+	// get map
+	if(m_Info.m_Header.m_Version >= 2)
 	{
 		// get map size
 		unsigned char aBufMapSize[4];
@@ -557,7 +553,7 @@ int CDemoPlayer::Load(class IStorage *pStorage, class IConsole *pConsole, const
 		int MapSize = (aBufMapSize[0]<<24) | (aBufMapSize[1]<<16) | (aBufMapSize[2]<<8) | (aBufMapSize[3]);
 		
 		// check if we already have the map
-		// TODO: improve map checking
+		// TODO: improve map checking (maps folder)
 		int Crc = (m_Info.m_Header.m_aCrc[0]<<24) | (m_Info.m_Header.m_aCrc[1]<<16) | (m_Info.m_Header.m_aCrc[2]<<8) | (m_Info.m_Header.m_aCrc[3]);
 		char aMapFilename[128];
 		str_format(aMapFilename, sizeof(aMapFilename), "downloadedmaps/%s_%08x.map", m_Info.m_Header.m_aMap, Crc);
@@ -583,10 +579,6 @@ int CDemoPlayer::Load(class IStorage *pStorage, class IConsole *pConsole, const
 			mem_free(pMapData);
 		}
 	}
-	else // no map in the demo
-	{
-		io_skip(m_File, -sizeof(aMapMarker));
-	}
 	
 	
 	// scan the file for interessting points
diff --git a/src/engine/shared/demo.h b/src/engine/shared/demo.h
index 39e9ebdb..d8c8d1eb 100644
--- a/src/engine/shared/demo.h
+++ b/src/engine/shared/demo.h
@@ -6,7 +6,8 @@
 
 struct CDemoHeader
 {
-	char m_aMarker[8];
+	char m_aMarker[7];
+	char m_Version;
 	char m_aNetversion[64];
 	char m_aMap[64];
 	unsigned char m_aCrc[4];