diff options
| -rw-r--r-- | gfx.cpp | 3 | ||||
| -rw-r--r-- | script.cpp | 37 | ||||
| -rw-r--r-- | script_v1.cpp | 10 | 
3 files changed, 24 insertions, 26 deletions
@@ -2084,7 +2084,8 @@ void Scumm::setCursorHotspot2(int x,int y) {  byte Scumm::isMaskActiveAt(int l, int t, int r, int b, byte *mem) {  	int w,h,i; - +	if(_features & GF_SMALL_HEADER) +		return 0;  	l>>=3;  	if (l<0) l = 0;  	if (t<0) t = 0; diff --git a/script.cpp b/script.cpp index 9a5f843cdf..d94d985bab 100644 --- a/script.cpp +++ b/script.cpp @@ -440,17 +440,9 @@ void Scumm::stopObjectCode() {  	if (ss->where!=WIO_GLOBAL && ss->where!=WIO_LOCAL) {  		if (ss->cutsceneOverride)  			error("Object %d ending with active cutscene/override", ss->number); -		 -		/* I wonder if the removal of this breaks anything. -		 * put ss->number and ss->status at another place if using this - 	   * stopObjectScript(ss->number); */  	} else { -		if (ss->cutsceneOverride) -			// FIXME: Loom workaround, fix properly :) - khalek -			if ((_gameId == GID_LOOM256) && (ss->number==44)) -				this->exitCutscene(); -			else -				error("Script %d ending with active cutscene/override", ss->number); +		if (ss->cutsceneOverride)  +			error("Script %d ending with active cutscene/override (%d)", ss->number, ss->cutsceneOverride);  	}  	ss->number = 0;  	ss->status = 0; @@ -759,10 +751,10 @@ void Scumm::endCutscene() {  	uint32 *csptr;  	int16 args[16]; -	memset(args, 0, sizeof(args)); -	 -	ss->cutsceneOverride--; +	memset(args, 0, sizeof(args));	 +	ss->cutsceneOverride--;	 +	printf("Ending cs(%d) from %d\n", ss->cutsceneOverride, _currentScript);  	args[0] = vm.cutSceneData[vm.cutSceneStackPointer];  	_vars[VAR_OVERRIDE] = 0; @@ -781,7 +773,7 @@ void Scumm::endCutscene() {  void Scumm::cutscene(int16 *args) {  	int scr = _currentScript;  	vm.slot[scr].cutsceneOverride++; -	 +	printf("Starting cs(%d) from %d\n", vm.slot[scr].cutsceneOverride, _currentScript);  	if (++vm.cutSceneStackPointer > sizeof(vm.cutSceneData)/sizeof(vm.cutSceneData[0]))  		error("Cutscene stack overflow"); @@ -898,9 +890,10 @@ void Scumm::beginOverride() {  	idx = vm.cutSceneStackPointer;  	ptr = &vm.cutScenePtr[idx]; -	if (!*ptr) { +/*	if (!*ptr) {		// ENDER - FIXME - We don't need this?  		vm.slot[_currentScript].cutsceneOverride++; -	} +	}  +*/  	*ptr = _scriptPointer - _scriptOrgPointer;  	vm.cutSceneScript[idx] = _currentScript; @@ -915,9 +908,10 @@ void Scumm::endOverride() {  	idx = vm.cutSceneStackPointer;  	ptr = &vm.cutScenePtr[idx]; -	if (*ptr) { -		vm.slot[_currentScript].cutsceneOverride--; -	} +/*	if (!*ptr) {		// ENDER - FIXME - We don't need this? +		// vm.slot[_currentScript].cutsceneOverride--; +		//printf("ending override: %d on script %d\n", vm.slot[_currentScript].cutsceneOverride, _currentScript); +	} */  	*ptr = 0;  	vm.cutSceneScript[idx] = 0;  	_vars[VAR_OVERRIDE] = 0; @@ -1026,7 +1020,10 @@ void Scumm::exitCutscene() {  		ss->offs = offs;  		ss->status = 2;  		ss->freezeCount = 0; -		ss->cutsceneOverride--; + +		if (ss->cutsceneOverride > 0) +			ss->cutsceneOverride--;		 +  		_vars[VAR_OVERRIDE] = 1;  		vm.cutScenePtr[vm.cutSceneStackPointer] = 0;  	} diff --git a/script_v1.cpp b/script_v1.cpp index 559876628a..7f758ee62a 100644 --- a/script_v1.cpp +++ b/script_v1.cpp @@ -874,9 +874,8 @@ void Scumm::o5_chainScript() {  	cur = _currentScript; -	if (vm.slot[cur].cutsceneOverride != 0) { -		error("Script %d chaining with active cutscene/override"); -	} +	if (vm.slot[cur].cutsceneOverride != 0) +		error("Script %d chaining with active cutscene/override");	  	vm.slot[cur].number = 0;  	vm.slot[cur].status = 0; @@ -2105,8 +2104,9 @@ void Scumm::o5_stopScript() {  	int script;  	script = getVarOrDirectByte(0x80); -	if (script==0) -		stopObjectCode(); +	if (!script) +		// stopObjectCode(); // ENDER - wrong? +		stopScriptNr(_currentScript);  	else  		stopScriptNr(script);  }  | 
