I'm sure I've brought this one up before, but anyway...
It is well known that in ScreamTracker 3, most effect letters share the same effect memory. This can make some drastic difference in some tunes, the most famous one probably being a stuck note at around 1:00 in
Purple Motion's Satellite One.
Most trackers (e.g. Impulse Tracker) and players do not implement this behaviour, but it is easy enough to tell these apart and treat them differently.
So here is what XMPlay should do:
- If an S3M file was made with ScreamTracker 3, OpenMPT, CreamTracker or BeRoTracker, enable S3M playback mode (to properly tell these trackers apart from others, have a look at
http://wiki.openmpt.org/Development:_Formats/S3M)
- When encountering any non-zero effect parameter during playback, store its value. Every channel has its own memory.
- When one of the following effects is encountered with a zero parameter, use the previously stored value instead of regular effect memory: Dxy, Kxy, Lxy (Volume slide variants), Exx / Fxx (Portamento), Ixy (Tremor), Jxy (Arpeggio), Qxy (Retrigger), Rxy (Tremolo), Sxy (special commands)