From 7e3516f403f6725d9465fa0701bcd453d6dd2dea Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 13:37:04 -0500 Subject: [PATCH 01/29] New branch: [editorKeysounds] Let's allow modifying keysounds in the editor. First, start with some strings we'll need. --- Themes/_fallback/Languages/en.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index c0466c5fe5..d60efd3a5e 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -1369,6 +1369,10 @@ Help=Help Info=Info Routine Player=Player +Track %d=Track %d +None=None +New Sound=New Sound + [ScreenEditMenu] HeaderText=Edit Song/Steps HeaderSubText=Make your songs perfect From 0b3737cfc4c7c82310fe43b998dae322489aea28 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 13:41:40 -0500 Subject: [PATCH 02/29] [editorKeysounds] New menu to test. --- src/ScreenEdit.cpp | 9 ++++++++- src/ScreenEdit.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 9cf82c20ed..9054148f96 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -605,7 +605,9 @@ static MenuDef g_AreaMenu( MenuRowDef(ScreenEdit::last_second_at_beat, "Designate last second at current beat", true, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::undo, "Undo", true, EditMode_Practice, true, true, 0, NULL ), MenuRowDef(ScreenEdit::clear_clipboard, "Clear clipboard", true, - EditMode_Practice, true, true, 0, NULL ) + EditMode_Practice, true, true, 0, NULL ), + MenuRowDef(ScreenEdit::modify_keysounds_at_row, "Modify Keysounds at current beat", + true, EditMode_Full, true, true, 0, NULL) ); @@ -4463,6 +4465,11 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns m_Clipboard.ClearAll(); break; } + case modify_keysounds_at_row: + { + // Nothing yet. + break; + } }; if( bSaveUndo ) diff --git a/src/ScreenEdit.h b/src/ScreenEdit.h index ecac3673dc..94206f427f 100644 --- a/src/ScreenEdit.h +++ b/src/ScreenEdit.h @@ -435,6 +435,7 @@ public: last_second_at_beat, undo, clear_clipboard, /**< Clear the clipboards. */ + modify_keysounds_at_row, /**< Modify the keysounds at this row. */ NUM_AREA_MENU_CHOICES }; void HandleAlterMenuChoice(AlterMenuChoice c, From f6904fc55c77d7895284828c3b6c6ea5ff291c2e Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 13:42:39 -0500 Subject: [PATCH 03/29] [editorKeysounds] ...and the language file. --- Themes/_fallback/Languages/en.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index d60efd3a5e..7c6809e814 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -971,6 +971,7 @@ Min BPM=Min Specified BPM Mines=Mines Mirror Player 1 to 2=Mirror P1's notes to P2 (routine only) Mirror Player 2 to 1=Mirror P2's notes to P1 (routine only) +Modify keysounds at current beat=Modify keysounds at current beat MoveRandomToEnd=Random At End More Options=More Options MovieColorDepth=Movie Color From 578b573c0180effec3ad6c9c6f0a947297d90459 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 13:45:46 -0500 Subject: [PATCH 04/29] [editorKeysounds] Case sensitivity. --- Themes/_fallback/Languages/en.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index 7c6809e814..fc2fabdeff 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -971,7 +971,7 @@ Min BPM=Min Specified BPM Mines=Mines Mirror Player 1 to 2=Mirror P1's notes to P2 (routine only) Mirror Player 2 to 1=Mirror P2's notes to P1 (routine only) -Modify keysounds at current beat=Modify keysounds at current beat +Modify Keysounds at current beat=Modify keysounds at current beat MoveRandomToEnd=Random At End More Options=More Options MovieColorDepth=Movie Color From 8a98bcdff7d5051b78acbf0e4a3fb12ed36aca86 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 13:51:29 -0500 Subject: [PATCH 05/29] [editorKeysounds] Prepare the eventual menu. --- Themes/_fallback/metrics.ini | 4 ++++ src/ScreenEdit.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index b135f3835a..e0a4098c27 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -3896,6 +3896,10 @@ ColorDisabled=color("1,1,1,1") RowInitCommand=halign,0.5;valign,0.5;zoom,0.8;x,75;y,45;shadowlength,1 OptionRowNormalMetricsGroup="OptionRowMiniMenuEditHelp" +[ScreenMiniMenuKeysoundTrack] +Fallback="ScreenMiniMenu" +ShowFooter=false + [OptionRowMiniMenuEditHelp] # Help menu ( Keys & Stuff ) Fallback="OptionRowMiniMenu" diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 9054148f96..df0ffabf38 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -520,6 +520,10 @@ static MenuDef g_EditHelp( // fill this in dynamically ); +static MenuDef g_KeysoundTrack( + "ScreenMiniMenuKeysoundTrack" + ); // fill this in dynamically + static MenuDef g_MainMenu( "ScreenMiniMenuMainMenu", MenuRowDef( ScreenEdit::play_whole_song, "Play whole song", true, EditMode_Practice, true, true, 0, NULL ), From a25fa01b343f69e060a555b877b12196100c672f Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 14:09:12 -0500 Subject: [PATCH 06/29] [editorKeysounds] Some of the menu code. --- src/ScreenEdit.cpp | 16 ++++++++++++++++ src/ScreenEdit.h | 3 +++ 2 files changed, 19 insertions(+) diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index df0ffabf38..2770fb23d7 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -5226,6 +5226,22 @@ static RString GetDeviceButtonsLocalized( const vector &veb, const M return s; } +static LocalizedString TRACK_NUM("ScreenEdit", "Track %d"); + +void ScreenEdit::DoKeyboardTrackMenu() +{ + g_KeysoundTrack.rows.clear(); + int numKeysounds = m_pSong->m_vsKeysoundFile.size(); + for (int i = 0; i < m_NoteDataEdit.GetNumTracks(); ++i) + { + const TapNote &tn = m_NoteDataEdit.GetTapNote(i, this->GetRow()); + + //MenuRowDef(i, ssprintf(TRACK_NUM.c_str(), i + 1), true, EditMode_Full, false, false, + } + + EditMiniMenu(&g_KeysoundTrack); +} + void ScreenEdit::DoHelp() { g_EditHelp.rows.clear(); diff --git a/src/ScreenEdit.h b/src/ScreenEdit.h index 94206f427f..0de36ea16a 100644 --- a/src/ScreenEdit.h +++ b/src/ScreenEdit.h @@ -248,6 +248,9 @@ protected: float GetMaximumBeatForNewNote() const; // don't allow Down key to go past this beat. float GetMaximumBeatForMoving() const; // don't allow Down key to go past this beat. + /** @brief Display the keyboard track menu for the current row. */ + void DoKeyboardTrackMenu(); + void DoHelp(); /** @brief Display the TimingData menu for editing song and step timing. */ From 616f0742be398b8ff334a28f08036b937d35938b Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 14:14:42 -0500 Subject: [PATCH 07/29] [editorKeysounds] Allow pushing string vectors. This will save me a headache for later. --- src/ScreenMiniMenu.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/ScreenMiniMenu.h b/src/ScreenMiniMenu.h index b0ef6176e1..f7e8167e0a 100644 --- a/src/ScreenMiniMenu.h +++ b/src/ScreenMiniMenu.h @@ -50,6 +50,19 @@ struct MenuRowDef PUSH(c23);PUSH(c23);PUSH(c24);PUSH(c25); #undef PUSH } + + MenuRowDef(int r, RString n, bool e, EditMode s, + bool bTT, bool bTI, int d, vector options): + iRowCode(r), sName(n), bEnabled(e), pfnEnabled(NULL), + emShowIn(s), iDefaultChoice(d), choices(), + bThemeTitle(bTT), bThemeItems(bTI) + { + FOREACH(RString, options, str) + { + if (*str != "") choices.push_back(*str); + } + } + MenuRowDef( int r, RString n, bool e, EditMode s, bool bTT, bool bTI, int d, const char *c0=NULL, const char *c1=NULL, const char *c2=NULL, const char *c3=NULL, From 575724714445f5e123510148d01265587f52e2da Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 14:29:11 -0500 Subject: [PATCH 08/29] [editorKeysounds] First menu is working. --- src/ScreenEdit.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 2770fb23d7..1a46160a94 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -4471,7 +4471,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns } case modify_keysounds_at_row: { - // Nothing yet. + this->DoKeyboardTrackMenu(); break; } }; @@ -5227,16 +5227,33 @@ static RString GetDeviceButtonsLocalized( const vector &veb, const M } static LocalizedString TRACK_NUM("ScreenEdit", "Track %d"); +static LocalizedString NO_KEYSND("ScreenEdit", "None"); +static LocalizedString NEWKEYSND("ScreenEdit", "New Sound"); void ScreenEdit::DoKeyboardTrackMenu() { g_KeysoundTrack.rows.clear(); - int numKeysounds = m_pSong->m_vsKeysoundFile.size(); + vector &kses = m_pSong->m_vsKeysoundFile; + + vector choices; + FOREACH(RString, kses, ks) + { + choices.push_back(*ks); + } + choices.push_back(NEWKEYSND); + choices.push_back(NO_KEYSND); + int numKeysounds = kses.size(); for (int i = 0; i < m_NoteDataEdit.GetNumTracks(); ++i) { const TapNote &tn = m_NoteDataEdit.GetTapNote(i, this->GetRow()); + int keyIndex = tn.iKeysoundIndex; + if (keyIndex == -1) + { + keyIndex = numKeysounds; + } - //MenuRowDef(i, ssprintf(TRACK_NUM.c_str(), i + 1), true, EditMode_Full, false, false, + g_KeysoundTrack.rows.push_back(MenuRowDef(i, ssprintf(TRACK_NUM.GetValue(), i + 1), + true, EditMode_Full, false, false, keyIndex, choices)); } EditMiniMenu(&g_KeysoundTrack); From baa9b20e6aee9713c32414789da070fb35366ee8 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 14:44:48 -0500 Subject: [PATCH 09/29] [editorKeysounds] Prepare screen message. --- src/ScreenEdit.cpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 1a46160a94..2da06e09aa 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -74,6 +74,7 @@ AutoScreenMessage( SM_BackFromInsertStepAttackPlayerOptions ); AutoScreenMessage( SM_BackFromInsertCourseAttack ); AutoScreenMessage( SM_BackFromInsertCourseAttackPlayerOptions ); AutoScreenMessage( SM_BackFromCourseModeMenu ); +AutoScreenMessage( SM_BackFromKeysoundTrack ); AutoScreenMessage( SM_DoRevertToLastSave ); AutoScreenMessage( SM_DoRevertFromDisk ); AutoScreenMessage( SM_BackFromTimingDataInformation ); @@ -3178,6 +3179,35 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) ASSERT( GAMESTATE->m_pCurCourse ); } } + else if (SM == SM_BackFromKeysoundTrack) + { + int track = ScreenMiniMenu::s_iLastRowCode; + unsigned int sound = ScreenMiniMenu::s_viLastAnswers[0]; + + if (track < m_NoteDataEdit.GetNumTracks()) + { + vector &kses = m_pSong->m_vsKeysoundFile; + if (sound < kses.size()) + { + // set note at this row to use this keysound file. + // if it's empty, make it an auto keysound. + } + else if (sound == kses.size()) + { + // create a new sound (filename), point it. + // if it's empty, make it an auto keysound. + } + else // sound > kses.size() + { + // remove the sound. if it's an auto keysound, make it empty. + } + } + else + { + // TODO: (Maybe) allow for an option to delete a keysound if beyond the tracks? + } + SetDirty(true); + } else if( SM == SM_BackFromOptions ) { // The options may have changed the note skin. @@ -5256,7 +5286,7 @@ void ScreenEdit::DoKeyboardTrackMenu() true, EditMode_Full, false, false, keyIndex, choices)); } - EditMiniMenu(&g_KeysoundTrack); + EditMiniMenu(&g_KeysoundTrack, SM_BackFromKeysoundTrack); } void ScreenEdit::DoHelp() From 84a20cf6da27a6e3d480a826e996ad4d6078ce13 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 18:47:24 -0500 Subject: [PATCH 10/29] [editorKeysounds] Right, answers based on start. --- src/ScreenEdit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 2da06e09aa..3fa115b0af 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -3182,10 +3182,10 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) else if (SM == SM_BackFromKeysoundTrack) { int track = ScreenMiniMenu::s_iLastRowCode; - unsigned int sound = ScreenMiniMenu::s_viLastAnswers[0]; if (track < m_NoteDataEdit.GetNumTracks()) { + unsigned int sound = ScreenMiniMenu::s_viLastAnswers[track]; vector &kses = m_pSong->m_vsKeysoundFile; if (sound < kses.size()) { From 3b3e8df2f41ece6bc4942dcf4e6d976f392e0eb1 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 19:07:13 -0500 Subject: [PATCH 11/29] [editorKeysounds] Removing KS successful. --- src/ScreenEdit.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 3fa115b0af..f5177a8bca 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -3181,7 +3181,8 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) } else if (SM == SM_BackFromKeysoundTrack) { - int track = ScreenMiniMenu::s_iLastRowCode; + const int track = ScreenMiniMenu::s_iLastRowCode; + const int row = this->GetRow(); if (track < m_NoteDataEdit.GetNumTracks()) { @@ -3200,6 +3201,14 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) else // sound > kses.size() { // remove the sound. if it's an auto keysound, make it empty. + const TapNote &oldNote = m_NoteDataEdit.GetTapNote(track, row); + TapNote newNote = oldNote; + newNote.iKeysoundIndex = -1; + if (newNote.type == TapNote::autoKeysound) + { + newNote.type = TapNote::empty; // autoKeysound with no sound is pointless. + } + m_NoteDataEdit.SetTapNote(track, row, newNote); } } else From f3d260bc88158375b953eb7b7d04c35a14de98f4 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 19:17:00 -0500 Subject: [PATCH 12/29] [editorKeysounds] Modifying KS works. --- src/ScreenEdit.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index f5177a8bca..87de3d60df 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -3188,10 +3188,13 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) { unsigned int sound = ScreenMiniMenu::s_viLastAnswers[track]; vector &kses = m_pSong->m_vsKeysoundFile; + const TapNote &oldNote = m_NoteDataEdit.GetTapNote(track, row); + TapNote newNote = oldNote; if (sound < kses.size()) { // set note at this row to use this keysound file. // if it's empty, make it an auto keysound. + newNote.iKeysoundIndex = sound; } else if (sound == kses.size()) { @@ -3201,15 +3204,17 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) else // sound > kses.size() { // remove the sound. if it's an auto keysound, make it empty. - const TapNote &oldNote = m_NoteDataEdit.GetTapNote(track, row); - TapNote newNote = oldNote; newNote.iKeysoundIndex = -1; - if (newNote.type == TapNote::autoKeysound) - { - newNote.type = TapNote::empty; // autoKeysound with no sound is pointless. - } - m_NoteDataEdit.SetTapNote(track, row, newNote); } + if (newNote.type == TapNote::autoKeysound && newNote.iKeysoundIndex == -1) + { + newNote.type = TapNote::empty; // autoKeysound with no sound is pointless. + } + else if (newNote.type == TapNote::empty && newNote.iKeysoundIndex != -1) + { + newNote.type = TapNote::autoKeysound; // keysounds need something non empty. + } + m_NoteDataEdit.SetTapNote(track, row, newNote); } else { From e1af1eb2b645a7316dbbb8bf6b6acf5a763b2a1e Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 19:18:40 -0500 Subject: [PATCH 13/29] [editorKeysounds] Stop an editor closing crash. If you close the program while in the editor in debug mode, it can occasionally cause a bad access violation with the mutexes. If someone really wants this back, go ahead and put it back in. ...this really should have gone in default first. --- src/TimingData.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 0c14ec400d..71bb51d804 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -38,9 +38,6 @@ void TimingData::Clear() vector &vSegs = m_avpTimingSegments[tst]; for( unsigned i = 0; i < vSegs.size(); ++i ) { -#if defined(DEBUG) - LOG->Trace( "TimingData::Clear(): deleting %p", vSegs[i] ); -#endif SAFE_DELETE( vSegs[i] ); } From a353e659d02b23569efa9b698d7fbdadbd60483b Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 19:49:53 -0500 Subject: [PATCH 14/29] [editorKeysounds] Can add KS, but... 1) A physical note is shown in the editor. We do need a separate graphic for auto keysounds. 2) The keysound only plays if you "hit" the note. Auto keysound notes should play regardless of hit or miss. Time to make this branch public. Anyone want to help tackle this? --- Themes/_fallback/Languages/en.ini | 1 + src/ScreenEdit.cpp | 48 ++++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index fc2fabdeff..e6a6e1230d 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -1373,6 +1373,7 @@ Routine Player=Player Track %d=Track %d None=None New Sound=New Sound +Enter New Keysound File=Enter the name of the new keysound file.\nPlease make sure it is spelt right. [ScreenEditMenu] HeaderText=Edit Song/Steps diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 87de3d60df..3cc997d143 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -75,6 +75,7 @@ AutoScreenMessage( SM_BackFromInsertCourseAttack ); AutoScreenMessage( SM_BackFromInsertCourseAttackPlayerOptions ); AutoScreenMessage( SM_BackFromCourseModeMenu ); AutoScreenMessage( SM_BackFromKeysoundTrack ); +AutoScreenMessage( SM_BackFromNewKeysound ); AutoScreenMessage( SM_DoRevertToLastSave ); AutoScreenMessage( SM_DoRevertFromDisk ); AutoScreenMessage( SM_BackFromTimingDataInformation ); @@ -2934,6 +2935,8 @@ void ScreenEdit::ScrollTo( float fDestinationBeat ) m_soundChangeLine.Play(); } +static LocalizedString NEW_KEYSOUND_FILE("ScreenEdit", "Enter New Keysound File"); + void ScreenEdit::HandleMessage( const Message &msg ) { if( msg == "Judgment" ) @@ -3188,31 +3191,33 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) { unsigned int sound = ScreenMiniMenu::s_viLastAnswers[track]; vector &kses = m_pSong->m_vsKeysoundFile; + if (sound == kses.size()) + { + // create a new sound (filename), point it. + // if it's empty, make it an auto keysound. + ScreenTextEntry::TextEntry(SM_BackFromNewKeysound, NEW_KEYSOUND_FILE, "", 64); + return; + } const TapNote &oldNote = m_NoteDataEdit.GetTapNote(track, row); - TapNote newNote = oldNote; + TapNote newNote = oldNote; // need to lose the const. not feeling like casting. if (sound < kses.size()) { // set note at this row to use this keysound file. // if it's empty, make it an auto keysound. newNote.iKeysoundIndex = sound; - } - else if (sound == kses.size()) - { - // create a new sound (filename), point it. - // if it's empty, make it an auto keysound. + if (newNote.type == TapNote::empty) + { + newNote.type = TapNote::autoKeysound; // keysounds need something non empty. + } } else // sound > kses.size() { // remove the sound. if it's an auto keysound, make it empty. newNote.iKeysoundIndex = -1; - } - if (newNote.type == TapNote::autoKeysound && newNote.iKeysoundIndex == -1) - { - newNote.type = TapNote::empty; // autoKeysound with no sound is pointless. - } - else if (newNote.type == TapNote::empty && newNote.iKeysoundIndex != -1) - { - newNote.type = TapNote::autoKeysound; // keysounds need something non empty. + if (newNote.type == TapNote::autoKeysound) + { + newNote.type = TapNote::empty; // autoKeysound with no sound is pointless. + } } m_NoteDataEdit.SetTapNote(track, row, newNote); } @@ -3222,6 +3227,21 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) } SetDirty(true); } + else if (SM == SM_BackFromNewKeysound && !ScreenTextEntry::s_bCancelledLast) + { + RString answer = ScreenTextEntry::s_sLastAnswer; + const int track = ScreenMiniMenu::s_iLastRowCode; // still keeps the same value. + const int row = this->GetRow(); + const TapNote &oldNote = m_NoteDataEdit.GetTapNote(track, row); + TapNote newNote = oldNote; // need to lose the const. not feeling like casting. + vector &kses = m_pSong->m_vsKeysoundFile; + newNote.iKeysoundIndex = kses.size(); + kses.push_back(answer); + if (newNote.type == TapNote::empty) + newNote.type = TapNote::autoKeysound; // keysounds need something non empty. + m_NoteDataEdit.SetTapNote(track, row, newNote); + SetDirty(true); + } else if( SM == SM_BackFromOptions ) { // The options may have changed the note skin. From 2f6240d372f54ada7302a047179c9dad54781fd5 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 21:30:48 -0500 Subject: [PATCH 15/29] [editorKeysounds] autoKeysounds is auto now. --- src/Player.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Player.cpp b/src/Player.cpp index e4f0a1e536..6e8b28c484 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -2984,6 +2984,16 @@ void Player::CrossedRows( int iLastRowCrossed, const RageTimer &now ) } } } + + // handle autokeysounds here. + for (int t = 0; t < m_NoteData.GetNumTracks(); ++t) + { + const TapNote &tn = m_NoteData.GetTapNote(t, iRow); + if (tn.type == TapNote::autoKeysound) + { + PlayKeysound(tn, TNS_None); + } + } } } From 22033113a5b4fbc660dbb13e45bde49074aed355 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Fri, 10 Feb 2012 23:16:00 -0500 Subject: [PATCH 16/29] [editorKeysounds] More attempts, need help. Anyone want a stab? Main issue: tap + autoKeysound means skipped judgment. --- src/NoteData.cpp | 10 ++++++---- src/NoteDataWithScoring.cpp | 5 ++++- src/Player.cpp | 34 ++++++++++++++++++++++++---------- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/NoteData.cpp b/src/NoteData.cpp index 96429530a0..a544876a58 100644 --- a/src/NoteData.cpp +++ b/src/NoteData.cpp @@ -462,7 +462,8 @@ int NoteData::GetLastRow() const bool NoteData::IsTap(const TapNote &tn, const int row) const { return (tn.type != TapNote::empty && tn.type != TapNote::mine - && tn.type != TapNote::lift && tn.type != TapNote::fake + && tn.type != TapNote::lift && tn.type != TapNote::fake + && tn.type != TapNote::autoKeysound && GAMESTATE->GetProcessedTimingData()->IsJudgableAtRow(row)); } @@ -610,9 +611,10 @@ int NoteData::GetNumRowsWithSimultaneousTaps( int iMinTaps, int iStartIndex, int for( int t=0; t= iMinTaps ) diff --git a/src/NoteDataWithScoring.cpp b/src/NoteDataWithScoring.cpp index 3ce551b064..633e5d4cc4 100644 --- a/src/NoteDataWithScoring.cpp +++ b/src/NoteDataWithScoring.cpp @@ -250,7 +250,10 @@ TapNoteScore NoteDataWithScoring::MinTapNoteScore( const NoteData &in, unsigned { // Ignore mines (and fake arrows), or the score will always be TNS_None. const TapNote &tn = in.GetTapNote( t, row ); - if( tn.type == TapNote::empty || tn.type == TapNote::mine || tn.type == TapNote::fake ) + if (tn.type == TapNote::empty || + tn.type == TapNote::mine || + tn.type == TapNote::fake || + tn.type == TapNote::autoKeysound) continue; score = min( score, tn.result.tns ); } diff --git a/src/Player.cpp b/src/Player.cpp index 6e8b28c484..a3b9cec17c 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -1653,7 +1653,7 @@ int Player::GetClosestNoteDirectional( int col, int iStartRow, int iEndRow, bool const TapNote &tn = begin->second; if (!m_Timing->IsJudgableAtRow( begin->first )) break; - if( tn.type == TapNote::empty ) + if( tn.type == TapNote::empty || tn.type == TapNote::autoKeysound ) break; if( !bAllowGraded && tn.result.tns != TNS_None ) break; @@ -2238,9 +2238,11 @@ void Player::StepStrumHopo( int col, int row, const RageTimer &tm, bool bHeld, b break; case TapNote::attack: if( !bRelease && fSecondsFromExact <= GetWindowSeconds(TW_Attack) && !pTN->result.bHidden ) - score = TNS_W2; // sentinel + score = AllowW1() ? TNS_W1 : TNS_W2; // sentinel + break; + case TapNote::autoKeysound: + score = AllowW1() ? TNS_W1 : TNS_W2; break; - case TapNote::hold_head: // oh wow, this was causing the trigger before the hold heads // bug. (It was fNoteOffset > 0.f before) -DaisuMaster @@ -2744,6 +2746,10 @@ void Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanSeconds ) if( m_pSecondaryScoreKeeper ) m_pSecondaryScoreKeeper->HandleTapScore( tn ); } + else if (tn.type == TapNote::autoKeysound) + { + tn.result.tns = AllowW1() ? TNS_W1 : TNS_W2; // sentinel + } else { tn.result.tns = TNS_Miss; @@ -2791,7 +2797,9 @@ void Player::UpdateJudgedRows() for( int iTrack = 0; iTrack < m_NoteData.GetNumTracks(); ++iTrack ) { const TapNote &tn = m_NoteData.GetTapNote( iTrack, iRow ); - if( tn.type == TapNote::empty || tn.type == TapNote::mine ) continue; + if (tn.type == TapNote::empty || + tn.type == TapNote::mine || + tn.type == TapNote::autoKeysound) continue; SetJudgment( tn.result.tns, iTrack, tn.result.fTapNoteOffset ); } } @@ -2973,8 +2981,11 @@ void Player::CrossedRows( int iLastRowCrossed, const RageTimer &now ) // check to see if there's a note at the crossed row if( m_pPlayerState->m_PlayerController != PC_HUMAN ) { - if(tn.type != TapNote::empty && tn.type != TapNote::fake && tn.result.tns == TNS_None - && this->m_Timing->IsJudgableAtRow(iRow) ) + if (tn.type != TapNote::empty && + tn.type != TapNote::fake && + tn.type != TapNote::autoKeysound && + tn.result.tns == TNS_None && + this->m_Timing->IsJudgableAtRow(iRow) ) { Step( iTrack, iRow, now, false, false ); if( m_pPlayerState->m_PlayerController == PC_AUTOPLAY ) @@ -2988,10 +2999,10 @@ void Player::CrossedRows( int iLastRowCrossed, const RageTimer &now ) // handle autokeysounds here. for (int t = 0; t < m_NoteData.GetNumTracks(); ++t) { - const TapNote &tn = m_NoteData.GetTapNote(t, iRow); - if (tn.type == TapNote::autoKeysound) + const TapNote &tap = m_NoteData.GetTapNote(t, iRow); + if (tap.type == TapNote::autoKeysound) { - PlayKeysound(tn, TNS_None); + PlayKeysound(tap, TNS_None); } } } @@ -3151,7 +3162,10 @@ void Player::HandleTapRowScore( unsigned row ) { const TapNote &tn = m_NoteData.GetTapNote( track, row ); // Mines cannot be handled here. - if( tn.type == TapNote::empty || tn.type == TapNote::fake || tn.type == TapNote::mine ) + if (tn.type == TapNote::empty || + tn.type == TapNote::fake || + tn.type == TapNote::mine || + tn.type == TapNote::autoKeysound) continue; if( m_pPrimaryScoreKeeper ) m_pPrimaryScoreKeeper->HandleTapScore( tn ); From b2f4365fe5976dff82347b078d85d400667d998c Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 11 Feb 2012 01:10:11 -0500 Subject: [PATCH 17/29] [editorKeysounds] Right, never hits here. --- src/Player.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Player.cpp b/src/Player.cpp index a3b9cec17c..0fdcf4b57f 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -2746,10 +2746,6 @@ void Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanSeconds ) if( m_pSecondaryScoreKeeper ) m_pSecondaryScoreKeeper->HandleTapScore( tn ); } - else if (tn.type == TapNote::autoKeysound) - { - tn.result.tns = AllowW1() ? TNS_W1 : TNS_W2; // sentinel - } else { tn.result.tns = TNS_Miss; From d7d56f525e6fc7e0201b0e64d3e2f37c628ccba3 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 11 Feb 2012 01:21:22 -0500 Subject: [PATCH 18/29] [editorKeysounds] Right, doesn't hit here either. --- src/Player.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Player.cpp b/src/Player.cpp index 0fdcf4b57f..4f15b9ac2c 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -2240,9 +2240,6 @@ void Player::StepStrumHopo( int col, int row, const RageTimer &tm, bool bHeld, b if( !bRelease && fSecondsFromExact <= GetWindowSeconds(TW_Attack) && !pTN->result.bHidden ) score = AllowW1() ? TNS_W1 : TNS_W2; // sentinel break; - case TapNote::autoKeysound: - score = AllowW1() ? TNS_W1 : TNS_W2; - break; case TapNote::hold_head: // oh wow, this was causing the trigger before the hold heads // bug. (It was fNoteOffset > 0.f before) -DaisuMaster From 8deb166ab27fa61631df4d59e79c17b81d02febf Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 11 Feb 2012 01:27:13 -0500 Subject: [PATCH 19/29] [editorKeysounds] Judgments are back. Still could use someone to check it over though. --- src/NoteDataWithScoring.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/NoteDataWithScoring.cpp b/src/NoteDataWithScoring.cpp index 633e5d4cc4..7cf2f2ce84 100644 --- a/src/NoteDataWithScoring.cpp +++ b/src/NoteDataWithScoring.cpp @@ -153,7 +153,10 @@ int LastTapNoteScoreTrack( const NoteData &in, unsigned iRow, PlayerNumber pn ) { /* Skip empty tracks and mines */ const TapNote &tn = in.GetTapNote( t, iRow ); - if( tn.type == TapNote::empty || tn.type == TapNote::mine || tn.type == TapNote::fake ) + if (tn.type == TapNote::empty || + tn.type == TapNote::mine || + tn.type == TapNote::fake || + tn.type == TapNote::autoKeysound) continue; if( tn.pn != PLAYER_INVALID && tn.pn != pn && pn != PLAYER_INVALID ) continue; @@ -187,7 +190,10 @@ int MinTapNoteScoreTrack( const NoteData &in, unsigned iRow, PlayerNumber pn ) { // Skip empty tracks and mines const TapNote &tn = in.GetTapNote( t, iRow ); - if( tn.type == TapNote::empty || tn.type == TapNote::mine || tn.type == TapNote::fake ) + if (tn.type == TapNote::empty || + tn.type == TapNote::mine || + tn.type == TapNote::fake || + tn.type == TapNote::autoKeysound) continue; if( tn.pn != PLAYER_INVALID && tn.pn != pn && pn != PLAYER_INVALID ) continue; From effa33eaec0e2273d345eb461d67df6665169ed6 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 11 Feb 2012 01:30:08 -0500 Subject: [PATCH 20/29] [editorKeysounds] autoKeys shouldn't be pressed. --- src/NoteData.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/NoteData.cpp b/src/NoteData.cpp index a544876a58..89698d79f2 100644 --- a/src/NoteData.cpp +++ b/src/NoteData.cpp @@ -557,6 +557,7 @@ bool NoteData::RowNeedsAtLeastSimultaneousPresses( int iMinSimultaneousPresses, case TapNote::empty: case TapNote::fake: case TapNote::lift: // you don't "press" on a lift. + case TapNote::autoKeysound: continue; // skip these types - they don't count default: break; } From fb7bc1edcb28ad1ae9a58bebc049ac47f301545e Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 11 Feb 2012 02:07:57 -0500 Subject: [PATCH 21/29] [editorKeysounds] Don't show AKs in gameplay. We still need a better editor noteskin for the auto keysounds though. --- src/NoteDisplay.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/NoteDisplay.cpp b/src/NoteDisplay.cpp index b7ac1940f4..7e1ff5516c 100644 --- a/src/NoteDisplay.cpp +++ b/src/NoteDisplay.cpp @@ -684,6 +684,7 @@ void NoteDisplay::DrawHold( const TapNote &tn, int iCol, int iRow, bool bIsBeing void NoteDisplay::DrawActor( const TapNote& tn, Actor* pActor, NotePart part, int iCol, float fYOffset, float fBeat, bool bIsAddition, float fPercentFadeToFail, float fReverseOffsetPixels, float fColorScale, float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar ) { + if (tn.type == TapNote::autoKeysound && !GAMESTATE->m_bInStepEditor) return; if( fYOffset < fDrawDistanceAfterTargetsPixels || fYOffset > fDrawDistanceBeforeTargetsPixels ) return; const float fY = ArrowEffects::GetYPos( m_pPlayerState, iCol, fYOffset, fReverseOffsetPixels ); From 1f68f7afe483cd361976cf31e59891535b98b561 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 11 Feb 2012 14:40:24 -0500 Subject: [PATCH 22/29] [editorKeysounds] minor comment. --- src/Player.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Player.cpp b/src/Player.cpp index 4f15b9ac2c..cefab6cce8 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -1653,6 +1653,7 @@ int Player::GetClosestNoteDirectional( int col, int iStartRow, int iEndRow, bool const TapNote &tn = begin->second; if (!m_Timing->IsJudgableAtRow( begin->first )) break; + // unsure if autoKeysounds should be excluded. -Wolfman2000 if( tn.type == TapNote::empty || tn.type == TapNote::autoKeysound ) break; if( !bAllowGraded && tn.result.tns != TNS_None ) From 0bf91fffd332ca1b3840bfbb4820daba4cacd1ab Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 11 Feb 2012 14:45:09 -0500 Subject: [PATCH 23/29] [editorKeysound] Add menu to remove keysounds. Next up: the actual removing. --- Themes/_fallback/Languages/en.ini | 1 + src/ScreenEdit.cpp | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index e6a6e1230d..8e39955549 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -1021,6 +1021,7 @@ RefreshRate=Refresh Rate Reload Songs=Reload Songs/Courses Remove=Remove Remove Change=Remove Change +Remove Keysound=Remove Keysound Rename=Rename Reset To Defaults=Reset Options To Default Values Revert from disk=Revert from disk diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 3cc997d143..debdcbbbcd 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -5319,6 +5319,8 @@ void ScreenEdit::DoKeyboardTrackMenu() g_KeysoundTrack.rows.push_back(MenuRowDef(i, ssprintf(TRACK_NUM.GetValue(), i + 1), true, EditMode_Full, false, false, keyIndex, choices)); } + g_KeysoundTrack.rows.push_back(MenuRowDef(kses.size(), "Remove Keysound", true, + EditMode_Full, false, false, 0, kses)); EditMiniMenu(&g_KeysoundTrack, SM_BackFromKeysoundTrack); } From 216286c3f1f04d946914d0bf9e3124b501da38e0 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 11 Feb 2012 14:52:41 -0500 Subject: [PATCH 24/29] [editorKeysounds] keep keysound names unique. --- src/ScreenEdit.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index debdcbbbcd..4b97bfca6f 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -3235,8 +3235,16 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) const TapNote &oldNote = m_NoteDataEdit.GetTapNote(track, row); TapNote newNote = oldNote; // need to lose the const. not feeling like casting. vector &kses = m_pSong->m_vsKeysoundFile; - newNote.iKeysoundIndex = kses.size(); - kses.push_back(answer); + unsigned pos = find(kses.begin(), kses.end(), answer) - kses.begin(); + if (pos == kses.size()) + { + newNote.iKeysoundIndex = kses.size(); + kses.push_back(answer); + } + else + { + newNote.iKeysoundIndex = pos; + } if (newNote.type == TapNote::empty) newNote.type = TapNote::autoKeysound; // keysounds need something non empty. m_NoteDataEdit.SetTapNote(track, row, newNote); From 4151f20327363481d6aea430425747a9cd575759 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 11 Feb 2012 15:11:44 -0500 Subject: [PATCH 25/29] [editorKeysounds] Removing Keysounds successful. --- src/ScreenEdit.cpp | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index 4b97bfca6f..b26c52f721 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -3185,12 +3185,13 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) else if (SM == SM_BackFromKeysoundTrack) { const int track = ScreenMiniMenu::s_iLastRowCode; + const int tracks = m_NoteDataEdit.GetNumTracks(); const int row = this->GetRow(); + unsigned int sound = ScreenMiniMenu::s_viLastAnswers[track]; + vector &kses = m_pSong->m_vsKeysoundFile; - if (track < m_NoteDataEdit.GetNumTracks()) + if (track < tracks) { - unsigned int sound = ScreenMiniMenu::s_viLastAnswers[track]; - vector &kses = m_pSong->m_vsKeysoundFile; if (sound == kses.size()) { // create a new sound (filename), point it. @@ -3221,9 +3222,28 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) } m_NoteDataEdit.SetTapNote(track, row, newNote); } - else + else if (track == tracks) { - // TODO: (Maybe) allow for an option to delete a keysound if beyond the tracks? + kses.erase(kses.begin() + sound); + // TODO: Make the following a part of NoteData? + for (int t = 0; t < tracks; ++t) + { + FOREACH_NONEMPTY_ROW_IN_TRACK(m_NoteDataEdit, t, r) + { + const TapNote &oldNote = m_NoteDataEdit.GetTapNote(t, r); + TapNote newNote = oldNote; // need to lose the const. not feeling like casting. + if (newNote.iKeysoundIndex == static_cast(sound)) + { + newNote.iKeysoundIndex = -1; + if (newNote.type == TapNote::autoKeysound) + newNote.type = TapNote::empty; + } + else if (newNote.iKeysoundIndex > static_cast(sound)) + newNote.iKeysoundIndex--; + + m_NoteDataEdit.SetTapNote(t, r, newNote); + } + } } SetDirty(true); } @@ -5327,8 +5347,8 @@ void ScreenEdit::DoKeyboardTrackMenu() g_KeysoundTrack.rows.push_back(MenuRowDef(i, ssprintf(TRACK_NUM.GetValue(), i + 1), true, EditMode_Full, false, false, keyIndex, choices)); } - g_KeysoundTrack.rows.push_back(MenuRowDef(kses.size(), "Remove Keysound", true, - EditMode_Full, false, false, 0, kses)); + g_KeysoundTrack.rows.push_back(MenuRowDef(m_NoteDataEdit.GetNumTracks(), "Remove Keysound", + true, EditMode_Full, false, false, 0, kses)); EditMiniMenu(&g_KeysoundTrack, SM_BackFromKeysoundTrack); } From baae57d9d527be977bb846757fab1a05ec73d4f0 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 11 Feb 2012 15:16:34 -0500 Subject: [PATCH 26/29] [editorKeysounds] No KSes in this mode, thanks. --- src/Player.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Player.cpp b/src/Player.cpp index cefab6cce8..c913e1b46d 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -2990,13 +2990,16 @@ void Player::CrossedRows( int iLastRowCrossed, const RageTimer &now ) } } - // handle autokeysounds here. - for (int t = 0; t < m_NoteData.GetNumTracks(); ++t) + // handle autokeysounds here (if not in the editor). + if (!GAMESTATE->m_bInStepEditor) { - const TapNote &tap = m_NoteData.GetTapNote(t, iRow); - if (tap.type == TapNote::autoKeysound) + for (int t = 0; t < m_NoteData.GetNumTracks(); ++t) { - PlayKeysound(tap, TNS_None); + const TapNote &tap = m_NoteData.GetTapNote(t, iRow); + if (tap.type == TapNote::autoKeysound) + { + PlayKeysound(tap, TNS_None); + } } } } From 0a32b9c44071c49369c6075277ab7916edb5276a Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 12 Feb 2012 14:19:33 -0500 Subject: [PATCH 27/29] [editorKeysounds] Okay freem, .hgeol sucks. Seriously, how'd I have to commit this here?!? --- .../Themes/SMMAX2.0/SMMAX20 graphics info.txt | 32 +++++++++---------- .../01 ScreenCompanyFirst/info.txt | 4 +-- _assets/Themes/SMMAX2.0/fonts/frutiger.txt | 10 +++--- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/_assets/Themes/SMMAX2.0/SMMAX20 graphics info.txt b/_assets/Themes/SMMAX2.0/SMMAX20 graphics info.txt index 62ee46c88d..519a100bd7 100644 --- a/_assets/Themes/SMMAX2.0/SMMAX20 graphics info.txt +++ b/_assets/Themes/SMMAX2.0/SMMAX20 graphics info.txt @@ -1,17 +1,17 @@ -This folder contains all graphics and fonts used in SMMAX2.0 theme project. -Project is aimed to cration of new version of very popular SM3.9`s SMMAX theme for use in SM5.0. -It`s not intended to be a port! Project was desingned to be new from scratch. -I was planning to do all work myself but I hit the wall of my poor coding skills. -So, after couple months lack of progress I`ve made a decision to share the project with community. -Main project file is "SMMAX20 screens project ver1_1.cdr". To open it you need Corel Draw X5 or later. -From corel you can export every tiny element to PNG or PSD whith transperacy. -It`s just a matter of proper selection. -Keep in mind that project graphisc was designed in 1920x1200 resolution. -It is native resolution of my monitor. So now you must bear with me, -because it`s lots of work to change it back to 1080p -Project use 2 fonts and you can find`em (or info about how to obtain it) in fonts folder. -Project is released under MIT License. Same as whole stepmania. -Thankyou for your attention, intrest, future contribution, -and please, really please, (I`m beging now) do not convert my work to something ugly. ^__^; - +This folder contains all graphics and fonts used in SMMAX2.0 theme project. +Project is aimed to cration of new version of very popular SM3.9`s SMMAX theme for use in SM5.0. +It`s not intended to be a port! Project was desingned to be new from scratch. +I was planning to do all work myself but I hit the wall of my poor coding skills. +So, after couple months lack of progress I`ve made a decision to share the project with community. +Main project file is "SMMAX20 screens project ver1_1.cdr". To open it you need Corel Draw X5 or later. +From corel you can export every tiny element to PNG or PSD whith transperacy. +It`s just a matter of proper selection. +Keep in mind that project graphisc was designed in 1920x1200 resolution. +It is native resolution of my monitor. So now you must bear with me, +because it`s lots of work to change it back to 1080p +Project use 2 fonts and you can find`em (or info about how to obtain it) in fonts folder. +Project is released under MIT License. Same as whole stepmania. +Thankyou for your attention, intrest, future contribution, +and please, really please, (I`m beging now) do not convert my work to something ugly. ^__^; + ~ John Reactor. \ No newline at end of file diff --git a/_assets/Themes/SMMAX2.0/exported graphics/01 ScreenCompanyFirst/info.txt b/_assets/Themes/SMMAX2.0/exported graphics/01 ScreenCompanyFirst/info.txt index 860223a8fa..3ede7c848b 100644 --- a/_assets/Themes/SMMAX2.0/exported graphics/01 ScreenCompanyFirst/info.txt +++ b/_assets/Themes/SMMAX2.0/exported graphics/01 ScreenCompanyFirst/info.txt @@ -1,3 +1,3 @@ -No graphics here. -Hey. It`s only black bacground and some text. What you`ve expeced. +No graphics here. +Hey. It`s only black bacground and some text. What you`ve expeced. All text should be dynamic, and translatable, remeber? \ No newline at end of file diff --git a/_assets/Themes/SMMAX2.0/fonts/frutiger.txt b/_assets/Themes/SMMAX2.0/fonts/frutiger.txt index c050eb3755..462cb1c5ba 100644 --- a/_assets/Themes/SMMAX2.0/fonts/frutiger.txt +++ b/_assets/Themes/SMMAX2.0/fonts/frutiger.txt @@ -1,6 +1,6 @@ -Second font used in project is frutiger. Unforutnatly it`s commersial, and cant be distributed. -But no worries. Firstly: This font is used only in "system layer" graphics, and isnt essential for design as charlie brown m54. -Secondly: This font has many free replacements. Just search the web for something simillar. Heres link to the original: -http://www.fonts.com/findfonts/detail.htm?productid=191443 for reference. - +Second font used in project is frutiger. Unforutnatly it`s commersial, and cant be distributed. +But no worries. Firstly: This font is used only in "system layer" graphics, and isnt essential for design as charlie brown m54. +Secondly: This font has many free replacements. Just search the web for something simillar. Heres link to the original: +http://www.fonts.com/findfonts/detail.htm?productid=191443 for reference. + \ No newline at end of file From cdaaeeafd62c0524286b0edb4b74c0af1a596a7f Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 12 Feb 2012 14:20:37 -0500 Subject: [PATCH 28/29] [editorKeysounds] This shouldn't crash I think. This should also be in default. --- src/SongManager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SongManager.cpp b/src/SongManager.cpp index eb2571deb0..f669c52b68 100644 --- a/src/SongManager.cpp +++ b/src/SongManager.cpp @@ -258,6 +258,7 @@ void SongManager::LoadStepManiaSongDir( RString sDir, LoadingWindow *ld ) FOREACH_CONST( RString, arrayGroupDirs, s ) // foreach dir in /Songs/ { RString sGroupDirName = *s; + // TODO: If this check fails, log a warning instead of crashing. SanityCheckGroupDir(sDir+sGroupDirName); // Find all Song folders in this group directory From 35b418af277b31118a5843e9754fffbd871251c7 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sun, 12 Feb 2012 14:51:34 -0500 Subject: [PATCH 29/29] [editorKeysounds] Add the changelog message. --- Docs/Changelog_sm5.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index 1b2891ef7e..5393a753fb 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -8,6 +8,14 @@ ________________________________________________________________________________ StepMania 5.0 alpha 1a | 201202?? -------------------------------------------------------------------------------- +2012/02/08 +---------- +* [ScreenEdit] Added support for editing keysounds. Use the Area Menu (Enter) + to either modify what sounds play on that row, or even remove a sound from + the list. Any sounds assigned to empty notes will automatically become + an AutoKeysound, and any AutoKeysounds that have their sound removed will + become empty notes. [Wolfman2000] + 2012/02/08 ---------- * [ScreenOptionsMaster] Added StepsRowLayoutType metric.