void CHLTVDemoRecorder::StartRecording( const char *filename, bool bContinuously ) { StopRecording(); // stop if we're already recording if ( !m_DemoFile.Open( filename, false ) ) { ConMsg ("StartRecording: couldn't open demo file %s.\n", filename ); return; } ConMsg ("Recording SourceTV demo to %s...\n", filename); demoheader_t *dh = &m_DemoFile.m_DemoHeader; // open demo header file containing sigondata Q_memset( dh, 0, sizeof(demoheader_t)); Q_strncpy( dh->demofilestamp, DEMO_HEADER_ID, sizeof(dh->demofilestamp) ); dh->demoprotocol = DEMO_PROTOCOL; dh->networkprotocol = PROTOCOL_VERSION; Q_strncpy( dh->mapname, hltv->GetMapName(), sizeof( dh->mapname ) ); char szGameDir[MAX_OSPATH]; Q_strncpy(szGameDir, com_gamedir, sizeof( szGameDir ) ); Q_FileBase ( szGameDir, dh->gamedirectory, sizeof( dh->gamedirectory ) ); Q_strncpy( dh->servername, host_name.GetString(), sizeof( dh->servername ) ); Q_strncpy( dh->clientname, "SourceTV Demo", sizeof( dh->servername ) ); // write demo file header info m_DemoFile.WriteDemoHeader(); dh->signonlength = WriteSignonData(); // demoheader will be written when demo is closed m_nFrameCount = 0; m_nStartTick = host_tickcount; // Demo playback should read this as an incoming message. // Write the client's realtime value out so we can synchronize the reads. m_DemoFile.WriteCmdHeader( dem_synctick, 0 ); m_bIsRecording = true; m_SequenceInfo = 1; m_nDeltaTick = -1; }
void Director::NewGame(IWorld *world, IProxy *proxy) { m_World = world; m_Proxy = proxy; m_World->RegisterListener(this); m_WorldModel = m_World->GetWorldModel(); memset(m_history, 0, sizeof(*m_history) * m_historyLength); memset(&m_frameEvent, 0, sizeof(m_frameEvent)); ClearDirectorCommands(); m_lastCut = nullptr; m_LastExecTime = 0; m_nextCutTime = 0; m_currentTime = 0; m_nextCutSeqnr = 0; m_maxRank = 0; WriteSignonData(); m_Active = true; }