shithub: dumb

Download patch

ref: e07088e5f65186f78681116f3337a89d9db3f5ae
parent: ee34129043d15e9cb9f980ab73585bbec8b40314
author: Chris Moeller <[email protected]>
date: Thu Nov 7 14:06:43 EST 2013

It is now possible to use both Gxx/Lxx and hx in the volume column in the same row

--- a/dumb/src/it/itrender.c
+++ b/dumb/src/it/itrender.c
@@ -3269,6 +3269,8 @@
 			}
 		}
 
+		channel->toneporta = 0;
+
 		if ((entry->mask & IT_ENTRY_VOLPAN) && entry->volpan >= 193 && entry->volpan <= 202) {
 			/* Tone Portamento in the volume column */
 			static const unsigned char slidetable[] = {0, 1, 4, 8, 16, 32, 64, 96, 128, 255};
@@ -3282,16 +3284,10 @@
 					v = channel->lastEF;
 				channel->lastEF = v;
 			}
-			if ((entry->mask & IT_ENTRY_NOTE) || ((sigdata->flags & IT_COMPATIBLE_GXX) && (entry->mask & IT_ENTRY_INSTRUMENT))) {
-				if (channel->note <= 120) {
-					if (channel->sample)
-						channel->destnote = channel->truenote;
-					else
-						channel->destnote = channel->note;
-				}
-			}
-			channel->toneporta = v << 4;
-		} else {
+			channel->toneporta += v << 4;
+		}
+
+		if ((entry->mask & IT_ENTRY_EFFECT) && (entry->effect == IT_TONE_PORTAMENTO || entry->effect == IT_VOLSLIDE_TONEPORTA)) {
 			/* Tone Portamento in the effect column */
 			unsigned char v;
 			if (entry->effect == IT_TONE_PORTAMENTO)
@@ -3307,16 +3303,18 @@
 					v = channel->lastEF;
 				channel->lastEF = v;
 			}
-			if ((entry->mask & IT_ENTRY_NOTE) || ((sigdata->flags & IT_COMPATIBLE_GXX) && (entry->mask & IT_ENTRY_INSTRUMENT))) {
-				if (channel->note <= 120) {
-					if (channel->sample)
-						channel->destnote = channel->truenote;
-					else
-						channel->destnote = channel->note;
-				}
+			channel->toneporta += v << 4;
+		}
+
+		if ((entry->mask & IT_ENTRY_NOTE) || ((sigdata->flags & IT_COMPATIBLE_GXX) && (entry->mask & IT_ENTRY_INSTRUMENT))) {
+			if (channel->note <= 120) {
+				if (channel->sample)
+					channel->destnote = channel->truenote;
+				else
+					channel->destnote = channel->note;
 			}
-			channel->toneporta = v << 4;
 		}
+
 		if (channel->playing) goto skip_start_note;
 	}