[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