[Scummvm-cvs-logs] CVS: scummvm/scumm/imuse_digi dimuse.cpp,1.99,1.100 dimuse_sndmgr.cpp,1.44,1.45 dimuse_sndmgr.h,1.24,1.25 dimuse_track.cpp,1.23,1.24
Pawel Kolodziejski
aquadran at users.sourceforge.net
Tue Jun 1 12:37:49 CEST 2004
Update of /cvsroot/scummvm/scummvm/scumm/imuse_digi
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3484/scummvm/scumm/imuse_digi
Modified Files:
dimuse.cpp dimuse_sndmgr.cpp dimuse_sndmgr.h dimuse_track.cpp
Log Message:
fix for imuse digi bug 952775
Index: dimuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.cpp,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -d -r1.99 -r1.100
--- dimuse.cpp 28 May 2004 20:46:50 -0000 1.99
+++ dimuse.cpp 1 Jun 2004 19:32:36 -0000 1.100
@@ -140,7 +140,8 @@
track->soundHandle = _sound->openSound(track->soundId,
track->soundName, track->soundType,
- track->volGroupId);
+ track->volGroupId, -1);
+ assert(track->soundHandle);
int32 streamBufferSize = track->iteration;
int freq = _sound->getFreq(track->soundHandle);
track->stream2 = NULL;
Index: dimuse_sndmgr.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_sndmgr.cpp,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -d -r1.44 -r1.45
--- dimuse_sndmgr.cpp 23 May 2004 19:44:10 -0000 1.44
+++ dimuse_sndmgr.cpp 1 Jun 2004 19:32:36 -0000 1.45
@@ -219,7 +219,7 @@
return -1;
}
-bool ImuseDigiSndMgr::openMusicBundle(int slot) {
+bool ImuseDigiSndMgr::openMusicBundle(int slot, int disk) {
bool result = false;
_sounds[slot].bundle = new BundleMgr(_cacheBundleDir);
@@ -228,13 +228,16 @@
result = _sounds[slot].bundle->openFile("music.bun", _vm->getGameDataPath());
} else {
char musicfile[20];
- sprintf(musicfile, "musdisk%d.bun", _vm->VAR(_vm->VAR_CURRENTDISK));
- if (_disk != _vm->VAR(_vm->VAR_CURRENTDISK)) {
+ if (disk == -1)
+ sprintf(musicfile, "musdisk%d.bun", _vm->VAR(_vm->VAR_CURRENTDISK));
+ else
+ sprintf(musicfile, "musdisk%d.bun", disk);
+// if (_disk != _vm->VAR(_vm->VAR_CURRENTDISK)) {
// _vm->_imuseDigital->parseScriptCmds(0x1000, 0, 0, 0, 0, 0, 0, 0);
// _vm->_imuseDigital->parseScriptCmds(0x2000, 0, 0, 0, 0, 0, 0, 0);
// _vm->_imuseDigital->stopAllSounds();
- _sounds[slot].bundle->closeFile();
- }
+// _sounds[slot].bundle->closeFile();
+// }
result = _sounds[slot].bundle->openFile(musicfile, _vm->getGameDataPath());
@@ -250,7 +253,7 @@
return result;
}
-bool ImuseDigiSndMgr::openVoiceBundle(int slot) {
+bool ImuseDigiSndMgr::openVoiceBundle(int slot, int disk) {
bool result = false;
_sounds[slot].bundle = new BundleMgr(_cacheBundleDir);
@@ -259,13 +262,16 @@
result = _sounds[slot].bundle->openFile("voice.bun", _vm->getGameDataPath());
} else {
char voxfile[20];
- sprintf(voxfile, "voxdisk%d.bun", _vm->VAR(_vm->VAR_CURRENTDISK));
- if (_disk != _vm->VAR(_vm->VAR_CURRENTDISK)) {
+ if (disk == -1)
+ sprintf(voxfile, "voxdisk%d.bun", _vm->VAR(_vm->VAR_CURRENTDISK));
+ else
+ sprintf(voxfile, "voxdisk%d.bun", disk);
+// if (_disk != _vm->VAR(_vm->VAR_CURRENTDISK)) {
// _vm->_imuseDigital->parseScriptCmds(0x1000, 0, 0, 0, 0, 0, 0, 0);
// _vm->_imuseDigital->parseScriptCmds(0x2000, 0, 0, 0, 0, 0, 0, 0);
// _vm->_imuseDigital->stopAllSounds();
- _sounds[slot].bundle->closeFile();
- }
+// _sounds[slot].bundle->closeFile();
+// }
result = _sounds[slot].bundle->openFile(voxfile, _vm->getGameDataPath());
@@ -281,7 +287,7 @@
return result;
}
-ImuseDigiSndMgr::soundStruct *ImuseDigiSndMgr::openSound(int32 soundId, const char *soundName, int soundType, int volGroupId) {
+ImuseDigiSndMgr::soundStruct *ImuseDigiSndMgr::openSound(int32 soundId, const char *soundName, int soundType, int volGroupId, int disk) {
assert(soundId >= 0);
assert(soundType);
@@ -309,9 +315,9 @@
} else if (soundType == IMUSE_BUNDLE) {
bool header_outside = ((_vm->_gameId == GID_CMI) && !(_vm->_features & GF_DEMO));
if (volGroupId == IMUSE_VOLGRP_VOICE)
- result = openVoiceBundle(slot);
+ result = openVoiceBundle(slot, disk);
else if (volGroupId == IMUSE_VOLGRP_MUSIC)
- result = openMusicBundle(slot);
+ result = openMusicBundle(slot, disk);
else
error("ImuseDigiSndMgr::openSound() Don't know how load sound: %d", soundId);
if (!result) {
@@ -329,9 +335,9 @@
if (soundType == IMUSE_BUNDLE) {
bool header_outside = ((_vm->_gameId == GID_CMI) && !(_vm->_features & GF_DEMO));
if (volGroupId == IMUSE_VOLGRP_VOICE)
- result = openVoiceBundle(slot);
+ result = openVoiceBundle(slot, disk);
else if (volGroupId == IMUSE_VOLGRP_MUSIC)
- result = openMusicBundle(slot);
+ result = openMusicBundle(slot, disk);
else
error("ImuseDigiSndMgr::openSound() Don't know how load sound: %d", soundId);
if (!result) {
@@ -353,6 +359,7 @@
closeSound(&_sounds[slot]);
return NULL;
}
+ _sounds[slot].disk = _disk;
prepareSound(ptr, slot);
return &_sounds[slot];
}
@@ -378,7 +385,7 @@
ImuseDigiSndMgr::soundStruct *ImuseDigiSndMgr::cloneSound(soundStruct *soundHandle) {
assert(soundHandle && checkForProperHandle(soundHandle));
- return openSound(soundHandle->soundId, soundHandle->name, soundHandle->type, soundHandle->volGroupId);
+ return openSound(soundHandle->soundId, soundHandle->name, soundHandle->type, soundHandle->volGroupId, soundHandle->disk);
}
bool ImuseDigiSndMgr::checkForProperHandle(soundStruct *soundHandle) {
Index: dimuse_sndmgr.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_sndmgr.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- dimuse_sndmgr.h 11 Apr 2004 14:48:50 -0000 1.24
+++ dimuse_sndmgr.h 1 Jun 2004 19:32:36 -0000 1.25
@@ -83,6 +83,7 @@
BundleMgr *bundle;
int type;
int volGroupId;
+ int disk;
};
private:
@@ -97,8 +98,8 @@
byte _disk;
BundleDirCache *_cacheBundleDir;
- bool openMusicBundle(int slot);
- bool openVoiceBundle(int slot);
+ bool openMusicBundle(int slot, int disk);
+ bool openVoiceBundle(int slot, int disk);
void countElements(byte *ptr, int &numRegions, int &numJumps, int &numSyncs);
@@ -107,7 +108,7 @@
ImuseDigiSndMgr(ScummEngine *scumm);
~ImuseDigiSndMgr();
- soundStruct *openSound(int32 soundId, const char *soundName, int soundType, int volGroupId);
+ soundStruct *openSound(int32 soundId, const char *soundName, int soundType, int volGroupId, int disk);
void closeSound(soundStruct *soundHandle);
soundStruct *cloneSound(soundStruct *soundHandle);
Index: dimuse_track.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_track.cpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- dimuse_track.cpp 28 May 2004 20:46:50 -0000 1.23
+++ dimuse_track.cpp 1 Jun 2004 19:32:36 -0000 1.24
@@ -115,7 +115,7 @@
} else {
track->souStream = false;
strcpy(track->soundName, soundName);
- track->soundHandle = _sound->openSound(soundId, soundName, soundType, volGroupId);
+ track->soundHandle = _sound->openSound(soundId, soundName, soundType, volGroupId, -1);
if (track->soundHandle == NULL)
return;
@@ -297,6 +297,7 @@
strcpy(fadeTrack->soundName, track->soundName);
fadeTrack->soundType = track->soundType;
fadeTrack->soundHandle = _sound->cloneSound(track->soundHandle);
+ assert(fadeTrack->soundHandle);
}
fadeTrack->volFadeDelay = fadeDelay;
More information about the Scummvm-git-logs
mailing list