diff options
-rw-r--r-- | engines/parallaction/disk.cpp | 34 | ||||
-rw-r--r-- | engines/parallaction/disk.h | 1 | ||||
-rw-r--r-- | engines/parallaction/location.cpp | 35 |
3 files changed, 37 insertions, 33 deletions
diff --git a/engines/parallaction/disk.cpp b/engines/parallaction/disk.cpp index 840b9827c7..9bc9f0f8cf 100644 --- a/engines/parallaction/disk.cpp +++ b/engines/parallaction/disk.cpp @@ -55,5 +55,39 @@ void openTalk(const char *name, Cnv *cnv) { } +void openLocation(const char *name, char* script) { + + char archivefile[PATH_LEN]; + + if (_vm->_characterName[0] == 'm') { + sprintf(archivefile, "%s%s", _vm->_characterName+4, _vm->_languageDir); + } else { + if (_vm->_characterName[0] == 'D') strcpy(archivefile, _vm->_languageDir); + else { + sprintf(archivefile, "%s%s", _vm->_characterName, _vm->_languageDir); + } + } + strcat(archivefile, name); + strcat(archivefile, ".loc"); + + _vm->_archive.close(); + + _vm->_languageDir[2] = '\0'; + _vm->_archive.open(_vm->_languageDir); + _vm->_languageDir[2] = '/'; + + if (!_vm->_archive.openArchivedFile(archivefile)) { + sprintf(archivefile, "%s%s.loc", _vm->_languageDir, name); + if (!_vm->_archive.openArchivedFile(archivefile)) + error("can't find location file '%s'", name); + } + + uint32 count = _vm->_archive.size(); + _vm->_archive.read(script, count); + _vm->_archive.closeArchivedFile(); + _vm->_archive.close(); + +} + } // namespace Parallaction diff --git a/engines/parallaction/disk.h b/engines/parallaction/disk.h index ad19a8468f..f35f9dd6ff 100644 --- a/engines/parallaction/disk.h +++ b/engines/parallaction/disk.h @@ -72,6 +72,7 @@ public: uint32 read(void *dataPtr, uint32 dataSize); }; +void openLocation(const char *name, char* script); void openTalk(const char *name, Cnv *cnv); } // namespace Parallaction diff --git a/engines/parallaction/location.cpp b/engines/parallaction/location.cpp index 32fbd14d64..8a88ddd1b5 100644 --- a/engines/parallaction/location.cpp +++ b/engines/parallaction/location.cpp @@ -48,40 +48,10 @@ void Parallaction::parseLocation(const char *filename) { _vm->_graphics->_proportionalFont = false; _vm->_graphics->setFont("topazcnv"); - char archivefile[PATH_LEN]; - - if (_characterName[0] == 'm') { - sprintf(archivefile, "%s%s", _characterName+4, _languageDir); - } else { - if (_characterName[0] == 'D') strcpy(archivefile, _languageDir); - else { - sprintf(archivefile, "%s%s", _characterName, _languageDir); - } - } - strcat(archivefile, filename); - strcat(archivefile, ".loc"); - - if (strcmp(_disk, "null")) _archive.close(); - - _languageDir[2] = '\0'; - _archive.open(_languageDir); - _languageDir[2] = '/'; - - if (!_archive.openArchivedFile(archivefile)) { - sprintf(archivefile, "%s%s.loc", _languageDir, filename); - if (!_archive.openArchivedFile(archivefile)) - errorFileNotFound(filename); - } - - uint32 count = _archive.size(); location_src = (char*)memAlloc(0x4000); - + openLocation(filename, location_src); _locationScript = new Script(location_src); - _archive.read(location_src, count); - _archive.closeArchivedFile(); - _archive.close(); - fillBuffers(*_locationScript, true); while (scumm_stricmp(_tokens[0], "ENDLOCATION")) { // printf("token[0] = %s", _tokens[0]); @@ -133,8 +103,7 @@ void Parallaction::parseLocation(const char *filename) { } if (!scumm_stricmp(_tokens[0], "DISK")) { strcpy(_disk, _tokens[1]); - strcpy(archivefile, _disk); - _archive.open(archivefile); + _archive.open(_disk); } if (!scumm_stricmp(_tokens[0], "LOCALFLAGS")) { _si = 1; // _localFlagNames[0] = 'visited' |