@@ -3735,7 +3735,7 @@ CChoreoScene *CSceneEntity::LoadScene( const char *filename, IChoreoEventCallbac
37353735 Q_FixSlashes ( loadfile );
37363736
37373737 // binary compiled vcd
3738- void *pBuffer;
3738+ void *pBuffer = NULL ;
37393739#ifdef MAPBASE
37403740 //
37413741 // Raw scene file support
@@ -3760,12 +3760,13 @@ CChoreoScene *CSceneEntity::LoadScene( const char *filename, IChoreoEventCallbac
37603760 {
37613761 g_TokenProcessor.SetBuffer ((char *)pBuffer);
37623762 pScene = ChoreoLoadScene ( loadfile, NULL , &g_TokenProcessor, LocalScene_Printf );
3763+ g_TokenProcessor.SetBuffer (NULL );
37633764 }
37643765 // Okay, it's definitely missing.
37653766 else
37663767 {
37673768 MissingSceneWarning ( loadfile );
3768- return NULL ;
3769+ pScene = NULL ;
37693770 }
37703771
37713772 if (pScene)
@@ -4283,6 +4284,7 @@ CBaseEntity *CSceneEntity::FindNamedEntity( const char *name, CBaseEntity *pActo
42834284#ifdef MAPBASE
42844285const char *GetFirstSoundInScene (const char *pszScene)
42854286{
4287+ const char *soundName;
42864288 SceneCachedData_t sceneData;
42874289 if ( scenefilecache->GetSceneCachedData ( pszScene, &sceneData ) )
42884290 {
@@ -4292,30 +4294,35 @@ const char *GetFirstSoundInScene(const char *pszScene)
42924294 short stringId = scenefilecache->GetSceneCachedSound ( sceneData.sceneId , 0 );
42934295
42944296 // Trust that it's been precached
4295- return scenefilecache->GetSceneString ( stringId );
4297+ soundName = scenefilecache->GetSceneString ( stringId );
42964298 }
42974299 }
42984300 else
42994301 {
43004302 void *pBuffer = NULL ;
4301- if (filesystem->ReadFileEx ( pszScene, " MOD" , &pBuffer, false , true ))
4303+ if (filesystem->ReadFileEx ( pszScene, " MOD" , &pBuffer, true ))
43024304 {
43034305 g_TokenProcessor.SetBuffer ((char *)pBuffer);
43044306 CChoreoScene *pScene = ChoreoLoadScene ( pszScene, NULL , &g_TokenProcessor, LocalScene_Printf );
4307+ g_TokenProcessor.SetBuffer (NULL );
43054308 if (pScene)
43064309 {
43074310 for (int i = 0 ; i < pScene->GetNumEvents (); i++)
43084311 {
43094312 CChoreoEvent *pEvent = pScene->GetEvent (i);
43104313
43114314 if (pEvent->GetType () == CChoreoEvent::SPEAK)
4312- return pEvent->GetParameters ();
4315+ {
4316+ soundName = pEvent->GetParameters ();
4317+ break ;
4318+ }
43134319 }
43144320 }
43154321 }
4322+ FreeSceneFileMemory ( pBuffer );
43164323 }
43174324
4318- return NULL ;
4325+ return soundName ;
43194326}
43204327
43214328const char *GetFirstSoundInScene (CChoreoScene *scene)
@@ -4483,6 +4490,8 @@ bool CSceneEntity::ScriptLoadSceneFromString(const char* pszFilename, const char
44834490 PrecacheScene (pScene);
44844491 }
44854492
4493+ g_TokenProcessor.SetBuffer (NULL );
4494+
44864495 if (pScene != NULL )
44874496 {
44884497 // release prior scene if present
@@ -5284,12 +5293,12 @@ int GetSceneSpeechCount( char const *pszScene )
52845293 else
52855294 {
52865295 void *pBuffer = NULL ;
5287- if (filesystem->ReadFileEx ( pszScene, " MOD" , &pBuffer, false , true ))
5296+ int iNumSounds = 0 ;
5297+ if (filesystem->ReadFileEx ( pszScene, " MOD" , &pBuffer, true ))
52885298 {
5289- int iNumSounds = 0 ;
5290-
52915299 g_TokenProcessor.SetBuffer ((char *)pBuffer);
52925300 CChoreoScene *pScene = ChoreoLoadScene ( pszScene, NULL , &g_TokenProcessor, LocalScene_Printf );
5301+ g_TokenProcessor.SetBuffer (NULL );
52935302 if (pScene)
52945303 {
52955304 for (int i = 0 ; i < pScene->GetNumEvents (); i++)
@@ -5300,9 +5309,11 @@ int GetSceneSpeechCount( char const *pszScene )
53005309 iNumSounds++;
53015310 }
53025311 }
5303-
5304- return iNumSounds;
53055312 }
5313+
5314+ FreeSceneFileMemory ( pBuffer );
5315+
5316+ return iNumSounds;
53065317 }
53075318#endif
53085319 return 0 ;
@@ -5359,15 +5370,17 @@ void PrecacheInstancedScene( char const *pszScene )
53595370
53605371 // Attempt to precache manually
53615372 void *pBuffer = NULL ;
5362- if (filesystem->ReadFileEx ( loadfile, " MOD" , &pBuffer, false , true ))
5373+ if (filesystem->ReadFileEx ( loadfile, " MOD" , &pBuffer, true ))
53635374 {
53645375 g_TokenProcessor.SetBuffer ((char *)pBuffer);
53655376 CChoreoScene *pScene = ChoreoLoadScene ( loadfile, NULL , &g_TokenProcessor, LocalScene_Printf );
53665377 if (pScene)
53675378 {
53685379 PrecacheChoreoScene (pScene);
53695380 }
5381+ g_TokenProcessor.SetBuffer (NULL );
53705382 }
5383+ FreeSceneFileMemory ( pBuffer );
53715384#else
53725385 // Scenes are sloppy and don't always exist.
53735386 // A scene that is not in the pre-built cache image, but on disk, is a true error.
0 commit comments