diff --git a/stepmania/src/NoteData.cpp b/stepmania/src/NoteData.cpp index cb9d3af8fa..1187b96076 100644 --- a/stepmania/src/NoteData.cpp +++ b/stepmania/src/NoteData.cpp @@ -472,6 +472,9 @@ void NoteData::LoadTransformed( const NoteData* pOriginal, int iNewNumTracks, co void NoteData::LoadOverlapped( const NoteData* pOriginal, int iNewNumTracks ) { + // ??? Something is not right here - either we're not being called, + // or we're not working correctly at all. :-/ + SetNumTracks( iNewNumTracks ); NoteData in; @@ -491,6 +494,14 @@ void NoteData::LoadOverlapped( const NoteData* pOriginal, int iNewNumTracks ) if( GetTapNote(iTrackTo, row) == TAP_HOLD ) continue; + // Whoever rewrote the function: + // This transfers EMPTY steps over as well... + // ...so it's been fixed. Should I define operator| for + // TapNote so that it combines tracks? :-P + + if( iStepFrom == TAP_EMPTY ) + continue; + SetTapNote( iTrackTo, row, iStepFrom ); } } diff --git a/stepmania/src/NoteTypes.h b/stepmania/src/NoteTypes.h index 50c450544d..1c1727150e 100644 --- a/stepmania/src/NoteTypes.h +++ b/stepmania/src/NoteTypes.h @@ -23,7 +23,7 @@ typedef unsigned char TapNote; static const TapNote TAP_EMPTY = '0'; static const TapNote TAP_TAP = '1'; /* impatient? */ -static const TapNote TAP_HOLD_HEAD = '2'; // graded liuke a TA_TAP +static const TapNote TAP_HOLD_HEAD = '2'; // graded like a TAP_TAP /* In 2sand3s mode, holds are deleted and TAP_HOLD_END is added: */ static const TapNote TAP_HOLD_TAIL = '3'; @@ -37,6 +37,38 @@ static const TapNote TAP_ADDITION = '5'; // mine note - don't step! static const TapNote TAP_MINE = '6'; +// MD 11/12/03 - for future modifiers +// TAP_ADD_HOLD is to TAP_HOLD what TAP_ADDITION is to TAP_TAP. +// There is no equivalent for TAP_MINE. +static const TapNote TAP_ADD_HOLD = '7'; + +// BM-specific +// Removed taps, e.g. in Little - play keysounds here as if +// judged Perfect, but don't bother rendering or judging this +// step. Also used for when we implement auto-scratch in BM, +// and for if/when we do a "reduce" modifier that cancels out +// all but N keys on a line [useful for BM->DDR autogen, too]. +static const TapNote TAP_REMOVED = '8'; + +// KM-specific +// Removed hold body (...why?) - acts as follows: +// 1 - if we're using a sustained-sound gametype [Keyboardmania], and +// we've already hit the start of the sound (?? we put Holds Off on?) +// then this is triggered automatically to keep the sound going +// 2 - if we're NOT [anything else], we ignore this. +// Equivalent to all 4s aside from the first one. +static const TapNote TAP_REMOVED_HOLD_BODY = ':'; + +// KM-specific +// A hold removed by Little, I guess. +static const TapNote TAP_REMOVED_HOLD_HEAD = '.'; + +// KM-specific +// Kills an auto-sound from a hold. +static const TapNote TAP_REMOVED_HOLD_TAIL = '\''; + +// MD 11/12/03 end + // attack note start. Use lowercase letters a-z. // Don't use uppercase letters - 'M' it taken for mine. static const TapNote TAP_ATTACK_BEGIN = 'a'; @@ -81,8 +113,8 @@ enum NoteType // MD 11/02/03 - added finer divisions NOTE_TYPE_48TH, // forty-eighth note NOTE_TYPE_64TH, // sixty-fourth note - // 96ths and 192nds have no place here - if you're using them, - // you have already failed as a stepmaker. :-) + // Not having this triggers asserts all over the place. Go figure. + NOTE_TYPE_192ND, NUM_NOTE_TYPES, NOTE_TYPE_INVALID }; diff --git a/stepmania/src/NotesWriterDWI.cpp b/stepmania/src/NotesWriterDWI.cpp index 68f912eb1c..02014e1294 100644 --- a/stepmania/src/NotesWriterDWI.cpp +++ b/stepmania/src/NotesWriterDWI.cpp @@ -223,6 +223,7 @@ void NotesWriterDWI::WriteDWINotesField( FILE* fp, const Steps &out, int start ) ASSERT(0); // fall though case NOTE_TYPE_48TH: + case NOTE_TYPE_192ND: case NOTE_TYPE_INVALID: // since, for whatever reason, the only way to do // 48ths is through a block of 192nds... @@ -296,6 +297,7 @@ void NotesWriterDWI::WriteDWINotesField( FILE* fp, const Steps &out, int start ) fprintf( fp, "}" ); break; case NOTE_TYPE_48TH: + case NOTE_TYPE_192ND: case NOTE_TYPE_INVALID: fprintf( fp, "'" ); break;