[Scummvm-cvs-logs] CVS: scummvm/saga actor.cpp,1.168,1.169

Eugene Sandulenko sev at users.sourceforge.net
Mon Aug 8 05:14:46 CEST 2005


Update of /cvsroot/scummvm/scummvm/saga
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29714

Modified Files:
	actor.cpp 
Log Message:
Fix (partially) actors and object loading in IHNM.


Index: actor.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/actor.cpp,v
retrieving revision 1.168
retrieving revision 1.169
diff -u -d -r1.168 -r1.169
--- actor.cpp	8 Aug 2005 07:52:18 -0000	1.168
+++ actor.cpp	8 Aug 2005 12:13:38 -0000	1.169
@@ -305,63 +305,71 @@
 	size_t resourceLength;
 	int framesCount;
 	ActorFrameSequence *framesPointer;
-	int lastFrame;
+	int lastFrame = 0;
 	int i, orient;
 	int resourceId;
+	bool gotSomething = false;
 
-	if (actor->frameListResourceId == 0) {
-		warning("Frame List ID = 0 for actor index %d", actor->index);
-		return true;
-	}
-
-	debug(9, "Loading frame resource id %d", actor->frameListResourceId);
-	_vm->_resource->loadResource(_actorContext, actor->frameListResourceId, resourcePointer, resourceLength);
-
-	framesCount = resourceLength / 16;
-	debug(9, "Frame resource contains %d frames", framesCount);
+	if (actor->frameListResourceId) {
+		debug(9, "Loading frame resource id %d", actor->frameListResourceId);
+		_vm->_resource->loadResource(_actorContext, actor->frameListResourceId, resourcePointer, resourceLength);
 
-	framesPointer = (ActorFrameSequence *)malloc(sizeof(ActorFrameSequence) * framesCount);
-	if (framesPointer == NULL) {
-		memoryError("Actor::loadActorResources");
-	}
+		framesCount = resourceLength / 16;
+		debug(9, "Frame resource contains %d frames (res length is %d)", framesCount, resourceLength);
 
-	MemoryReadStreamEndian readS(resourcePointer, resourceLength, _actorContext->isBigEndian);
+		framesPointer = (ActorFrameSequence *)malloc(sizeof(ActorFrameSequence) * framesCount);
+		if (framesPointer == NULL) {
+			memoryError("Actor::loadActorResources");
+		}
 
-	lastFrame = 0;
+		MemoryReadStreamEndian readS(resourcePointer, resourceLength, _actorContext->isBigEndian);
 
-	for (i = 0; i < framesCount; i++) {
-		for (orient = 0; orient < ACTOR_DIRECTIONS_COUNT; orient++) {
-			// Load all four orientations
-			framesPointer[i].directions[orient].frameIndex = readS.readUint16();
-			framesPointer[i].directions[orient].frameCount = readS.readSint16();
-			if (framesPointer[i].directions[orient].frameCount < 0)
-				warning("frameCount < 0", framesPointer[i].directions[orient].frameCount);
-			if (framesPointer[i].directions[orient].frameIndex > lastFrame) {
-				lastFrame = framesPointer[i].directions[orient].frameIndex;
+		for (i = 0; i < framesCount; i++) {
+			for (orient = 0; orient < ACTOR_DIRECTIONS_COUNT; orient++) {
+				// Load all four orientations
+				framesPointer[i].directions[orient].frameIndex = readS.readUint16();
+				framesPointer[i].directions[orient].frameCount = readS.readSint16();
+				if (framesPointer[i].directions[orient].frameCount < 0)
+					warning("frameCount < 0 (%d)", framesPointer[i].directions[orient].frameCount);
+				if (framesPointer[i].directions[orient].frameIndex > lastFrame) {
+					lastFrame = framesPointer[i].directions[orient].frameIndex;
+				}
 			}
 		}
-	}
 
-	free(resourcePointer);
+		free(resourcePointer);
+
+		actor->frames = framesPointer;
+		actor->framesCount = framesCount;
+
+		gotSomething = true;
+	} else {
+		warning("Frame List ID = 0 for actor index %d", actor->index);
+	}
 
-	actor->frames = framesPointer;
-	actor->framesCount = framesCount;
 
 	resourceId = actor->spriteListResourceId;
-	debug(9, "Loading sprite resource id %d", resourceId);
 
-	_vm->_sprite->loadList(resourceId, actor->spriteList);
+	if (resourceId) {
+		debug(9, "Loading sprite resource id %d", resourceId);
 
-	i = actor->spriteList.spriteCount;
-	if ((actor->flags & kExtended)) {  // may be it's ITE specific ?
-		while ((lastFrame >= actor->spriteList.spriteCount)) {
-			resourceId++;
-			debug(9, "Appending to sprite list %d", resourceId);
-			_vm->_sprite->loadList(resourceId, actor->spriteList);
+		_vm->_sprite->loadList(resourceId, actor->spriteList);
+
+		i = actor->spriteList.spriteCount;
+		if (actor->flags & kExtended) {
+			while ((lastFrame >= actor->spriteList.spriteCount)) {
+				resourceId++;
+				debug(9, "Appending to sprite list %d", resourceId);
+				_vm->_sprite->loadList(resourceId, actor->spriteList);
+			}
 		}
+
+		gotSomething = true;
+	} else {
+		warning("Sprite List ID = 0 for actor index %d", actor->index);
 	}
 
-	return true;
+	return gotSomething;
 }
 
 void Actor::freeActorList() {
@@ -415,8 +423,9 @@
 		actor->screenPosition.y = actorS.readUint16LE();
 		actor->screenScale = actorS.readUint16LE();
 		actor->screenDepth = actorS.readUint16LE();
-		actor->frameListResourceId = actorS.readUint32LE();
 		actor->spriteListResourceId = actorS.readUint32LE();
+		actor->frameListResourceId = actorS.readUint32LE();
+		debug(0, "%d: %d, %d", i, actor->spriteListResourceId, actor->frameListResourceId);
 		actor->scriptEntrypointNumber = actorS.readUint32LE();
 		actorS.readByte();
 		actorS.readByte();
@@ -445,14 +454,14 @@
 			}
 		}
 		//actorS.seek(128, SEEK_CUR);
-		walkStepIndex = actorS.readByte();//walkStepIndex
-		if (walkStepIndex) {
-			error("Actor::loadActorList walkStepIndex != 0");
-		}
 		walkStepCount = actorS.readByte();//walkStepCount
 		if (walkStepCount) {
 			error("Actor::loadActorList walkStepCount != 0");
 		}
+		walkStepIndex = actorS.readByte();//walkStepIndex
+		if (walkStepIndex) {
+			error("Actor::loadActorList walkStepIndex != 0");
+		}
 		//no need to check pointers
 		actorS.readUint32LE(); //sprites
 		actorS.readUint32LE(); //frames
@@ -463,8 +472,8 @@
 		actorS.readUint32LE(); //next in scene
 		actorS.read(acv, 6);
 		for (j = 0; j < 6; j++) {
-			if (walk[j]) {
-				error("Actor::loadActorList acv[6] != 0");
+			if (acv[j]) {
+				error("Actor::loadActorList acv[%d] != 0", j);
 			}
 		}
 //		actorS.seek(6, SEEK_CUR); //action vars
@@ -476,10 +485,12 @@
 	for (i = 0; i < _actorsCount; i++) {
 		actor = _actors[i];
 		if (actor->flags & kExtended) {
-			actor->disabled = !loadActorResources(actor);
+			loadActorResources(actor);
+
 			if (actor->disabled) {
 				warning("Disabling actor Id=%d index=%d", actor->id, actor->index);
 			}
+			break;
 		}
 	}
 
@@ -556,11 +567,11 @@
 		object->screenPosition.y = objectS.readUint16LE();
 		object->screenScale = objectS.readUint16LE();
 		object->screenDepth = objectS.readUint16LE();
+		object->spriteListResourceId = objectS.readUint32LE();
 		frameListResourceId = objectS.readUint32LE(); // object->frameListResourceId
 		if (frameListResourceId) {
 			error("Actor::loadObjList frameListResourceId != 0");
 		}
-		object->spriteListResourceId = objectS.readUint32LE();
 		object->scriptEntrypointNumber = objectS.readUint32LE();
 		objectS.readByte();
 		objectS.readByte();
@@ -1539,7 +1550,7 @@
 	}
 
 	if ((frameNumber < 0) || (spriteList->spriteCount <= frameNumber)) {
-		warning("Actor::getSpriteParams frameNumber invalid for object id 0x%X", commonObjectData->id);
+		warning("Actor::getSpriteParams frameNumber invalid for object id 0x%X (%d)", commonObjectData->id, frameNumber);
 		return false;
 	}
 	return true;





More information about the Scummvm-git-logs mailing list