aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorbjörn Andersson2016-03-09 21:23:13 +0100
committerTorbjörn Andersson2016-03-09 21:24:32 +0100
commite11a370fe45aa96d240ff5f10e7263fdfc02bb01 (patch)
tree078e4ee985a9772b3c15780153d5e0e496814d46
parent0f2e7fcdf0914646edcbd331dc247350b8d85026 (diff)
downloadscummvm-rg350-e11a370fe45aa96d240ff5f10e7263fdfc02bb01.tar.gz
scummvm-rg350-e11a370fe45aa96d240ff5f10e7263fdfc02bb01.tar.bz2
scummvm-rg350-e11a370fe45aa96d240ff5f10e7263fdfc02bb01.zip
SCUMM: Fix detection of Maniac Mansion from within DoTT
It turns out that in some versions of ScummVM, paths end with a directory separator, while in others they don't. This should handle both cases, I hope. (It's a bit tricky for me to test.)
-rw-r--r--NEWS5
-rw-r--r--engines/scumm/scumm.cpp30
2 files changed, 29 insertions, 6 deletions
diff --git a/NEWS b/NEWS
index 0dae4ffb27..db78085413 100644
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,11 @@ For a more comprehensive changelog of the latest experimental code, see:
- Added optional "pause, when entering commands" feature, that was only available
in the original interpreter for Hercules rendering.
+1.8.1 (XXXX-XX-XX)
+ SCUMM:
+ - Fixed detection of Maniac Mansion from Day of the Tentacle in the Windows
+ version of ScummVM.
+
1.8.0 (2016-03-04)
New Games:
- Added support for Rex Nebular and the Cosmic Gender Bender.
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 24d676a1ff..8d6214cf9f 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -2608,13 +2608,31 @@ bool ScummEngine::startManiac() {
Common::ConfigManager::DomainMap::iterator iter = ConfMan.beginGameDomains();
for (; iter != ConfMan.endGameDomains(); ++iter) {
Common::ConfigManager::Domain &dom = iter->_value;
- Common::String path = dom.getVal("path");
+ Common::String path1 = dom.getVal("path");
- if (path.hasPrefix(currentPath)) {
- path.erase(0, currentPath.size() + 1);
- if (path.equalsIgnoreCase("maniac")) {
- maniacTarget = iter->_key;
- break;
+ if (path1.hasPrefix(currentPath)) {
+ // In some ports (e.g. Windows), the "path" will end with a
+ // path separator. In others (e.g. Linux), it won't. And
+ // we have no way of knowing exactly what the separator
+ // is. The technical term for this is "annoying".
+
+ path1.erase(0, currentPath.size());
+
+ if (!path1.empty()) {
+ // If we've found the path we're looking for, all that
+ // remains now is the "maniac" part of it. If paths end
+ // with a separator, we'll have "maniac" followed by a
+ // separator. If they don't, we'll have a separator
+ // followed by "maniac".
+ Common::String path2 = path1;
+
+ path1.erase(0, 1);
+ path2.deleteLastChar();
+
+ if (path1.equalsIgnoreCase("maniac") || path2.equalsIgnoreCase("maniac")) {
+ maniacTarget = iter->_key;
+ break;
+ }
}
}
}