diff --git a/src/ScreenSelectMaster.cpp b/src/ScreenSelectMaster.cpp index 5aa4c15423..da3b27df1d 100644 --- a/src/ScreenSelectMaster.cpp +++ b/src/ScreenSelectMaster.cpp @@ -353,15 +353,50 @@ void ScreenSelectMaster::UpdateSelectableChoices() { vector vpns; GetActiveElementPlayerNumbers( vpns ); + int first_playable= -1; + bool on_unplayable[NUM_PLAYERS]; + FOREACH_PlayerNumber(pn) + { + on_unplayable[pn]= false; + } for( unsigned c=0; cPlayCommand( m_aGameCommands[c].IsPlayable()? "Enabled":"Disabled" ); + { + m_vsprIcon[c]->PlayCommand(command); + } FOREACH( PlayerNumber, vpns, p ) + { + if(disabled && m_iChoice[*p] == c) + { + on_unplayable[*p]= true; + } if( m_vsprScroll[*p][c].IsLoaded() ) - m_vsprScroll[*p][c]->PlayCommand( m_aGameCommands[c].IsPlayable()? "Enabled":"Disabled" ); + { + m_vsprScroll[*p][c]->PlayCommand(command); + } + } + } + FOREACH(PlayerNumber, vpns, pn) + { + if(on_unplayable[*pn]) + { + ChangeSelection(*pn, first_playable < m_iChoice[*pn] ? MenuDir_Left : + MenuDir_Right, first_playable); + } } /* If no options are playable at all, just wait. Some external