aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/resource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/resource.cpp')
-rw-r--r--engines/sci/resource.cpp77
1 files changed, 47 insertions, 30 deletions
diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp
index e9f83fd29b..b637fbb615 100644
--- a/engines/sci/resource.cpp
+++ b/engines/sci/resource.cpp
@@ -315,7 +315,7 @@ void ResourceManager::loadResource(Resource *res) {
file->seek(res->file_offset, SEEK_SET);
if (res->source->source_type == kSourceAudioVolume) {
- if (_sciVersion < SCI_VERSION_1_1)
+ if (getSciVersion() < SCI_VERSION_1_1)
loadFromAudioVolumeSCI1(res, *file);
else
loadFromAudioVolumeSCI11(res, *file);
@@ -517,12 +517,9 @@ void ResourceManager::init() {
addInternalSources();
scanNewSources();
- _sciVersion = detectSciVersion();
+ detectSciVersion();
- if (_sciVersion != SCI_VERSION_AUTODETECT)
- debug("resMan: Detected %s", ((SciEngine *)g_engine)->getSciVersionDesc(_sciVersion).c_str());
- else
- warning("resMan: Couldn't determine SCI version");
+ debug("resMan: Detected %s", getSciVersionDesc(getSciVersion()).c_str());
switch (_viewType) {
case kViewEga:
@@ -1413,10 +1410,10 @@ int ResourceManager::readResourceInfo(Resource *res, Common::File *file,
compression = kCompNone;
break;
case 1:
- compression = (_sciVersion <= SCI_VERSION_01) ? kCompLZW : kCompHuffman;
+ compression = (getSciVersion() <= SCI_VERSION_01) ? kCompLZW : kCompHuffman;
break;
case 2:
- compression = (_sciVersion <= SCI_VERSION_01) ? kCompHuffman : kCompLZW1;
+ compression = (getSciVersion() <= SCI_VERSION_01) ? kCompHuffman : kCompLZW1;
break;
case 3:
compression = kCompLZW1View;
@@ -1583,7 +1580,7 @@ ViewType ResourceManager::detectViewType() {
return kViewUnknown;
}
-SciVersion ResourceManager::detectSciVersion() {
+void ResourceManager::detectSciVersion() {
// We use the view compression to set a preliminary _sciVersion for the sake of getResourceInfo
// Pretend we have a SCI0 game
_sciVersion = SCI_VERSION_0_EARLY;
@@ -1617,22 +1614,28 @@ SciVersion ResourceManager::detectSciVersion() {
// SCI1 Late resource maps have the resource types or'd with
// 0x80. We differentiate between SCI2 and SCI2.1/3 based on that.
// TODO: Differentiate between SCI2.1 and SCI3
- if (_mapVersion == kResVersionSci1Late)
- return SCI_VERSION_2;
- else
- return SCI_VERSION_2_1;
+ if (_mapVersion == kResVersionSci1Late) {
+ _sciVersion = SCI_VERSION_2;
+ return;
+ } else {
+ _sciVersion = SCI_VERSION_2_1;
+ return;
+ }
}
switch (_mapVersion) {
case kResVersionSci0Sci1Early:
if (_viewType == kViewVga) {
// VGA
- return SCI_VERSION_1_EARLY;
+ _sciVersion = SCI_VERSION_1_EARLY;
+ return;
}
// EGA
- if (hasOldScriptHeader())
- return SCI_VERSION_0_EARLY;
+ if (hasOldScriptHeader()) {
+ _sciVersion = SCI_VERSION_0_EARLY;
+ return;
+ }
if (oldDecompressors) {
// It's either SCI_VERSION_0_LATE or SCI_VERSION_01
@@ -1640,43 +1643,57 @@ SciVersion ResourceManager::detectSciVersion() {
// We first check for SCI1 vocab.999
if (testResource(ResourceId(kResourceTypeVocab, 999))) {
if (hasSci0Voc999()) {
- return SCI_VERSION_0_LATE;
+ _sciVersion = SCI_VERSION_0_LATE;
+ return;
} else {
- return SCI_VERSION_01;
+ _sciVersion = SCI_VERSION_01;
+ return;
}
}
// If vocab.999 is missing, we try vocab.900
if (testResource(ResourceId(kResourceTypeVocab, 900))) {
if (hasSci1Voc900()) {
- return SCI_VERSION_01;
+ _sciVersion = SCI_VERSION_01;
+ return;
} else {
- return SCI_VERSION_0_LATE;
+ _sciVersion = SCI_VERSION_0_LATE;
+ return;
}
}
warning("Failed to accurately determine SCI version");
// No parser, we assume SCI_VERSION_01.
- return SCI_VERSION_01;
+ _sciVersion = SCI_VERSION_01;
+ return;
}
// New decompressors. It's either SCI_VERSION_1_EGA or SCI_VERSION_1_EARLY.
- if (hasSci1Voc900())
- return SCI_VERSION_1_EGA;
+ if (hasSci1Voc900()) {
+ _sciVersion = SCI_VERSION_1_EGA;
+ return;
+ }
// SCI_VERSION_1_EARLY EGA versions seem to be lacking a valid vocab.900.
// If this turns out to be unreliable, we could do some pic resource checks instead.
- return SCI_VERSION_1_EARLY;
+ _sciVersion = SCI_VERSION_1_EARLY;
+ return;
case kResVersionSci1Middle:
- return SCI_VERSION_1_MIDDLE;
+ _sciVersion = SCI_VERSION_1_MIDDLE;
+ return;
case kResVersionSci1Late:
- if (_volVersion == kResVersionSci11)
- return SCI_VERSION_1_1;
- return SCI_VERSION_1_LATE;
+ if (_volVersion == kResVersionSci11) {
+ _sciVersion = SCI_VERSION_1_1;
+ return;
+ }
+ _sciVersion = SCI_VERSION_1_LATE;
+ return;
case kResVersionSci11:
- return SCI_VERSION_1_1;
+ _sciVersion = SCI_VERSION_1_1;
+ return;
default:
- return SCI_VERSION_AUTODETECT;
+ _sciVersion = SCI_VERSION_AUTODETECT;
+ error("detectSciVersion(): Unable to detect the game's SCI version");
}
}