MercifulMines -> MercifulDrain
playbalance rave playbalance AI
This commit is contained in:
+12
-28
@@ -2,7 +2,7 @@
|
||||
MissWeight=4
|
||||
BooWeight=4
|
||||
GoodWeight=4
|
||||
GreatWeight=40
|
||||
GreatWeight=30
|
||||
PerfectWeight=30
|
||||
MarvelousWeight=30
|
||||
|
||||
@@ -10,7 +10,7 @@ MarvelousWeight=30
|
||||
MissWeight=3
|
||||
BooWeight=3
|
||||
GoodWeight=3
|
||||
GreatWeight=38
|
||||
GreatWeight=30
|
||||
PerfectWeight=30
|
||||
MarvelousWeight=30
|
||||
|
||||
@@ -18,7 +18,7 @@ MarvelousWeight=30
|
||||
MissWeight=2
|
||||
BooWeight=2
|
||||
GoodWeight=2
|
||||
GreatWeight=36
|
||||
GreatWeight=30
|
||||
PerfectWeight=30
|
||||
MarvelousWeight=30
|
||||
|
||||
@@ -26,15 +26,15 @@ MarvelousWeight=30
|
||||
MissWeight=2
|
||||
BooWeight=1
|
||||
GoodWeight=2
|
||||
GreatWeight=34
|
||||
GreatWeight=30
|
||||
PerfectWeight=30
|
||||
MarvelousWeight=30
|
||||
|
||||
[Skill4]
|
||||
MissWeight=1
|
||||
BooWeight=1
|
||||
GoodWeight=2
|
||||
GreatWeight=32
|
||||
GoodWeight=4
|
||||
GreatWeight=28
|
||||
PerfectWeight=30
|
||||
MarvelousWeight=30
|
||||
|
||||
@@ -42,7 +42,7 @@ MarvelousWeight=30
|
||||
MissWeight=1
|
||||
BooWeight=1
|
||||
GoodWeight=1
|
||||
GreatWeight=30
|
||||
GreatWeight=26
|
||||
PerfectWeight=30
|
||||
MarvelousWeight=30
|
||||
|
||||
@@ -50,15 +50,15 @@ MarvelousWeight=30
|
||||
MissWeight=1
|
||||
BooWeight=
|
||||
GoodWeight=1
|
||||
GreatWeight=28
|
||||
PerfectWeight=36
|
||||
MarvelousWeight=30
|
||||
GreatWeight=24
|
||||
PerfectWeight=30
|
||||
MarvelousWeight=35
|
||||
|
||||
[Skill7]
|
||||
MissWeight=
|
||||
BooWeight=
|
||||
GoodWeight=1
|
||||
GreatWeight=26
|
||||
GreatWeight=22
|
||||
PerfectWeight=30
|
||||
MarvelousWeight=40
|
||||
|
||||
@@ -82,22 +82,6 @@ MarvelousWeight=60
|
||||
MissWeight=
|
||||
BooWeight=
|
||||
GoodWeight=
|
||||
GreatWeight=
|
||||
GreatWeight=5
|
||||
PerfectWeight=30
|
||||
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;
|
||||
switch( score )
|
||||
{
|
||||
case TNS_MARVELOUS: fPercentToMove = PREFSMAN->m_fLifeDeltaMarvelousPercentChange; break;
|
||||
case TNS_PERFECT: fPercentToMove = PREFSMAN->m_fLifeDeltaPerfectPercentChange; break;
|
||||
case TNS_GREAT: fPercentToMove = PREFSMAN->m_fLifeDeltaGreatPercentChange; break;
|
||||
case TNS_GOOD: fPercentToMove = PREFSMAN->m_fLifeDeltaGoodPercentChange; break;
|
||||
case TNS_BOO: fPercentToMove = PREFSMAN->m_fLifeDeltaBooPercentChange; break;
|
||||
case TNS_MISS: fPercentToMove = PREFSMAN->m_fLifeDeltaMissPercentChange; break;
|
||||
case TNS_MARVELOUS: fPercentToMove = PREFSMAN->m_fTugMeterMarvelousPercentChange; break;
|
||||
case TNS_PERFECT: fPercentToMove = PREFSMAN->m_fTugMeterPerfectPercentChange; break;
|
||||
case TNS_GREAT: fPercentToMove = PREFSMAN->m_fTugMeterGreatPercentChange; break;
|
||||
case TNS_GOOD: fPercentToMove = PREFSMAN->m_fTugMeterGoodPercentChange; break;
|
||||
case TNS_BOO: fPercentToMove = PREFSMAN->m_fTugMeterBooPercentChange; break;
|
||||
case TNS_MISS: fPercentToMove = PREFSMAN->m_fTugMeterMissPercentChange; break;
|
||||
default: ASSERT(0); break;
|
||||
}
|
||||
|
||||
switch( pn )
|
||||
{
|
||||
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 );
|
||||
ChangeLife( pn, fPercentToMove );
|
||||
}
|
||||
|
||||
void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, HoldNoteScore score, TapNoteScore tscore )
|
||||
@@ -97,32 +90,40 @@ void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, HoldNoteScore score, Tap
|
||||
float fPercentToMove = 0;
|
||||
switch( score )
|
||||
{
|
||||
case HNS_OK: fPercentToMove = PREFSMAN->m_fLifeDeltaOKPercentChange; break;
|
||||
case HNS_NG: fPercentToMove = PREFSMAN->m_fLifeDeltaNGPercentChange; break;
|
||||
case HNS_OK: fPercentToMove = PREFSMAN->m_fTugMeterOKPercentChange; break;
|
||||
case HNS_NG: fPercentToMove = PREFSMAN->m_fTugMeterNGPercentChange; break;
|
||||
default: ASSERT(0); break;
|
||||
}
|
||||
|
||||
switch( pn )
|
||||
{
|
||||
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 );
|
||||
ChangeLife( pn, fPercentToMove );
|
||||
}
|
||||
|
||||
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 )
|
||||
{
|
||||
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 );
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ public:
|
||||
virtual bool IsFailing( PlayerNumber pn ) { return false; };
|
||||
|
||||
protected:
|
||||
void ChangeLife( PlayerNumber pn, float fPercentToMove );
|
||||
|
||||
MeterDisplay m_Stream[NUM_PLAYERS];
|
||||
Sprite m_sprSeparator;
|
||||
|
||||
@@ -380,6 +380,9 @@ void LifeMeterBar::ChangeLife( HoldNoteScore score, TapNoteScore tscore )
|
||||
|
||||
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
|
||||
if( fDeltaLife >= 0 )
|
||||
{
|
||||
@@ -456,9 +459,6 @@ void LifeMeterBar::ChangeLifeMine()
|
||||
ASSERT(0);
|
||||
}
|
||||
|
||||
if( PREFSMAN->m_bMercifulMines )
|
||||
fDeltaLife *= SCALE( m_fLifePercentage, 0.f, 1.f, 0.5f, 1.f);
|
||||
|
||||
ChangeLife( fDeltaLife );
|
||||
}
|
||||
|
||||
|
||||
@@ -70,21 +70,32 @@ PrefsManager::PrefsManager()
|
||||
m_fJudgeWindowOKSeconds = 0.250f; // allow enough time to take foot off and put back on
|
||||
m_fJudgeWindowMineSeconds = 0.090f; // same as great
|
||||
m_fJudgeWindowAttackSeconds = 0.135f;
|
||||
m_fLifeDeltaMarvelousPercentChange = +0.008f;
|
||||
m_fLifeDeltaPerfectPercentChange = +0.008f;
|
||||
m_fLifeDeltaGreatPercentChange = +0.004f;
|
||||
m_fLifeDeltaGoodPercentChange = +0.000f;
|
||||
m_fLifeDeltaBooPercentChange = -0.040f;
|
||||
m_fLifeDeltaMissPercentChange = -0.080f;
|
||||
m_fLifeDeltaOKPercentChange = +0.008f;
|
||||
m_fLifeDeltaNGPercentChange = -0.080f;
|
||||
m_fLifeDeltaHitMinePercentChange = -0.160f;
|
||||
m_fLifeDeltaMarvelousPercentChange = +0.008f;
|
||||
m_fLifeDeltaPerfectPercentChange = +0.008f;
|
||||
m_fLifeDeltaGreatPercentChange = +0.004f;
|
||||
m_fLifeDeltaGoodPercentChange = +0.000f;
|
||||
m_fLifeDeltaBooPercentChange = -0.040f;
|
||||
m_fLifeDeltaMissPercentChange = -0.080f;
|
||||
m_fLifeDeltaHitMinePercentChange = -0.160f;
|
||||
m_fLifeDeltaOKPercentChange = +0.008f;
|
||||
m_fLifeDeltaNGPercentChange = -0.080f;
|
||||
|
||||
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_iRegenComboAfterMiss = 5; // cumulative
|
||||
m_iMaxRegenComboAfterFail = 10;
|
||||
m_iMaxRegenComboAfterMiss = 10;
|
||||
m_bTwoPlayerRecovery = true;
|
||||
m_bMercifulMines = true;
|
||||
m_bMercifulDrain = true;
|
||||
|
||||
m_iPercentScoreMarvelousWeight = 3;
|
||||
m_iPercentScorePerfectWeight = 2;
|
||||
@@ -109,6 +120,17 @@ PrefsManager::PrefsManager()
|
||||
m_fGradePercentB = 0.65f;
|
||||
m_fGradePercentC = 0.45f;
|
||||
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_bInstructions = true;
|
||||
@@ -304,15 +326,24 @@ void PrefsManager::ReadGlobalPrefsFromDisk()
|
||||
ini.GetValue( "Options", "LifeDeltaGoodPercentChange", m_fLifeDeltaGoodPercentChange );
|
||||
ini.GetValue( "Options", "LifeDeltaBooPercentChange", m_fLifeDeltaBooPercentChange );
|
||||
ini.GetValue( "Options", "LifeDeltaMissPercentChange", m_fLifeDeltaMissPercentChange );
|
||||
ini.GetValue( "Options", "LifeDeltaHitMinePercentChange", m_fLifeDeltaHitMinePercentChange );
|
||||
ini.GetValue( "Options", "LifeDeltaOKPercentChange", m_fLifeDeltaOKPercentChange );
|
||||
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", "RegenComboAfterMiss", m_iRegenComboAfterMiss );
|
||||
ini.GetValue( "Options", "MaxRegenComboAfterFail", m_iMaxRegenComboAfterFail );
|
||||
ini.GetValue( "Options", "MaxRegenComboAfterMiss", m_iMaxRegenComboAfterMiss );
|
||||
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", "PercentScorePerfectWeight", m_iPercentScorePerfectWeight );
|
||||
@@ -338,6 +369,17 @@ void PrefsManager::ReadGlobalPrefsFromDisk()
|
||||
ini.GetValue( "Options", "GradePercentC", m_fGradePercentC );
|
||||
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", "HiddenSongs", m_bHiddenSongs );
|
||||
ini.GetValue( "Options", "Vsync", m_bVsync );
|
||||
@@ -488,15 +530,24 @@ void PrefsManager::SaveGlobalPrefsToDisk() const
|
||||
ini.SetValue( "Options", "LifeDeltaGoodPercentChange", m_fLifeDeltaGoodPercentChange );
|
||||
ini.SetValue( "Options", "LifeDeltaBooPercentChange", m_fLifeDeltaBooPercentChange );
|
||||
ini.SetValue( "Options", "LifeDeltaMissPercentChange", m_fLifeDeltaMissPercentChange );
|
||||
ini.SetValue( "Options", "LifeDeltaHitMinePercentChange", m_fLifeDeltaHitMinePercentChange );
|
||||
ini.SetValue( "Options", "LifeDeltaOKPercentChange", m_fLifeDeltaOKPercentChange );
|
||||
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", "RegenComboAfterMiss", m_iRegenComboAfterMiss );
|
||||
ini.SetValue( "Options", "MaxRegenComboAfterFail", m_iMaxRegenComboAfterFail );
|
||||
ini.SetValue( "Options", "MaxRegenComboAfterMiss", m_iMaxRegenComboAfterMiss );
|
||||
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", "PercentScorePerfectWeight", m_iPercentScorePerfectWeight );
|
||||
@@ -522,6 +573,17 @@ void PrefsManager::SaveGlobalPrefsToDisk() const
|
||||
ini.SetValue( "Options", "GradePercentC", m_fGradePercentC );
|
||||
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", "HiddenSongs", m_bHiddenSongs );
|
||||
ini.SetValue( "Options", "Vsync", m_bVsync );
|
||||
|
||||
@@ -55,6 +55,7 @@ public:
|
||||
bool m_bShowDanger;
|
||||
int m_iNumArcadeStages;
|
||||
bool m_bEventMode;
|
||||
|
||||
float m_fJudgeWindowScale;
|
||||
float m_fLifeDifficultyScale;
|
||||
float m_fJudgeWindowMarvelousSeconds;
|
||||
@@ -65,6 +66,7 @@ public:
|
||||
float m_fJudgeWindowOKSeconds;
|
||||
float m_fJudgeWindowMineSeconds;
|
||||
float m_fJudgeWindowAttackSeconds;
|
||||
|
||||
float m_fLifeDeltaMarvelousPercentChange;
|
||||
float m_fLifeDeltaPerfectPercentChange;
|
||||
float m_fLifeDeltaGreatPercentChange;
|
||||
@@ -74,12 +76,23 @@ public:
|
||||
float m_fLifeDeltaHitMinePercentChange;
|
||||
float m_fLifeDeltaOKPercentChange;
|
||||
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_iRegenComboAfterMiss;
|
||||
int m_iMaxRegenComboAfterFail;
|
||||
int m_iMaxRegenComboAfterMiss;
|
||||
bool m_bTwoPlayerRecovery;
|
||||
bool m_bMercifulMines;
|
||||
bool m_bMercifulDrain;
|
||||
|
||||
int m_iPercentScoreMarvelousWeight;
|
||||
int m_iPercentScorePerfectWeight;
|
||||
int m_iPercentScoreGreatWeight;
|
||||
@@ -103,6 +116,18 @@ public:
|
||||
float m_fGradePercentB;
|
||||
float m_fGradePercentC;
|
||||
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_bDelayedEscape;
|
||||
bool m_bInstructions, m_bShowDontDie, m_bShowSelectGroup;
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "GameState.h"
|
||||
#include "Character.h"
|
||||
#include "ScreenManager.h"
|
||||
#include "PrefsManager.h"
|
||||
|
||||
CachedThemeMetricF ATTACK_DURATION_SECONDS ("ScoreKeeperRave","AttackDurationSeconds");
|
||||
|
||||
@@ -35,28 +36,71 @@ void ScoreKeeperRave::OnNextSong( int iSongInCourseIndex, const Steps* pNotes, c
|
||||
|
||||
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_ATTACK_LEVEL( level ) CROSSED(1.f/NUM_ATTACK_LEVELS*(level+1))
|
||||
void ScoreKeeperRave::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTapsInRow )
|
||||
{
|
||||
AttackLevel oldAL = (AttackLevel)(int)GAMESTATE->m_fSuperMeter[m_PlayerNumber];
|
||||
|
||||
// TODO: Move these to prefs
|
||||
float fPercentToMove;
|
||||
switch( scoreOfLastTap )
|
||||
{
|
||||
case TNS_MARVELOUS: fPercentToMove = +0.04f; break;
|
||||
case TNS_PERFECT: fPercentToMove = +0.04f; break;
|
||||
case TNS_GREAT: fPercentToMove = +0.02f; break;
|
||||
case TNS_GOOD: fPercentToMove = +0.00f; break;
|
||||
case TNS_BOO: fPercentToMove = -0.08f; break;
|
||||
case TNS_MISS: fPercentToMove = -0.16f; break;
|
||||
case TNS_MARVELOUS: fPercentToMove = PREFSMAN->m_fSuperMeterMarvelousPercentChange; break;
|
||||
case TNS_PERFECT: fPercentToMove = PREFSMAN->m_fSuperMeterPerfectPercentChange; break;
|
||||
case TNS_GREAT: fPercentToMove = PREFSMAN->m_fSuperMeterGreatPercentChange; break;
|
||||
case TNS_GOOD: fPercentToMove = PREFSMAN->m_fSuperMeterGoodPercentChange; break;
|
||||
case TNS_BOO: fPercentToMove = PREFSMAN->m_fSuperMeterBooPercentChange; break;
|
||||
case TNS_MISS: fPercentToMove = PREFSMAN->m_fSuperMeterMissPercentChange; 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];
|
||||
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 )
|
||||
{
|
||||
LaunchAttack( oldAL );
|
||||
if( newAL == NUM_ATTACK_LEVELS ) // hit upper bounds of meter
|
||||
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 )
|
||||
{
|
||||
|
||||
@@ -29,6 +29,7 @@ public:
|
||||
|
||||
protected:
|
||||
void LaunchAttack( AttackLevel al );
|
||||
void AddSuperMeterDelta( float fUnscaledPercentChange );
|
||||
|
||||
RageSound m_soundLaunchAttack;
|
||||
RageSound m_soundAttackEnding;
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
#include "LightsManager.h"
|
||||
#include "ProfileManager.h"
|
||||
#include "StageStats.h"
|
||||
#include "PlayerAI.h" // for NUM_SKILL_LEVELS
|
||||
|
||||
//
|
||||
// Defines
|
||||
@@ -887,18 +888,7 @@ void ScreenGameplay::LoadNextSong()
|
||||
else if( GAMESTATE->IsCpuPlayer(p) )
|
||||
{
|
||||
GAMESTATE->m_PlayerController[p] = PC_CPU;
|
||||
if( GAMESTATE->m_iCpuSkill[p] == -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);
|
||||
}
|
||||
}
|
||||
GAMESTATE->m_iCpuSkill[p] = SCALE( GAMESTATE->m_pCurNotes[p]->GetMeter(), MIN_METER, MAX_METER, 0, NUM_SKILL_LEVELS-1 );
|
||||
}
|
||||
else if( PREFSMAN->m_bAutoPlay )
|
||||
GAMESTATE->m_PlayerController[p] = PC_AUTOPLAY;
|
||||
|
||||
Reference in New Issue
Block a user