From: <sag...@us...> - 2011-09-21 14:45:27
|
Revision: 1050 http://modplug.svn.sourceforge.net/modplug/?rev=1050&view=rev Author: saga-games Date: 2011-09-21 14:45:18 +0000 (Wed, 21 Sep 2011) Log Message: ----------- [Fix] Mod Conversion: Fixed IT <-> XM panning slide conversion. [Fix] Fixed panning slide nibble priority for XM format. [Mod] OpenMPT: Version is now 1.20.00.27 Modified Paths: -------------- trunk/OpenMPT/mptrack/version.h trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/modcommand.cpp Modified: trunk/OpenMPT/mptrack/version.h =================================================================== --- trunk/OpenMPT/mptrack/version.h 2011-09-20 18:26:00 UTC (rev 1049) +++ trunk/OpenMPT/mptrack/version.h 2011-09-21 14:45:18 UTC (rev 1050) @@ -15,7 +15,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 20 #define VER_MINOR 00 -#define VER_MINORMINOR 26 +#define VER_MINORMINOR 27 //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/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2011-09-20 18:26:00 UTC (rev 1049) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2011-09-21 14:45:18 UTC (rev 1050) @@ -2649,10 +2649,12 @@ { if (param & 0x0F) { + // IT compatibility: Ignore slide commands with both nibbles set. if(!IsCompatibleMode(TRK_IMPULSETRACKER) || (param & 0xF0) == 0) nPanSlide = (int)((param & 0x0F) << 2); } else { + // IT compatibility: Ignore slide commands with both nibbles set. if(!IsCompatibleMode(TRK_IMPULSETRACKER) || (param & 0x0F) == 0) nPanSlide = -(int)((param & 0xF0) >> 2); } @@ -2662,16 +2664,14 @@ { if (!(m_dwSongFlags & SONG_FIRSTTICK)) { - // IT compatibility: Ignore slide commands with both nibbles set. - if (param & 0x0F) + if (param & 0xF0) { + nPanSlide = (int)((param & 0xF0) >> 2); + } else + { nPanSlide = -(int)((param & 0x0F) << 2); } - else - { - nPanSlide = (int)((param & 0xF0) >> 2); - } - // XM compatibility: FT2's panning slide is not as deep + // XM compatibility: FT2's panning slide is like IT's fine panning slide (not as deep) if(IsCompatibleMode(TRK_FASTTRACKER2)) nPanSlide >>= 2; } @@ -3882,7 +3882,7 @@ { if (!(m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) nGlbSlide *= 2; nGlbSlide += m_nGlobalVolume; - nGlbSlide = CLAMP(nGlbSlide, 0, 256); + Limit(nGlbSlide, 0, 256); m_nGlobalVolume = nGlbSlide; } } Modified: trunk/OpenMPT/soundlib/modcommand.cpp =================================================================== --- trunk/OpenMPT/soundlib/modcommand.cpp 2011-09-20 18:26:00 UTC (rev 1049) +++ trunk/OpenMPT/soundlib/modcommand.cpp 2011-09-21 14:45:18 UTC (rev 1050) @@ -192,8 +192,14 @@ } break; case CMD_PANNINGSLIDE: - // swap L/R - m->param = ((m->param & 0x0F) << 4) | (m->param >> 4); + // swap L/R, convert to fine slide + if(m->param & 0xF0) + { + m->param = 0xF0 | min(0x0E, (m->param >> 4)); + } else + { + m->param = 0x0F | (min(0x0E, m->param & 0x0F) << 4); + } default: break; } @@ -280,11 +286,24 @@ if(m->param < 0x20) m->command = CMD_NONE; // no tempo slides break; case CMD_PANNINGSLIDE: - // swap L/R - m->param = ((m->param & 0x0F) << 4) | (m->param >> 4); - // remove fine slides - if((m->param > 0xF0) || ((m->param & 0x0F) == 0x0F && m->param != 0x0F)) - m->command = CMD_NONE; + // swap L/R, convert fine slides to normal slides + if((m->param & 0x0F) == 0x0F && (m->param & 0xF0)) + { + m->param = (m->param >> 4); + } else if((m->param & 0xF0) == 0xF0 && (m->param & 0x0F)) + { + m->param = (m->param & 0x0F) << 4; + } else if(m->param & 0x0F) + { + m->param = 0xF0; + } else if(m->param & 0xF0) + { + m->param = 0x0F; + } else + { + m->param = 0; + } + break; case CMD_RETRIG: // Retrig: Q0y doesn't change volume in IT/S3M, but R0y in XM takes the last x parameter if(m->param != 0 && (m->param & 0xF0) == 0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |