diff options
author | Torbjörn Andersson | 2016-03-09 21:23:13 +0100 |
---|---|---|
committer | Torbjörn Andersson | 2016-03-09 21:24:32 +0100 |
commit | e11a370fe45aa96d240ff5f10e7263fdfc02bb01 (patch) | |
tree | 078e4ee985a9772b3c15780153d5e0e496814d46 | |
parent | 0f2e7fcdf0914646edcbd331dc247350b8d85026 (diff) | |
download | scummvm-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-- | NEWS | 5 | ||||
-rw-r--r-- | engines/scumm/scumm.cpp | 30 |
2 files changed, 29 insertions, 6 deletions
@@ -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; + } } } } |