diff --git a/src/NoteSkinManager.cpp b/src/NoteSkinManager.cpp index ae9bfafb3c..8865ba74da 100644 --- a/src/NoteSkinManager.cpp +++ b/src/NoteSkinManager.cpp @@ -88,21 +88,28 @@ void NoteSkinManager::RefreshNoteSkinData( const Game* pGame ) { RString sName = asNoteSkinNames[j]; sName.MakeLower(); - LoadNoteSkinData( sName, g_mapNameToData[sName] ); + // Don't feel like changing the structure of this code to load the skin + // into a temp variable and move it, so if the load fails, then just + // delete it from the map. -Kyz + if(!LoadNoteSkinData(sName, g_mapNameToData[sName])) + { + map::iterator entry= g_mapNameToData.find(sName); + g_mapNameToData.erase(entry); + } } } -void NoteSkinManager::LoadNoteSkinData( const RString &sNoteSkinName, NoteSkinData& data_out ) +bool NoteSkinManager::LoadNoteSkinData( const RString &sNoteSkinName, NoteSkinData& data_out ) { data_out.sName = sNoteSkinName; data_out.metrics.Clear(); data_out.vsDirSearchOrder.clear(); // Read the current NoteSkin and all of its fallbacks - LoadNoteSkinDataRecursive( sNoteSkinName, data_out ); + return LoadNoteSkinDataRecursive( sNoteSkinName, data_out ); } -void NoteSkinManager::LoadNoteSkinDataRecursive( const RString &sNoteSkinName_, NoteSkinData& data_out ) +bool NoteSkinManager::LoadNoteSkinDataRecursive( const RString &sNoteSkinName_, NoteSkinData& data_out ) { RString sNoteSkinName(sNoteSkinName_); @@ -115,7 +122,7 @@ void NoteSkinManager::LoadNoteSkinDataRecursive( const RString &sNoteSkinName_, if(iDepth >= 20) { LuaHelpers::ReportScriptError("Circular NoteSkin fallback references detected.", "NOTESKIN_ERROR"); - return; + return false; } RString sDir = SpecialFiles::NOTESKINS_DIR + m_pCurGame->m_szName + "/" + sNoteSkinName + "/"; @@ -127,7 +134,7 @@ void NoteSkinManager::LoadNoteSkinDataRecursive( const RString &sNoteSkinName_, LuaHelpers::ReportScriptError("NoteSkin \"" + data_out.sName + "\" references skin \"" + sNoteSkinName + "\" that is not present", "NOTESKIN_ERROR"); - return; + return false; } } @@ -187,6 +194,7 @@ void NoteSkinManager::LoadNoteSkinDataRecursive( const RString &sNoteSkinName_, LUA->Release( L ); } data_out.m_Loader = refScript; + return true; } diff --git a/src/NoteSkinManager.h b/src/NoteSkinManager.h index db06b25719..0bcd96eb43 100644 --- a/src/NoteSkinManager.h +++ b/src/NoteSkinManager.h @@ -48,8 +48,8 @@ protected: RString GetPathFromDirAndFile( const RString &sDir, const RString &sFileName ); void GetAllNoteSkinNamesForGame( const Game *pGame, vector &AddTo ); - void LoadNoteSkinData( const RString &sNoteSkinName, NoteSkinData& data_out ); - void LoadNoteSkinDataRecursive( const RString &sNoteSkinName, NoteSkinData& data_out ); + bool LoadNoteSkinData( const RString &sNoteSkinName, NoteSkinData& data_out ); + bool LoadNoteSkinDataRecursive( const RString &sNoteSkinName, NoteSkinData& data_out ); RString m_sCurrentNoteSkin; const Game* m_pCurGame;