From ba9cef947e486a5d23c13eef01da6671ad8224c8 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Fri, 2 Jan 2004 21:02:06 +0000 Subject: [PATCH] fix double+stomp --- stepmania/src/NoteDataUtil.cpp | 42 ++++++++++++++++++++++++++-------- stepmania/src/NoteDataUtil.h | 6 ++--- stepmania/src/ScreenEdit.cpp | 3 ++- 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/stepmania/src/NoteDataUtil.cpp b/stepmania/src/NoteDataUtil.cpp index 291df2087f..ff0ad7cfe8 100644 --- a/stepmania/src/NoteDataUtil.cpp +++ b/stepmania/src/NoteDataUtil.cpp @@ -422,18 +422,19 @@ void NoteDataUtil::RemoveMines(NoteData &in, float fStartBeat, float fEndBeat ) } -static void GetTurnMapping( StepsType st, NoteDataUtil::TurnType tt, int NumTracks, int *iTakeFromTrack ) +static void GetTrackMapping( StepsType st, NoteDataUtil::TrackMapping tt, int NumTracks, int *iTakeFromTrack ) { int t; + // Identity transform for cases not handled below. + for( t = 0; t < MAX_NOTE_TRACKS; ++t ) + iTakeFromTrack[t] = t; + switch( tt ) { case NoteDataUtil::left: case NoteDataUtil::right: // Is there a way to do this withoutn handling each StepsType? -Chris - // Identity transform for ones not handled below. What should we do here? - for( t = 0; t < MAX_NOTE_TRACKS; ++t ) - iTakeFromTrack[t] = t; switch( st ) { case STEPS_TYPE_DANCE_SINGLE: @@ -526,6 +527,25 @@ static void GetTurnMapping( StepsType st, NoteDataUtil::TurnType tt, int NumTrac } } break; + case NoteDataUtil::stomp: + switch( st ) + { + case STEPS_TYPE_DANCE_SINGLE: + case STEPS_TYPE_DANCE_DOUBLE: + case STEPS_TYPE_DANCE_COUPLE: + iTakeFromTrack[0] = 3; + iTakeFromTrack[1] = 2; + iTakeFromTrack[2] = 1; + iTakeFromTrack[3] = 0; + iTakeFromTrack[4] = 7; + iTakeFromTrack[5] = 6; + iTakeFromTrack[6] = 5; + iTakeFromTrack[7] = 4; + break; + default: + break; + } + break; default: ASSERT(0); } @@ -566,10 +586,10 @@ static void SuperShuffleTaps( NoteData &in, int iStartIndex, int iEndIndex ) } -void NoteDataUtil::Turn( NoteData &in, StepsType st, TurnType tt, float fStartBeat, float fEndBeat ) +void NoteDataUtil::Turn( NoteData &in, StepsType st, TrackMapping tt, float fStartBeat, float fEndBeat ) { int iTakeFromTrack[MAX_NOTE_TRACKS]; // New track "t" will take from old track iTakeFromTrack[t] - GetTurnMapping( st, tt, in.GetNumTracks(), iTakeFromTrack ); + GetTrackMapping( st, tt, in.GetNumTracks(), iTakeFromTrack ); if( fEndBeat == -1 ) fEndBeat = in.GetMaxBeat(); @@ -957,13 +977,16 @@ dont_add_hold: } } -void NoteDataUtil::Stomp( NoteData &in, float fStartBeat, float fEndBeat ) +void NoteDataUtil::Stomp( NoteData &in, StepsType st, float fStartBeat, float fEndBeat ) { // Make all non jumps with ample space around them into jumps. const int first_row = BeatToNoteRow( fStartBeat ); const int last_row = min( BeatToNoteRow(fEndBeat), in.GetLastRow() ); + int iTrackMapping[MAX_NOTE_TRACKS]; + GetTrackMapping( st, stomp, in.GetNumTracks(), iTrackMapping ); + for( int r=first_row; r= 1 ) continue; - // TODO: Make this accurate for StepsTypes other than 4 panel cross. - int iOppositeTrack = in.GetNumTracks()-1-t; + int iOppositeTrack = iTrackMapping[t]; in.SetTapNote( iOppositeTrack, r, TAP_ADDITION ); } } @@ -1312,7 +1334,7 @@ void NoteDataUtil::TransformNoteData( NoteData &nd, const PlayerOptions &po, Ste 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_STOMP] ) NoteDataUtil::Stomp(nd, st, fStartBeat, fEndBeat); if( po.m_bTransforms[PlayerOptions::TRANSFORM_TWISTER] ) NoteDataUtil::Twister(nd, fStartBeat, fEndBeat); if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOHANDS] ) NoteDataUtil::RemoveHands(nd, fStartBeat, fEndBeat); } diff --git a/stepmania/src/NoteDataUtil.h b/stepmania/src/NoteDataUtil.h index 43679993ca..1c526f12da 100644 --- a/stepmania/src/NoteDataUtil.h +++ b/stepmania/src/NoteDataUtil.h @@ -42,8 +42,8 @@ namespace NoteDataUtil void RemoveHoldNotes( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void RemoveHands( 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, float fStartBeat = 0, float fEndBeat = -1 ); + enum TrackMapping { left, right, mirror, shuffle, super_shuffle, stomp, NUM_TRACK_MAPPINGS }; + void Turn( NoteData &in, StepsType st, TrackMapping tt, float fStartBeat = 0, float fEndBeat = -1 ); void Little( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void Wide( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void Big( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); @@ -53,7 +53,7 @@ namespace NoteDataUtil 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 Stomp( NoteData &in, StepsType st, 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 ); diff --git a/stepmania/src/ScreenEdit.cpp b/stepmania/src/ScreenEdit.cpp index db158c1b48..8b38c943b8 100644 --- a/stepmania/src/ScreenEdit.cpp +++ b/stepmania/src/ScreenEdit.cpp @@ -1573,6 +1573,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers ) float fBeginBeat = m_NoteFieldEdit.m_fBeginMarker; float fEndBeat = m_NoteFieldEdit.m_fEndMarker; TransformType tt = (TransformType)iAnswers[c]; + StepsType st = GAMESTATE->GetCurrentStyleDef()->m_StepsType; switch( tt ) { case noholds: NoteDataUtil::RemoveHoldNotes( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; @@ -1585,7 +1586,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers ) 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 stomp: NoteDataUtil::Stomp( m_NoteFieldEdit, st, fBeginBeat, fEndBeat ); break; case twister: NoteDataUtil::Twister( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case nohands: NoteDataUtil::RemoveHands( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; default: ASSERT(0);