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
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
+29 -28
View File
@@ -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 );
}
+1
View File
@@ -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;
+3 -3
View File
@@ -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 );
}
+76 -14
View File
@@ -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 );
+26 -1
View File
@@ -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;
+59 -15
View File
@@ -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 )
{
+1
View File
@@ -29,6 +29,7 @@ public:
protected:
void LaunchAttack( AttackLevel al );
void AddSuperMeterDelta( float fUnscaledPercentChange );
RageSound m_soundLaunchAttack;
RageSound m_soundAttackEnding;
+2 -12
View File
@@ -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;