@@ -0,0 +1,57 @@ |
|
|
1 |
# Effect reference |
|
|
2 |
|
|
|
3 |
The hUGETracker effect codes are intentionally similar to ProTracker and FastTracker's. |
|
|
4 |
If you know those, then many of these effects will look familiar to you. |
|
|
5 |
|
|
|
6 |
Some things to keep in mind: |
|
|
7 |
- 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. |
|
|
8 |
- Some effects mention "the playing note", which is the last note played on the channel thus far (possibly in the same row). |
|
|
9 |
For example: |
|
|
10 |
|
|
|
11 |
Note | Instr | Effect |
|
|
12 |
-----|-------|------- |
|
|
13 |
C-5 | 1 | ... |
|
|
14 |
... | . | 047 |
|
|
15 |
|
|
|
16 |
...the `047` arpeggio will apply with the `C-5` note as its base. |
|
|
17 |
|
|
|
18 |
Without further ado, here is the list of effects supported by hUGETracker: |
|
|
19 |
|
|
|
20 |
Effect | Name | Description |
|
|
21 |
-------|-------------------|------------ |
|
|
22 |
`0xy` | Arpeggio | While this effect is active, the player will cycle on each tick between the playing note, the note + <var>x</var> semitones, and the note + <var>y</var> semitones, in this order. Can be used to create "chords" or a strum effect. |
|
|
23 |
`1xx` | Portamento up | Slide the pitch up by <var>xx</var> 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*. |
|
|
24 |
`2xx` | Portamento down | Same, but the pitch is slid down instead of up. |
|
|
25 |
`3xx` | Tone portamento | *Instead of playing the cell's note*, slide the pitch towards that note by <var>xx</var> units every tick. Stops exactly at the note, though. |
|
|
26 |
`4xy` | Vibrato | Every <var>x</var> + 1 ticks, switch between the playing note and note + <var>y</var> units. This is similar to arpeggio, except you can control the frequency, and the offset is specified in units rather than semitones. |
|
|
27 |
`5xx` | Set master volume | Set the [master volume control][NR50] 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!* |
|
|
28 |
`6xy` | Call routine | Call the [user-defined routine](./routines.md) number <var>y</var>. |
|
|
29 |
`7xx` | Note delay | Wait <var>xx</var> ticks before playing the note in this cell. *If `xx` is strictly greater than the tempo, the note will not play at all!* |
|
|
30 |
`8xx` | Set panning | Set [which channels play on which speakers][NR51]. Consider using the effect editor. Setting a channel to neither left nor right will mute it, but is not recommended[^nr51_mute]. |
|
|
31 |
`9xx` | Change timbre | *For pulse channels* (CH1 & 2), this changes the duty cycle[^nrx1]; *for the wave channel* (CH3), this loads wave <var>xx</var>[^wave_retrig]; *for the noise channel* (CH4), this changes [the LFSR's width][NR43] (caution! [^lfsr_lockup]). |
|
|
32 |
`Axy` | Volume slide | Slide the note's volume up by <var>x</var> units, or down by <var>y</var> units (either <var>x</var> or <var>y</var> 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. |
|
|
33 |
`Bxx` | Position jump | Jump to order <var>xx</var>. |
|
|
34 |
`Cxy` | Set volume | Set the volume of the channel to <var>y</var>, *and retrigger the active note*. If <var>x</var> is not 0, <var>x</var> will be written to [the envelope bits][NR12]. |
|
|
35 |
`Dxx` | Pattern break | Jump to the next order, and start on row <var>xx</var>. |
|
|
36 |
`Exx` | Note cut | Cut the note short after <var>xx</var> ticks; *the note won't be cut if <var>xx</var> is not strictly less than the tempo!* |
|
|
37 |
`Fxx` | Set tempo | Set the number of ticks per row to <var>xx</var>. Can be used in an alternating fashion to create a swing beat. |
|
|
38 |
|
|
|
39 |
[^nr51_mute]: |
|
|
40 |
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. |
|
|
41 |
Further, since NR51 is a global effect, it's still applied even if the channel is "muted". |
|
|
42 |
|
|
|
43 |
[^nrx1]: |
|
|
44 |
<var>xx</var> is written directly to the channel's [length register][NR11]; if the active instrument has "length" enabled, the length will be reloaded immediately. |
|
|
45 |
|
|
|
46 |
[^wave_retrig]: |
|
|
47 |
Due to hardware limitations, changing the wave requires restarting the active note. |
|
|
48 |
|
|
|
49 |
[^lfsr_lockup]: |
|
|
50 |
Switching the LFSR from "long mode" to "short mode" at a certain time ["locks up" the noise channel](https://gbdev.io/pandocs/Audio_details.html#noise-channel-ch4), silencing it until it's retriggered. |
|
|
51 |
This should happen consistently for an affected song, and may not appear in the tracker. |
|
|
52 |
|
|
|
53 |
[NR11]: https://gbdev.io/pandocs/Audio_Registers.html#ff11--nr11-channel-1-length-timer--duty-cycle |
|
|
54 |
[NR12]: https://gbdev.io/pandocs/Audio_Registers.html#ff12--nr12-channel-1-volume--envelope |
|
|
55 |
[NR43]: https://gbdev.io/pandocs/Audio_Registers.html#ff22--nr43-channel-4-frequency--randomness |
|
|
56 |
[NR50]: https://gbdev.io/pandocs/Audio_Registers.html#ff24--nr50-master-volume--vin-panning |
|
|
57 |
[NR51]: https://gbdev.io/pandocs/Audio_Registers.html#ff25--nr51-sound-panning |