Effect reference

The hUGETracker effect codes are intentionally similar to ProTracker and FastTracker’s. If you know those, then many of these effects will look familiar to you.

Some things to keep in mind:

  • Effects are only active on the row that they are on; if you want an effect to remain active for several rows, you must re-enter it on each one.

  • Some effects mention “the playing note”, which is the last note played on the channel thus far (possibly in the same row). For example:

    NoteInstrEffect
    C-51
    .047

    …the 047 arpeggio will apply with the C-5 note as its base.

Without further ado, here is the list of effects supported by hUGETracker:

EffectNameDescription
0xyArpeggioWhile this effect is active, the player will cycle on each tick between the playing note, the note + x semitones, and the note + y semitones, in this order. Can be used to create “chords” or a strum effect.
1xxPortamento upSlide the pitch up by xx units every tick. If the row contains a note, then the effect is skipped on the row’s first tick; if the tempo is 1, this means the effect will not do anything at all.
2xxPortamento downSame, but the pitch is slid down instead of up.
3xxTone portamentoInstead of playing the cell’s note, slide the pitch towards that note by xx units every tick. Stops exactly at the note, though.
4xyVibratoEvery x + 1 ticks, switch between the playing note and note + y units. This is similar to arpeggio, except you can control the frequency, and the offset is specified in units rather than semitones.
5xxSet master volumeSet the master volume control of the Game Boy for the left and right speakers. Consider using the effect editor. Note that a volume of 0 is not completely silent!
6xyCall routineCall the user-defined routine number y.
7xxNote delayWait xx ticks before playing the note in this cell. If xx is strictly greater than the tempo, the note will not play at all!
8xxSet panningSet which channels play on which speakers. Consider using the effect editor. Setting a channel to neither left nor right will mute it, but is not recommended1.
9xxChange timbreFor pulse channels (CH1 & 2), this changes the duty cycle2; for the wave channel (CH3), this loads wave xx3; for the noise channel (CH4), this changes the LFSR’s width (caution! 4).
AxyVolume slideSlide the note’s volume5 up by x units, or down by y units (either x or y must be 0). The active note will be retriggered on each tick, which may sound bad if envelope and/or length are present. It is recommended to use instead either instrument envelopes, or the C effect, if possible. This effect is not available on the wave channel (CH3)!
BxxPosition jumpJump to order xx.
CxySet volumeSet the volume of the channel to y, and retrigger the active note. If x is not 0, x will be written to the envelope bits. (To stop the envelope instead, effect A can be used; see below.)
DxxPattern breakJump to the next order, and start on row xx.
ExxNote cutCut the note short after xx ticks; the note won’t be cut if xx is not strictly less than the tempo!
FxxSet tempoSet the number of ticks per row to xx. Can be used in an alternating fashion to create a swing beat.
1

Muting a channel via NR51 may cause an audio pop, and also tends not to play nice with sound effect engines that don’t override NR51. Further, since NR51 is a global effect, it’s still applied even if the channel is “muted”.

2

xx is written directly to the channel’s length register; if the active instrument has “length” enabled, the length will be reloaded immediately.

3

Due to hardware limitations, changing the wave requires restarting the active note.

4

Switching the LFSR from “long mode” to “short mode” at a certain time “locks up” the noise channel, silencing it until it’s retriggered. This should happen consistently for an affected song, and may not appear in the tracker.

5

Due to hardware limitations, A bases itself off of the instrument’s initial volume, and doesn’t take its envelope, if any, into account.

Tips and tricks

  • A stops the current instrument’s envelope if one is active. A00 is probably not desirable (see footnote above5), so consider using it in a subpattern, so that it is only active for a single tick.
  • Using C causes a click, so prefer baking the volume into the instrument when possible.
  • Vibrato using repeated 2xx and 1xx effects can give better results and more intricate/detailed vibrato than 4xy, especially in subpatterns.
  • Alternated Fxx effects can help with reaching decimal speeds. For example, alternating between F04 and F03 yields a speed of 3.5; cycling through F01, F01, F02 and F01 yields a speed of 1.25; and so on.
  • Notes without an instrument on their row can help with reducing noise, as the note isn’t retriggered. Of course, this only works if you weren’t planning to change the instrument.