MercifulMines -> MercifulDrain

playbalance rave
playbalance AI
This commit is contained in:
Chris Danford
2004-01-11 23:33:56 +00:00
parent 0afed1540a
commit a1a85c277f
9 changed files with 209 additions and 101 deletions
+12 -28
View File
@@ -2,7 +2,7 @@
MissWeight=4 MissWeight=4
BooWeight=4 BooWeight=4
GoodWeight=4 GoodWeight=4
GreatWeight=40 GreatWeight=30
PerfectWeight=30 PerfectWeight=30
MarvelousWeight=30 MarvelousWeight=30
@@ -10,7 +10,7 @@ MarvelousWeight=30
MissWeight=3 MissWeight=3
BooWeight=3 BooWeight=3
GoodWeight=3 GoodWeight=3
GreatWeight=38 GreatWeight=30
PerfectWeight=30 PerfectWeight=30
MarvelousWeight=30 MarvelousWeight=30
@@ -18,7 +18,7 @@ MarvelousWeight=30
MissWeight=2 MissWeight=2
BooWeight=2 BooWeight=2
GoodWeight=2 GoodWeight=2
GreatWeight=36 GreatWeight=30
PerfectWeight=30 PerfectWeight=30
MarvelousWeight=30 MarvelousWeight=30
@@ -26,15 +26,15 @@ MarvelousWeight=30
MissWeight=2 MissWeight=2
BooWeight=1 BooWeight=1
GoodWeight=2 GoodWeight=2
GreatWeight=34 GreatWeight=30
PerfectWeight=30 PerfectWeight=30
MarvelousWeight=30 MarvelousWeight=30
[Skill4] [Skill4]
MissWeight=1 MissWeight=1
BooWeight=1 BooWeight=1
GoodWeight=2 GoodWeight=4
GreatWeight=32 GreatWeight=28
PerfectWeight=30 PerfectWeight=30
MarvelousWeight=30 MarvelousWeight=30
@@ -42,7 +42,7 @@ MarvelousWeight=30
MissWeight=1 MissWeight=1
BooWeight=1 BooWeight=1
GoodWeight=1 GoodWeight=1
GreatWeight=30 GreatWeight=26
PerfectWeight=30 PerfectWeight=30
MarvelousWeight=30 MarvelousWeight=30
@@ -50,15 +50,15 @@ MarvelousWeight=30
MissWeight=1 MissWeight=1
BooWeight= BooWeight=
GoodWeight=1 GoodWeight=1
GreatWeight=28 GreatWeight=24
PerfectWeight=36 PerfectWeight=30
MarvelousWeight=30 MarvelousWeight=35
[Skill7] [Skill7]
MissWeight= MissWeight=
BooWeight= BooWeight=
GoodWeight=1 GoodWeight=1
GreatWeight=26 GreatWeight=22
PerfectWeight=30 PerfectWeight=30
MarvelousWeight=40 MarvelousWeight=40
@@ -82,22 +82,6 @@ MarvelousWeight=60
MissWeight= MissWeight=
BooWeight= BooWeight=
GoodWeight= GoodWeight=
GreatWeight= GreatWeight=5
PerfectWeight=30 PerfectWeight=30
MarvelousWeight=70 MarvelousWeight=70
[Skill11]
MissWeight=
BooWeight=
GoodWeight=
GreatWeight=
PerfectWeight=20
MarvelousWeight=80
[Skill12]
MissWeight=
BooWeight=
GoodWeight=
GreatWeight=
PerfectWeight=10
MarvelousWeight=90
+29 -28
View File
@@ -68,23 +68,16 @@ void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, TapNoteScore score )
float fPercentToMove = 0; float fPercentToMove = 0;
switch( score ) switch( score )
{ {
case TNS_MARVELOUS: fPercentToMove = PREFSMAN->m_fLifeDeltaMarvelousPercentChange; break; case TNS_MARVELOUS: fPercentToMove = PREFSMAN->m_fTugMeterMarvelousPercentChange; break;
case TNS_PERFECT: fPercentToMove = PREFSMAN->m_fLifeDeltaPerfectPercentChange; break; case TNS_PERFECT: fPercentToMove = PREFSMAN->m_fTugMeterPerfectPercentChange; break;
case TNS_GREAT: fPercentToMove = PREFSMAN->m_fLifeDeltaGreatPercentChange; break; case TNS_GREAT: fPercentToMove = PREFSMAN->m_fTugMeterGreatPercentChange; break;
case TNS_GOOD: fPercentToMove = PREFSMAN->m_fLifeDeltaGoodPercentChange; break; case TNS_GOOD: fPercentToMove = PREFSMAN->m_fTugMeterGoodPercentChange; break;
case TNS_BOO: fPercentToMove = PREFSMAN->m_fLifeDeltaBooPercentChange; break; case TNS_BOO: fPercentToMove = PREFSMAN->m_fTugMeterBooPercentChange; break;
case TNS_MISS: fPercentToMove = PREFSMAN->m_fLifeDeltaMissPercentChange; break; case TNS_MISS: fPercentToMove = PREFSMAN->m_fTugMeterMissPercentChange; break;
default: ASSERT(0); break; default: ASSERT(0); break;
} }
switch( pn ) ChangeLife( pn, fPercentToMove );
{
case PLAYER_1: GAMESTATE->m_fTugLifePercentP1 += fPercentToMove; break;
case PLAYER_2: GAMESTATE->m_fTugLifePercentP1 -= fPercentToMove; break;
default: ASSERT(0);
}
CLAMP( GAMESTATE->m_fTugLifePercentP1, 0, 1 );
} }
void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, HoldNoteScore score, TapNoteScore tscore ) void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, HoldNoteScore score, TapNoteScore tscore )
@@ -97,32 +90,40 @@ void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, HoldNoteScore score, Tap
float fPercentToMove = 0; float fPercentToMove = 0;
switch( score ) switch( score )
{ {
case HNS_OK: fPercentToMove = PREFSMAN->m_fLifeDeltaOKPercentChange; break; case HNS_OK: fPercentToMove = PREFSMAN->m_fTugMeterOKPercentChange; break;
case HNS_NG: fPercentToMove = PREFSMAN->m_fLifeDeltaNGPercentChange; break; case HNS_NG: fPercentToMove = PREFSMAN->m_fTugMeterNGPercentChange; break;
default: ASSERT(0); break; default: ASSERT(0); break;
} }
switch( pn ) ChangeLife( pn, fPercentToMove );
{
case PLAYER_1: GAMESTATE->m_fTugLifePercentP1 += fPercentToMove; break;
case PLAYER_2: GAMESTATE->m_fTugLifePercentP1 -= fPercentToMove; break;
default: ASSERT(0);
}
CLAMP( GAMESTATE->m_fTugLifePercentP1, 0, 1 );
} }
void CombinedLifeMeterTug::ChangeLifeMine( PlayerNumber pn ) void CombinedLifeMeterTug::ChangeLifeMine( PlayerNumber pn )
{ {
float fPercentToMove = PREFSMAN->m_fLifeDeltaHitMinePercentChange; float fPercentToMove = PREFSMAN->m_fTugMeterHitMinePercentChange;
ChangeLife( pn, fPercentToMove );
}
void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, float fPercentToMove )
{
if( PREFSMAN->m_bMercifulDrain && fPercentToMove < 0 )
{
float fLifePercentage;
switch( pn )
{
case PLAYER_1: fLifePercentage = GAMESTATE->m_fTugLifePercentP1; break;
case PLAYER_2: fLifePercentage = 1 - GAMESTATE->m_fTugLifePercentP1; break;
default: ASSERT(0);
}
fPercentToMove *= SCALE( fLifePercentage, 0.f, 1.f, 0.2f, 1.f);
}
switch( pn ) switch( pn )
{ {
case PLAYER_1: GAMESTATE->m_fTugLifePercentP1 += fPercentToMove; break; case PLAYER_1: GAMESTATE->m_fTugLifePercentP1 += fPercentToMove; break;
case PLAYER_2: GAMESTATE->m_fTugLifePercentP1 -= fPercentToMove; break; case PLAYER_2: GAMESTATE->m_fTugLifePercentP1 -= fPercentToMove; break;
default: ASSERT(0); default: ASSERT(0);
} }
CLAMP( GAMESTATE->m_fTugLifePercentP1, 0, 1 ); CLAMP( GAMESTATE->m_fTugLifePercentP1, 0, 1 );
} }
+1
View File
@@ -32,6 +32,7 @@ public:
virtual bool IsFailing( PlayerNumber pn ) { return false; }; virtual bool IsFailing( PlayerNumber pn ) { return false; };
protected: protected:
void ChangeLife( PlayerNumber pn, float fPercentToMove );
MeterDisplay m_Stream[NUM_PLAYERS]; MeterDisplay m_Stream[NUM_PLAYERS];
Sprite m_sprSeparator; Sprite m_sprSeparator;
+3 -3
View File
@@ -380,6 +380,9 @@ void LifeMeterBar::ChangeLife( HoldNoteScore score, TapNoteScore tscore )
void LifeMeterBar::ChangeLife( float fDeltaLife ) void LifeMeterBar::ChangeLife( float fDeltaLife )
{ {
if( PREFSMAN->m_bMercifulDrain && fDeltaLife < 0 )
fDeltaLife *= SCALE( m_fLifePercentage, 0.f, 1.f, 0.5f, 1.f);
// handle progressiveness and ComboToRegainLife here // handle progressiveness and ComboToRegainLife here
if( fDeltaLife >= 0 ) if( fDeltaLife >= 0 )
{ {
@@ -456,9 +459,6 @@ void LifeMeterBar::ChangeLifeMine()
ASSERT(0); ASSERT(0);
} }
if( PREFSMAN->m_bMercifulMines )
fDeltaLife *= SCALE( m_fLifePercentage, 0.f, 1.f, 0.5f, 1.f);
ChangeLife( fDeltaLife ); ChangeLife( fDeltaLife );
} }
+68 -6
View File
@@ -76,15 +76,26 @@ PrefsManager::PrefsManager()
m_fLifeDeltaGoodPercentChange = +0.000f; m_fLifeDeltaGoodPercentChange = +0.000f;
m_fLifeDeltaBooPercentChange = -0.040f; m_fLifeDeltaBooPercentChange = -0.040f;
m_fLifeDeltaMissPercentChange = -0.080f; m_fLifeDeltaMissPercentChange = -0.080f;
m_fLifeDeltaHitMinePercentChange = -0.160f;
m_fLifeDeltaOKPercentChange = +0.008f; m_fLifeDeltaOKPercentChange = +0.008f;
m_fLifeDeltaNGPercentChange = -0.080f; m_fLifeDeltaNGPercentChange = -0.080f;
m_fLifeDeltaHitMinePercentChange = -0.160f;
m_fTugMeterMarvelousPercentChange = +0.008f;
m_fTugMeterPerfectPercentChange = +0.008f;
m_fTugMeterGreatPercentChange = +0.004f;
m_fTugMeterGoodPercentChange = +0.000f;
m_fTugMeterBooPercentChange = -0.010f;
m_fTugMeterMissPercentChange = -0.020f;
m_fTugMeterHitMinePercentChange = -0.040f;
m_fTugMeterOKPercentChange = +0.008f;
m_fTugMeterNGPercentChange = -0.020f;
m_iRegenComboAfterFail = 10; // cumulative m_iRegenComboAfterFail = 10; // cumulative
m_iRegenComboAfterMiss = 5; // cumulative m_iRegenComboAfterMiss = 5; // cumulative
m_iMaxRegenComboAfterFail = 10; m_iMaxRegenComboAfterFail = 10;
m_iMaxRegenComboAfterMiss = 10; m_iMaxRegenComboAfterMiss = 10;
m_bTwoPlayerRecovery = true; m_bTwoPlayerRecovery = true;
m_bMercifulMines = true; m_bMercifulDrain = true;
m_iPercentScoreMarvelousWeight = 3; m_iPercentScoreMarvelousWeight = 3;
m_iPercentScorePerfectWeight = 2; m_iPercentScorePerfectWeight = 2;
@@ -110,6 +121,17 @@ PrefsManager::PrefsManager()
m_fGradePercentC = 0.45f; m_fGradePercentC = 0.45f;
m_fGradePercentD = 0; m_fGradePercentD = 0;
m_fSuperMeterMarvelousPercentChange = +0.08f;
m_fSuperMeterPerfectPercentChange = +0.08f;
m_fSuperMeterGreatPercentChange = +0.04f;
m_fSuperMeterGoodPercentChange = +0.00f;
m_fSuperMeterBooPercentChange = -0.00f;
m_fSuperMeterMissPercentChange = -0.20f;
m_fSuperMeterHitMinePercentChange = -0.40f;
m_fSuperMeterOKPercentChange = +0.08f;
m_fSuperMeterNGPercentChange = -0.20f;
m_bMercifulSuperMeter = true;
m_bDelayedEscape = true; m_bDelayedEscape = true;
m_bInstructions = true; m_bInstructions = true;
m_bShowDontDie = true; m_bShowDontDie = true;
@@ -304,15 +326,24 @@ void PrefsManager::ReadGlobalPrefsFromDisk()
ini.GetValue( "Options", "LifeDeltaGoodPercentChange", m_fLifeDeltaGoodPercentChange ); ini.GetValue( "Options", "LifeDeltaGoodPercentChange", m_fLifeDeltaGoodPercentChange );
ini.GetValue( "Options", "LifeDeltaBooPercentChange", m_fLifeDeltaBooPercentChange ); ini.GetValue( "Options", "LifeDeltaBooPercentChange", m_fLifeDeltaBooPercentChange );
ini.GetValue( "Options", "LifeDeltaMissPercentChange", m_fLifeDeltaMissPercentChange ); ini.GetValue( "Options", "LifeDeltaMissPercentChange", m_fLifeDeltaMissPercentChange );
ini.GetValue( "Options", "LifeDeltaHitMinePercentChange", m_fLifeDeltaHitMinePercentChange );
ini.GetValue( "Options", "LifeDeltaOKPercentChange", m_fLifeDeltaOKPercentChange ); ini.GetValue( "Options", "LifeDeltaOKPercentChange", m_fLifeDeltaOKPercentChange );
ini.GetValue( "Options", "LifeDeltaNGPercentChange", m_fLifeDeltaNGPercentChange ); ini.GetValue( "Options", "LifeDeltaNGPercentChange", m_fLifeDeltaNGPercentChange );
ini.GetValue( "Options", "LifeDeltaHitMinePercentChange", m_fLifeDeltaHitMinePercentChange ); ini.GetValue( "Options", "TugMeterMarvelousPercentChange", m_fTugMeterMarvelousPercentChange );
ini.GetValue( "Options", "TugMeterPerfectPercentChange", m_fTugMeterPerfectPercentChange );
ini.GetValue( "Options", "TugMeterGreatPercentChange", m_fTugMeterGreatPercentChange );
ini.GetValue( "Options", "TugMeterGoodPercentChange", m_fTugMeterGoodPercentChange );
ini.GetValue( "Options", "TugMeterBooPercentChange", m_fTugMeterBooPercentChange );
ini.GetValue( "Options", "TugMeterMissPercentChange", m_fTugMeterMissPercentChange );
ini.GetValue( "Options", "TugMeterHitMinePercentChange", m_fTugMeterHitMinePercentChange );
ini.GetValue( "Options", "TugMeterOKPercentChange", m_fTugMeterOKPercentChange );
ini.GetValue( "Options", "TugMeterNGPercentChange", m_fTugMeterNGPercentChange );
ini.GetValue( "Options", "RegenComboAfterFail", m_iRegenComboAfterFail ); ini.GetValue( "Options", "RegenComboAfterFail", m_iRegenComboAfterFail );
ini.GetValue( "Options", "RegenComboAfterMiss", m_iRegenComboAfterMiss ); ini.GetValue( "Options", "RegenComboAfterMiss", m_iRegenComboAfterMiss );
ini.GetValue( "Options", "MaxRegenComboAfterFail", m_iMaxRegenComboAfterFail ); ini.GetValue( "Options", "MaxRegenComboAfterFail", m_iMaxRegenComboAfterFail );
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", "MercifulMines", m_bMercifulMines ); ini.GetValue( "Options", "MercifulDrain", m_bMercifulDrain );
ini.GetValue( "Options", "PercentScoreMarvelousWeight", m_iPercentScoreMarvelousWeight ); ini.GetValue( "Options", "PercentScoreMarvelousWeight", m_iPercentScoreMarvelousWeight );
ini.GetValue( "Options", "PercentScorePerfectWeight", m_iPercentScorePerfectWeight ); ini.GetValue( "Options", "PercentScorePerfectWeight", m_iPercentScorePerfectWeight );
@@ -338,6 +369,17 @@ void PrefsManager::ReadGlobalPrefsFromDisk()
ini.GetValue( "Options", "GradePercentC", m_fGradePercentC ); ini.GetValue( "Options", "GradePercentC", m_fGradePercentC );
ini.GetValue( "Options", "GradePercentD", m_fGradePercentD ); ini.GetValue( "Options", "GradePercentD", m_fGradePercentD );
ini.GetValue( "Options", "SuperMeterMarvelousPercentChange",m_fSuperMeterMarvelousPercentChange );
ini.GetValue( "Options", "SuperMeterPerfectPercentChange", m_fSuperMeterPerfectPercentChange );
ini.GetValue( "Options", "SuperMeterGreatPercentChange", m_fSuperMeterGreatPercentChange );
ini.GetValue( "Options", "SuperMeterGoodPercentChange", m_fSuperMeterGoodPercentChange );
ini.GetValue( "Options", "SuperMeterBooPercentChange", m_fSuperMeterBooPercentChange );
ini.GetValue( "Options", "SuperMeterMissPercentChange", m_fSuperMeterMissPercentChange );
ini.GetValue( "Options", "SuperMeterHitMinePercentChange", m_fSuperMeterHitMinePercentChange );
ini.GetValue( "Options", "SuperMeterOKPercentChange", m_fSuperMeterOKPercentChange );
ini.GetValue( "Options", "SuperMeterNGPercentChange", m_fSuperMeterNGPercentChange );
ini.GetValue( "Options", "MercifulSuperMeter", m_bMercifulSuperMeter );
ini.GetValue( "Options", "DelayedEscape", m_bDelayedEscape ); ini.GetValue( "Options", "DelayedEscape", m_bDelayedEscape );
ini.GetValue( "Options", "HiddenSongs", m_bHiddenSongs ); ini.GetValue( "Options", "HiddenSongs", m_bHiddenSongs );
ini.GetValue( "Options", "Vsync", m_bVsync ); ini.GetValue( "Options", "Vsync", m_bVsync );
@@ -488,15 +530,24 @@ void PrefsManager::SaveGlobalPrefsToDisk() const
ini.SetValue( "Options", "LifeDeltaGoodPercentChange", m_fLifeDeltaGoodPercentChange ); ini.SetValue( "Options", "LifeDeltaGoodPercentChange", m_fLifeDeltaGoodPercentChange );
ini.SetValue( "Options", "LifeDeltaBooPercentChange", m_fLifeDeltaBooPercentChange ); ini.SetValue( "Options", "LifeDeltaBooPercentChange", m_fLifeDeltaBooPercentChange );
ini.SetValue( "Options", "LifeDeltaMissPercentChange", m_fLifeDeltaMissPercentChange ); ini.SetValue( "Options", "LifeDeltaMissPercentChange", m_fLifeDeltaMissPercentChange );
ini.SetValue( "Options", "LifeDeltaHitMinePercentChange", m_fLifeDeltaHitMinePercentChange );
ini.SetValue( "Options", "LifeDeltaOKPercentChange", m_fLifeDeltaOKPercentChange ); ini.SetValue( "Options", "LifeDeltaOKPercentChange", m_fLifeDeltaOKPercentChange );
ini.SetValue( "Options", "LifeDeltaNGPercentChange", m_fLifeDeltaNGPercentChange ); ini.SetValue( "Options", "LifeDeltaNGPercentChange", m_fLifeDeltaNGPercentChange );
ini.SetValue( "Options", "LifeDeltaHitMinePercentChange", m_fLifeDeltaHitMinePercentChange ); ini.SetValue( "Options", "TugMeterMarvelousPercentChange", m_fTugMeterMarvelousPercentChange );
ini.SetValue( "Options", "TugMeterPerfectPercentChange", m_fTugMeterPerfectPercentChange );
ini.SetValue( "Options", "TugMeterGreatPercentChange", m_fTugMeterGreatPercentChange );
ini.SetValue( "Options", "TugMeterGoodPercentChange", m_fTugMeterGoodPercentChange );
ini.SetValue( "Options", "TugMeterBooPercentChange", m_fTugMeterBooPercentChange );
ini.SetValue( "Options", "TugMeterMissPercentChange", m_fTugMeterMissPercentChange );
ini.SetValue( "Options", "TugMeterHitMinePercentChange", m_fTugMeterHitMinePercentChange );
ini.SetValue( "Options", "TugMeterOKPercentChange", m_fTugMeterOKPercentChange );
ini.SetValue( "Options", "TugMeterNGPercentChange", m_fTugMeterNGPercentChange );
ini.SetValue( "Options", "RegenComboAfterFail", m_iRegenComboAfterFail ); ini.SetValue( "Options", "RegenComboAfterFail", m_iRegenComboAfterFail );
ini.SetValue( "Options", "RegenComboAfterMiss", m_iRegenComboAfterMiss ); ini.SetValue( "Options", "RegenComboAfterMiss", m_iRegenComboAfterMiss );
ini.SetValue( "Options", "MaxRegenComboAfterFail", m_iMaxRegenComboAfterFail ); ini.SetValue( "Options", "MaxRegenComboAfterFail", m_iMaxRegenComboAfterFail );
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", "MercifulMines", m_bMercifulMines ); ini.SetValue( "Options", "MercifulDrain", m_bMercifulDrain );
ini.SetValue( "Options", "PercentScoreMarvelousWeight", m_iPercentScoreMarvelousWeight ); ini.SetValue( "Options", "PercentScoreMarvelousWeight", m_iPercentScoreMarvelousWeight );
ini.SetValue( "Options", "PercentScorePerfectWeight", m_iPercentScorePerfectWeight ); ini.SetValue( "Options", "PercentScorePerfectWeight", m_iPercentScorePerfectWeight );
@@ -522,6 +573,17 @@ void PrefsManager::SaveGlobalPrefsToDisk() const
ini.SetValue( "Options", "GradePercentC", m_fGradePercentC ); ini.SetValue( "Options", "GradePercentC", m_fGradePercentC );
ini.SetValue( "Options", "GradePercentD", m_fGradePercentD ); ini.SetValue( "Options", "GradePercentD", m_fGradePercentD );
ini.SetValue( "Options", "SuperMeterMarvelousPercentChange",m_fSuperMeterMarvelousPercentChange );
ini.SetValue( "Options", "SuperMeterPerfectPercentChange", m_fSuperMeterPerfectPercentChange );
ini.SetValue( "Options", "SuperMeterGreatPercentChange", m_fSuperMeterGreatPercentChange );
ini.SetValue( "Options", "SuperMeterGoodPercentChange", m_fSuperMeterGoodPercentChange );
ini.SetValue( "Options", "SuperMeterBooPercentChange", m_fSuperMeterBooPercentChange );
ini.SetValue( "Options", "SuperMeterMissPercentChange", m_fSuperMeterMissPercentChange );
ini.SetValue( "Options", "SuperMeterHitMinePercentChange", m_fSuperMeterHitMinePercentChange );
ini.SetValue( "Options", "SuperMeterOKPercentChange", m_fSuperMeterOKPercentChange );
ini.SetValue( "Options", "SuperMeterNGPercentChange", m_fSuperMeterNGPercentChange );
ini.SetValue( "Options", "MercifulSuperMeter", m_bMercifulSuperMeter );
ini.SetValue( "Options", "DelayedEscape", m_bDelayedEscape ); ini.SetValue( "Options", "DelayedEscape", m_bDelayedEscape );
ini.SetValue( "Options", "HiddenSongs", m_bHiddenSongs ); ini.SetValue( "Options", "HiddenSongs", m_bHiddenSongs );
ini.SetValue( "Options", "Vsync", m_bVsync ); ini.SetValue( "Options", "Vsync", m_bVsync );
+26 -1
View File
@@ -55,6 +55,7 @@ public:
bool m_bShowDanger; bool m_bShowDanger;
int m_iNumArcadeStages; int m_iNumArcadeStages;
bool m_bEventMode; bool m_bEventMode;
float m_fJudgeWindowScale; float m_fJudgeWindowScale;
float m_fLifeDifficultyScale; float m_fLifeDifficultyScale;
float m_fJudgeWindowMarvelousSeconds; float m_fJudgeWindowMarvelousSeconds;
@@ -65,6 +66,7 @@ public:
float m_fJudgeWindowOKSeconds; float m_fJudgeWindowOKSeconds;
float m_fJudgeWindowMineSeconds; float m_fJudgeWindowMineSeconds;
float m_fJudgeWindowAttackSeconds; float m_fJudgeWindowAttackSeconds;
float m_fLifeDeltaMarvelousPercentChange; float m_fLifeDeltaMarvelousPercentChange;
float m_fLifeDeltaPerfectPercentChange; float m_fLifeDeltaPerfectPercentChange;
float m_fLifeDeltaGreatPercentChange; float m_fLifeDeltaGreatPercentChange;
@@ -74,12 +76,23 @@ public:
float m_fLifeDeltaHitMinePercentChange; float m_fLifeDeltaHitMinePercentChange;
float m_fLifeDeltaOKPercentChange; float m_fLifeDeltaOKPercentChange;
float m_fLifeDeltaNGPercentChange; float m_fLifeDeltaNGPercentChange;
// tug meter used in rave
float m_fTugMeterMarvelousPercentChange;
float m_fTugMeterPerfectPercentChange;
float m_fTugMeterGreatPercentChange;
float m_fTugMeterGoodPercentChange;
float m_fTugMeterBooPercentChange;
float m_fTugMeterMissPercentChange;
float m_fTugMeterHitMinePercentChange;
float m_fTugMeterOKPercentChange;
float m_fTugMeterNGPercentChange;
int m_iRegenComboAfterFail; int m_iRegenComboAfterFail;
int m_iRegenComboAfterMiss; int m_iRegenComboAfterMiss;
int m_iMaxRegenComboAfterFail; int m_iMaxRegenComboAfterFail;
int m_iMaxRegenComboAfterMiss; int m_iMaxRegenComboAfterMiss;
bool m_bTwoPlayerRecovery; bool m_bTwoPlayerRecovery;
bool m_bMercifulMines; bool m_bMercifulDrain;
int m_iPercentScoreMarvelousWeight; int m_iPercentScoreMarvelousWeight;
int m_iPercentScorePerfectWeight; int m_iPercentScorePerfectWeight;
int m_iPercentScoreGreatWeight; int m_iPercentScoreGreatWeight;
@@ -103,6 +116,18 @@ public:
float m_fGradePercentB; float m_fGradePercentB;
float m_fGradePercentC; float m_fGradePercentC;
float m_fGradePercentD; float m_fGradePercentD;
float m_fSuperMeterMarvelousPercentChange;
float m_fSuperMeterPerfectPercentChange;
float m_fSuperMeterGreatPercentChange;
float m_fSuperMeterGoodPercentChange;
float m_fSuperMeterBooPercentChange;
float m_fSuperMeterMissPercentChange;
float m_fSuperMeterHitMinePercentChange;
float m_fSuperMeterOKPercentChange;
float m_fSuperMeterNGPercentChange;
bool m_bMercifulSuperMeter;
bool m_bAutoPlay; bool m_bAutoPlay;
bool m_bDelayedEscape; bool m_bDelayedEscape;
bool m_bInstructions, m_bShowDontDie, m_bShowSelectGroup; bool m_bInstructions, m_bShowDontDie, m_bShowSelectGroup;
+59 -15
View File
@@ -16,6 +16,7 @@
#include "GameState.h" #include "GameState.h"
#include "Character.h" #include "Character.h"
#include "ScreenManager.h" #include "ScreenManager.h"
#include "PrefsManager.h"
CachedThemeMetricF ATTACK_DURATION_SECONDS ("ScoreKeeperRave","AttackDurationSeconds"); CachedThemeMetricF ATTACK_DURATION_SECONDS ("ScoreKeeperRave","AttackDurationSeconds");
@@ -35,28 +36,71 @@ void ScoreKeeperRave::OnNextSong( int iSongInCourseIndex, const Steps* pNotes, c
void ScoreKeeperRave::HandleTapScore( TapNoteScore score ) void ScoreKeeperRave::HandleTapScore( TapNoteScore score )
{ {
// FIXME float fPercentToMove;
switch( score )
{
case TNS_HIT_MINE: fPercentToMove = PREFSMAN->m_fSuperMeterHitMinePercentChange; break;
}
AddSuperMeterDelta( fPercentToMove );
} }
#define CROSSED( val ) (fOld < val && fNew >= val) #define CROSSED( val ) (fOld < val && fNew >= val)
#define CROSSED_ATTACK_LEVEL( level ) CROSSED(1.f/NUM_ATTACK_LEVELS*(level+1)) #define CROSSED_ATTACK_LEVEL( level ) CROSSED(1.f/NUM_ATTACK_LEVELS*(level+1))
void ScoreKeeperRave::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTapsInRow ) void ScoreKeeperRave::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTapsInRow )
{ {
AttackLevel oldAL = (AttackLevel)(int)GAMESTATE->m_fSuperMeter[m_PlayerNumber];
// TODO: Move these to prefs
float fPercentToMove; float fPercentToMove;
switch( scoreOfLastTap ) switch( scoreOfLastTap )
{ {
case TNS_MARVELOUS: fPercentToMove = +0.04f; break; case TNS_MARVELOUS: fPercentToMove = PREFSMAN->m_fSuperMeterMarvelousPercentChange; break;
case TNS_PERFECT: fPercentToMove = +0.04f; break; case TNS_PERFECT: fPercentToMove = PREFSMAN->m_fSuperMeterPerfectPercentChange; break;
case TNS_GREAT: fPercentToMove = +0.02f; break; case TNS_GREAT: fPercentToMove = PREFSMAN->m_fSuperMeterGreatPercentChange; break;
case TNS_GOOD: fPercentToMove = +0.00f; break; case TNS_GOOD: fPercentToMove = PREFSMAN->m_fSuperMeterGoodPercentChange; break;
case TNS_BOO: fPercentToMove = -0.08f; break; case TNS_BOO: fPercentToMove = PREFSMAN->m_fSuperMeterBooPercentChange; break;
case TNS_MISS: fPercentToMove = -0.16f; break; case TNS_MISS: fPercentToMove = PREFSMAN->m_fSuperMeterMissPercentChange; break;
default: ASSERT(0); fPercentToMove = +0.00f; break; default: ASSERT(0); fPercentToMove = +0.00f; break;
} }
AddSuperMeterDelta( fPercentToMove );
}
void ScoreKeeperRave::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScore )
{
float fPercentToMove;
switch( tapScore )
{
case TNS_HIT_MINE: fPercentToMove = PREFSMAN->m_fSuperMeterHitMinePercentChange; break;
}
AddSuperMeterDelta( fPercentToMove );
}
void ScoreKeeperRave::AddSuperMeterDelta( float fUnscaledPercentChange )
{
if( PREFSMAN->m_bMercifulDrain && fUnscaledPercentChange<0 )
{
float fSuperPercentage = GAMESTATE->m_fSuperMeter[m_PlayerNumber] / NUM_ATTACK_LEVELS;
fUnscaledPercentChange *= SCALE( fSuperPercentage, 0.f, 1.f, 0.5f, 1.f);
}
// more mercy: Grow super meter slower or faster depending on life.
if( PREFSMAN->m_bMercifulSuperMeter )
{
float fLifePercentage;
switch( m_PlayerNumber )
{
case PLAYER_1: fLifePercentage = GAMESTATE->m_fTugLifePercentP1; break;
case PLAYER_2: fLifePercentage = 1 - GAMESTATE->m_fTugLifePercentP1; break;
default: ASSERT(0);
}
if( fUnscaledPercentChange > 0 )
fUnscaledPercentChange *= SCALE( fLifePercentage, 0.f, 1.f, 1.8f, 0.2f);
else // fUnscaledPercentChange <= 0
fUnscaledPercentChange *= SCALE( fLifePercentage, 0.f, 1.f, 1.8f, 0.2f);
}
AttackLevel oldAL = (AttackLevel)(int)GAMESTATE->m_fSuperMeter[m_PlayerNumber];
float fPercentToMove = fUnscaledPercentChange;
GAMESTATE->m_fSuperMeter[m_PlayerNumber] += fPercentToMove * GAMESTATE->m_fSuperMeterGrowthScale[m_PlayerNumber]; GAMESTATE->m_fSuperMeter[m_PlayerNumber] += fPercentToMove * GAMESTATE->m_fSuperMeterGrowthScale[m_PlayerNumber];
CLAMP( GAMESTATE->m_fSuperMeter[m_PlayerNumber], 0.f, NUM_ATTACK_LEVELS ); CLAMP( GAMESTATE->m_fSuperMeter[m_PlayerNumber], 0.f, NUM_ATTACK_LEVELS );
@@ -64,16 +108,16 @@ void ScoreKeeperRave::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTa
if( newAL > oldAL ) if( newAL > oldAL )
{ {
LaunchAttack( oldAL );
if( newAL == NUM_ATTACK_LEVELS ) // hit upper bounds of meter if( newAL == NUM_ATTACK_LEVELS ) // hit upper bounds of meter
GAMESTATE->m_fSuperMeter[m_PlayerNumber] -= 1.f; GAMESTATE->m_fSuperMeter[m_PlayerNumber] -= 1.f;
LaunchAttack( oldAL );
} }
// mercy
if( fUnscaledPercentChange < 0 )
GAMESTATE->RemoveActiveAttacksForPlayer( m_PlayerNumber );
} }
void ScoreKeeperRave::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScore )
{
// FIXME
}
void ScoreKeeperRave::Update( float fDelta ) void ScoreKeeperRave::Update( float fDelta )
{ {
+1
View File
@@ -29,6 +29,7 @@ public:
protected: protected:
void LaunchAttack( AttackLevel al ); void LaunchAttack( AttackLevel al );
void AddSuperMeterDelta( float fUnscaledPercentChange );
RageSound m_soundLaunchAttack; RageSound m_soundLaunchAttack;
RageSound m_soundAttackEnding; RageSound m_soundAttackEnding;
+2 -12
View File
@@ -48,6 +48,7 @@
#include "LightsManager.h" #include "LightsManager.h"
#include "ProfileManager.h" #include "ProfileManager.h"
#include "StageStats.h" #include "StageStats.h"
#include "PlayerAI.h" // for NUM_SKILL_LEVELS
// //
// Defines // Defines
@@ -887,18 +888,7 @@ void ScreenGameplay::LoadNextSong()
else if( GAMESTATE->IsCpuPlayer(p) ) else if( GAMESTATE->IsCpuPlayer(p) )
{ {
GAMESTATE->m_PlayerController[p] = PC_CPU; GAMESTATE->m_PlayerController[p] = PC_CPU;
if( GAMESTATE->m_iCpuSkill[p] == -1 ) GAMESTATE->m_iCpuSkill[p] = SCALE( GAMESTATE->m_pCurNotes[p]->GetMeter(), MIN_METER, MAX_METER, 0, NUM_SKILL_LEVELS-1 );
{
switch( GAMESTATE->m_pCurNotes[p]->GetDifficulty() )
{
case DIFFICULTY_BEGINNER: GAMESTATE->m_iCpuSkill[p] = 1; break;
case DIFFICULTY_EASY: GAMESTATE->m_iCpuSkill[p] = 3; break;
case DIFFICULTY_MEDIUM: GAMESTATE->m_iCpuSkill[p] = 5; break;
case DIFFICULTY_HARD: GAMESTATE->m_iCpuSkill[p] = 7; break;
case DIFFICULTY_CHALLENGE: GAMESTATE->m_iCpuSkill[p] = 9; break;
default: ASSERT(0);
}
}
} }
else if( PREFSMAN->m_bAutoPlay ) else if( PREFSMAN->m_bAutoPlay )
GAMESTATE->m_PlayerController[p] = PC_AUTOPLAY; GAMESTATE->m_PlayerController[p] = PC_AUTOPLAY;