Sometime in 1994 I found the mod mod.softhunter which is a variation of J. S. Bach’s Toccata and Fugue in D minor. A truncated version of the toccata starts off with a strong synth instrument before giving way to the fugue played with a guitar which is then accompanied with a simple beat. The song is kind of fun but one that created problems for some MOD players. Otto Chrons’ Dual Module Player (DMP) rendered the MOD just fine, but other plays such as Kay Bruns’ Mod4Win did not.
Since this is a problem child I decided to have a look at rendering it myself. I had always believed the problem to be that the effect pattern break was implemented incorrectly. This effect has parameters which are supposed to specify the offset into the next pattern at which to begin the next note. Until this experiment I thought DMP implemented this position jump and Mod4Win did not. Turns out that assumption was incorrect. The MOD incorrectly uses pattern break. A position is specified but unless this is ignored the playback doesn’t render correctly. Interestingly, VLC which uses the ModPlug library, renders this module just fine. I’m not sure if ModPlug knows to ignore the pattern break parameters of certain files or just didn’t implement them. At the moment, I don’t have any MOD files that require a fully functional pattern break to work, so I cannot test it.
For my own player I added the pattern break’s parameters. It wasn’t until I slowed down DMP I could see that the pattern break parameters were being ignored. When I ignored the parameters the playback was mostly correct—mostly. On pattern 17 there are two speed changes in the first division. One sets the speed to 6 ticks/division, and second sets the speed to 0 ticks/division. My player would effectively skip every note at 0 ticks/division until the speed changed to something else. I simply added an ignore to speed settings of 0 ticks/division. My reference documentation says most players treat this speed as 1 tick/division. So this is probably a second item to cause incompatibility between players.