aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/parallaction/disk.cpp34
-rw-r--r--engines/parallaction/disk.h1
-rw-r--r--engines/parallaction/location.cpp35
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'