mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-29 14:42:26 +00:00
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:
parent
943b4c2036
commit
2bae0df17e
@ -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() {
|
||||
|
@ -248,10 +248,6 @@ public:
|
||||
F_REQ_STOP = 2
|
||||
};
|
||||
|
||||
enum {
|
||||
SFX_SKIP = 8
|
||||
};
|
||||
|
||||
uint16 _flag, _index;
|
||||
|
||||
private:
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user