[Scummvm-cvs-logs] scummvm master -> 258b5adb9ac7ab27ddc2adef0663abd2c11463f8

m-kiewitz m_kiewitz at users.sourceforge.net
Fri Jun 26 10:35:13 CEST 2015


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
258b5adb9a SHERLOCK: RT: Miles AdLib: circular phys. assign


Commit: 258b5adb9ac7ab27ddc2adef0663abd2c11463f8
    https://github.com/scummvm/scummvm/commit/258b5adb9ac7ab27ddc2adef0663abd2c11463f8
Author: Martin Kiewitz (m_kiewitz at users.sourceforge.net)
Date: 2015-06-26T10:36:23+02:00

Commit Message:
SHERLOCK: RT: Miles AdLib: circular phys. assign

implements circular physical assignment of FM-voices,
which was enabled for Rose Tattoo.

This is not really needed, but by implementing it assigned
physical FM-voices should exactly match the original driver.

Changed paths:
    engines/sherlock/tattoo/drivers/tattoo_adlib.cpp



diff --git a/engines/sherlock/tattoo/drivers/tattoo_adlib.cpp b/engines/sherlock/tattoo/drivers/tattoo_adlib.cpp
index 6f2008a..75530f4 100644
--- a/engines/sherlock/tattoo/drivers/tattoo_adlib.cpp
+++ b/engines/sherlock/tattoo/drivers/tattoo_adlib.cpp
@@ -211,6 +211,9 @@ private:
 	InstrumentEntry *_instrumentTablePtr;
 	uint16           _instrumentTableCount;
 
+	bool circularPhysicalAssignment;
+	byte circularPhysicalAssignmentFmVoice;
+
 protected:
 	void onTimer();
 
@@ -249,6 +252,11 @@ MidiDriver_Miles_AdLib::MidiDriver_Miles_AdLib(Audio::Mixer *mixer, InstrumentEn
 	_instrumentTablePtr = instrumentTablePtr;
 	_instrumentTableCount = instrumentTableCount;
 
+	// Older Miles Audio drivers did not do a circular assign for physical FM-voices
+	// Sherlock Holmes 2 used the circular assign
+	circularPhysicalAssignment = true;
+	circularPhysicalAssignmentFmVoice = 255;
+
 	resetData();
 }
 
@@ -394,9 +402,25 @@ int16 MidiDriver_Miles_AdLib::searchFreeVirtualFmVoiceChannel() {
 }
 
 int16 MidiDriver_Miles_AdLib::searchFreePhysicalFmVoiceChannel() {
-	for (byte physicalFmVoice = 0; physicalFmVoice < SHERLOCK_MILES_ADLIB_PHYSICAL_FMVOICES_COUNT; physicalFmVoice++) {
-		if (!_physicalFmVoices[physicalFmVoice].inUse)
-			return physicalFmVoice;
+	if (!circularPhysicalAssignment) {
+		// Older assign logic
+		for (byte physicalFmVoice = 0; physicalFmVoice < SHERLOCK_MILES_ADLIB_PHYSICAL_FMVOICES_COUNT; physicalFmVoice++) {
+			if (!_physicalFmVoices[physicalFmVoice].inUse)
+				return physicalFmVoice;
+		}
+	} else {
+		// Newer one
+		// Remembers last physical FM-voice and searches from that spot
+		byte physicalFmVoice = circularPhysicalAssignmentFmVoice;
+		for (byte physicalFmVoiceCount = 0; physicalFmVoiceCount < SHERLOCK_MILES_ADLIB_PHYSICAL_FMVOICES_COUNT; physicalFmVoiceCount++) {
+			physicalFmVoice++;
+			if (physicalFmVoice >= SHERLOCK_MILES_ADLIB_PHYSICAL_FMVOICES_COUNT)
+				physicalFmVoice = 0;
+			if (!_physicalFmVoices[physicalFmVoice].inUse) {
+				circularPhysicalAssignmentFmVoice = physicalFmVoice;
+				return physicalFmVoice;
+			}
+		}
 	}
 	return -1;
 }






More information about the Scummvm-git-logs mailing list