[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