From: <sag...@us...> - 2014-08-31 19:59:56
|
Revision: 4224 http://sourceforge.net/p/modplug/code/4224 Author: saga-games Date: 2014-08-31 19:59:40 +0000 (Sun, 31 Aug 2014) Log Message: ----------- [Fix] ProTracker compatibilty: Implement a few more edge cases of ProTracker-style 9xx offset handling that I was previously not aware of. Modified Paths: -------------- trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2014-08-31 19:13:30 UTC (rev 4223) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2014-08-31 19:59:40 UTC (rev 4224) @@ -4417,12 +4417,24 @@ } // -! NEW_FEATURE#0010 + if(pChn->rowCommand.instr) pChn->proTrackerOffset = 0; + pChn->proTrackerOffset += param; + if(pChn->rowCommand.IsNote()) { - pChn->nPos = param; + if(m_SongFlags[SONG_PT1XMODE]) + { + // ProTracker compatbility: PT1/2-style funky 9xx offset command + // Test case: ptoffset.mod + pChn->nPos = pChn->proTrackerOffset; + pChn->proTrackerOffset += param; + } else + { + pChn->nPos = param; + } pChn->nPosLo = 0; - if (pChn->nPos >= pChn->nLength) + if (pChn->nPos >= pChn->nLength || (pChn->dwFlags[CHN_LOOP] && pChn->nPos >= pChn->nLoopEnd)) { // Offset beyond sample size if (!(GetType() & (MOD_TYPE_XM|MOD_TYPE_MT2|MOD_TYPE_MOD))) @@ -4457,11 +4469,6 @@ pChn->nPos = param; pChn->nPosLo = 0; } - if(pChn->rowCommand.IsNote()) pChn->proTrackerOffset = param; - else if(pChn->rowCommand.instr) pChn->proTrackerOffset = 0; - pChn->proTrackerOffset += param; - - return; } //end rewbs.volOffset: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |