Mercurial > hg > dmlib
changeset 225:83f942efc55d
Move multi retrig note code to a separate function.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 08 Oct 2012 01:10:21 +0300 |
parents | 81f3993412ae |
children | 725ac9d4962f |
files | jssplr.c |
diffstat | 1 files changed, 38 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/jssplr.c Mon Oct 08 00:44:40 2012 +0300 +++ b/jssplr.c Mon Oct 08 01:10:21 2012 +0300 @@ -743,6 +743,43 @@ jmpChangeVolume(chn, channel, -paramY); } +static void jmpTriggerNote(JSSPlayer * mp, JSSPlayerChannel *chn, BOOL newExtInstrument); + + +static void jmpDoMultiRetrigNote(JSSPlayer *mp, JSSPlayerChannel *chn, int channel) +{ + if ((chn->lastMultiRetrigParamY != 0 && + (mp->tick % chn->lastMultiRetrigParamY) == 0) + { + BOOL change = TRUE; + int volume = chn->volume; + switch (chn->lastMultiRetrigParamX) + { + case 0x1: volume -= 1; break; + case 0x2: volume -= 2; break; + case 0x3: volume -= 4; break; + case 0x4: volume -= 8; break; + case 0x5: volume -= 16; break; + case 0x6: volume = (volume * 2) / 3; break; + case 0x7: volume /= 2; break; + + case 0x9: volume += 1; break; + case 0xA: volume += 2; break; + case 0xB: volume += 4; break; + case 0xC: volume += 8; break; + case 0xD: volume += 16; break; + case 0xE: volume = (volume * 3) / 2; break; + case 0xF: volume *= 2; break; + default: change = FALSE; + } + jmpTriggerNote(mp, chn, FALSE); + if (change) + { + chn->volume = dmClamp(volume, mpMinVol, mpMaxVol); + JMPSETNDFLAGS(cdfNewVolume); + } + } +} /* Execute a pattern loop effect/command for given module channel. * @@ -1342,37 +1379,7 @@ break; case 'R': // Rxy = Multi Retrig note - if (chn->lastMultiRetrigParamY != 0 && - (mp->tick % chn->lastMultiRetrigParamY) == 0) - { - BOOL change = TRUE; - int volume = chn->volume; - switch (chn->lastMultiRetrigParamX) - { - case 0x1: volume -= 1; break; - case 0x2: volume -= 2; break; - case 0x3: volume -= 4; break; - case 0x4: volume -= 8; break; - case 0x5: volume -= 16; break; - case 0x6: volume = (volume * 2) / 3; break; - case 0x7: volume /= 2; break; - - case 0x9: volume += 1; break; - case 0xA: volume += 2; break; - case 0xB: volume += 4; break; - case 0xC: volume += 8; break; - case 0xD: volume += 16; break; - case 0xE: volume = (volume * 3) / 2; break; - case 0xF: volume *= 2; break; - default: change = FALSE; - } - jmpTriggerNote(mp, chn, FALSE); - if (change) - { - chn->volume = dmClamp(volume, mpMinVol, mpMaxVol); - JMPSETNDFLAGS(cdfNewVolume); - } - } + jmpDoMultiRetrigNote(mp, chn, channel); break; case 'T': // Txy = Tremor