diff options
| -rw-r--r-- | scumm/intern.h | 1 | ||||
| -rw-r--r-- | scumm/script_v7he.cpp | 3 | ||||
| -rw-r--r-- | scumm/script_v80he.cpp | 46 | ||||
| -rw-r--r-- | scumm/script_v90he.cpp | 2 | 
4 files changed, 46 insertions, 6 deletions
diff --git a/scumm/intern.h b/scumm/intern.h index e2253e3af7..81c3c3f885 100644 --- a/scumm/intern.h +++ b/scumm/intern.h @@ -788,6 +788,7 @@ protected:  	/* HE version 80 script opcodes */ +	void o80_unknown45();  	void o80_unknown49();  	void o80_unknown4D();  	void o80_cursorCommand(); diff --git a/scumm/script_v7he.cpp b/scumm/script_v7he.cpp index 53a9050c8b..3f6a993ae4 100644 --- a/scumm/script_v7he.cpp +++ b/scumm/script_v7he.cpp @@ -506,6 +506,9 @@ void ScummEngine_v7he::o7_startSound() {  	case 23:  		debug(1,"o7_startSound: case 29 (%d, %d, %d)", pop(), pop(), pop());  		break; +	case 56: +		_heSndLoop |= 2; +		break;  	case 164:  		_heSndLoop |= 2;  		break; diff --git a/scumm/script_v80he.cpp b/scumm/script_v80he.cpp index 98d2cb8b65..99de3ed62f 100644 --- a/scumm/script_v80he.cpp +++ b/scumm/script_v80he.cpp @@ -131,7 +131,7 @@ void ScummEngine_v80he::setupOpcodes() {  		OPCODE(o6_writeWordVar),  		/* 44 */  		OPCODE(o6_invalid), -		OPCODE(o6_invalid), +		OPCODE(o80_unknown45),  		OPCODE(o6_invalid),  		OPCODE(o72_wordArrayWrite),  		/* 48 */ @@ -378,12 +378,48 @@ const char *ScummEngine_v80he::getOpcodeDesc(byte i) {  	return _opcodesV80he[i].desc;  } +void ScummEngine_v80he::o80_unknown45() { +	// Sound related +	byte subOp = fetchScriptByte(); + +	switch (subOp) { +	case 27: +		pop(); +		break; +	case 217: +		break; +	case 232: +		_heSndSoundId = pop(); +		break; +	case 255: +		//Case doesn't match disasm. +		_sound->addSoundToQueue(_heSndSoundId); +		break; +	default: +		warning("o80_unknown45: default type %d", subOp); +	} +	debug(1,"o80_unknown45 stub (%d)",subOp); +} +  void ScummEngine_v80he::o80_unknown49() { -	int a = pop(); -	int b = pop(); +	// Sound related +	int result = 0; +	int subOp = pop(); +	int snd = pop(); + +	switch (subOp) { +	case 0: +		result = !_sound->isSoundRunning(snd); +		break; +	case 1: +		result = _sound->isSoundRunning(snd);  +		break; +	default: +		warning("o80_unknown49: default type %d", subOp); +	} -	push (0); -	debug(1,"o80_unknown49 stub (%d, %d)", b, a); +	push (result); +	debug(1,"o80_unknown49 stub (%d, %d)", subOp, snd);  }  void ScummEngine_v80he::o80_unknown4D() { diff --git a/scumm/script_v90he.cpp b/scumm/script_v90he.cpp index 6f67d2ea29..f2f623c432 100644 --- a/scumm/script_v90he.cpp +++ b/scumm/script_v90he.cpp @@ -131,7 +131,7 @@ void ScummEngine_v90he::setupOpcodes() {  		OPCODE(o6_writeWordVar),  		/* 44 */  		OPCODE(o6_invalid), -		OPCODE(o6_invalid), +		OPCODE(o80_unknown45),  		OPCODE(o6_invalid),  		OPCODE(o72_wordArrayWrite),  		/* 48 */  | 
