aboutsummaryrefslogtreecommitdiff
path: root/engines/parallaction/disk.cpp
diff options
context:
space:
mode:
authorNicola Mettifogo2007-06-15 21:40:02 +0000
committerNicola Mettifogo2007-06-15 21:40:02 +0000
commit85ce1d85cac75ba7937a4819a69b11ba5d58e9d2 (patch)
tree397d1dc1bd1db1bc86cd205527ec25c063a00049 /engines/parallaction/disk.cpp
parentf80799cd5be7489fb4ab3fbb7fc55ecac25d1a6d (diff)
downloadscummvm-rg350-85ce1d85cac75ba7937a4819a69b11ba5d58e9d2.tar.gz
scummvm-rg350-85ce1d85cac75ba7937a4819a69b11ba5d58e9d2.tar.bz2
scummvm-rg350-85ce1d85cac75ba7937a4819a69b11ba5d58e9d2.zip
All known versions of Nippon Safes are now enabled with all features except for half-brite effects. Please keep an eye out for regression.
svn-id: r27437
Diffstat (limited to 'engines/parallaction/disk.cpp')
-rw-r--r--engines/parallaction/disk.cpp337
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