name cleanup: FAIL_ARCADE -> FAIL_IMMEDIATE

clean up fail logic
add pref: Min1FullSongInCourses
This commit is contained in:
Chris Danford
2004-06-08 07:16:28 +00:00
parent b8db184198
commit 62acd3526f
8 changed files with 69 additions and 70 deletions
+1 -1
View File
@@ -302,7 +302,7 @@ void AddPlayerStatsToProfile( Profile *pProfile, const StageStats &ss, PlayerNum
if( !ss.bFailed[p] ) if( !ss.bFailed[p] )
{ {
pProfile->m_iNumSongsPassedByPlayMode[ss.playMode]++; pProfile->m_iNumSongsPassedByPlayMode[ss.playMode]++;
pProfile->m_iNumSongsPassedByGrade[ss.GetGrade((PlayerNumber)p)]++; pProfile->m_iNumSongsPassedByGrade[ss.GetGrade(p)]++;
} }
} }
+3
View File
@@ -91,6 +91,7 @@ void PrefsManager::Init()
m_iMaxRegenComboAfterMiss = 10; m_iMaxRegenComboAfterMiss = 10;
m_bTwoPlayerRecovery = true; m_bTwoPlayerRecovery = true;
m_bMercifulDrain = true; m_bMercifulDrain = true;
m_bMin1FullSongInCourses = false;
m_iPercentScoreWeightMarvelous = 3; m_iPercentScoreWeightMarvelous = 3;
m_iPercentScoreWeightPerfect = 2; m_iPercentScoreWeightPerfect = 2;
@@ -382,6 +383,7 @@ void PrefsManager::ReadPrefsFromFile( CString sIni )
ini.GetValue( "Options", "MaxRegenComboAfterMiss", m_iMaxRegenComboAfterMiss ); ini.GetValue( "Options", "MaxRegenComboAfterMiss", m_iMaxRegenComboAfterMiss );
ini.GetValue( "Options", "TwoPlayerRecovery", m_bTwoPlayerRecovery ); ini.GetValue( "Options", "TwoPlayerRecovery", m_bTwoPlayerRecovery );
ini.GetValue( "Options", "MercifulDrain", m_bMercifulDrain ); ini.GetValue( "Options", "MercifulDrain", m_bMercifulDrain );
ini.GetValue( "Options", "Min1FullSongInCourses", m_bMin1FullSongInCourses );
ini.GetValue( "Options", "PercentScoreWeightMarvelous", m_iPercentScoreWeightMarvelous ); ini.GetValue( "Options", "PercentScoreWeightMarvelous", m_iPercentScoreWeightMarvelous );
ini.GetValue( "Options", "PercentScoreWeightPerfect", m_iPercentScoreWeightPerfect ); ini.GetValue( "Options", "PercentScoreWeightPerfect", m_iPercentScoreWeightPerfect );
@@ -612,6 +614,7 @@ void PrefsManager::SaveGlobalPrefsToDisk() const
ini.SetValue( "Options", "MaxRegenComboAfterMiss", m_iMaxRegenComboAfterMiss ); ini.SetValue( "Options", "MaxRegenComboAfterMiss", m_iMaxRegenComboAfterMiss );
ini.SetValue( "Options", "TwoPlayerRecovery", m_bTwoPlayerRecovery ); ini.SetValue( "Options", "TwoPlayerRecovery", m_bTwoPlayerRecovery );
ini.SetValue( "Options", "MercifulDrain", m_bMercifulDrain ); ini.SetValue( "Options", "MercifulDrain", m_bMercifulDrain );
ini.SetValue( "Options", "Min1FullSongInCourses", m_bMin1FullSongInCourses );
ini.SetValue( "Options", "PercentScoreWeightMarvelous", m_iPercentScoreWeightMarvelous ); ini.SetValue( "Options", "PercentScoreWeightMarvelous", m_iPercentScoreWeightMarvelous );
ini.SetValue( "Options", "PercentScoreWeightPerfect", m_iPercentScoreWeightPerfect ); ini.SetValue( "Options", "PercentScoreWeightPerfect", m_iPercentScoreWeightPerfect );
+1
View File
@@ -91,6 +91,7 @@ public:
int m_iMaxRegenComboAfterMiss; int m_iMaxRegenComboAfterMiss;
bool m_bTwoPlayerRecovery; bool m_bTwoPlayerRecovery;
bool m_bMercifulDrain; // negative life deltas are scaled by the players life percentage bool m_bMercifulDrain; // negative life deltas are scaled by the players life percentage
bool m_bMin1FullSongInCourses; // FEoS for 1st song, FailImmediate thereafter
// percent score (the number that is shown on the screen and saved to memory card) // percent score (the number that is shown on the screen and saved to memory card)
int m_iPercentScoreWeightMarvelous; int m_iPercentScoreWeightMarvelous;
+59 -63
View File
@@ -870,7 +870,7 @@ void ScreenGameplay::LoadNextSong()
m_sprOniGameOver[p].SetDiffuse( RageColor(1,1,1,0) ); // 0 alpha so we don't waste time drawing while not visible m_sprOniGameOver[p].SetDiffuse( RageColor(1,1,1,0) ); // 0 alpha so we don't waste time drawing while not visible
if( GAMESTATE->m_SongOptions.m_LifeType==SongOptions::LIFE_BATTERY && g_CurStageStats.bFailed[p] ) // already failed if( GAMESTATE->m_SongOptions.m_LifeType==SongOptions::LIFE_BATTERY && g_CurStageStats.bFailed[p] ) // already failed
ShowOniGameOver((PlayerNumber)p); ShowOniGameOver(p);
if( GAMESTATE->m_SongOptions.m_LifeType==SongOptions::LIFE_BAR && GAMESTATE->m_PlayMode == PLAY_MODE_ARCADE && !PREFSMAN->m_bEventMode && !m_bDemonstration) if( GAMESTATE->m_SongOptions.m_LifeType==SongOptions::LIFE_BAR && GAMESTATE->m_PlayMode == PLAY_MODE_ARCADE && !PREFSMAN->m_bEventMode && !m_bDemonstration)
{ {
@@ -1220,26 +1220,72 @@ void ScreenGameplay::Update( float fDeltaTime )
m_BeginnerHelper.Update(fDeltaTime); m_BeginnerHelper.Update(fDeltaTime);
/* Set g_CurStageStats.bFailed for failed players. In, FAIL_IMMEDIATE, send
* SM_BeginFailed if all players failed, and kill dead Oni players. */
if( GAMESTATE->m_SongOptions.m_FailType == SongOptions::FAIL_OFF )
return;
// check for individual fail
FOREACH_EnabledPlayer( pn )
{
if( (m_pLifeMeter[pn] && !m_pLifeMeter[pn]->IsFailing()) ||
(m_pCombinedLifeMeter && !m_pCombinedLifeMeter->IsFailing(pn)) )
continue; /* isn't failing */
if( g_CurStageStats.bFailed[pn] )
continue; /* failed and is already dead */
/* If recovery is enabled, only set fail if both are failing.
* There's no way to recover mid-song in battery mode. */
if( GAMESTATE->m_SongOptions.m_LifeType != SongOptions::LIFE_BATTERY &&
PREFSMAN->m_bTwoPlayerRecovery && !GAMESTATE->AllAreDead() )
continue;
LOG->Trace("Player %d failed", (int)pn);
g_CurStageStats.bFailed[pn] = true; // fail
if( GAMESTATE->m_SongOptions.m_LifeType == SongOptions::LIFE_BATTERY &&
GAMESTATE->m_SongOptions.m_FailType == SongOptions::FAIL_IMMEDIATE )
{
if( !g_CurStageStats.AllFailedEarlier() ) // if not the last one to fail
{
// kill them!
SOUND->PlayOnceFromDir( THEME->GetPathS(m_sName,"oni die") );
ShowOniGameOver(pn);
m_Player[pn].Init(); // remove all notes and scoring
m_Player[pn].FadeToFail(); // tell the NoteField to fade to white
}
}
}
/* If FAIL_IMMEDIATE and everyone is failing, start SM_BeginFailed. */
if( GAMESTATE->AllAreDead() && GAMESTATE->m_SongOptions.m_FailType == SongOptions::FAIL_IMMEDIATE )
{
if( PREFSMAN->m_bMin1FullSongInCourses && GAMESTATE->GetCourseSongIndex()==0 )
; // do nothing
else
SCREENMAN->PostMessageToTopScreen( SM_BeginFailed, 0 );
}
// //
// update GameState HealthState // update GameState HealthState
// //
FOREACH_EnabledPlayer(p) FOREACH_EnabledPlayer(p)
{ {
if( if( g_CurStageStats.bFailed[p] )
(m_pLifeMeter[p] && m_pLifeMeter[p]->IsHot()) ||
(m_pCombinedLifeMeter && m_pCombinedLifeMeter->IsHot((PlayerNumber)p)) )
{
GAMESTATE->m_HealthState[p] = GameState::HOT;
}
else if(
(m_pLifeMeter[p] && m_pLifeMeter[p]->IsFailing()) ||
(m_pCombinedLifeMeter && m_pCombinedLifeMeter->IsFailing((PlayerNumber)p)) )
{ {
GAMESTATE->m_HealthState[p] = GameState::DEAD; GAMESTATE->m_HealthState[p] = GameState::DEAD;
} }
else if(
(m_pLifeMeter[p] && m_pLifeMeter[p]->IsHot()) ||
(m_pCombinedLifeMeter && m_pCombinedLifeMeter->IsHot(p)) )
{
GAMESTATE->m_HealthState[p] = GameState::HOT;
}
else if( else if(
(m_pLifeMeter[p] && m_pLifeMeter[p]->IsInDanger()) || (m_pLifeMeter[p] && m_pLifeMeter[p]->IsInDanger()) ||
(m_pCombinedLifeMeter && m_pCombinedLifeMeter->IsInDanger((PlayerNumber)p)) ) (m_pCombinedLifeMeter && m_pCombinedLifeMeter->IsInDanger(p)) )
{ {
GAMESTATE->m_HealthState[p] = GameState::DANGER; GAMESTATE->m_HealthState[p] = GameState::DANGER;
} }
@@ -1249,6 +1295,7 @@ void ScreenGameplay::Update( float fDeltaTime )
} }
} }
switch( m_DancingState ) switch( m_DancingState )
{ {
case STATE_DANCING: case STATE_DANCING:
@@ -1273,15 +1320,9 @@ void ScreenGameplay::Update( float fDeltaTime )
if( GAMESTATE->m_fMusicSeconds > fSecondsToStop && !m_SongFinished.IsTransitioning() && !m_NextSongOut.IsTransitioning() ) if( GAMESTATE->m_fMusicSeconds > fSecondsToStop && !m_SongFinished.IsTransitioning() && !m_NextSongOut.IsTransitioning() )
m_SongFinished.StartTransitioning( SM_NotesEnded ); m_SongFinished.StartTransitioning( SM_NotesEnded );
//
// check for fail
//
UpdateCheckFail();
// //
// update 2d dancing characters // update 2d dancing characters
// //
FOREACH_EnabledPlayer(p) FOREACH_EnabledPlayer(p)
{ {
if(m_Background.GetDancingCharacters() != NULL) if(m_Background.GetDancingCharacters() != NULL)
@@ -1353,7 +1394,7 @@ void ScreenGameplay::Update( float fDeltaTime )
/* Unless we're in FailOff, giving up means failing the song. */ /* Unless we're in FailOff, giving up means failing the song. */
switch( GAMESTATE->m_SongOptions.m_FailType ) switch( GAMESTATE->m_SongOptions.m_FailType )
{ {
case SongOptions::FAIL_ARCADE: case SongOptions::FAIL_IMMEDIATE:
case SongOptions::FAIL_END_OF_SONG: case SongOptions::FAIL_END_OF_SONG:
FOREACH_EnabledPlayer(pn) FOREACH_EnabledPlayer(pn)
g_CurStageStats.bFailed[pn] = true; // fail g_CurStageStats.bFailed[pn] = true; // fail
@@ -1482,51 +1523,6 @@ void ScreenGameplay::Update( float fDeltaTime )
} }
/* Set g_CurStageStats.bFailed for failed players. In, FAIL_ARCADE, send
* SM_BeginFailed if all players failed, and kill dead Oni players. */
void ScreenGameplay::UpdateCheckFail()
{
if( GAMESTATE->m_SongOptions.m_FailType == SongOptions::FAIL_OFF )
return;
// check for individual fail
FOREACH_EnabledPlayer( pn )
{
if( (m_pLifeMeter[pn] && !m_pLifeMeter[pn]->IsFailing()) ||
(m_pCombinedLifeMeter && !m_pCombinedLifeMeter->IsFailing((PlayerNumber)pn)) )
continue; /* isn't failing */
if( g_CurStageStats.bFailed[pn] )
continue; /* failed and is already dead */
/* If recovery is enabled, only set fail if both are failing.
* There's no way to recover mid-song in battery mode. */
if( GAMESTATE->m_SongOptions.m_LifeType != SongOptions::LIFE_BATTERY &&
PREFSMAN->m_bTwoPlayerRecovery && !GAMESTATE->AllAreDead() )
continue;
LOG->Trace("Player %d failed", (int)pn);
g_CurStageStats.bFailed[pn] = true; // fail
if( GAMESTATE->m_SongOptions.m_LifeType == SongOptions::LIFE_BATTERY &&
GAMESTATE->m_SongOptions.m_FailType == SongOptions::FAIL_ARCADE )
{
if( !g_CurStageStats.AllFailedEarlier() ) // if not the last one to fail
{
// kill them!
SOUND->PlayOnceFromDir( THEME->GetPathS(m_sName,"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
}
}
}
/* If FAIL_ARCADE and everyone is failing, start SM_BeginFailed. */
if( GAMESTATE->m_SongOptions.m_FailType == SongOptions::FAIL_ARCADE &&
GAMESTATE->AllAreDead() )
SCREENMAN->PostMessageToTopScreen( SM_BeginFailed, 0 );
}
void ScreenGameplay::AbortGiveUp() void ScreenGameplay::AbortGiveUp()
{ {
if( m_GiveUpTimer.IsZero() ) if( m_GiveUpTimer.IsZero() )
-1
View File
@@ -78,7 +78,6 @@ protected:
void PlayTicks(); void PlayTicks();
void UpdateSongPosition( float fDeltaTime ); void UpdateSongPosition( float fDeltaTime );
void UpdateLyrics( float fDeltaTime ); void UpdateLyrics( float fDeltaTime );
void UpdateCheckFail();
void SongFinished(); void SongFinished();
void StageFinished( bool bBackedOut ); void StageFinished( bool bBackedOut );
+2 -2
View File
@@ -339,7 +339,7 @@ static void DefaultFailType( int &sel, bool ToSel, const CStringArray &choices )
switch( sel ) switch( sel )
{ {
case 0: so.m_FailType = SongOptions::FAIL_ARCADE; break; case 0: so.m_FailType = SongOptions::FAIL_IMMEDIATE; break;
case 1: so.m_FailType = SongOptions::FAIL_END_OF_SONG; break; case 1: so.m_FailType = SongOptions::FAIL_END_OF_SONG; break;
case 2: so.m_FailType = SongOptions::FAIL_OFF; break; case 2: so.m_FailType = SongOptions::FAIL_OFF; break;
default: default:
@@ -473,7 +473,7 @@ static const ConfOption g_ConfOptions[] =
ConfOption( "Progressive\nLifebar", ProgressiveLifebar, "OFF","1","2","3","4","5","6","7","8"), ConfOption( "Progressive\nLifebar", ProgressiveLifebar, "OFF","1","2","3","4","5","6","7","8"),
ConfOption( "Progressive\nStage Lifebar",ProgressiveStageLifebar, "OFF","1","2","3","4","5","6","7","8","INSANITY"), ConfOption( "Progressive\nStage Lifebar",ProgressiveStageLifebar, "OFF","1","2","3","4","5","6","7","8","INSANITY"),
ConfOption( "Progressive\nNonstop Lifebar",ProgressiveNonstopLifebar,"OFF","1","2","3","4","5","6","7","8","INSANITY"), ConfOption( "Progressive\nNonstop Lifebar",ProgressiveNonstopLifebar,"OFF","1","2","3","4","5","6","7","8","INSANITY"),
ConfOption( "Default\nFail Type", DefaultFailType, "ARCADE","END OF SONG","OFF" ), ConfOption( "Default\nFail Type", DefaultFailType, "IMMEDIATE","END OF SONG","OFF" ),
ConfOption( "Coins Per\nCredit", CoinsPerCredit, "1","2","3","4","5","6","7","8" ), ConfOption( "Coins Per\nCredit", CoinsPerCredit, "1","2","3","4","5","6","7","8" ),
ConfOption( "Premium", Premium, "OFF","DOUBLE FOR 1 CREDIT","JOINT PREMIUM" ), ConfOption( "Premium", Premium, "OFF","DOUBLE FOR 1 CREDIT","JOINT PREMIUM" ),
ConfOption( "Show Song\nOptions", ShowSongOptions, "HIDE","SHOW","ASK" ), ConfOption( "Show Song\nOptions", ShowSongOptions, "HIDE","SHOW","ASK" ),
+3 -3
View File
@@ -7,7 +7,7 @@ void SongOptions::Init()
m_LifeType = LIFE_BAR; m_LifeType = LIFE_BAR;
m_DrainType = DRAIN_NORMAL; m_DrainType = DRAIN_NORMAL;
m_iBatteryLives = 4; m_iBatteryLives = 4;
m_FailType = FAIL_ARCADE; m_FailType = FAIL_IMMEDIATE;
m_bAssistTick = false; m_bAssistTick = false;
m_fMusicRate = 1.0f; m_fMusicRate = 1.0f;
m_bAutoSync = false; m_bAutoSync = false;
@@ -36,7 +36,7 @@ CString SongOptions::GetString() const
switch( m_FailType ) switch( m_FailType )
{ {
case FAIL_ARCADE: break; case FAIL_IMMEDIATE: break;
case FAIL_END_OF_SONG: sReturn += "FailEndOfSong, "; break; case FAIL_END_OF_SONG: sReturn += "FailEndOfSong, "; break;
case FAIL_OFF: sReturn += "FailOff, "; break; case FAIL_OFF: sReturn += "FailOff, "; break;
} }
@@ -104,7 +104,7 @@ void SongOptions::FromString( CString sOptions )
else if( sBit == "power-drop" ) m_DrainType = DRAIN_NO_RECOVER; else if( sBit == "power-drop" ) m_DrainType = DRAIN_NO_RECOVER;
else if( sBit == "death" ) m_DrainType = DRAIN_SUDDEN_DEATH; else if( sBit == "death" ) m_DrainType = DRAIN_SUDDEN_DEATH;
else if( sBit == "normal-drain" ) m_DrainType = DRAIN_NORMAL; else if( sBit == "normal-drain" ) m_DrainType = DRAIN_NORMAL;
else if( sBit == "failarcade" ) m_FailType = FAIL_ARCADE; else if( sBit == "failarcade" ) m_FailType = FAIL_IMMEDIATE;
else if( sBit == "failendofsong" ) m_FailType = FAIL_END_OF_SONG; else if( sBit == "failendofsong" ) m_FailType = FAIL_END_OF_SONG;
else if( sBit == "failoff" ) m_FailType = FAIL_OFF; else if( sBit == "failoff" ) m_FailType = FAIL_OFF;
else if( sBit == "assisttick" ) m_bAssistTick = on; else if( sBit == "assisttick" ) m_bAssistTick = on;
+1 -1
View File
@@ -10,7 +10,7 @@ struct SongOptions
enum DrainType { DRAIN_NORMAL, DRAIN_NO_RECOVER, DRAIN_SUDDEN_DEATH }; enum DrainType { DRAIN_NORMAL, DRAIN_NO_RECOVER, DRAIN_SUDDEN_DEATH };
DrainType m_DrainType; // only used with LifeBar DrainType m_DrainType; // only used with LifeBar
int m_iBatteryLives; int m_iBatteryLives;
enum FailType { FAIL_ARCADE=0, FAIL_END_OF_SONG, FAIL_OFF }; enum FailType { FAIL_IMMEDIATE=0, FAIL_END_OF_SONG, FAIL_OFF };
FailType m_FailType; FailType m_FailType;
float m_fMusicRate; float m_fMusicRate;
bool m_bAssistTick, m_bAutoSync, m_bSaveScore; bool m_bAssistTick, m_bAutoSync, m_bSaveScore;