[Scummvm-cvs-logs] SF.net SVN: scummvm:[46015] scummvm/trunk/tools/create_kyradat

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Fri Nov 20 20:32:15 CET 2009


Revision: 46015
          http://scummvm.svn.sourceforge.net/scummvm/?rev=46015&view=rev
Author:   lordhoto
Date:     2009-11-20 19:32:15 +0000 (Fri, 20 Nov 2009)

Log Message:
-----------
Merge two file game entries into one game entry, this allows for better input file validation.

Modified Paths:
--------------
    scummvm/trunk/tools/create_kyradat/create_kyradat.cpp
    scummvm/trunk/tools/create_kyradat/create_kyradat.h
    scummvm/trunk/tools/create_kyradat/extract.cpp
    scummvm/trunk/tools/create_kyradat/games.cpp

Modified: scummvm/trunk/tools/create_kyradat/create_kyradat.cpp
===================================================================
--- scummvm/trunk/tools/create_kyradat/create_kyradat.cpp	2009-11-20 19:31:33 UTC (rev 46014)
+++ scummvm/trunk/tools/create_kyradat/create_kyradat.cpp	2009-11-20 19:32:15 UTC (rev 46015)
@@ -36,6 +36,9 @@
 
 #include "md5.h"
 
+#include <string>
+#include <map>
+
 enum {
 	kKyraDatVersion = 63,
 	kIndexSize = 12
@@ -327,12 +330,6 @@
 	{ kDemoVersion, "DEM" },
 	{ kTalkieDemoVersion, "CD.DEM" },
 
-	{ kTalkieFile1, "CD" },
-	{ kTalkieFile2, "CD" },
-
-	{ kTalkieDemoFile1, "CD.DEM" },
-	{ kTalkieDemoFile2, "CD.DEM" },
-
 	{ -1, 0 }
 };
 
@@ -375,11 +372,11 @@
 uint32 getFeatures(const Game *g) {
 	uint32 features = 0;
 
-	if (g->special == kTalkieVersion || g->special == kTalkieFile1 || g->special == kTalkieFile2 || g->game == kKyra3)
+	if (g->special == kTalkieVersion || g->game == kKyra3)
 		features |= GF_TALKIE;
 	else if (g->special == kDemoVersion)
 		features |= GF_DEMO;
-	else if (g->special == kTalkieDemoVersion || g->special == kTalkieDemoFile1 || g->special == kTalkieDemoFile2)
+	else if (g->special == kTalkieDemoVersion)
 		features |= (GF_DEMO | GF_TALKIE);
 	else if (g->platform == kPlatformFMTowns || g->platform == kPlatformPC98)	// HACK
 		features |= GF_FMTOWNS;
@@ -488,6 +485,19 @@
 bool process(PAKFile &out, const Game *g, const byte *data, const uint32 size);
 const Game *findGame(const byte *buffer, const uint32 size);
 
+typedef std::map<std::string, std::string> MD5Map;
+MD5Map createMD5Sums(int files, const char * const *filenames);
+
+struct File {
+	File() : data(0), size(0) {}
+	File(uint8 *d, uint32 s) : data(d), size(s) {}
+
+	uint8 *data;
+	uint32 size;
+};
+typedef std::map<const Game *, File> GameMap;
+GameMap createGameMap(const MD5Map &map);
+
 int main(int argc, char *argv[]) {
 	if (argc < 3) {
 		printHelp(argv[0]);
@@ -538,14 +548,67 @@
 	PAKFile out;
 	out.loadFile(argv[1], false);
 
-	for (int i = 2; i < argc; ++i) {
-		FILE *input = fopen(argv[i], "rb");
+	MD5Map inputFiles = createMD5Sums(argc - 2, &argv[2]);
 
-		if (!input) {
-			warning("skipping missing file '%s'", argv[i]);
-			continue;
-		}
+	GameMap games = createGameMap(inputFiles);
 
+	// Check for unused input files
+	MD5Map unusedFiles = inputFiles;
+	for (GameMap::const_iterator i = games.begin(); i != games.end(); ++i) {
+		unusedFiles.erase(i->first->md5[0]);
+		if (i->first->md5[1])
+			unusedFiles.erase(i->first->md5[1]);
+	}
+
+	for (MD5Map::const_iterator i = unusedFiles.begin(); i != unusedFiles.end(); ++i)
+		printf("Input file '%s' with md5 sum '%s' is not known.\n", i->second.c_str(), i->first.c_str());
+
+	unusedFiles.clear();
+
+	// Process all games found
+	for (GameMap::const_iterator i = games.begin(); i != games.end(); ++i) {
+		MD5Map::const_iterator f1 = inputFiles.find(i->first->md5[0]);
+		MD5Map::const_iterator f2 = inputFiles.end();
+		if (i->first->md5[1])
+			f2 = inputFiles.find(i->first->md5[1]);
+
+		if (f2 != inputFiles.end())
+			printf("Processing files '%s' and '%s'...\n", f1->second.c_str(), f2->second.c_str());
+		else
+			printf("Processing file '%s'...\n", f1->second.c_str());
+
+		process(out, i->first, i->second.data, i->second.size);
+	}
+
+	// Free up memory
+	for (GameMap::iterator i = games.begin(); i != games.end(); ++i)
+		delete[] i->second.data;
+	games.clear();
+	inputFiles.clear();
+
+	if (!out.saveFile(argv[1]))
+	error("couldn't save changes to '%s'", argv[1]);
+
+	uint8 digest[16];
+	if (!md5_file(argv[1], digest, 0))
+		error("couldn't calc. md5 for file '%s'", argv[1]);
+	FILE *f = fopen(argv[1], "ab");
+	if (!f)
+		error("couldn't open file '%s'", argv[1]);
+	if (fwrite(digest, 1, 16, f) != 16)
+		error("couldn't write md5sum to file '%s'", argv[1]);
+	fclose(f);
+
+	return 0;
+}
+
+MD5Map createMD5Sums(int files, const char * const *filenames) {
+	MD5Map result;
+
+	while (files--) {
+		const char *inputFile = *filenames++;
+		FILE *input = fopen(inputFile, "rb");
+
 		uint32 size = fileSize(input);
 		fseek(input, 0, SEEK_SET);
 
@@ -553,7 +616,7 @@
 		assert(buffer);
 
 		if (fread(buffer, 1, size, input) != size) {
-			warning("couldn't read from file '%s', skipping it", argv[i]);
+			warning("couldn't read from file '%s', skipping it", inputFile);
 			delete[] buffer;
 			fclose(input);
 			continue;
@@ -571,46 +634,57 @@
 		for (int j = 0; j < 16; ++j)
 			sprintf(md5Str + j*2, "%02x", (int)digest[j]);
 
-		printf("Processing file '%s'...\n", argv[i]);
+		delete[] buffer;
 
-		bool variantProcessed = false;
+		result[md5Str] = inputFile;
+	}
 
-		for (const Game **game = gameDescs; *game != 0; ++game) {
-			for (const Game *variant = *game; variant->md5 != 0; ++variant) {
-				if (!std::strcmp(variant->md5, md5Str)) {
-					variantProcessed = true;
+	return result;
+}
 
-					if (!process(out, variant, buffer, size))
-						fprintf(stderr, "ERROR: couldn't process file\n");
+GameMap createGameMap(const MD5Map &map) {
+	GameMap result;
 
-					// We do not break the loop here, so all registered game
-					// variants will be processed. Like it is for example
-					// required for multi language executables.
-				}
+	for (const Game * const *g = gameDescs; *g != 0; ++g) {
+		for (const Game *sub = *g; sub->game != -1; ++sub) {
+			MD5Map::const_iterator file1 = map.find(sub->md5[0]);
+			if (file1 == map.end())
+				continue;
+
+			MD5Map::const_iterator file2 = map.end();
+			if (sub->md5[1] != 0) {
+				file2 = map.find(sub->md5[1]);
+				if (file2 == map.end())
+					continue;
 			}
-		}
 
-		if (!variantProcessed)
-			fprintf(stderr, "ERROR: File '%s' with md5 sum \"%s\" has no variant registered\n", argv[i], md5Str);
+			FILE *f1 = fopen(file1->second.c_str(), "rb");
+			FILE *f2 = 0;
 
-		// delete the current entry
-		delete[] buffer;
-	}
+			if (file2 != map.end())
+				f2 = fopen(file2->second.c_str(), "rb");
 
-	if (!out.saveFile(argv[1]))
-		error("couldn't save changes to '%s'", argv[1]);
+			uint32 file1Size = fileSize(f1);
+			uint32 file2Size = 0;
+			if (f2)
+				file2Size = fileSize(f2);
 
-	uint8 digest[16];
-	if (!md5_file(argv[1], digest, 0))
-		error("couldn't calc. md5 for file '%s'", argv[1]);
-	FILE *f = fopen(argv[1], "ab");
-	if (!f)
-		error("couldn't open file '%s'", argv[1]);
-	if (fwrite(digest, 1, 16, f) != 16)
-		error("couldn't write md5sum to file '%s'", argv[1]);
-	fclose(f);
+			uint8 *buffer = new uint8[file1Size + file2Size];
+			assert(buffer);
 
-	return 0;
+			fread(buffer, 1, file1Size, f1);
+			if (f2)
+				fread(buffer + file1Size, 1, file2Size, f2);
+
+			fclose(f1);
+			if (f2)
+				fclose(f2);
+
+			result[sub] = File(buffer, file1Size + file2Size);
+		}
+	}
+
+	return result;
 }
 
 const char *getIdString(const int id) {

Modified: scummvm/trunk/tools/create_kyradat/create_kyradat.h
===================================================================
--- scummvm/trunk/tools/create_kyradat/create_kyradat.h	2009-11-20 19:31:33 UTC (rev 46014)
+++ scummvm/trunk/tools/create_kyradat/create_kyradat.h	2009-11-20 19:32:15 UTC (rev 46015)
@@ -286,15 +286,7 @@
 enum kSpecial {
 	kTalkieVersion = 0,
 	kDemoVersion,
-	kTalkieDemoVersion,
-
-	kFile1,
-	kFile2,
-	kTalkieFile1,
-	kTalkieFile2,
-
-	kTalkieDemoFile1,
-	kTalkieDemoFile2
+	kTalkieDemoVersion
 };
 
 struct SpecialExtension {
@@ -317,12 +309,12 @@
 	int platform;
 	int special;
 
-	const char *md5;
+	const char *md5[2];
 };
 
-#define GAME_DUMMY_ENTRY { -1, -1, -1, -1, 0 }
+#define GAME_DUMMY_ENTRY { -1, -1, -1, -1, { 0, 0 } }
 
-extern const Game *gameDescs[];
+extern const Game * const gameDescs[];
 
 const int *getNeedList(const Game *g);
 

Modified: scummvm/trunk/tools/create_kyradat/extract.cpp
===================================================================
--- scummvm/trunk/tools/create_kyradat/extract.cpp	2009-11-20 19:31:33 UTC (rev 46014)
+++ scummvm/trunk/tools/create_kyradat/extract.cpp	2009-11-20 19:32:15 UTC (rev 46015)
@@ -172,7 +172,7 @@
 			fmtPatch = 2;
 		else if (id == k2SeqplayStrings)
 			fmtPatch = 3;
-	} else if (info->platform == kPlatformPC && info->special == kFile2) {
+	} else if (info->platform == kPlatformPC) {
 		if (id == k2IngamePakFiles)
 			fmtPatch = 4;
 	}
@@ -457,7 +457,7 @@
 			int v = extractHofSeqData_isSequence(ptr, info, endOffs - ptr);
 
 			if (cycle == 0 && v == 1) {
-				if ((info->platform == kPlatformPC && info->special == kFile1 && *ptr == 5) || (info->special == kDemoVersion && (ptr - data == 312))) {
+				if ((info->platform == kPlatformPC && info->special == -1 && *ptr == 5) || (info->special == kDemoVersion && (ptr - data == 312))) {
 					// patch for floppy version: skips invalid ferb sequence
 					// patch for demo: skips invalid title sequence
 					ptr += 54;

Modified: scummvm/trunk/tools/create_kyradat/games.cpp
===================================================================
--- scummvm/trunk/tools/create_kyradat/games.cpp	2009-11-20 19:31:33 UTC (rev 46014)
+++ scummvm/trunk/tools/create_kyradat/games.cpp	2009-11-20 19:32:15 UTC (rev 46015)
@@ -28,103 +28,89 @@
 
 const Game kyra1Games[] = {
 	// Demos
-	{ kKyra1, EN_ANY, kPlatformPC, kDemoVersion, "7b7504c8560ffc914d34c44c71b3094c" },
-	{ kKyra1, EN_ANY, kPlatformPC, kTalkieDemoVersion, "226fdba99cb11ef1047131d9a50e6292" },
+	{ kKyra1, EN_ANY, kPlatformPC, kDemoVersion, { "7b7504c8560ffc914d34c44c71b3094c", 0 } },
+	{ kKyra1, EN_ANY, kPlatformPC, kTalkieDemoVersion, { "226fdba99cb11ef1047131d9a50e6292", 0 } },
 
 	// Amiga
-	{ kKyra1, EN_ANY, kPlatformAmiga, -1, "b620564b6b7e0787b053ca9e35bd9f52" },
-	{ kKyra1, DE_DEU, kPlatformAmiga, -1, "ceddb4bd4df51698e3851e75106d117a" },
+	{ kKyra1, EN_ANY, kPlatformAmiga, -1, { "b620564b6b7e0787b053ca9e35bd9f52", 0 } },
+	{ kKyra1, DE_DEU, kPlatformAmiga, -1, { "ceddb4bd4df51698e3851e75106d117a", 0 } },
 
 	// Floppy
-	{ kKyra1, EN_ANY, kPlatformPC, -1, "76a4fc84e173cadb6369785787e1546e" },
-	{ kKyra1, DE_DEU, kPlatformPC, -1, "9442d6f7db6a41f3dd4aa4de5d36e107" },
-	{ kKyra1, FR_FRA, kPlatformPC, -1, "aa9d6d78d8b199deaf48efeca6d19af2" },
-	{ kKyra1, IT_ITA, kPlatformPC, -1, "5d7550306b369a3492f9f3402702477c" },
-	{ kKyra1, ES_ESP, kPlatformPC, -1, "9ff130d2558bcd674d4074849d93c362" },
+	{ kKyra1, EN_ANY, kPlatformPC, -1, { "76a4fc84e173cadb6369785787e1546e", 0 } },
+	{ kKyra1, DE_DEU, kPlatformPC, -1, { "9442d6f7db6a41f3dd4aa4de5d36e107", 0 } },
+	{ kKyra1, FR_FRA, kPlatformPC, -1, { "aa9d6d78d8b199deaf48efeca6d19af2", 0 } },
+	{ kKyra1, IT_ITA, kPlatformPC, -1, { "5d7550306b369a3492f9f3402702477c", 0 } },
+	{ kKyra1, ES_ESP, kPlatformPC, -1, { "9ff130d2558bcd674d4074849d93c362", 0 } },
 
 	// Talkie
-	{ kKyra1, EN_ANY, kPlatformPC, kTalkieVersion, "1ebc18f3e7fbb72474a55cb0fa089ed4" },
-	{ kKyra1, DE_DEU, kPlatformPC, kTalkieVersion, "c65d381184f98ac26d9efd2d45baef51" },
-	{ kKyra1, FR_FRA, kPlatformPC, kTalkieVersion, "307c5d4a554d9068ac3d326e350ae4a6" },
-	{ kKyra1, IT_ITA, kPlatformPC, kTalkieVersion, "d0f1752098236083d81b9497bd2b6989" }, // Italian fan translation
+	{ kKyra1, EN_ANY, kPlatformPC, kTalkieVersion, { "1ebc18f3e7fbb72474a55cb0fa089ed4", 0 } },
+	{ kKyra1, DE_DEU, kPlatformPC, kTalkieVersion, { "c65d381184f98ac26d9efd2d45baef51", 0 } },
+	{ kKyra1, FR_FRA, kPlatformPC, kTalkieVersion, { "307c5d4a554d9068ac3d326e350ae4a6", 0 } },
+	{ kKyra1, IT_ITA, kPlatformPC, kTalkieVersion, { "d0f1752098236083d81b9497bd2b6989", 0 } }, // Italian fan translation
 
 	// FM-TOWNS
-	{ kKyra1, EN_ANY, kPlatformFMTowns, -1, "5a3ad60ccd0f2e29463e0368cd14a60d" },
-	{ kKyra1, JA_JPN, kPlatformFMTowns, -1, "5a3ad60ccd0f2e29463e0368cd14a60d" },
+	{ kKyra1, EN_ANY, kPlatformFMTowns, -1, { "5a3ad60ccd0f2e29463e0368cd14a60d", 0 } },
+	{ kKyra1, JA_JPN, kPlatformFMTowns, -1, { "5a3ad60ccd0f2e29463e0368cd14a60d", 0 } },
 
 	// PC-98
-	{ kKyra1, JA_JPN, kPlatformPC98, -1, "b9c06ac5177f5bf1f1acc0eea3937f6d" },
+	{ kKyra1, JA_JPN, kPlatformPC98, -1, { "b9c06ac5177f5bf1f1acc0eea3937f6d", 0 } },
 
 	GAME_DUMMY_ENTRY
 };
 
 const Game kyra2Games[] = {
 	// demos
-	{ kKyra2, EN_ANY, kPlatformPC, kDemoVersion, "a620a37579dd44ab0403482285e3897f" },
+	{ kKyra2, EN_ANY, kPlatformPC, kDemoVersion, { "a620a37579dd44ab0403482285e3897f", 0 } },
 
-	{ kKyra2, EN_ANY, kPlatformPC, kTalkieDemoFile1, "85bbc1cc6c4cef6ad31fc6ee79518efb" },
-	{ kKyra2, FR_FRA, kPlatformPC, kTalkieDemoFile1, "85bbc1cc6c4cef6ad31fc6ee79518efb" },
-	{ kKyra2, DE_DEU, kPlatformPC, kTalkieDemoFile1, "85bbc1cc6c4cef6ad31fc6ee79518efb" },
-	{ kKyra2, EN_ANY, kPlatformPC, kTalkieDemoFile2, "fa54d8abfe05f9186c05f7de7eaf1480" },
-	{ kKyra2, FR_FRA, kPlatformPC, kTalkieDemoFile2, "fa54d8abfe05f9186c05f7de7eaf1480" },
-	{ kKyra2, DE_DEU, kPlatformPC, kTalkieDemoFile2, "fa54d8abfe05f9186c05f7de7eaf1480" },
+	{ kKyra2, EN_ANY, kPlatformPC, kTalkieDemoVersion, { "85bbc1cc6c4cef6ad31fc6ee79518efb", "fa54d8abfe05f9186c05f7de7eaf1480" } },
+	{ kKyra2, FR_FRA, kPlatformPC, kTalkieDemoVersion, { "85bbc1cc6c4cef6ad31fc6ee79518efb", "fa54d8abfe05f9186c05f7de7eaf1480" } },
+	{ kKyra2, DE_DEU, kPlatformPC, kTalkieDemoVersion, { "85bbc1cc6c4cef6ad31fc6ee79518efb", "fa54d8abfe05f9186c05f7de7eaf1480" } },
 
 	// floppy games
-	{ kKyra2, EN_ANY, kPlatformPC, kFile1, "9b0f5e57b5a2ed88b5b989cbb402b6c7" },
-	{ kKyra2, FR_FRA, kPlatformPC, kFile1, "df31cc9e37e1cf68df2fdc75ddf2d87b" },
-	{ kKyra2, DE_DEU, kPlatformPC, kFile1, "0ca4f9a1438264a4c63c3218e064ed3b" },
-	{ kKyra2, IT_ITA, kPlatformPC, kFile1, "178d3ab913f61bfba21d2fb196405e8c" },
-	{ kKyra2, EN_ANY, kPlatformPC, kFile2, "7c3eadbe5122722cf2e5e1611e19dfb9" },
-	{ kKyra2, FR_FRA, kPlatformPC, kFile2, "fc2c6782778e6c6d5a553d1cb73c98ad" },
-	{ kKyra2, DE_DEU, kPlatformPC, kFile2, "0d9b0eb7b0ad889ec942d74d80dde1bf" },
-	{ kKyra2, IT_ITA, kPlatformPC, kFile2, "3a61ed6b7c00ddae383a0361799e2ba6" },
+	{ kKyra2, EN_ANY, kPlatformPC, -1, { "9b0f5e57b5a2ed88b5b989cbb402b6c7", "7c3eadbe5122722cf2e5e1611e19dfb9" } },
+	{ kKyra2, FR_FRA, kPlatformPC, -1, { "df31cc9e37e1cf68df2fdc75ddf2d87b", "fc2c6782778e6c6d5a553d1cb73c98ad" } },
+	{ kKyra2, DE_DEU, kPlatformPC, -1, { "0ca4f9a1438264a4c63c3218e064ed3b", "0d9b0eb7b0ad889ec942d74d80dde1bf" } },
+	{ kKyra2, IT_ITA, kPlatformPC, -1, { "178d3ab913f61bfba21d2fb196405e8c", "3a61ed6b7c00ddae383a0361799e2ba6" } },
 
 	// talkie games
-	{ kKyra2, EN_ANY, kPlatformPC, kTalkieFile1, "85bbc1cc6c4cef6ad31fc6ee79518efb" },
-	{ kKyra2, FR_FRA, kPlatformPC, kTalkieFile1, "85bbc1cc6c4cef6ad31fc6ee79518efb" },
-	{ kKyra2, DE_DEU, kPlatformPC, kTalkieFile1, "85bbc1cc6c4cef6ad31fc6ee79518efb" },
-	{ kKyra2, IT_ITA, kPlatformPC, kTalkieFile1, "130795aa8f2333250c895dae9028b9bb" }, // Italian Fan Translation (using same offsets as English)
-	{ kKyra2, EN_ANY, kPlatformPC, kTalkieFile2, "e20d0d2e500f01e399ec588247a7e213" },
-	{ kKyra2, FR_FRA, kPlatformPC, kTalkieFile2, "e20d0d2e500f01e399ec588247a7e213" },
-	{ kKyra2, DE_DEU, kPlatformPC, kTalkieFile2, "e20d0d2e500f01e399ec588247a7e213" },
+	{ kKyra2, EN_ANY, kPlatformPC, kTalkieVersion, { "85bbc1cc6c4cef6ad31fc6ee79518efb", "e20d0d2e500f01e399ec588247a7e213" } },
+	{ kKyra2, FR_FRA, kPlatformPC, kTalkieVersion, { "85bbc1cc6c4cef6ad31fc6ee79518efb", "e20d0d2e500f01e399ec588247a7e213" } },
+	{ kKyra2, DE_DEU, kPlatformPC, kTalkieVersion, { "85bbc1cc6c4cef6ad31fc6ee79518efb", "e20d0d2e500f01e399ec588247a7e213" } },
+	{ kKyra2, IT_ITA, kPlatformPC, kTalkieVersion, { "130795aa8f2333250c895dae9028b9bb", "e20d0d2e500f01e399ec588247a7e213" } }, // Italian Fan Translation (using same offsets as English)
 
 	// FM-TOWNS games
-	{ kKyra2, EN_ANY, kPlatformFMTowns, kFile1, "74f50d79c919cc8e7196c24942ce43d7" },
-	{ kKyra2, JA_JPN, kPlatformFMTowns, kFile1, "74f50d79c919cc8e7196c24942ce43d7" },
-	{ kKyra2, EN_ANY, kPlatformFMTowns, kFile2, "a9a7fd4f05d00090e9e8bda073e6d431" },
-	{ kKyra2, JA_JPN, kPlatformFMTowns, kFile2, "a9a7fd4f05d00090e9e8bda073e6d431" },
+	{ kKyra2, EN_ANY, kPlatformFMTowns, -1, { "74f50d79c919cc8e7196c24942ce43d7", "a9a7fd4f05d00090e9e8bda073e6d431" } },
+	{ kKyra2, JA_JPN, kPlatformFMTowns, -1, { "74f50d79c919cc8e7196c24942ce43d7", "a9a7fd4f05d00090e9e8bda073e6d431" } },
 
 	GAME_DUMMY_ENTRY
 };
 
 const Game kyra3Games[] = {
 	// DOS CD (multi language version, with no language specific strings)
-	{ kKyra3, UNK_LANG, kPlatformPC, -1, "bf68701eb591d0b72219f314c0d32688" },
+	{ kKyra3, UNK_LANG, kPlatformPC, -1, { "bf68701eb591d0b72219f314c0d32688", 0 } },
 
 	GAME_DUMMY_ENTRY
 };
 
 const Game lolGames[] = {
 	// DOS demo
-	{ kLol, EN_ANY, kPlatformPC, kDemoVersion, "30bb5af87d38adb47d3e6ce06b1cb042" },
+	{ kLol, EN_ANY, kPlatformPC, kDemoVersion, { "30bb5af87d38adb47d3e6ce06b1cb042", 0 } },
 
 	// DOS floppy (no language specifc strings)
-	{ kLol, DE_DEU, kPlatformPC, -1, "6b843869772c1b779e1386be868c15dd" },
+	{ kLol, DE_DEU, kPlatformPC, -1, { "6b843869772c1b779e1386be868c15dd", 0 } },
 
 	// PC98 (no language specifc strings)
-	{ kLol, JA_JPN, kPlatformPC98, kFile1, "6d5bd4a2f5ce433365734ca6b7a8d984" },
-	{ kLol, JA_JPN, kPlatformPC98, kFile2, "1b0a457c48ae6908da301b656fe0aab4" },
+	{ kLol, JA_JPN, kPlatformPC98, -1, { "6d5bd4a2f5ce433365734ca6b7a8d984", "1b0a457c48ae6908da301b656fe0aab4" } },
 
 	// DOS CD (multi language version, with no language specific strings)
-	{ kLol, UNK_LANG, kPlatformPC, kTalkieFile1, "9d1778314de80598c0b0d032e2a1a1cf" },
-	{ kLol, UNK_LANG, kPlatformPC, kTalkieFile2, "263998ec600afca1cc7b935c473df670" },
+	{ kLol, UNK_LANG, kPlatformPC, kTalkieVersion, { "9d1778314de80598c0b0d032e2a1a1cf", "263998ec600afca1cc7b935c473df670" } },
 
 	GAME_DUMMY_ENTRY
 };
 
 } // end of anonymous namespace
 
-const Game *gameDescs[] = {
+const Game * const gameDescs[] = {
 	kyra1Games,
 	kyra2Games,
 	kyra3Games,
@@ -575,7 +561,7 @@
 	-1
 };
 
-const int kyra2CDFile1Need[] = {
+const int kyra2CDNeed[] = {
 	k2SeqplayPakFiles,
 	k2SeqplayCredits,
 	k2SeqplayCreditsSpecial,
@@ -585,10 +571,6 @@
 	k2SeqplaySeqData,
 	k2SeqplayIntroTracks,
 	k2SeqplayFinaleTracks,
-	-1
-};
-
-const int kyra2CDFile2Need[] = {
 	k2IngameSfxFiles,
 	k2IngameSfxIndex,
 	k2IngameTracks,
@@ -598,6 +580,15 @@
 };
 
 const int kyra2CDDemoNeed[] = {
+	k2SeqplayPakFiles,
+	k2SeqplayCredits,
+	k2SeqplayCreditsSpecial,
+	k2SeqplayStrings,
+	k2SeqplaySfxFiles,
+	k2SeqplayTlkFiles,
+	k2SeqplaySeqData,
+	k2SeqplayIntroTracks,
+	k2SeqplayFinaleTracks,
 	k2IngameSfxFiles,
 	k2IngameSfxIndex,
 	k2IngameTracks,
@@ -607,17 +598,13 @@
 	-1
 };
 
-const int kyra2FloppyFile1Need[] = {
+const int kyra2FloppyNeed[] = {
 	k2SeqplayPakFiles,
 	k2SeqplayStrings,
 	k2SeqplaySfxFiles,
 	k2SeqplayIntroTracks,
 	k2SeqplayFinaleTracks,
 	k2SeqplaySeqData,
-	-1
-};
-
-const int kyra2FloppyFile2Need[] = {
 	k2IngamePakFiles,
 	k2IngameSfxFiles,
 	k2IngameSfxIndex,
@@ -627,17 +614,13 @@
 	-1
 };
 
-const int kyra2TownsFile1Need[] = {
+const int kyra2TownsNeed[] = {
 	k2SeqplayPakFiles,
 	k2SeqplayStrings,
 	k2SeqplaySfxFiles,
 	k2SeqplaySeqData,
 	k2SeqplayIntroCDA,
 	k2SeqplayFinaleCDA,
-	-1
-};
-
-const int kyra2TownsFile2Need[] = {
 	k2IngamePakFiles,
 	k2IngameSfxFilesTns,
 	k2IngameSfxIndex,
@@ -657,11 +640,6 @@
 	-1
 };
 
-const int kyra2TlkDemoNeed[] = {
-	k2IngameTlkDemoStrings,
-	-1
-};
-
 const int kyra3Need[] = {
 	k3MainMenuStrings,
 	k3MusicFiles,
@@ -758,7 +736,7 @@
 	-1
 };
 
-const int lolPC98File1Need[] = {
+const int lolPC98Need[] = {
 	kLolIngamePakFiles,
 
 	kLolCharacterDefs,
@@ -834,21 +812,13 @@
 	kLolLightningDefs,
 	kLolFireballCoords,
 
-	-1
-};
-
-const int lolPC98File2Need[] = {
 	kLolCredits,
 
 	-1
 };
 
-const int lolCDFile1Need[] = {
+const int lolCDNeed[] = {
 	kLolHistory,
-	-1
-};
-
-const int lolCDFile2Need[] = {
 	kLolCharacterDefs,
 	kLolIngameSfxFiles,
 	kLolIngameSfxIndex,
@@ -927,7 +897,6 @@
 	kLolHealShapeFrames,
 	kLolLightningDefs,
 	kLolFireballCoords,
-
 	-1
 };
 
@@ -962,17 +931,13 @@
 
 	{ kKyra1, kPlatformPC, kTalkieDemoVersion, kyra1DemoCDNeed },
 
-	{ kKyra2, kPlatformPC, kFile1, kyra2FloppyFile1Need },
-	{ kKyra2, kPlatformPC, kFile2, kyra2FloppyFile2Need },
+	{ kKyra2, kPlatformPC, -1, kyra2FloppyNeed },
 
-	{ kKyra2, kPlatformPC, kTalkieFile1, kyra2CDFile1Need },
-	{ kKyra2, kPlatformPC, kTalkieFile2, kyra2CDFile2Need },
+	{ kKyra2, kPlatformPC, kTalkieVersion, kyra2CDNeed },
 
-	{ kKyra2, kPlatformPC, kTalkieDemoFile1, kyra2CDFile1Need },
-	{ kKyra2, kPlatformPC, kTalkieDemoFile2, kyra2CDDemoNeed },
+	{ kKyra2, kPlatformPC, kTalkieDemoVersion, kyra2CDDemoNeed },
 
-	{ kKyra2, kPlatformFMTowns, kFile1, kyra2TownsFile1Need },
-	{ kKyra2, kPlatformFMTowns, kFile2, kyra2TownsFile2Need },
+	{ kKyra2, kPlatformFMTowns, -1, kyra2TownsNeed },
 
 	{ kKyra2, kPlatformPC, kDemoVersion, kyra2DemoNeed },
 
@@ -981,11 +946,9 @@
 	{ kKyra3, kPlatformPC, -1, kyra3Need },
 
 	{ kLol, kPlatformPC, -1, lolFloppyNeed },
-	{ kLol, kPlatformPC98, kFile1, lolPC98File1Need },
-	{ kLol, kPlatformPC98, kFile2, lolPC98File2Need },
+	{ kLol, kPlatformPC98, -1, lolPC98Need },
 
-	{ kLol, kPlatformPC, kTalkieFile1, lolCDFile1Need },
-	{ kLol, kPlatformPC, kTalkieFile2, lolCDFile2Need },
+	{ kLol, kPlatformPC, kTalkieVersion, lolCDNeed },
 
 	{ -1, -1, -1, 0 }
 };


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list