From: <sag...@us...> - 2009-08-05 16:13:22
|
Revision: 314 http://modplug.svn.sourceforge.net/modplug/?rev=314&view=rev Author: saga-games Date: 2009-08-05 16:13:09 +0000 (Wed, 05 Aug 2009) Log Message: ----------- [Imp] Instrument Editor: Sample map shows tuning-specific notename on context menu [Ref] New function IsCompatibleMode to replace the tedious procedure of first checking the mod type and then whether the compatibility flag is being set. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-08-04 17:48:52 UTC (rev 313) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-08-05 16:13:09 UTC (rev 314) @@ -320,7 +320,7 @@ } wsprintf(s, "Map all notes to sample %d", penv->Keyboard[m_nNote]); AppendMenu(hMenu, MF_STRING, ID_NOTEMAP_COPY_SMP, s); - wsprintf(s, "Map all notes to %s", GetNoteStr(penv->NoteMap[m_nNote])); + wsprintf(s, "Map all notes to %s", pSndFile->GetNoteName(penv->NoteMap[m_nNote], m_nInstrument).c_str()); AppendMenu(hMenu, MF_STRING, ID_NOTEMAP_COPY_NOTE, s); AppendMenu(hMenu, MF_STRING, ID_NOTEMAP_RESET, "Reset note mapping"); AppendMenu(hMenu, MF_STRING, ID_INSTRUMENT_DUPLICATE, "Duplicate Instrument\tShift+New"); Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2009-08-04 17:48:52 UTC (rev 313) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2009-08-05 16:13:09 UTC (rev 314) @@ -2690,7 +2690,7 @@ case 0xC0: // note cut case 0xD0: // note delay //IT compatibility 22. SD0 == SD1, SC0 == SC1 - if(((param & 0x0F) == 1) || ((param & 0x0F) == 0 && (m_SndFile.GetType() & (MOD_TYPE_IT|MOD_TYPE_MPT)) && m_SndFile.GetModFlag(MSF_COMPATIBLE_PLAY))) + if(((param & 0x0F) == 1) || ((param & 0x0F) == 0 && m_SndFile.IsCompatibleMode(MOD_TYPE_IT))) strcpy(s, "1 frame"); else strcat(s, " frames"); Modified: trunk/OpenMPT/mptrack/View_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_smp.cpp 2009-08-04 17:48:52 UTC (rev 313) +++ trunk/OpenMPT/mptrack/View_smp.cpp 2009-08-05 16:13:09 UTC (rev 314) @@ -2432,6 +2432,9 @@ return; } + BeginWaitCursor(); + BEGIN_CRITICAL(); + if(dlg.m_nEditOption == 3) { // resize @@ -2443,8 +2446,12 @@ ctrlSmp::InsertSilence(pSndFile->Ins[m_nSample], dlg.m_nSamples, (dlg.m_nEditOption == 2) ? pSndFile->Ins[m_nSample].nLength : 0, pSndFile); } + END_CRITICAL(); + EndWaitCursor(); + if(nOldLength != pSndFile->Ins[m_nSample].nLength) { + SetCurSel(0, 0); pModDoc->SetModified(); pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEINFO | HINT_SAMPLEDATA, NULL); } Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-08-04 17:48:52 UTC (rev 313) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2009-08-05 16:13:09 UTC (rev 314) @@ -251,7 +251,7 @@ } // -> CODE#0010 // -> DESC="add extended parameter mechanism to pattern effects" - if(GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT | MOD_TYPE_XM)) nMusicTempo = CLAMP(nMusicTempo, 32, 255); else nMusicTempo = CLAMP(nMusicTempo, GetModSpecifications().tempoMin, GetModSpecifications().tempoMax); @@ -299,7 +299,7 @@ // Global Volume case CMD_GLOBALVOLUME: if (!(m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))) param <<= 1; - if(GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT | MOD_TYPE_XM)) { //IT compatibility 16. Both FT2 and IT ignore out-of-range values if (param <= 128) @@ -313,7 +313,7 @@ break; // Global Volume Slide case CMD_GLOBALVOLSLIDE: - if(GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT | MOD_TYPE_XM)) { //IT compatibility 16. Global volume slide params are stored per channel (FT2/IT) if (param) pChn->nOldGlobalVolSlide = param; else param = pChn->nOldGlobalVolSlide; @@ -437,7 +437,7 @@ MODINSTRUMENT *psmp = &Ins[instr]; UINT note = pChn->nNewNote; - if(note == 0 && TypeIsIT_MPT() && GetModFlag(MSF_COMPATIBLE_PLAY)) return; + if(note == 0 && IsCompatibleMode(MOD_TYPE_IT)) return; if ((penv) && (note) && (note <= 128)) { @@ -518,7 +518,7 @@ if ((!bPorta) || (!(m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) || (m_dwSongFlags & SONG_ITCOMPATMODE) || (!pChn->nLength) || ((pChn->dwFlags & CHN_NOTEFADE) && (!pChn->nFadeOutVol)) //IT compatibility tentative fix: Reset envelopes when instrument changes. - || (TypeIsIT_MPT() && GetModFlag(MSF_COMPATIBLE_PLAY) && bInstrumentChanged)) + || (IsCompatibleMode(MOD_TYPE_IT) && bInstrumentChanged)) { pChn->dwFlags |= CHN_FASTVOLRAMP; if ((m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) && (!bInstrumentChanged) && (penv) && (!(pChn->dwFlags & (CHN_KEYOFF|CHN_NOTEFADE)))) @@ -553,9 +553,9 @@ { pChn->dwFlags &= ~(CHN_KEYOFF|CHN_NOTEFADE|CHN_VOLENV|CHN_PANENV|CHN_PITCHENV); - //IT compatibility tentative fix: Don't anymore change bidi loop direction when + //IT compatibility tentative fix: Don't change bidi loop direction when //no sample nor instrument is changed. - if(TypeIsIT_MPT() && GetModFlag(MSF_COMPATIBLE_PLAY) && psmp == pChn->pInstrument && !bInstrumentChanged) + if(IsCompatibleMode(MOD_TYPE_IT) && psmp == pChn->pInstrument && !bInstrumentChanged) pChn->dwFlags = (pChn->dwFlags & (0xFFFFFF00 | CHN_PINGPONGFLAG)) | (psmp->uFlags & 0xFF); else pChn->dwFlags = (pChn->dwFlags & 0xFFFFFF00) | (psmp->uFlags & 0xFF); @@ -642,7 +642,7 @@ } //IT compatibility tentative fix: Clear channel note memory. - if(TypeIsIT_MPT() && GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT)) { pChn->nNote = 0; pChn->nNewNote = 0; @@ -746,7 +746,7 @@ pChn->nLeftVU = pChn->nRightVU = 0xFF; pChn->dwFlags &= ~CHN_FILTER; pChn->dwFlags |= CHN_FASTVOLRAMP; - if(!GetModFlag(MSF_COMPATIBLE_PLAY) || !(m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) + if(!IsCompatibleMode(MOD_TYPE_IT)) { //IT compatibility 15. Retrigger will not be reset (Tremor doesn't store anything here, so we just don't reset this as well) pChn->nRetrigCount = 0; @@ -1170,15 +1170,15 @@ if(nStartTick == 0) { //IT compatibility 22. SD0 == SD1 - if(GetModFlag(MSF_COMPATIBLE_PLAY) && (m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) + if(IsCompatibleMode(MOD_TYPE_IT)) nStartTick = 1; //ST3 ignores notes with SD0 completely - else if(m_nType & MOD_TYPE_S3M) + else if(GetType() & MOD_TYPE_S3M) nStartTick = m_nMusicSpeed; } //IT compatibility 08. Handling of out-of-range delay command. - if(nStartTick >= m_nMusicSpeed && GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT) && GetModFlag(MSF_COMPATIBLE_PLAY)) + if(nStartTick >= m_nMusicSpeed && IsCompatibleMode(MOD_TYPE_IT)) { if(instr) { @@ -1217,10 +1217,10 @@ { UINT note = pChn->nRowNote; if (instr) pChn->nNewIns = instr; - if (m_nType & (MOD_TYPE_MOD|MOD_TYPE_XM|MOD_TYPE_MT2)) + if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2)) { // XM: FT2 ignores a note next to a K00 effect, and a fade-out seems to be done when no volume envelope is present (not exactly the Kxx behaviour) - if(cmd == CMD_KEYOFF && param == 0 && GetModFlag(MSF_COMPATIBLE_PLAY)) + if(cmd == CMD_KEYOFF && param == 0 && IsCompatibleMode(MOD_TYPE_XM)) { note = instr = 0; } @@ -1236,7 +1236,7 @@ if ((!note) && (instr)) //Case: instrument with no note data. { //IT compatibility: Instrument with no note. - if(GetType() & (MOD_TYPE_IT|MOD_TYPE_MPT) && GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT)) { if(m_nInstruments) { @@ -1352,7 +1352,7 @@ pChn->dwFlags |= CHN_FASTVOLRAMP; pChn->nRestorePanOnNewNote = 0; //IT compatibility 20. Set pan overrides random pan - if(GetModFlag(MSF_COMPATIBLE_PLAY) && (m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))) + if(IsCompatibleMode(MOD_TYPE_IT)) pChn->nPanSwing = 0; } @@ -1429,7 +1429,7 @@ case VOLCMD_PORTAUP: //IT compatibility (one of the first - link effect memory) - if((GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) && GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT)) PortamentoUp(pChn, vol << 2, true); else PortamentoUp(pChn, vol << 2, false); @@ -1437,7 +1437,7 @@ case VOLCMD_PORTADOWN: //IT compatibility (one of the first - link effect memory) - if((GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) && GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT)) PortamentoDown(pChn, vol << 2, true); else PortamentoDown(pChn, vol << 2, false); @@ -1552,7 +1552,7 @@ // Arpeggio case CMD_ARPEGGIO: // IT compatibility 01. Don't ignore Arpeggio if no note is playing - if ((m_nTickCount) || (((!pChn->nPeriod) || !pChn->nNote) && !((m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)) && GetModFlag(MSF_COMPATIBLE_PLAY)))) break; + if ((m_nTickCount) || (((!pChn->nPeriod) || !pChn->nNote) && !IsCompatibleMode(MOD_TYPE_IT | MOD_TYPE_S3M))) break; if ((!param) && (!(m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT)))) break; pChn->nCommand = CMD_ARPEGGIO; if (param) pChn->nArpeggio = param; @@ -1566,7 +1566,7 @@ if (!(param & 0x0F)) param |= pChn->nRetrigParam & 0x0F; param |= 0x100; // increment retrig count on first row } - if(GetModFlag(MSF_COMPATIBLE_PLAY) && (m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) + if(IsCompatibleMode(MOD_TYPE_IT)) { // IT compatibility 15. Retrigger if (param) @@ -1599,7 +1599,7 @@ case CMD_TREMOR: if (!(m_dwSongFlags & SONG_FIRSTTICK)) break; - if((m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) && GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT)) { // IT compatibility 12. / 13. Tremor (using modified DUMB's Tremor logic here because of old effects - http://dumb.sf.net/) @@ -1626,7 +1626,7 @@ if (!(m_dwSongFlags & SONG_FIRSTTICK)) break; if (!(m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) param <<= 1; - if(GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT | MOD_TYPE_XM)) { //IT compatibility 16. Both FT2 and IT ignore out-of-range values if (param <= 128) @@ -1642,7 +1642,7 @@ // Global Volume Slide case CMD_GLOBALVOLSLIDE: //IT compatibility 16. Saving last global volume slide param per channel (FT2/IT) - if(GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT | MOD_TYPE_XM)) GlobalVolSlide(param, &pChn->nOldGlobalVolSlide); else GlobalVolSlide(param, &m_nOldGlbVolSlide); @@ -1668,7 +1668,7 @@ pChn->dwFlags |= CHN_FASTVOLRAMP; pChn->nRestorePanOnNewNote = 0; //IT compatibility 20. Set pan overrides random pan - if(GetModFlag(MSF_COMPATIBLE_PLAY) && (m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))) + if(IsCompatibleMode(MOD_TYPE_IT)) pChn->nPanSwing = 0; break; @@ -1699,7 +1699,7 @@ // Key Off case CMD_KEYOFF: - if(GetModFlag(MSF_COMPATIBLE_PLAY) && (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))) + if(IsCompatibleMode(MOD_TYPE_XM)) { // This is how it's supposed to sound... (in FT2) if (m_nTickCount == param) @@ -1769,7 +1769,7 @@ { pChn->nVolEnvPosition = param; - if(!GetModFlag(MSF_COMPATIBLE_PLAY) || !(m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))) + if(!IsCompatibleMode(MOD_TYPE_XM)) { // FT2 only sets the position of the Volume envelope pChn->nPanEnvPosition = param; @@ -1897,7 +1897,7 @@ //end rewbs.fix && ((nPosJump != (int)m_nCurrentPattern) || (nBreakRow != (int)m_nRow))) { - if (nPosJump != (int)m_nCurrentPattern && !((m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) && GetModFlag(MSF_COMPATIBLE_PLAY))) + if (nPosJump != (int)m_nCurrentPattern && !IsCompatibleMode(MOD_TYPE_IT)) { for (UINT i=0; i<m_nChannels; i++) Chn[i].nPatternLoopCount = 0; } @@ -2143,7 +2143,7 @@ pChn->dwFlags |= CHN_PORTAMENTO; //IT compatibility 03 - if(!(m_dwSongFlags & SONG_ITCOMPATMODE) && (GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) && GetModFlag(MSF_COMPATIBLE_PLAY)) + if(!(m_dwSongFlags & SONG_ITCOMPATMODE) && IsCompatibleMode(MOD_TYPE_IT)) { if(param == 0) param = pChn->nOldPortaUpDown; pChn->nOldPortaUpDown = param; @@ -2229,7 +2229,7 @@ } //IT compatibility 23. Portamento with no note - if(pChn->nPeriod == pChn->nPortamentoDest && ((m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))) && GetModFlag(MSF_COMPATIBLE_PLAY)) + if(pChn->nPeriod == pChn->nPortamentoDest && IsCompatibleMode(MOD_TYPE_IT)) pChn->nPortamentoDest = 0; } @@ -2458,7 +2458,7 @@ case 0x80: if(m_dwSongFlags & SONG_FIRSTTICK) { //IT compatibility 20. (Panning always resets surround state) - if( TypeIsIT_MPT_XM() == false || GetModFlag(MSF_COMPATIBLE_PLAY) ) + if(IsCompatibleMode(MOD_TYPE_S3M | MOD_TYPE_MOD | MOD_TYPE_IT | MOD_TYPE_XM)) { if (!(m_dwSongFlags & SONG_SURROUNDPAN)) pChn->dwFlags &= ~CHN_SURROUND; } @@ -2541,14 +2541,14 @@ // S8x: Set 4-bit Panning case 0x80: if(m_dwSongFlags & SONG_FIRSTTICK) { - if( TypeIsIT_MPT_XM() == false || GetModFlag(MSF_COMPATIBLE_PLAY) ) + if(IsCompatibleMode(MOD_TYPE_S3M | MOD_TYPE_MOD | MOD_TYPE_IT | MOD_TYPE_XM)) { if (!(m_dwSongFlags & SONG_SURROUNDPAN)) pChn->dwFlags &= ~CHN_SURROUND; } pChn->nPan = (param << 4) + 8; pChn->dwFlags |= CHN_FASTVOLRAMP; //IT compatibility 20. Set pan overrides random pan - if(GetModFlag(MSF_COMPATIBLE_PLAY) && (m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))) + if(IsCompatibleMode(MOD_TYPE_IT)) pChn->nPanSwing = 0; } break; @@ -3029,7 +3029,7 @@ UINT nRetrigCount = pChn->nRetrigCount; BOOL bDoRetrig = FALSE; - if(GetModFlag(MSF_COMPATIBLE_PLAY) && (m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))) + if(IsCompatibleMode(MOD_TYPE_IT)) { //IT compatibility 15. Retrigger if ((m_dwSongFlags & SONG_FIRSTTICK) && pChn->nRowNote) @@ -3074,7 +3074,7 @@ int vol = pChn->nVolume; // FT2 compatibility: Retrig + volume will not change volume of retrigged notes - if(!(m_nType & MOD_TYPE_XM) || !(pChn->nRowVolCmd == VOLCMD_VOLUME) || !GetModFlag(MSF_COMPATIBLE_PLAY)) + if(!IsCompatibleMode(MOD_TYPE_XM) || !(pChn->nRowVolCmd == VOLCMD_VOLUME)) { if (retrigTable1[dv]) vol = (vol * retrigTable1[dv]) >> 4; @@ -3110,7 +3110,7 @@ SampleOffset(nChn, offset, false); } } - if(!GetModFlag(MSF_COMPATIBLE_PLAY) || !(m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT))) + if(!IsCompatibleMode(MOD_TYPE_IT)) pChn->nRetrigCount = (BYTE)nRetrigCount; } @@ -3164,7 +3164,7 @@ if(nTick == 0) { //IT compatibility 22. SC0 == SC1 - if(GetModFlag(MSF_COMPATIBLE_PLAY) && (m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) + if(IsCompatibleMode(MOD_TYPE_IT)) nTick = 1; // ST3 doesn't cut notes with SC0 else if(m_nType & MOD_TYPE_S3M) @@ -3296,7 +3296,7 @@ // -> CODE#0016 // -> DESC="default tempo update" - if(GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT | MOD_TYPE_XM)) m_nMusicTempo = CLAMP(m_nMusicTempo, 32, 255); else m_nMusicTempo = CLAMP(m_nMusicTempo, specs.tempoMin, specs.tempoMax); @@ -3317,7 +3317,7 @@ if(!pChn->nPatternLoopCount) { //IT compatibility 10. Pattern loops (+ same fix for XM and MOD files) - if((GetType() & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT) && GetModFlag(MSF_COMPATIBLE_PLAY)) || (GetType() & (MOD_TYPE_MOD))) + if(IsCompatibleMode(MOD_TYPE_MOD | MOD_TYPE_IT | MOD_TYPE_XM)) pChn->nPatternLoop = m_nRow+1; return -1; @@ -3327,7 +3327,7 @@ MODCHANNEL *p = Chn; //IT compatibility 10. Pattern loops (+ same fix for XM and MOD files) - if(!((GetType() & (MOD_TYPE_XM|MOD_TYPE_IT|MOD_TYPE_MPT) && GetModFlag(MSF_COMPATIBLE_PLAY)) || (GetType() & (MOD_TYPE_MOD)))) + if(!IsCompatibleMode(MOD_TYPE_MOD | MOD_TYPE_IT | MOD_TYPE_XM)) { for (UINT i=0; i<m_nChannels; i++, p++) if (p != pChn) { Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2009-08-04 17:48:52 UTC (rev 313) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2009-08-05 16:13:09 UTC (rev 314) @@ -637,7 +637,7 @@ Chn[ich].nVolume = 256; Chn[ich].nCutOff = 0x7F; //IT compatibility 15. Retrigger - if(GetModFlag(MSF_COMPATIBLE_PLAY) && (m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) + if(IsCompatibleMode(MOD_TYPE_IT)) { Chn[ich].nRetrigParam = Chn[ich].nRetrigCount = 1; } @@ -1187,7 +1187,7 @@ Chn[j].nPatternLoopCount = 0; Chn[j].nPatternLoop = 0; //IT compatibility 15. Retrigger - if(GetModFlag(MSF_COMPATIBLE_PLAY) && (m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) + if(IsCompatibleMode(MOD_TYPE_IT)) { Chn[j].nRetrigCount = 0; Chn[j].nRetrigParam = 1; @@ -1453,7 +1453,7 @@ Chn[i].nFadeOutVol = 0; Chn[i].dwFlags |= CHN_KEYOFF|CHN_NOTEFADE; //IT compatibility 15. Retrigger - if(GetModFlag(MSF_COMPATIBLE_PLAY) && (m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) + if(IsCompatibleMode(MOD_TYPE_IT)) { Chn[i].nRetrigParam = 1; Chn[i].nRetrigCount = 0; Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2009-08-04 17:48:52 UTC (rev 313) +++ trunk/OpenMPT/soundlib/Sndfile.h 2009-08-05 16:13:09 UTC (rev 314) @@ -809,6 +809,15 @@ void SetModFlags(const uint16 v) {m_ModFlags = v;} bool GetModFlag(BYTE i) const {return ((m_ModFlags & (1<<i)) != 0);} void SetModFlag(BYTE i, bool val) {if(i < 8*sizeof(m_ModFlags)) {m_ModFlags = (val) ? m_ModFlags |= (1 << i) : m_ModFlags &= ~(1 << i);}} + + // Is compatible mode for a specific tracker turned on? + // Hint 1: No need to poll for MOD_TYPE_MPT, as it will automatically be linked with MOD_TYPE_IT + // Hint 2: Always returns true for MOD / S3M format (if that is the format of the current file) + bool IsCompatibleMode(MODTYPE type) { + if(GetType() & type & (MOD_TYPE_MOD | MOD_TYPE_S3M)) + return true; // those formats don't have flags so we will always return true + return ((GetType() & ((type & MOD_TYPE_IT) ? type | MOD_TYPE_MPT : type)) && GetModFlag(MSF_COMPATIBLE_PLAY)) ? true : false; + } //Tuning--> public: Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2009-08-04 17:48:52 UTC (rev 313) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2009-08-05 16:13:09 UTC (rev 314) @@ -982,7 +982,7 @@ break; case 3: //IT compatibility 19. Use random values - if((m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) && GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT)) vol += (((rand() & 0xFF) - 0x7F) * (int)pChn->nTremoloDepth) >> tremattn; else vol += (ModRandomTable[trempos] * (int)pChn->nTremoloDepth) >> tremattn; @@ -1000,7 +1000,7 @@ // Tremor if(pChn->nCommand == CMD_TREMOR) { - if((m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) && GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT)) { // IT compatibility 12. / 13.: Tremor @@ -1192,7 +1192,7 @@ else { //IT playback compatibility 01 & 02 - if(GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT) && GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT)) { if(pChn->nArpeggio >> 4 != 0 || (pChn->nArpeggio & 0x0F) != 0) { @@ -1301,7 +1301,7 @@ switch (pChn->nVibratoType & 0x03) { case 1: - if(GetModFlag(MSF_COMPATIBLE_PLAY) == true) + if(IsCompatibleMode(MOD_TYPE_S3M | MOD_TYPE_MOD | MOD_TYPE_IT | MOD_TYPE_XM)) vdelta = -ModRampDownTable[(vibpos+16) % 64]; else vdelta = ModRampDownTable[vibpos]; @@ -1311,7 +1311,7 @@ break; case 3: //IT compatibility 19. Use random values - if((m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) && GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT)) vdelta = (rand() & 0xFF) - 0x7F; else vdelta = ModRandomTable[vibpos]; @@ -1371,7 +1371,7 @@ break; case 3: //IT compatibility 19. Use random values - if((m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) && GetModFlag(MSF_COMPATIBLE_PLAY)) + if(IsCompatibleMode(MOD_TYPE_IT)) pdelta = (rand() & 0xFF) - 0x7F; else pdelta = ModRandomTable[panpos]; @@ -1603,7 +1603,7 @@ { UINT pitchloopend = penv->PitchPoints[penv->nPitchLoopEnd]; //IT compatibility 24. Short envelope loops - if (m_nType != MOD_TYPE_XM && GetModFlag(MSF_COMPATIBLE_PLAY)) pitchloopend++; + if (IsCompatibleMode(MOD_TYPE_IT)) pitchloopend++; if (pChn->nPitchEnvPosition == pitchloopend) pChn->nPitchEnvPosition = penv->PitchPoints[penv->nPitchLoopStart]; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |