[Scummvm-cvs-logs] SF.net SVN: scummvm:[46532] scummvm/trunk/engines/sci/sfx

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Thu Dec 24 18:40:45 CET 2009


Revision: 46532
          http://scummvm.svn.sourceforge.net/scummvm/?rev=46532&view=rev
Author:   m_kiewitz
Date:     2009-12-24 17:40:45 +0000 (Thu, 24 Dec 2009)

Log Message:
-----------
SCI: new music code / signals now almost correctly triggered

Modified Paths:
--------------
    scummvm/trunk/engines/sci/sfx/music.cpp
    scummvm/trunk/engines/sci/sfx/music.h
    scummvm/trunk/engines/sci/sfx/soundcmd.cpp

Modified: scummvm/trunk/engines/sci/sfx/music.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.cpp	2009-12-24 16:46:15 UTC (rev 46531)
+++ scummvm/trunk/engines/sci/sfx/music.cpp	2009-12-24 17:40:45 UTC (rev 46532)
@@ -41,8 +41,8 @@
 	return ((const MusicEntry *)arg2)->prio - ((const MusicEntry *)arg1)->prio;
 }
 
-SciMusic::SciMusic() {
-
+SciMusic::SciMusic(SciVersion soundVersion)
+	: _soundVersion(soundVersion) {
 }
 
 SciMusic::~SciMusic() {
@@ -334,7 +334,7 @@
 			}
 			// Find out what channels to filter for SCI0
 			channelFilterMask = pSnd->soundRes->getChannelFilterMask(_pMidiDrv->getPlayMask());
-			pSnd->pMidiParser->loadMusic(track, pSnd, channelFilterMask);
+			pSnd->pMidiParser->loadMusic(track, pSnd, channelFilterMask, _soundVersion);
 		}
 	}
 
@@ -496,10 +496,12 @@
 	unloadMusic();
 }
 //---------------------------------------------
-bool MidiParser_SCI::loadMusic(SoundResource::Track *track, MusicEntry *psnd, int channelFilterMask) {
+bool MidiParser_SCI::loadMusic(SoundResource::Track *track, MusicEntry *psnd, int channelFilterMask, SciVersion soundVersion) {
 	unloadMusic();
 	_track = track;
 	_pSnd = psnd;
+	_soundVersion = soundVersion;
+
 	setVolume(psnd->volume);
 
 	if (channelFilterMask) {
@@ -546,10 +548,11 @@
 		info.basic.param1 = *(_position._play_pos++);
 		info.basic.param2 = 0;
 		if (info.channel() == 0xF) {// SCI special case
-			if (info.basic.param1 != 0x7F)
+			if (info.basic.param1 != 0x7F) {
 				PUT_SEL32V(segMan, _pSnd->soundObj, signal, info.basic.param1);
-			else
+			} else {
 				_loopTick = _position._play_tick;
+			}
 		}
 		break;
 	case 0xD:
@@ -561,8 +564,18 @@
 		info.basic.param1 = *(_position._play_pos++);
 		info.basic.param2 = *(_position._play_pos++);
 		if (info.channel() == 0xF) {// SCI special
-			if (info.basic.param1 == 0x60)
-				_pSnd->dataInc++;
+			if (info.basic.param1 == 0x60) {
+				switch (_soundVersion) {
+				case SCI_VERSION_0_EARLY:
+					_pSnd->dataInc += info.basic.param2;
+					PUT_SEL32V(segMan, _pSnd->soundObj, signal, 0x7f + _pSnd->dataInc);
+					break;
+				case SCI_VERSION_1_EARLY:
+				case SCI_VERSION_1_LATE:
+					_pSnd->dataInc++;
+					break;
+				}
+			}
 			// BF 50 x - set reverb to x
 			// BF 60 x - dataInc++
 			// BF 52 x - bHold=x
@@ -747,8 +760,6 @@
 	_mixedData = filterData;
 	lastCommand = 0;
 
-	// Find out which channels to filter out
-
 	while (channelData <= channelDataEnd) {
 		delta += *channelData++;
 		curByte = *channelData++;

Modified: scummvm/trunk/engines/sci/sfx/music.h
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.h	2009-12-24 16:46:15 UTC (rev 46531)
+++ scummvm/trunk/engines/sci/sfx/music.h	2009-12-24 17:40:45 UTC (rev 46532)
@@ -97,7 +97,7 @@
 
 class SciMusic {
 public:
-	SciMusic();
+	SciMusic(SciVersion soundVersion);
 	~SciMusic();
 
 	void init();
@@ -148,6 +148,8 @@
 
 	void doFade(MusicEntry *pSnd);
 
+	SciVersion _soundVersion;
+
 	Audio::Mixer *_pMixer;
 	MidiPlayer *_pMidiDrv;
 	MidiDriverType _midiType;
@@ -163,7 +165,7 @@
 public:
 	MidiParser_SCI();
 	~MidiParser_SCI();
-	bool loadMusic(SoundResource::Track *track, MusicEntry *psnd, int channelFilterMask);
+	bool loadMusic(SoundResource::Track *track, MusicEntry *psnd, int channelFilterMask, SciVersion soundVersion);
 	bool loadMusic(byte *, uint32) {
 		return false;
 	}
@@ -181,6 +183,8 @@
 	byte *midiMixChannels();
 	byte *midiFilterChannels(int channelMask);
 	byte midiGetNextChannel(long ticker);
+
+	SciVersion _soundVersion;
 	byte *_mixedData;
 	SoundResource::Track *_track;
 	MusicEntry *_pSnd;

Modified: scummvm/trunk/engines/sci/sfx/soundcmd.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/soundcmd.cpp	2009-12-24 16:46:15 UTC (rev 46531)
+++ scummvm/trunk/engines/sci/sfx/soundcmd.cpp	2009-12-24 17:40:45 UTC (rev 46532)
@@ -136,7 +136,7 @@
 	_hasNodePtr = (((SciEngine*)g_engine)->getKernel()->_selectorCache.nodePtr != -1);
 
 	#ifndef USE_OLD_MUSIC_FUNCTIONS
-		_music = new SciMusic();
+		_music = new SciMusic(_doSoundVersion);
 		_music->init();
 	#endif
 
@@ -674,7 +674,6 @@
 	case SI_ABSOLUTE_CUE:
 		debugC(2, kDebugLevelSound, "---    [CUE] %04x:%04x Absolute Cue: %d\n",
 		          PRINT_REG(obj), signal);
-
 		PUT_SEL32V(_segMan, obj, signal, signal);
 		break;
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list