From 4d82763a33944d6db107ce918bf0f6704b3de6ab Mon Sep 17 00:00:00 2001 From: Andrew Livy Date: Thu, 11 Dec 2003 05:23:40 +0000 Subject: [PATCH] Major Pop'n Music Theme Update Themers can now set off a sequence of sound effects via metrics on the Stage Evaluation screen (good for games like beatmania, pop'n and pump that have a series of SFX) --- stepmania/Themes/default/metrics.ini | 76 ++-------------------------- stepmania/src/ScreenEvaluation.cpp | 58 ++++++++++++++++++++- stepmania/src/ScreenEvaluation.h | 13 +++++ 3 files changed, 74 insertions(+), 73 deletions(-) diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index ee2794a06f..04d98d0703 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -1069,15 +1069,6 @@ ShowLifeMeterForDisabledPlayers=1 [ScreenEvaluation] BannerWidth=248 BannerHeight=78 -JudgeSoundTimeMarvelous=-1 -JudgeSoundTimePerfect=-1 -JudgeSoundTimeGreat=-1 -JudgeSoundTimeGood=-1 -JudgeSoundTimeBoo=-1 -JudgeSoundTimeMiss=-1 -JudgeSoundTimeOK=-1 -JudgeSoundTimeMaxCombo=-1 // how long to wait until we play the sound after the screen appears.... -1 means play no sound ever. -JudgeSoundIfJudgeGraphicsFullAlpha=0 // only play the sound if one of the judge graphics for the associated sound are full alpha LargeBannerX=320 LargeBannerY=100 LargeBannerOnCommand=addy,480;sleep,0.0;decelerate,0.3;addy,-480 @@ -1463,15 +1454,9 @@ ShowComboArea=0 ShowFullCombo=0 TimerSeconds=15 StyleIcon=1 -JudgeSoundTimeMarvelous=-1 -JudgeSoundTimePerfect=-1 -JudgeSoundTimeGreat=-1 -JudgeSoundTimeGood=-1 -JudgeSoundTimeBoo=-1 -JudgeSoundTimeMiss=-1 -JudgeSoundTimeOK=-1 -JudgeSoundTimeMaxCombo=-1 -JudgeSoundIfJudgeGraphicsFullAlpha=0 +FailedSoundTime=0 +PassedSoundTime=0 +NumSequenceSounds=0 [ScreenEvaluationSummary] NextScreen=ScreenNameEntry @@ -1500,15 +1485,6 @@ ShowComboArea=0 ShowFullCombo=0 TimerSeconds=30 StyleIcon=1 -JudgeSoundTimeMarvelous=-1 -JudgeSoundTimePerfect=-1 -JudgeSoundTimeGreat=-1 -JudgeSoundTimeGood=-1 -JudgeSoundTimeBoo=-1 -JudgeSoundTimeMiss=-1 -JudgeSoundTimeOK=-1 -JudgeSoundTimeMaxCombo=-1 -JudgeSoundIfJudgeGraphicsFullAlpha=0 [ScreenEvaluationNonstop] NextScreen=ScreenNameEntry @@ -1537,15 +1513,6 @@ ShowComboArea=0 ShowFullCombo=0 TimerSeconds=30 StyleIcon=1 -JudgeSoundTimeMarvelous=-1 -JudgeSoundTimePerfect=-1 -JudgeSoundTimeGreat=-1 -JudgeSoundTimeGood=-1 -JudgeSoundTimeBoo=-1 -JudgeSoundTimeMiss=-1 -JudgeSoundTimeOK=-1 -JudgeSoundTimeMaxCombo=-1 -JudgeSoundIfJudgeGraphicsFullAlpha=0 [ScreenEvaluationOni] NextScreen=ScreenNameEntry @@ -1574,15 +1541,6 @@ ShowComboArea=0 ShowFullCombo=0 TimerSeconds=30 StyleIcon=1 -JudgeSoundTimeMarvelous=-1 -JudgeSoundTimePerfect=-1 -JudgeSoundTimeGreat=-1 -JudgeSoundTimeGood=-1 -JudgeSoundTimeBoo=-1 -JudgeSoundTimeMiss=-1 -JudgeSoundTimeOK=-1 -JudgeSoundTimeMaxCombo=-1 -JudgeSoundIfJudgeGraphicsFullAlpha=0 [ScreenEvaluationEndless] NextScreen=ScreenNameEntry @@ -1611,15 +1569,7 @@ ShowComboArea=0 ShowFullCombo=0 TimerSeconds=30 StyleIcon=1 -JudgeSoundTimeMarvelous=-1 -JudgeSoundTimePerfect=-1 -JudgeSoundTimeGreat=-1 -JudgeSoundTimeGood=-1 -JudgeSoundTimeBoo=-1 -JudgeSoundTimeMiss=-1 -JudgeSoundTimeOK=-1 -JudgeSoundTimeMaxCombo=-1 -JudgeSoundIfJudgeGraphicsFullAlpha=0 + [ScreenEvaluationBattle] NextScreen=ScreenSelectMusic @@ -1648,15 +1598,6 @@ ShowComboArea=0 ShowFullCombo=0 TimerSeconds=15 StyleIcon=1 -JudgeSoundTimeMarvelous=-1 -JudgeSoundTimePerfect=-1 -JudgeSoundTimeGreat=-1 -JudgeSoundTimeGood=-1 -JudgeSoundTimeBoo=-1 -JudgeSoundTimeMiss=-1 -JudgeSoundTimeOK=-1 -JudgeSoundTimeMaxCombo=-1 -JudgeSoundIfJudgeGraphicsFullAlpha=0 [ScreenEvaluationRave] NextScreen=ScreenSelectMusic @@ -1685,15 +1626,6 @@ ShowComboArea=0 ShowFullCombo=0 TimerSeconds=15 StyleIcon=1 -JudgeSoundTimeMarvelous=-1 -JudgeSoundTimePerfect=-1 -JudgeSoundTimeGreat=-1 -JudgeSoundTimeGood=-1 -JudgeSoundTimeBoo=-1 -JudgeSoundTimeMiss=-1 -JudgeSoundTimeOK=-1 -JudgeSoundTimeMaxCombo=-1 -JudgeSoundIfJudgeGraphicsFullAlpha=0 [ScreenMusicScroll] ScrollDelay=0.2 diff --git a/stepmania/src/ScreenEvaluation.cpp b/stepmania/src/ScreenEvaluation.cpp index d2fe0ce2c6..bf9360284c 100644 --- a/stepmania/src/ScreenEvaluation.cpp +++ b/stepmania/src/ScreenEvaluation.cpp @@ -64,6 +64,11 @@ const char* JUDGE_STRING[NUM_JUDGE_LINES] = #define SHOW_FULL_COMBO THEME->GetMetricB(m_sName,"ShowFullCombo") #define GRAPH_START_HEIGHT THEME->GetMetricF(m_sName,"GraphStartHeight") #define TYPE THEME->GetMetric (m_sName,"Type") +#define PASSED_SOUND_TIME THEME->GetMetricF(m_sName,"PassedSoundTime") +#define FAILED_SOUND_TIME THEME->GetMetricF(m_sName,"FailedSoundTime") +#define NUM_SEQUENCE_SOUNDS THEME->GetMetricI(m_sName,"NumSequenceSounds") +#define SOUNDSEQ_TIME( i ) THEME->GetMetricF(m_sName,ssprintf("SoundSeqTime%d", i+1)) +#define SOUNDSEQ_NAME( i ) THEME->GetMetric(m_sName,ssprintf("SoundSeqName%d", i+1)) static const int NUM_SHOWN_RADAR_CATEGORIES = 5; @@ -110,6 +115,7 @@ ScreenEvaluation::ScreenEvaluation( CString sClassName ) : Screen(sClassName) RageException::Throw("Unknown evaluation type \"%s\"", TYPE.c_str() ); int p; + // // Figure out which statistics and songs we're going to display @@ -354,15 +360,33 @@ ScreenEvaluation::ScreenEvaluation( CString sClassName ) : Screen(sClassName) m_Menu.Load( m_sName ); this->AddChild( &m_Menu ); + if(m_Type==stage) + { + int snd=0; + for(snd=0;sndGetPathToS(SOUNDSEQ_NAME(snd),false)); + m_SoundSequences.push_back(temp); + } + } + m_timerSoundSequences.SetZero(); // zero the sound sequence timer + m_timerSoundSequences.Touch(); // set the timer going :] + m_bPassFailTriggered = false; // the sound hasn't been triggered yet if(m_bFailed && m_Type==stage) { m_bgFailedBack.LoadFromAniDir( THEME->GetPathToB("ScreenEvaluationStage Failed Background") ); m_bgFailedOverlay.LoadFromAniDir( THEME->GetPathToB("ScreenEvaluationStage Failed Overlay") ); + m_sndPassFail.Load(THEME->GetPathToS("ScreenEvaluationStage Failed",false)); + // m_sndPassFail.Play(); } else if( m_Type == stage ) { // the themer can use the regular background for passed background m_bgPassedOverlay.LoadFromAniDir( THEME->GetPathToB("ScreenEvaluationStage Passed Overlay") ); + m_sndPassFail.Load(THEME->GetPathToS("ScreenEvaluationStage Passed",false)); + // m_sndPassFail.Play(); } // // init banner area @@ -853,6 +877,7 @@ ScreenEvaluation::ScreenEvaluation( CString sClassName ) : Screen(sClassName) this->SortByZ(); + SOUND->PlayMusic( THEME->GetPathToS("ScreenEvaluation music") ); m_fScreenCreateTime = RageTimer::GetTimeSinceStart(); } @@ -1026,12 +1051,41 @@ void ScreenEvaluation::Update( float fDeltaTime ) if(m_bFailed && m_Type == stage) { + if( m_timerSoundSequences.Ago() > FAILED_SOUND_TIME && !m_bPassFailTriggered ) + { + if(!m_sndPassFail.IsPlaying()) m_sndPassFail.Play(); + m_bPassFailTriggered = true; + } m_bgFailedBack.Update( fDeltaTime ); m_bgFailedOverlay.Update( fDeltaTime ); } - else if (m_Type == stage) + else if (m_Type == stage) // STAGE eval AND passed + { + if( m_timerSoundSequences.Ago() > PASSED_SOUND_TIME && !m_bPassFailTriggered ) + { + if(!m_sndPassFail.IsPlaying()) m_sndPassFail.Play(); + m_bPassFailTriggered = true; + } + m_bgPassedOverlay.Update( fDeltaTime ); + } + if(m_Type == stage) // stage eval ... pass / fail / whatever + { + int snd = 0; + for(snd=0;snd m_SoundSequences[snd].fTime ) + { + m_SoundSequences[snd].fTime = -1; // -1 indicates already started playing + m_SoundSequences[snd].sSound.Play(); + } + } + } + } + for( int p=0; pm_CurStageStats.iBonus[p] == 0) @@ -1120,6 +1174,8 @@ void ScreenEvaluation::HandleScreenMessage( const ScreenMessage SM ) SCREENMAN->SetNewScreen( FAILED_SCREEN ); else SCREENMAN->SetNewScreen( NEXT_SCREEN ); + + if( m_sndPassFail.IsPlaying() ) m_sndPassFail.Stop(); break; case SM_GoToSelectCourse: SCREENMAN->SetNewScreen( "ScreenSelectCourse" ); diff --git a/stepmania/src/ScreenEvaluation.h b/stepmania/src/ScreenEvaluation.h index 1ac00e91f6..f3aa9b0474 100644 --- a/stepmania/src/ScreenEvaluation.h +++ b/stepmania/src/ScreenEvaluation.h @@ -33,6 +33,12 @@ const int MAX_SONGS_TO_SHOW = 5; // In summary, we show last 3 stages, plus extr const int NUM_JUDGE_LINES = 9; // marvelous, perfect, great, good, boo, miss, ok, max_combo, error const int NUM_SCORE_LINES = 2; // score, time +// sound sequences for the evaluation screen +struct EvalSoundSequence +{ + float fTime; + RageSound sSound; +}; class ScreenEvaluation : public Screen { @@ -120,6 +126,13 @@ protected: Sprite m_sprTryExtraStage; AutoActor m_FullCombo[NUM_PLAYERS]; bool m_bFailed; + + // sound effects for other gametypes + + RageSound m_sndPassFail; // sound played if the player passes or fails + bool m_bPassFailTriggered; // has the pass / fail sound been played yet? + RageTimer m_timerSoundSequences; // timer used for triggering sounds. + vector m_SoundSequences; // a sequence of sounds to be played (although they're stored in no particular order!) }; #endif