aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2018-12-14 19:30:43 -0800
committerPaul Gilbert2018-12-14 19:30:43 -0800
commit6202b366065dc71eec988042428b44f0d05686e7 (patch)
tree63d117a2752abce2ab09087213054aa5f354229e
parentbfae9bd21bf7f2edc3648ea53a24bf54c4274012 (diff)
downloadscummvm-rg350-6202b366065dc71eec988042428b44f0d05686e7.tar.gz
scummvm-rg350-6202b366065dc71eec988042428b44f0d05686e7.tar.bz2
scummvm-rg350-6202b366065dc71eec988042428b44f0d05686e7.zip
GLK: SCOTT: Add support for Mysterious Adventures Blorb files
-rw-r--r--engines/glk/blorb.cpp8
-rw-r--r--engines/glk/blorb.h5
-rw-r--r--engines/glk/glk.cpp3
-rw-r--r--engines/glk/scott/detection.cpp7
-rw-r--r--engines/glk/scott/detection_tables.h47
5 files changed, 64 insertions, 6 deletions
diff --git a/engines/glk/blorb.cpp b/engines/glk/blorb.cpp
index 1f95919401..ce86dee5f7 100644
--- a/engines/glk/blorb.cpp
+++ b/engines/glk/blorb.cpp
@@ -183,7 +183,8 @@ Common::ErrorCode Blorb::load() {
(_interpType == INTERPRETER_GLULXE && type == "GLUL") ||
(_interpType == INTERPRETER_TADS2 && type == "TAD2") ||
(_interpType == INTERPRETER_TADS3 && type == "TAD3") ||
- (_interpType == INTERPRETER_HUGO && type == "HUGO")
+ (_interpType == INTERPRETER_HUGO && type == "HUGO") ||
+ (_interpType == INTERPRETER_SCOTT && type == "SAAI")
) {
// Game executable
ce._filename = "game";
@@ -196,4 +197,9 @@ Common::ErrorCode Blorb::load() {
return Common::kNoError;
}
+bool Blorb::isBlorb(const Common::String &filename) {
+ return filename.hasSuffixIgnoreCase(".blorb") || filename.hasSuffixIgnoreCase(".zblorb")
+ || filename.hasSuffixIgnoreCase(".gblorb") || filename.hasSuffixIgnoreCase(".blb");
+}
+
} // End of namespace Glk
diff --git a/engines/glk/blorb.h b/engines/glk/blorb.h
index fbc1dd6583..dd7e23c64b 100644
--- a/engines/glk/blorb.h
+++ b/engines/glk/blorb.h
@@ -93,6 +93,11 @@ public:
* @return the newly created input stream
*/
virtual Common::SeekableReadStream *createReadStreamForMember(const Common::String &name) const override;
+
+ /**
+ * Returns true if a given filename specifies a Blorb file
+ */
+ static bool isBlorb(const Common::String &filename);
};
} // End of namespace Glk
diff --git a/engines/glk/glk.cpp b/engines/glk/glk.cpp
index 8c35cfe45e..d3e715a7fe 100644
--- a/engines/glk/glk.cpp
+++ b/engines/glk/glk.cpp
@@ -114,8 +114,7 @@ Common::Error GlkEngine::run() {
initialize();
- if (filename.hasSuffixIgnoreCase(".blorb") || filename.hasSuffixIgnoreCase(".zblorb")
- || filename.hasSuffixIgnoreCase(".gblorb")) {
+ if (Blorb::isBlorb(filename)) {
// Blorb archive
_blorb = new Blorb(filename, getInterpreterType());
SearchMan.add("blorb", _blorb, 99, false);
diff --git a/engines/glk/scott/detection.cpp b/engines/glk/scott/detection.cpp
index 6c04a25646..45534d05cd 100644
--- a/engines/glk/scott/detection.cpp
+++ b/engines/glk/scott/detection.cpp
@@ -49,8 +49,9 @@ bool ScottMetaEngine::detectGames(const Common::FSList &fslist, DetectedGames &g
// Loop through the files of the folder
for (Common::FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
- if (file->isDirectory() || !(file->getName().hasSuffixIgnoreCase(".saga")
- || file->getName().hasSuffixIgnoreCase(".dat")))
+ Common::String name = file->getName();
+ if (file->isDirectory() || !(name.hasSuffixIgnoreCase(".saga")
+ || name.hasSuffixIgnoreCase(".dat") || name.hasSuffixIgnoreCase(".blb")))
continue;
if (gameFile.open(*file)) {
@@ -60,7 +61,7 @@ bool ScottMetaEngine::detectGames(const Common::FSList &fslist, DetectedGames &g
const ScottGame *p = SCOTT_GAMES;
while (p->_md5 && p->_filesize != gameFile.size() && md5 != p->_md5)
++p;
-
+warning("{ \"%s\", \"%s\", %d }", md5.c_str(), file->getName().c_str(), gameFile.size());
if (p->_filesize) {
// Found a match
PlainGameDescriptor gameDesc = findGame(p->_gameId);
diff --git a/engines/glk/scott/detection_tables.h b/engines/glk/scott/detection_tables.h
index 37a016393a..12706878a7 100644
--- a/engines/glk/scott/detection_tables.h
+++ b/engines/glk/scott/detection_tables.h
@@ -37,6 +37,7 @@ struct ScottGame {
};
const PlainGameDescriptor SCOTT_GAME_LIST[] = {
+ // Scott Adams games
{ "adventureland", "Adventureland" },
{ "pirateadventure", "Pirate Adventure" },
{ "missionimpossible", "Mission Impossible" },
@@ -54,6 +55,24 @@ const PlainGameDescriptor SCOTT_GAME_LIST[] = {
{ "buckaroobanzai", "Buckaroo Banzai" },
{ "marveladventure", "Marvel Adventure #1" },
{ "scottsampler", "Adventure International's Mini-Adventure Sampler" },
+
+ // 11 Mysterious Adventures by Brian Howarth
+ { "goldenbaton", "Mysterious Adventures 1: The Golden Baton" },
+ { "timemachine", "Mysterious Adventures 2: The Time Machine" },
+ { "arrowofdeath1", "Mysterious Adventures 3: Arrow of Death Part 1" },
+ { "arrowofdeath2", "Mysterious Adventures 4: Arrow of Death Part 2" },
+ { "pulsar7", "Mysterious Adventures 5: Escape from Pulsar 7" },
+ { "circus", "Mysterious Adventures 6: Circus" },
+ { "feasibility", "Mysterious Adventures 7: Feasibility Experiment" },
+ { "akyrz", "Mysterious Adventures 8: The Wizard of Akyrz" },
+ { "perseus", "Mysterious Adventures 9: Perseus and Andromeda" },
+ { "10indians", "Mysterious Adventures 10: Ten Little Indians" },
+ { "waxworks", "Mysterious Adventures 11: Waxworks" },
+
+
+ // Miscellaneous
+ { "desert", "Desert Adventure" },
+
{ nullptr, nullptr }
};
@@ -92,6 +111,34 @@ const ScottGame SCOTT_GAMES[] = {
{ "0ef0def798d895ed766041fa99dd28a0", "adventure13", 22346 },
{ "0bf1bcc649422798332a38c88588fdff", "adventure14", 22087 },
{ "a0a5423967287dae9cbeb9abe8324479", "buckaroobanzai", 21038 },
+
+ // 11 Mysterious Adventures
+ { "2ebf7b1dd515aff34b99b40f27af00e3", "goldenbaton", 13373 },
+ { "a10cde2063bb56694000013b32dc0798", "timemachine", 13742 },
+ { "6f7040fe091eeb9ebdc2fd7533b94ceb", "arrowofdeath1", 13412 },
+ { "c5758034b83b06258e46091a80abebde", "arrowofdeath2", 15554 },
+ { "7597704b423c1ca2bea3a48263b5f4dc", "pulsar7", 17777 },
+ { "93a7947e2edb7c45036446168b427546", "circus", 13621 },
+ { "c8f423a79ad0e508f43ba4ce91f1e573", "feasibility", 13441 },
+ { "645c089d6d66324472d939993793eb57", "akyrz", 16803 },
+ { "2f5bb15b461fbdc000243acabd324c67", "perseus", 15080 },
+ { "3bb85fd505b4d42bd1767c1a76347e2f", "10indians", 14215 },
+ { "af134c32cc0d50329d6e7335639ded88", "waxworks", 16068 },
+ { "028303fd062c39b59b28982cde75f085", "goldenbaton", 53374 },
+ { "b2ff405412d92b06373d9a5efbb048d4", "timemachine", 54062 },
+ { "f11f85802eff8aed9e212aef7f26ede1", "arrowofdeath1", 68150 },
+ { "8f2609b1270248c93cdf254435f9d410", "arrowofdeath2", 77544 },
+ { "72e14dbfca7ced5c0aadf019b47b4024", "pulsar7", 55516 },
+ { "64d44e66c4f5353150f8fbaceaa99800", "circus", 48624 },
+ { "2d717aa4f0eba77b77e259f81f92fc37", "feasibility", 78456 },
+ { "3467e09eb247c474ae7e8a8d503968d0", "akyrz", 65008 },
+ { "4d8389c0ea3425bd4d92492538f63b19", "perseus", 56914 },
+ { "72e91da7590138b78d370a3cb1448f3c", "10indians", 64660 },
+ { "4d4ee8aa1f24e1745ab1aa017590dcff", "waxworks", 54556 },
+
+ // Other games
+ { "c43e19228bae08eab74bc080e17bbe16", "desert", 12287 },
+
{ nullptr, nullptr, 0 }
};