The three pattern editing styles

General discussion about tracking, help and support.
User avatar
Posts: 475
Joined: Thu Apr 23, 2015 7:39 pm
Location: Hong Kong SAR

The three pattern editing styles

Postby HertzDevil » Thu Jul 02, 2015 3:54 am

Although they were introduced into FamiTracker in as early as 0.2.4 (FastTracker 2 is the default behaviour, ModPlug was added in that version, and Impulse Tracker was added in 0.2.7), their behaviour was never fully specified in any of the help documents. Here I list their differences according to the source code of FamiTracker 0.4.6:

  • Previewing a newly inputted note:
    • FT2, MPT: Uses the maximum channel volume
    • IT: Uses the previously entered channel volume and enters it on the channel volume column, therefore always disabling the volume mask
  • Note cuts and releases while previewing:
    • FT2, MPT: Upon releasing the inputted key, if the current instrument uses a release part in its volume sequence, releases the current note, otherwise cuts the note (always cuts the note for VRC7)
    • IT: The current note sustains until a note cut or note release is inputted on the same channel, then the instrument triggers its cut/release envelope
  • After inputting data in the pattern editor:
    • FT2: Moves to the next row* except when using the Repeat key on the note column or any effect column
    • MPT: Moves to the next row only when inputting a note directly
    • IT: Moves to the next field of the current column (see below) except when using the Repeat key on the note column or any effect column
  • Editing instrument numbers or effect parameters:
    • FT2: Alters the digit below the cursor and moves to the next row
    • MPT: Shifts the second digit to the first, then appends the inputted value at the second digit
    • IT: Alters the digit below the cursor, then moves the cursor from the first digit to the second digit on the same row, or from the second digit to the first digit of the next row
  • Inputting on the effect type column:
    • IT, FT2: Always uses 0x00 as the default parameter for newly inputted effects
    • MPT: Uses the previously inputted effect parameter (except the default 0x00 parameter due to new effects) if the effect type is same as the previously inputted value, including double-entering any effect type
  • Keyboard note layout:
    • FT2, IT: QWERTY keys are mapped in a layout visually similar to piano keyboard keys**
    • MPT: The numeral keys set the current octave, and rows below correspond each to an increasing octave, with keys from the left to the right increasing by semitones (this is the default MPT keyboard layout, but ModPlug Tracker itself provides key mappings similar to the FT2/IT style)
  • Home and End keys in the pattern editor:
    • FT2: Moves the cursor to the top/bottom row of the current frame
    • MPT, IT: Moves the cursor to the first / last column, channel, row of the current frame, in that order per keypress, unless the Control key is held down (then the FT2 behaviour is used)
  • Moving the cursor in the pattern editor with arrow keys:
    • FT2, MPT: Cancels the current selection unless the Shift key is held down
    • IT: Keeps the current selection, extending the selection if the Shift key is held down while preserving the selection's starting position (only clicking on the pattern editor or pressing the Escape key will deselect the selection)
*: "Next row" is specified by the the edit step setting; the treatment of step settings is the same across all editing styles. "Ignore Step when moving" does not work until the edit step has been altered once due to a bug in FamiTracker, but the edit step does not rely on this setting insofar as the differences between those editing styles are concerned.
**: FamiTracker assumes the Swedish keyboard layout, so non-alphanumeric keys are mapped slightly differently from what would be expected for the US QWERTY layout (e.g. the square brackets are swapped). FamiTracker has a CFamiTrackerView method that uses the AZERTY layout since 0.2.9, but it is never called.

These descriptions would prove helpful for those who cannot read the source code or do not want to try out the actual behaviour of the respective trackers. Feel free to port this to the FamiTracker wiki (currently I cannot log in to that, and I don't think newly registered members can either).
refactoring 0cc-famitracker