simplify announcer handling

This commit is contained in:
Glenn Maynard
2004-02-16 05:29:33 +00:00
parent 497c3a18e3
commit 47bf1ef190
2 changed files with 76 additions and 212 deletions
+74 -181
View File
@@ -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: