diff --git a/Docs/Changelog_language.txt b/Docs/Changelog_language.txt index 94cfe15564..f8a1144beb 100644 --- a/Docs/Changelog_language.txt +++ b/Docs/Changelog_language.txt @@ -16,6 +16,13 @@ Example: This means that three strings were added to the "ScreenDebugOverlay" section, "Mute actions", "Mute actions on", and "Mute actions off". +2016/06/24 +---------- +* [OptionNames] Double Tap +* [OptionTitles] AllowHoldForOptions +* [OptionExplanations] AllowHoldForOptions +* [ScreenGameplay] GiveUpSelectText + 2016/01/18 ---------- * [ScreenEdit] Clear timing in region diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index d315216d73..276555ffd8 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -4,6 +4,35 @@ The StepMania 5 Changelog covers all post-sm-ssc changes. For a list of changes from StepMania 4 alpha 5 to sm-ssc v1.2.5, see Changelog_sm-ssc.txt. ________________________________________________________________________________ +2016/06/24 +---------- +* [SelectMusic] Added AllowHoldForOptions preference to disable holding start + to go to the player options screen. [kyzentun] +* [General] Back button will only back out of the screen on a press, not when + it is still being held from the previous screen. [kyzentun] + +2016/06/12 +---------- +* [ScreenSyncOverlay] Moved actors to lua to make them themable. [kyzentun] + +2016/06/09 +---------- +* [Gameplay] Ready and Go announcer sounds no longer play simultaneously. If + the Ready animation doesn't exist and the Go animation exists, only the + Go announcer sound is played. If neither animation exists, only the Ready + announcer sound is played. [kyzentun] + +2016/06/07 +---------- +* [NotesWriterSM] Stops, delays, and warps that occur on the same row are now + summed correctly. Fixes bug that deleted warps that were on the same row + as a stop. [kyzentun] +* [Sound] Ignore invalid SoundDriver preference. [kyzentun] + +2016/06/06 +---------- +* [Language] Traditional Chinese translation added. [ddrtime] + 2016/05/25 ---------- * [MemoryCards] Fixed bug that caused loading profiles from usb drives to diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index 6787e2ab1a..8e2dffe82b 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -342,6 +342,7 @@ Not Supported=Mode not supported while networked. [OptionExplanations] Accel=Accelerate, Decelerate or otherwise adjust the arrow speed. AllowExtraStage=When enabled (and Event Mode isn't on), allows the player to earn extra stages after completing certain requirements. +AllowHoldForOptions=If set to double tap, holding start when selecting a song will not go to the options screen. AllowSongDeletion=Allow players to permanently delete songs from the system by pressing Ctrl+Backspace when browsing the music wheel. AllowW1=Enable or disable fantastic judgement. NEVER - never show Fantastic, COURSES ONLY - only during nonstop/oni modes, ALWAYS - all modes of play. AllowMultipleHighScoreWithSameName=If turned off, only the highest score with a given name will be saved. If turned on, it will allow mutliple high scores with a given name to be saved. @@ -747,6 +748,7 @@ Distant=Distant Dizzy=Dizzy Don'tSave=Don't Save Double for 1 Credit=Double for 1 Credit +Double Tap=Double Tap Drunk=Drunk Dynamic Random=Dynamic Random Echo=Echo @@ -945,6 +947,7 @@ Add Mod=Add Mod Air=Air All timing=All timing AllowExtraStage=Allow Extra Stage +AllowHoldForOptions=Allow Hold For Options AllowSongDeletion=Allow Song Deletion AllowW1=Fantastic Timing AllowMultipleHighScoreWithSameName=Competitive Mode diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index cbe5a4e44b..688f731aab 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -3133,10 +3133,11 @@ Line14="conf,ShowSongOptions" Fallback="ScreenOptionsServiceChild" NextScreen="ScreenOptionsService" PrevScreen="ScreenOptionsService" -LineNames="1,2,3,4,5,6,7,8" +LineNames="1,2,3,AH,4,5,6,7,8" Line1="conf,AutoMapOnJoyChange" Line2="conf,OnlyDedicatedMenuButtons" Line3="conf,DelayedBack" +LineAH="conf,AllowHoldForOptions" Line4="conf,ArcadeOptionsNavigation" Line5="conf,ThreeKeyNavigation" Line6="conf,MusicWheelSwitchSpeed" @@ -3464,6 +3465,7 @@ PlayerInitCommand=y,SCREEN_CENTER_Y;zoom,(THEME:GetMetric("Common","ScreenHeight StartGivesUp=true BackGivesUp=false GiveUpSeconds=2.5 +UsePauseMenuInsteadOfGiveUp=false # rage AllowCenter1Player=true # diff --git a/Themes/default/Graphics/pause_menu.lua b/Themes/default/Graphics/pause_menu.lua index f754aab876..b641ff258f 100644 --- a/Themes/default/Graphics/pause_menu.lua +++ b/Themes/default/Graphics/pause_menu.lua @@ -1,6 +1,13 @@ gameplay_pause_count= 0 course_stopped_by_pause_menu= false +local prompt_text= { + Start= THEME:GetString("ScreenGameplay", "GiveUpStartText"), + Select= THEME:GetString("ScreenGameplay", "GiveUpSelectText"), + Back= THEME:GetString("ScreenGameplay", "GiveUpBackText"), +} +local prompt_actor= false + local pause_buttons= {Start= false, Select= true, Back= true} local pause_double_tap_time= 1 local tap_debounce_time= .1 @@ -178,13 +185,18 @@ local function pause_and_show(pn) old_fg_visible= fg:GetVisible() fg:visible(false) end - local prompt_text= screen_gameplay:GetChild("Debug") - if prompt_text then - prompt_text:playcommand("TweenOff") - end + prompt_actor:playcommand("Hide") show_menu(pn) end +local function show_prompt(button) + prompt_actor:playcommand("Show", {text= prompt_text[button]}) +end + +local function hide_prompt() + prompt_actor:playcommand("Hide") +end + local function input(event) local pn= event.PlayerNumber if not enabled_players[pn] then return end @@ -222,13 +234,16 @@ local function input(event) if time_since_press <= pause_double_tap_time then pause_and_show(pn) else + show_prompt(button) pause_press_times[pn]= GetTimeSinceStart() end end else + show_prompt(button) pause_press_times[pn]= GetTimeSinceStart() end else + hide_prompt() pause_press_times[pn]= nil end end @@ -239,6 +254,18 @@ local frame= Def.ActorFrame{ screen_gameplay= SCREENMAN:GetTopScreen() screen_gameplay:AddInputCallback(input) end, + Def.BitmapText{ + Font= "Common Normal", InitCommand= function(self) + prompt_actor= self + self:xy(_screen.cx, _screen.h*.75):zoom(.75):diffusealpha(0) + end, + ShowCommand= function(self, param) + self:stoptweening():settext(param.text):accelerate(.25):diffusealpha(1) + end, + HideCommand= function(self) + self:stoptweening():decelerate(.25):diffusealpha(0) + end, + }, } for i, pn in ipairs(GAMESTATE:GetEnabledPlayers()) do diff --git a/Themes/default/Languages/en.ini b/Themes/default/Languages/en.ini index 503e122ed9..c279c97903 100644 --- a/Themes/default/Languages/en.ini +++ b/Themes/default/Languages/en.ini @@ -85,8 +85,8 @@ HelpText= [ScreenGameplay] GiveUpAbortedText= GiveUpStartText=Double tap &START; to access menu +GiveUpSelectText=Double tap &SELECT; to access menu GiveUpBackText=Double tap &BACK; to access menu -SkipSongText=Double tap &SELECT; to access menu HelpText= [PauseMenu] diff --git a/Themes/default/metrics.ini b/Themes/default/metrics.ini index 40dc94418b..9a38121582 100644 --- a/Themes/default/metrics.ini +++ b/Themes/default/metrics.ini @@ -1424,6 +1424,7 @@ HelpOnCommand=visible,false # 05 # C [ScreenGameplay] +UsePauseMenuInsteadOfGiveUp=true # SongMeterDisplayX=SCREEN_CENTER_X SongMeterDisplayY=SCREEN_TOP+50 diff --git a/src/PrefsManager.cpp b/src/PrefsManager.cpp index f3824a3a43..0c8f2596f9 100644 --- a/src/PrefsManager.cpp +++ b/src/PrefsManager.cpp @@ -211,6 +211,7 @@ PrefsManager::PrefsManager() : m_bMercifulBeginner ( "MercifulBeginner", false ), m_bMercifulSuperMeter ( "MercifulSuperMeter", true ), m_bDelayedBack ( "DelayedBack", true ), + m_AllowHoldForOptions("AllowHoldForOptions", true), m_bShowInstructions ( "ShowInstructions", true ), m_bShowCaution ( "ShowCaution", true ), m_bShowNativeLanguage ( "ShowNativeLanguage", true ), diff --git a/src/PrefsManager.h b/src/PrefsManager.h index 41e016fe9b..bd952e2df3 100644 --- a/src/PrefsManager.h +++ b/src/PrefsManager.h @@ -203,6 +203,7 @@ public: Preference m_bMercifulBeginner; // don't subtract from percent score or grade DP, larger W5 window Preference m_bMercifulSuperMeter; // negative super deltas are scaled by the players life percentage Preference m_bDelayedBack; + Preference m_AllowHoldForOptions; Preference m_bShowInstructions; // how to play a mode Preference m_bShowCaution; Preference m_bShowNativeLanguage; diff --git a/src/Screen.cpp b/src/Screen.cpp index c3910009c5..f52ec27d74 100644 --- a/src/Screen.cpp +++ b/src/Screen.cpp @@ -213,8 +213,10 @@ bool Screen::Input( const InputEventPlus &input ) case GAME_BUTTON_MENULEFT: return this->MenuLeft ( input ); case GAME_BUTTON_MENURIGHT: return this->MenuRight( input ); case GAME_BUTTON_BACK: - // Don't make the user hold the back button if they're pressing escape and escape is the back button. - if( !PREFSMAN->m_bDelayedBack || input.type==IET_REPEAT || (input.DeviceI.device == DEVICE_KEYBOARD && input.DeviceI.button == KEY_ESC) ) + // Only go back on first press. If somebody is backing out of the + // options screen, they might still be holding it when select music + // appears, and accidentally back out of that too. -Kyz + if(input.type == IET_FIRST_PRESS) { if( HANDLE_BACK_BUTTON ) return this->MenuBack( input ); diff --git a/src/ScreenGameplay.cpp b/src/ScreenGameplay.cpp index 9ae5fee2a7..91adcc9aef 100644 --- a/src/ScreenGameplay.cpp +++ b/src/ScreenGameplay.cpp @@ -67,6 +67,7 @@ #define SHOW_SCORE_IN_RAVE THEME->GetMetricB(m_sName,"ShowScoreInRave") #define SONG_POSITION_METER_WIDTH THEME->GetMetricF(m_sName,"SongPositionMeterWidth") #define STOP_COURSE_EARLY THEME->GetMetricB(m_sName,"StopCourseEarly") // evaluate this every time it's used +#define USE_PAUSE_MENU_INSTEAD_OF_GIVE_UP THEME->GetMetricB(m_sName, "UsePauseMenuInsteadOfGiveUp") static ThemeMetric INITIAL_BACKGROUND_BRIGHTNESS ("ScreenGameplay","InitialBackgroundBrightness"); static ThemeMetric SECONDS_BETWEEN_COMMENTS ("ScreenGameplay","SecondsBetweenComments"); @@ -904,6 +905,8 @@ void ScreenGameplay::Init() m_GiveUpTimer.SetZero(); m_SkipSongTimer.SetZero(); + m_gave_up= false; + m_skipped_song= false; } bool ScreenGameplay::Center1Player() const @@ -1933,9 +1936,13 @@ void ScreenGameplay::Update( float fDeltaTime ) } // update give up - bool bGiveUpTimerFired = !m_GiveUpTimer.IsZero() && m_GiveUpTimer.Ago() > GIVE_UP_SECONDS; - m_gave_up= bGiveUpTimerFired; - m_skipped_song= !m_SkipSongTimer.IsZero() && m_SkipSongTimer.Ago() > GIVE_UP_SECONDS; + bool bGiveUpTimerFired = false; + if(!USE_PAUSE_MENU_INSTEAD_OF_GIVE_UP) + { + bGiveUpTimerFired= !m_GiveUpTimer.IsZero() && m_GiveUpTimer.Ago() > GIVE_UP_SECONDS; + m_gave_up= bGiveUpTimerFired; + m_skipped_song= !m_SkipSongTimer.IsZero() && m_SkipSongTimer.Ago() > GIVE_UP_SECONDS; + } bool bAllHumanHaveBigMissCombo = true; @@ -2444,7 +2451,7 @@ bool ScreenGameplay::Input( const InputEventPlus &input ) return false; } - if( m_DancingState != STATE_OUTRO && + if(!USE_PAUSE_MENU_INSTEAD_OF_GIVE_UP && m_DancingState != STATE_OUTRO && GAMESTATE->IsHumanPlayer(input.pn) && !m_Cancel.IsTransitioning() ) { diff --git a/src/ScreenOptionsMasterPrefs.cpp b/src/ScreenOptionsMasterPrefs.cpp index 98d3efbca9..2ed8bcc8f7 100644 --- a/src/ScreenOptionsMasterPrefs.cpp +++ b/src/ScreenOptionsMasterPrefs.cpp @@ -783,6 +783,7 @@ static void InitializeConfOptions() ADD( ConfOption( "OnlyDedicatedMenuButtons", MovePref, "Use Gameplay Buttons","Only Dedicated Buttons" ) ); ADD( ConfOption( "AutoPlay", MovePref, "Off","On","CPU-Controlled" ) ); ADD( ConfOption( "DelayedBack", MovePref, "Instant","Hold" ) ); + ADD( ConfOption( "AllowHoldForOptions", MovePref, "Double Tap", "Hold")); ADD( ConfOption( "ArcadeOptionsNavigation", MovePref, "StepMania Style","Arcade Style" ) ); ADD( ConfOption( "ThreeKeyNavigation", MovePref, "Five Key Menu", "Three Key Menu" ) ); ADD( ConfOption( "MusicWheelSwitchSpeed", MusicWheelSwitchSpeed, "Slow","Normal","Fast","Really Fast" ) ); diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp index a69e841570..d74ef75aa7 100644 --- a/src/ScreenSelectMusic.cpp +++ b/src/ScreenSelectMusic.cpp @@ -1517,7 +1517,10 @@ bool ScreenSelectMusic::MenuStart( const InputEventPlus &input ) * hit accidentally. Accept an initial START right away, though, * so we don't ignore deliberate fast presses (which would be * annoying). */ - this->PostScreenMessage( SM_AllowOptionsMenuRepeat, 0.5f ); + if(PREFSMAN->m_AllowHoldForOptions.Get()) + { + this->PostScreenMessage( SM_AllowOptionsMenuRepeat, 0.5f ); + } StartTransitioningScreen( SM_None ); float fTime = max( SHOW_OPTIONS_MESSAGE_SECONDS, this->GetTweenTimeLeft() );