[Scummvm-git-logs] scummvm master -> fc98faf01aeedbe72f19246110b750f124a91249
peterkohaut
noreply at scummvm.org
Tue Jun 28 21:48:45 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:
fc98faf01a BLADERUNNER: Mark enhanced edition as unsupported
Commit: fc98faf01aeedbe72f19246110b750f124a91249
https://github.com/scummvm/scummvm/commit/fc98faf01aeedbe72f19246110b750f124a91249
Author: Peter Kohaut (peter.kohaut at gmail.com)
Date: 2022-06-28T23:48:22+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