From: <sag...@us...> - 2012-04-21 18:27:30
|
Revision: 1252 http://modplug.svn.sourceforge.net/modplug/?rev=1252&view=rev Author: saga-games Date: 2012-04-21 17:39:42 +0000 (Sat, 21 Apr 2012) Log Message: ----------- [Fix] XM / MOD volume/panning slide nibble priority was wrong for slides with both nibbles set. This was only relevent for newly entered note slides, since slides loaded from files were automatically fixed, so no compat settings are applied here (http://bugs.openmpt.org/view.php?id=242). [Mod] OpenMPT: Version is now 1.20.00.86 Modified Paths: -------------- trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/version.h trunk/OpenMPT/soundlib/Load_mod.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/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2012-04-21 16:58:44 UTC (rev 1251) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2012-04-21 17:39:42 UTC (rev 1252) @@ -2314,7 +2314,6 @@ pSndFile->m_dwSongFlags &= ~(SONG_PAUSED|SONG_STEP); pSndFile->LoopPattern(nPat); pSndFile->m_nNextRow = 0; - pSndFile->ResetTotalTickCount(); //rewbs.vstCompliance if (pModPlaying == this) { Modified: trunk/OpenMPT/mptrack/version.h =================================================================== --- trunk/OpenMPT/mptrack/version.h 2012-04-21 16:58:44 UTC (rev 1251) +++ trunk/OpenMPT/mptrack/version.h 2012-04-21 17:39:42 UTC (rev 1252) @@ -19,7 +19,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 20 #define VER_MINOR 00 -#define VER_MINORMINOR 85 +#define VER_MINORMINOR 86 //Creates version number from version parts that appears in version string. //For example MAKE_VERSION_NUMERIC(1,17,02,28) gives version number of Modified: trunk/OpenMPT/soundlib/Load_mod.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mod.cpp 2012-04-21 16:58:44 UTC (rev 1251) +++ trunk/OpenMPT/soundlib/Load_mod.cpp 2012-04-21 17:39:42 UTC (rev 1252) @@ -22,12 +22,12 @@ case 0x02: m.command = CMD_PORTAMENTODOWN; break; case 0x03: m.command = CMD_TONEPORTAMENTO; break; case 0x04: m.command = CMD_VIBRATO; break; - case 0x05: m.command = CMD_TONEPORTAVOL; if(m.param & 0xF0) m.param &= 0xF0; break; - case 0x06: m.command = CMD_VIBRATOVOL; if(m.param & 0xF0) m.param &= 0xF0; break; + case 0x05: m.command = CMD_TONEPORTAVOL; break; + case 0x06: m.command = CMD_VIBRATOVOL; break; case 0x07: m.command = CMD_TREMOLO; break; case 0x08: m.command = CMD_PANNING8; break; case 0x09: m.command = CMD_OFFSET; break; - case 0x0A: m.command = CMD_VOLUMESLIDE; if(m.param & 0xF0) m.param &= 0xF0; break; + case 0x0A: m.command = CMD_VOLUMESLIDE; break; case 0x0B: m.command = CMD_POSITIONJUMP; break; case 0x0C: m.command = CMD_VOLUME; break; case 0x0D: m.command = CMD_PATTERNBREAK; m.param = ((m.param >> 4) * 10) + (m.param & 0x0F); break; @@ -37,12 +37,12 @@ // Extension for XM extended effects case 'G' - 55: m.command = CMD_GLOBALVOLUME; break; //16 - case 'H' - 55: m.command = CMD_GLOBALVOLSLIDE; if (m.param & 0xF0) m.param &= 0xF0; break; + case 'H' - 55: m.command = CMD_GLOBALVOLSLIDE; break; case 'K' - 55: m.command = CMD_KEYOFF; break; case 'L' - 55: m.command = CMD_SETENVPOSITION; break; case 'M' - 55: m.command = CMD_CHANNELVOLUME; break; case 'N' - 55: m.command = CMD_CHANNELVOLSLIDE; break; - case 'P' - 55: m.command = CMD_PANNINGSLIDE; if (m.param & 0xF0) m.param &= 0xF0; break; + case 'P' - 55: m.command = CMD_PANNINGSLIDE; break; case 'R' - 55: m.command = CMD_RETRIG; break; case 'T' - 55: m.command = CMD_TREMOR; break; case 'X' - 55: m.command = CMD_XFINEPORTAUPDOWN; break; Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2012-04-21 16:58:44 UTC (rev 1251) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2012-04-21 17:39:42 UTC (rev 1252) @@ -2843,8 +2843,20 @@ else param = pChn->nOldVolumeSlide; + if((GetType() & (MOD_TYPE_MOD | MOD_TYPE_XM | MOD_TYPE_MT2))) + { + // MOD / XM nibble priority + if((param & 0xF0) != 0) + { + param &= 0xF0; + } else + { + param &= 0x0F; + } + } + LONG newvolume = pChn->nVolume; - if (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT|MOD_TYPE_STM|MOD_TYPE_AMF)) + if (GetType() & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT|MOD_TYPE_STM|MOD_TYPE_AMF)) { if ((param & 0x0F) == 0x0F) //Fine upslide or slide -15 { @@ -2903,8 +2915,21 @@ pChn->nOldPanSlide = param; else param = pChn->nOldPanSlide; - if (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT|MOD_TYPE_STM)) + + if((GetType() & (MOD_TYPE_XM | MOD_TYPE_MT2))) { + // XM nibble priority + if((param & 0xF0) != 0) + { + param &= 0xF0; + } else + { + param &= 0x0F; + } + } + + if (GetType() & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_MPT|MOD_TYPE_STM)) + { if (((param & 0x0F) == 0x0F) && (param & 0xF0)) { if (m_dwSongFlags & SONG_FIRSTTICK) @@ -3000,6 +3025,7 @@ { LONG nChnSlide = 0; if (param) pChn->nOldChnVolSlide = param; else param = pChn->nOldChnVolSlide; + if (((param & 0x0F) == 0x0F) && (param & 0xF0)) { if (m_dwSongFlags & SONG_FIRSTTICK) nChnSlide = param >> 4; @@ -4161,6 +4187,19 @@ { LONG nGlbSlide = 0; if (param) nOldGlobalVolSlide = param; else param = nOldGlobalVolSlide; + + if((GetType() & (MOD_TYPE_XM | MOD_TYPE_MT2))) + { + // XM nibble priority + if((param & 0xF0) != 0) + { + param &= 0xF0; + } else + { + param &= 0x0F; + } + } + if (((param & 0x0F) == 0x0F) && (param & 0xF0)) { if (m_dwSongFlags & SONG_FIRSTTICK) nGlbSlide = (param >> 4) * 2; @@ -4442,7 +4481,7 @@ } -UINT CSoundFile::GetBestMidiChannel(CHANNELINDEX nChn) const +uint8 CSoundFile::GetBestMidiChannel(CHANNELINDEX nChn) const //---------------------------------------------------------- { if(nChn == CHANNELINDEX_INVALID) Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2012-04-21 16:58:44 UTC (rev 1251) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2012-04-21 17:39:42 UTC (rev 1252) @@ -1134,7 +1134,6 @@ m_nPattern = 0; m_nTickCount = m_nMusicSpeed; m_nBufferCount = 0; - m_nTotalCount = 0; m_nPatternDelay = 0; m_nFrameDelay = 0; m_nNextPatStartRow = 0; Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2012-04-21 16:58:44 UTC (rev 1251) +++ trunk/OpenMPT/soundlib/Sndfile.h 2012-04-21 17:39:42 UTC (rev 1252) @@ -255,7 +255,7 @@ bool m_bIsRendering; UINT m_nMixChannels, m_nMixStat, m_nBufferCount; double m_dBufferDiff; - UINT m_nTickCount, m_nTotalCount; + UINT m_nTickCount; UINT m_nPatternDelay, m_nFrameDelay; // m_nPatternDelay = pattern delay (rows), m_nFrameDelay = fine pattern delay (ticks) ULONG m_lTotalSampleCount; // rewbs.VSTTimeInfo UINT m_nSamplesPerTick; // rewbs.betterBPM @@ -449,8 +449,6 @@ UINT GetResamplingFlag(const ModChannel *pChannel); BOOL FadeSong(UINT msec); BOOL GlobalFadeSong(UINT msec); - UINT GetTotalTickCount() const { return m_nTotalCount; } - void ResetTotalTickCount() { m_nTotalCount = 0;} void ProcessPlugins(UINT nCount); public: @@ -737,7 +735,7 @@ public: PLUGINDEX GetBestPlugin(CHANNELINDEX nChn, PluginPriority priority, PluginMutePriority respectMutes) const; - UINT GetBestMidiChannel(CHANNELINDEX nChn) const; + uint8 GetBestMidiChannel(CHANNELINDEX nChn) const; }; Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2012-04-21 16:58:44 UTC (rev 1251) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2012-04-21 17:39:42 UTC (rev 1252) @@ -1845,7 +1845,6 @@ return FALSE; } //////////////////////////////////////////////////////////////////////////////////// - m_nTotalCount++; if (!m_nMusicTempo) return FALSE; switch(m_nTempoMode) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |