Here's two fun (or hair-pulling, depending on how you see it
) Impulse Tracker edge cases that XMPlay doesn't emulate correctly at the moment:
NoMapEffects.itProbably the most curious IT bug in existence, caused by an accidental early return from a function. The details are noted on the linked wiki article, but just to re-iterate the key details: When IT evaluates instrument numbers in instrument mode, if the current note + instrument combination results in trying to access sample slot 0, the rest of the pattern cell parsing is skipped completely - including any (global) effects!
Note that the test case
InitialNoteMemory.it may be a prerequisite for getting this test case completely right (due to the note-less instrument number on the first row).
OpenMPT emulates this quirk as of OpenMPT 1.32 (not released yet), so BASS/XMPlay should preferably not apply this quirk when it detects an older version.
DoubleSlide.it / DoubleSlideCompatGxx.itImpulse Tracker generally initializes effect parameters, effect working memory and similar stuff once per row, before the effects actually run. When using (tone) portamento commands simulatenously in the effect column and volume column, this can lead to surprising results, and in order to emulate them correctly, it is crucial to implement the effect memory initialization in the exact same order as Impulse Tracker does:
- Evaluate effect column Gxx parameter
- Evaluate volume column gx parameter
- Evaluate volume column ex / fx parameter
- Evaluate effect column Exx / Fxx parameter
Again, OpenMPT gets this right as of OpenMPT 1.32(.00.27). While the test module may sound very abstract, it is actually based on one of my tracks (
The Oasis, see pattern 39 at 4:00), which I didn't realize would play incorrectly in Impulse Tracker until recently (back then I only verified that XMPlay plays it like OpenMPT does). So quite naturally I would appreciate if BASS/XMPlay didn't emulate this quirk for modules made with older OpenMPT versions.