Development: Test Cases/MOD

ProTracker does not always clamp samples to the exact same range of periods — it rather depends on the actual finetune value of the sample. In contrast to that, ScreamTracker 3 always clamps periods to the same range in its Amiga mode. This test file should stay completely in tune at all times.

If an arpeggio parameter exceeds the Amiga frequency range, ProTracker wraps it around. In fact, the first note that is too high (which would be C-7 in OpenMPT or C-4 in ProTracker) will play at a period of 0 (so just a static DC offset), C#7 / C#4 becomes C-4 / C-1, and so on.

If there is a row delay (EEx) on the same row as a pattern break (Dxx), the target row of that jump is not played. Instead, the next row is played.

ProTracker’s E5x finetune handling is a bit weird. It is also evaluated if there is no note next to the command, and the command is also affected by 3xx portamentos.

ProTracker always loads the new instrument settings (volume, finetune and sample pointer) on the first tick, even if there is a note delay. The new sample pointer is only used if the current sample is looped and its loop end is reached.

This quirk is implemented in ProTracker 1/2 mode.

In ProTracker, a note delay greater than the current speed will cause the delayed note to be played on the first tick of the next row if there is no new note on the next row (even if that new note is also delayed). However, the note is note restarted but rather continues where a previous note left off playing (like an instant portamento).

Just as with XM and IT, a pattern break should not reset the pattern loop counter. You should hear two noise bursts, followed by the words “success”.

When there is a row delay (EEx), fine slides and note delays should be executed on every row repetition.

A Bxx command should reset the effect of a Dxx command that is left of the Bxx command. You should hear a voice saying “success”.

The interpretation of this scenario highly differs between various replayers. If the sample number next to a portamento effect differs from the previous number, the new sample's default volume should be applied and OpenMPT implements the second option in normal playback mode and the first option in ProTracker 1/2 mode.
 * the old sample should be played until reaching its end or loop end (ProTracker 1/2). If the sample loops, the new sample should be activated after the loop ended.
 * the old sample should keep playing (various other players)

Related to PortaSmpChange.mod, this tests the portamento with sample swap behaviour for ProTracker-compatible MODs. Noteworthy tested behaviours:
 * When doing a sample swap without portamento, the new sample keeps using the old sample’s finetune.
 * When doing a sample swap with portamento, the new sample’s finetune is instantly applied, and the new sample is started as soon as the old sample’s loop is finished playing.

ProTracker’s portamento behaviour is somewhere between FT2 and IT:
 * A new note (with no portamento command next to it) does not reset the portamento target. That is, if a previous portamento has not finished yet, calling 3xx or 5xx after the new note will slide it towards the old target.
 * Once the portamento target period is reached, the target is reset. This means that if the period is modified by another slide (e.g. 1xx or 2xx), a following 3xx will not slide back to the original target.

When specifying an instrument number without a note, ProTracker 1/2 instantly applies the new instrument settings, but does not use the new sample until the end of the (loop of the) current sample is reached. In this example, sample 2 should be played at maximum volume as soon as instrument number 1 is encountered in the pattern, then sample 1 should be triggered somewhere around row 10 and then stop playing at around row 18.

ProTracker 1/2 has a slightly buggy offset implementation which adds the offset in two different places (according to tracker_notes.txt coming with libxmp: "once before playing this instrument (as is expected), and once again after this instrument has been played"). The left and right channel of this module should sound identical. OpenMPT emulates this behaviour correctly in ProTracker mode.

ProTracker instrument swapping (see PTInstrSwap.mod test case) also works when swapping from an empty sample slot back to a normal slot: If the sample was already swapped, it is restarted immediately.

ProTracker applies any tempo changes after the first tick (so at one tick per row, they happen on the next row).

Like many other trackers, ProTracker does not advance the vibrato position on the first tick of the row. However, it also does not apply the vibrato offset on the first tick, which results in somewhat funky-sounding vibratos. OpenMPT uses this behaviour only in ProTracker 1/2 mode. The same applies to the tremolo effect.