Cat is back in the bag. Revert commits.

A-mods need to be tested more.

...and this is what happens when you forget to
stash changes before a merge. Lesson learned.
This commit is contained in:
Jason Felds
2013-04-19 21:49:55 -04:00
parent 459ffe027f
commit 20d94d4b7e
7 changed files with 7 additions and 178 deletions
@@ -59,7 +59,7 @@ end
local function ParseSpeedModFile(path)
local function Failure()
-- error; write a fallback mod file and return it
local fallbackString = "0.5x,1x,1.5x,2x,3x,4x,5x,6x,7x,8x,C250,a400,m550"
local fallbackString = "0.5x,1x,1.5x,2x,3x,4x,5x,6x,7x,8x,C250,C450,m550"
Trace("[CustomSpeedMods]: Could not read SpeedMods; writing fallback to "..path)
local file = RageFileUtil.CreateRageFile()
file:Open(path, 2)
+1 -27
View File
@@ -408,35 +408,9 @@ void Player::Init(
break;
}
// calculate A-mod speed here, so we can adjust properly on a per-song basis.
// XXX: can we find a better location for this?
// XXX: Yes, I copied the same comment practically. --wolfman2000
if (m_pPlayerState->m_PlayerOptions.GetCurrent().m_fAvgScrollBPM != 0)
{
float avgBPM;
if (GAMESTATE->IsCourseMode() )
{
vector<TrailEntry> &entries = GAMESTATE->m_pCurTrail[pn]->m_vEntries;
float foundBPMs = 0;
FOREACH_CONST( TrailEntry, entries, e )
{
foundBPMs += e->pSong->m_SongTiming.GetBPMUsedMostOften();
}
avgBPM = foundBPMs / entries.size();
}
else
{
avgBPM = GAMESTATE->m_pCurSong->m_SongTiming.GetBPMUsedMostOften();
}
// set an X-mod equal to Anum / avgBPM (e.g. A600 with 150 becomes 4x)
PO_GROUP_ASSIGN(m_pPlayerState->m_PlayerOptions, ModsLevel_Preferred, m_fScrollSpeed,
m_pPlayerState->m_PlayerOptions.GetPreferred().m_fAvgScrollBPM / avgBPM);
}
// calculate M-mod speed here, so we can adjust properly on a per-song basis.
// XXX: can we find a better location for this?
else if( m_pPlayerState->m_PlayerOptions.GetCurrent().m_fMaxScrollBPM != 0 )
if( m_pPlayerState->m_PlayerOptions.GetCurrent().m_fMaxScrollBPM != 0 )
{
DisplayBpms bpms;
+3 -44
View File
@@ -27,7 +27,6 @@ void PlayerOptions::Init()
{
m_bSetScrollSpeed = false;
m_fMaxScrollBPM = 0; m_SpeedfMaxScrollBPM = 1.0f;
m_fAvgScrollBPM = 0; m_SpeedfAvgScrollBPM = 1.0f;
m_fTimeSpacing = 0; m_SpeedfTimeSpacing = 1.0f;
m_fScrollSpeed = 1.0f; m_SpeedfScrollSpeed = 1.0f;
m_fScrollBPM = 200; m_SpeedfScrollBPM = 1.0f;
@@ -63,7 +62,6 @@ void PlayerOptions::Approach( const PlayerOptions& other, float fDeltaSeconds )
APPROACH( fTimeSpacing );
APPROACH( fScrollSpeed );
//APPROACH( fMaxScrollBPM ); // if uncommented, causes crashes. -aj
//APPROACH( fAvgScrollBPM ); // not sure if this crashes, but playing safe. -Wolfman2000
fapproach( m_fScrollBPM, other.m_fScrollBPM, fDeltaSeconds * other.m_SpeedfScrollBPM*150 );
for( int i=0; i<NUM_ACCELS; i++ )
APPROACH( fAccels[i] );
@@ -120,12 +118,7 @@ void PlayerOptions::GetMods( vector<RString> &AddTo, bool bForceNoteSkin ) const
if( !m_fTimeSpacing )
{
if( m_fAvgScrollBPM )
{
RString s = ssprintf( "a%.0f", m_fAvgScrollBPM );
AddTo.push_back( s );
}
else if( m_fMaxScrollBPM )
if( m_fMaxScrollBPM )
{
RString s = ssprintf( "m%.0f", m_fMaxScrollBPM );
AddTo.push_back( s );
@@ -349,7 +342,6 @@ bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut
SET_FLOAT( fTimeSpacing )
m_fTimeSpacing = 0;
m_fMaxScrollBPM = 0;
m_fAvgScrollBPM = 0;
}
else if( sscanf( sBit, "c%f", &level ) == 1 )
{
@@ -359,7 +351,6 @@ bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut
SET_FLOAT( fTimeSpacing )
m_fTimeSpacing = 1;
m_fMaxScrollBPM = 0;
m_fAvgScrollBPM = 0;
}
// oITG's m-mods
// XXX: will not properly tween, I don't think.
@@ -372,14 +363,6 @@ bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut
*/
SET_FLOAT( fMaxScrollBPM )
m_fTimeSpacing = 0;
m_fAvgScrollBPM = 0;
}
// Third Style inspired a-mods
else if( sscanf( sBit, "a%f", &level ) == 1 )
{
SET_FLOAT( fAvgScrollBPM );
m_fTimeSpacing = 0;
m_fMaxScrollBPM = 0;
}
else if( sBit == "clearall" ) Init();
@@ -683,7 +666,6 @@ bool PlayerOptions::operator==( const PlayerOptions &other ) const
COMPARE(m_fScrollSpeed);
COMPARE(m_fScrollBPM);
COMPARE(m_fMaxScrollBPM);
COMPARE(m_fAvgScrollBPM);
COMPARE(m_fRandomSpeed);
COMPARE(m_FailType);
COMPARE(m_bMuteOnError);
@@ -752,9 +734,9 @@ bool PlayerOptions::IsEasierForSongAndSteps( Song* pSong, Steps* pSteps, PlayerN
if( m_fCover ) return true;
// M-mods and a-mods make songs with indefinite BPMs easier because
// M-mods make songs with indefinite BPMs easier because
// they ensure that the song has a scrollable speed.
if( m_fMaxScrollBPM != 0 || m_fAvgScrollBPM != 0 )
if( m_fMaxScrollBPM != 0 )
{
// BPM display is obfuscated
// if( pSong->m_DisplayBPMType == DISPLAY_BPM_RANDOM )
@@ -848,7 +830,6 @@ RString PlayerOptions::GetSavedPrefsString() const
SAVE( m_fScrollSpeed );
SAVE( m_fScrollBPM );
SAVE( m_fMaxScrollBPM );
SAVE( m_fAvgScrollBPM );
SAVE( m_fScrolls[SCROLL_REVERSE] );
SAVE( m_fPerspectiveTilt );
SAVE( m_bTransforms[TRANSFORM_NOHOLDS] );
@@ -878,7 +859,6 @@ void PlayerOptions::ResetPrefs( ResetPrefsType type )
CPY( m_fScrollSpeed );
CPY( m_fScrollBPM );
CPY( m_fMaxScrollBPM );
CPY( m_fAvgScrollBPM );
break;
case saved_prefs_invalid_for_course:
break;
@@ -953,7 +933,6 @@ public:
p->m_fTimeSpacing = FArg(1);
p->m_fTimeSpacing = 1;
p->m_fMaxScrollBPM = 0;
p->m_fAvgScrollBPM = 0;
return 0;
}
@@ -970,7 +949,6 @@ public:
p->m_fScrollSpeed = FArg(1);
p->m_fTimeSpacing = 0;
p->m_fMaxScrollBPM = 0;
p->m_fAvgScrollBPM = 0;
return 0;
}
@@ -987,23 +965,6 @@ public:
{
p->m_fMaxScrollBPM = FArg(1);
p->m_fTimeSpacing = 0;
p->m_fAvgScrollBPM = 0;
return 0;
}
static int GetAMod( T * p, lua_State * L )
{
if (!p->m_fTimeSpacing && p->m_fAvgScrollBPM)
lua_pushnumber(L, p->m_fAvgScrollBPM);
else
lua_pushnil(L);
return 1;
}
static int SetAMod( T * p, lua_State * L )
{
p->m_fAvgScrollBPM = FArg(1);
p->m_fTimeSpacing = 0;
p->m_fMaxScrollBPM = 0;
return 0;
}
@@ -1224,8 +1185,6 @@ public:
ADD_METHOD( SetXMod );
ADD_METHOD( GetMMod );
ADD_METHOD( SetMMod );
ADD_METHOD( GetAMod );
ADD_METHOD( SetAMod );
// Accel
ADD_METHOD( GetBoost );
+1 -3
View File
@@ -22,7 +22,6 @@ public:
PlayerOptions(): m_bSetScrollSpeed(false),
m_fTimeSpacing(0), m_SpeedfTimeSpacing(1.0f),
m_fMaxScrollBPM(0), m_SpeedfMaxScrollBPM(1.0f),
m_fAvgScrollBPM(0), m_SpeedfAvgScrollBPM(1.0f),
m_fScrollSpeed(1.0f), m_SpeedfScrollSpeed(1.0f),
m_fScrollBPM(200), m_SpeedfScrollBPM(1.0f),
m_fDark(0), m_SpeedfDark(1.0f),
@@ -159,9 +158,8 @@ public:
/* All floats have a corresponding speed setting, which determines how fast
* PlayerOptions::Approach approaches. */
bool m_bSetScrollSpeed; // true if the scroll speed was set by FromString
float m_fTimeSpacing, m_SpeedfTimeSpacing; // instead of Beat spacing (CMods, mMods, aMods)
float m_fTimeSpacing, m_SpeedfTimeSpacing; // instead of Beat spacing (CMods, mMods)
float m_fMaxScrollBPM, m_SpeedfMaxScrollBPM;
float m_fAvgScrollBPM, m_SpeedfAvgScrollBPM;
float m_fScrollSpeed, m_SpeedfScrollSpeed; // used if !m_bTimeSpacing (xMods)
float m_fScrollBPM, m_SpeedfScrollBPM; // used if m_bTimeSpacing (CMod)
float m_fAccels[NUM_ACCELS], m_SpeedfAccels[NUM_ACCELS];
-10
View File
@@ -847,13 +847,9 @@ void Song::ReCalculateRadarValuesAndLastSecond(bool fromCache, bool duringCache)
{
if( fromCache && this->GetFirstSecond() >= 0 && this->GetLastSecond() > 0 )
{
this->m_SongTiming.SetLastRowFromTime(this->GetLastSecond());
// this is loaded from cache, then we just have to calculate the radar values.
for( unsigned i=0; i<m_vpSteps.size(); i++ )
{
m_vpSteps[i]->CalculateRadarValues( m_fMusicLengthSeconds );
m_vpSteps[i]->m_Timing.SetLastRowFromTime(this->GetLastSecond());
}
return;
}
@@ -908,12 +904,6 @@ void Song::ReCalculateRadarValuesAndLastSecond(bool fromCache, bool duringCache)
// Yes, for some reason we can have freaky stuff take place here.
this->firstSecond = (localFirst < localLast) ? localFirst : 0;
this->lastSecond = localLast;
this->m_SongTiming.SetLastRowFromTime(localLast);
for( unsigned i = 0; i < this->m_vpSteps.size(); ++i)
{
this->m_vpSteps[i]->m_Timing.SetLastRowFromTime(localLast);
}
}
// Return whether the song is playable in the given style.
+1 -86
View File
@@ -9,7 +9,7 @@
TimingSegment* GetSegmentAtRow( int iNoteRow, TimingSegmentType tst );
TimingData::TimingData(float fOffset) : m_fBeat0OffsetInSeconds(fOffset), lastRow(-1)
TimingData::TimingData(float fOffset) : m_fBeat0OffsetInSeconds(fOffset)
{
}
@@ -19,7 +19,6 @@ void TimingData::Copy( const TimingData& cpy )
Clear();
m_fBeat0OffsetInSeconds = cpy.m_fBeat0OffsetInSeconds;
lastRow = cpy.lastRow;
m_sFile = cpy.m_sFile;
FOREACH_TimingSegmentType( tst )
@@ -170,90 +169,6 @@ struct ts_less : binary_function <TimingSegment*, TimingSegment*, bool>
}
};
void TimingData::SetLastRowFromTime(float seconds)
{
float beat = 0;
// TODO: Address this.
float dummy1, dummy5;
bool dummy2, dummy3;
int dummy4;
GetBeatAndBPSFromElapsedTime(seconds, beat, dummy1, dummy2, dummy3, dummy4, dummy5);
this->lastRow = BeatToNoteRow(beat);
}
float TimingData::GetBPMUsedMostOften()
{
if (this == NULL)
{
return -1; // not taking ANY chances.
}
if (!HasBpmChanges())
{
return GetBPMSegmentAtRow(0)->GetBPM();
}
// TODO: Find a way to make this const compatible.
vector<TimingSegment *> &bpms = m_avpTimingSegments[SEGMENT_BPM];
map<float, float> lengths;
map<float, float>::iterator location;
BPMSegment *prev = ToBPM(GetBPMSegmentAtRow(0));
BPMSegment *curr = ToBPM(bpms[1]);
BPMSegment *next = curr;
float runningTime = GetElapsedTimeFromBeat(next->GetBeat());
lengths.insert(make_pair(prev->GetBPM(), runningTime));
for( unsigned i = 1; i < bpms.size(); ++i )
{
bool isLast = (i + 1 == bpms.size());
if (isLast)
{
runningTime = GetElapsedTimeFromBeat(NoteRowToBeat(lastRow));
}
else
{
next = ToBPM(bpms[i + 1]);
runningTime = GetElapsedTimeFromBeat(next->GetBeat());
}
float curBPM = curr->GetBPM();
location = lengths.find(curBPM);
float elapsedTime = runningTime - lengths[prev->GetBPM()];
if (location == lengths.end())
{
lengths[curBPM] = elapsedTime;
}
else
{
lengths[curBPM] += elapsedTime;
}
if (!isLast)
{
prev = curr;
curr = next;
}
}
// at this point, go through the map.
float highestKey = -1;
float highestValue = -1;
// TODO: C++11 this.
FOREACHM_CONST(float, float, lengths, it)
{
if (it->second > highestValue)
{
highestValue = it->second;
highestKey = it->first;
}
}
return highestKey;
}
// Multiply the BPM in the range [fStartBeat,fEndBeat) by fFactor.
void TimingData::MultiplyBPMInBeatRange( int iStartIndex, int iEndIndex, float fFactor )
{
-7
View File
@@ -286,8 +286,6 @@ public:
bool IsJudgableAtRow( int row ) const { return !IsWarpAtRow(row) && !IsFakeAtRow(row); }
bool IsJudgableAtBeat( float beat ) const { return IsJudgableAtRow( BeatToNoteRow( beat ) ); }
float GetBPMUsedMostOften();
void MultiplyBPMInBeatRange( int iStartIndex, int iEndIndex, float fFactor );
void NoteRowToMeasureAndBeat( int iNoteRow, int &iMeasureIndexOut, int &iBeatIndexOut, int &iRowsRemainder ) const;
@@ -378,8 +376,6 @@ public:
return m_avpTimingSegments[tst];
}
void SetLastRowFromTime(float seconds);
/**
* @brief Tidy up the timing data, e.g. provide default BPMs, labels, tickcounts.
* @param allowEmpty true if completely empty TimingData should be left
@@ -400,9 +396,6 @@ public:
/** @brief The initial offset of a song. */
float m_fBeat0OffsetInSeconds;
/** @brief The row of the final song. */
int lastRow;
// XXX: this breaks encapsulation. get rid of it ASAP
vector<RString> ToVectorString(TimingSegmentType tst, int dec = 6) const;
protected: