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