//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: VCR mode records a client's game and allows you to // play it back and reproduce it exactly. When playing it back, nothing // is simulated on the server, but all server packets are recorded. // // Most of the VCR mode functionality is accomplished through hooks // called at various points in the engine. // // $NoKeywords: $ //============================================================================= #include "xbox/xbox_platform.h" #include "xbox/xbox_win32stubs.h" #include #include #include #include #include #include "tier0/vcrmode.h" #include "tier0/dbg.h" #define VCRFILE_VERSION 2 #define VCR_RuntimeAssert(x) VCR_RuntimeAssertFn(x, #x) // ---------------------------------------------------------------------- // // Internal functions. // ---------------------------------------------------------------------- // static void VCR_Error( const char *pFormat, ... ) { } static void VCR_RuntimeAssertFn(int bAssert, char const *pStr) { } static void VCR_Read(void *pDest, int size) { } template static void VCR_ReadVal(T &val) { VCR_Read(&val, sizeof(val)); } static void VCR_Write(void const *pSrc, int size) { } template static void VCR_WriteVal(T &val) { } // Hook from ExtendedTrace.cpp bool g_bTraceRead = false; void OutputDebugStringFormat( const char *pMsg, ... ) { } static VCREvent VCR_ReadEvent() { return (VCREvent)-1; } static void VCR_WriteEvent(VCREvent event) { } static void VCR_IncrementEvent() { } static void VCR_Event(VCREvent type) { } // ---------------------------------------------------------------------- // // VCR trace interface. // ---------------------------------------------------------------------- // class CVCRTrace : public IVCRTrace { public: virtual VCREvent ReadEvent() { return VCR_ReadEvent(); } virtual void Read( void *pDest, int size ) { VCR_Read( pDest, size ); } }; static CVCRTrace g_VCRTrace; // ---------------------------------------------------------------------- // // VCR interface. // ---------------------------------------------------------------------- // static int VCR_Start( char const *pFilename, bool bRecord, IVCRHelpers *pHelpers ) { return 0; } static void VCR_End() { } static IVCRTrace* VCR_GetVCRTraceInterface() { return 0; } static VCRMode VCR_GetMode() { return VCR_Disabled; } static void VCR_SetEnabled(int bEnabled) { } static void VCR_SyncToken(char const *pToken) { } static double VCR_Hook_Sys_FloatTime(double time) { return 0; } static int VCR_Hook_PeekMessage( struct tagMSG *msg, void *hWnd, unsigned int wMsgFilterMin, unsigned int wMsgFilterMax, unsigned int wRemoveMsg ) { return 0; } void VCR_Hook_RecordGameMsg( unsigned int uMsg, unsigned int wParam, long lParam ) { } void VCR_Hook_RecordEndGameMsg() { } bool VCR_Hook_PlaybackGameMsg( unsigned int &uMsg, unsigned int &wParam, long &lParam ) { return 0; } static void VCR_Hook_GetCursorPos(struct tagPOINT *pt) { } static void VCR_Hook_ScreenToClient(void *hWnd, struct tagPOINT *pt) { } static int VCR_Hook_recvfrom(int s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen) { return 0; } static int VCR_Hook_recv(int s, char *buf, int len, int flags) { return 0; } static int VCR_Hook_send(int s, const char *buf, int len, int flags) { return 0; } static void VCR_Hook_Cmd_Exec(char **f) { } static char* VCR_Hook_GetCommandLine() { return GetCommandLine(); } static long VCR_Hook_RegOpenKeyEx( void *hKey, const char *lpSubKey, unsigned long ulOptions, unsigned long samDesired, void *pHKey ) { return 0; } static long VCR_Hook_RegSetValueEx(void *hKey, char const *lpValueName, unsigned long Reserved, unsigned long dwType, unsigned char const *lpData, unsigned long cbData) { return 0; } static long VCR_Hook_RegQueryValueEx(void *hKey, char const *lpValueName, unsigned long *lpReserved, unsigned long *lpType, unsigned char *lpData, unsigned long *lpcbData) { return 0; } static long VCR_Hook_RegCreateKeyEx(void *hKey, char const *lpSubKey, unsigned long Reserved, char *lpClass, unsigned long dwOptions, unsigned long samDesired, void *lpSecurityAttributes, void *phkResult, unsigned long *lpdwDisposition) { return 0; } static void VCR_Hook_RegCloseKey(void *hKey) { } int VCR_Hook_GetNumberOfConsoleInputEvents( void *hInput, unsigned long *pNumEvents ) { return 0; } int VCR_Hook_ReadConsoleInput( void *hInput, void *pRecs, int nMaxRecs, unsigned long *pNumRead ) { return 0; } void VCR_Hook_LocalTime( struct tm *today ) { } short VCR_Hook_GetKeyState( int nVirtKey ) { return 0; } void VCR_GenericRecord( const char *pEventName, const void *pData, int len ) { } int VCR_GenericPlayback( const char *pEventName, void *pOutData, int maxLen, bool bForceSameLen ) { return 0; } void VCR_GenericValue( const char *pEventName, void *pData, int maxLen ) { } // ---------------------------------------------------------------------- // // The global VCR interface. // ---------------------------------------------------------------------- // VCR_t g_VCR = { VCR_Start, VCR_End, VCR_GetVCRTraceInterface, VCR_GetMode, VCR_SetEnabled, VCR_SyncToken, VCR_Hook_Sys_FloatTime, VCR_Hook_PeekMessage, VCR_Hook_RecordGameMsg, VCR_Hook_RecordEndGameMsg, VCR_Hook_PlaybackGameMsg, VCR_Hook_recvfrom, VCR_Hook_GetCursorPos, VCR_Hook_ScreenToClient, VCR_Hook_Cmd_Exec, VCR_Hook_GetCommandLine, VCR_Hook_RegOpenKeyEx, VCR_Hook_RegSetValueEx, VCR_Hook_RegQueryValueEx, VCR_Hook_RegCreateKeyEx, VCR_Hook_RegCloseKey, VCR_Hook_GetNumberOfConsoleInputEvents, VCR_Hook_ReadConsoleInput, VCR_Hook_LocalTime, VCR_Hook_GetKeyState, VCR_Hook_recv, VCR_Hook_send, VCR_GenericRecord, VCR_GenericPlayback, VCR_GenericValue }; VCR_t *g_pVCR = &g_VCR;