aboutsummaryrefslogtreecommitdiff
path: root/engines/parallaction
diff options
context:
space:
mode:
authorNicola Mettifogo2007-04-04 20:59:31 +0000
committerNicola Mettifogo2007-04-04 20:59:31 +0000
commit972b0d036a9dd90d39091b42cf10e955d7637b8a (patch)
tree670bcc0c4184ff0532589390d04e3626922a8d75 /engines/parallaction
parent077b924899bb992957131eaf14409e306e08fab9 (diff)
downloadscummvm-rg350-972b0d036a9dd90d39091b42cf10e955d7637b8a.tar.gz
scummvm-rg350-972b0d036a9dd90d39091b42cf10e955d7637b8a.tar.bz2
scummvm-rg350-972b0d036a9dd90d39091b42cf10e955d7637b8a.zip
Characters now only store the set of frames they actually need. Basically, mini characters and normal characters are now completely separated.
svn-id: r26381
Diffstat (limited to 'engines/parallaction')
-rw-r--r--engines/parallaction/parallaction.cpp60
-rw-r--r--engines/parallaction/parallaction.h5
2 files changed, 19 insertions, 46 deletions
diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp
index b6e917367c..c8f2447039 100644
--- a/engines/parallaction/parallaction.cpp
+++ b/engines/parallaction/parallaction.cpp
@@ -701,17 +701,14 @@ void Parallaction::changeCursor(int32 index) {
void Parallaction::freeCharacter() {
- if (_vm->_char._normalFrames)
- delete _vm->_char._normalFrames;
-
if (!IS_DUMMY_CHARACTER(_vm->_characterName)) {
- if (_vm->_char._miniFrames)
- delete _vm->_char._miniFrames;
-
if (_objectsNames)
delete _objectsNames;
_objectsNames = NULL;
+ if (_vm->_char._ani._cnv)
+ delete _vm->_char._ani._cnv;
+
if (_vm->_char._talk)
delete _vm->_char._talk;
@@ -769,28 +766,22 @@ void Parallaction::pickMusic(const char *location) {
}
}
-// FIXME: currently, changeCharacter does reload every chunk of
-// information about the new character every time it is loaded.
-// So, it is useless to load both mini and normal frames each
-// since only one of them will actually be used before the
-// following call to changeCharacter.
-//
-void Parallaction::changeCharacter(const char *name) {
- bool miniCharacter = false;
+void Parallaction::changeCharacter(const char *name) {
+ char baseName[20];
if (IS_MINI_CHARACTER(name)) {
- name+=4;
- miniCharacter = true;
+ strcpy(baseName, name+4);
+ } else {
+ strcpy(baseName, name);
}
- char v32[20];
- strcpy(v32, name);
-
+ char fullName[20];
+ strcpy(fullName, name);
if (_engineFlags & kEngineTransformedDonna)
- strcat(v32, "tras");
+ strcat(fullName, "tras");
- if (scumm_stricmp(v32, _characterName1)) {
+ if (scumm_stricmp(fullName, _characterName1)) {
// freeCharacter takes responsibility for checking
// character for sanity before memory is freed
@@ -798,37 +789,24 @@ void Parallaction::changeCharacter(const char *name) {
_disk->selectArchive((_vm->getPlatform() == Common::kPlatformPC) ? "disk1" : "disk0");
- char path[PATH_LEN];
- strcpy(path, v32);
- _vm->_char._normalFrames = _disk->loadFrames(path);
-
-
if (!IS_DUMMY_CHARACTER(name)) {
- _vm->_char._head = _disk->loadHead(path);
- _vm->_char._talk = _disk->loadTalk(path);
- _vm->_char._objs = _disk->loadObjects(name);
-
- sprintf(path, "mini%s", v32);
- _vm->_char._miniFrames = _disk->loadFrames(path);
+ _vm->_char._head = _disk->loadHead(baseName);
+ _vm->_char._talk = _disk->loadTalk(baseName);
+ _vm->_char._objs = _disk->loadObjects(baseName);
+ _objectsNames = _disk->loadTable(baseName);
+ refreshInventory(baseName);
- _objectsNames = _disk->loadTable(name);
-
- refreshInventory(name);
+ _vm->_char._ani._cnv = _disk->loadFrames(fullName);
if (scumm_stricmp(name, "night") && scumm_stricmp(name, "intsushi"))
selectCharacterMusic(name);
}
}
- if (miniCharacter)
- _vm->_char._ani._cnv = _vm->_char._miniFrames;
- else
- _vm->_char._ani._cnv = _vm->_char._normalFrames;
-
if (!(getFeatures() & GF_DEMO))
parseLocation("common");
- strcpy(_characterName1, v32);
+ strcpy(_characterName1, fullName);
return;
}
diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h
index 176ab9cccb..f5c006ece5 100644
--- a/engines/parallaction/parallaction.h
+++ b/engines/parallaction/parallaction.h
@@ -220,8 +220,6 @@ struct Character {
Animation _ani;
StaticCnv *_head;
Cnv *_talk;
- Cnv *_normalFrames;
- Cnv *_miniFrames;
Cnv *_objs;
Character() {
@@ -249,9 +247,6 @@ struct Character {
_ani._type = kZoneYou;
_ani._label._cnv._data0 = NULL;
_ani._label._text = strdup("yourself");
-
- _normalFrames = NULL;
- _miniFrames = NULL;
}
};