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)
This commit is contained in:
Andrew Livy
2003-12-11 05:23:40 +00:00
parent 6e095ea8a3
commit 4d82763a33
3 changed files with 74 additions and 73 deletions
+4 -72
View File
@@ -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
+57 -1
View File
@@ -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;snd<NUM_SEQUENCE_SOUNDS;snd++) // grab in any sound sequence the user may want to throw onto this screen
{
EvalSoundSequence temp;
temp.fTime = SOUNDSEQ_TIME(snd);
temp.sSound.Load(THEME->GetPathToS(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.size();snd++)
{
if(m_SoundSequences[snd].fTime != -1) // already played? skip...
{
if(m_timerSoundSequences.Ago() > m_SoundSequences[snd].fTime )
{
m_SoundSequences[snd].fTime = -1; // -1 indicates already started playing
m_SoundSequences[snd].sSound.Play();
}
}
}
}
for( int p=0; p<NUM_PLAYERS; p++)
{
if (GAMESTATE->m_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" );
+13
View File
@@ -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<EvalSoundSequence> m_SoundSequences; // a sequence of sounds to be played (although they're stored in no particular order!)
};
#endif