diff --git a/stepmania/Themes/default/Scripts/Branches.lua b/stepmania/Themes/default/Scripts/Branches.lua index 8ef468273d..e9380efa77 100644 --- a/stepmania/Themes/default/Scripts/Branches.lua +++ b/stepmania/Themes/default/Scripts/Branches.lua @@ -142,10 +142,6 @@ function GetGameplayNextScreen() Trace( " IsExtraStage2 = "..tostring(IsExtraStage2()) ) Trace( " Event mode = "..tostring(IsEventMode()) ) - if GAMESTATE:IsSyncDataChanged() then - return "ScreenSaveSync" - end - if Passed or GAMESTATE:IsCourseMode() or IsExtraStage() or IsExtraStage2() then @@ -207,14 +203,6 @@ function ModeMenuAvailable() return true end -function ScreenGameplaySyncMachineNext() - if GAMESTATE:IsSyncDataChanged() then - return 'ScreenSaveSync' - else - return 'ScreenOptionsService' - end -end - -- (c) 2005 Glenn Maynard, Chris Danford -- All rights reserved. -- diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index c5b6e1ac7e..08c32a29d4 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -4478,11 +4478,6 @@ UseNameBlacklist=0 DefaultSort=Group DefaultSong= -[ScreenSaveSync] -Fallback=ScreenPrompt -Class=ScreenSaveSync -NextScreen=@GetGameplayNextScreen() - [ScreenMiniMenuContext] Fallback=ScreenMiniMenu NumRowsShown=10 @@ -4634,11 +4629,11 @@ Class=ScreenGameplaySyncMachine Fallback=ScreenGameplay PrevScreen=@ScreenGameplaySyncMachineNext() NextScreen=@ScreenGameplaySyncMachineNext() - -[ScreenSaveSyncMachine] -Fallback=ScreenSaveSync -Class=ScreenSaveSync -NextScreen=ScreenOptionsService +LifeP1OnCommand=hidden,1 +LifeP2OnCommand=hidden,1 +ScoreP1OnCommand=hidden,1 +ScoreP2OnCommand=hidden,1 +StageOnCommand=hidden,1 [PlayerScoreItem Percent] Fallback=ScoreDisplayPercentage Percent diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index dbc2b51635..d9018884f9 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -486,9 +486,6 @@ void GameState::BeginStage() void GameState::CancelStage() { m_iNumStagesOfThisSong = 0; - - // If they back out of gameplay, revert any sync changes. - RevertSyncChanges(); } void GameState::CommitStageStats() @@ -1772,8 +1769,10 @@ void GameState::SaveSyncChanges() { if( IsCourseMode() ) return; - GAMESTATE->m_pCurSong->Save(); - PREFSMAN->SavePrefsToDisk(); + if( m_pCurSong && *m_pTimingDataOriginal != m_pCurSong->m_Timing ) + GAMESTATE->m_pCurSong->Save(); + if( m_fGlobalOffsetSecondsOriginal != PREFSMAN->m_fGlobalOffsetSeconds ) + PREFSMAN->SavePrefsToDisk(); ResetOriginalSyncData(); } @@ -1923,7 +1922,6 @@ public: static int GetCoinMode( T* p, lua_State *L ) { lua_pushnumber(L, p->GetCoinMode() ); return 1; } static int GetPremium( T* p, lua_State *L ) { lua_pushnumber(L, p->GetPremium() ); return 1; } static int GetSongOptionsString( T* p, lua_State *L ) { lua_pushstring(L, p->m_SongOptions.GetString() ); return 1; } - static int IsSyncDataChanged( T* p, lua_State *L ) { lua_pushboolean(L, p->IsSyncDataChanged() ); return 1; } static int IsWinner( T* p, lua_State *L ) { PlayerNumber pn = (PlayerNumber)IArg(1); @@ -2038,7 +2036,6 @@ public: ADD_METHOD( GetCoinMode ); ADD_METHOD( GetPremium ); ADD_METHOD( GetSongOptionsString ); - ADD_METHOD( IsSyncDataChanged ); ADD_METHOD( IsWinner ); ADD_METHOD( IsDraw ); ADD_METHOD( IsDisqualified ); diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index e53db336d5..5cfb2b7c56 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -52,16 +52,17 @@ #include "XmlFile.h" #include "Background.h" #include "Foreground.h" +#include "ScreenSaveSync.h" // // Defines // #define SHOW_LIFE_METER_FOR_DISABLED_PLAYERS THEME->GetMetricB(m_sName,"ShowLifeMeterForDisabledPlayers") -#define EVAL_ON_FAIL THEME->GetMetricB(m_sName,"ShowEvaluationOnFail") -#define SHOW_SCORE_IN_RAVE THEME->GetMetricB(m_sName,"ShowScoreInRave") -#define SONG_POSITION_METER_WIDTH THEME->GetMetricF(m_sName,"SongPositionMeterWidth") -#define PLAYER_X( sName, styleType ) THEME->GetMetricF(m_sName,ssprintf("Player%s%sX",sName.c_str(),StyleTypeToString(styleType).c_str())) -#define STOP_COURSE_EARLY THEME->GetMetricB(m_sName,"StopCourseEarly") // evaluate this every time it's used +#define EVAL_ON_FAIL THEME->GetMetricB(m_sName,"ShowEvaluationOnFail") +#define SHOW_SCORE_IN_RAVE THEME->GetMetricB(m_sName,"ShowScoreInRave") +#define SONG_POSITION_METER_WIDTH THEME->GetMetricF(m_sName,"SongPositionMeterWidth") +#define PLAYER_X( sName, styleType ) THEME->GetMetricF(m_sName,ssprintf("Player%s%sX",sName.c_str(),StyleTypeToString(styleType).c_str())) +#define STOP_COURSE_EARLY THEME->GetMetricB(m_sName,"StopCourseEarly") // evaluate this every time it's used static ThemeMetric INITIAL_BACKGROUND_BRIGHTNESS ("ScreenGameplay","InitialBackgroundBrightness"); static ThemeMetric SECONDS_BETWEEN_COMMENTS ("ScreenGameplay","SecondsBetweenComments"); @@ -72,15 +73,15 @@ AutoScreenMessage( SM_PlayGo ) AutoScreenMessage( SM_LoadNextSong ) AutoScreenMessage( SM_StartLoadingNextSong ) - // received while STATE_OUTRO -AutoScreenMessage( SM_GoToScreenAfterBack ) +AutoScreenMessage( SM_DoPrevScreen ) +AutoScreenMessage( SM_DoNextScreen ) // received while STATE_INTRO AutoScreenMessage( SM_StartHereWeGo ) AutoScreenMessage( SM_StopHereWeGo ) -static Preference g_fNetStartOffset( "NetworkStartOffset", -3.0 ); +static Preference g_fNetStartOffset( "NetworkStartOffset", -3.0 ); PlayerInfo::PlayerInfo() @@ -2075,7 +2076,7 @@ void ScreenGameplay::BeginBackingOutFromGameplay() if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() ) SCREENMAN->PostMessageToTopScreen( SM_BeginFailed, 0 ); else - m_Cancel.StartTransitioning( SM_GoToScreenAfterBack ); + m_Cancel.StartTransitioning( SM_DoPrevScreen ); } void ScreenGameplay::AbortGiveUp( bool bShowText ) @@ -2400,7 +2401,7 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) TweenOffScreen(); - m_Out.StartTransitioning( SM_GoToNextScreen ); + m_Out.StartTransitioning( SM_DoNextScreen ); // do they deserve an extra stage? if( GAMESTATE->HasEarnedExtraStage() ) @@ -2491,20 +2492,28 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) int iDamageLevel = SM-SM_BattleDamageLevel1+1; PlayAnnouncer( ssprintf("gameplay battle damage level%d",iDamageLevel), 3 ); } - else if( SM == SM_GoToScreenAfterBack ) + else if( SM == SM_DoPrevScreen ) { SongFinished(); StageFinished( true ); GAMESTATE->CancelStage(); - HandleScreenMessage( SM_GoToPrevScreen ); + if( GAMESTATE->IsSyncDataChanged() ) + ScreenSaveSync::PromptSaveSync( SM_GoToPrevScreen ); + else + HandleScreenMessage( SM_GoToPrevScreen ); } - else if( SM == SM_GoToNextScreen ) + else if( SM == SM_DoNextScreen ) { SongFinished(); StageFinished( false ); //SaveRecordedResults(); + + if( GAMESTATE->IsSyncDataChanged() ) + ScreenSaveSync::PromptSaveSync( SM_GoToNextScreen ); + else + HandleScreenMessage( SM_GoToNextScreen ); } else if( SM == SM_GainFocus ) { @@ -2523,7 +2532,7 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) m_pSoundMusic->StopPlaying(); m_soundAssistTick.StopPlaying(); /* Stop any queued assist ticks. */ TweenOffScreen(); - m_Failed.StartTransitioning( SM_GoToNextScreen ); + m_Failed.StartTransitioning( SM_DoNextScreen ); // show the survive time if extra stage if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() ) diff --git a/stepmania/src/ScreenGameplaySyncMachine.cpp b/stepmania/src/ScreenGameplaySyncMachine.cpp index 2d8b9040c0..c16df89538 100644 --- a/stepmania/src/ScreenGameplaySyncMachine.cpp +++ b/stepmania/src/ScreenGameplaySyncMachine.cpp @@ -11,7 +11,8 @@ void ScreenGameplaySyncMachine::Init() { GAMESTATE->m_PlayMode.Set( PLAY_MODE_REGULAR ); GAMESTATE->m_pCurStyle.Set( GAMEMAN->GetHowToPlayStyleForGame(GAMESTATE->m_pCurGame) ); - + GAMESTATE->ResetOriginalSyncData(); + SMLoader ld; RString sFile = THEME->GetPathO("ScreenGameplaySyncMachine","music.sm"); ld.LoadFromSMFile( sFile, m_Song ); @@ -42,7 +43,10 @@ void ScreenGameplaySyncMachine::HandleScreenMessage( const ScreenMessage SM ) ResetAndRestartCurrentSong(); return; // handled } - else if( SM == SM_GoToPrevScreen ) + + ScreenGameplayNormal::HandleScreenMessage( SM ); + + if( SM == SM_GoToPrevScreen ) { GAMESTATE->m_pCurSong.Set( NULL ); } @@ -50,8 +54,6 @@ void ScreenGameplaySyncMachine::HandleScreenMessage( const ScreenMessage SM ) { GAMESTATE->m_pCurSong.Set( NULL ); } - - ScreenGameplayNormal::HandleScreenMessage( SM ); } void ScreenGameplaySyncMachine::ResetAndRestartCurrentSong() diff --git a/stepmania/src/ScreenSaveSync.cpp b/stepmania/src/ScreenSaveSync.cpp index f9ae675753..651b866bff 100644 --- a/stepmania/src/ScreenSaveSync.cpp +++ b/stepmania/src/ScreenSaveSync.cpp @@ -117,7 +117,6 @@ static void RevertSyncChanges( void* pThrowAway ) GAMESTATE->RevertSyncChanges(); } -REGISTER_SCREEN_CLASS( ScreenSaveSync ); void ScreenSaveSync::Init() { ScreenPrompt::Init(); @@ -131,10 +130,10 @@ void ScreenSaveSync::Init() NULL ); } -void ScreenSaveSync::PromptSaveSync() +void ScreenSaveSync::PromptSaveSync( ScreenMessage sm ) { ScreenPrompt::Prompt( - SM_None, + sm, GetPromptText(), PROMPT_YES_NO, ANSWER_YES, diff --git a/stepmania/src/ScreenSaveSync.h b/stepmania/src/ScreenSaveSync.h index c5af483f58..5d7e6b34ad 100644 --- a/stepmania/src/ScreenSaveSync.h +++ b/stepmania/src/ScreenSaveSync.h @@ -10,7 +10,7 @@ class ScreenSaveSync : public ScreenPrompt public: virtual void Init(); - static void PromptSaveSync(); + static void PromptSaveSync( ScreenMessage sm = SM_None ); };