These are compiled Fast Tracker modules, a project of Sergey Matveev (Orion), modified from version 1.07 by Alexander Pluzhnikov (Sand).
The format was built with capabilities that hypothetically allow to import modules of such various tracker families as ASC–PSC and ST–PT3 with almost no loss. Despite this, only a few dozen original modules can be found (i.e., not conversions from other formats).
Since the ideas are not original, the format has improved some points, worsened some, and repeated some without changes (up to the point that it inherited known problems).
The FTC did not repeat the PSC's mistakes, and regulates the amplitude in the sample, as it should, and not the channel volume.
However, the portamento variant is implemented not the same as in ASC (this is an ideal that no tracker has repeated anymore), but the same as in PT3 (the command parameter is not the number of ticks, but the tone period change value). However, this has already been done without the PT3 mistakes.
But the questionable tone and volume tables are simply copied from the PT 1.xx–3.xx project without changes, and these are false notes and an irrational way to control the channel volume.
The FTC (unlike the ASC) does not allow you to specify an envelope period without a type. However (unlike PT3), the same envelope type is not rewritten in R13 (that is, it will not be possible to reinitialize the envelope). That is, PT3 and the FTC made almost (i.e. mirrored) the same mistake.
The FTC abandoned some of the not-so-frequently used features and special commands of both ASC and PT2 (not to mention PT3), but it nevertheless stayed the most featured of all known trackers. Therefore, the reason for the low popularity may need to be looked for in something else.
The project got rid of the unsuccessful note table since 1.07 version. Instead, the musician (as in PT3) had a choice of two options. But unlike PT3, this is a choice of two correct options: the original table from Sound Tracker for the frequency of 1773400 Hz (original ZX Spectrum) and its own for 1750000 Hz (clones from former USSR).
Also was revised another drawback in 1.08 version: the lack of reinitialization for the same type envelope. And not just revised, there was added a choice between the old behavior and the new one via a completely new effect, not present in any other tracker. The effect is triggered by the special command "Full env+tone retrig".
The task that the new effect solves when simultaneous output of tone and envelopes is to make sure that the envelope period and the tone period always start in the same place: almost simultaneously (with a fixed delay). The tone has no reinitialization, therefore, when a new period value is written to the tone registers, the previous period first will finish "ticking" (how much is left to the new value, a random number), and only after that the new one starts "ticking" from zero. But if you write 0 to the tone registers, the "ticking" ends already on the next AY clock cycle. After that, you can write the desired tone value, the countdown will immediately start from zero, that is, from the beginning.
That is, if you output the envelope type in R13, then output 0 in tone registers, wait at least 1 AY tick, and output the desired tone, then you will get a retrig. When retrigging, the tone+envelope will always sound the same. And without a retrigue (as in other editors), the same note placed on different lines of the pattern with the same envelope period will sound louder, then quieter, then barely audible at all.
There is a lot of "extra" data in the format from the player's point of view. Since I have not researched the FTC format from other points of view, only assumptions have been made about some of such data.
Offset | Size | Designation | Description |
---|---|---|---|
+0 | 8 | Pretitle | String "Module: ". |
+8 | 42 | Title | Song name. |
+50 | 1 | ToneTable | For versions before 1.07 symbol ";" (ST table from PT 1.xx–3.xx), otherwise the number of the note table (1 means original ST for 1.7734 MHz; 2 means own FT for 1.75 MHz). |
+51 | 18 | Version | String "Fast Tracker v1.00", the version can be from 1.00 to 1.08. |
+69 | 1 | Delay | Playback speed. |
+70 | 1 | LoopPos | Position number for looping. |
+71 | 4 | Unknown | Unknown (not used in the player). |
+75 | 2 | PatsPtr | Pointer to patterns. |
+77 | 2 | SamTtlsPtr | Pointer to the sample names (not used in the player). |
+79 | 2 | OrnTtlsPtr | Pointer to the ornament names (not used in the player). |
+81 | 1 | Unknown | Unknown (not used in the player). |
+82 | 64 | SamPtrs | Pointers to 32 samples (described below). |
+146 | 66 | OrnPtrs | Pointers to 33 ornaments (described below). |
+212 | ? | PosList | Position list (described below). |
+SamTtlsPtr | ? | SamTtls | Compressed sample names (not used in the player). |
+OrnTtlsPtr | ? | OrnTtls | Compressed ornament names (not used in the player). |
+PatsPtr | ? | ChanPatPtrs | For each pattern, three A, B, C pointers to the channel descriptors; 0xFFFF is the marker of the list end. |
? | ChanPats | Pattern channel descriptors (described below). | |
? | Samples | Sample list (with a separating byte 0, which is not used in the player). | |
? | Ornaments | Ornament list (with a separating byte 0 and some other elements that are not used in the player). |
As in other trackers, it is a sequence of bytes ended with 0xFF (may be missing).
Bytes | Description |
---|---|
0x00..0x1F | Set the sample (0..31). |
0x20..0x2F | Set the volume (0..15). |
0x30 | Turn off the sound. Exit. Skip 0 lines. |
Enable envelopes (type 1..14). Set the envelope period to EnvP. The player outputs the specified envelope type to R13 only if it differs from the previous value. | |
0x3F | Disable envelopes. |
0x40..0x5F | Exit. Skip 0..31 lines. |
0x60..0xCB | Set the note (0..107, in reality the player cuts off to 95 the upper bound of the result after all the offsets addition). Exit. Skip 0 lines. |
0xCC..0xEC | Set the ornament (0..32). |
Start the slide with a TSlStp step per interrupt (a two-byte signed number). | |
0xEE, TSlStp | Start the portamento from the previous note with a TSlStp step (a single-byte unsigned number). |
0xEF, Val | Before 1.08 version, the range of the Val parameter is 0..255: set the noise period (bits 7-5 are ignored). Since 1.08 version, for Val=0..31: set the noise period; for Val=254: run the "Full env+tone retrig" effect, the remaining Val values are filtered out by the compiler. |
0xF0..0xFE, Delay | Set the playback speed. |
Bytes | Description |
---|---|
+0 | Tick number for looping. |
+1 | Sample length in ticks, reduced by 1. |
+2 | List of five-bytes ticks. Every tick: +0 Bit 7:1, if accumulates the noise period addition. Bit 6: noise mask. Bits 5–0 are noise period addition. +1 low byte of the tone period addition. +2 Bits 7:1, if accumulates the tone period addition. Bit 6: Tone mask. Bits 5–0 are high bits of the tone period addition (the tone register is 12–bit, so a 12-bit signed number is obtained, the remaining bits are not important). +3 Bits 7: 1, if accumulates envelope period addition. Bit 6: 1, if envelopes are allowed. Bit 5: 1, if a change by 1 of the sample amplitude is enabled. Bit 4: 1, if it is a decrease of the sample amplitude, 0 is an increase. Bits 3–0 are the amplitude. +4 The envelope period addition (a number with a sign). |
Bytes | Description |
---|---|
+0 | Tick number for looping. |
+1 | Ornament length in ticks, reduced by 1. |
+2 | List of two-bytes ticks. Every tick: +0 Bit 7: 1, if accumulates the noise period addition. Bit 6: 1, if accumulates the note number addition. Bits 5–0 are the noise period addition. +1 The note number addition in semitones. |
Two bytes per position: pattern number and transposition (signed number). The list of positions ends with 0xFF.