From 5c8a8d16d717d4e80cdd630447065264bd848cda Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Mon, 13 Oct 2003 00:06:49 +0000 Subject: [PATCH] changable regen combos --- stepmania/src/LifeMeterBar.cpp | 20 ++++++++++++++------ stepmania/src/PrefsManager.cpp | 12 ++++++++++++ stepmania/src/PrefsManager.h | 4 ++++ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/stepmania/src/LifeMeterBar.cpp b/stepmania/src/LifeMeterBar.cpp index 33012bdbf3..d437f6d4d9 100644 --- a/stepmania/src/LifeMeterBar.cpp +++ b/stepmania/src/LifeMeterBar.cpp @@ -341,9 +341,8 @@ void LifeMeterBar::ChangeLife( TapNoteScore score ) case TNS_GREAT: case TNS_GOOD: m_iMissCombo = 0; - m_iComboToRegainLife--; - CLAMP( m_iComboToRegainLife, 0, 10); - if ( m_iComboToRegainLife ) + m_iComboToRegainLife = max( m_iComboToRegainLife-1, 0 ); + if ( m_iComboToRegainLife > 0 ) fDeltaLife = 0.0f; break; case TNS_BOO: @@ -352,8 +351,11 @@ void LifeMeterBar::ChangeLife( TapNoteScore score ) // do this after; only successive boo/miss will // increase the amount of life lost. m_iMissCombo++; - m_iComboToRegainLife += 5; - CLAMP( m_iComboToRegainLife, 0, 10); + /* Increase by m_iRegenComboAfterMiss; never push it beyond m_iMaxRegenComboAfterMiss + * but don't reduce it if it's already past. */ + const int NewComboToRegainLife = min( PREFSMAN->m_iMaxRegenComboAfterMiss, + m_iComboToRegainLife + PREFSMAN->m_iRegenComboAfterMiss ); + m_iComboToRegainLife = max( m_iComboToRegainLife, NewComboToRegainLife ); } switch( GAMESTATE->m_SongOptions.m_DrainType ) @@ -370,7 +372,13 @@ void LifeMeterBar::ChangeLife( TapNoteScore score ) // check if this step would cause a fail if( m_fLifePercentage + fDeltaLife <= FAIL_THRESHOLD && m_fLifePercentage > FAIL_THRESHOLD ) - m_iComboToRegainLife = 10; + { + /* Increase by m_iRegenComboAfterFail; never push it beyond m_iMaxRegenComboAfterFail + * but don't reduce it if it's already past. */ + const int NewComboToRegainLife = min( PREFSMAN->m_iMaxRegenComboAfterFail, + m_iComboToRegainLife + PREFSMAN->m_iRegenComboAfterFail ); + m_iComboToRegainLife = max( m_iComboToRegainLife, NewComboToRegainLife ); + } m_fLifePercentage += fDeltaLife; CLAMP( m_fLifePercentage, 0, 1 ); diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index 4393e9eed4..7fb598dd38 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -62,6 +62,10 @@ PrefsManager::PrefsManager() m_fJudgeWindowBooSeconds = 0.180f; m_fJudgeWindowOKSeconds = 0.250f; // allow enough time to take foot off and put back on m_fLifeDifficultyScale = 1.0f; + m_iRegenComboAfterFail = 10; // cumulative + m_iRegenComboAfterMiss = 5; // cumulative + m_iMaxRegenComboAfterFail = 10; + m_iMaxRegenComboAfterMiss = 10; m_bDelayedEscape = true; m_bInstructions = true; m_bShowDontDie = true; @@ -217,6 +221,10 @@ void PrefsManager::ReadGlobalPrefsFromDisk() ini.GetValue( "Options", "JudgeWindowBooSeconds", m_fJudgeWindowBooSeconds ); ini.GetValue( "Options", "JudgeWindowOKSeconds", m_fJudgeWindowOKSeconds ); ini.GetValue( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale ); + ini.GetValue( "Options", "RegenComboAfterFail", m_iRegenComboAfterFail ); + ini.GetValue( "Options", "RegenComboAfterMiss", m_iRegenComboAfterMiss ); + ini.GetValue( "Options", "MaxRegenComboAfterFail", m_iMaxRegenComboAfterFail ); + ini.GetValue( "Options", "MaxRegenComboAfterMiss", m_iMaxRegenComboAfterMiss ); ini.GetValue( "Options", "DelayedEscape", m_bDelayedEscape ); ini.GetValue( "Options", "HiddenSongs", m_bHiddenSongs ); ini.GetValue( "Options", "Vsync", m_bVsync ); @@ -340,6 +348,10 @@ void PrefsManager::SaveGlobalPrefsToDisk() const ini.SetValue( "Options", "JudgeWindowBooSeconds", m_fJudgeWindowBooSeconds ); ini.SetValue( "Options", "JudgeWindowOKSeconds", m_fJudgeWindowOKSeconds ); ini.SetValue( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale ); + ini.SetValue( "Options", "RegenComboAfterFail", m_iRegenComboAfterFail ); + ini.SetValue( "Options", "RegenComboAfterMiss", m_iRegenComboAfterMiss ); + ini.SetValue( "Options", "MaxRegenComboAfterFail", m_iMaxRegenComboAfterFail ); + ini.SetValue( "Options", "MaxRegenComboAfterMiss", m_iMaxRegenComboAfterMiss ); ini.SetValue( "Options", "DelayedEscape", m_bDelayedEscape ); ini.SetValue( "Options", "HiddenSongs", m_bHiddenSongs ); ini.SetValue( "Options", "Vsync", m_bVsync ); diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index 0147441ae9..15ef7d9d4e 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -55,6 +55,10 @@ public: float m_fJudgeWindowGoodSeconds; float m_fJudgeWindowBooSeconds; float m_fJudgeWindowOKSeconds; + int m_iRegenComboAfterFail; + int m_iRegenComboAfterMiss; + int m_iMaxRegenComboAfterFail; + int m_iMaxRegenComboAfterMiss; bool m_bAutoPlay; bool m_bDelayedEscape; bool m_bInstructions, m_bShowDontDie, m_bShowSelectGroup;