diff options
| author | Gregory Montoir | 2004-01-10 16:23:34 +0000 | 
|---|---|---|
| committer | Gregory Montoir | 2004-01-10 16:23:34 +0000 | 
| commit | 3d1c883970d1315b1bd8b8dbcec9686340cce9cd (patch) | |
| tree | 1e5e0d5d388138b4a5bfd71ab84b26c140d75d14 | |
| parent | aab4e7a011b6e35821b83348538564527957a959 (diff) | |
| download | scummvm-rg350-3d1c883970d1315b1bd8b8dbcec9686340cce9cd.tar.gz scummvm-rg350-3d1c883970d1315b1bd8b8dbcec9686340cce9cd.tar.bz2 scummvm-rg350-3d1c883970d1315b1bd8b8dbcec9686340cce9cd.zip | |
workaround for final room sound issues
svn-id: r12302
| -rw-r--r-- | queen/graphics.cpp | 22 | ||||
| -rw-r--r-- | queen/graphics.h | 6 | 
2 files changed, 24 insertions, 4 deletions
| diff --git a/queen/graphics.cpp b/queen/graphics.cpp index e474c6b6c9..cb30a1fc6c 100644 --- a/queen/graphics.cpp +++ b/queen/graphics.cpp @@ -1151,6 +1151,19 @@ BamScene::BamScene(QueenEngine *vm)  } +void BamScene::playSfx() { +	// FIXME - we don't play all sfx here. This is only necessary for +	// the fight bam, where the number of 'sfx bam frames' is too much  +	// important / too much closer. The original game does not have +	// this problem since their playSfx() function returns immediately +	// if a sound is already begin played. +	if (_lastSoundIndex == 0 || _index - _lastSoundIndex >= SFX_SKIP) { +		_vm->sound()->playSfx(_vm->logic()->currentRoomSfx()); +		_lastSoundIndex = _index; +	} +} + +  void BamScene::prepareAnimation() {  	_obj1 = _vm->graphics()->bob(BOB_OBJ1);  	_obj1->clear(); @@ -1165,6 +1178,7 @@ void BamScene::prepareAnimation() {  	_objfx->active = true;  	_index = 0; +	_lastSoundIndex = 0;  } @@ -1196,7 +1210,7 @@ void BamScene::updateCarAnimation() {  		}  		if (bdb->sfx == 2) { -			_vm->sound()->playSfx(_vm->logic()->currentRoomSfx()); +			playSfx();  		}  	}  } @@ -1238,15 +1252,15 @@ void BamScene::updateFightAnimation() {  			_screenShaked = true;  			break;  		case 2: // play background sfx -			_vm->sound()->playSfx(_vm->logic()->currentRoomSfx()); +			playSfx();  			break;  		case 3: // play background sfx and shake screen -			_vm->sound()->playSfx(_vm->logic()->currentRoomSfx()); +			playSfx();  			OSystem::instance()->set_shake_pos(3);  			_screenShaked = true;  			break;  		case 99: // end of BAM data -			_index = 0; +			_lastSoundIndex = _index = 0;  			const BamDataBlock *data[] = {  				_fight1Data,   				_fight2Data, diff --git a/queen/graphics.h b/queen/graphics.h index bb1bf5716b..99e4099b21 100644 --- a/queen/graphics.h +++ b/queen/graphics.h @@ -187,6 +187,7 @@ public:  	BamScene(QueenEngine *vm); +	void playSfx();  	void prepareAnimation();  	void updateCarAnimation();  	void updateFightAnimation(); @@ -203,6 +204,10 @@ public:  		F_REQ_STOP = 2  	}; +	enum { +		SFX_SKIP = 8 +	}; +  	uint16 _flag, _index;  private: @@ -224,6 +229,7 @@ private:  	BobSlot *_objfx;  	bool _screenShaked;  	const BamDataBlock *_fightData; +	uint16 _lastSoundIndex;  	QueenEngine *_vm; | 
