[Scummvm-git-logs] scummvm master -> 2722b76483423654bdcf0ade6f77d9982af1897d
elasota
noreply at scummvm.org
Sat Mar 25 03:17:32 UTC 2023
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:
2722b76483 MTROPOLIS: Handle German version installer
Commit: 2722b76483423654bdcf0ade6f77d9982af1897d
https://github.com/scummvm/scummvm/commit/2722b76483423654bdcf0ade6f77d9982af1897d
Author: elasota (ejlasota at gmail.com)
Date: 2023-03-24T23:17:15-04:00
Commit Message:
MTROPOLIS: Handle German version installer
Changed paths:
engines/mtropolis/boot.cpp
engines/mtropolis/detection.h
engines/mtropolis/detection_tables.h
diff --git a/engines/mtropolis/boot.cpp b/engines/mtropolis/boot.cpp
index 77720334233..224d1156547 100644
--- a/engines/mtropolis/boot.cpp
+++ b/engines/mtropolis/boot.cpp
@@ -26,6 +26,7 @@
#include "common/compression/stuffit.h"
#include "common/compression/vise.h"
#include "common/formats/winexe.h"
+#include "common/compression/installshieldv3_archive.h"
#include "common/compression/zlib.h"
#include "graphics/maccursor.h"
@@ -181,8 +182,10 @@ private:
bool _isRetail;
bool _isEnglish;
bool _isJapanese;
+ bool _isGermanWithInstaller;
void unpackMacRetailInstaller(Common::Array<Common::SharedPtr<ProjectPersistentResource> > &persistentResources, Common::Array<FileIdentification> &files);
+ void unpackGermanWinRetailInstaller(Common::Array<Common::SharedPtr<ProjectPersistentResource> > &persistentResources, Common::Array<FileIdentification> &files);
Common::SharedPtr<Obsidian::WordGameData> loadWinWordGameData();
Common::SharedPtr<Obsidian::WordGameData> loadMacWordGameData();
@@ -194,6 +197,7 @@ ObsidianGameDataHandler::ObsidianGameDataHandler(const Game &game, const MTropol
_isEnglish = (gameDesc.desc.language == Common::EN_ANY);
_isJapanese = (gameDesc.desc.language == Common::JA_JPN);
_isRetail = ((gameDesc.desc.flags & ADGF_DEMO) == 0);
+ _isGermanWithInstaller = (gameDesc.bootID == MTBOOT_OBSIDIAN_RETAIL_WIN_DE_DISC);
}
struct MacInstallerUnpackRequest {
@@ -212,6 +216,9 @@ struct MacVISE3InstallerUnpackRequest {
void ObsidianGameDataHandler::unpackAdditionalFiles(Common::Array<Common::SharedPtr<ProjectPersistentResource> > &persistentResources, Common::Array<FileIdentification> &files) {
if (_isMac && _isRetail)
unpackMacRetailInstaller(persistentResources, files);
+
+ if (_isGermanWithInstaller)
+ unpackGermanWinRetailInstaller(persistentResources, files);
}
void ObsidianGameDataHandler::unpackMacRetailInstaller(Common::Array<Common::SharedPtr<ProjectPersistentResource> > &persistentResources, Common::Array<FileIdentification> &files) {
@@ -276,6 +283,41 @@ void ObsidianGameDataHandler::unpackMacRetailInstaller(Common::Array<Common::Sha
}
}
+void ObsidianGameDataHandler::unpackGermanWinRetailInstaller(Common::Array<Common::SharedPtr<ProjectPersistentResource> > &persistentResources, Common::Array<FileIdentification> &files) {
+ Common::SharedPtr<Common::InstallShieldV3> isa(new Common::InstallShieldV3());
+
+ if (!isa->open("_SETUP.1"))
+ error("Couldn't open installer archive");
+
+ persistentResources.push_back(PersistentResource<Common::Archive>::wrap(_installerArchive));
+
+ FileIdentification ident;
+
+ Common::Array<FileIdentification> newIdents;
+
+ ident.category = MTFT_PLAYER;
+ ident.fileName = "Obsidian.exe";
+ ident.stream.reset(isa->createReadStreamForMember("Group1\\Obsidian.exe"));
+ newIdents.push_back(ident);
+
+ ident.category = MTFT_EXTENSION;
+ ident.fileName = "Obsidian.c95";
+ ident.stream.reset(isa->createReadStreamForMember("Group2\\Obsidian.c95"));
+ newIdents.push_back(ident);
+
+ ident.category = MTFT_EXTENSION;
+ ident.fileName = "MCURSORS.C95";
+ ident.stream.reset(isa->createReadStreamForMember("Group2\\MCURSORS.C95"));
+ newIdents.push_back(ident);
+
+ for (const FileIdentification &newIdent : newIdents) {
+ if (!newIdent.stream)
+ error("Failed to open archive file '%s'", newIdent.fileName.c_str());
+ }
+
+ files.push_back(newIdents);
+}
+
void ObsidianGameDataHandler::categorizeSpecialFiles(Common::Array<FileIdentification> &files) {
// Flag the installer as Special so it doesn't get detected as the player due to being an application
// Flag RSGKit as Special so it doesn't get fed to the cursor loader
@@ -788,9 +830,7 @@ const ManifestFile obsidianDemoWinEnFiles7[] = {
{nullptr, MTFT_AUTO}
};
-
-
-const ManifestFile obsidianRetailWinDeFiles[] = {
+const ManifestFile obsidianRetailWinDeInstalledFiles[] = {
{"Obsidian.exe", MTFT_PLAYER},
{"Obsidian.c95", MTFT_EXTENSION},
{"MCURSORS.C95", MTFT_EXTENSION},
@@ -803,6 +843,17 @@ const ManifestFile obsidianRetailWinDeFiles[] = {
{nullptr, MTFT_AUTO}
};
+const ManifestFile obsidianRetailWinDeDiscFiles[] = {
+ {"_SETUP.1", MTFT_SPECIAL},
+ {"Obsidian Data 1.MPL", MTFT_MAIN},
+ {"Obsidian Data 2.MPX", MTFT_ADDITIONAL},
+ {"Obsidian Data 3.MPX", MTFT_ADDITIONAL},
+ {"Obsidian Data 4.MPX", MTFT_ADDITIONAL},
+ {"Obsidian Data 5.MPX", MTFT_ADDITIONAL},
+ {"Obsidian Data 6.MPX", MTFT_ADDITIONAL},
+ {nullptr, MTFT_AUTO}
+};
+
const ManifestFile obsidianRetailWinItFiles[] = {
{"Obsidian.exe", MTFT_PLAYER},
{"Obsidian.c95", MTFT_EXTENSION},
@@ -980,14 +1031,22 @@ const Game games[] = {
&obsidianRetailEnSubtitlesDef,
GameDataHandlerFactory<ObsidianGameDataHandler>::create
},
- // Obsidian - Retail - Windows - German
+ // Obsidian - Retail - Windows - German - Installed
{
- MTBOOT_OBSIDIAN_RETAIL_WIN_DE,
- obsidianRetailWinDeFiles,
+ MTBOOT_OBSIDIAN_RETAIL_WIN_DE_INSTALLED,
+ obsidianRetailWinDeInstalledFiles,
obsidianRetailWinDirectories,
nullptr,
GameDataHandlerFactory<ObsidianGameDataHandler>::create
},
+ // Obsidian - Retail - Windows - German - Disc
+ {
+ MTBOOT_OBSIDIAN_RETAIL_WIN_DE_DISC,
+ obsidianRetailWinDeDiscFiles,
+ nullptr,
+ nullptr,
+ GameDataHandlerFactory<ObsidianGameDataHandler>::create
+ },
// Obsidian - Retail - Windows - Italian
{
MTBOOT_OBSIDIAN_RETAIL_WIN_IT,
diff --git a/engines/mtropolis/detection.h b/engines/mtropolis/detection.h
index c2080e41b81..c0bcdd59b4b 100644
--- a/engines/mtropolis/detection.h
+++ b/engines/mtropolis/detection.h
@@ -45,7 +45,8 @@ enum MTropolisGameBootID {
MTBOOT_OBSIDIAN_RETAIL_MAC_EN,
MTBOOT_OBSIDIAN_RETAIL_MAC_JP,
MTBOOT_OBSIDIAN_RETAIL_WIN_EN,
- MTBOOT_OBSIDIAN_RETAIL_WIN_DE,
+ MTBOOT_OBSIDIAN_RETAIL_WIN_DE_INSTALLED,
+ MTBOOT_OBSIDIAN_RETAIL_WIN_DE_DISC,
MTBOOT_OBSIDIAN_RETAIL_WIN_IT,
MTBOOT_OBSIDIAN_DEMO_MAC_EN,
MTBOOT_OBSIDIAN_DEMO_WIN_EN_1,
diff --git a/engines/mtropolis/detection_tables.h b/engines/mtropolis/detection_tables.h
index 4731b5ee53d..da69d914445 100644
--- a/engines/mtropolis/detection_tables.h
+++ b/engines/mtropolis/detection_tables.h
@@ -130,7 +130,7 @@ static const MTropolisGameDescription gameDescriptions[] = {
"obsidian",
"installed, CD",
{
- //{ "Obsidian.exe", 0, "0b50a779136ae6c9cc8bcfa3148c1127", 762368 },
+ { "Obsidian.exe", 0, "0b50a779136ae6c9cc8bcfa3148c1127", 762368 },
//{ "Obsidian.c95", 0, "fea68ff30ff319cdab30b79d2850a480", 145920 },
//{ "MCURSORS.C95", 0, "dcbe480913eebf233d0cdc33809bf048", 87040 },
{ "Obsidian Data 1.MPL", 0, "f96fc3a3a0a645009265c74c5fcb2c6a", 18972392 },
@@ -148,7 +148,32 @@ static const MTropolisGameDescription gameDescriptions[] = {
},
GID_OBSIDIAN,
0,
- MTBOOT_OBSIDIAN_RETAIL_WIN_DE,
+ MTBOOT_OBSIDIAN_RETAIL_WIN_DE_INSTALLED,
+ },
+ {
+ // Obsidian, German Windows, CD
+ // Released via the "ProSieben Mystery" series
+ {
+ "obsidian",
+ "CD",
+ {
+ { "_SETUP.1", 0, "79c3a087043eb540a6e796d89a5add47", 8586799 },
+ { "OBSIDIAN DATA 1.MPL", 0, "f96fc3a3a0a645009265c74c5fcb2c6a", 18972392 },
+ //{ "OBSIDIAN DATA 2.MPX", 0, "b42a5a7bc36b2de2f9882e8a05435857", 559682181 },
+ //{ "OBSIDIAN DATA 3.MPX", 0, "d4cb1a43d129019f8c2172a09cbedf2a", 614519546 },
+ //{ "OBSIDIAN DATA 4.MPX", 0, "ae3095e5ac0a3a8984758ee76420e9b1", 591403514 },
+ //{ "OBSIDIAN DATA 5.MPX", 0, "e8939423008a47c77735e16d7391a947", 578314080 },
+ //{ "OBSIDIAN DATA 6.MPX", 0, "1295c1fe1a9113dbf2764b7024bf759d", 552452074 },
+ AD_LISTEND
+ },
+ Common::DE_DEU,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUIO1(GAMEOPTION_AUTO_SAVE_AT_CHECKPOINTS)
+ },
+ GID_OBSIDIAN,
+ 0,
+ MTBOOT_OBSIDIAN_RETAIL_WIN_DE_DISC,
},
{
// Obsidian, Italian Windows, installed
More information about the Scummvm-git-logs
mailing list