diff --git a/Themes/Til Death/Scripts/02 Branches.lua b/Themes/Til Death/Scripts/02 Branches.lua index 32c046882c..be2b756e60 100644 --- a/Themes/Til Death/Scripts/02 Branches.lua +++ b/Themes/Til Death/Scripts/02 Branches.lua @@ -8,6 +8,9 @@ If the line is a function, you'll have to use Branch.keyname() instead. -- used for various SMOnline-enabled screens: function SMOnlineScreen() + if not IsNetSMOnline() then + return "ScreenSelectMusic" + end for pn in ivalues(GAMESTATE:GetHumanPlayers()) do if not IsSMOnlineLoggedIn(pn) then return "ScreenSMOnlineLogin" @@ -31,7 +34,6 @@ function GameOverOrContinue() return "ScreenGameOver" end end - Branch = { Init = function() return Branch.TitleMenu() end, AfterInit = function() @@ -68,6 +70,7 @@ Branch = { end end, StartGame = function() + multiplayer = false -- Check to see if there are 0 songs installed. Also make sure to check -- that the additional song count is also 0, because there is -- a possibility someone will use their existing StepMania simfile @@ -81,11 +84,7 @@ Branch = { if IsNetConnected() then return "ScreenSelectStyle" else - if THEME:GetMetric("Common","AutoSetStyle") == false then - return "ScreenSelectStyle" - else - return "ScreenProfileLoad" - end + return "ScreenProfileLoad" end end end, @@ -101,24 +100,15 @@ Branch = { ReportStyle() GAMESTATE:ApplyGameCommand("playmode,regular") end - if IsNetSMOnline() then - return SMOnlineScreen() - end - if IsNetConnected() then - return "ScreenNetRoom" - end return "ScreenProfileLoad" --return CHARMAN:GetAllCharacters() ~= nil and "ScreenSelectCharacter" or "ScreenGameInformation" end, AfterSelectProfile = function() - if ( THEME:GetMetric("Common","AutoSetStyle") == true ) then - -- use SelectStyle in online... - -- OR DONT LOL!!! - mina - return IsNetConnected() and "ScreenSMOnlineLogin" or "ScreenSelectMusic"--"ScreenSelectPlayMode" - else - return "ScreenSelectMusic"--"ScreenSelectStyle" - end + return "ScreenSelectMusic" + end, + AfterNetSelectProfile = function() + return SMOnlineScreen() end, AfterProfileLoad = function() return "ScreenSelectMusic"--"ScreenSelectPlayMode" @@ -137,7 +127,18 @@ Branch = { bTrue = PREFSMAN:GetPreference("ShowInstructions") return (bTrue and GoToMusic() or "ScreenGameInformation") end, - AfterSMOLogin = SMOnlineScreen(), + AfterSMOLogin = SMOnlineScreen, + MultiScreen = function() + if IsNetSMOnline() then + if not IsSMOnlineLoggedIn(PLAYER_1) then + return "ScreenNetSelectProfile" + else + return "ScreenNetRoom" + end + else + return "ScreenNetworkOptions" + end + end, BackOutOfPlayerOptions = function() return SelectMusicOrCourse() end, @@ -229,7 +230,10 @@ Branch = { return "ScreenProfileSaveSummary" end, Network = function() - return IsNetConnected() and "ScreenTitleMenu" or "ScreenTitleMenu" + return IsNetConnected() and Branch.MultiScreen() or "ScreenTitleMenu" + end, + BackOutOfNetwork = function() + return "ScreenTitleMenu" end, AfterSaveSummary = function() return GameOverOrContinue() diff --git a/Themes/Til Death/metrics.ini b/Themes/Til Death/metrics.ini index 4a4ad6b8b4..2102bdb9c2 100644 --- a/Themes/Til Death/metrics.ini +++ b/Themes/Til Death/metrics.ini @@ -178,8 +178,10 @@ ScrollerTransform=function(self,offset,itemIndex,numItems) \ self:y(20*(itemIndex-(numItems-1)/2)); \ end; \ -ChoiceNames="GameStart,Options,AV,Color,GitHub,Exit" +ChoiceNames="GameStart,Multi,Options,AV,Color,GitHub,Exit" ChoiceColor="screen,ScreenColorChange;text,ColorChange" +ChoiceColor="screen,ScreenColorChange;text,ColorChange" +ChoiceMulti="text,Multi;applydefaultoptions;screen,"..Branch.MultiScreen() ChoiceAV="urlnoexit,https://www.ddrnl.com/viewtopic.php?f=13&t=156;text,Editor" ChoiceGitHub="urlnoexit,https://github.com/etternagame/etterna;text,GitHub" diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index 5f740fa0d1..41a3f78bbf 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -1958,6 +1958,7 @@ AnswerBlank= %d songs in %d groups=%d songs in %d groups %d courses in %d groups=%d courses in %d groups %d unlocks=%d unlocks +Multi=Multiplayer # New Default Strings Gametype:=Gametype: Difficulty:=Difficulty: diff --git a/Themes/_fallback/Scripts/02 Branches.lua b/Themes/_fallback/Scripts/02 Branches.lua index f5d13f8eec..4bb227aba8 100644 --- a/Themes/_fallback/Scripts/02 Branches.lua +++ b/Themes/_fallback/Scripts/02 Branches.lua @@ -8,6 +8,9 @@ If the line is a function, you'll have to use Branch.keyname() instead. -- used for various SMOnline-enabled screens: function SMOnlineScreen() + if not IsNetSMOnline() then + return "ScreenSelectMusic" + end for pn in ivalues(GAMESTATE:GetHumanPlayers()) do if not IsSMOnlineLoggedIn(pn) then return "ScreenSMOnlineLogin" @@ -89,6 +92,17 @@ Branch = { end end end, + MultiScreen = function() + if IsNetSMOnline() then + if not IsSMOnlineLoggedIn(PLAYER_1) then + return "ScreenNetSelectProfile" + else + return "ScreenNetRoom" + end + else + return "ScreenNetworkOptions" + end + end, OptionsEdit = function() -- Similar to above, don't let anyone in here with 0 songs. if SONGMAN:GetNumSongs() == 0 and SONGMAN:GetNumAdditionalSongs() == 0 then @@ -101,24 +115,20 @@ Branch = { ReportStyle() GAMESTATE:ApplyGameCommand("playmode,regular") end - if IsNetSMOnline() then - return SMOnlineScreen() - end - if IsNetConnected() then - return "ScreenNetRoom" - end return "ScreenProfileLoad" --return CHARMAN:GetAllCharacters() ~= nil and "ScreenSelectCharacter" or "ScreenGameInformation" end, AfterSelectProfile = function() if ( THEME:GetMetric("Common","AutoSetStyle") == true ) then - -- use SelectStyle in online... - return IsNetConnected() and "ScreenSelectStyle" or "ScreenSelectPlayMode" + return "ScreenSelectMusic" else return "ScreenSelectStyle" end end, + AfterNetSelectProfile = function() + return SMOnlineScreen() + end, AfterProfileLoad = function() return "ScreenSelectPlayMode" end, @@ -136,7 +146,7 @@ Branch = { bTrue = PREFSMAN:GetPreference("ShowInstructions") return (bTrue and GoToMusic() or "ScreenGameInformation") end, - AfterSMOLogin = SMOnlineScreen(), + AfterSMOLogin = SMOnlineScreen, BackOutOfPlayerOptions = function() return SelectMusicOrCourse() end, @@ -211,7 +221,10 @@ Branch = { return "ScreenProfileSaveSummary" end, Network = function() - return IsNetConnected() and "ScreenTitleMenu" or "ScreenTitleMenu" + return IsNetConnected() and Branch.MultiScreen() or "ScreenTitleMenu" + end, + BackOutOfNetwork = function() + return "ScreenTitleMenu" end, AfterSaveSummary = function() return GameOverOrContinue() diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index ef346785d1..b2432fd279 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -1859,6 +1859,13 @@ TimerSeconds=-1 # LoadEdits=true +[ScreenNetSelectProfile] +Fallback="ScreenSelectProfile" +Class="ScreenSelectProfile" +NextScreen=Branch.AfterNetSelectProfile() +StartScreen=Branch.AfterNetSelectProfile() +PrevScreen="ScreenTitleMenu" + [ScreenSelectProfile] Fallback="ScreenWithMenuElements" Class="ScreenSelectProfile" @@ -3054,7 +3061,7 @@ Line1="conf,Game" Class="ScreenNetworkOptions" Fallback="ScreenOptionsServiceChild" NextScreen=Branch.Network() -PrevScreen=Branch.Network() +PrevScreen=Branch.BackOutOfNetwork() [ScreenOptionsManageProfiles] Class="ScreenOptionsManageProfiles" @@ -4195,7 +4202,7 @@ ShowHelp=false [ScreenSMOnlineLogin] Class="ScreenSMOnlineLogin" Fallback="ScreenOptionsServiceChild" -NextScreen=Branch.AfterSMOLogin +NextScreen=Branch.AfterSMOLogin() PrevScreen=Branch.TitleMenu() ShowStyleIcon=false TimerSeconds=-1 diff --git a/src/NetworkSyncManager.cpp b/src/NetworkSyncManager.cpp index b064259aa4..9b6edf8b25 100644 --- a/src/NetworkSyncManager.cpp +++ b/src/NetworkSyncManager.cpp @@ -470,6 +470,7 @@ RoomData jsonToRoom(json& room) tmp.SetDescription(s); unsigned int state = room.value("state", 0); tmp.SetState(state); + tmp.SetHasPassword(room.value("pass", false)); for (auto&& player : room.at("players")) tmp.players.emplace_back(player.get()); return tmp; diff --git a/src/RoomWheel.cpp b/src/RoomWheel.cpp index 036d9724a7..10ccfdb242 100644 --- a/src/RoomWheel.cpp +++ b/src/RoomWheel.cpp @@ -296,7 +296,7 @@ void RoomWheel::BuildFromRoomDatas() itemData->m_sText = roomsInWheel[i].Name(); itemData->m_sDesc = roomsInWheel[i].Description(); itemData->m_iFlags = roomsInWheel[i].GetFlags(); - + itemData->hasPassword = roomsInWheel[i].HasPassword(); std::string color; switch (roomsInWheel[i].State()) { @@ -309,7 +309,7 @@ void RoomWheel::BuildFromRoomDatas() } itemData->m_color = THEME->GetMetricC(m_sName, color); - if (roomsInWheel[i].GetFlags() % 2) + if (roomsInWheel[i].GetFlags() % 2 || roomsInWheel[i].HasPassword()) itemData->m_color = THEME->GetMetricC(m_sName, "PasswdRoomColor"); } diff --git a/src/RoomWheel.h b/src/RoomWheel.h index 2162bebd3e..2686bc3ddf 100644 --- a/src/RoomWheel.h +++ b/src/RoomWheel.h @@ -13,9 +13,11 @@ class RoomData { void SetDescription(const std::string& desc) { m_description = desc; } void SetState(unsigned int state) { m_state = state; } void SetFlags(unsigned int iFlags) { m_iFlags = iFlags; } + void SetHasPassword(bool pass) { hasPassword = pass; } inline std::string Name() const { return m_name; } inline std::string Description() const { return m_description; } inline unsigned int State() const { return m_state; } + inline bool HasPassword() const { return hasPassword; } inline unsigned int GetFlags() const { return m_iFlags; } RoomData() { m_name=""; m_description=""; m_state=0; m_iFlags=0; } vector players; @@ -24,16 +26,18 @@ class RoomData { std::string m_description; unsigned int m_state; unsigned int m_iFlags; + bool hasPassword{false}; }; struct RoomWheelItemData : public WheelItemBaseData { RoomWheelItemData() = default; - RoomWheelItemData( WheelItemDataType type, const std::string& sTitle, const std::string& sDesc, const RageColor &color ): - WheelItemBaseData( type, sTitle, color ), m_sDesc(sDesc), m_iFlags(0) { }; + RoomWheelItemData( WheelItemDataType type, const std::string& sTitle, const std::string& sDesc, const RageColor &color, const bool hasPass=false): + WheelItemBaseData( type, sTitle, color ), m_sDesc(sDesc), m_iFlags(0), hasPassword(hasPass) { }; std::string m_sDesc; unsigned int m_iFlags{0}; + bool hasPassword{ false }; }; class RoomWheelItem : public WheelItemBase diff --git a/src/ScreenNetRoom.cpp b/src/ScreenNetRoom.cpp index 8193d69a31..2210dcf2be 100644 --- a/src/ScreenNetRoom.cpp +++ b/src/ScreenNetRoom.cpp @@ -148,7 +148,7 @@ void ScreenNetRoom::SelectCurrent() RoomWheelItemData* rwd = dynamic_cast(m_RoomWheel.LastSelected()); if (rwd) { - if (rwd->m_iFlags % 2) + if (rwd->m_iFlags % 2 || rwd->hasPassword) { m_sLastPickedRoom = rwd->m_sText; ScreenTextEntry::TextEntry(SM_BackFromReqPass, ENTER_ROOM_REQPASSWORD, "", 255);