added stopAll in Imuse

svn-id: r5064
This commit is contained in:
Paweł Kołodziejski 2002-10-01 21:19:52 +00:00
parent c49e3e3eb8
commit 7d6ebdc289
4 changed files with 21 additions and 1 deletions

View file

@ -4862,6 +4862,7 @@ void IMuseDigital::handler() {
if (_channel[l]._toBeRemoved == true) {
_channel[l]._used = false;
free(_channel[l]._data);
memset(&_channel[l], 0, sizeof(channel));
continue;
}
@ -5043,8 +5044,19 @@ void IMuseDigital::startSound(int sound) {
void IMuseDigital::stopSound(int sound) {
debug(1, "IMuseDigital::stopSound(%d)", sound);
for (int32 l = 0; l < MAX_DIGITAL_CHANNELS;l ++) {
for (int32 l = 0; l < MAX_DIGITAL_CHANNELS; l++) {
if ((_channel[l]._idSound == sound) && (_channel[l]._used == true)) {
if (_channel[l]._isLoop == false)
_channel[l]._toBeRemoved = true;
else
_channel[l]._isLoop = false;
}
}
}
void IMuseDigital::stopAll() {
for (int32 l = 0; l < MAX_DIGITAL_CHANNELS; l++) {
if (_channel[l]._used == true) {
_channel[l]._toBeRemoved = true;
}
}

View file

@ -110,6 +110,7 @@ public:
void handler();
void startSound(int sound);
void stopSound(int sound);
void stopAll();
int32 doCommand(int a, int b, int c, int d, int e, int f, int g, int h);
int getSoundStatus(int sound);
};

View file

@ -111,6 +111,10 @@ bool Scumm::loadState(int slot, bool compat)
_current_version = hdr.ver;
memcpy(_saveLoadName, hdr.name, sizeof(hdr.name));
if (_imuseDigital) {
_imuseDigital->stopAll();
}
_sound->pauseSounds(true);
CHECK_HEAP openRoom(-1);

View file

@ -2714,6 +2714,9 @@ void Scumm::o6_miscOps()
grabCursor(args[1], args[2], args[3], args[4]);
break;
case 6: {
if (_imuseDigital) {
_imuseDigital->stopAll();
}
uint32 speed;
if (strcmp((char*)getStringAddressVar(VAR_VIDEONAME), "sq3.san") == 0)
speed = 71;