Commit f7470e1

ISSOtm committed on
Add FX tips & tricks
Contributed by @datguywitha3ds, thank you!
commit f7470e142d5004dc3eab7b5da6a98bff6fc024f5 parent 6b5aaf5
2 changed files +16−3
Modifiedmanual/src/hUGEDriver/sfx.md +1−1
@@ -38,5 +38,5 @@ Call `hUGE_mute_channel`; see `hUGEDriver.h` for the corresponding arguments.
38 38
39 - **IMPORTANT** precaution for CH3: if you release this channel and modify wave RAM, you **must** inform hUGEDriver, by writing `hUGE_NO_WAVE` to `hUGE_current_wave`. 39 - **IMPORTANT** precaution for CH3: if you release this channel and modify wave RAM, you **must** inform hUGEDriver, by writing `hUGE_NO_WAVE` to `hUGE_current_wave`.
40 This will tell hUGEDriver to reload wave RAM when the channel is un-released; otherwise, you may get corrupted notes. 40 This will tell hUGEDriver to reload wave RAM when the channel is un-released; otherwise, you may get corrupted notes.
41 - "Global" [effects](../hUGETracker/effect_reference.md) (5, 8, B, D, and F) still play, even if the channel they are attached to is released. 41 - "Global" [effects](../hUGETracker/effect-reference.md) (5, 8, B, D, and F) still play, even if the channel they are attached to is released.
42 Importantly, this means hUGEDriver *will* write to `NR50` (5) and `NR51` (8). 42 Importantly, this means hUGEDriver *will* write to `NR50` (5) and `NR51` (8).
Modifiedmanual/src/hUGETracker/effect-reference.md +15−2
@@ -29,9 +29,9 @@ Effect | Name | Description
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!* 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]. 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 &amp; 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]). 31 `9xx` | Change timbre | *For pulse channels* (CH1 &amp; 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. **This effect is not available on the wave channel (CH3)!** 32 `Axy` | Volume slide | Slide the note's volume[^slide_base] 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. **This effect is not available on the wave channel (CH3)!**
33 `Bxx` | Position jump | Jump to order <var>xx</var>. 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]. 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]. (To stop the envelope instead, effect `A` can be used; see below.)
35 `Dxx` | Pattern break | Jump to the next order, and start on row <var>xx</var>. 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!* 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. 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.
@@ -50,6 +50,19 @@ Due to hardware limitations, changing the wave requires restarting the active no
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. 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. 51 This should happen consistently for an affected song, and may not appear in the tracker.
52 52
53 [^slide_base]:
54 Due to hardware limitations, `A` bases itself off of the instrument's *initial* volume, and doesn't take its envelope, if any, into account.
55
56 ## Tips and tricks
57
58 - `A` stops the current instrument's envelope if one is active.
59 `A00` is probably not desirable (see footnote above[^slide_base]), so consider using it in a subpattern, so that it is only active for a single tick.
60 - Using `C` causes a click, so prefer baking the volume into the instrument when possible.
61 - Vibrato using repeated `2xx` and `1xx` effects can give better results and more intricate/detailed vibrato than `4xy`, especially in [subpatterns](./subpatterns.md).
62 - 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.
63 - Notes without an instrument on their row can help with reducing noise, as the note isn't retriggered.
64 Of course, this only works if you weren't planning to change the instrument.
65
53 [NR11]: https://gbdev.io/pandocs/Audio_Registers.html#ff11--nr11-channel-1-length-timer--duty-cycle 66 [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 67 [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 68 [NR43]: https://gbdev.io/pandocs/Audio_Registers.html#ff22--nr43-channel-4-frequency--randomness