[Scummvm-cvs-logs] CVS: scummvm/scumm imuse.cpp,1.39,1.40 imuse.h,1.9,1.10 script_v2.cpp,1.25,1.26

Pawe? Ko?odziejski aquadran at users.sourceforge.net
Tue Oct 8 00:31:04 CEST 2002


Update of /cvsroot/scummvm/scummvm/scumm
In directory usw-pr-cvs1:/tmp/cvs-serv15348

Modified Files:
	imuse.cpp imuse.h script_v2.cpp 
Log Message:
synced with local sources (imuse)

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -d -r1.39 -r1.40
--- imuse.cpp	6 Oct 2002 15:44:16 -0000	1.39
+++ imuse.cpp	8 Oct 2002 07:30:50 -0000	1.40
@@ -4866,6 +4866,35 @@
 				continue;
 			}
 
+			if (_channel[l]._volumeFade != -1) {
+				if (_channel[l]._volumeFadeStep < 0) {
+					if (_channel[l]._volume > _channel[l]._volumeFade) {
+						_channel[l]._volume += _channel[l]._volumeFadeStep;
+						_channel[l]._volumeRight += _channel[l]._volumeFadeStep;
+						if (_channel[l]._volume < _channel[l]._volumeFade) {
+							_channel[l]._volume = _channel[l]._volumeFade;
+						}
+						if (_channel[l]._volumeRight < _channel[l]._volumeFade) {
+							_channel[l]._volumeRight = _channel[l]._volumeFade;
+						}
+						if ((_channel[l]._volume == 0) && (_channel[l]._volumeRight == 0)) {
+							_channel[l]._toBeRemoved = true;
+						}
+					}
+				} else if (_channel[l]._volumeFadeStep > 0) {
+					if (_channel[l]._volume < _channel[l]._volumeFade) {
+						_channel[l]._volume += _channel[l]._volumeFadeStep;
+						_channel[l]._volumeRight += _channel[l]._volumeFadeStep;
+						if (_channel[l]._volume > _channel[l]._volumeFade) {
+							_channel[l]._volume = _channel[l]._volumeFade;
+						}
+						if (_channel[l]._volumeRight > _channel[l]._volumeFade) {
+							_channel[l]._volumeRight = _channel[l]._volumeFade;
+						}
+					}
+				}
+			}
+
 			if ((_channel[l]._jump[0]._numLoops == 0) && (_channel[l]._isJump == true)) {
 				_channel[l]._isJump = false;
 			}
@@ -4889,7 +4918,7 @@
 						mixer_size = new_size;
 					}
 				}
-			} else {
+			} else if (_channel[l]._isJump == true) {
 				if (_channel[l]._jump[0]._numLoops != 500) {
 					_channel[l]._jump[0]._numLoops--;
 				}
@@ -4907,18 +4936,10 @@
 			} else if ((_channel[l]._numLoops > 0) && (new_size != mixer_size)) {
 				memcpy(buf + new_size, _channel[l]._data, mixer_size - new_size);
 				_channel[l]._offset = mixer_size - new_size;
-				_channel[l]._numLoops--;
 			} else {
 				_channel[l]._offset += mixer_size;
 			}
 
-			if (_channel[l]._volumeFade != -1) {
-				if (_channel[l]._volume > _channel[l]._volumeFade) {
-					_channel[l]._volume -= 10;
-					_channel[l]._volumeRight -= 10;
-				}
-			}
-
 			if (_channel[l]._bits == 12) {
 				for(i = 0; i < (mixer_size / 4); i++) {
 					byte sample1 = buf[i * 4 + 0];
@@ -4969,6 +4990,7 @@
 			_channel[l]._volumeRight = 127;
 			_channel[l]._volume = 127;
 			_channel[l]._volumeFade = -1;
+			_channel[l]._volumeFadeParam = 0;
 
 			uint32 tag, size = 0, r, t;
 
@@ -5129,6 +5151,7 @@
 	int32 sample = b;
 	byte sub_cmd = c >> 8;
 	int8 channel = -1, l;
+	int8 tmp;
 
 	if (!(cmd || param))
 		return 1;
@@ -5154,8 +5177,19 @@
 				}
 				_channel[channel]._volume = d;
 				_channel[channel]._volumeRight = d;
+				if (_channel[channel]._volumeFade != -1) {
+					tmp = ((_channel[channel]._volumeFade - _channel[channel]._volume) * 2) / _channel[channel]._volumeFadeParam;
+					if ((tmp < 0) && (tmp > -2)) {
+						tmp = -1;
+					} else if ((tmp > 0) && (tmp < 2)) {
+						tmp = 1;
+					} else {
+						tmp /= 2;
+					}
+				_channel[channel]._volumeFadeStep = tmp;
+				}
 				return 0;
-			case 7: // right volume control (0-127) i think
+			case 7: // right volume control (0-127)
 				debug(2, "IMuseDigital::doCommand setting right volume sample(%d),volume(%d)", sample, d);
 				for (l = 0; l < MAX_DIGITAL_CHANNELS; l++) {
 					if ((_channel[l]._idSound == sample) && (_channel[l]._used == true)) {
@@ -5184,10 +5218,20 @@
 					}
 				}
 				if (channel == -1) {
-						warning("IMuseDigital::doCommand Sample %d not exist in channels", sample);
+						warning("IMuseDigital::doCommand 14,6 sample %d not exist in channels", sample);
 					return 1;
 				}
-				_channel[channel]._volumeFade = e;
+				_channel[channel]._volumeFade = d;
+				_channel[channel]._volumeFadeParam = e;
+				tmp = ((_channel[channel]._volumeFade - _channel[channel]._volume) * 2) / _channel[channel]._volumeFadeParam;
+				if ((tmp < 0) && (tmp > -2)) {
+					tmp = -1;
+				} else if ((tmp > 0) && (tmp < 2)) {
+					tmp = 1;
+				} else {
+					tmp /= 2;
+				}
+				_channel[channel]._volumeFadeStep = tmp;
 				return 0;
 			default:
 				warning("IMuseDigital::doCommand 14 DEFAULT sub command %d", sub_cmd);
@@ -5199,16 +5243,16 @@
 		}
 	} else if (param == 16) {
 		switch (cmd) {
-		case 0: // it looks be play music (DIG/CMI) (state) (0, 1 ,2, 4, 6, 8, 9, 10, 12, 14, 15, 17, 18, 79, ...)
+		case 0: // play music (state)
 			debug(2, "IMuseDigital::doCommand 0x1000 (%d)", b);
 			return 0;
-		case 1: // it looks be play music (DIG/CMI) (seq) (2020, 2022, 2023, 2045, 2046, 2050, 2060, 2070, ...)
+		case 1: // play music (seq)
 			debug(2, "IMuseDigital::doCommand 0x1001 (%d)", b);
 			return 0;
-		case 2: // dummy in DIG and CMI,     FT - ?
+		case 2: // dummy in DIG and CMI
 			debug(2, "IMuseDigital::doCommand 0x1002 (%d)", b);
 			return 0;
-		case 3: // ??? (stream related) (1, 2, 8),(1)
+		case 3: // ??? (stream related)
 			debug(2, "IMuseDigital::doCommand 0x1003 (%d,%d)", b, c);
 			return 0;
 		default:

Index: imuse.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- imuse.h	4 Oct 2002 08:04:34 -0000	1.9
+++ imuse.h	8 Oct 2002 07:30:50 -0000	1.10
@@ -60,7 +60,7 @@
 	IMuseInternal *_imuse;				// Pointer to the real imuse object
 };
 
-#define MAX_DIGITAL_CHANNELS 10
+#define MAX_DIGITAL_CHANNELS 16
 #define MAX_IMUSE_JUMPS 1
 #define MAX_IMUSE_REGIONS 3
 
@@ -83,6 +83,8 @@
 		int8 _volumeRight;
 		int8 _volume;
 		int8 _volumeFade;
+		int8 _volumeFadeParam;
+		int8 _volumeFadeStep;
 		bool _isJump;
 		uint32 _numLoops;
 		uint32 _offsetStop;

Index: script_v2.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v2.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- script_v2.cpp	6 Oct 2002 07:23:07 -0000	1.25
+++ script_v2.cpp	8 Oct 2002 07:30:50 -0000	1.26
@@ -2728,9 +2728,9 @@
 			grabCursor(args[1], args[2], args[3], args[4]);
 			break;
 		case 6: {
-				if (_imuseDigital) {
-					_imuseDigital->stopAll();
-				}
+//				if (_imuseDigital) {
+//					_imuseDigital->stopAll();
+//				}
 				uint32 speed;
 				if (strcmp((char*)getStringAddressVar(VAR_VIDEONAME), "sq3.san") == 0)
 	 				speed = 71;





More information about the Scummvm-git-logs mailing list