diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 5583268418..43ccf454a4 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -2718,7 +2718,7 @@ Line2=list,Accel;title,Acceler::-ation Line3=list,Effect Line4=list,Appearance;title,Appear::-ance Line5=list,Turn -Line6=list,Transform;title,Insert +Line6=list,Insert;title,Insert Line7=list,Scroll Line8=list,NoteSkins Line9=list,Holds @@ -2942,24 +2942,24 @@ TurnName,5=SHUFFLE Turn,6=mod,supershuffle TurnName,6=S.SHUFFLE -Transform=8 -TransformDefault=mod,no transform -Transform,1= -TransformName,1=OFF -Transform,2=mod,little -TransformName,2=LITTLE -Transform,3=mod,wide -TransformName,3=WIDE -Transform,4=mod,big -TransformName,4=BIG -Transform,5=mod,quick -TransformName,5=QUICK -Transform,6=mod,skippy -TransformName,6=SKIPPY -Transform,7=mod,echo -TransformName,7=ECHO -Transform,8=mod,stomp -TransformName,8=STOMP +Insert=8 +InsertDefault=mod,no little,no wide,no big,no quick,no skippy,no echo,no stomp +Insert,1= +InsertName,1=OFF +Insert,2=mod,little +InsertName,2=LITTLE +Insert,3=mod,wide +InsertName,3=WIDE +Insert,4=mod,big +InsertName,4=BIG +Insert,5=mod,quick +InsertName,5=QUICK +Insert,6=mod,skippy +InsertName,6=SKIPPY +Insert,7=mod,echo +InsertName,7=ECHO +Insert,8=mod,stomp +InsertName,8=STOMP Scroll=4 ScrollDefault=mod,no reverse,no split,no alternate @@ -2972,14 +2972,16 @@ ScrollName,3=SPLIT Scroll,4=mod,alternate ScrollName,4=ALTERNATE -Holds=3 -HoldsDefault=mod,no noholds,no planted +Holds=4 +HoldsDefault=mod,no noholds,no planted,no twister Holds,1=mod,noholds HoldsName,1=OFF Holds,2= HoldsName,2=ON Holds,3=mod,planted HoldsName,3=PLANTED +Holds,4=mod,twister +HoldsName,4=TWISTER Mines=3 MinesDefault=mod,no nomines,no mines diff --git a/stepmania/src/CodeDetector.cpp b/stepmania/src/CodeDetector.cpp index 182b172d5a..7d0a50e5b4 100644 --- a/stepmania/src/CodeDetector.cpp +++ b/stepmania/src/CodeDetector.cpp @@ -183,8 +183,8 @@ bool CodeDetector::DetectAndAdjustMusicOptions( GameController controller ) case CODE_NEXT_APPEARANCE: GAMESTATE->m_PlayerOptions[pn].NextAppearance(); break; case CODE_NEXT_TURN: GAMESTATE->m_PlayerOptions[pn].NextTurn(); break; case CODE_REVERSE: GAMESTATE->m_PlayerOptions[pn].NextScroll(); break; - case CODE_HOLDS: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bHoldNotes, true, false ); break; - case CODE_MINES: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bMines, true, false ); break; + case CODE_HOLDS: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bTransforms[PlayerOptions::TRANSFORM_NOHOLDS], true, false ); break; + case CODE_MINES: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bTransforms[PlayerOptions::TRANSFORM_NOMINES], true, false ); break; case CODE_DARK: FLOAT_TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_fDark ); break; case CODE_CANCEL_ALL: GAMESTATE->m_PlayerOptions[pn].Init(); GAMESTATE->m_PlayerOptions[pn].FromString( PREFSMAN->m_sDefaultModifiers ); break; diff --git a/stepmania/src/NoteData.h b/stepmania/src/NoteData.h index 9670a88b82..e9f264d347 100644 --- a/stepmania/src/NoteData.h +++ b/stepmania/src/NoteData.h @@ -87,15 +87,21 @@ public: { int iNum = 0; for( int t=0; t tracks, rows; - // turn all the HoldNotes into TapNotes - for( int i=0; i=0; i++ ) // iterate backwards so we can delete { - const HoldNote &hn = in.GetHoldNote(i); + const HoldNote hn = in.GetHoldNote(i); - tracks.push_back(hn.iTrack); - rows.push_back(BeatToNoteRow(hn.fStartBeat)); + bool bHoldInRange = + (hn.fStartBeat <= fStartBeat && hn.fEndBeat >= fEndBeat) || + (hn.fStartBeat >= fStartBeat && hn.fStartBeat <= fEndBeat) || + (hn.fEndBeat >= fStartBeat && hn.fEndBeat <= fEndBeat); + + if( !bHoldInRange ) + continue; // skip + + in.RemoveHoldNote( i ); + + in.SetTapNote(hn.iTrack, BeatToNoteRow(hn.fStartBeat), TAP_TAP); } - - // Remove all HoldNotes - while(in.GetNumHoldNotes()) - in.RemoveHoldNote(in.GetNumHoldNotes()-1); - - for(unsigned j = 0; j < tracks.size(); ++j) - in.SetTapNote(tracks[j], rows[j], TAP_TAP); } -void NoteDataUtil::RemoveMines(NoteData &in) +void NoteDataUtil::RemoveMines(NoteData &in, float fStartBeat, float fEndBeat ) { - int max_row = in.GetLastRow(); + int iRowStart = BeatToNoteRow(fStartBeat); + int iRowEnd = BeatToNoteRow(fEndBeat); for( int t=0; t= iRowWindowBegin+1 && iHoldHeadRow <= iRowWindowEnd-1 ) - { - bTapInMiddle = true; - break; - } - } - if( bTapInMiddle ) - continue; - if( iEchoTrack==-1 ) continue; @@ -763,6 +750,14 @@ void NoteDataUtil::Echo( NoteData &in, float fStartBeat, float fEndBeat ) } void NoteDataUtil::Planted( NoteData &in, float fStartBeat, float fEndBeat ) +{ + ConvertTapsToHolds( in, 1, fStartBeat, fEndBeat ); +} +void NoteDataUtil::Twister( NoteData &in, float fStartBeat, float fEndBeat ) +{ + ConvertTapsToHolds( in, 2, fStartBeat, fEndBeat ); +} +void NoteDataUtil::ConvertTapsToHolds( NoteData &in, int iSimultaneousHolds, float fStartBeat, float fEndBeat ) { // Convert all taps to freezes. const int first_row = BeatToNoteRow( fStartBeat ); @@ -774,6 +769,7 @@ void NoteDataUtil::Planted( NoteData &in, float fStartBeat, float fEndBeat ) if( in.GetTapNote(t,r) == TAP_TAP ) { // search for row of next TAP_TAP + int iTapsLeft = iSimultaneousHolds; for( int r2=r+1; r2<=last_row; r2++ ) { if( in.IsThereATapAtRow(r2) ) @@ -782,7 +778,9 @@ void NoteDataUtil::Planted( NoteData &in, float fStartBeat, float fEndBeat ) // don't convert the earlier one to a hold. if( in.GetFirstTrackWithTap(r2) == t ) goto dont_add_hold; - break; // stop searching + iTapsLeft--; + if( iTapsLeft == 0 ) + break; // stop searching } } float fStartBeat = NoteRowToBeat(r); @@ -1114,11 +1112,6 @@ void NoteDataUtil::ConvertAdditionsToRegular( NoteData &in ) void NoteDataUtil::TransformNoteData( NoteData &nd, const PlayerOptions &po, StepsType st, float fStartBeat, float fEndBeat ) { - if( !po.m_bHoldNotes ) - RemoveHoldNotes( nd ); - - if( !po.m_bMines ) - RemoveMines( nd ); switch( po.m_Turn ) { @@ -1131,20 +1124,18 @@ void NoteDataUtil::TransformNoteData( NoteData &nd, const PlayerOptions &po, Ste default: ASSERT(0); } - switch( po.m_Transform ) - { - case PlayerOptions::TRANSFORM_NONE: break; - case PlayerOptions::TRANSFORM_LITTLE: NoteDataUtil::Little(nd, fStartBeat, fEndBeat); break; - case PlayerOptions::TRANSFORM_WIDE: NoteDataUtil::Wide(nd, fStartBeat, fEndBeat); break; - case PlayerOptions::TRANSFORM_BIG: NoteDataUtil::Big(nd, fStartBeat, fEndBeat); break; - case PlayerOptions::TRANSFORM_QUICK: NoteDataUtil::Quick(nd, fStartBeat, fEndBeat); break; - case PlayerOptions::TRANSFORM_SKIPPY: NoteDataUtil::Skippy(nd, fStartBeat, fEndBeat); break; - case PlayerOptions::TRANSFORM_MINES: NoteDataUtil::Mines(nd, fStartBeat, fEndBeat); break; - case PlayerOptions::TRANSFORM_ECHO: NoteDataUtil::Echo(nd, fStartBeat, fEndBeat); break; - case PlayerOptions::TRANSFORM_PLANTED: NoteDataUtil::Planted(nd, fStartBeat, fEndBeat); break; - case PlayerOptions::TRANSFORM_STOMP: NoteDataUtil::Stomp(nd, fStartBeat, fEndBeat); break; - default: ASSERT(0); - } + if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOHOLDS] ) NoteDataUtil::RemoveHoldNotes(nd, fStartBeat, fEndBeat); + if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOMINES] ) NoteDataUtil::RemoveMines(nd, fStartBeat, fEndBeat); + if( po.m_bTransforms[PlayerOptions::TRANSFORM_LITTLE] ) NoteDataUtil::Little(nd, fStartBeat, fEndBeat); + if( po.m_bTransforms[PlayerOptions::TRANSFORM_WIDE] ) NoteDataUtil::Wide(nd, fStartBeat, fEndBeat); + if( po.m_bTransforms[PlayerOptions::TRANSFORM_BIG] ) NoteDataUtil::Big(nd, fStartBeat, fEndBeat); + if( po.m_bTransforms[PlayerOptions::TRANSFORM_QUICK] ) NoteDataUtil::Quick(nd, fStartBeat, fEndBeat); + if( po.m_bTransforms[PlayerOptions::TRANSFORM_SKIPPY] ) NoteDataUtil::Skippy(nd, fStartBeat, fEndBeat); + if( po.m_bTransforms[PlayerOptions::TRANSFORM_MINES] ) NoteDataUtil::AddMines(nd, fStartBeat, fEndBeat); + if( po.m_bTransforms[PlayerOptions::TRANSFORM_ECHO] ) NoteDataUtil::Echo(nd, fStartBeat, fEndBeat); + if( po.m_bTransforms[PlayerOptions::TRANSFORM_PLANTED] ) NoteDataUtil::Planted(nd, fStartBeat, fEndBeat); + if( po.m_bTransforms[PlayerOptions::TRANSFORM_STOMP] ) NoteDataUtil::Stomp(nd, fStartBeat, fEndBeat); + if( po.m_bTransforms[PlayerOptions::TRANSFORM_TWISTER] ) NoteDataUtil::Twister(nd, fStartBeat, fEndBeat); } void NoteDataUtil::Scale( NoteData &nd, float fScale ) diff --git a/stepmania/src/NoteDataUtil.h b/stepmania/src/NoteDataUtil.h index 620a37cd6f..c465a572dd 100644 --- a/stepmania/src/NoteDataUtil.h +++ b/stepmania/src/NoteDataUtil.h @@ -39,8 +39,8 @@ namespace NoteDataUtil // radar values - return between 0.0 and 1.2 float GetRadarValue( const NoteData &in, RadarCategory rv, float fSongSeconds ); - void RemoveHoldNotes( NoteData &in ); - void RemoveMines( NoteData &in ); + void RemoveHoldNotes( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); + void RemoveMines( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); enum TurnType { left, right, mirror, shuffle, super_shuffle, NUM_TURN_TYPES }; void Turn( NoteData &in, StepsType st, TurnType tt ); void Little( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); @@ -49,10 +49,12 @@ namespace NoteDataUtil void Quick( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void Skippy( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void InsertIntelligentTaps( NoteData &in, float fWindowSizeBeats, float fInsertOffsetBeats, float fWindowStrideBeats, bool bSkippy, float fStartBeat = 0, float fEndBeat = 99999 ); - void Mines( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); + void AddMines( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void Echo( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void Planted( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void Stomp( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); + void Twister( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); + void ConvertTapsToHolds( NoteData &in, int iSimultaneousHolds, float fStartBeat = 0, float fEndBeat = 99999 ); void SuperShuffleTaps( NoteData &in ); // change all TAP_ADDITIONs to TAP_TAPs diff --git a/stepmania/src/OptionIcon.cpp b/stepmania/src/OptionIcon.cpp index abd735a634..e7446cc16f 100644 --- a/stepmania/src/OptionIcon.cpp +++ b/stepmania/src/OptionIcon.cpp @@ -49,7 +49,8 @@ void OptionIcon::Load( PlayerNumber pn, CString sText, bool bHeader ) "1X", "HOLDS", "DEFAULT", - "OVERHEAD" }; + "OVERHEAD" + }; for( unsigned i=0; im_HoldNoteScores. */ if( po.m_Turn != PlayerOptions::TURN_NONE ) RageException::Throw("Can't use turns as battle attacks"); - if( !po.m_bHoldNotes ) + if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOHOLDS] ) RageException::Throw("Can't use NoHolds as a battle attack"); + if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOMINES] ) + RageException::Throw("Can't use NoMines as a battle attack"); float fStartBeat, fEndBeat; mod.GetAttackBeats( GAMESTATE->m_pCurSong, m_PlayerNumber, fStartBeat, fEndBeat ); diff --git a/stepmania/src/PlayerOptions.cpp b/stepmania/src/PlayerOptions.cpp index 39c3ebb625..88f1d7d0f9 100644 --- a/stepmania/src/PlayerOptions.cpp +++ b/stepmania/src/PlayerOptions.cpp @@ -36,8 +36,7 @@ void PlayerOptions::Init() m_fSkew = 0; m_SpeedfSkew = 1.0f; m_fPassmark = 0; m_SpeedfPassmark = 1.0f; m_Turn = TURN_NONE; - m_Transform = TRANSFORM_NONE; - m_bHoldNotes = true; + ZERO( m_bTransforms ); m_bTimingAssist = false; m_bProTiming = false; m_sPositioning = ""; // "null" @@ -145,23 +144,19 @@ CString PlayerOptions::GetString() const default: ASSERT(0); // invalid } - switch( m_Transform ) - { - case TRANSFORM_NONE: break; - case TRANSFORM_LITTLE: sReturn += "Little, "; break; - case TRANSFORM_WIDE: sReturn += "Wide, "; break; - case TRANSFORM_BIG: sReturn += "Big, "; break; - case TRANSFORM_QUICK: sReturn += "Quick, "; break; - case TRANSFORM_SKIPPY: sReturn += "Skippy, "; break; - case TRANSFORM_MINES: sReturn += "Mines, "; break; - case TRANSFORM_ECHO: sReturn += "Echo, "; break; - case TRANSFORM_PLANTED: sReturn += "Planted, "; break; - case TRANSFORM_STOMP: sReturn += "Stomp, "; break; - default: ASSERT(0); // invalid - } + if( m_bTransforms[TRANSFORM_NOHOLDS] ) sReturn += "NoHolds, "; + if( m_bTransforms[TRANSFORM_NOMINES] ) sReturn += "NoMines, "; + if( m_bTransforms[TRANSFORM_LITTLE] ) sReturn += "Little, "; + if( m_bTransforms[TRANSFORM_WIDE] ) sReturn += "Wide, "; + if( m_bTransforms[TRANSFORM_BIG] ) sReturn += "Big, "; + if( m_bTransforms[TRANSFORM_QUICK] ) sReturn += "Quick, "; + if( m_bTransforms[TRANSFORM_SKIPPY] ) sReturn += "Skippy, "; + if( m_bTransforms[TRANSFORM_MINES] ) sReturn += "Mines, "; + if( m_bTransforms[TRANSFORM_ECHO] ) sReturn += "Echo, "; + if( m_bTransforms[TRANSFORM_PLANTED] ) sReturn += "Planted, "; + if( m_bTransforms[TRANSFORM_STOMP] ) sReturn += "Stomp, "; + if( m_bTransforms[TRANSFORM_TWISTER] ) sReturn += "Twister, "; - if( !m_bHoldNotes ) sReturn += "NoHolds, "; - if( !m_bMines ) sReturn += "NoMines, "; if( m_bTimingAssist ) sReturn += "TimingAssist, "; if( m_bProTiming ) sReturn += "ProTiming, "; @@ -277,22 +272,21 @@ void PlayerOptions::FromString( CString sOptions ) else if( sBit == "right" ) m_Turn = TURN_RIGHT; else if( sBit == "shuffle" ) m_Turn = TURN_SHUFFLE; else if( sBit == "supershuffle" )m_Turn = TURN_SUPER_SHUFFLE; - else if( sBit == "transform" && !on ) m_Transform = TRANSFORM_NONE; /* "no transform" */ - else if( sBit == "little" ) m_Transform = TRANSFORM_LITTLE; - else if( sBit == "wide" ) m_Transform = TRANSFORM_WIDE; - else if( sBit == "big" ) m_Transform = TRANSFORM_BIG; - else if( sBit == "quick" ) m_Transform = TRANSFORM_QUICK; - else if( sBit == "skippy" ) m_Transform = TRANSFORM_SKIPPY; - else if( sBit == "mines" ) m_Transform = TRANSFORM_MINES; - else if( sBit == "echo" ) m_Transform = TRANSFORM_ECHO; - else if( sBit == "planted" ) m_Transform = TRANSFORM_PLANTED; - else if( sBit == "stomp" ) m_Transform = TRANSFORM_STOMP; + else if( sBit == "little" ) m_bTransforms[TRANSFORM_LITTLE] = on; + else if( sBit == "wide" ) m_bTransforms[TRANSFORM_WIDE] = on; + else if( sBit == "big" ) m_bTransforms[TRANSFORM_BIG] = on; + else if( sBit == "quick" ) m_bTransforms[TRANSFORM_QUICK] = on; + else if( sBit == "skippy" ) m_bTransforms[TRANSFORM_SKIPPY] = on; + else if( sBit == "mines" ) m_bTransforms[TRANSFORM_MINES] = on; + else if( sBit == "echo" ) m_bTransforms[TRANSFORM_ECHO] = on; + else if( sBit == "planted" ) m_bTransforms[TRANSFORM_PLANTED] = on; + else if( sBit == "stomp" ) m_bTransforms[TRANSFORM_STOMP] = on; + else if( sBit == "twister" ) m_bTransforms[TRANSFORM_TWISTER] = on; else if( sBit == "reverse" ) SET_FLOAT( fScrolls[SCROLL_REVERSE] ) else if( sBit == "split" ) SET_FLOAT( fScrolls[SCROLL_SPLIT] ) else if( sBit == "alternate" ) SET_FLOAT( fScrolls[SCROLL_ALTERNATE] ) - else if( sBit == "noholds" ) m_bHoldNotes = !on; - else if( sBit == "nofreeze" ) m_bHoldNotes = !on; - else if( sBit == "nomines" ) m_bMines = !on; + else if( sBit == "noholds" || sBit == "nofreeze" ) m_bTransforms[TRANSFORM_NOHOLDS] = on; + else if( sBit == "nomines" ) m_bTransforms[TRANSFORM_NOMINES] = on; else if( sBit == "dark" ) SET_FLOAT( fDark ) else if( sBit == "blind" ) SET_FLOAT( fBlind ) else if( sBit == "passmark" ) SET_FLOAT( fPassmark ) @@ -359,7 +353,8 @@ void PlayerOptions::NextTurn() void PlayerOptions::NextTransform() { - m_Transform = (Transform) ((m_Transform+1)%NUM_TRANSFORMS); + // It's dumb to use a code to change transforms because there are so many of them. -Chris + //m_Transforms = (Transform) ((m_Transform+1)%NUM_TRANSFORMS); } void PlayerOptions::NextScroll() @@ -478,9 +473,6 @@ bool ComparePlayerOptions( const PlayerOptions &po1, const PlayerOptions &po2 ) COMPARE(m_fDark); COMPARE(m_fBlind); COMPARE(m_Turn); - COMPARE(m_Transform); - COMPARE(m_bHoldNotes); - COMPARE(m_bMines); COMPARE(m_bTimingAssist); COMPARE(m_bProTiming); COMPARE(m_fPerspectiveTilt); @@ -496,6 +488,8 @@ bool ComparePlayerOptions( const PlayerOptions &po1, const PlayerOptions &po2 ) COMPARE(m_fAppearances[i]); for( i = 0; i < PlayerOptions::NUM_SCROLLS; ++i ) COMPARE(m_fScrolls[i]); + for( i = 0; i < PlayerOptions::NUM_TRANSFORMS; ++i ) + COMPARE(m_bTransforms[i]); #undef COMPARE return true; diff --git a/stepmania/src/PlayerOptions.h b/stepmania/src/PlayerOptions.h index aa32703316..97a1cb083a 100644 --- a/stepmania/src/PlayerOptions.h +++ b/stepmania/src/PlayerOptions.h @@ -58,7 +58,8 @@ struct PlayerOptions NUM_TURNS }; enum Transform { - TRANSFORM_NONE=0, + TRANSFORM_NOHOLDS, + TRANSFORM_NOMINES, TRANSFORM_LITTLE, TRANSFORM_WIDE, TRANSFORM_BIG, @@ -68,6 +69,7 @@ struct PlayerOptions TRANSFORM_ECHO, TRANSFORM_PLANTED, TRANSFORM_STOMP, + TRANSFORM_TWISTER, NUM_TRANSFORMS }; enum Scroll { @@ -99,9 +101,7 @@ struct PlayerOptions float m_fPassmark, m_SpeedfPassmark; Turn m_Turn; - Transform m_Transform; - bool m_bHoldNotes; - bool m_bMines; + bool m_bTransforms[NUM_TRANSFORMS]; bool m_bTimingAssist; bool m_bProTiming; CString m_sPositioning; /* The current positioning mode, or empty to use the normal positions. */ diff --git a/stepmania/src/ScreenEdit.cpp b/stepmania/src/ScreenEdit.cpp index 94b290be1e..1a080f1d13 100644 --- a/stepmania/src/ScreenEdit.cpp +++ b/stepmania/src/ScreenEdit.cpp @@ -156,7 +156,7 @@ Menu g_AreaMenu MenuRow( "Clear", true ), MenuRow( "Quantize", true, 0, "4TH","8TH","12TH","16TH","24TH","32ND","48TH","64TH" ), MenuRow( "Turn", true, 0, "Left","Right","Mirror","Shuffle","Super Shuffle" ), - MenuRow( "Transform", true, 0, "Little","Wide","Big","Quick","Skippy","Mines","Echo","Planted","Stomp" ), + MenuRow( "Transform", true, 0, "NoHolds","NoMines","Little","Wide","Big","Quick","Skippy","Mines","Echo","Planted","Stomp","Twister" ), MenuRow( "Alter", true, 0, "Backwards","Swap Sides","Copy Left To Right","Copy Right To Left","Clear Left","Clear Right","Collapse To One","Shift Left","Shift Right" ), MenuRow( "Tempo", true, 0, "Compress 2x","Compress 3->2","Compress 4->3","Expand 3->4","Expand 2->3","Expand 2x" ), MenuRow( "Play selection", true ), @@ -1533,15 +1533,18 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers ) TransformType tt = (TransformType)iAnswers[c]; switch( tt ) { + case noholds: NoteDataUtil::RemoveHoldNotes( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; + case nomines: NoteDataUtil::RemoveMines( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case little: NoteDataUtil::Little( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case wide: NoteDataUtil::Wide( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case big: NoteDataUtil::Big( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case quick: NoteDataUtil::Quick( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case skippy: NoteDataUtil::Skippy( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; - case mines: NoteDataUtil::Mines( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; + case mines: NoteDataUtil::AddMines( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case echo: NoteDataUtil::Echo( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case planted: NoteDataUtil::Planted( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case stomp: NoteDataUtil::Stomp( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; + case twister: NoteDataUtil::Twister( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; default: ASSERT(0); } diff --git a/stepmania/src/ScreenEdit.h b/stepmania/src/ScreenEdit.h index fb56304e0c..ee651a2663 100644 --- a/stepmania/src/ScreenEdit.h +++ b/stepmania/src/ScreenEdit.h @@ -137,7 +137,7 @@ public: }; void HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers ); enum TurnType { left, right, mirror, shuffle, super_shuffle, NUM_TURN_TYPES }; - enum TransformType { little, wide, big, quick, skippy, mines, echo, planted, stomp, NUM_TRANSFORM_TYPES }; + enum TransformType { noholds, nomines, little, wide, big, quick, skippy, mines, echo, planted, stomp, twister, 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 }; // MD 11/02/03 - added additional tempo adjusts which make "sense" enum TempoType { compress_2x, compress_3_2, compress_4_3, expand_4_3, expand_3_2, expand_2x, NUM_TEMPO_TYPES };