//----------------------------------------------------------------------------- // Purpose: // Input : buf - //----------------------------------------------------------------------------- void CSentence::CacheRestoreFromBuffer( CUtlBuffer& buf ) { Assert( !buf.IsText() ); Reset(); m_bIsCached = true; int version = buf.GetChar(); if ( version != CACHED_SENTENCE_VERSION ) { // Uh oh, version changed... m_bIsValid = false; return; } unsigned short pcount = (unsigned short)buf.GetShort(); CPhonemeTag pt; int i; for ( i = 0; i < pcount; ++i ) { unsigned short code = buf.GetShort(); float st = buf.GetFloat(); float et = buf.GetFloat(); pt.SetPhonemeCode( code ); pt.SetStartTime( st ); pt.SetEndTime( et ); AddRuntimePhoneme( &pt ); } // Now read emphasis samples int c = buf.GetShort(); for ( i = 0; i < c; i++ ) { CEmphasisSample sample; sample.SetSelected( false ); sample.time = buf.GetFloat(); sample.value = (float)buf.GetShort() / 32767.0f; m_EmphasisSamples.AddToTail( sample ); } // And voice duck SetVoiceDuck( buf.GetChar() == 0 ? false : true ); m_bIsValid = true; }
bool CNetworkStringTable::ReadStringTable( CUtlBuffer& buf ) { DeleteAllStrings(); int numstrings = buf.GetInt(); for ( int i = 0 ; i < numstrings; i++ ) { char stringname[4096]; buf.GetString( stringname, sizeof( stringname ) ); if ( buf.GetChar() == 1 ) { int userDataSize = (int)buf.GetShort(); Assert( userDataSize > 0 ); byte *data = new byte[ userDataSize + 4 ]; Assert( data ); buf.Get( data, userDataSize ); AddString( true, stringname, userDataSize, data ); delete[] data; } else { AddString( true, stringname ); } } return true; }
bool CChoreoActor::RestoreFromBuffer( CUtlBuffer& buf, CChoreoScene *pScene ) { char sz[ 256 ]; buf.GetString( sz, sizeof( sz ) ); SetName( sz ); int i; int c = buf.GetShort(); for ( i = 0; i < c; i++ ) { CChoreoChannel *channel = pScene->AllocChannel(); Assert( channel ); if ( channel->RestoreFromBuffer( buf, pScene, this ) ) { AddChannel( channel ); channel->SetActor( this ); continue; } return false; } SetActive( buf.GetChar() == 1 ? true : false ); return true; }
bool BasicGameStats_t::ParseFromBuffer( CUtlBuffer& buf, int iBufferStatsVersion ) { bool bret = true; m_nSecondsToCompleteGame = buf.GetInt(); if ( m_nSecondsToCompleteGame < 0 || m_nSecondsToCompleteGame > 10000000 ) { bret = false; } m_Summary.ParseFromBuffer( buf, iBufferStatsVersion ); int c = buf.GetInt(); if ( c > 1024 || c < 0 ) { bret = false; } for ( int i = 0; i < c; ++i ) { char mapname[ 256 ]; buf.GetString( mapname, sizeof( mapname ) ); BasicGameStatsRecord_t *rec = FindOrAddRecordForMap( mapname ); bool valid= rec->ParseFromBuffer( buf, iBufferStatsVersion ); if ( !valid ) { bret = false; } } if ( iBufferStatsVersion >= GAMESTATS_FILE_VERSION_OLD2 ) { m_nHL2ChaptureUnlocked = (int)buf.GetChar(); m_bSteam = buf.GetChar() ? true : false; } if ( iBufferStatsVersion > GAMESTATS_FILE_VERSION_OLD2 ) { m_bCyberCafe = buf.GetChar() ? true : false; } if ( iBufferStatsVersion > GAMESTATS_FILE_VERSION_OLD3 ) { m_nDXLevel = (int)buf.GetShort(); } return bret; }
void CModelSoundsCache::Restore( CUtlBuffer& buf ) { MEM_ALLOC_CREDIT(); unsigned short c; c = (unsigned short)buf.GetShort(); for ( int i = 0; i < c; ++i ) { char soundname[ 512 ]; buf.GetString( soundname, sizeof( soundname ) ); int idx = soundemitterbase->GetSoundIndex( soundname ); if ( idx != -1 ) { Assert( idx <= 65535 ); if ( sounds.Find( idx ) == sounds.InvalidIndex() ) { sounds.AddToTail( (unsigned short)idx ); } } } }
bool CChoreoChannel::RestoreFromBuffer( CUtlBuffer& buf, CChoreoScene *pScene, CChoreoActor *pActor, IChoreoStringPool *pStringPool ) { char sz[ 256 ]; pStringPool->GetString( buf.GetShort(), sz, sizeof( sz ) ); SetName( sz ); int numEvents = (int)buf.GetUnsignedChar(); for ( int i = 0 ; i < numEvents; ++i ) { CChoreoEvent *e = pScene->AllocEvent(); if ( e->RestoreFromBuffer( buf, pScene, pStringPool ) ) { AddEvent( e ); e->SetChannel( this ); e->SetActor( pActor ); continue; } return false; } SetActive( buf.GetChar() == 1 ? true : false ); return true; }
bool CBaseGameStats::LoadFromFile( void ) { if ( filesystem->FileExists( gamestats->GetStatSaveFileName(), GAMESTATS_PATHID ) ) { char fullpath[ 512 ]; filesystem->RelativePathToFullPath( gamestats->GetStatSaveFileName(), GAMESTATS_PATHID, fullpath, sizeof( fullpath ) ); StatsLog( "Loading stats from '%s'\n", fullpath ); } CUtlBuffer buf; if ( filesystem->ReadFile( gamestats->GetStatSaveFileName(), GAMESTATS_PATHID, buf ) ) { bool bRetVal = true; int version = buf.GetShort(); if ( version > GAMESTATS_FILE_VERSION ) return false; //file is beyond our comprehension // Set global parse version CBGSDriver.m_iLoadedVersion = version; buf.Get( CBGSDriver.m_szLoadedUserID, 16 ); CBGSDriver.m_szLoadedUserID[ sizeof( CBGSDriver.m_szLoadedUserID ) - 1 ] = 0; if ( s_szPseudoUniqueID[ 0 ] != 0 ) { if ( Q_stricmp( CBGSDriver.m_szLoadedUserID, s_szPseudoUniqueID ) ) { //UserID changed, blow away log!!! filesystem->RemoveFile( gamestats->GetStatSaveFileName(), GAMESTATS_PATHID ); filesystem->RemoveFile( GAMESTATS_LOG_FILE, GAMESTATS_PATHID ); Warning( "Userid changed, clearing stats file\n" ); CBGSDriver.m_szLoadedUserID[0] = '\0'; CBGSDriver.m_iLoadedVersion = -1; gamestats->m_BasicStats.Clear(); gamestats->LoadingEvent_PlayerIDDifferentThanLoadedStats(); bRetVal = false; } if ( version <= GAMESTATS_FILE_VERSION_OLD5 ) { gamestats->m_BasicStats.Clear(); bRetVal = false; } else { // Peek ahead in buffer to see if we have the "no default stats" secret flag set. int iCheckForStandardStatsInFile = *( int * )buf.PeekGet(); bool bValid = true; if ( iCheckForStandardStatsInFile != GAMESTATS_STANDARD_NOT_SAVED ) { //the GAMESTATS_STANDARD_NOT_SAVED flag coincides with user completion time, rewind so the gamestats parser can grab it bValid = gamestats->m_BasicStats.ParseFromBuffer( buf, version ); } else { // skip over the flag buf.GetInt(); } if( !bValid ) { m_BasicStats.Clear(); } if( ( buf.TellPut() - buf.TellGet() ) != 0 ) //more data left, must be custom data { gamestats->LoadCustomDataFromBuffer( buf ); } } } return bRetVal; } else { filesystem->RemoveFile( GAMESTATS_LOG_FILE, GAMESTATS_PATHID ); } return false; }
//----------------------------------------------------------------------------- // Reads the PSD file into the specified buffer //----------------------------------------------------------------------------- bool PSDReadFileRGBA8888( CUtlBuffer &buf, Bitmap_t &bitmap ) { PSDHeader_t header; buf.Get( &header, sizeof(header) ); if ( BigLong( header.m_nSignature ) != PSD_SIGNATURE ) return false; if ( BigShort( header.m_nVersion ) != 1 ) return false; if ( BigShort( header.m_nDepth ) != 8 ) return false; PSDMode_t mode = (PSDMode_t)BigShort( header.m_nMode ); int nChannelsCount = BigShort( header.m_nChannels ); if ( mode == MODE_MULTICHANNEL || mode == MODE_LAB ) return false; switch ( mode ) { case MODE_RGBA: if ( nChannelsCount < 3 ) return false; break; case MODE_GREYSCALE: case MODE_PALETTIZED: if ( nChannelsCount != 1 && nChannelsCount != 2 ) return false; break; case MODE_CMYK: if ( nChannelsCount < 4 ) return false; break; default: Warning( "Unsupported PSD color mode!\n" ); return false; } int nWidth = BigLong( header.m_nColumns ); int nHeight = BigLong( header.m_nRows ); // Skip parts of memory we don't care about int nColorModeSize = BigLong( buf.GetUnsignedInt() ); Assert( nColorModeSize % 3 == 0 ); unsigned char *pPaletteBits = (unsigned char*)_alloca( nColorModeSize ); PSDPalette_t palette; palette.m_pRed = palette.m_pGreen = palette.m_pBlue = 0; if ( nColorModeSize ) { int nPaletteSize = nColorModeSize / 3; buf.Get( pPaletteBits, nColorModeSize ); palette.m_pRed = pPaletteBits; palette.m_pGreen = palette.m_pRed + nPaletteSize; palette.m_pBlue = palette.m_pGreen + nPaletteSize; } int nImageResourcesSize = BigLong( buf.GetUnsignedInt() ); buf.SeekGet( CUtlBuffer::SEEK_CURRENT, nImageResourcesSize ); int nLayersSize = BigLong( buf.GetUnsignedInt() ); buf.SeekGet( CUtlBuffer::SEEK_CURRENT, nLayersSize ); unsigned short nCompressionType = BigShort( buf.GetShort() ); bitmap.Init( nWidth, nHeight, IMAGE_FORMAT_RGBA8888 ); bool bSecondPassCMYKA = ( nChannelsCount > 4 && mode == MODE_CMYK ); if ( nCompressionType == 0 ) { PSDReadUncompressedChannels( buf, ( nChannelsCount > 4 ) ? 4 : nChannelsCount, mode, palette, bitmap ); } else { // Skip the data that indicates the length of each compressed row in bytes // NOTE: There are two bytes per row per channel unsigned int nLineLengthData = sizeof(unsigned short) * bitmap.m_nHeight * nChannelsCount; buf.SeekGet( CUtlBuffer::SEEK_CURRENT, nLineLengthData ); PSDReadCompressedChannels( buf, ( nChannelsCount > 4 ) ? 4 : nChannelsCount, mode, palette, bitmap ); } // Read the alpha in a second pass for CMYKA if ( bSecondPassCMYKA ) { if ( nCompressionType == 0 ) { PSDReadUncompressedChannels( buf, 1, MODE_COUNT, palette, bitmap ); } else { PSDReadCompressedChannels( buf, 1, MODE_COUNT, palette, bitmap ); } } return true; }