fix bug #1995042: stop previous sfx playback when starting a new sfx (matches original dos code). Also removed the "sound skipping" hack in final bam scene.

svn-id: r33078
This commit is contained in:
Gregory Montoir 2008-07-15 20:26:12 +00:00
parent 943b4c2036
commit 2bae0df17e
4 changed files with 9 additions and 20 deletions

View File

@ -1175,15 +1175,8 @@ BamScene::BamScene(QueenEngine *vm)
}
void BamScene::playSfx() {
// Don't try to play all the sounds. This is only necessary for the
// fight bam, in which the number of 'sfx bam frames' is too much
// important / too much closer. The original game does not have
// this problem since its playSfx() function returns immediately
// if a sound is already being played.
if (_lastSoundIndex == 0 || _index - _lastSoundIndex >= SFX_SKIP) {
_vm->sound()->playSfx(_vm->logic()->currentRoomSfx());
_lastSoundIndex = _index;
}
_vm->sound()->playSfx(_vm->logic()->currentRoomSfx());
_lastSoundIndex = _index;
}
void BamScene::prepareAnimation() {

View File

@ -248,10 +248,6 @@ public:
F_REQ_STOP = 2
};
enum {
SFX_SKIP = 8
};
uint16 _flag, _index;
private:

View File

@ -229,11 +229,6 @@ void PCSound::setVolume(int vol) {
_music->setVolume(vol);
}
void PCSound::waitFinished(bool isSpeech) {
while (_mixer->isSoundHandleActive(isSpeech ? _speechHandle : _sfxHandle))
_vm->input()->delay(10);
}
void PCSound::playSound(const char *base, bool isSpeech) {
char name[13];
strcpy(name, base);
@ -243,7 +238,13 @@ void PCSound::playSound(const char *base, bool isSpeech) {
name[i] = '0';
}
strcat(name, ".SB");
waitFinished(isSpeech);
if (isSpeech) {
while (_mixer->isSoundHandleActive(_speechHandle)) {
_vm->input()->delay(10);
}
} else {
_mixer->stopHandle(_sfxHandle);
}
uint32 size;
Common::File *f = _vm->resource()->findSound(name, &size);
if (f) {

View File

@ -143,7 +143,6 @@ public:
void setVolume(int vol);
protected:
void waitFinished(bool isSpeech);
void playSound(const char *base, bool isSpeech);
virtual void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) = 0;