From 8b929a584fac5022bfc6d061685326e68e2a5588 Mon Sep 17 00:00:00 2001 From: lolbot-iichan Date: Thu, 6 Jun 2019 07:07:16 +0300 Subject: WINTERMUTE: Show warning on running 2.5D games This is shown for the 2 games added in 0d8834b5616aa8fc936c750ed92ef4423610d641, as both of them use ACTOR3DX entities, i.e. 3D models, which are not supported in ScummVM --- engines/wintermute/POTFILES | 1 + engines/wintermute/base/base_file_manager.cpp | 4 ++++ engines/wintermute/base/base_file_manager.h | 1 + engines/wintermute/base/file/base_package.cpp | 1 + engines/wintermute/wintermute.cpp | 17 ++++++++++++++++- 5 files changed, 23 insertions(+), 1 deletion(-) (limited to 'engines') diff --git a/engines/wintermute/POTFILES b/engines/wintermute/POTFILES index e9422415b2..79f5c5dfed 100644 --- a/engines/wintermute/POTFILES +++ b/engines/wintermute/POTFILES @@ -1 +1,2 @@ engines/wintermute/detection.cpp +engines/wintermute/wintermute.cpp diff --git a/engines/wintermute/base/base_file_manager.cpp b/engines/wintermute/base/base_file_manager.cpp index 05830ffcd8..b026bbee56 100644 --- a/engines/wintermute/base/base_file_manager.cpp +++ b/engines/wintermute/base/base_file_manager.cpp @@ -337,6 +337,10 @@ bool BaseFileManager::hasFile(const Common::String &filename) { return false; } +int BaseFileManager::listMatchingMembers(Common::ArchiveMemberList &list, const Common::String &pattern) { + return _packages.listMatchingMembers(list, pattern); +} + ////////////////////////////////////////////////////////////////////////// Common::SeekableReadStream *BaseFileManager::openFile(const Common::String &filename, bool absPathWarning, bool keepTrackOf) { if (strcmp(filename.c_str(), "") == 0) { diff --git a/engines/wintermute/base/base_file_manager.h b/engines/wintermute/base/base_file_manager.h index d953e44704..2c67d83462 100644 --- a/engines/wintermute/base/base_file_manager.h +++ b/engines/wintermute/base/base_file_manager.h @@ -42,6 +42,7 @@ public: bool closeFile(Common::SeekableReadStream *File); bool hasFile(const Common::String &filename); + int listMatchingMembers(Common::ArchiveMemberList &list, const Common::String &pattern); Common::SeekableReadStream *openFile(const Common::String &filename, bool absPathWarning = true, bool keepTrackOf = true); byte *readWholeFile(const Common::String &filename, uint32 *size = nullptr, bool mustExist = true); diff --git a/engines/wintermute/base/file/base_package.cpp b/engines/wintermute/base/file/base_package.cpp index ae4955390b..b80547f509 100644 --- a/engines/wintermute/base/file/base_package.cpp +++ b/engines/wintermute/base/file/base_package.cpp @@ -206,6 +206,7 @@ PackageSet::PackageSet(Common::FSNode file, const Common::String &filename, bool fileEntry->_length = length; fileEntry->_compressedLength = compLength; fileEntry->_flags = flags; + fileEntry->_filename = upcName; _files[upcName] = Common::ArchiveMemberPtr(fileEntry); } else { diff --git a/engines/wintermute/wintermute.cpp b/engines/wintermute/wintermute.cpp index 21e6c589ad..7ee28f0fe2 100644 --- a/engines/wintermute/wintermute.cpp +++ b/engines/wintermute/wintermute.cpp @@ -29,6 +29,7 @@ #include "common/file.h" #include "common/fs.h" #include "common/tokenizer.h" +#include "common/translation.h" #include "engines/util.h" #include "engines/wintermute/ad/ad_game.h" @@ -149,7 +150,7 @@ int WintermuteEngine::init() { // check dependencies for games with high resolution assets #if not defined(USE_PNG) || not defined(USE_JPEG) || not defined(USE_VORBIS) if (!(_gameDescription->adDesc.flags & GF_LOWSPEC_ASSETS)) { - GUI::MessageDialog dialog("This game requires PNG, JPEG and Vorbis support."); + GUI::MessageDialog dialog(_("This game requires PNG, JPEG and Vorbis support.")); dialog.runModal(); delete _game; _game = nullptr; @@ -157,6 +158,20 @@ int WintermuteEngine::init() { } #endif + Common::ArchiveMemberList actors3d; + if (BaseEngine::instance().getFileManager()->listMatchingMembers(actors3d, "*.act3d")) { + GUI::MessageDialog dialog( + _("This game requires 3D characters support, which is out of ScummVM's scope."), + _("Start anyway"), + _("Cancel") + ); + if (dialog.runModal() != GUI::kMessageOK) { + delete _game; + _game = nullptr; + return false; + } + } + _game = new AdGame(_targetName); if (!_game) { return 1; -- cgit v1.2.3