shithub: dumb

Download patch

ref: 5f1d4388b1ba13ca80540f4734bbc58648468e3c
parent: cc986aa7dad019e2e4f8fe2d42013e50a1cd79d6
author: Chris Moeller <kode54@gmail.com>
date: Sat Mar 16 11:03:07 EDT 2013

- Removed *16/11 scale from S3M global volume
- Applied S3M master volume as mixing volume
- Renderer now ignores S3M Vxx for values greater than 0x40

--- a/dumb/src/it/itrender.c
+++ b/dumb/src/it/itrender.c
@@ -2963,6 +2963,8 @@
 				}
 				break;
 			case IT_SET_GLOBAL_VOLUME:
+				if ((sigdata->flags & IT_WAS_AN_S3M) && (entry->effectvalue > 64))
+					break;
 				if (entry->effectvalue <= 128)
 					sigrenderer->globalvolume = entry->effectvalue;
 #ifdef VOLUME_OUT_OF_RANGE_SETS_MAXIMUM
--- a/dumb/src/it/reads3m.c
+++ b/dumb/src/it/reads3m.c
@@ -532,14 +532,13 @@
 		return NULL;
 	}
 
-	sigdata->global_volume = dumbfile_getc(f) * 16 / 11;
-	if ( !sigdata->global_volume || sigdata->global_volume > 93 ) sigdata->global_volume = 93;
+	sigdata->global_volume = dumbfile_getc(f);
+	if ( !sigdata->global_volume || sigdata->global_volume > 64 ) sigdata->global_volume = 64;
 	sigdata->speed = dumbfile_getc(f);
 	if (sigdata->speed == 0) sigdata->speed = 6; // Should we? What about tempo?
 	sigdata->tempo = dumbfile_getc(f);
 	master_volume = dumbfile_getc(f); // 7 bits; +128 for stereo
-	//what do we do with master_volume? it's not the same as mixing volume...
-	sigdata->mixing_volume = 48;
+	sigdata->mixing_volume = master_volume & 127;
 
 	if (master_volume & 128) sigdata->flags |= IT_STEREO;