From c2f1900a5118c8772584d4391c4a7cb84a834894 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Fri, 2 Feb 2024 10:27:36 +0100 Subject: Fix behaviour of CH3 decay on change --- src/drawing.c | 12 ++++++++++-- src/renderer_m0.c | 10 ++++++++++ src/sequencer.c | 18 ++++++++++++++++-- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/drawing.c b/src/drawing.c index fa20467..16a914a 100644 --- a/src/drawing.c +++ b/src/drawing.c @@ -2004,10 +2004,18 @@ draw_notif_bar() { } } break; case 7: { - txt_drawf_small("ATTACK: %d", x0 + 2, y0 + 1, color, params->wave_attack); + if (params->wave_attack) { + txt_drawf_small("ATTACK: %d", x0 + 2, y0 + 1, color, params->wave_attack); + } else { + txt_draws_small("ATTACK: OFF", x0 + 2, y0 + 1, color, params->wave_decay); + } } break; case 8: { - txt_drawf_small("DECAY: %d", x0 + 2, y0 + 1, color, params->wave_decay); + if (params->wave_decay) { + txt_drawf_small("DECAY: %d", x0 + 2, y0 + 1, color, params->wave_decay); + } else { + txt_draws_small("DECAY: OFF", x0 + 2, y0 + 1, color, params->wave_decay); + } } break; case 9: { draw_notif_param_edit_pan(params->pan, x0, y0, color); } break; } diff --git a/src/renderer_m0.c b/src/renderer_m0.c index 064cc0e..d8d0adb 100644 --- a/src/renderer_m0.c +++ b/src/renderer_m0.c @@ -780,6 +780,16 @@ txt_drawc_small(char c, size_t x, size_t y, u8 clr) { draw_icn(x, y, tile + 8 * c, clr, 1, 0); } +#define txt_draws_small(msg, x, y, clr, ...) \ + { \ + u8 tmp = text_engine.spacing;\ + txt_spacing(4);\ + text_engine.drawc = txt_drawc_small;\ + txt_draws(msg, x, y, clr); \ + txt_spacing(tmp);\ + text_engine.drawc = txt_drawc;\ + } + #define txt_drawf_small(msg, x, y, clr, ...) \ { \ char buf[256] = {0}; \ diff --git a/src/sequencer.c b/src/sequencer.c index 7275fbe..a3b72a8 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -315,7 +315,7 @@ play_step(void) { case SYNC_OUT_AUDIO_2BPQ: case SYNC_OUT_LINK_AUDIO_12BPQ: case SYNC_OUT_LINK_AUDIO_6BPQ: - case SYNC_OUT_LINK_AUDIO_4BPQ: + case SYNC_OUT_LINK_AUDIO_4BPQ: case SYNC_OUT_LINK_AUDIO_2BPQ: break; default: { SOUND_DMG_MASTER = dmg_stereo_vol(3) @@ -1381,7 +1381,21 @@ set_param_selection_wave(ChannelWaveParams *params, InputHandler return_handler) case 5: { params->wave_mode = CLAMP(params->wave_mode + inc, 0, 2); } break; case 6: { params->wave_volume = CLAMP(params->wave_volume + inc, 0, 4); } break; case 7: { params->wave_attack = CLAMP(params->wave_attack + inc, 0, 16); } break; - case 8: { params->wave_decay = CLAMP(params->wave_decay + inc, 0, 16); } break; + case 8: { + if (params->wave_decay == 16) { + if (inc > 0) { + params->wave_decay = 0; + } else { + params->wave_decay--; + } + } else if (params->wave_decay == 0) { + if (inc < 0) { + params->wave_decay = 16; + } + } else { + params->wave_decay = CLAMP(params->wave_decay + inc, 1, 16); + } + } break; case 9: { params->pan = CLAMP(params->pan + inc, -1, 1); } break; } redraw_params = true; -- cgit v1.2.1