[Scummvm-cvs-logs] CVS: scummvm/scumm/smush imuse_channel.cpp,1.23,1.24 smush_player.cpp,1.77,1.78 smush_player.h,1.15,1.16

Pawel Kolodziejski aquadran at users.sourceforge.net
Sun Dec 21 16:11:01 CET 2003


Update of /cvsroot/scummvm/scummvm/scumm/smush
In directory sc8-pr-cvs1:/tmp/cvs-serv12382

Modified Files:
	imuse_channel.cpp smush_player.cpp smush_player.h 
Log Message:
changed some stuff with track_flags param in IACT handle smush code

Index: imuse_channel.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/imuse_channel.cpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- imuse_channel.cpp	16 Nov 2003 20:52:57 -0000	1.23
+++ imuse_channel.cpp	22 Dec 2003 00:10:43 -0000	1.24
@@ -52,17 +52,16 @@
 }
 
 bool ImuseChannel::setParameters(int32 nb, int32 size, int32 flags, int32 unk1) {
-	// flags: 0 - 8 bits
-	// values:
-	// 1 - Voice
-	// 2 - Background music
-	// 0, 3-511 - SFX and volume
-	// FIXME: this should be better
-	if ((flags != 1) && (flags != 2) && ((flags / 4) != 0)) {
-		_volume = 300 - ((flags / 8) * 4);
-	}
-	else {
+	if ((flags == 1) || (flags == 2) || (flags == 3)) {
 		_volume = 127;
+	} else if ((flags >= 100) && (flags <= 163)) {
+		_volume = flags * 2 - 200;
+	} else if ((flags >= 200) && (flags <= 263)) {
+		_volume = flags * 2 - 400;
+	} else if ((flags >= 300) && (flags <= 363)) {
+		_volume = flags * 2 - 600;
+	} else {
+		error("ImuseChannel::setParameters(): bad flags: %d", flags);
 	}
 	return true;
 }

Index: smush_player.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/smush_player.cpp,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -d -r1.77 -r1.78
--- smush_player.cpp	21 Dec 2003 18:36:20 -0000	1.77
+++ smush_player.cpp	22 Dec 2003 00:10:43 -0000	1.78
@@ -337,11 +337,9 @@
 	int32 flags = b.getWord();
 	int32 vol = b.getByte();
 	int32 bal = b.getChar();
-#ifdef DEBUG
 	if (index == 0) {
 		debug(5, "track_id == %d, max_frames == %d, %d, %d, %d", track_id, max_frames, flags, vol, bal);
 	}
-#endif
 	int32 size = b.getSize() - 10;
 	handleSoundBuffer(track_id, index, max_frames, flags, vol, bal, b, size);
 }
@@ -371,28 +369,11 @@
 	}
 }
 
-void SmushPlayer::handleImuseBuffer(int32 track_id, int32 index, int32 nbframes, int32 size, int32 unk1, int32 track_flags, Chunk &b, int32 bsize) {
-	int32 track = (track_flags << 16) | track_id;
-	debug(6, "SmushPlayer::handleImuseBuffer(%d, %d)", track_id, index);
-
-	SmushChannel *c = _smixer->findChannel(track);
-	if (c == 0) {
-		c = new ImuseChannel(track, _soundFrequency);
-		_smixer->addChannel(c);
-	}
-	if (index == 0)
-		c->setParameters(nbframes, size, track_flags, unk1);
-	else
-		c->checkParameters(index, nbframes, size, track_flags, unk1);
-	c->appendData(b, bsize);
-}
-
-void SmushPlayer::handleImuseAction(Chunk &b) {
+void SmushPlayer::handleIACT(Chunk &b) {
 	checkBlock(b, TYPE_IACT, 8);
 	debug(6, "SmushPlayer::handleImuseAction()");
 
-	int code;
-	code = b.getWord();
+	int code = b.getWord();
 	int flags = b.getWord();
 	int unknown = b.getShort();
 	int track_flags = b.getWord();
@@ -407,7 +388,34 @@
 	int32 bsize = b.getSize() - 18;
 
 	if (g_scumm->_gameId != GID_CMI) {
-		handleImuseBuffer(track_id, index, nbframes, size, unknown, track_flags, b, bsize);
+		int32 track = track_id;
+		if (track_flags == 1) {
+			track = track_id + 100;
+		} else if (track_flags == 2) {
+			track = track_id + 200;
+		} else if (track_flags == 3) {
+			track = track_id + 300;
+		} else if ((track_flags >= 100) && (track_flags <= 163)) {
+			track = track_id + 400;
+		} else if ((track_flags >= 200) && (track_flags <= 263)) {
+			track = track_id + 500;
+		} else if ((track_flags >= 300) && (track_flags <= 363)) {
+			track = track_id + 600;
+		} else {
+			error("ImuseChannel::handleIACT(): bad track_flags: %d", track_flags);
+		}
+		debug(6, "SmushPlayer::handleIACT(): %d, %d, %d", track, index, track_flags);
+
+		SmushChannel *c = _smixer->findChannel(track);
+		if (c == 0) {
+			c = new ImuseChannel(track, _soundFrequency);
+			_smixer->addChannel(c);
+		}
+		if (index == 0)
+			c->setParameters(nbframes, size, track_flags, unknown);
+		else
+			c->checkParameters(index, nbframes, size, track_flags, unknown);
+		c->appendData(b, bsize);
 	} else {
 		byte output_data[4096];
 		byte *src = (byte *)malloc(bsize);
@@ -769,9 +777,9 @@
 			if (_insanity)
 				_scumm->_insane->procIACT(_dst, 0, 0, 0, *sub, 0, 0);
 			else
-				handleImuseAction(*sub);
+				handleIACT(*sub);
 #else
-			handleImuseAction(*sub);
+			handleIACT(*sub);
 #endif
 			break;
 		case TYPE_STOR:

Index: smush_player.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/smush_player.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- smush_player.h	21 Dec 2003 18:36:20 -0000	1.15
+++ smush_player.h	22 Dec 2003 00:10:43 -0000	1.16
@@ -95,12 +95,11 @@
 	void handleNewPalette(Chunk &);
 	void handleFrameObject(Chunk &);
 	void handleSoundBuffer(int32, int32, int32, int32, int32, int32, Chunk &, int32);
-	void handleImuseBuffer(int32, int32, int32, int32, int32, int32, Chunk &, int32);
 	void handleSoundFrame(Chunk &);
 	void handleSkip(Chunk &);
 	void handleStore(Chunk &);
 	void handleFetch(Chunk &);
-	void handleImuseAction(Chunk &);
+	void handleIACT(Chunk &);
 	void handleTextResource(Chunk &);
 	void handleDeltaPalette(Chunk &);
 	void readPalette(byte *, Chunk &);





More information about the Scummvm-git-logs mailing list