about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/engine/server.h1
-rw-r--r--src/engine/server/server.cpp5
-rw-r--r--src/engine/server/server.h1
-rw-r--r--src/game/client/gameclient.cpp9
-rw-r--r--src/game/server/gamecontext.cpp11
5 files changed, 27 insertions, 0 deletions
diff --git a/src/engine/server.h b/src/engine/server.h
index 2e4a2f25..5036b654 100644
--- a/src/engine/server.h
+++ b/src/engine/server.h
@@ -65,6 +65,7 @@ public:
 	virtual void Kick(int ClientID, const char *pReason) = 0;
 
 	virtual void DemoRecorder_HandleAutoStart() = 0;
+	virtual bool DemoRecorder_IsRecording() = 0;
 };
 
 class IGameServer : public IInterface
diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp
index 6e63f747..c15cc96e 100644
--- a/src/engine/server/server.cpp
+++ b/src/engine/server/server.cpp
@@ -1500,6 +1500,11 @@ void CServer::DemoRecorder_HandleAutoStart()
 	}
 }
 
+bool CServer::DemoRecorder_IsRecording()
+{
+	return m_DemoRecorder.IsRecording();
+}
+
 void CServer::ConRecord(IConsole::IResult *pResult, void *pUser)
 {
 	CServer* pServer = (CServer *)pUser;
diff --git a/src/engine/server/server.h b/src/engine/server/server.h
index e32f6733..696b472d 100644
--- a/src/engine/server/server.h
+++ b/src/engine/server/server.h
@@ -170,6 +170,7 @@ public:
 	void Kick(int ClientID, const char *pReason);
 
 	void DemoRecorder_HandleAutoStart();
+	bool DemoRecorder_IsRecording();
 
 	//int Tick()
 	int64 TickStartTime(int Tick);
diff --git a/src/game/client/gameclient.cpp b/src/game/client/gameclient.cpp
index 6e94c830..467a55a0 100644
--- a/src/game/client/gameclient.cpp
+++ b/src/game/client/gameclient.cpp
@@ -893,6 +893,15 @@ void CGameClient::OnNewSnapshot()
 			m_ServerMode = SERVERMODE_PUREMOD;
 	}
 
+	// add tuning to demo
+	if(DemoRecorder()->IsRecording() && mem_comp(&StandardTuning, &m_Tuning, sizeof(CTuningParams)) != 0)
+	{
+		CMsgPacker Msg(NETMSGTYPE_SV_TUNEPARAMS);
+		int *pParams = (int *)&m_Tuning;
+		for(unsigned i = 0; i < sizeof(m_Tuning)/sizeof(int); i++)
+			Msg.AddInt(pParams[i]);
+		Client()->SendMsg(&Msg, MSGFLAG_RECORD|MSGFLAG_NOSEND);
+	}
 }
 
 void CGameClient::OnPredict()
diff --git a/src/game/server/gamecontext.cpp b/src/game/server/gamecontext.cpp
index 868ac593..fdd78f60 100644
--- a/src/game/server/gamecontext.cpp
+++ b/src/game/server/gamecontext.cpp
@@ -1511,6 +1511,17 @@ void CGameContext::OnShutdown()
 
 void CGameContext::OnSnap(int ClientID)
 {
+	// add tuning to demo
+	CTuningParams StandardTuning;
+	if(ClientID == -1 && Server()->DemoRecorder_IsRecording() && mem_comp(&StandardTuning, &m_Tuning, sizeof(CTuningParams)) != 0)
+	{
+		CMsgPacker Msg(NETMSGTYPE_SV_TUNEPARAMS);
+		int *pParams = (int *)&m_Tuning;
+		for(unsigned i = 0; i < sizeof(m_Tuning)/sizeof(int); i++)
+			Msg.AddInt(pParams[i]);
+		Server()->SendMsg(&Msg, MSGFLAG_RECORD|MSGFLAG_NOSEND, ClientID);
+	}
+
 	m_World.Snap(ClientID);
 	m_pController->Snap(ClientID);
 	m_Events.Snap(ClientID);