[Scummvm-git-logs] scummvm branch-2-6 -> b6e3d7efe89e0c6998099f79f2500b08b81b679c

peterkohaut noreply at scummvm.org
Wed Jun 29 20:07:57 UTC 2022


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
b6e3d7efe8 BLADERUNNER: Mark enhanced edition as unsupported


Commit: b6e3d7efe89e0c6998099f79f2500b08b81b679c
    https://github.com/scummvm/scummvm/commit/b6e3d7efe89e0c6998099f79f2500b08b81b679c
Author: Peter Kohaut (peter.kohaut at gmail.com)
Date: 2022-06-29T22:03:56+02:00

Commit Message:
BLADERUNNER: Mark enhanced edition as unsupported

Changed paths:
    engines/bladerunner/audio_player.cpp
    engines/bladerunner/audio_speech.cpp
    engines/bladerunner/bladerunner.cpp
    engines/bladerunner/bladerunner.h
    engines/bladerunner/detection.cpp
    engines/bladerunner/detection_tables.h
    engines/bladerunner/metaengine.cpp
    engines/bladerunner/music.cpp
    engines/bladerunner/set.cpp
    engines/bladerunner/vqa_player.cpp


diff --git a/engines/bladerunner/audio_player.cpp b/engines/bladerunner/audio_player.cpp
index 502efe6093c..f82f023fc83 100644
--- a/engines/bladerunner/audio_player.cpp
+++ b/engines/bladerunner/audio_player.cpp
@@ -173,7 +173,7 @@ int AudioPlayer::playAud(const Common::String &name, int volume, int panStart, i
 	/* Load audio resource and store in cache. Playback will happen directly from there. */
 	int32 hash = MIXArchive::getHash(name);
 	if (!_vm->_audioCache->findByHash(hash)) {
-		Common::SeekableReadStream *r = _vm->getResourceStream(name);
+		Common::SeekableReadStream *r = _vm->getResourceStream(_vm->_enhancedEdition ? ("audio/" + name) : name);
 		if (!r) {
 			//debug("Could not get stream for %s %d - giving up", name.c_str(), priority);
 			return -1;
diff --git a/engines/bladerunner/audio_speech.cpp b/engines/bladerunner/audio_speech.cpp
index c19fad9755a..6840b6c0629 100644
--- a/engines/bladerunner/audio_speech.cpp
+++ b/engines/bladerunner/audio_speech.cpp
@@ -74,7 +74,7 @@ bool AudioSpeech::playSpeech(const Common::String &name, int pan) {
 	// Audio cache is not usable as hash function is producing collision for speech lines.
 	// It was not used in the original game either
 
-	Common::ScopedPtr<Common::SeekableReadStream> r(_vm->getResourceStream(name));
+	Common::ScopedPtr<Common::SeekableReadStream> r(_vm->getResourceStream(_vm->_enhancedEdition ? ("audio/" + name) : name));
 
 	if (!r) {
 		warning("AudioSpeech::playSpeech: AUD resource \"%s\" not found", name.c_str());
diff --git a/engines/bladerunner/bladerunner.cpp b/engines/bladerunner/bladerunner.cpp
index f6b0506c197..bc5abea48c0 100644
--- a/engines/bladerunner/bladerunner.cpp
+++ b/engines/bladerunner/bladerunner.cpp
@@ -88,6 +88,8 @@
 #include "common/debug.h"
 #include "common/debug-channels.h"
 #include "common/translation.h"
+#include "common/unzip.h"
+
 #include "gui/message.h"
 
 #include "engines/util.h"
@@ -127,6 +129,7 @@ BladeRunnerEngine::BladeRunnerEngine(OSystem *syst, const ADGameDescription *des
 	_framesPerSecondMax           = false;
 	_disableStaminaDrain          = false;
 	_cutContent                   = Common::String(desc->gameId).contains("bladerunner-final");
+	_enhancedEdition              = Common::String(desc->gameId).contains("bladerunner-ee");
 	_validBootParam               = false;
 
 	_playerLosesControlCounter = 0;
@@ -246,6 +249,8 @@ BladeRunnerEngine::BladeRunnerEngine(OSystem *syst, const ADGameDescription *des
 	_customEventRepeatTimeDelay = 0;
 
 	_isNonInteractiveDemo = desc->flags & ADGF_DEMO;
+
+	_archive = nullptr;
 }
 
 BladeRunnerEngine::~BladeRunnerEngine() {
@@ -516,23 +521,28 @@ bool BladeRunnerEngine::checkFiles(Common::Array<Common::String> &missingFiles)
 	missingFiles.clear();
 
 	Common::Array<Common::String> requiredFiles;
-	requiredFiles.push_back("1.TLK");
-	requiredFiles.push_back("2.TLK");
-	requiredFiles.push_back("3.TLK");
-	requiredFiles.push_back("A.TLK");
+
+	if (_enhancedEdition) {
+		requiredFiles.push_back("BladeRunner.kpf");
+	} else {
+		requiredFiles.push_back("1.TLK");
+		requiredFiles.push_back("2.TLK");
+		requiredFiles.push_back("3.TLK");
+		requiredFiles.push_back("A.TLK");
+		requiredFiles.push_back("MODE.MIX");
+		requiredFiles.push_back("MUSIC.MIX");
+		requiredFiles.push_back("OUTTAKE1.MIX");
+		requiredFiles.push_back("OUTTAKE2.MIX");
+		requiredFiles.push_back("OUTTAKE3.MIX");
+		requiredFiles.push_back("OUTTAKE4.MIX");
+		requiredFiles.push_back("SFX.MIX");
+		requiredFiles.push_back("SPCHSFX.TLK");
+		requiredFiles.push_back("STARTUP.MIX");
+		requiredFiles.push_back("VQA1.MIX");
+		requiredFiles.push_back("VQA2.MIX");
+		requiredFiles.push_back("VQA3.MIX");
+	}
 	requiredFiles.push_back("COREANIM.DAT");
-	requiredFiles.push_back("MODE.MIX");
-	requiredFiles.push_back("MUSIC.MIX");
-	requiredFiles.push_back("OUTTAKE1.MIX");
-	requiredFiles.push_back("OUTTAKE2.MIX");
-	requiredFiles.push_back("OUTTAKE3.MIX");
-	requiredFiles.push_back("OUTTAKE4.MIX");
-	requiredFiles.push_back("SFX.MIX");
-	requiredFiles.push_back("SPCHSFX.TLK");
-	requiredFiles.push_back("STARTUP.MIX");
-	requiredFiles.push_back("VQA1.MIX");
-	requiredFiles.push_back("VQA2.MIX");
-	requiredFiles.push_back("VQA3.MIX");
 
 	for (uint i = 0; i < requiredFiles.size(); ++i) {
 		if (!Common::File::exists(requiredFiles[i])) {
@@ -655,7 +665,7 @@ bool BladeRunnerEngine::startup(bool hasSavegames) {
 		_debugger = new Debugger(this);
 		setDebugger(_debugger);
 
-		bool r = openArchive("STARTUP.MIX");
+		bool r = _enhancedEdition ? openArchiveEnhancedEdition() : openArchive("STARTUP.MIX");
 		if (!r)
 			return false;
 
@@ -1043,6 +1053,9 @@ void BladeRunnerEngine::shutdown() {
 		closeArchive("STARTUP.MIX");
 	}
 
+	delete _archive;
+	_archive = nullptr;
+
 	if (isArchiveOpen("SUBTITLES.MIX")) {
 		closeArchive("SUBTITLES.MIX");
 	}
@@ -2337,6 +2350,10 @@ void BladeRunnerEngine::outtakePlay(const Common::String &basenameNoExt, bool no
 }
 
 bool BladeRunnerEngine::openArchive(const Common::String &name) {
+	if (_enhancedEdition) {
+		return true;
+	}
+
 	int i;
 
 	// If archive is already open, return true
@@ -2364,6 +2381,10 @@ bool BladeRunnerEngine::openArchive(const Common::String &name) {
 }
 
 bool BladeRunnerEngine::closeArchive(const Common::String &name) {
+	if (_enhancedEdition) {
+		return true;
+	}
+
 	for (int i = 0; i != kArchiveCount; ++i) {
 		if (_archives[i].isOpen() && _archives[i].getName() == name) {
 			_archives[i].close();
@@ -2376,6 +2397,9 @@ bool BladeRunnerEngine::closeArchive(const Common::String &name) {
 }
 
 bool BladeRunnerEngine::isArchiveOpen(const Common::String &name) const {
+	if (_enhancedEdition) {
+		return false;
+	}
 	for (int i = 0; i != kArchiveCount; ++i) {
 		if (_archives[i].isOpen() && _archives[i].getName() == name)
 			return true;
@@ -2384,6 +2408,11 @@ bool BladeRunnerEngine::isArchiveOpen(const Common::String &name) const {
 	return false;
 }
 
+bool BladeRunnerEngine::openArchiveEnhancedEdition() {
+	_archive = Common::makeZipArchive("BladeRunner.kpf");
+	return _archive != nullptr;
+}
+
 void BladeRunnerEngine::syncSoundSettings() {
 	Engine::syncSoundSettings();
 
@@ -2449,6 +2478,11 @@ Common::SeekableReadStream *BladeRunnerEngine::getResourceStream(const Common::S
 		}
 	}
 
+	if (_enhancedEdition) {
+		assert(_archive != nullptr);
+		return _archive->createReadStreamForMember(name);
+	}
+
 	for (int i = 0; i != kArchiveCount; ++i) {
 		if (!_archives[i].isOpen()) {
 			continue;
diff --git a/engines/bladerunner/bladerunner.h b/engines/bladerunner/bladerunner.h
index acaf997b9a4..b30847f7b6a 100644
--- a/engines/bladerunner/bladerunner.h
+++ b/engines/bladerunner/bladerunner.h
@@ -42,6 +42,7 @@
 #define BLADERUNNER_ORIGINAL_BUGS     0
 
 namespace Common {
+class Archive;
 struct Event;
 }
 
@@ -234,6 +235,7 @@ public:
 	bool _framesPerSecondMax;
 	bool _disableStaminaDrain;
 	bool _cutContent;
+	bool _enhancedEdition;
 	bool _validBootParam;
 
 	int _walkSoundId;
@@ -332,6 +334,7 @@ public:
 
 private:
 	MIXArchive _archives[kArchiveCount];
+	Common::Archive *_archive;
 
 public:
 	BladeRunnerEngine(OSystem *syst, const ADGameDescription *desc);
@@ -409,6 +412,8 @@ public:
 	bool closeArchive(const Common::String &name);
 	bool isArchiveOpen(const Common::String &name) const;
 
+	bool openArchiveEnhancedEdition();
+
 	void syncSoundSettings() override;
 	bool isSubtitlesEnabled();
 	void setSubtitlesEnabled(bool newVal);
diff --git a/engines/bladerunner/detection.cpp b/engines/bladerunner/detection.cpp
index 6b8c1a0054d..50da3d1c140 100644
--- a/engines/bladerunner/detection.cpp
+++ b/engines/bladerunner/detection.cpp
@@ -42,6 +42,7 @@ namespace BladeRunner {
 static const PlainGameDescriptor bladeRunnerGames[] = {
 	{"bladerunner", "Blade Runner"},
 	{"bladerunner-final", "Blade Runner with restored content"},
+	{"bladerunner-ee", "Blade Runner: Enhanced Edition"},
 	{nullptr, nullptr}
 };
 
diff --git a/engines/bladerunner/detection_tables.h b/engines/bladerunner/detection_tables.h
index 69ea2c19c77..dc6b9b27134 100644
--- a/engines/bladerunner/detection_tables.h
+++ b/engines/bladerunner/detection_tables.h
@@ -134,6 +134,17 @@ static const ADGameDescription gameDescriptions[] = {
 		GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
 	},
 
+	// BladeRunner - Enhanced edition
+	{
+		"bladerunner-ee",
+		_s("Enhanced edition not supported, use the original files which are part of the release."),
+		AD_ENTRY1s("BladeRunner.kpf", "c42766a9337c828f0d98383f72636fb3", 1163268364),
+		Common::EN_ANY,
+		Common::kPlatformWindows,
+		ADGF_UNSUPPORTED,
+		GUIO6(GAMEOPTION_SITCOM, GAMEOPTION_SHORTY, GAMEOPTION_FRAMELIMITER_NODELAYMILLIS, GAMEOPTION_FRAMELIMITER_FPS, GAMEOPTION_DISABLE_STAMINA_DRAIN, GUIO_NOMIDI)
+	},
+
 	// Versions with restored content
 
 	// BladeRunner (English) - ENG
diff --git a/engines/bladerunner/metaengine.cpp b/engines/bladerunner/metaengine.cpp
index cdd846445df..f04002d1363 100644
--- a/engines/bladerunner/metaengine.cpp
+++ b/engines/bladerunner/metaengine.cpp
@@ -86,6 +86,8 @@ Common::KeymapArray BladeRunnerMetaEngine::initKeymaps(const char *target) const
 		gameDesc = "Blade Runner";
 	} else if (gameId == "bladerunner-final") {
 		gameDesc = "Blade Runner (Restored Content)";
+	} else if (gameId == "bladerunner-ee") {
+		gameDesc = "Blade Runner: Enhanced Edition";
 	}
 
 	if (gameDesc.empty()) {
diff --git a/engines/bladerunner/music.cpp b/engines/bladerunner/music.cpp
index 4216bb847ae..83db62dee1a 100644
--- a/engines/bladerunner/music.cpp
+++ b/engines/bladerunner/music.cpp
@@ -401,7 +401,7 @@ void Music::mixerChannelEnded(int channel, void *data) {
 
 byte *Music::getData(const Common::String &name) {
 	// NOTE: This is not part original game, loading data is done in the mixer and its using buffering to limit memory usage
-	Common::SeekableReadStream *stream = _vm->getResourceStream(name);
+	Common::SeekableReadStream *stream = _vm->getResourceStream(_vm->_enhancedEdition ? ("audio/" + name) : name);
 
 	if (stream == nullptr) {
 		return nullptr;
diff --git a/engines/bladerunner/set.cpp b/engines/bladerunner/set.cpp
index e2986cb52d6..2c5dc68b94b 100644
--- a/engines/bladerunner/set.cpp
+++ b/engines/bladerunner/set.cpp
@@ -57,7 +57,7 @@ Set::~Set() {
 }
 
 bool Set::open(const Common::String &name) {
-	Common::ScopedPtr<Common::SeekableReadStream> s(_vm->getResourceStream(name));
+	Common::ScopedPtr<Common::SeekableReadStream> s(_vm->getResourceStream(_vm->_enhancedEdition ? ("scenes/" + name) : name));
 
 	uint32 sig = s->readUint32BE();
 	if (sig != kSet0)
diff --git a/engines/bladerunner/vqa_player.cpp b/engines/bladerunner/vqa_player.cpp
index 9792b9ac0ae..b7550d24b65 100644
--- a/engines/bladerunner/vqa_player.cpp
+++ b/engines/bladerunner/vqa_player.cpp
@@ -32,7 +32,7 @@
 namespace BladeRunner {
 
 bool VQAPlayer::open() {
-	_s = _vm->getResourceStream(_name);
+	_s = _vm->getResourceStream(_vm->_enhancedEdition ? ("video/" + _name) : _name);
 	if (!_s) {
 		return false;
 	}




More information about the Scummvm-git-logs mailing list