diff options
| -rw-r--r-- | engines/gob/inter.h | 2 | ||||
| -rw-r--r-- | engines/gob/inter_v2.cpp | 31 | ||||
| -rw-r--r-- | engines/gob/inter_v3.cpp | 8 | 
3 files changed, 32 insertions, 9 deletions
| diff --git a/engines/gob/inter.h b/engines/gob/inter.h index be7ed9fe21..d0f07d96da 100644 --- a/engines/gob/inter.h +++ b/engines/gob/inter.h @@ -386,6 +386,8 @@ protected:  	bool o2_writeData(OpFuncParams ¶ms);  	void o2_loadInfogramesIns(OpGobParams ¶ms);  	void o2_playInfogrames(OpGobParams ¶ms); +	void o2_startInfogrames(OpGobParams ¶ms); +	void o2_stopInfogrames(OpGobParams ¶ms);  	void o2_handleGoblins(OpGobParams ¶ms);  }; diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp index 58986d894c..a297d88891 100644 --- a/engines/gob/inter_v2.cpp +++ b/engines/gob/inter_v2.cpp @@ -50,8 +50,8 @@ namespace Gob {  const int Inter_v2::_goblinFuncLookUp[][2] = {  	{0, 0}, -	{2, 1}, -	{3, 2}, +	{1, 1}, +	{2, 2},  	{4, 3},  	{5, 4},  	{6, 5}, @@ -556,8 +556,8 @@ void Inter_v2::setupOpcodes() {  	static const OpcodeGoblinEntryV2 opcodesGoblin[71] = {  		/* 00 */  		OPCODE(o2_loadInfogramesIns), -		{NULL, ""}, -		{NULL, ""}, +		OPCODE(o2_startInfogrames), +		OPCODE(o2_stopInfogrames),  		{NULL, ""},  		/* 04 */  		{NULL, ""}, @@ -1937,6 +1937,7 @@ void Inter_v2::o2_loadInfogramesIns(OpGobParams ¶ms) {  	if (_vm->_game->_infogrames) {  		_vm->_mixer->stopHandle(_vm->_game->_infHandle); +		delete _vm->_game->_infogrames;  		_vm->_game->_infogrames = 0;  	} @@ -1976,6 +1977,7 @@ void Inter_v2::o2_playInfogrames(OpGobParams ¶ms) {  	if (_vm->_game->_infIns) {  		_vm->_mixer->stopHandle(_vm->_game->_infHandle); +		delete _vm->_game->_infogrames;  		_vm->_game->_infogrames =  			new Audio::Infogrames(*_vm->_game->_infIns, true,  					_vm->_mixer->getOutputRate(), @@ -1987,10 +1989,29 @@ void Inter_v2::o2_playInfogrames(OpGobParams ¶ms) {  			_vm->_game->_infogrames = 0;  		} else  			_vm->_mixer->playInputStream(Audio::Mixer::kMusicSoundType, -					&_vm->_game->_infHandle, _vm->_game->_infogrames); +					&_vm->_game->_infHandle, _vm->_game->_infogrames, +					-1, 255, 0, false);  	}  } +void Inter_v2::o2_startInfogrames(OpGobParams ¶ms) { +	load16(); + +	if (_vm->_game->_infogrames && +			!_vm->_mixer->isSoundHandleActive(_vm->_game->_infHandle)) { +		_vm->_game->_infogrames->restart(); +		_vm->_mixer->playInputStream(Audio::Mixer::kMusicSoundType, +				&_vm->_game->_infHandle, _vm->_game->_infogrames, +				-1, 255, 0, false); +	} +} + +void Inter_v2::o2_stopInfogrames(OpGobParams ¶ms) { +	load16(); + +	_vm->_mixer->stopHandle(_vm->_game->_infHandle); +} +  void Inter_v2::o2_handleGoblins(OpGobParams ¶ms) {  	_vm->_goblin->_gob1NoTurn = (bool) VAR(load16());  	_vm->_goblin->_gob2NoTurn = (bool) VAR(load16()); diff --git a/engines/gob/inter_v3.cpp b/engines/gob/inter_v3.cpp index 2d1dd46708..e78f5df4dd 100644 --- a/engines/gob/inter_v3.cpp +++ b/engines/gob/inter_v3.cpp @@ -36,8 +36,8 @@ namespace Gob {  const int Inter_v3::_goblinFuncLookUp[][2] = {  	{0, 0}, -	{2, 1}, -	{3, 2}, +	{1, 1}, +	{2, 2},  	{4, 3},  	{5, 4},  	{6, 5}, @@ -542,8 +542,8 @@ void Inter_v3::setupOpcodes() {  	static const OpcodeGoblinEntryV3 opcodesGoblin[71] = {  		/* 00 */  		OPCODE(o2_loadInfogramesIns), -		{NULL, ""}, -		{NULL, ""}, +		OPCODE(o2_startInfogrames), +		OPCODE(o2_stopInfogrames),  		{NULL, ""},  		/* 04 */  		{NULL, ""}, | 
