[Scummvm-cvs-logs] CVS: scummvm/scumm sound.cpp,1.447,1.448 sound.h,1.84,1.85 wiz_he.cpp,2.65,2.66

kirben kirben at users.sourceforge.net
Sun Apr 24 22:44:34 CEST 2005


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29336/scumm

Modified Files:
	sound.cpp sound.h wiz_he.cpp 
Log Message:

Read index of music file in HE games at startup.
Only reliable way to always get correct music tracks.


Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sound.cpp,v
retrieving revision 1.447
retrieving revision 1.448
diff -u -d -r1.447 -r1.448
--- sound.cpp	24 Apr 2005 10:26:31 -0000	1.447
+++ sound.cpp	25 Apr 2005 05:44:11 -0000	1.448
@@ -76,7 +76,8 @@
 	_currentCDSound(0),
 	_currentMusic(0),
 	_soundsPaused(false),
-	_sfxMode(0) {
+	_sfxMode(0),
+	_heMusicTracks(0) {
 	
 	memset(_soundQue, 0, sizeof(_soundQue));
 	memset(_soundQue2, 0, sizeof(_soundQue2));
@@ -161,8 +162,8 @@
 	_overrideFreq = freq;
 }
 
-void Sound::getHEMusicDetails(int id, int &musicOffs, int &musicSize) {
-	int musicID, offs, tracks, total_size;
+void Sound::setupHEMusicFile() {
+	int i, total_size;
 	char buf[32], buf1[128];
 	File musicFile;
 
@@ -179,40 +180,41 @@
 	musicFile.seek(4, SEEK_SET);
 	total_size = musicFile.readUint32BE();
 	musicFile.seek(16, SEEK_SET);
-	tracks = musicFile.readUint32LE();
+	_heMusicTracks = musicFile.readUint32LE();
+	debug(0, "Total music tracks %d", _heMusicTracks);
 
 	int musicStart = (_vm->_heversion >= 80) ? 56 : 20;
-
 	musicFile.seek(musicStart, SEEK_SET);
-	int musicStartID = musicFile.readUint32LE();
 
-	// Music is off by one in freddi2/puttzoo
-	offs = id - musicStartID - 1;
-	if (offs < 0 || offs > tracks)
-		offs = 0;
+	_heMusic = (HEMusic *)malloc((_heMusicTracks + 1) * sizeof(HEMusic));
+	for (i = 0; i < _heMusicTracks; i++) {
+		_heMusic[i].id = musicFile.readUint32LE();
+		_heMusic[i].offset = musicFile.readUint32LE();
+		_heMusic[i].size = musicFile.readUint32LE();
 
-	offs *= (_vm->_heversion >= 80) ? 21 : 25;
-	musicFile.seek(musicStart + offs, SEEK_SET);
+		if (_vm->_heversion >= 80) {
+			musicFile.seek(+9, SEEK_CUR);
+		} else {
+			musicFile.seek(+13, SEEK_CUR);
+		}
+	}	
 
-	// Adjust all other games.
-	musicID = musicFile.readUint32LE();
-	if (id == musicID + 1) {
-		offs += (_vm->_heversion >= 80) ? 21 : 25;
-		musicFile.seek(musicStart + offs, SEEK_SET);
-		musicID = musicFile.readUint32LE();
-	}
+	musicFile.close();
+}
 
-	musicOffs = musicFile.readUint32LE();
-	musicSize = musicFile.readUint32LE();
+void Sound::getHEMusicDetails(int id, int &musicOffs, int &musicSize) {
+	int i;
 
-	if (id != musicID) {
-		debug(0, "getHEMusicDetails: Music track doesn't match (%d, %d)", id, musicID);
-	}
-	if (musicOffs > total_size || (musicSize + musicOffs > total_size) || musicSize < 0) {
-		error("getHEMusicDetails: Invalid music offset (%d) in music %d", id);
+	for (i = 0; i < _heMusicTracks; i++) {
+		if (_heMusic[i].id == id) {
+			musicOffs = _heMusic[i].offset;
+			musicSize = _heMusic[i].size;
+			return;
+		}
 	}
 
-	musicFile.close();
+	error("getHEMusicDetails: musicID %d not found", id);
+
 }
 
 void Sound::playSound(int soundID, int heOffset, int heChannel, int heFlags) {
@@ -1060,8 +1062,13 @@
 	delete _sfxFile;
 	_sfxFile = openSfxFile();
 
-	if (_vm->_gameId == GID_FT)
+	if (_vm->_heversion >= 70) {
+		setupHEMusicFile();
+	}
+
+	if (_vm->_gameId == GID_FT) {
 		_vm->VAR(_vm->VAR_VOICE_BUNDLE_LOADED) = _sfxFile->isOpen();
+	}
 }
 
 void Sound::pauseSounds(bool pause) {

Index: sound.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sound.h,v
retrieving revision 1.84
retrieving revision 1.85
diff -u -d -r1.84 -r1.85
--- sound.h	18 Apr 2005 07:18:33 -0000	1.84
+++ sound.h	25 Apr 2005 05:44:12 -0000	1.85
@@ -83,6 +83,15 @@
 
 	int16 _currentCDSound;
 	int16 _currentMusic;
+
+	struct HEMusic{
+		int32 id;
+		int32 offset;
+		int32 size;
+	};
+	HEMusic *_heMusic;
+	int16 _heMusicTracks;
+
 public:
 	SoundHandle _talkChannelHandle;	// Handle of mixer channel actor is talking on
 	SoundHandle _heSoundChannels[8];
@@ -120,6 +129,7 @@
 	void updateCD();
 	int getCurrentCDSound() const { return _currentCDSound; }
 
+	void setupHEMusicFile();
 	void getHEMusicDetails(int id, int &musicOffs, int &musicSize);
 
 	// Used by the save/load system:

Index: wiz_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/wiz_he.cpp,v
retrieving revision 2.65
retrieving revision 2.66
diff -u -d -r2.65 -r2.66
--- wiz_he.cpp	24 Apr 2005 04:51:36 -0000	2.65
+++ wiz_he.cpp	25 Apr 2005 05:44:12 -0000	2.66
@@ -912,7 +912,7 @@
 }
 
 uint8 *ScummEngine_v72he::drawWizImage(int resNum, int state, int x1, int y1, int xmapNum, const Common::Rect *clipBox, int flags, int dstResNum, int paletteNum) {
-	debug(1, "drawWizImage(resNum %d, x1 %d, y1 %d, flags 0x%X, xmapNum %d dstResNum %d paletteNum %d)", resNum, x1, y1, flags, xmapNum, dstResNum, paletteNum);
+	debug(2, "drawWizImage(resNum %d, x1 %d, y1 %d, flags 0x%X, xmapNum %d dstResNum %d paletteNum %d)", resNum, x1, y1, flags, xmapNum, dstResNum, paletteNum);
 	uint8 *dst = NULL;
 	const uint8 *palPtr = NULL;
 	if (_heversion >= 99) {
@@ -932,7 +932,7 @@
 		uint32 comp   = READ_LE_UINT32(wizh + 0x0);
 		uint32 width  = READ_LE_UINT32(wizh + 0x4);
 		uint32 height = READ_LE_UINT32(wizh + 0x8);
-		debug(1, "wiz_header.comp = %d wiz_header.w = %d wiz_header.h = %d", comp, width, height);
+		debug(2, "wiz_header.comp = %d wiz_header.w = %d wiz_header.h = %d", comp, width, height);
 		
 		uint8 *wizd = findWrappedBlock(MKID('WIZD'), dataPtr, state, 0);
 		assert(wizd);
@@ -1620,7 +1620,7 @@
 }
 
 void ScummEngine_v90he::processWizImage(const WizParameters *params) {
-	debug(0, "processWizImage: processMode %d", params->processMode);
+	debug(2, "processWizImage: processMode %d", params->processMode);
 	switch (params->processMode) {
 	case 0:
 		// Used in racedemo





More information about the Scummvm-git-logs mailing list