diff options
| -rw-r--r-- | engines/sherlock/scene.cpp | 1 | ||||
| -rw-r--r-- | engines/sherlock/talk.cpp | 6 | ||||
| -rw-r--r-- | engines/sherlock/talk.h | 2 | ||||
| -rw-r--r-- | engines/sherlock/tattoo/tattoo_scene.cpp | 3 | ||||
| -rw-r--r-- | engines/sherlock/tattoo/tattoo_talk.cpp | 6 | ||||
| -rw-r--r-- | engines/sherlock/tattoo/tattoo_talk.h | 5 | ||||
| -rw-r--r-- | engines/sherlock/tattoo/tattoo_user_interface.cpp | 3 | 
7 files changed, 18 insertions, 8 deletions
| diff --git a/engines/sherlock/scene.cpp b/engines/sherlock/scene.cpp index b2fe0a2a45..4e40032df9 100644 --- a/engines/sherlock/scene.cpp +++ b/engines/sherlock/scene.cpp @@ -278,6 +278,7 @@ void Scene::freeScene() {  	_vm->_ui->clearWindow();  	_vm->_talk->freeTalkVars(); +	_vm->_talk->clearSequences();  	_vm->_inventory->freeInv();  	_vm->_music->freeSong();  	_vm->_sound->freeLoadedSounds(); diff --git a/engines/sherlock/talk.cpp b/engines/sherlock/talk.cpp index a81041a189..b5f0249a35 100644 --- a/engines/sherlock/talk.cpp +++ b/engines/sherlock/talk.cpp @@ -195,8 +195,12 @@ void Talk::talkTo(const Common::String &filename) {  		}  	} -	while (!isSequencesEmpty()) +	if (IS_ROSE_TATTOO) {  		pullSequence(); +	} else { +		while (!isSequencesEmpty()) +			pullSequence(); +	}  	if (IS_SERRATED_SCALPEL) {  		// Restore any pressed button diff --git a/engines/sherlock/talk.h b/engines/sherlock/talk.h index d0c26b529f..adb7aec5fc 100644 --- a/engines/sherlock/talk.h +++ b/engines/sherlock/talk.h @@ -323,7 +323,7 @@ public:  	/**  	 * Clears the stack of pending object sequences associated with speakers in the scene  	 */ -	virtual void clearSequences() {} +	virtual void clearSequences() = 0;  	/**  	 * Pops an entry off of the script stack diff --git a/engines/sherlock/tattoo/tattoo_scene.cpp b/engines/sherlock/tattoo/tattoo_scene.cpp index e94e10caf0..03c80d7f96 100644 --- a/engines/sherlock/tattoo/tattoo_scene.cpp +++ b/engines/sherlock/tattoo/tattoo_scene.cpp @@ -301,9 +301,6 @@ void TattooScene::freeScene() {  	delete ui._mask;  	delete ui._mask1;  	ui._mask = ui._mask1 = nullptr; - -	// Ensure that there wasn't anything left on the talk stack, since their _obj pointers will no longer be valid -	assert(talk.isSequencesEmpty());  }  void TattooScene::doBgAnimCheckCursor() { diff --git a/engines/sherlock/tattoo/tattoo_talk.cpp b/engines/sherlock/tattoo/tattoo_talk.cpp index 455d41bd48..c7a970984c 100644 --- a/engines/sherlock/tattoo/tattoo_talk.cpp +++ b/engines/sherlock/tattoo/tattoo_talk.cpp @@ -983,6 +983,12 @@ bool TattooTalk::isSequencesEmpty() const {  	return true;  } +void TattooTalk::clearSequences() { +	for (int idx = 0; idx < TALK_SEQUENCE_STACK_SIZE; ++idx) { +		_sequenceStack[idx]._obj = nullptr; +	} +} +  } // End of namespace Tattoo  } // End of namespace Sherlock diff --git a/engines/sherlock/tattoo/tattoo_talk.h b/engines/sherlock/tattoo/tattoo_talk.h index 3976f15e32..d2ddda08a8 100644 --- a/engines/sherlock/tattoo/tattoo_talk.h +++ b/engines/sherlock/tattoo/tattoo_talk.h @@ -119,6 +119,11 @@ public:  	 * Returns true if the script stack is empty  	 */  	virtual bool isSequencesEmpty() const; + +	/** +	 * Clears the stack of pending object sequences associated with speakers in the scene +	 */ +	virtual void clearSequences();  };  } // End of namespace Tattoo diff --git a/engines/sherlock/tattoo/tattoo_user_interface.cpp b/engines/sherlock/tattoo/tattoo_user_interface.cpp index 9a3eb4e4d1..6ede31db81 100644 --- a/engines/sherlock/tattoo/tattoo_user_interface.cpp +++ b/engines/sherlock/tattoo/tattoo_user_interface.cpp @@ -378,9 +378,6 @@ void TattooUserInterface::doStandardControl() {  	if (vm._runningProlog)  		return; -	// There shouldn't be anything left on the talk sequence stack since we're back in control -	assert(talk.isSequencesEmpty()); -  	// When the end credits are active, any press will open the ScummVM global main menu  	if (_creditsWidget.active()) {  		if (_keyState.keycode || events._released || events._rightReleased) { | 
