diff --git a/Docs/Changelog_SSCformat.txt b/Docs/Changelog_SSCformat.txt index fb04d68912..baa1f8ecc7 100644 --- a/Docs/Changelog_SSCformat.txt +++ b/Docs/Changelog_SSCformat.txt @@ -11,6 +11,7 @@ ________________________________________________________________________________ [v0.7] - theDtTvB, Wolfman2000 * Split Timing officially implemented. +* #SPEEDS tag for modified scroll speeds. [v0.59] - Wolfman2000 * Typo fix: #RADARVALUES needed a semicolon at the end, not a colon. diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index daf91cd16f..fccd9d9425 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -8,6 +8,11 @@ ________________________________________________________________________________ StepMania 5.0 $NEXT | 20110xyy -------------------------------------------------------------------------------- +2011/05/15 +---------- +* Added #SPEEDS to the SSC format. This multiplies your scrolling speed during + gameplay, not replaces it (see mod attacks for replacing). [Wolfman2000] + 2011/05/14 ---------- * [ModIcon] Added StopWords metric. [AJ] diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index 4be294753a..ed69511b12 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -989,6 +989,7 @@ TimeSignatureColor=color("1,0.55,0,1") TickcountColor=color("0,1,0,1") ComboColor=color("0.55,1,0,1") LabelColor=color("1,0,0,1") +SpeedColor=color("0.5,1,1,1") # BPMIsLeftSide=true StopIsLeftSide=true @@ -998,15 +999,17 @@ TimeSignatureIsLeftSide=true TickcountIsLeftSide=false ComboIsLeftSide=false LabelIsLeftSide=false +SpeedIsLeftSide=false # BPMOffsetX=60 StopOffsetX=50 DelayOffsetX=120 WarpOffsetX=60 TimeSignatureOffsetX=30 -TickcountOffsetX=10 -ComboOffsetX=30 -LabelOffsetX=80 +TickcountOffsetX=105 +ComboOffsetX=95 +LabelOffsetX=120 +SpeedOffsetX=30 [PlayerStageStats] # Original CVS Grading diff --git a/src/NoteField.cpp b/src/NoteField.cpp index 6982277071..c3aa03708c 100644 --- a/src/NoteField.cpp +++ b/src/NoteField.cpp @@ -454,6 +454,7 @@ static ThemeMetric TIME_SIGNATURE_COLOR ( "NoteField", "TimeSignature static ThemeMetric TICKCOUNT_COLOR ( "NoteField", "TickcountColor" ); static ThemeMetric COMBO_COLOR ( "NoteField", "ComboColor" ); static ThemeMetric LABEL_COLOR ( "NoteField", "LabelColor" ); +static ThemeMetric SPEED_COLOR ( "NoteField", "SpeedColor" ); static ThemeMetric BPM_IS_LEFT_SIDE ( "NoteField", "BPMIsLeftSide" ); static ThemeMetric STOP_IS_LEFT_SIDE ( "NoteField", "StopIsLeftSide" ); static ThemeMetric DELAY_IS_LEFT_SIDE ( "NoteField", "DelayIsLeftSide" ); @@ -462,6 +463,7 @@ static ThemeMetric TIME_SIGNATURE_IS_LEFT_SIDE ( "NoteField", "TimeSignatu static ThemeMetric TICKCOUNT_IS_LEFT_SIDE ( "NoteField", "TickcountIsLeftSide" ); static ThemeMetric COMBO_IS_LEFT_SIDE ( "NoteField", "ComboIsLeftSide" ); static ThemeMetric LABEL_IS_LEFT_SIDE ( "NoteField", "LabelIsLeftSide" ); +static ThemeMetric SPEED_IS_LEFT_SIDE ( "NoteField", "SpeedIsLeftSide" ); static ThemeMetric BPM_OFFSETX ( "NoteField", "BPMOffsetX" ); static ThemeMetric STOP_OFFSETX ( "NoteField", "StopOffsetX" ); static ThemeMetric DELAY_OFFSETX ( "NoteField", "DelayOffsetX" ); @@ -470,7 +472,7 @@ static ThemeMetric TIME_SIGNATURE_OFFSETX ( "NoteField", "TimeSignatureOf static ThemeMetric TICKCOUNT_OFFSETX ( "NoteField", "TickcountOffsetX" ); static ThemeMetric COMBO_OFFSETX ( "NoteField", "ComboOffsetX" ); static ThemeMetric LABEL_OFFSETX ( "NoteField", "LabelOffsetX" ); - +static ThemeMetric SPEED_OFFSETX ( "NoteField", "SpeedOffsetX" ); void NoteField::DrawBPMText( const float fBeat, const float fBPM ) { @@ -600,6 +602,23 @@ void NoteField::DrawLabelText( const float fBeat, RString sLabel ) m_textMeasureNumber.Draw(); } +void NoteField::DrawSpeedText( const float fBeat, float fPercent, float fWait ) +{ + const float fYOffset = ArrowEffects::GetYOffset( m_pPlayerState, 0, fBeat ); + const float fYPos = ArrowEffects::GetYPos( m_pPlayerState, 0, fYOffset, m_fYReverseOffsetPixels ); + const float fZoom = ArrowEffects::GetZoom( m_pPlayerState ); + const float xBase = GetWidth()/2.f; + const float xOffset = SPEED_OFFSETX * fZoom; + + m_textMeasureNumber.SetZoom( fZoom ); + m_textMeasureNumber.SetHorizAlign( SPEED_IS_LEFT_SIDE ? align_right : align_left ); + m_textMeasureNumber.SetDiffuse( SPEED_COLOR ); + m_textMeasureNumber.SetGlow( RageColor(1,1,1,RageFastCos(RageTimer::GetTimeSinceStartFast()*2)/2+0.5f) ); + m_textMeasureNumber.SetText( ssprintf("%.6f\n--\n%.6f", fPercent, fWait) ); + m_textMeasureNumber.SetXY( (SPEED_IS_LEFT_SIDE ? -xBase - xOffset : xBase + xOffset), fYPos ); + m_textMeasureNumber.Draw(); +} + void NoteField::DrawAttackText( const float fBeat, const Attack &attack ) { const float fYOffset = ArrowEffects::GetYOffset( m_pPlayerState, 0, fBeat ); @@ -913,6 +932,19 @@ void NoteField::DrawPrimitives() DrawLabelText( fBeat, seg->m_sLabel ); } } + + if( GAMESTATE->m_bIsEditorStepTiming ) + { + FOREACH_CONST( SpeedSegment, timing.m_SpeedSegments, seg ) + { + if( seg->m_iStartRow >= iFirstRowToDraw && seg->m_iStartRow <= iLastRowToDraw ) + { + float fBeat = NoteRowToBeat(seg->m_iStartRow); + if( IS_ON_SCREEN(fBeat) ) + DrawSpeedText( fBeat, seg->m_fPercent, seg->m_fWait ); + } + } + } // Course mods text const Course *pCourse = GAMESTATE->m_pCurCourse; diff --git a/src/NoteField.h b/src/NoteField.h index c389676cfb..5cd582b322 100644 --- a/src/NoteField.h +++ b/src/NoteField.h @@ -64,6 +64,7 @@ protected: void DrawTickcountText( const float fBeat, int iTicks ); void DrawComboText( const float fBeat, int iCombo ); void DrawLabelText( const float fBeat, RString sLabel ); + void DrawSpeedText( const float fBeat, float fPercent, float fWait ); void DrawAttackText( const float fBeat, const Attack &attack ); void DrawBGChangeText( const float fBeat, const RString sNewBGName ); float GetWidth() const;