diff --git a/Docs/Luadoc/LuaDocumentation.xml b/Docs/Luadoc/LuaDocumentation.xml
index 09f9f501c3..28f00cb28a 100644
--- a/Docs/Luadoc/LuaDocumentation.xml
+++ b/Docs/Luadoc/LuaDocumentation.xml
@@ -5409,7 +5409,8 @@ Details of the event table:
Sets the profile index of Player pn to iProfileIndex.
The following values of iProfileIndex have special, hardcoded behavior:
• -1: join the player and play the theme's start sound effect
- • -2: unjoin the player, unlock their MemoryCard, and unmount their MemoryCard
+ • -2: unjoin the player, unlock their MemoryCard, and unmount their MemoryCard
+ • -3: allow the user to play without a local or USB profile (as a guest)
diff --git a/src/MessageManager.cpp b/src/MessageManager.cpp
index fe539b8474..1308c2a549 100644
--- a/src/MessageManager.cpp
+++ b/src/MessageManager.cpp
@@ -57,6 +57,7 @@ static const char *MessageIDNames[] = {
"MenuSelectionChanged",
"PlayerJoined",
"PlayerUnjoined",
+ "PlayerProfileSet",
"AutosyncChanged",
"PreferredSongGroupChanged",
"PreferredCourseGroupChanged",
diff --git a/src/MessageManager.h b/src/MessageManager.h
index e8d5e6fe18..851a0948a0 100644
--- a/src/MessageManager.h
+++ b/src/MessageManager.h
@@ -53,6 +53,7 @@ enum MessageID
Message_MenuSelectionChanged,
Message_PlayerJoined,
Message_PlayerUnjoined,
+ Message_PlayerProfileSet,
Message_AutosyncChanged,
Message_PreferredSongGroupChanged,
Message_PreferredCourseGroupChanged,
diff --git a/src/MusicWheelItem.cpp b/src/MusicWheelItem.cpp
index fa75be1568..24f531cc2b 100644
--- a/src/MusicWheelItem.cpp
+++ b/src/MusicWheelItem.cpp
@@ -118,6 +118,7 @@ MusicWheelItem::MusicWheelItem( RString sType ):
this->SubscribeToMessage( Message_CurrentTrailP2Changed );
this->SubscribeToMessage( Message_PreferredDifficultyP1Changed );
this->SubscribeToMessage( Message_PreferredDifficultyP2Changed );
+ this->SubscribeToMessage( Message_PlayerProfileSet );
}
MusicWheelItem::MusicWheelItem( const MusicWheelItem &cpy ):
@@ -382,7 +383,8 @@ void MusicWheelItem::HandleMessage( const Message &msg )
msg == Message_CurrentTrailP1Changed ||
msg == Message_CurrentTrailP2Changed ||
msg == Message_PreferredDifficultyP1Changed ||
- msg == Message_PreferredDifficultyP2Changed )
+ msg == Message_PreferredDifficultyP2Changed ||
+ msg == Message_PlayerProfileSet )
{
const MusicWheelItemData *pWID = dynamic_cast( m_pData );
MusicWheelItemType type = MusicWheelItemType_Invalid;
diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp
index 9d536aa4e5..e8816c349d 100644
--- a/src/ScreenSelectMusic.cpp
+++ b/src/ScreenSelectMusic.cpp
@@ -137,6 +137,7 @@ void ScreenSelectMusic::Init()
ScreenWithMenuElements::Init();
this->SubscribeToMessage( Message_PlayerJoined );
+ this->SubscribeToMessage( Message_PlayerProfileSet );
// Cache these values
// Marking for change -- Midiman (why? -aj)
diff --git a/src/ScreenSelectProfile.cpp b/src/ScreenSelectProfile.cpp
index a21d6013e0..e5d2171658 100644
--- a/src/ScreenSelectProfile.cpp
+++ b/src/ScreenSelectProfile.cpp
@@ -128,7 +128,7 @@ bool ScreenSelectProfile::SetProfileIndex( PlayerNumber pn, int iProfileIndex )
return false;
// wrong selection
- if( iProfileIndex < -2 )
+ if( iProfileIndex < -3 )
return false;
// unload player
@@ -160,7 +160,7 @@ bool ScreenSelectProfile::Finish(){
FOREACH_PlayerNumber( p )
{
- // not all players has made their choices
+ // not all players have made their choices
if( GAMESTATE->IsHumanPlayer( p ) && ( m_iSelectedProfiles[p] == -1 ) )
iUnselectedProfiles++;
@@ -209,7 +209,16 @@ bool ScreenSelectProfile::Finish(){
MEMCARDMAN->LockCard( p );
}
}
+
+ // If the player picked a profile (>= 0) or chose to play as a guest (-3),
+ // broadcast a message
+ if( m_iSelectedProfiles[p] >= 0 || m_iSelectedProfiles[p] == -3 ) {
+ Message msg( MessageIDToString(Message_PlayerProfileSet) );
+ msg.SetParam( "Player", p );
+ MESSAGEMAN->Broadcast( msg );
+ }
}
+
StartTransitioningScreen( SM_GoToNextScreen );
return true;
}