diff --git a/src/NoteDataUtil.cpp b/src/NoteDataUtil.cpp index 8b32a49c05..fa635ea510 100644 --- a/src/NoteDataUtil.cpp +++ b/src/NoteDataUtil.cpp @@ -2759,6 +2759,8 @@ void NoteDataUtil::TransformNoteData( NoteData &nd, const PlayerOptions &po, Ste if( po.m_bTurns[PlayerOptions::TURN_SHUFFLE] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::shuffle, iStartIndex, iEndIndex ); if( po.m_bTurns[PlayerOptions::TURN_SOFT_SHUFFLE] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::soft_shuffle, iStartIndex, iEndIndex ); if( po.m_bTurns[PlayerOptions::TURN_SUPER_SHUFFLE] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::super_shuffle, iStartIndex, iEndIndex ); + + nd.RevalidateATIs(vector(), false); } void NoteDataUtil::AddTapAttacks( NoteData &nd, Song* pSong ) diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index a9b66a2944..e94077683f 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -3375,6 +3375,7 @@ void ScreenEdit::TransitionEditState( EditState em ) case STATE_PLAYING: case STATE_RECORDING: { + m_NoteDataEdit.RevalidateATIs(vector(), false); if( bStateChanging ) AdjustSync::ResetOriginalSyncData(); @@ -3388,7 +3389,7 @@ void ScreenEdit::TransitionEditState( EditState em ) if (!GAMESTATE->m_bIsUsingStepTiming) { // Substitute the song timing for the step timing during - // previuw if we're in song mode + // preview if we're in song mode backupStepTiming = GAMESTATE->m_pCurSteps[PLAYER_1]->m_Timing; GAMESTATE->m_pCurSteps[PLAYER_1]->m_Timing.Clear(); } @@ -6092,9 +6093,10 @@ void ScreenEdit::SetupCourseAttacks() { FOREACH(Attack, attacks, attack) { - float fBeat = GetAppropriateTiming().GetBeatFromElapsedTime(attack->fStartSecond); - if (fBeat >= GetBeat()) - GAMESTATE->m_pPlayerState[PLAYER_1]->LaunchAttack( *attack ); + // LaunchAttack is actually a misnomer. The function actually adds + // the attack to a list in the PlayerState which is checked and + // updated every tick to see which ones to actually activate. -Kyz + GAMESTATE->m_pPlayerState[PLAYER_1]->LaunchAttack( *attack ); } } }