diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index f219111c37..8d6ebb820b 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -19,6 +19,8 @@ StepMania 5.0 Preview 2 | 201106?? * [ScreenEdit] Allow jumping between all segments, not just Label segments. You still use Ctrl + ,/. to jump, but now you use Ctrl + N/M to cycle the segments. By default, it starts with Label. [Wolfman2000] +* [PlayerOptions] No longer display StepAttacks in the player's list. + Instead, show NoAttacks if attacks are disabled. [Wolfman2000] 2011/06/24 ---------- diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index e814935e90..1632ddae96 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -2355,10 +2355,10 @@ Mines,3="mod,mines;name,Add" Mines,4="mod,attackmines;name,AttackMines" Attacks="3" -AttacksDefault="mod,stepattacks" -Attacks,1="name,StepAttacks" +AttacksDefault="mod,no randomattacks, no noattacks" +Attacks,1="name,On" Attacks,2="mod,randomattacks;name,RandomAttacks" -Attacks,3="mod,no randomattacks,no stepattacks;name,Off" +Attacks,3="mod,noattacks;name,Off" PlayerAutoPlay="2" PlayerAutoPlayDefault="mod,no playerautoplay" diff --git a/src/PlayerOptions.cpp b/src/PlayerOptions.cpp index 76005c156b..5e4aa5666d 100644 --- a/src/PlayerOptions.cpp +++ b/src/PlayerOptions.cpp @@ -37,7 +37,7 @@ void PlayerOptions::Init() m_fBlind = 0; m_SpeedfBlind = 1.0f; m_fCover = 0; m_SpeedfCover = 1.0f; m_fRandAttack = 0; m_SpeedfRandAttack = 1.0f; - m_fStepAttack = 1; m_SpeedfStepAttack = 1.0f; + m_fNoAttack = 0; m_SpeedfNoAttack = 1.0f; m_fPlayerAutoPlay = 0; m_SpeedfPlayerAutoPlay = 1.0f; m_bSetTiltOrSkew = false; m_fPerspectiveTilt = 0; m_SpeedfPerspectiveTilt = 1.0f; @@ -73,7 +73,7 @@ void PlayerOptions::Approach( const PlayerOptions& other, float fDeltaSeconds ) APPROACH( fBlind ); APPROACH( fCover ); APPROACH( fRandAttack ); - APPROACH( fStepAttack ); + APPROACH( fNoAttack ); APPROACH( fPlayerAutoPlay ); APPROACH( fPerspectiveTilt ); APPROACH( fSkew ); @@ -180,7 +180,7 @@ void PlayerOptions::GetMods( vector &AddTo, bool bForceNoteSkin ) const AddPart( AddTo, m_fCover, "Cover" ); AddPart( AddTo, m_fRandAttack, "RandomAttacks" ); - AddPart( AddTo, m_fStepAttack, "StepAttacks" ); + AddPart( AddTo, m_fNoAttack, "NoAttacks" ); AddPart( AddTo, m_fPlayerAutoPlay, "PlayerAutoPlay" ); AddPart( AddTo, m_fPassmark, "Passmark" ); @@ -417,7 +417,7 @@ bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut else if( sBit == "blind" ) SET_FLOAT( fBlind ) else if( sBit == "cover" ) SET_FLOAT( fCover ) else if( sBit == "randomattacks" ) SET_FLOAT( fRandAttack ) - else if( sBit == "stepattacks" ) SET_FLOAT( fStepAttack ) + else if( sBit == "noattacks" ) SET_FLOAT( fNoAttack ) else if( sBit == "playerautoplay" ) SET_FLOAT( fPlayerAutoPlay ) else if( sBit == "passmark" ) SET_FLOAT( fPassmark ) else if( sBit == "overhead" ) { m_bSetTiltOrSkew = true; m_fSkew = 0; m_fPerspectiveTilt = 0; m_SpeedfSkew = m_SpeedfPerspectiveTilt = speed; } @@ -657,7 +657,7 @@ bool PlayerOptions::operator==( const PlayerOptions &other ) const COMPARE(m_fBlind); COMPARE(m_fCover); COMPARE(m_fRandAttack); - COMPARE(m_fStepAttack); + COMPARE(m_fNoAttack); COMPARE(m_fPlayerAutoPlay); COMPARE(m_fPerspectiveTilt); COMPARE(m_fSkew); @@ -713,7 +713,7 @@ bool PlayerOptions::IsEasierForSongAndSteps( Song* pSong, Steps* pSteps, PlayerN if( m_bTransforms[TRANSFORM_ECHO] ) return true; // Removing attacks is easier in general. - if (!m_fStepAttack && !m_fRandAttack && pSteps->HasAttacks()) + if (m_fNoAttack || (!m_fRandAttack && pSteps->HasAttacks())) return true; if( m_fCover ) return true; @@ -961,9 +961,20 @@ public: DEFINE_METHOD( GetBlind, m_fBlind ) DEFINE_METHOD( GetCover, m_fCover ) DEFINE_METHOD( GetRandomAttacks, m_fRandAttack ) + + static int GetStepAttacks( T *p, lua_State *L ) + { + lua_pushnumber(L, + (p->m_fNoAttack > 0 || p->m_fRandAttack > 0 ? 0 : 1 )); + return 1; + } + // This one is deprecated. - DEFINE_METHOD( GetSongAttacks, m_fStepAttack ) - DEFINE_METHOD( GetStepAttacks, m_fStepAttack ) + static int GetSongAttacks( T *p, lua_State *L ) + { + return GetStepAttacks(p, L); + } + DEFINE_METHOD( GetNoAttacks, m_fNoAttack ) DEFINE_METHOD( GetSkew, m_fSkew ) DEFINE_METHOD( GetPassmark, m_fPassmark ) DEFINE_METHOD( GetRandomSpeed, m_fRandomSpeed ) @@ -991,6 +1002,7 @@ public: ADD_METHOD( GetSongAttacks ); // SetSongAttacks ADD_METHOD( GetStepAttacks ); + ADD_METHOD( GetNoAttacks ); ADD_METHOD( GetCMod ); ADD_METHOD( GetXMod ); diff --git a/src/PlayerOptions.h b/src/PlayerOptions.h index 8e5bb30da8..3b5caacc0f 100644 --- a/src/PlayerOptions.h +++ b/src/PlayerOptions.h @@ -27,7 +27,7 @@ public: m_fBlind(0), m_SpeedfBlind(1.0f), m_fCover(0), m_SpeedfCover(1.0f), m_fRandAttack(0), m_SpeedfRandAttack(1.0f), - m_fStepAttack(1), m_SpeedfStepAttack(1.0f), + m_fNoAttack(0), m_SpeedfNoAttack(1.0f), m_fPlayerAutoPlay(0), m_SpeedfPlayerAutoPlay(1.0f), m_bSetTiltOrSkew(false), m_fPerspectiveTilt(0), m_SpeedfPerspectiveTilt(1.0f), @@ -167,7 +167,7 @@ public: float m_fBlind, m_SpeedfBlind; float m_fCover, m_SpeedfCover; // hide the background per-player--can't think of a good name float m_fRandAttack, m_SpeedfRandAttack; - float m_fStepAttack, m_SpeedfStepAttack; + float m_fNoAttack, m_SpeedfNoAttack; float m_fPlayerAutoPlay, m_SpeedfPlayerAutoPlay; bool m_bSetTiltOrSkew; // true if the tilt or skew was set by FromString float m_fPerspectiveTilt, m_SpeedfPerspectiveTilt; // -1 = near, 0 = overhead, +1 = space diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 08a0377783..ed8a79261e 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -4516,20 +4516,23 @@ void ScreenEdit::SetupCourseAttacks() FOREACH( Attack, Attacks, attack ) GAMESTATE->m_pPlayerState[PLAYER_1]->LaunchAttack( *attack ); } - else if (GAMESTATE->m_pCurSong && - GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions.GetCurrent().m_fStepAttack != 0 ) + else { - AttackArray &attacks = GAMESTATE->m_bIsUsingStepTiming ? - GAMESTATE->m_pCurSteps[PLAYER_1]->m_Attacks : - GAMESTATE->m_pCurSong->m_Attacks; - - if (attacks.size() > 0) + const PlayerOptions &p = GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions.GetCurrent(); + if (GAMESTATE->m_pCurSong && p.m_fNoAttack != 0 && p.m_fRandAttack != 0 ) { - FOREACH(Attack, attacks, attack) + AttackArray &attacks = GAMESTATE->m_bIsUsingStepTiming ? + GAMESTATE->m_pCurSteps[PLAYER_1]->m_Attacks : + GAMESTATE->m_pCurSong->m_Attacks; + + if (attacks.size() > 0) { - float fBeat = GetAppropriateTiming().GetBeatFromElapsedTime(attack->fStartSecond); - if (fBeat >= GetBeat()) - GAMESTATE->m_pPlayerState[PLAYER_1]->LaunchAttack( *attack ); + FOREACH(Attack, attacks, attack) + { + float fBeat = GetAppropriateTiming().GetBeatFromElapsedTime(attack->fStartSecond); + if (fBeat >= GetBeat()) + GAMESTATE->m_pPlayerState[PLAYER_1]->LaunchAttack( *attack ); + } } } } diff --git a/src/ScreenGameplay.cpp b/src/ScreenGameplay.cpp index 8cec7becf5..9936268534 100644 --- a/src/ScreenGameplay.cpp +++ b/src/ScreenGameplay.cpp @@ -820,9 +820,10 @@ void ScreenGameplay::InitSongQueues() { Steps *pSteps = GAMESTATE->m_pCurSteps[ pi->GetStepsAndTrailIndex() ]; pi->m_vpStepsQueue.push_back( pSteps ); - - if( pi->GetPlayerState()->m_PlayerOptions.GetCurrent().m_fStepAttack != 0 && - pSteps->m_Attacks.size() > 0 ) + const PlayerOptions &p = pi->GetPlayerState()->m_PlayerOptions.GetCurrent(); + + if (p.m_fNoAttack == 0 && p.m_fRandAttack == 0 && + pSteps->m_Attacks.size() > 0 ) { pi->m_asModifiersQueue.push_back( pSteps->m_Attacks ); }