aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--saga/actor.cpp28
-rw-r--r--saga/actor.h4
-rw-r--r--saga/rscfile.cpp9
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;