It was the song speed effect - the original code didn't support beats per minute, so I added in some code. I was pretty proud of it - it was simple and compact... and the source of the problem. So I gave in and went to look how everyone else handles bpm; turns out, they DON'T! In every other player, for modules, they ignore the speed effect if it tries to use bpm. Apparently there are a LOT of mods that just don't use the bpm correctly, so rather than have some god-awful mess that deals with it, everyone just ignores it... so now I do too. Cool
Are you sure about that? Maybe only the original MOD format supported tick changing and not master clock changing, but the extended MOD format does. And, IIRC, there is only 1 MOD that gets the master tick setting wrong. It was in some doc. Probably proprietary to some game engine or particular MOD tracker. Else, the BPM setting - or rather the master clock setting for the tick time resolution, works fine. Unless you're limiting yourself to the very first revision of the MOD format.
I'm curious as to how you're handling the original/default BPM (master clock setting) of 50hz on NTSC 32x? You're not stretching the ticks to compensate for 60hz, are you? That could definitely make the FX sound different than normal.
Also, S3M is sort of in between MOD and XM. It's very close to MOD and uses the Amiga period frequency, even though it was designed for PC only. It has all the MOD effects, but an extra column per channel like XM.
but it's a LOT more complex as far as playing instruments is concerned. Just look at the envelop and panning.
The envelope system is extremely easy to emulate. It's rather primitive IMO. It's just a series of deltas and fixed to tick offsets. I mean, it's not dynamic in anyway. Very easy to handle (not much different than envelopes on older PSG sound engines in software). The only real thing to worry about, is that XM supports
both linear frequency range and Amiga period steps. An XM module can be set to use either one of them. And all FX that touch/modify the frequency of the channel behave differently in Linear frequency mode than Amiga period mode.
Edit: Here's a best doc I could find:
http://www.pcedev.net/docs/FMODDOC.TXT
Explains the BPM setting in Section 3.2