diff --git a/stepmania/NEWS b/stepmania/NEWS index 159b597f21..5a2159be90 100644 --- a/stepmania/NEWS +++ b/stepmania/NEWS @@ -21,6 +21,8 @@ BUG FIX: Super-shuffle fixed (now doesn't add extra notes) NEW FEATURE: Added WIDE transform (changes notes on beats to jumps) NEW FEATURE: Added BIG transform (strategically inserts 8ths) NEW FEATURE: Added QUICK transform (strategically inserts 16ths) +NEW FEATURE: Added SKIPPY transform +BUG FIX: Fixed song seeking in editor at non 1x music rates ----------------------- Version 3.01 --------------------------- CHANGE: Simplified NoteSkin tap graphic format. Old NoteSkins will need to diff --git a/stepmania/src/NoteData.cpp b/stepmania/src/NoteData.cpp index 22d96afaaa..3b591aaef9 100644 --- a/stepmania/src/NoteData.cpp +++ b/stepmania/src/NoteData.cpp @@ -13,10 +13,8 @@ #include "NoteData.h" #include "RageUtil.h" #include "GameConstantsAndTypes.h" -#include "PrefsManager.h" #include "ArrowEffects.h" -#include "PrefsManager.h" -#include "GameConstantsAndTypes.h" +#include "GameState.h" #include "RageException.h" #include "GameState.h" #include "math.h" @@ -881,7 +879,7 @@ void NoteDataUtil::Turn( NoteData &in, TurnType tt ) iTakeFromTrack[t] = in.GetNumTracks()-t-1; break; case shuffle: - case super_shuffle: // use this code to shuffle the HoldNotes + case super_shuffle: // use shuffle code to mix up HoldNotes without creating impossible patterns { vector aiTracksLeftToMap; for( t=0; t0; t-- ) // in.GetNumTracks()-1 times + { + int iTrackEarlier = t; + int iTrackLater = (t+1) % in.GetNumTracks(); + + // swap + TapNote tnEarlier = in.GetTapNote(iTrackEarlier, r); + TapNote tnLater = in.GetTapNote(iTrackLater, r); + in.SetTapNote(iTrackEarlier, r, tnLater); + in.SetTapNote(iTrackLater, r, tnEarlier); + } + } + in.Convert4sToHoldNotes(); +} diff --git a/stepmania/src/NoteData.h b/stepmania/src/NoteData.h index 445352f0d9..3c10573af1 100644 --- a/stepmania/src/NoteData.h +++ b/stepmania/src/NoteData.h @@ -165,10 +165,19 @@ namespace NoteDataUtil void Skippy( NoteData &in ); void InsertIntelligentTaps( NoteData &in, float fBeatInterval, float fInsertBeatOffset, bool bNewTapSameAsBeginning ); void SuperShuffleTaps( NoteData &in ); + void Backwards( NoteData &in ); void SwapSides( NoteData &in ); + void CopyLeftToRight( NoteData &in ); + void CopyRightToLeft( NoteData &in ); + void ClearLeft( NoteData &in ); + void ClearRight( NoteData &in ); + void CollapseToOne( NoteData &in ); + void ShiftLeft( NoteData &in ); + void ShiftRight( NoteData &in ); void SnapToNearestNoteType( NoteData &in, NoteType nt1, NoteType nt2, float fBeginBeat, float fEndBeat ); + inline void SnapToNearestNoteType( NoteData &in, NoteType nt, float fBeginBeat, float fEndBeat ) { SnapToNearestNoteType( in, nt, (NoteType)-1, fBeginBeat, fEndBeat ); } }; diff --git a/stepmania/src/ScreenEdit.cpp b/stepmania/src/ScreenEdit.cpp index fa25dc4a32..5d35912291 100644 --- a/stepmania/src/ScreenEdit.cpp +++ b/stepmania/src/ScreenEdit.cpp @@ -148,8 +148,9 @@ MiniMenuDefinition g_AreaMenu = { "Paste at begin marker", true, 1, 0, {""} }, { "Clear", true, 1, 0, {""} }, { "Quantize", true, NUM_NOTE_TYPES, 0, {"4TH","8TH","12TH","16TH","24TH","32ND"} }, - { "Turn", true, ScreenEdit::NUM_TURN_TYPES, 0, {"Left","Right","Mirror","Shuffle","Super Shuffle","Backwards","Swap Sides"} }, + { "Turn", true, ScreenEdit::NUM_TURN_TYPES, 0, {"Left","Right","Mirror","Shuffle","Super Shuffle"} }, { "Transform", true, ScreenEdit::NUM_TRANSFORM_TYPES, 0, {"Little","Wide","Big","Quick","Skippy"} }, + { "Alter", true, ScreenEdit::NUM_ALTER_TYPES, 0, {"Backwards","Swap Sides","Copy Left To Right","Copy Right To Left","Clear Left","Clear Right","Collapse To One","Shift Left","Shift Right"} }, { "Play selection", true, 1, 0, {""} }, { "Record in selection", true, 1, 0, {""} }, { "Insert blank beat and shift down", true, 1, 0, {""} }, @@ -766,7 +767,9 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ g_AreaMenu.lines[paste_at_begin_marker].bEnabled = this->m_Clipboard.GetLastBeat() != 0 && m_NoteFieldEdit.m_fBeginMarker!=-1; g_AreaMenu.lines[clear].bEnabled = bAreaSelected; g_AreaMenu.lines[quantize].bEnabled = bAreaSelected; + g_AreaMenu.lines[turn].bEnabled = bAreaSelected; g_AreaMenu.lines[transform].bEnabled = bAreaSelected; + g_AreaMenu.lines[alter].bEnabled = bAreaSelected; g_AreaMenu.lines[play].bEnabled = bAreaSelected; g_AreaMenu.lines[record].bEnabled = bAreaSelected; SCREENMAN->MiniMenu( &g_AreaMenu, SM_BackFromAreaMenu ); @@ -1296,8 +1299,6 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers ) case mirror: NoteDataUtil::Turn( m_Clipboard, NoteDataUtil::mirror ); break; case shuffle: NoteDataUtil::Turn( m_Clipboard, NoteDataUtil::shuffle ); break; case super_shuffle: NoteDataUtil::Turn( m_Clipboard, NoteDataUtil::super_shuffle ); break; - case backwards: NoteDataUtil::Backwards( m_Clipboard ); break; - case swap_sides: NoteDataUtil::SwapSides( m_Clipboard ); break; default: ASSERT(0); } @@ -1322,6 +1323,28 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers ) HandleAreaMenuChoice( paste_at_begin_marker, NULL ); } break; + case alter: + { + HandleAreaMenuChoice( cut, NULL ); + + AlterType at = (AlterType)iAnswers[c]; + switch( at ) + { + case backwards: NoteDataUtil::Backwards( m_Clipboard ); break; + case swap_sides: NoteDataUtil::SwapSides( m_Clipboard ); break; + case copy_left_to_right: NoteDataUtil::CopyLeftToRight( m_Clipboard ); break; + case copy_right_to_left: NoteDataUtil::CopyRightToLeft( m_Clipboard ); break; + case clear_left: NoteDataUtil::ClearLeft( m_Clipboard ); break; + case clear_right: NoteDataUtil::ClearRight( m_Clipboard ); break; + case collapse_to_one: NoteDataUtil::CollapseToOne( m_Clipboard ); break; + case shift_left: NoteDataUtil::ShiftLeft( m_Clipboard ); break; + case shift_right: NoteDataUtil::ShiftRight( m_Clipboard ); break; + default: ASSERT(0); + } + + HandleAreaMenuChoice( paste_at_begin_marker, NULL ); + } + break; case play: { ASSERT( m_NoteFieldEdit.m_fBeginMarker!=-1 && m_NoteFieldEdit.m_fEndMarker!=-1 ); diff --git a/stepmania/src/ScreenEdit.h b/stepmania/src/ScreenEdit.h index 028a8200be..ace359810a 100644 --- a/stepmania/src/ScreenEdit.h +++ b/stepmania/src/ScreenEdit.h @@ -127,6 +127,7 @@ public: quantize, turn, transform, + alter, play, record, insert_and_shift, @@ -134,8 +135,9 @@ public: NUM_AREA_MENU_CHOICES }; void HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers ); - enum TurnType { left, right, mirror, shuffle, super_shuffle, backwards, swap_sides, NUM_TURN_TYPES }; + enum TurnType { left, right, mirror, shuffle, super_shuffle, NUM_TURN_TYPES }; enum TransformType { little, wide, big, quick, skippy, NUM_TRANSFORM_TYPES }; + enum AlterType { backwards, swap_sides, copy_left_to_right, copy_right_to_left, clear_left, clear_right, collapse_to_one, shift_left, shift_right, NUM_ALTER_TYPES }; enum EditNotesStatisticsChoice { difficulty,