From e7f1204f41fb49a41a4ac2c8db7711a9c2eb5e2f Mon Sep 17 00:00:00 2001 From: Steven Towle Date: Sat, 11 Dec 2004 11:06:41 +0000 Subject: [PATCH] added random speed modifier (as an experiment for random variables in modifiers) --- stepmania/Themes/default/metrics.ini | 3 ++- stepmania/src/ArrowEffects.cpp | 11 +++++++++++ stepmania/src/PlayerOptions.cpp | 6 ++++++ stepmania/src/PlayerOptions.h | 2 ++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index ec13f5d136..4f60f96941 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -3669,7 +3669,7 @@ HelperY=SCREEN_CENTER_Y+80 [ScreenOptionsMaster] # Player options -Speed=11 +Speed=12 SpeedDefault=mod,1x Speed,1=mod,0.25x;name,x0.25 Speed,2=mod,0.50x;name,x0.50 @@ -3682,6 +3682,7 @@ Speed,8=mod,4x;name,x4 Speed,9=mod,8x;name,x8 Speed,10=mod,C200;name,C200 Speed,11=mod,C400;name,C400 +Speed,12=mod,1,300% randomspeed;name,Random Accel=6 AccelDefault=mod,no boost,no brake,no wave,no expand,no boomerang Accel,1=name,Off diff --git a/stepmania/src/ArrowEffects.cpp b/stepmania/src/ArrowEffects.cpp index a4cfd94924..079f93b8c6 100644 --- a/stepmania/src/ArrowEffects.cpp +++ b/stepmania/src/ArrowEffects.cpp @@ -83,6 +83,17 @@ float ArrowGetYOffset( PlayerNumber pn, int iCol, float fNoteBeat ) fYOffset += fAccels[PlayerOptions::ACCEL_BOOMERANG] * (fYOffset * SCALE( fYOffset, 0.f, SCREEN_HEIGHT, 1.5f, 0.5f )- fYOffset); float fScrollSpeed = GAMESTATE->m_CurrentPlayerOptions[pn].m_fScrollSpeed; + if ( GAMESTATE->m_CurrentPlayerOptions[pn].m_fRandomSpeed > 1.0f ) + { + int seed = GAMESTATE->m_iRoundSeed + ( BeatToNoteRow( fNoteBeat ) << 8 ) + (iCol * 100); + float soRandom = RandomFloat( seed ); + + fScrollSpeed = GAMESTATE->m_CurrentPlayerOptions[pn].m_fScrollSpeed * + SCALE( soRandom, + 0.0f, 1.0f, + 1.0f, GAMESTATE->m_CurrentPlayerOptions[pn].m_fRandomSpeed ); // min. scale shold be defined as a constatnt somewhere + } + if( fAccels[PlayerOptions::ACCEL_EXPAND] > 0 ) { diff --git a/stepmania/src/PlayerOptions.cpp b/stepmania/src/PlayerOptions.cpp index 000feaf2e1..ec10fffb96 100644 --- a/stepmania/src/PlayerOptions.cpp +++ b/stepmania/src/PlayerOptions.cpp @@ -29,6 +29,7 @@ void PlayerOptions::Init() m_fPerspectiveTilt = 0; m_SpeedfPerspectiveTilt = 1.0f; m_fSkew = 0; m_SpeedfSkew = 1.0f; m_fPassmark = 0; m_SpeedfPassmark = 1.0f; + m_fRandomSpeed = 1.0f; m_SpeedfRandomSpeed = 1.0f; ZERO( m_bTurns ); ZERO( m_bTransforms ); m_bProTiming = false; @@ -57,6 +58,7 @@ void PlayerOptions::Approach( const PlayerOptions& other, float fDeltaSeconds ) APP( fPerspectiveTilt ); APP( fSkew ); APP( fPassmark ); + APP( fRandomSpeed ); } static CString AddPart( float level, CString name ) @@ -170,6 +172,8 @@ CString PlayerOptions::GetString() const if( !m_sNoteSkin.empty() && m_sNoteSkin.CompareNoCase("default")!=0 ) sReturn += m_sNoteSkin + ", "; + if( m_fRandomSpeed > 1 ) + sReturn += "RandomSpeed, "; if( sReturn.GetLength() > 2 ) sReturn.erase( sReturn.GetLength()-2 ); // delete the trailing ", " return sReturn; @@ -309,6 +313,8 @@ void PlayerOptions::FromString( CString sOptions ) m_sNoteSkin = sBit; else if( sBit == "noteskin" && !on ) /* "no noteskin" */ m_sNoteSkin = "default"; + else if ( sBit == "randomspeed" ) SET_FLOAT( fRandomSpeed ) + } } diff --git a/stepmania/src/PlayerOptions.h b/stepmania/src/PlayerOptions.h index 9e96f47f5b..75c6ada01a 100644 --- a/stepmania/src/PlayerOptions.h +++ b/stepmania/src/PlayerOptions.h @@ -109,6 +109,8 @@ struct PlayerOptions float m_fPerspectiveTilt, m_SpeedfPerspectiveTilt; // -1 = near, 0 = overhead, +1 = space float m_fSkew, m_SpeedfSkew; // 0 = vanish point is in center of player, 1 = vanish point is in center of screen + float m_fRandomSpeed, m_SpeedfRandomSpeed; + /* If this is > 0, then the player must have life above this value at the end of * the song to pass. This is independent of SongOptions::m_FailType. */ float m_fPassmark, m_SpeedfPassmark;