[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