From 47bf1ef19085750959985388f919b1fd45349813 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Mon, 16 Feb 2004 05:29:33 +0000 Subject: [PATCH] simplify announcer handling --- stepmania/src/ScreenGameplay.cpp | 255 +++++++++---------------------- stepmania/src/ScreenGameplay.h | 33 +--- 2 files changed, 76 insertions(+), 212 deletions(-) diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index 61facffb08..b5562ceb6f 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -715,47 +715,14 @@ ScreenGameplay::ScreenGameplay( CString sName, bool bDemonstration ) : Screen(sN if( !bDemonstration ) // only load if we're going to use it { - m_soundOniDie.Load( THEME->GetPathToS("ScreenGameplay oni die") ); - m_announcerReady.Load( ANNOUNCER->GetPathTo("gameplay ready"), 1 ); - if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() ) - m_announcerHereWeGo.Load( ANNOUNCER->GetPathTo("gameplay here we go extra"), 1 ); - else if( GAMESTATE->IsFinalStage() ) - m_announcerHereWeGo.Load( ANNOUNCER->GetPathTo("gameplay here we go final"), 1 ); - else - m_announcerHereWeGo.Load( ANNOUNCER->GetPathTo("gameplay here we go normal"), 1 ); - m_announcerDanger.Load( ANNOUNCER->GetPathTo("gameplay comment danger") ); - m_announcerGood.Load( ANNOUNCER->GetPathTo("gameplay comment good") ); - m_announcerHot.Load( ANNOUNCER->GetPathTo("gameplay comment hot") ); - m_announcerOni.Load( ANNOUNCER->GetPathTo("gameplay comment oni") ); - - m_announcer100Combo.Load( ANNOUNCER->GetPathTo("gameplay 100 combo") ); - m_announcer200Combo.Load( ANNOUNCER->GetPathTo("gameplay 200 combo") ); - m_announcer300Combo.Load( ANNOUNCER->GetPathTo("gameplay 300 combo") ); - m_announcer400Combo.Load( ANNOUNCER->GetPathTo("gameplay 400 combo") ); - m_announcer500Combo.Load( ANNOUNCER->GetPathTo("gameplay 500 combo") ); - m_announcer600Combo.Load( ANNOUNCER->GetPathTo("gameplay 600 combo") ); - m_announcer700Combo.Load( ANNOUNCER->GetPathTo("gameplay 700 combo") ); - m_announcer800Combo.Load( ANNOUNCER->GetPathTo("gameplay 800 combo") ); - m_announcer900Combo.Load( ANNOUNCER->GetPathTo("gameplay 900 combo") ); - m_announcer1000Combo.Load( ANNOUNCER->GetPathTo("gameplay 1000 combo") ); - m_announcerComboStopped.Load( ANNOUNCER->GetPathTo("gameplay combo stopped") ); - m_announcerComboContinuing.Load(ANNOUNCER->GetPathTo("gameplay combo overflow") ); - m_soundAssistTick.Load( THEME->GetPathToS("ScreenGameplay assist tick") ); + m_soundAssistTick.Load( THEME->GetPathToS("ScreenGameplay assist tick"), true ); switch( GAMESTATE->m_PlayMode ) { case PLAY_MODE_BATTLE: - m_announcerBattleTrickLevel1.Load( ANNOUNCER->GetPathTo("gameplay battle trick level1") ); - m_announcerBattleTrickLevel2.Load( ANNOUNCER->GetPathTo("gameplay battle trick level2") ); - m_announcerBattleTrickLevel3.Load( ANNOUNCER->GetPathTo("gameplay battle trick level3") ); m_soundBattleTrickLevel1.Load( THEME->GetPathToS("ScreenGameplay battle trick level1"), true ); m_soundBattleTrickLevel2.Load( THEME->GetPathToS("ScreenGameplay battle trick level2"), true ); m_soundBattleTrickLevel3.Load( THEME->GetPathToS("ScreenGameplay battle trick level3"), true ); - m_announcerBattleDamageLevel1.Load( ANNOUNCER->GetPathTo("gameplay battle damage level1") ); - m_announcerBattleDamageLevel2.Load( ANNOUNCER->GetPathTo("gameplay battle damage level2") ); - m_announcerBattleDamageLevel3.Load( ANNOUNCER->GetPathTo("gameplay battle damage level3") ); - // HACK: Load incorrect directory on purpose for now. - m_announcerBattleDie.Load( ANNOUNCER->GetPathTo("gameplay battle damage level3") ); break; } } @@ -1026,7 +993,7 @@ void ScreenGameplay::LoadNextSong() m_Foreground.LoadFromSong( GAMESTATE->m_pCurSong ); - m_fTimeLeftBeforeDancingComment = GAMESTATE->m_pCurSong->m_fFirstBeat + SECONDS_BETWEEN_COMMENTS; + m_fTimeSinceLastDancingComment = 0; /* m_soundMusic and m_Background take a very long time to load, @@ -1104,6 +1071,28 @@ void ScreenGameplay::PlayTicks() } } +/* Play announcer "type" if it's been at least fSeconds since the last announcer. */ +void ScreenGameplay::PlayAnnouncer( CString type, float fSeconds ) +{ + if( GAMESTATE->m_fOpponentHealthPercent == 0 ) + return; // Shut the announcer up + + /* Don't play before the first beat, or after we're finished. */ + if( m_DancingState != STATE_DANCING ) + return; + if( GAMESTATE->m_fSongBeat < GAMESTATE->m_pCurSong->m_fFirstBeat ) + return; + + + if( m_fTimeSinceLastDancingComment < fSeconds ) + return; + m_fTimeSinceLastDancingComment = 0; + + SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo(type) ); + + if( m_pCombinedLifeMeter ) + m_pCombinedLifeMeter->OnTaunt(); +} void ScreenGameplay::Update( float fDeltaTime ) { @@ -1251,33 +1240,8 @@ void ScreenGameplay::Update( float fDeltaTime ) if( GAMESTATE->m_fOpponentHealthPercent == 0 ) { - - // HACK: Shut the announcer up - m_announcerReady.UnloadAll(); - m_announcerHereWeGo.UnloadAll(); - m_announcerDanger.UnloadAll(); - m_announcerGood.UnloadAll(); - m_announcerHot.UnloadAll(); - m_announcerOni.UnloadAll(); - m_announcer100Combo.UnloadAll(); - m_announcer200Combo.UnloadAll(); - m_announcer300Combo.UnloadAll(); - m_announcer400Combo.UnloadAll(); - m_announcer500Combo.UnloadAll(); - m_announcer600Combo.UnloadAll(); - m_announcer700Combo.UnloadAll(); - m_announcer800Combo.UnloadAll(); - m_announcer900Combo.UnloadAll(); - m_announcer1000Combo.UnloadAll(); - m_announcerComboStopped.UnloadAll(); - m_announcerBattleTrickLevel1.UnloadAll(); - m_announcerBattleTrickLevel2.UnloadAll(); - m_announcerBattleTrickLevel3.UnloadAll(); - m_announcerBattleDamageLevel1.UnloadAll(); - m_announcerBattleDamageLevel2.UnloadAll(); - m_announcerBattleDamageLevel3.UnloadAll(); - - m_announcerBattleDie.PlayRandom(); + // HACK: Load incorrect directory on purpose for now. + PlayAnnouncer( "gameplay battle damage level3", 0 ); GAMESTATE->RemoveAllActiveAttacks(); @@ -1285,7 +1249,7 @@ void ScreenGameplay::Update( float fDeltaTime ) { if( GAMESTATE->IsCpuPlayer(p) ) { - m_soundOniDie.PlayRandom(); + SOUND->PlayOnceFromDir( THEME->GetPathToS("ScreenGameplay oni die") ); ShowOniGameOver((PlayerNumber)p); m_Player[p].Init(); // remove all notes and scoring m_Player[p].FadeToFail(); // tell the NoteField to fade to white @@ -1297,32 +1261,27 @@ void ScreenGameplay::Update( float fDeltaTime ) // // Check to see if it's time to play a ScreenGameplay comment // - m_fTimeLeftBeforeDancingComment -= fDeltaTime; - if( m_fTimeLeftBeforeDancingComment <= 0 ) + m_fTimeSinceLastDancingComment += fDeltaTime; + + switch( GAMESTATE->m_PlayMode ) { - switch( GAMESTATE->m_PlayMode ) - { - case PLAY_MODE_ARCADE: - case PLAY_MODE_BATTLE: - case PLAY_MODE_RAVE: - if( GAMESTATE->OneIsHot() ) - m_announcerHot.PlayRandom(); - else if( GAMESTATE->AllAreInDangerOrWorse() ) - m_announcerDanger.PlayRandom(); - else - m_announcerGood.PlayRandom(); - if( m_pCombinedLifeMeter ) - m_pCombinedLifeMeter->OnTaunt(); - break; - case PLAY_MODE_NONSTOP: - case PLAY_MODE_ONI: - case PLAY_MODE_ENDLESS: - m_announcerOni.PlayRandom(); - break; - default: - ASSERT(0); - } - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; // reset for the next comment + case PLAY_MODE_ARCADE: + case PLAY_MODE_BATTLE: + case PLAY_MODE_RAVE: + if( GAMESTATE->OneIsHot() ) + PlayAnnouncer( "gameplay comment hot", SECONDS_BETWEEN_COMMENTS ); + else if( GAMESTATE->AllAreInDangerOrWorse() ) + PlayAnnouncer( "gameplay comment danger", SECONDS_BETWEEN_COMMENTS ); + else + PlayAnnouncer( "gameplay comment good", SECONDS_BETWEEN_COMMENTS ); + break; + case PLAY_MODE_NONSTOP: + case PLAY_MODE_ONI: + case PLAY_MODE_ENDLESS: + PlayAnnouncer( "gameplay comment oni", SECONDS_BETWEEN_COMMENTS ); + break; + default: + ASSERT(0); } } @@ -1441,7 +1400,7 @@ void ScreenGameplay::UpdateCheckFail() if( !g_CurStageStats.AllFailedEarlier() ) // if not the last one to fail { // kill them! - m_soundOniDie.PlayRandom(); + SOUND->PlayOnceFromDir( THEME->GetPathToS("ScreenGameplay oni die") ); ShowOniGameOver((PlayerNumber)pn); m_Player[pn].Init(); // remove all notes and scoring m_Player[pn].FadeToFail(); // tell the NoteField to fade to white @@ -1865,12 +1824,18 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) { case SM_PlayReady: m_Background.FadeIn(); - m_announcerReady.PlayRandom(); + SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("gameplay ready") ); m_Ready.StartTransitioning( SM_PlayGo ); break; case SM_PlayGo: - m_announcerHereWeGo.PlayRandom(); + if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() ) + SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("gameplay here we go extra") ); + else if( GAMESTATE->IsFinalStage() ) + SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("gameplay here we go final") ); + else + SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("gameplay here we go normal") ); + m_Go.StartTransitioning( SM_None ); GAMESTATE->m_bPastHereWeGo = true; m_DancingState = STATE_DANCING; // STATE CHANGE! Now the user is allowed to press Back @@ -2036,134 +2001,62 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) #define SECS_SINCE_LAST_COMMENT (SECONDS_BETWEEN_COMMENTS-m_fTimeLeftBeforeDancingComment) case SM_100Combo: - if( SECS_SINCE_LAST_COMMENT > 2 ) - { - m_announcer100Combo.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay 100 combo", 2 ); break; case SM_200Combo: - if( SECS_SINCE_LAST_COMMENT > 2 ) - { - m_announcer200Combo.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay 200 combo", 2 ); break; case SM_300Combo: - if( SECS_SINCE_LAST_COMMENT > 2 ) - { - m_announcer300Combo.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay 300 combo", 2 ); break; case SM_400Combo: - if( SECS_SINCE_LAST_COMMENT > 2 ) - { - m_announcer400Combo.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay 400 combo", 2 ); break; case SM_500Combo: - if( SECS_SINCE_LAST_COMMENT > 2 ) - { - m_announcer500Combo.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay 500 combo", 2 ); break; case SM_600Combo: - if( SECS_SINCE_LAST_COMMENT > 2 ) - { - m_announcer600Combo.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay 600 combo", 2 ); break; case SM_700Combo: - if( SECS_SINCE_LAST_COMMENT > 2 ) - { - m_announcer700Combo.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay 700 combo", 2 ); break; case SM_800Combo: - if( SECS_SINCE_LAST_COMMENT > 2 ) - { - m_announcer800Combo.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay 800 combo", 2 ); break; case SM_900Combo: - if( SECS_SINCE_LAST_COMMENT > 2 ) - { - m_announcer900Combo.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay 900 combo", 2 ); break; case SM_1000Combo: - if( SECS_SINCE_LAST_COMMENT > 2 ) - { - m_announcer1000Combo.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay 1000 combo", 2 ); break; case SM_ComboStopped: - if( SECS_SINCE_LAST_COMMENT > 2 ) - { - m_announcerComboStopped.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay combo stopped", 2 ); break; case SM_ComboContinuing: - if( SECS_SINCE_LAST_COMMENT > 2 ) - { - m_announcerComboContinuing.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay combo overflow", 2 ); break; case SM_BattleTrickLevel1: - if( SECS_SINCE_LAST_COMMENT > 3 ) - { - m_announcerBattleTrickLevel1.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay battle trick level1", 3 ); m_soundBattleTrickLevel1.Play(); break; case SM_BattleTrickLevel2: - if( SECS_SINCE_LAST_COMMENT > 3 ) - { - m_announcerBattleTrickLevel2.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay battle trick level2", 3 ); m_soundBattleTrickLevel2.Play(); break; case SM_BattleTrickLevel3: - if( SECS_SINCE_LAST_COMMENT > 3 ) - { - m_announcerBattleTrickLevel3.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay battle trick level3", 3 ); m_soundBattleTrickLevel3.Play(); break; case SM_BattleDamageLevel1: - if( SECS_SINCE_LAST_COMMENT > 3 ) - { - m_announcerBattleDamageLevel1.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay battle damage level1", 3 ); break; case SM_BattleDamageLevel2: - if( SECS_SINCE_LAST_COMMENT > 3 ) - { - m_announcerBattleDamageLevel2.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay battle damage level2", 3 ); break; case SM_BattleDamageLevel3: - if( SECS_SINCE_LAST_COMMENT > 3 ) - { - m_announcerBattleDamageLevel3.PlayRandom(); - m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; - } + PlayAnnouncer( "gameplay battle damage level3", 3 ); break; case SM_SaveChangedBeforeGoingBack: diff --git a/stepmania/src/ScreenGameplay.h b/stepmania/src/ScreenGameplay.h index db69609b15..d4de09387c 100644 --- a/stepmania/src/ScreenGameplay.h +++ b/stepmania/src/ScreenGameplay.h @@ -79,6 +79,7 @@ protected: void LoadCourseSongNumber( int SongNumber ); float StartPlayingSong(float MinTimeToNotes, float MinTimeToMusic); void ShowSavePrompt( ScreenMessage SM_SendWhenDone ); + void PlayAnnouncer( CString type, float fSeconds ); void PlayTicks(); void UpdateLyrics( float fDeltaTime ); @@ -97,7 +98,7 @@ protected: vector m_asModifiersQueue[NUM_PLAYERS];// size may be >1 if playing a course bool m_bChangedOffsetOrBPM; - float m_fTimeLeftBeforeDancingComment; // this counter is only running while STATE_DANCING + float m_fTimeSinceLastDancingComment; // this counter is only running while STATE_DANCING LyricDisplay m_LyricDisplay; @@ -163,42 +164,12 @@ protected: DifficultyIcon m_DifficultyIcon[NUM_PLAYERS]; - // These aren't used. Are they left-overs from BeginnerHelper work? -Chris -// BGAnimation m_bgaBH; -// Sprite m_sprBH; - Sprite m_sprOniGameOver[NUM_PLAYERS]; void ShowOniGameOver( PlayerNumber pn ); - RandomSample m_soundOniDie; - RandomSample m_announcerReady; - RandomSample m_announcerHereWeGo; - RandomSample m_announcerDanger; - RandomSample m_announcerGood; - RandomSample m_announcerHot; - RandomSample m_announcerOni; - RandomSample m_announcer100Combo; - RandomSample m_announcer200Combo; - RandomSample m_announcer300Combo; - RandomSample m_announcer400Combo; - RandomSample m_announcer500Combo; - RandomSample m_announcer600Combo; - RandomSample m_announcer700Combo; - RandomSample m_announcer800Combo; - RandomSample m_announcer900Combo; - RandomSample m_announcer1000Combo; - RandomSample m_announcerComboStopped; - RandomSample m_announcerComboContinuing; - RandomSample m_announcerBattleTrickLevel1; - RandomSample m_announcerBattleTrickLevel2; - RandomSample m_announcerBattleTrickLevel3; RageSound m_soundBattleTrickLevel1; RageSound m_soundBattleTrickLevel2; RageSound m_soundBattleTrickLevel3; - RandomSample m_announcerBattleDamageLevel1; - RandomSample m_announcerBattleDamageLevel2; - RandomSample m_announcerBattleDamageLevel3; - RandomSample m_announcerBattleDie; bool m_bZeroDeltaOnNextUpdate; bool m_bDemonstration;