diff options
Diffstat (limited to 'engines/parallaction/disk.cpp')
-rw-r--r-- | engines/parallaction/disk.cpp | 337 |
1 files changed, 232 insertions, 105 deletions
diff --git a/engines/parallaction/disk.cpp b/engines/parallaction/disk.cpp index a8f652db7d..b44485455f 100644 --- a/engines/parallaction/disk.cpp +++ b/engines/parallaction/disk.cpp @@ -95,6 +95,7 @@ void Disk::selectArchive(const char *name) { } void Disk::setLanguage(uint16 language) { + debugC(1, kDebugDisk, "setLanguage(%i)", language); switch (language) { case 0: @@ -775,31 +776,23 @@ Cnv* AmigaDisk::makeCnv(Common::SeekableReadStream &stream) { #undef NUM_PLANES Script* AmigaDisk::loadLocation(const char *name) { - char archivefile[PATH_LEN]; + debugC(1, kDebugDisk, "AmigaDisk()::loadLocation '%s'", name); + char path[PATH_LEN]; if (IS_MINI_CHARACTER(_vm->_characterName)) { - sprintf(archivefile, "%s%s", _vm->_characterName+4, _languageDir); - } else { - if (IS_DUMMY_CHARACTER(_vm->_characterName)) { - strcpy(archivefile, _languageDir); - } else { - sprintf(archivefile, "%s%s", _vm->_characterName, _languageDir); - } - } - - strcat(archivefile, name); - strcat(archivefile, ".loc.pp"); + sprintf(path, "%s%s%s.loc.pp", _vm->_characterName+4, _languageDir, name); + } else + sprintf(path, "%s%s%s.loc.pp", _vm->_characterName, _languageDir, name); - debugC(1, kDebugDisk, "AmigaDisk::loadLocation(%s): trying '%s'", name, archivefile); - - if (!_locArchive.openArchivedFile(archivefile)) { - sprintf(archivefile, "%s%s.loc.pp", _languageDir, name); - debugC(3, kDebugDisk, "AmigaDisk::loadLocation(%s): trying '%s'", name, archivefile); - - if (!_locArchive.openArchivedFile(archivefile)) + if (!_locArchive.openArchivedFile(path)) { + sprintf(path, "%s%s.loc.pp", _languageDir, name); + if (!_locArchive.openArchivedFile(path)) { errorFileNotFound(name); + } } + debugC(3, kDebugDisk, "location file found: %s", path); + return new Script(new PowerPackerStream(_locArchive), true); } @@ -816,46 +809,6 @@ Script* AmigaDisk::loadScript(const char* name) { return new Script(new DummyArchiveStream(_resArchive), true); } -Cnv* AmigaDisk::loadTalk(const char *name) { - debugC(1, kDebugDisk, "AmigaDisk::loadTalk '%s'", name); - - Common::SeekableReadStream *s; - - char path[PATH_LEN]; - if (_vm->getFeatures() & GF_DEMO) - sprintf(path, "%s.talk", name); - else - sprintf(path, "talk/%s.talk", name); - - s = openArchivedFile(path, false); - if (s == NULL) { - s = openArchivedFile(name, true); - } - - Cnv *cnv = makeCnv(*s); - delete s; - - return cnv; -} - -Cnv* AmigaDisk::loadObjects(const char *name) { - debugC(1, kDebugDisk, "AmigaDisk::loadObjects"); - - char path[PATH_LEN]; - if (_vm->getFeatures() & GF_DEMO) - sprintf(path, "%s.objs", name); - else - sprintf(path, "objs/%s.objs", name); - - Common::SeekableReadStream *s = openArchivedFile(path, true); - - Cnv *cnv = makeCnv(*s); - delete s; - - return cnv; -} - - StaticCnv* AmigaDisk::loadPointer() { debugC(1, kDebugDisk, "AmigaDisk::loadPointer"); @@ -866,32 +819,6 @@ StaticCnv* AmigaDisk::loadPointer() { return makeStaticCnv(stream); } -StaticCnv* AmigaDisk::loadHead(const char* name) { - debugC(1, kDebugDisk, "AmigaDisk::loadHead '%s'", name); - - char path[PATH_LEN]; - sprintf(path, "%s.head", name); - - Common::SeekableReadStream *s = openArchivedFile(path, true); - StaticCnv *cnv = makeStaticCnv(*s); - - delete s; - - return cnv; -} - -Font* AmigaDisk::loadFont(const char* name) { - debugC(1, kDebugDisk, "AmigaDisk::loadFont '%s'", name); - - char path[PATH_LEN]; - sprintf(path, "%sfont", name); - - if (!_resArchive.openArchivedFile(path)) - errorFileNotFound(path); - - return createFont(name, _resArchive); -} - StaticCnv* AmigaDisk::loadStatic(const char* name) { debugC(1, kDebugDisk, "AmigaDisk::loadStatic '%s'", name); @@ -904,6 +831,7 @@ StaticCnv* AmigaDisk::loadStatic(const char* name) { } Common::SeekableReadStream *AmigaDisk::openArchivedFile(const char* name, bool errorOnFileNotFound) { + debugC(3, kDebugDisk, "AmigaDisk::openArchivedFile(%s)", name); if (_resArchive.openArchivedFile(name)) { return new DummyArchiveStream(_resArchive); @@ -927,22 +855,6 @@ Common::SeekableReadStream *AmigaDisk::openArchivedFile(const char* name, bool e return NULL; } -Cnv* AmigaDisk::loadFrames(const char* name) { - debugC(1, kDebugDisk, "AmigaDisk::loadFrames '%s'", name); - - Common::SeekableReadStream *s = openArchivedFile(name, true); - Cnv *cnv = makeCnv(*s); - delete s; - - return cnv; -} - -void AmigaDisk::loadSlide(const char *name) { - debugC(1, kDebugDisk, "AmigaDisk::loadSlide '%s'", name); - loadBackground(name); - return; -} - // FIXME: mask values are not computed correctly for level 1 and 2 void buildMask(byte* buf) { @@ -1107,7 +1019,93 @@ void AmigaDisk::loadScenery(const char* background, const char* mask) { return; } -Table* AmigaDisk::loadTable(const char* name) { + +AmigaFullDisk::AmigaFullDisk(Parallaction *vm) : AmigaDisk(vm) { +} + + +void AmigaFullDisk::loadSlide(const char *name) { + debugC(1, kDebugDisk, "AmigaDisk::loadSlide '%s'", name); + + char path[PATH_LEN]; + sprintf(path, "slides/%s", name); + Common::SeekableReadStream *s = openArchivedFile(path, false); + if (s) + loadBackground(path); + else + loadBackground(name); + + return; +} + +Cnv* AmigaFullDisk::loadFrames(const char* name) { + debugC(1, kDebugDisk, "AmigaDisk::loadFrames '%s'", name); + + Common::SeekableReadStream *s; + + char path[PATH_LEN]; + sprintf(path, "anims/%s", name); + + s = openArchivedFile(path, false); + if (!s) + s = openArchivedFile(name, true); + + Cnv *cnv = makeCnv(*s); + delete s; + + return cnv; +} + + + +StaticCnv* AmigaFullDisk::loadHead(const char* name) { + debugC(1, kDebugDisk, "AmigaDisk::loadHead '%s'", name); + + char path[PATH_LEN]; + sprintf(path, "%s.head", name); + + Common::SeekableReadStream *s = openArchivedFile(path, true); + StaticCnv *cnv = makeStaticCnv(*s); + + delete s; + + return cnv; +} + + +Cnv* AmigaFullDisk::loadObjects(const char *name) { + debugC(1, kDebugDisk, "AmigaDisk::loadObjects"); + + char path[PATH_LEN]; + sprintf(path, "objs/%s.objs", name); + Common::SeekableReadStream *s = openArchivedFile(path, true); + + Cnv *cnv = makeCnv(*s); + delete s; + + return cnv; +} + + +Cnv* AmigaFullDisk::loadTalk(const char *name) { + debugC(1, kDebugDisk, "AmigaDisk::loadTalk '%s'", name); + + Common::SeekableReadStream *s; + + char path[PATH_LEN]; + sprintf(path, "talk/%s.talk", name); + s = openArchivedFile(path, false); + if (s == NULL) { + s = openArchivedFile(name, true); + } + + Cnv *cnv = makeCnv(*s); + delete s; + + return cnv; +} + +Table* AmigaFullDisk::loadTable(const char* name) { debugC(1, kDebugDisk, "AmigaDisk::loadTable '%s'", name); char path[PATH_LEN]; @@ -1125,9 +1123,7 @@ Table* AmigaDisk::loadTable(const char* name) { dispose = true; stream = s; } else { - if (!(_vm->getFeatures() & GF_DEMO)) - sprintf(path, "objs/%s.table", name); - + sprintf(path, "objs/%s.table", name); if (!_resArchive.openArchivedFile(path)) errorFileNotFound(path); @@ -1148,6 +1144,20 @@ Table* AmigaDisk::loadTable(const char* name) { return t; } +Font* AmigaFullDisk::loadFont(const char* name) { + debugC(1, kDebugDisk, "AmigaFullDisk::loadFont '%s'", name); + + char path[PATH_LEN]; + sprintf(path, "%sfont", name); + + Common::File stream; + if (!stream.open(path)) + errorFileNotFound(path); + + return createFont(name, stream); +} + + Common::ReadStream* AmigaDisk::loadMusic(const char* name) { return openArchivedFile(name); } @@ -1161,5 +1171,122 @@ Common::ReadStream* AmigaDisk::loadSound(const char* name) { return new DummyArchiveStream(_resArchive); } +AmigaDemoDisk::AmigaDemoDisk(Parallaction *vm) : AmigaDisk(vm) { +} + +Cnv* AmigaDemoDisk::loadTalk(const char *name) { + debugC(1, kDebugDisk, "AmigaDisk::loadTalk '%s'", name); + + Common::SeekableReadStream *s; + + char path[PATH_LEN]; + sprintf(path, "%s.talk", name); + s = openArchivedFile(path, false); + if (s == NULL) { + s = openArchivedFile(name, true); + } + + Cnv *cnv = makeCnv(*s); + delete s; + + return cnv; +} + +Cnv* AmigaDemoDisk::loadObjects(const char *name) { + debugC(1, kDebugDisk, "AmigaDisk::loadObjects"); + + char path[PATH_LEN]; + sprintf(path, "%s.objs", name); + Common::SeekableReadStream *s = openArchivedFile(path, true); + + Cnv *cnv = makeCnv(*s); + delete s; + + return cnv; +} + + +Cnv* AmigaDemoDisk::loadFrames(const char* name) { + debugC(1, kDebugDisk, "AmigaDisk::loadFrames '%s'", name); + + if (IS_MINI_CHARACTER(name)) + return NULL; + + Common::SeekableReadStream *s = openArchivedFile(name, true); + Cnv *cnv = makeCnv(*s); + delete s; + + return cnv; +} + +void AmigaDemoDisk::loadSlide(const char *name) { + debugC(1, kDebugDisk, "AmigaDisk::loadSlide '%s'", name); + loadBackground(name); + return; +} + +StaticCnv* AmigaDemoDisk::loadHead(const char* name) { + debugC(1, kDebugDisk, "AmigaDisk::loadHead '%s'", name); + + char path[PATH_LEN]; + sprintf(path, "%s.head", name); + + Common::SeekableReadStream *s = openArchivedFile(path, true); + StaticCnv *cnv = makeStaticCnv(*s); + + delete s; + + return cnv; +} + +Table* AmigaDemoDisk::loadTable(const char* name) { + debugC(1, kDebugDisk, "AmigaDisk::loadTable '%s'", name); + + char path[PATH_LEN]; + sprintf(path, "%s.table", name); + + bool dispose = false; + + Common::SeekableReadStream *stream; + + if (!scumm_stricmp(name, "global")) { + Common::File *s = new Common::File; + if (!s->open(path)) + errorFileNotFound(path); + + dispose = true; + stream = s; + } else { + if (!_resArchive.openArchivedFile(path)) + errorFileNotFound(path); + + stream = &_resArchive; + } + + Table *t = new Table(100); + + fillBuffers(*stream); + while (scumm_stricmp(_tokens[0], "ENDTABLE")) { + t->addData(_tokens[0]); + fillBuffers(*stream); + } + + if (dispose) + delete stream; + + return t; +} + +Font* AmigaDemoDisk::loadFont(const char* name) { + debugC(1, kDebugDisk, "AmigaDisk::loadFont '%s'", name); + + char path[PATH_LEN]; + sprintf(path, "%sfont", name); + + if (!_resArchive.openArchivedFile(path)) + errorFileNotFound(path); + + return createFont(name, _resArchive); +} } // namespace Parallaction |