diff options
author | Nicola Mettifogo | 2007-04-04 20:59:31 +0000 |
---|---|---|
committer | Nicola Mettifogo | 2007-04-04 20:59:31 +0000 |
commit | 972b0d036a9dd90d39091b42cf10e955d7637b8a (patch) | |
tree | 670bcc0c4184ff0532589390d04e3626922a8d75 /engines | |
parent | 077b924899bb992957131eaf14409e306e08fab9 (diff) | |
download | scummvm-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')
-rw-r--r-- | engines/parallaction/parallaction.cpp | 60 | ||||
-rw-r--r-- | engines/parallaction/parallaction.h | 5 |
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; } }; |