diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index f46fd8875e..cf7ce28394 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -8,6 +8,13 @@ ________________________________________________________________________________ StepMania 5.0 $next | 2011xxxx -------------------------------------------------------------------------------- +2011/10/16 +---------- +* [NoteDataUtil] Add the Backwards mod for games where the intended + definition of Mirror is different. Regarding Pump gameplay, what was + called Mirror in Preview 4 is considered Backwards now, and the original + Mirror is back in its old position. [Wolfman2000] + 2011/10/12 ---------- * [Steps] Fix a bug where e.g. ".SM" ".DWI" ".Sm" ".sM" files diff --git a/Docs/Luadoc/Lua.xml b/Docs/Luadoc/Lua.xml index 1f9ee43352..e22eff351b 100644 --- a/Docs/Luadoc/Lua.xml +++ b/Docs/Luadoc/Lua.xml @@ -939,6 +939,7 @@ + diff --git a/Docs/Luadoc/LuaDocumentation.xml b/Docs/Luadoc/LuaDocumentation.xml index 436c602a5d..6f2baf83d1 100644 --- a/Docs/Luadoc/LuaDocumentation.xml +++ b/Docs/Luadoc/LuaDocumentation.xml @@ -2484,6 +2484,9 @@ + + + Returns true if the backwards mod is applied, false otherwise. diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index 64fed11c4e..d055f85ade 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -323,6 +323,8 @@ SaveScreenshot1=GetCodeForGame("SaveScreenshot1") SaveScreenshot2=GetCodeForGame("SaveScreenshot2") # on the player options menu. CancelAllPlayerOptions=GetCodeForGame("CancelAllPlayerOptions") +# unused codes: +Backwards="" # deprecated codes: NextTheme="" NextTheme2="" @@ -2199,14 +2201,15 @@ Appearance,4="mod,blink;name,Blink" # Appearance,5="mod,blink;name,Blink" # Appearance,6="mod,randomvanish;name,R.Vanish" -Turn="6;selectmultiple" +Turn="7;selectmultiple" TurnDefault="mod,no turn" Turn,1="mod,mirror;name,Mirror" -Turn,2="mod,left;name,Left" -Turn,3="mod,right;name,Right" -Turn,4="mod,shuffle;name,Shuffle" -Turn,5="mod,supershuffle;name,SuperShuffle" -Turn,6="mod,softshuffle;name,SoftShuffle" +Turn,2="mod,backwards;name,Backwards" +Turn,3="mod,left;name,Left" +Turn,4="mod,right;name,Right" +Turn,5="mod,shuffle;name,Shuffle" +Turn,6="mod,supershuffle;name,SuperShuffle" +Turn,7="mod,softshuffle;name,SoftShuffle" # Turn="6" # TurnDefault="mod,no turn" diff --git a/src/CodeDetector.cpp b/src/CodeDetector.cpp index 5630894b91..d35a3a00c2 100644 --- a/src/CodeDetector.cpp +++ b/src/CodeDetector.cpp @@ -23,6 +23,7 @@ const char *CodeNames[] = { "ModeMenu1", "ModeMenu2", "Mirror", + "Backwards", "Left", "Right", "Shuffle", @@ -200,6 +201,7 @@ bool CodeDetector::DetectAndAdjustMusicOptions( GameController controller ) switch( code ) { case CODE_MIRROR: po.ToggleOneTurn( PlayerOptions::TURN_MIRROR ); break; + case CODE_BACKWARDS: po.ToggleOneTurn( PlayerOptions::TURN_BACKWARDS ); break; case CODE_LEFT: po.ToggleOneTurn( PlayerOptions::TURN_LEFT ); break; case CODE_RIGHT: po.ToggleOneTurn( PlayerOptions::TURN_RIGHT ); break; case CODE_SHUFFLE: po.ToggleOneTurn( PlayerOptions::TURN_SHUFFLE ); break; diff --git a/src/CodeDetector.h b/src/CodeDetector.h index e636a8830c..d9b6089fbb 100644 --- a/src/CodeDetector.h +++ b/src/CodeDetector.h @@ -17,6 +17,7 @@ enum Code { CODE_MODE_MENU1, CODE_MODE_MENU2, CODE_MIRROR, + CODE_BACKWARDS, CODE_LEFT, CODE_RIGHT, CODE_SHUFFLE, diff --git a/src/NoteDataUtil.cpp b/src/NoteDataUtil.cpp index 2aeb12bc91..f8ec088a67 100644 --- a/src/NoteDataUtil.cpp +++ b/src/NoteDataUtil.cpp @@ -1125,6 +1125,7 @@ void NoteDataUtil::RemoveAllButPlayer( NoteData &inout, PlayerNumber pn ) } } +// TODO: Perform appropriate matrix calculations for everything instead. static void GetTrackMapping( StepsType st, NoteDataUtil::TrackMapping tt, int NumTracks, int *iTakeFromTrack ) { // Identity transform for cases not handled below. @@ -1208,57 +1209,61 @@ static void GetTrackMapping( StepsType st, NoteDataUtil::TrackMapping tt, int Nu } break; + case NoteDataUtil::backwards: + { + // If a Pump game type, treat differently. Otherwise, send to mirror. + bool needsBackwards = true; + switch (st) + { + case StepsType_pump_single: + case StepsType_pump_couple: + { + iTakeFromTrack[0] = 3; + iTakeFromTrack[1] = 4; + iTakeFromTrack[2] = 2; + iTakeFromTrack[3] = 0; + iTakeFromTrack[4] = 1; + iTakeFromTrack[5] = 8; + iTakeFromTrack[6] = 9; + iTakeFromTrack[7] = 2; + iTakeFromTrack[8] = 5; + iTakeFromTrack[9] = 6; + break; + } + case StepsType_pump_double: + case StepsType_pump_routine: + { + iTakeFromTrack[0] = 8; + iTakeFromTrack[1] = 9; + iTakeFromTrack[2] = 7; + iTakeFromTrack[3] = 5; + iTakeFromTrack[4] = 6; + iTakeFromTrack[5] = 3; + iTakeFromTrack[6] = 4; + iTakeFromTrack[7] = 2; + iTakeFromTrack[8] = 0; + iTakeFromTrack[9] = 1; + break; + } + case StepsType_pump_halfdouble: + { + iTakeFromTrack[0] = 5; + iTakeFromTrack[1] = 3; + iTakeFromTrack[2] = 4; + iTakeFromTrack[3] = 1; + iTakeFromTrack[4] = 2; + iTakeFromTrack[5] = 0; + break; + } + default: + needsBackwards = false; + } + if (needsBackwards) break; + } case NoteDataUtil::mirror: { - switch (st) - { - case StepsType_pump_single: - case StepsType_pump_couple: - { - iTakeFromTrack[0] = 3; - iTakeFromTrack[1] = 4; - iTakeFromTrack[2] = 2; - iTakeFromTrack[3] = 0; - iTakeFromTrack[4] = 1; - iTakeFromTrack[5] = 8; - iTakeFromTrack[6] = 9; - iTakeFromTrack[7] = 2; - iTakeFromTrack[8] = 5; - iTakeFromTrack[9] = 6; - break; - } - case StepsType_pump_double: - case StepsType_pump_routine: - { - iTakeFromTrack[0] = 8; - iTakeFromTrack[1] = 9; - iTakeFromTrack[2] = 7; - iTakeFromTrack[3] = 5; - iTakeFromTrack[4] = 6; - iTakeFromTrack[5] = 3; - iTakeFromTrack[6] = 4; - iTakeFromTrack[7] = 2; - iTakeFromTrack[8] = 0; - iTakeFromTrack[9] = 1; - break; - } - case StepsType_pump_halfdouble: - { - iTakeFromTrack[0] = 5; - iTakeFromTrack[1] = 3; - iTakeFromTrack[2] = 4; - iTakeFromTrack[3] = 1; - iTakeFromTrack[4] = 2; - iTakeFromTrack[5] = 0; - break; - } - default: - { - for( int t=0; t &AddTo, bool bForceNoteSkin ) const AddPart( AddTo, m_fRandomSpeed, "RandomSpeed" ); if( m_bTurns[TURN_MIRROR] ) AddTo.push_back( "Mirror" ); + if( m_bTurns[TURN_BACKWARDS] ) AddTo.push_back( "Backwards" ); if( m_bTurns[TURN_LEFT] ) AddTo.push_back( "Left" ); if( m_bTurns[TURN_RIGHT] ) AddTo.push_back( "Right" ); if( m_bTurns[TURN_SHUFFLE] ) AddTo.push_back( "Shuffle" ); @@ -389,6 +390,7 @@ bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut else if( sBit == "randomvanish" ) SET_FLOAT( fAppearances[APPEARANCE_RANDOMVANISH] ) else if( sBit == "turn" && !on ) ZERO( m_bTurns ); /* "no turn" */ else if( sBit == "mirror" ) m_bTurns[TURN_MIRROR] = on; + else if( sBit == "backwards" ) m_bTurns[TURN_BACKWARDS] = on; else if( sBit == "left" ) m_bTurns[TURN_LEFT] = on; else if( sBit == "right" ) m_bTurns[TURN_RIGHT] = on; else if( sBit == "shuffle" ) m_bTurns[TURN_SHUFFLE] = on; @@ -963,6 +965,7 @@ public: // Turns DEFINE_METHOD( GetMirror, m_bTurns[PlayerOptions::TURN_MIRROR] ) + DEFINE_METHOD( GetBackwards, m_bTurns[PlayerOptions::TURN_BACKWARDS] ) DEFINE_METHOD( GetLeft, m_bTurns[PlayerOptions::TURN_LEFT] ) DEFINE_METHOD( GetRight, m_bTurns[PlayerOptions::TURN_RIGHT] ) DEFINE_METHOD( GetShuffle, m_bTurns[PlayerOptions::TURN_SHUFFLE] ) @@ -1088,6 +1091,7 @@ public: // Turns ADD_METHOD( GetMirror ); + ADD_METHOD( GetBackwards ); ADD_METHOD( GetLeft ); ADD_METHOD( GetRight ); ADD_METHOD( GetShuffle ); diff --git a/src/PlayerOptions.h b/src/PlayerOptions.h index 0166af9c4e..d3292d1280 100644 --- a/src/PlayerOptions.h +++ b/src/PlayerOptions.h @@ -109,6 +109,7 @@ public: enum Turn { TURN_NONE=0, /**< No turning of the arrows is performed. */ TURN_MIRROR, /**< The arrows are mirrored from their normal position. */ + TURN_BACKWARDS, /**< The arrows are turned 180 degrees. This does NOT always equal mirror. */ TURN_LEFT, /**< The arrows are turned 90 degrees to the left. */ TURN_RIGHT, /**< The arrows are turned 90 degress to the right. */ TURN_SHUFFLE, /**< Some of the arrow columns are changed throughout the whole song. */ diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index c6f947008b..9d5cf5c843 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -549,7 +549,7 @@ static MenuDef g_AlterMenu( EditMode_Practice, true, true, 0, "4th","8th","12th","16th","24th","32nd","48th","64th","192nd"), MenuRowDef(ScreenEdit::turn, "Turn", true, - EditMode_Practice, true, true, 0, "Left","Right","Mirror","Shuffle","SuperShuffle" ), + EditMode_Practice, true, true, 0, "Left","Right","Mirror","Backwards","Shuffle","SuperShuffle" ), MenuRowDef(ScreenEdit::transform, "Transform", true, EditMode_Practice, true, true, 0, "NoHolds","NoMines","Little","Wide", "Big","Quick","Skippy","Mines","Echo","Stomp","Planted","Floored", @@ -3986,6 +3986,7 @@ void ScreenEdit::HandleAlterMenuChoice(AlterMenuChoice c, const vector &iAn case left: NoteDataUtil::Turn( m_Clipboard, st, NoteDataUtil::left ); break; case right: NoteDataUtil::Turn( m_Clipboard, st, NoteDataUtil::right ); break; case mirror: NoteDataUtil::Turn( m_Clipboard, st, NoteDataUtil::mirror ); break; + case turn_backwards: NoteDataUtil::Turn( m_Clipboard, st, NoteDataUtil::backwards ); break; case shuffle: NoteDataUtil::Turn( m_Clipboard, st, NoteDataUtil::shuffle ); break; case super_shuffle: NoteDataUtil::Turn( m_Clipboard, st, NoteDataUtil::super_shuffle ); break; } diff --git a/src/ScreenEdit.h b/src/ScreenEdit.h index 0749344f05..bb68c9d523 100644 --- a/src/ScreenEdit.h +++ b/src/ScreenEdit.h @@ -456,7 +456,8 @@ public: { left, /**< Turn the notes as if you were facing to the left. */ right, /**< Turn the notes as if you were facing to the right. */ - mirror, /**< Turn the notes as if you were facing away from the machine. */ + mirror, /**< Flip the notes vertically. */ + turn_backwards, /**< Turn the notes as if you were facing away from the machine. */ shuffle, /**< Replace one column with another column. */ super_shuffle, /**< Replace each note individually. */ NUM_TURN_TYPES