Tuesday, April 5, 2011

Some more .s3m weirdness.

Here's some stuff you might find interesting about .s3m. Note, these are all off the top of my head, and could possibly be wrong.

  • Vxx (set global volume) only triggers on the second tick onwards - it does not trigger on the first tick. Having said that, it does not fire on speed 1.
  • Vxx does not affect the current playing volumes - it only affects volumes when they are changed, and it does this by multiplying the base output volume by the global volume.
  • The highest possible volume for any PCM channel is 63 - anything higher than that gets clamped to 63, including 64. On Adlib channels, a volume of 64 can be achieved, but only by having an Adlib instrument with a default value of 64.
  • When fast slides are off, D0F and DF0 slide down and up by 15 respectively, on every tick. Apparently this was due to Future Crew attempting to improve compatibility (versions < 0x1320 / ST 3.20 always use "fast slides", which do nonfine slides on every tick) and getting it wrong. ImpulseTracker carries this relic.
  • Kxy and Lxy ignore the first tick. This is due to a pointer lacking in the "first tick" pointer table in the code.
  • SBx uses a global set of variables to track the loopback information. That is, SB0 on channel 1 and SB2 on channel 2 will work fine.
  • There's some weird, weird stuff pertaining to SBx and Cxx. If I recall correctly, SBx can override at least some of Cxx, but I'm not sure on all the information.
  • Rxx oscillates around the last explicitly declared volume (includes an explicitly declared instrument). That is, if you do vol 32, then D01, and then suddenly use Rxx, it will oscillate around volume 32.
  • You can map multiple pattern channels to the same output channel in the channel settings. I'm not sure how useful this is (e.g. doing Gxx and Ixx at the same time won't really work), but it does cause some rather bizarre behaviour. This could be worth blogging about in its own post. Experiment for yourself if you want.

So, as you can probably tell, .s3m is a little weird. With that said, a lot of this makes sense (though some of it is just simply due to someone screwing something up).

No comments:

Post a Comment