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 if( !bDemonstration ) // only load if we're going to use it
{ {
m_soundOniDie.Load( THEME->GetPathToS("ScreenGameplay oni die") ); m_soundAssistTick.Load( THEME->GetPathToS("ScreenGameplay assist tick"), true );
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") );
switch( GAMESTATE->m_PlayMode ) switch( GAMESTATE->m_PlayMode )
{ {
case PLAY_MODE_BATTLE: 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_soundBattleTrickLevel1.Load( THEME->GetPathToS("ScreenGameplay battle trick level1"), true );
m_soundBattleTrickLevel2.Load( THEME->GetPathToS("ScreenGameplay battle trick level2"), true ); m_soundBattleTrickLevel2.Load( THEME->GetPathToS("ScreenGameplay battle trick level2"), true );
m_soundBattleTrickLevel3.Load( THEME->GetPathToS("ScreenGameplay battle trick level3"), 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; break;
} }
} }
@@ -1026,7 +993,7 @@ void ScreenGameplay::LoadNextSong()
m_Foreground.LoadFromSong( GAMESTATE->m_pCurSong ); 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, /* 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 ) void ScreenGameplay::Update( float fDeltaTime )
{ {
@@ -1251,33 +1240,8 @@ void ScreenGameplay::Update( float fDeltaTime )
if( GAMESTATE->m_fOpponentHealthPercent == 0 ) if( GAMESTATE->m_fOpponentHealthPercent == 0 )
{ {
// HACK: Load incorrect directory on purpose for now.
// HACK: Shut the announcer up PlayAnnouncer( "gameplay battle damage level3", 0 );
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();
GAMESTATE->RemoveAllActiveAttacks(); GAMESTATE->RemoveAllActiveAttacks();
@@ -1285,7 +1249,7 @@ void ScreenGameplay::Update( float fDeltaTime )
{ {
if( GAMESTATE->IsCpuPlayer(p) ) if( GAMESTATE->IsCpuPlayer(p) )
{ {
m_soundOniDie.PlayRandom(); SOUND->PlayOnceFromDir( THEME->GetPathToS("ScreenGameplay oni die") );
ShowOniGameOver((PlayerNumber)p); ShowOniGameOver((PlayerNumber)p);
m_Player[p].Init(); // remove all notes and scoring m_Player[p].Init(); // remove all notes and scoring
m_Player[p].FadeToFail(); // tell the NoteField to fade to white 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 // Check to see if it's time to play a ScreenGameplay comment
// //
m_fTimeLeftBeforeDancingComment -= fDeltaTime; m_fTimeSinceLastDancingComment += fDeltaTime;
if( m_fTimeLeftBeforeDancingComment <= 0 )
switch( GAMESTATE->m_PlayMode )
{ {
switch( GAMESTATE->m_PlayMode ) case PLAY_MODE_ARCADE:
{ case PLAY_MODE_BATTLE:
case PLAY_MODE_ARCADE: case PLAY_MODE_RAVE:
case PLAY_MODE_BATTLE: if( GAMESTATE->OneIsHot() )
case PLAY_MODE_RAVE: PlayAnnouncer( "gameplay comment hot", SECONDS_BETWEEN_COMMENTS );
if( GAMESTATE->OneIsHot() ) else if( GAMESTATE->AllAreInDangerOrWorse() )
m_announcerHot.PlayRandom(); PlayAnnouncer( "gameplay comment danger", SECONDS_BETWEEN_COMMENTS );
else if( GAMESTATE->AllAreInDangerOrWorse() ) else
m_announcerDanger.PlayRandom(); PlayAnnouncer( "gameplay comment good", SECONDS_BETWEEN_COMMENTS );
else break;
m_announcerGood.PlayRandom(); case PLAY_MODE_NONSTOP:
if( m_pCombinedLifeMeter ) case PLAY_MODE_ONI:
m_pCombinedLifeMeter->OnTaunt(); case PLAY_MODE_ENDLESS:
break; PlayAnnouncer( "gameplay comment oni", SECONDS_BETWEEN_COMMENTS );
case PLAY_MODE_NONSTOP: break;
case PLAY_MODE_ONI: default:
case PLAY_MODE_ENDLESS: ASSERT(0);
m_announcerOni.PlayRandom();
break;
default:
ASSERT(0);
}
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; // reset for the next comment
} }
} }
@@ -1441,7 +1400,7 @@ void ScreenGameplay::UpdateCheckFail()
if( !g_CurStageStats.AllFailedEarlier() ) // if not the last one to fail if( !g_CurStageStats.AllFailedEarlier() ) // if not the last one to fail
{ {
// kill them! // kill them!
m_soundOniDie.PlayRandom(); SOUND->PlayOnceFromDir( THEME->GetPathToS("ScreenGameplay oni die") );
ShowOniGameOver((PlayerNumber)pn); ShowOniGameOver((PlayerNumber)pn);
m_Player[pn].Init(); // remove all notes and scoring m_Player[pn].Init(); // remove all notes and scoring
m_Player[pn].FadeToFail(); // tell the NoteField to fade to white m_Player[pn].FadeToFail(); // tell the NoteField to fade to white
@@ -1865,12 +1824,18 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
{ {
case SM_PlayReady: case SM_PlayReady:
m_Background.FadeIn(); m_Background.FadeIn();
m_announcerReady.PlayRandom(); SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("gameplay ready") );
m_Ready.StartTransitioning( SM_PlayGo ); m_Ready.StartTransitioning( SM_PlayGo );
break; break;
case SM_PlayGo: 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 ); m_Go.StartTransitioning( SM_None );
GAMESTATE->m_bPastHereWeGo = true; GAMESTATE->m_bPastHereWeGo = true;
m_DancingState = STATE_DANCING; // STATE CHANGE! Now the user is allowed to press Back 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) #define SECS_SINCE_LAST_COMMENT (SECONDS_BETWEEN_COMMENTS-m_fTimeLeftBeforeDancingComment)
case SM_100Combo: case SM_100Combo:
if( SECS_SINCE_LAST_COMMENT > 2 ) PlayAnnouncer( "gameplay 100 combo", 2 );
{
m_announcer100Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_200Combo: case SM_200Combo:
if( SECS_SINCE_LAST_COMMENT > 2 ) PlayAnnouncer( "gameplay 200 combo", 2 );
{
m_announcer200Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_300Combo: case SM_300Combo:
if( SECS_SINCE_LAST_COMMENT > 2 ) PlayAnnouncer( "gameplay 300 combo", 2 );
{
m_announcer300Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_400Combo: case SM_400Combo:
if( SECS_SINCE_LAST_COMMENT > 2 ) PlayAnnouncer( "gameplay 400 combo", 2 );
{
m_announcer400Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_500Combo: case SM_500Combo:
if( SECS_SINCE_LAST_COMMENT > 2 ) PlayAnnouncer( "gameplay 500 combo", 2 );
{
m_announcer500Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_600Combo: case SM_600Combo:
if( SECS_SINCE_LAST_COMMENT > 2 ) PlayAnnouncer( "gameplay 600 combo", 2 );
{
m_announcer600Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_700Combo: case SM_700Combo:
if( SECS_SINCE_LAST_COMMENT > 2 ) PlayAnnouncer( "gameplay 700 combo", 2 );
{
m_announcer700Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_800Combo: case SM_800Combo:
if( SECS_SINCE_LAST_COMMENT > 2 ) PlayAnnouncer( "gameplay 800 combo", 2 );
{
m_announcer800Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_900Combo: case SM_900Combo:
if( SECS_SINCE_LAST_COMMENT > 2 ) PlayAnnouncer( "gameplay 900 combo", 2 );
{
m_announcer900Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_1000Combo: case SM_1000Combo:
if( SECS_SINCE_LAST_COMMENT > 2 ) PlayAnnouncer( "gameplay 1000 combo", 2 );
{
m_announcer1000Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_ComboStopped: case SM_ComboStopped:
if( SECS_SINCE_LAST_COMMENT > 2 ) PlayAnnouncer( "gameplay combo stopped", 2 );
{
m_announcerComboStopped.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_ComboContinuing: case SM_ComboContinuing:
if( SECS_SINCE_LAST_COMMENT > 2 ) PlayAnnouncer( "gameplay combo overflow", 2 );
{
m_announcerComboContinuing.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_BattleTrickLevel1: case SM_BattleTrickLevel1:
if( SECS_SINCE_LAST_COMMENT > 3 ) PlayAnnouncer( "gameplay battle trick level1", 3 );
{
m_announcerBattleTrickLevel1.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
m_soundBattleTrickLevel1.Play(); m_soundBattleTrickLevel1.Play();
break; break;
case SM_BattleTrickLevel2: case SM_BattleTrickLevel2:
if( SECS_SINCE_LAST_COMMENT > 3 ) PlayAnnouncer( "gameplay battle trick level2", 3 );
{
m_announcerBattleTrickLevel2.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
m_soundBattleTrickLevel2.Play(); m_soundBattleTrickLevel2.Play();
break; break;
case SM_BattleTrickLevel3: case SM_BattleTrickLevel3:
if( SECS_SINCE_LAST_COMMENT > 3 ) PlayAnnouncer( "gameplay battle trick level3", 3 );
{
m_announcerBattleTrickLevel3.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
m_soundBattleTrickLevel3.Play(); m_soundBattleTrickLevel3.Play();
break; break;
case SM_BattleDamageLevel1: case SM_BattleDamageLevel1:
if( SECS_SINCE_LAST_COMMENT > 3 ) PlayAnnouncer( "gameplay battle damage level1", 3 );
{
m_announcerBattleDamageLevel1.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_BattleDamageLevel2: case SM_BattleDamageLevel2:
if( SECS_SINCE_LAST_COMMENT > 3 ) PlayAnnouncer( "gameplay battle damage level2", 3 );
{
m_announcerBattleDamageLevel2.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_BattleDamageLevel3: case SM_BattleDamageLevel3:
if( SECS_SINCE_LAST_COMMENT > 3 ) PlayAnnouncer( "gameplay battle damage level3", 3 );
{
m_announcerBattleDamageLevel3.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break; break;
case SM_SaveChangedBeforeGoingBack: case SM_SaveChangedBeforeGoingBack:
+2 -31
View File
@@ -79,6 +79,7 @@ protected:
void LoadCourseSongNumber( int SongNumber ); void LoadCourseSongNumber( int SongNumber );
float StartPlayingSong(float MinTimeToNotes, float MinTimeToMusic); float StartPlayingSong(float MinTimeToNotes, float MinTimeToMusic);
void ShowSavePrompt( ScreenMessage SM_SendWhenDone ); void ShowSavePrompt( ScreenMessage SM_SendWhenDone );
void PlayAnnouncer( CString type, float fSeconds );
void PlayTicks(); void PlayTicks();
void UpdateLyrics( float fDeltaTime ); void UpdateLyrics( float fDeltaTime );
@@ -97,7 +98,7 @@ protected:
vector<AttackArray> m_asModifiersQueue[NUM_PLAYERS];// size may be >1 if playing a course vector<AttackArray> m_asModifiersQueue[NUM_PLAYERS];// size may be >1 if playing a course
bool m_bChangedOffsetOrBPM; 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; LyricDisplay m_LyricDisplay;
@@ -163,42 +164,12 @@ protected:
DifficultyIcon m_DifficultyIcon[NUM_PLAYERS]; 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]; Sprite m_sprOniGameOver[NUM_PLAYERS];
void ShowOniGameOver( PlayerNumber pn ); 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_soundBattleTrickLevel1;
RageSound m_soundBattleTrickLevel2; RageSound m_soundBattleTrickLevel2;
RageSound m_soundBattleTrickLevel3; RageSound m_soundBattleTrickLevel3;
RandomSample m_announcerBattleDamageLevel1;
RandomSample m_announcerBattleDamageLevel2;
RandomSample m_announcerBattleDamageLevel3;
RandomSample m_announcerBattleDie;
bool m_bZeroDeltaOnNextUpdate; bool m_bZeroDeltaOnNextUpdate;
bool m_bDemonstration; bool m_bDemonstration;