diff options
-rw-r--r-- | saga/actor.cpp | 28 | ||||
-rw-r--r-- | saga/actor.h | 4 | ||||
-rw-r--r-- | saga/rscfile.cpp | 9 |
3 files changed, 22 insertions, 19 deletions
diff --git a/saga/actor.cpp b/saga/actor.cpp index c44ac5d970..12be95416a 100644 --- a/saga/actor.cpp +++ b/saga/actor.cpp @@ -284,9 +284,6 @@ Actor::Actor(SagaEngine *vm) : _vm(vm) { } Actor::~Actor() { - int i; - ObjectData *obj; - debug(9, "Actor::~Actor()"); #ifdef ACTOR_DEBUG @@ -299,13 +296,8 @@ Actor::~Actor() { free(_pathCell); _actorsStrings.freeMem(); //release resources - freeList(); - - for (i = 0; i < _objsCount; i++) { - obj = _objs[i]; - delete obj; - } - free(_objs); + freeActorList(); + freeObjList(); } bool Actor::loadActorResources(ActorData *actor) { @@ -361,7 +353,7 @@ bool Actor::loadActorResources(ActorData *actor) { _vm->_sprite->loadList(resourceId, actor->spriteList); i = actor->spriteList.spriteCount; - if ((actor->flags & kExtended)) { + if ((actor->flags & kExtended)) { // may be it's ITE specific ? while ((lastFrame >= actor->spriteList.spriteCount)) { resourceId++; debug(9, "Appending to sprite list %d", resourceId); @@ -372,7 +364,7 @@ bool Actor::loadActorResources(ActorData *actor) { return true; } -void Actor::freeList() { +void Actor::freeActorList() { int i; ActorData *actor; for (i = 0; i < _actorsCount; i++) { @@ -384,17 +376,21 @@ void Actor::freeList() { _actorsCount = 0; } -void Actor::loadList(int actorsEntrance, int actorCount, int actorsResourceID, int protagStatesCount, int protagStatesResourceID) { +void Actor::loadActorList(int protagonistIdx, int actorCount, int actorsResourceID, int protagStatesCount, int protagStatesResourceID) { int i; ActorData *actor; byte* actorListData; size_t actorListLength; - freeList(); + freeActorList(); _vm->_resource->loadResource(_actorContext, actorsResourceID, actorListData, actorListLength); _actorsCount = actorCount; + if ((int)(actorListLength / ACTOR_INHM_SIZE) < _actorsCount) { + error("Actor::loadActorList wrong actorlist length"); + } + MemoryReadStream actorS(actorListData, actorListLength); _actors = (ActorData **)malloc(_actorsCount * sizeof(*_actors)); @@ -446,7 +442,7 @@ void Actor::loadList(int actorsEntrance, int actorCount, int actorsResourceID, i } free(actorListData); - _actors[actorsEntrance]->flags |= kProtagonist | kExtended; + _actors[protagonistIdx]->flags |= kProtagonist | kExtended; for (i = 0; i < _actorsCount; i++) { actor = _actors[i]; @@ -458,7 +454,7 @@ void Actor::loadList(int actorsEntrance, int actorCount, int actorsResourceID, i } } - _centerActor = _protagonist = _actors[actorsEntrance]; + _centerActor = _protagonist = _actors[protagonistIdx]; _protagState = 0; if (protagStatesResourceID) { diff --git a/saga/actor.h b/saga/actor.h index b8c325bf00..901b581a0c 100644 --- a/saga/actor.h +++ b/saga/actor.h @@ -580,8 +580,8 @@ public: void setProtagState(int state); int getProtagState() { return _protagState; } - void freeList(); - void loadList(int actorsEntrance, int actorCount, int actorsResourceID, + void freeActorList(); + void loadActorList(int protagonistIdx, int actorCount, int actorsResourceID, int protagStatesCount, int protagStatesResourceID); void freeObjList(); void loadObjList(int objectCount, int objectsResourceID); diff --git a/saga/rscfile.cpp b/saga/rscfile.cpp index dadcd15b4f..f7d2807984 100644 --- a/saga/rscfile.cpp +++ b/saga/rscfile.cpp @@ -474,7 +474,7 @@ void Resource::loadGlobalResources(int chapter, int actorsEntrance) { free(resourcePointer); - _vm->_actor->loadList(actorsEntrance, _metaResource.actorCount, + _vm->_actor->loadActorList(actorsEntrance, _metaResource.actorCount, _metaResource.actorsResourceID, _metaResource.protagStatesCount, _metaResource.protagStatesResourceID); @@ -524,32 +524,39 @@ void Resource::loadGlobalResources(int chapter, int actorsEntrance) { switch (chapter) { case 1: + _vm->_sndRes->setVoiceBank(1); // chapterRes = "voices1.res" // hackVoiceTableListID = 23 break; case 2: + _vm->_sndRes->setVoiceBank(2); // chapterRes = "voices2.res" // hackVoiceTableListID = 24 break; case 3: + _vm->_sndRes->setVoiceBank(3); // chapterRes = "voices3.res" // hackVoiceTableListID = 25 break; case 4: + _vm->_sndRes->setVoiceBank(4); // chapterRes = "voices4.res" // hackVoiceTableListID = 26 break; case 5: + _vm->_sndRes->setVoiceBank(5); // chapterRes = "voices5.res" // hackVoiceTableListID = 27 break; case 6: + _vm->_sndRes->setVoiceBank(6); // chapterRes = "voices6.res" // hackVoiceTableListID = 28 break; case 7: break; case 8: + _vm->_sndRes->setVoiceBank(0); // chapterRes = "voicess.res" // hackVoiceTableListID = 22 break; |