diff options
| author | Travis Howell | 2010-10-25 08:26:21 +0000 | 
|---|---|---|
| committer | Travis Howell | 2010-10-25 08:26:21 +0000 | 
| commit | f158688c33a07bbb9eb6351a6b03d27bcebe6eb7 (patch) | |
| tree | ca5e700540edd55765b531d2b2634f76a692e631 | |
| parent | 4f0cc6a435d725e62d38a4c7bdbd597f7f142972 (diff) | |
| download | scummvm-rg350-f158688c33a07bbb9eb6351a6b03d27bcebe6eb7.tar.gz scummvm-rg350-f158688c33a07bbb9eb6351a6b03d27bcebe6eb7.tar.bz2 scummvm-rg350-f158688c33a07bbb9eb6351a6b03d27bcebe6eb7.zip  | |
SCUMM: Add patch #3089936 - MMC64: Parcel/Tombstone/Verb Fix.
svn-id: r53807
| -rw-r--r-- | engines/scumm/script_v0.cpp | 2 | ||||
| -rw-r--r-- | engines/scumm/verbs.cpp | 29 | 
2 files changed, 15 insertions, 16 deletions
diff --git a/engines/scumm/script_v0.cpp b/engines/scumm/script_v0.cpp index c60819ed5b..d3f256c951 100644 --- a/engines/scumm/script_v0.cpp +++ b/engines/scumm/script_v0.cpp @@ -829,6 +829,8 @@ void ScummEngine_v0::o_setActorBitVar() {  	// This flag causes the actor to stop moving (used by script #158, Green Tentacle 'Oomph!')  	if (a->_miscflags & 0x40)  		a->stopActorMoving(); +	if (a->_miscflags & 0x80) +		a->setActorCostume(0);  	debug(0, "o_setActorBitVar(%d, %d, %d)", act, mask, mod);  } diff --git a/engines/scumm/verbs.cpp b/engines/scumm/verbs.cpp index 7d922b8f65..c443f98bc6 100644 --- a/engines/scumm/verbs.cpp +++ b/engines/scumm/verbs.cpp @@ -167,11 +167,6 @@ void ScummEngine_v0::switchActor(int slot) {  	if (_currentMode == 0 || _currentMode == 1 || _currentMode == 2)  		return; -	// verbs disabled for the current actor -	ActorC64 *a = (ActorC64 *)derefActor(VAR(VAR_EGO), "switchActor"); -	if (a->_miscflags & 0x40) -		return; -  	VAR(VAR_EGO) = VAR(97 + slot);  	resetVerbs();  	actorFollowCamera(VAR(VAR_EGO)); @@ -726,7 +721,7 @@ void ScummEngine_v2::checkExecVerbs() {  }  void ScummEngine_v0::runObject(int obj, int entry) { -	int prev = _v0ObjectInInventory; +	bool prev = _v0ObjectInInventory;  	if (getVerbEntrypoint(obj, entry) == 0) {  		// If nothing was found, attempt to find the 'WHAT-IS' verb script @@ -977,6 +972,7 @@ bool ScummEngine_v0::verbExec() {  	// We acted on an inventory item  	if (_activeInventory && verbExecutes(_activeInventory, true) && _activeVerb != 3) {  		_v0ObjectInInventory = true; +		_activeObject = _activeInventory;  		runObject(_activeInventory, _activeVerb);  		_verbExecuting = false; @@ -1035,7 +1031,7 @@ bool ScummEngine_v0::verbExec() {  }  void ScummEngine_v0::checkExecVerbs() { -	Actor *a = derefActor(VAR(VAR_EGO), "checkExecVerbs"); +	ActorC64 *a = (ActorC64 *)derefActor(VAR(VAR_EGO), "checkExecVerbs");  	VirtScreen *zone = findVirtScreen(_mouse.y);  	// Is a verb currently executing @@ -1150,27 +1146,28 @@ void ScummEngine_v0::checkExecVerbs() {  				obj = 0;  				objIdx = 0;  			} +			 +			if (a->_miscflags & 0x80) { +				if (_activeVerb != 7 && over != 7) { +					_activeVerb = 0; +					over = 0; +				} +			}  			// Handle New Kid verb options  			if (_activeVerb == 7 || over == 7) {  				// Disable New-Kid (in the secret lab)  				if (_currentMode == 2 || _currentMode == 0)  					return; -				 -				if (!(((ActorC64 *)a)->_miscflags & 0x80)) { -					if (_activeVerb != 7) { -						_activeVerb = over; -						over = 0; -					} -				} -				if (over) { +				if (_activeVerb == 7 && over) {  					_activeVerb = 13;  					switchActor(_verbs[over].verbid - 1);  					return;  				}  				setNewKidVerbs(); +				_activeVerb = 7;  				return;  			} @@ -1186,7 +1183,7 @@ void ScummEngine_v0::checkExecVerbs() {  				if (zone->number == kMainVirtScreen) {  					// Ignore verbs? -					if (((ActorC64 *)a)->_miscflags & 0x40) { +					if (a->_miscflags & 0x40) {  						resetSentence(false);  						return;  					}  | 
