[Scummvm-cvs-logs] SF.net SVN: scummvm: [27108] scummvm/trunk/engines/saga

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Tue Jun 5 17:04:26 CEST 2007


Revision: 27108
          http://scummvm.svn.sourceforge.net/scummvm/?rev=27108&view=rev
Author:   thebluegr
Date:     2007-06-05 08:04:25 -0700 (Tue, 05 Jun 2007)

Log Message:
-----------
Check if a zone type is NULL for both ITE and IHNM, as it's done in the original. This fixes the crash in IHNM when entering the second floor of the zeppelin and the crash in ITE when interacting with the bowl in the tunnel, outside the prison. Removed the two relevant hacks

Modified Paths:
--------------
    scummvm/trunk/engines/saga/script.cpp
    scummvm/trunk/engines/saga/sfuncs.cpp

Modified: scummvm/trunk/engines/saga/script.cpp
===================================================================
--- scummvm/trunk/engines/saga/script.cpp	2007-06-05 13:19:47 UTC (rev 27107)
+++ scummvm/trunk/engines/saga/script.cpp	2007-06-05 15:04:25 UTC (rev 27108)
@@ -464,7 +464,9 @@
 			}
 		}
 
-		if (objectType == kGameObjectHitZone) {
+		if (objectType == NULL)
+			return;
+		else if (objectType == kGameObjectHitZone) {
 			scriptModuleNumber = _vm->_scene->getScriptModuleNumber();
 			hitZone = _vm->_scene->_objectMap->getHitZone(objectIdToIndex(_pendingObject[0]));
 			if ((hitZone->getFlags() & kHitZoneExit) == 0) {
@@ -485,21 +487,18 @@
 
 	if (scriptEntrypointNumber > 0) {
 
-		// WORKAROUND: Fixes bug #1690045 "ITE: Item description missing / ScummVM crash"
-		if (!(_vm->_scene->currentSceneNumber() == 278 && (_pendingObject[0] == 16419 || _pendingObject[1] == 16419) && _vm->getGameType() == GType_ITE)) {
-			event.type = kEvTOneshot;
-			event.code = kScriptEvent;
-			event.op = kEventExecNonBlocking;
-			event.time = 0;
-			event.param = scriptModuleNumber;
-			event.param2 = scriptEntrypointNumber;
-			event.param3 = _pendingVerb;		// Action
-			event.param4 = _pendingObject[0];	// Object
-			event.param5 = _pendingObject[1];	// With Object
-			event.param6 = (objectType == kGameObjectActor) ? _pendingObject[0] : ID_PROTAG;		// Actor
+		event.type = kEvTOneshot;
+		event.code = kScriptEvent;
+		event.op = kEventExecNonBlocking;
+		event.time = 0;
+		event.param = scriptModuleNumber;
+		event.param2 = scriptEntrypointNumber;
+		event.param3 = _pendingVerb;		// Action
+		event.param4 = _pendingObject[0];	// Object
+		event.param5 = _pendingObject[1];	// With Object
+		event.param6 = (objectType == kGameObjectActor) ? _pendingObject[0] : ID_PROTAG;		// Actor
 
-			_vm->_events->queue(&event);
-		}
+		_vm->_events->queue(&event);
 
 	} else {
 		_vm->getExcuseInfo(_pendingVerb, excuseText, excuseSampleResourceId);
@@ -620,7 +619,9 @@
 
 	hitZone = NULL;
 
-	if (objectTypeId(_pendingObject[0]) == kGameObjectHitZone) {
+	if (objectTypeId(_pendingObject[0]) == NULL)
+		return;
+	else if (objectTypeId(_pendingObject[0]) == kGameObjectHitZone) {
 		 hitZone = _vm->_scene->_objectMap->getHitZone(objectIdToIndex(_pendingObject[0]));
 	} else {
 		if ((_pendingVerb == getVerbType(kVerbUse)) && (objectTypeId(_pendingObject[1]) == kGameObjectHitZone)) {

Modified: scummvm/trunk/engines/saga/sfuncs.cpp
===================================================================
--- scummvm/trunk/engines/saga/sfuncs.cpp	2007-06-05 13:19:47 UTC (rev 27107)
+++ scummvm/trunk/engines/saga/sfuncs.cpp	2007-06-05 15:04:25 UTC (rev 27108)
@@ -386,11 +386,13 @@
 			break;
 		case kGameObjectHitZone:
 		case kGameObjectStepZone:
-			if (objectTypeId(objectId) == kGameObjectHitZone) {
+			if (objectTypeId(objectId) == NULL)
+				return;
+			else if (objectTypeId(objectId) == kGameObjectHitZone)
 				hitZone = _vm->_scene->_objectMap->getHitZone(objectIdToIndex(objectId));
-			} else {
+			else
 				hitZone = _vm->_scene->_actionMap->getHitZone(objectIdToIndex(objectId));
-			}
+
 			scriptEntryPointNumber = hitZone->getScriptNumber();
 			moduleNumber = _vm->_scene->getScriptModuleNumber();
 			break;
@@ -729,20 +731,12 @@
 	int16 flag = thread->pop();
 	HitZone *hitZone;
 
-	if (objectTypeId(objectId) == kGameObjectHitZone) {
-		hitZone = _vm->_scene->_objectMap->getHitZone(objectIdToIndex(objectId));
-	} else if (_vm->getGameType() == GType_IHNM && _vm->_scene->currentChapterNumber() == 1 &&
-			   _vm->_scene->currentSceneNumber() == 14) {
-		// HACK: Don't disable the requested hitzone in room 14 in chapter 1 (Gorrister) of IHNM
-		// Apparently, this is used in that room to disable the tear at the very end of the
-		// corridor. This fixes the staircase in scenes 4 and 14
-		// FIXME: Remove this hack
-		warning("HACK: Prevent crash at staircase with Gorrister");
-		// Do nothing
+	if (objectTypeId(objectId) == NULL)
 		return;
-	} else {
+	else if (objectTypeId(objectId) == kGameObjectHitZone)
+		hitZone = _vm->_scene->_objectMap->getHitZone(objectIdToIndex(objectId));
+	else
 		hitZone = _vm->_scene->_actionMap->getHitZone(objectIdToIndex(objectId));
-	}
 
 	if (flag) {
 		hitZone->setFlag(kHitZoneEnabled);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list