MercifulMines -> MercifulDrain
playbalance rave playbalance AI
This commit is contained in:
+12
-28
@@ -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
|
|
||||||
|
|||||||
@@ -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 );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 );
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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 )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user