View Issue Details
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0000959||OpenMPT||Playback Compatibility||public||2017-05-26 02:10||2019-10-10 19:58|
|Reporter||Yarn366||Assigned To||Saga Musix|
|Product Version||OpenMPT 1.27.00.* (old testing)|
|Summary||0000959: Incorrect handling of simultaneous pattern loop and position jump/pattern break/pattern delay commands|
In certain cases where a non-zero pattern loop occurs at the same time as a position jump, pattern break, or pattern delay, OpenMPT performs the wrong action. Here's how the original trackers handle these situations, and how OpenMPT compares (as far as I can tell):
Also, when IT 2.14p5 plays an S3M file, it seems to handle these situations as it does when playing IT files.
In addition, and maybe a bit off-topic, if FT 2.08/2.09 encounters a Bxx/Dxx command at the same time as a non-zero pattern delay, regardless of whether a pattern loop is present, it always skips the next row that would otherwise be played, just as PT 2.3d usually does with Dxx commands. OMPT r8219 does not do this.
For all formats here, fine pattern delays don't seem to have an effect on which rows get played and in what order; only regular pattern delays do.
I have attached three tests, one for each format. In PatLoop-Various.mod and PatLoop-Various2.xm, you should hear a few seconds of near-silence, followed by the word "success". In LoopBreak2.it, both the left and right channels should sound about the same.
XMPlay 220.127.116.11 passes all three tests.
None of the tests mentioned above test situations in which a pattern delay is encountered; I'll upload tests for those later.
|Tags||No tags attached.|
|Has the bug occurred in previous versions?||Yes|
|Tested code revision (in case you know it)||r8215|
LoopBreakTests.7z (13,724 bytes)
I decided to see what happens when a pattern delay occurs at the same time as both a non-zero pattern loop and a position jump or pattern break. In doing so, I found some more playback differences:
(In all scenarios here, if the pattern delay's parameter is 0, then playback continues as though the pattern delay weren't present. Also, if the pattern delay's parameter is not 0, then it is always executed whenever it is encountered.)
(Also, when IT 2.14p5 plays an S3M file, it handles pattern loop+position jump/pattern break situations as it does when playing IT files, whether or not a pattern delay is present.)
I will upload test cases later.
I forgot to mention this in the previous note: When PT 2.3d encounters a row with simultaneous E6x, Dxx, and EEx commands, it does not skip a row as it normally would if the E6x command weren't present.
I had some of the routines wrong; I have updated the report with what I think are the correct ones. Please disregard my previous two comments.
I've attached another XM test, which tests behavior of simultaneous Bxx/Dxx and EEx commands, both with and without pattern loops. The deal here is the same as before: after a few seconds, you should hear the word "success" but not the word "fail." (As you might expect, XMPlay 18.104.22.168 passes this test.)
I found another quirk in ProTracker 2.3d's playback routine: under certain conditions, if Dxx, E6x, and EEx commands occur together and the loop ends just as the row ends, playback jumps to the second row of the next pattern rather than the second row of the loop in that pattern. I don't know yet what exactly causes this, but it doesn't seem to be random.
FT2-PatLoopWithDelay.7z (8,690 bytes)
Here's a test for the infinite loop behavior that occurs in Impulse Tracker when a row has a pattern loop and a non-zero pattern delay and no Bxx/Cxx commands, and the loop counter finishes just as the delay finishes (not before or after). You should hear "1 2 3" followed by "2 3" repeated forever. (XMPlay 22.214.171.124 fails this test.)
InfiniteLoop.7z (14,711 bytes)
Another IT test. This one is a bit like the one above, except the loop counter finishes before or after the delay finishes. It's designed to test for OpenMPT's incorrect behavior of skipping a row in these cases. You should hear "1 2, 1 2, 3 4" followed by "1 2, (brief pause) 3 4". (XMPlay 126.96.36.199 would pass this test if it had decremented the loop counter on every row repetition instead of just once.)
PatLoopWithDelay-IT.7z (14,730 bytes)
The infinite loop bug in MOD (with E6x + EEx) occurs as well.
PatLoopAndDelay+InfiniteLoop.zip (12,472 bytes)
Bxx precedence in IT has been fixed, and the reason for skipping a row if there's a row delay has also been found, I just need to verify first if it's needed for any for the formats (I guess it isn't).
|2017-05-26 02:10||Yarn366||New Issue|
|2017-05-26 02:10||Yarn366||File Added: LoopBreakTests.7z|
|2017-05-27 01:43||Yarn366||Note Added: 0003037|
|2017-05-27 07:40||Yarn366||Note Added: 0003038|
|2017-05-29 16:42||Saga Musix||Assigned To||=> Saga Musix|
|2017-05-29 16:42||Saga Musix||Status||new => assigned|
|2017-05-29 20:17||Yarn366||Summary||MOD/XM/IT: Incorrect handling of simultaneous pattern loop and position jump/pattern break commands => Incorrect handling of simultaneous pattern loop and position jump/pattern break/pattern delay commands|
|2017-05-29 20:17||Yarn366||Description Updated|
|2017-05-29 20:17||Yarn366||Additional Information Updated|
|2017-05-29 20:17||Yarn366||Note Added: 0003041|
|2017-05-29 20:17||Yarn366||Description Updated|
|2017-06-06 02:15||Yarn366||File Added: FT2-PatLoopWithDelay.7z|
|2017-06-06 02:15||Yarn366||Note Added: 0003048|
|2017-06-06 02:19||Yarn366||Description Updated|
|2017-06-11 02:27||Yarn366||Description Updated|
|2017-06-11 03:06||Yarn366||File Added: InfiniteLoop.7z|
|2017-06-11 03:06||Yarn366||Note Added: 0003069|
|2017-06-11 03:33||Yarn366||File Added: PatLoopWithDelay-IT.7z|
|2017-06-11 03:33||Yarn366||Note Added: 0003070|
|2019-05-27 06:48||DevanWolf||File Added: PatLoopAndDelay+InfiniteLoop.zip|
|2019-05-27 06:48||DevanWolf||Note Added: 0003953|
|2019-05-27 06:54||manx||Relationship added||related to 0001146|
|2019-10-10 19:58||Saga Musix||Note Added: 0004105|