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

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Thu Sep 17 14:02:17 CEST 2009


Revision: 44143
          http://scummvm.svn.sourceforge.net/scummvm/?rev=44143&view=rev
Author:   lordhoto
Date:     2009-09-17 12:02:17 +0000 (Thu, 17 Sep 2009)

Log Message:
-----------
- Cleanup multi language game processing
- Vast move of static data tables to new files
- Other cleanup

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/module.mk
    scummvm/trunk/tools/create_kyradat/tables.h

Added Paths:
-----------
    scummvm/trunk/tools/create_kyradat/games.cpp
    scummvm/trunk/tools/create_kyradat/tables.cpp

Removed Paths:
-------------
    scummvm/trunk/tools/create_kyradat/misc.h
    scummvm/trunk/tools/create_kyradat/providers.h

Modified: scummvm/trunk/tools/create_kyradat/create_kyradat.cpp
===================================================================
--- scummvm/trunk/tools/create_kyradat/create_kyradat.cpp	2009-09-17 11:01:08 UTC (rev 44142)
+++ scummvm/trunk/tools/create_kyradat/create_kyradat.cpp	2009-09-17 12:02:17 UTC (rev 44143)
@@ -29,7 +29,7 @@
 #include "create_kyradat.h"
 
 #include "tables.h"
-#include "providers.h"
+#include "extract.h"
 
 #include "md5.h"
 
@@ -38,59 +38,6 @@
 	kIndexSize = 12
 };
 
-// tables
-
-#include "misc.h"
-
-bool extractRaw(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-bool extractStrings(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-bool extractStrings10(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-bool extractRooms(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-bool extractShapes(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-bool extractAmigaSfx(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-bool extractWdSfx(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-
-bool extractHofSeqData(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-bool extractHofShapeAnimDataV1(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-bool extractHofShapeAnimDataV2(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-
-bool extractStringsWoSuffix(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-bool extractPaddedStrings(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-bool extractRaw16to8(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-bool extractMrShapeAnimData(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-bool extractRaw16(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-bool extractRaw32(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-bool extractLolButtonDefs(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-
-void createFilename(char *dstFilename, const int gid, const int lang, const int special, const char *filename);
-void createLangFilename(char *dstFilename, const int gid, const int lang, const int special, const char *filename);
-
-const ExtractType extractTypeTable[] = {
-	{ kTypeLanguageList, extractStrings, createLangFilename },
-	{ kTypeStringList, extractStrings, createFilename },
-	{ kTypeRoomList, extractRooms, createFilename },
-	{ kTypeShapeList, extractShapes, createFilename },
-	{ kTypeRawData, extractRaw, createFilename },
-	{ kTypeAmigaSfxTable, extractAmigaSfx, createFilename },
-	{ kTypeTownsWDSfxTable, extractWdSfx, createFilename },
-
-	{ k2TypeSeqData, extractHofSeqData, createFilename },
-	{ k2TypeShpDataV1, extractHofShapeAnimDataV1, createFilename },
-	{ k2TypeShpDataV2, extractHofShapeAnimDataV2, createFilename },
-	{ k2TypeSoundList, extractStringsWoSuffix, createFilename },
-	{ k2TypeLangSoundList, extractStringsWoSuffix, createLangFilename },
-	{ k2TypeSize10StringList, extractStrings10, createFilename },
-	{ k2TypeSfxList, extractPaddedStrings, createFilename },
-	{ k3TypeRaw16to8, extractRaw16to8, createFilename },
-	{ k3TypeShpData, extractMrShapeAnimData, createFilename },
-
-	{ kLolTypeRaw16, extractRaw16, createFilename },
-	{ kLolTypeRaw32, extractRaw32, createFilename },
-	{ kLolTypeButtonDef, extractLolButtonDefs, createFilename },
-
-	{ -1, 0, 0}
-};
-
 const ExtractFilename extractFilenames[] = {
 	// INTRO / OUTRO sequences
 	{ kForestSeq, kTypeRawData, "FOREST.SEQ" },
@@ -349,16 +296,6 @@
 	return 0;
 }
 
-// type processing
-
-const ExtractType *findExtractType(const int type) {
-	for (const ExtractType *i = extractTypeTable; i->type != -1; ++i) {
-		if (i->type == type)
-			return i;
-	}
-	return 0;
-}
-
 // filename processing
 
 bool getFilename(char *dstFilename, const Game *g, const int id) {
@@ -372,43 +309,49 @@
 	return true;
 }
 
-void createFilename(char *dstFilename, const int gid, const int lang, const int special, const char *filename) {
-	strcpy(dstFilename, filename);
+// misc tables
 
-	static const char *gidExtensions[] = { "", ".K2", ".K3", 0, ".LOL" };
-	strcat(dstFilename, gidExtensions[gid]);
+const SpecialExtension specialTable[] = {
+	{ kTalkieVersion, "CD" },
+	{ kDemoVersion, "DEM" },
+	{ kDemoCDVersion, "CD.DEM" },
+	{ kFMTownsVersionE , "TNS" },
+	{ kFMTownsVersionJ, "TNS" },
+	{ kAmigaVersion, "AMG" },
 
-	for (const SpecialExtension *specialE = specialTable; specialE->special != -1; ++specialE) {
-		if (specialE->special == special) {
-			strcat(dstFilename, ".");
-			strcat(dstFilename, specialE->ext);
-			break;
-		}
-	}
-}
+	{ k2CDFile1E, "CD" },
+	{ k2CDFile1F, "CD" },
+	{ k2CDFile1G, "CD" },
+	{ k2CDFile1I, "CD" },
+	{ k2CDFile2E, "CD" },
+	{ k2CDFile2F, "CD" },
+	{ k2CDFile2G, "CD" },
+	{ k2CDDemoE, "CD" },
+	{ k2CDDemoF, "CD" },
+	{ k2CDDemoG, "CD" },
 
-void createLangFilename(char *dstFilename, const int gid, const int lang, const int special, const char *filename) {
-	strcpy(dstFilename, filename);
+	{ k2TownsFile1E, "TNS" },
+	{ k2TownsFile1J, "TNS" },
+	{ k2TownsFile2E, "TNS" },
+	{ k2TownsFile2J, "TNS" },
+	{ k2DemoVersion, "DEM" },
+	{ k2DemoLol, "DEM" },
 
-	for (const Language *langE = languageTable; langE->lang != -1; ++langE) {
-		if (langE->lang == lang) {
-			strcat(dstFilename, ".");
-			strcat(dstFilename, langE->ext);
-			break;
-		}
-	}
+	{ kLolCD1, "CD" },
+	{ kLolCD2, "CD" },
 
-	static const char *gidExtensions[] = { "", ".K2", ".K3", 0, ".LOL" };
-	strcat(dstFilename, gidExtensions[gid]);
+	{ -1, 0 }
+};
 
-	for (const SpecialExtension *specialE = specialTable; specialE->special != -1; ++specialE) {
-		if (specialE->special == special) {
-			strcat(dstFilename, ".");
-			strcat(dstFilename, specialE->ext);
-			break;
-		}
-	}
-}
+const Language languageTable[] = {
+	{ EN_ANY, "ENG" },
+	{ DE_DEU, "GER" },
+	{ FR_FRA, "FRE" },
+	{ IT_ITA, "ITA" },
+	{ ES_ESP, "SPA" },
+	{ JA_JPN, "JPN" },
+	{ -1, 0 }
+};
 
 // index generation
 
@@ -568,34 +511,40 @@
 		}
 		fclose(input);
 
-		const Game *g = findGame(buffer, size);
-		if (!g) {
-			warning("skipping unknown file '%s'", argv[i]);
-			delete[] buffer;
-			continue;
-		}
+		md5_context ctx;
+		uint8 digest[16];
+		char md5Str[33];
 
+		md5_starts(&ctx);
+		md5_update(&ctx, buffer, size);
+		md5_finish(&ctx, digest);
+
+		for (int j = 0; j < 16; ++j)
+			sprintf(md5Str + j*2, "%02x", (int)digest[j]);
+
 		printf("Processing file '%s'...\n", argv[i]);
 
-		if (!process(out, g, buffer, size))
-			fprintf(stderr, "ERROR: couldn't process file\n");
+		bool variantProcessed = false;
 
-		if (g->special == kFMTownsVersionE || g->special == k2TownsFile1E || g->special == k2TownsFile2E ||
-			g->special == k2CDFile1E || g->special == k2CDFile2E || g->special == k2CDDemoE) {
-			// This is for executables which contain support for at least 2 languages
-			// The English and non language specific data has now been extracted.
-			// We switch to the second language and continue extraction.
-			if (!process(out, ++g, buffer, size))
-				fprintf(stderr, "ERROR: couldn't process file\n");
-		}
+		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;
 
-		if (g->special == k2CDFile1F || g->special == k2CDFile2F || g->special == k2CDDemoF) {
-			// This is for executables which contain support for 3 languages.
-			// We switch to the third language and continue extraction.
-			if (!process(out, ++g, buffer, size))
-				fprintf(stderr, "ERROR: couldn't process file\n");
+					if (!process(out, variant, buffer, size))
+						fprintf(stderr, "ERROR: couldn't process file\n");
+
+					// 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.
+				}
+			}
 		}
 
+		if (!variantProcessed)
+			fprintf(stderr, "ERROR: File '%s' with md5 sum \"%s\" has no variant registered\n", argv[i], md5Str);
+
+		// delete the current entry
 		delete[] buffer;
 	}
 
@@ -615,15 +564,6 @@
 	return 0;
 }
 
-const int *getNeedList(const Game *g) {
-	for (const GameNeed *need = gameNeedTable; need->game != -1; ++need) {
-		if (need->game == g->game && need->special == g->special)
-			return need->entries;
-	}
-
-	return 0;
-}
-
 const char *getIdString(const int id) {
 	switch (id) {
 	case kForestSeq:
@@ -1252,36 +1192,3 @@
 	return true;
 }
 
-// game data detection
-
-const Game *gameDescs[] = {
-	kyra1Games,
-	kyra2Games,
-	kyra3Games,
-	lolGames,
-	0
-};
-
-const Game *findGame(const byte *buffer, const uint32 size) {
-	md5_context ctx;
-	uint8 digest[16];
-	char md5str[33];
-
-	md5_starts(&ctx);
-	md5_update(&ctx, buffer, size);
-	md5_finish(&ctx, digest);
-
-	for (int j = 0; j < 16; ++j) {
-		sprintf(md5str + j*2, "%02x", (int)digest[j]);
-	}
-
-	for (const Game **i = gameDescs; *i != 0; ++i) {
-		for (const Game *p = *i; p->game != -1; ++p) {
-			if (strcmp(md5str, p->md5) == 0)
-				return p;
-		}
-	}
-
-	printf("file is not supported (unknown md5 \"%s\")\n", md5str);
-	return 0;
-}

Modified: scummvm/trunk/tools/create_kyradat/create_kyradat.h
===================================================================
--- scummvm/trunk/tools/create_kyradat/create_kyradat.h	2009-09-17 11:01:08 UTC (rev 44142)
+++ scummvm/trunk/tools/create_kyradat/create_kyradat.h	2009-09-17 12:02:17 UTC (rev 44143)
@@ -32,6 +32,8 @@
 	const char *ext;
 };
 
+extern const Language languageTable[];
+
 enum kExtractID {
 	kForestSeq = 1,
 	kKallakWritingSeq,
@@ -268,20 +270,6 @@
 	kMaxResIDs
 };
 
-struct ExtractEntrySearchData {
-	int lang;
-	int platform;
-
-	SearchData hint;
-};
-
-#define EXTRACT_END_ENTRY { UNK_LANG, kPlatformUnknown, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }
-
-struct ExtractEntry {
-	int id;
-	const ExtractEntrySearchData *providers;
-};
-
 struct ExtractFilename {
 	int id;
 	int type;
@@ -333,6 +321,8 @@
 	const char *ext;
 };
 
+extern const SpecialExtension specialTable[];
+
 enum kGame {
 	kKyra1 = 0,
 	kKyra2 = 1,
@@ -351,42 +341,8 @@
 
 #define GAME_DUMMY_ENTRY { -1, -1, -1, -1, 0 }
 
-struct GameNeed {
-	int game;
-	int special;
+extern const Game *gameDescs[];
 
-	const int *entries;
-};
+const int *getNeedList(const Game *g);
 
-enum kExtractType {
-	kTypeLanguageList = 0,
-	kTypeStringList,
-	kTypeRoomList,
-	kTypeShapeList,
-	kTypeRawData,
-	kTypeAmigaSfxTable,
-	kTypeTownsWDSfxTable,
-
-	k2TypeSeqData,
-	k2TypeShpDataV1,
-	k2TypeShpDataV2,
-	k2TypeSoundList,
-	k2TypeLangSoundList,
-	k2TypeSize10StringList,
-	k2TypeSfxList,
-
-	k3TypeRaw16to8,
-	k3TypeShpData,
-
-	kLolTypeRaw16,
-	kLolTypeRaw32,
-	kLolTypeButtonDef
-};
-
-struct ExtractType {
-	int type;
-	bool (*extract)(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
-	void (*createFilename)(char *dstFilename, const int gid, const int lang, const int special, const char *filename);
-};
-
 #endif

Modified: scummvm/trunk/tools/create_kyradat/extract.cpp
===================================================================
--- scummvm/trunk/tools/create_kyradat/extract.cpp	2009-09-17 11:01:08 UTC (rev 44142)
+++ scummvm/trunk/tools/create_kyradat/extract.cpp	2009-09-17 12:02:17 UTC (rev 44143)
@@ -22,7 +22,124 @@
 
 
 #include "create_kyradat.h"
+#include "extract.h"
 
+// Filename creation
+
+void createFilename(char *dstFilename, const int gid, const int lang, const int special, const char *filename);
+
+namespace {
+
+void createLangFilename(char *dstFilename, const int gid, const int lang, const int special, const char *filename);
+
+// Extraction function prototypes 
+
+bool extractRaw(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+bool extractStrings(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+bool extractStrings10(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+bool extractRooms(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+bool extractShapes(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+bool extractAmigaSfx(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+bool extractWdSfx(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+
+bool extractHofSeqData(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+bool extractHofShapeAnimDataV1(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+bool extractHofShapeAnimDataV2(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+
+bool extractStringsWoSuffix(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+bool extractPaddedStrings(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+bool extractRaw16to8(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+bool extractMrShapeAnimData(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+bool extractRaw16(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+bool extractRaw32(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+bool extractLolButtonDefs(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang);
+
+// Extraction type table
+
+const ExtractType extractTypeTable[] = {
+	{ kTypeLanguageList, extractStrings, createLangFilename },
+	{ kTypeStringList, extractStrings, createFilename },
+	{ kTypeRoomList, extractRooms, createFilename },
+	{ kTypeShapeList, extractShapes, createFilename },
+	{ kTypeRawData, extractRaw, createFilename },
+	{ kTypeAmigaSfxTable, extractAmigaSfx, createFilename },
+	{ kTypeTownsWDSfxTable, extractWdSfx, createFilename },
+
+	{ k2TypeSeqData, extractHofSeqData, createFilename },
+	{ k2TypeShpDataV1, extractHofShapeAnimDataV1, createFilename },
+	{ k2TypeShpDataV2, extractHofShapeAnimDataV2, createFilename },
+	{ k2TypeSoundList, extractStringsWoSuffix, createFilename },
+	{ k2TypeLangSoundList, extractStringsWoSuffix, createLangFilename },
+	{ k2TypeSize10StringList, extractStrings10, createFilename },
+	{ k2TypeSfxList, extractPaddedStrings, createFilename },
+	{ k3TypeRaw16to8, extractRaw16to8, createFilename },
+	{ k3TypeShpData, extractMrShapeAnimData, createFilename },
+
+	{ kLolTypeRaw16, extractRaw16, createFilename },
+	{ kLolTypeRaw32, extractRaw32, createFilename },
+	{ kLolTypeButtonDef, extractLolButtonDefs, createFilename },
+
+	{ -1, 0, 0}
+};
+
+} // end of anonymous namespace
+
+void createFilename(char *dstFilename, const int gid, const int lang, const int special, const char *filename) {
+	strcpy(dstFilename, filename);
+
+	static const char *gidExtensions[] = { "", ".K2", ".K3", 0, ".LOL" };
+	strcat(dstFilename, gidExtensions[gid]);
+
+	for (const SpecialExtension *specialE = specialTable; specialE->special != -1; ++specialE) {
+		if (specialE->special == special) {
+			strcat(dstFilename, ".");
+			strcat(dstFilename, specialE->ext);
+			break;
+		}
+	}
+}
+
+namespace {
+
+void createLangFilename(char *dstFilename, const int gid, const int lang, const int special, const char *filename) {
+	strcpy(dstFilename, filename);
+
+	for (const Language *langE = languageTable; langE->lang != -1; ++langE) {
+		if (langE->lang == lang) {
+			strcat(dstFilename, ".");
+			strcat(dstFilename, langE->ext);
+			break;
+		}
+	}
+
+	static const char *gidExtensions[] = { "", ".K2", ".K3", 0, ".LOL" };
+	strcat(dstFilename, gidExtensions[gid]);
+
+	for (const SpecialExtension *specialE = specialTable; specialE->special != -1; ++specialE) {
+		if (specialE->special == special) {
+			strcat(dstFilename, ".");
+			strcat(dstFilename, specialE->ext);
+			break;
+		}
+	}
+}
+
+} // end of anonymous namespace
+
+// misc
+
+const ExtractType *findExtractType(const int type) {
+	for (const ExtractType *i = extractTypeTable; i->type != -1; ++i) {
+		if (i->type == type)
+			return i;
+	}
+	return 0;
+}
+
+// Extractor implementation
+
+namespace {
+
 bool extractRaw(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int id, int lang) {
 	uint8 *buffer = new uint8[size];
 	assert(buffer);
@@ -823,3 +940,5 @@
 	return out.addFile(filename, buffer, outsize);
 }
 
+} // end of anonymous namespace
+

Copied: scummvm/trunk/tools/create_kyradat/games.cpp (from rev 44142, scummvm/trunk/tools/create_kyradat/misc.h)
===================================================================
--- scummvm/trunk/tools/create_kyradat/games.cpp	                        (rev 0)
+++ scummvm/trunk/tools/create_kyradat/games.cpp	2009-09-17 12:02:17 UTC (rev 44143)
@@ -0,0 +1,810 @@
+/* ScummVM Tools
+ * Copyright (C) 2009 The ScummVM project
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "create_kyradat.h"
+
+// Game tables
+
+namespace {
+
+const Game kyra1Games[] = {
+	// Demos
+	{ kKyra1, EN_ANY, kPlatformPC, kDemoVersion, "7b7504c8560ffc914d34c44c71b3094c" },
+	{ kKyra1, EN_ANY, kPlatformPC, kDemoCDVersion, "226fdba99cb11ef1047131d9a50e6292" },
+
+	// Amiga
+	{ kKyra1, EN_ANY, kPlatformAmiga, kAmigaVersion, "b620564b6b7e0787b053ca9e35bd9f52" },
+
+	// 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" },
+
+	// 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
+
+	// FM-TOWNS
+	{ kKyra1, EN_ANY, kPlatformFMTowns, kFMTownsVersionE, "5a3ad60ccd0f2e29463e0368cd14a60d" },
+	{ kKyra1, JA_JPN, kPlatformFMTowns, kFMTownsVersionJ, "5a3ad60ccd0f2e29463e0368cd14a60d" },
+
+	GAME_DUMMY_ENTRY
+};
+
+const Game kyra2Games[] = {
+	// demos
+	{ kKyra2, EN_ANY, kPlatformPC, k2DemoVersion, "a620a37579dd44ab0403482285e3897f" },
+	{ kKyra2, EN_ANY, kPlatformPC, k2CDDemoE, "fa54d8abfe05f9186c05f7de7eaf1480" },
+	{ kKyra2, FR_FRA, kPlatformPC, k2CDDemoF, "fa54d8abfe05f9186c05f7de7eaf1480" },
+	{ kKyra2, DE_DEU, kPlatformPC, k2CDDemoG, "fa54d8abfe05f9186c05f7de7eaf1480" },
+
+	// floppy games
+	{ kKyra2, EN_ANY, kPlatformPC, k2FloppyFile1, "9b0f5e57b5a2ed88b5b989cbb402b6c7" },
+	{ kKyra2, FR_FRA, kPlatformPC, k2FloppyFile1, "df31cc9e37e1cf68df2fdc75ddf2d87b" },
+	{ kKyra2, DE_DEU, kPlatformPC, k2FloppyFile1, "0ca4f9a1438264a4c63c3218e064ed3b" },
+	{ kKyra2, IT_ITA, kPlatformPC, k2FloppyFile1, "178d3ab913f61bfba21d2fb196405e8c" },
+	{ kKyra2, EN_ANY, kPlatformPC, k2FloppyFile2, "7c3eadbe5122722cf2e5e1611e19dfb9" },
+	{ kKyra2, FR_FRA, kPlatformPC, k2FloppyFile2, "fc2c6782778e6c6d5a553d1cb73c98ad" },
+	{ kKyra2, DE_DEU, kPlatformPC, k2FloppyFile2, "0d9b0eb7b0ad889ec942d74d80dde1bf" },
+	{ kKyra2, IT_ITA, kPlatformPC, k2FloppyFile2, "3a61ed6b7c00ddae383a0361799e2ba6" },
+
+	// talkie games
+	{ kKyra2, EN_ANY, kPlatformPC, k2CDFile1E, "85bbc1cc6c4cef6ad31fc6ee79518efb" },
+	{ kKyra2, FR_FRA, kPlatformPC, k2CDFile1F, "85bbc1cc6c4cef6ad31fc6ee79518efb" },
+	{ kKyra2, DE_DEU, kPlatformPC, k2CDFile1G, "85bbc1cc6c4cef6ad31fc6ee79518efb" },
+	{ kKyra2, EN_ANY, kPlatformPC, k2CDFile2E, "e20d0d2e500f01e399ec588247a7e213" },
+	{ kKyra2, FR_FRA, kPlatformPC, k2CDFile2F, "e20d0d2e500f01e399ec588247a7e213" },
+	{ kKyra2, DE_DEU, kPlatformPC, k2CDFile2G, "e20d0d2e500f01e399ec588247a7e213" },
+	{ kKyra2, IT_ITA, kPlatformPC, k2CDFile1I, "130795aa8f2333250c895dae9028b9bb" }, // Italian Fan Translation (using same offsets as English)
+
+	// FM-TOWNS games
+	{ kKyra2, EN_ANY, kPlatformFMTowns, k2TownsFile1E, "74f50d79c919cc8e7196c24942ce43d7" },
+	{ kKyra2, JA_JPN, kPlatformFMTowns, k2TownsFile1J, "74f50d79c919cc8e7196c24942ce43d7" },
+	{ kKyra2, EN_ANY, kPlatformFMTowns, k2TownsFile2E, "a9a7fd4f05d00090e9e8bda073e6d431" },
+	{ kKyra2, JA_JPN, kPlatformFMTowns, k2TownsFile2J, "a9a7fd4f05d00090e9e8bda073e6d431" },
+
+	GAME_DUMMY_ENTRY
+};
+
+const Game kyra3Games[] = {
+	{ kKyra3, EN_ANY, kPlatformPC, -1, "bf68701eb591d0b72219f314c0d32688" },
+	GAME_DUMMY_ENTRY
+};
+
+const Game lolGames[] = {
+	// DOS demo
+	{ kLol, EN_ANY, kPlatformPC, k2DemoLol, "30bb5af87d38adb47d3e6ce06b1cb042" },
+
+	// DOS floppy
+	{ kLol, EN_ANY, kPlatformPC, -1, "6b843869772c1b779e1386be868c15dd" },
+
+	// DOS CD
+	{ kLol, EN_ANY, kPlatformPC, kLolCD1, "9d1778314de80598c0b0d032e2a1a1cf" },
+	{ kLol, EN_ANY, kPlatformPC, kLolCD2, "263998ec600afca1cc7b935c473df670" },
+
+	GAME_DUMMY_ENTRY
+};
+
+} // end of anonymous namespace
+
+const Game *gameDescs[] = {
+	kyra1Games,
+	kyra2Games,
+	kyra3Games,
+	lolGames,
+	0
+};
+
+// Need tables
+
+namespace {
+
+const int kyra1FloppyNeed[] = {
+	kKallakWritingSeq,
+	kMalcolmTreeSeq,
+	kWestwoodLogoSeq,
+	kKyrandiaLogoSeq,
+	kKallakMalcolmSeq,
+	kForestSeq,
+	kIntroCPSStrings,
+	kIntroCOLStrings,
+	kIntroWSAStrings,
+	kIntroStrings,
+	kRoomList,
+	kRoomFilenames,
+	kCharacterImageFilenames,
+	kDefaultShapes,
+	kItemNames,
+	kTakenStrings,
+	kPlacedStrings,
+	kDroppedStrings,
+	kNoDropStrings,
+	kAmuleteAnimSeq,
+	kPaletteList1,
+	kPaletteList2,
+	kPaletteList3,
+	kPaletteList4,
+	kPaletteList5,
+	kPaletteList6,
+	kPaletteList7,
+	kPaletteList8,
+	kPaletteList9,
+	kPaletteList10,
+	kPaletteList11,
+	kPaletteList12,
+	kPaletteList13,
+	kPaletteList14,
+	kPaletteList15,
+	kPaletteList16,
+	kPaletteList17,
+	kPaletteList18,
+	kPaletteList19,
+	kPaletteList20,
+	kPaletteList21,
+	kPaletteList22,
+	kPaletteList23,
+	kPaletteList24,
+	kPaletteList25,
+	kPaletteList26,
+	kPaletteList27,
+	kPaletteList28,
+	kPaletteList29,
+	kPaletteList30,
+	kPaletteList31,
+	kPaletteList32,
+	kPaletteList33,
+	kPutDownString,
+	kWaitAmuletString,
+	kBlackJewelString,
+	kHealingTipString,
+	kPoisonGoneString,
+	kHealing1Shapes,
+	kHealing2Shapes,
+	kThePoisonStrings,
+	kFluteStrings,
+	kPoisonDeathShapes,
+	kFluteShapes,
+	kWinter1Shapes,
+	kWinter2Shapes,
+	kWinter3Shapes,
+	kDrinkShapes,
+	kWispShapes,
+	kMagicAnimShapes,
+	kBranStoneShapes,
+	kWispJewelStrings,
+	kMagicJewelStrings,
+	kFlaskFullString,
+	kFullFlaskString,
+	kOutroReunionSeq,
+	kOutroHomeString,
+	kVeryCleverString,
+	kGUIStrings,
+	kNewGameString,
+	kConfigStrings,
+	kAudioTracks,
+	kAudioTracksIntro,
+	-1
+};
+
+const int kyra1CDNeed[] = {
+	kKallakWritingSeq,
+	kMalcolmTreeSeq,
+	kWestwoodLogoSeq,
+	kKyrandiaLogoSeq,
+	kKallakMalcolmSeq,
+	kForestSeq,
+	kIntroCPSStrings,
+	kIntroCOLStrings,
+	kIntroWSAStrings,
+	kIntroStrings,
+	kRoomList,
+	kRoomFilenames,
+	kCharacterImageFilenames,
+	kDefaultShapes,
+	kItemNames,
+	kTakenStrings,
+	kPlacedStrings,
+	kDroppedStrings,
+	kNoDropStrings,
+	kAmuleteAnimSeq,
+	kPaletteList1,
+	kPaletteList2,
+	kPaletteList3,
+	kPaletteList4,
+	kPaletteList5,
+	kPaletteList6,
+	kPaletteList7,
+	kPaletteList8,
+	kPaletteList9,
+	kPaletteList10,
+	kPaletteList11,
+	kPaletteList12,
+	kPaletteList13,
+	kPaletteList14,
+	kPaletteList15,
+	kPaletteList16,
+	kPaletteList17,
+	kPaletteList18,
+	kPaletteList19,
+	kPaletteList20,
+	kPaletteList21,
+	kPaletteList22,
+	kPaletteList23,
+	kPaletteList24,
+	kPaletteList25,
+	kPaletteList26,
+	kPaletteList27,
+	kPaletteList28,
+	kPaletteList29,
+	kPaletteList30,
+	kPaletteList31,
+	kPaletteList32,
+	kPaletteList33,
+	kPutDownString,
+	kWaitAmuletString,
+	kBlackJewelString,
+	kHealingTipString,
+	kPoisonGoneString,
+	kHealing1Shapes,
+	kHealing2Shapes,
+	kThePoisonStrings,
+	kFluteStrings,
+	kPoisonDeathShapes,
+	kFluteShapes,
+	kWinter1Shapes,
+	kWinter2Shapes,
+	kWinter3Shapes,
+	kDrinkShapes,
+	kWispShapes,
+	kMagicAnimShapes,
+	kBranStoneShapes,
+	kWispJewelStrings,
+	kMagicJewelStrings,
+	kFlaskFullString,
+	kFullFlaskString,
+	kOutroReunionSeq,
+	kOutroHomeString,
+	kVeryCleverString,
+	kGUIStrings,
+	kNewGameString,
+	kConfigStrings,
+	kAudioTracks,
+	kAudioTracksIntro,
+	-1
+};
+
+const int kyra1DemoNeed[] = {
+	kWestwoodLogoSeq,
+	kKyrandiaLogoSeq,
+	kIntroCPSStrings,
+	kIntroCOLStrings,
+	kIntroWSAStrings,
+	kIntroStrings,
+	kDemo1Seq,
+	kDemo2Seq,
+	kDemo3Seq,
+	kDemo4Seq,
+	kAudioTracksIntro,
+	-1
+};
+
+const int kyra1DemoCDNeed[] = {
+	kKallakWritingSeq,
+	kMalcolmTreeSeq,
+	kWestwoodLogoSeq,
+	kKyrandiaLogoSeq,
+	kKallakMalcolmSeq,
+	kForestSeq,
+	kIntroCPSStrings,
+	kIntroCOLStrings,
+	kIntroWSAStrings,
+	kIntroStrings,
+	kAudioTracksIntro,
+	-1
+};
+
+const int kyra1TownsNeed[] = {
+	kKallakWritingSeq,
+	kMalcolmTreeSeq,
+	kWestwoodLogoSeq,
+	kKyrandiaLogoSeq,
+	kKallakMalcolmSeq,
+	kForestSeq,
+	kIntroCPSStrings,
+	kIntroCOLStrings,
+	kIntroWSAStrings,
+	kIntroStrings,
+	kRoomList,
+	kRoomFilenames,
+	kCharacterImageFilenames,
+	kDefaultShapes,
+	kItemNames,
+	kTakenStrings,
+	kPlacedStrings,
+	kDroppedStrings,
+	kNoDropStrings,
+	kAmuleteAnimSeq,
+	kPaletteList1,
+	kPaletteList2,
+	kPaletteList3,
+	kPaletteList4,
+	kPaletteList5,
+	kPaletteList6,
+	kPaletteList7,
+	kPaletteList8,
+	kPaletteList9,
+	kPaletteList10,
+	kPaletteList11,
+	kPaletteList12,
+	kPaletteList13,
+	kPaletteList14,
+	kPaletteList15,
+	kPaletteList16,
+	kPaletteList17,
+	kPaletteList18,
+	kPaletteList19,
+	kPaletteList20,
+	kPaletteList21,
+	kPaletteList22,
+	kPaletteList23,
+	kPaletteList24,
+	kPaletteList25,
+	kPaletteList26,
+	kPaletteList27,
+	kPaletteList28,
+	kPaletteList29,
+	kPaletteList30,
+	kPaletteList31,
+	kPaletteList32,
+	kPaletteList33,
+	kPutDownString,
+	kWaitAmuletString,
+	kBlackJewelString,
+	kHealingTipString,
+	kPoisonGoneString,
+	kHealing1Shapes,
+	kHealing2Shapes,
+	kThePoisonStrings,
+	kFluteStrings,
+	kPoisonDeathShapes,
+	kFluteShapes,
+	kWinter1Shapes,
+	kWinter2Shapes,
+	kWinter3Shapes,
+	kDrinkShapes,
+	kWispShapes,
+	kMagicAnimShapes,
+	kBranStoneShapes,
+	kWispJewelStrings,
+	kMagicJewelStrings,
+	kFlaskFullString,
+	kFullFlaskString,
+	kOutroReunionSeq,
+	kOutroHomeString,
+	kVeryCleverString,
+	kGUIStrings,
+	kNewGameString,
+	kConfigStrings,
+
+	kKyra1TownsSFXwdTable,
+	kKyra1TownsSFXbtTable,
+	kKyra1TownsCDATable,
+	kAudioTracks,
+	kCreditsStrings,
+	-1
+};
+
+const int kyra1AmigaNeed[] = {
+	kKallakWritingSeq,
+	kMalcolmTreeSeq,
+	kWestwoodLogoSeq,
+	kKyrandiaLogoSeq,
+	kKallakMalcolmSeq,
+	kForestSeq,
+	kIntroCPSStrings,
+	kIntroWSAStrings,
+	kIntroCOLStrings,
+	kIntroStrings,
+	kRoomList,
+	kRoomFilenames,
+	kCharacterImageFilenames,
+	kDefaultShapes,
+	kItemNames,
+	kTakenStrings,
+	kPlacedStrings,
+	kDroppedStrings,
+	kNoDropStrings,
+	kAmuleteAnimSeq,
+	kPutDownString,
+	kWaitAmuletString,
+	kBlackJewelString,
+	kHealingTipString,
+	kPoisonGoneString,
+	kHealing1Shapes,
+	kHealing2Shapes,
+	kThePoisonStrings,
+	kFluteStrings,
+	kPoisonDeathShapes,
+	kFluteShapes,
+	kWinter1Shapes,
+	kWinter2Shapes,
+	kWinter3Shapes,
+	kDrinkShapes,
+	kWispShapes,
+	kMagicAnimShapes,
+	kBranStoneShapes,
+	kWispJewelStrings,
+	kMagicJewelStrings,
+	kFlaskFullString,
+	kFullFlaskString,
+	kOutroReunionSeq,
+	kOutroHomeString,
+	kVeryCleverString,
+	kGUIStrings,
+	kNewGameString,
+	kConfigStrings,
+	kCreditsStrings,
+	kAmigaIntroSFXTable,
+	kAmigaGameSFXTable,
+	-1
+};
+
+const int kyra2CDFile1Need[] = {
+	k2SeqplayPakFiles,
+	k2SeqplayCredits,
+	k2SeqplayCreditsSpecial,
+	k2SeqplayStrings,
+	k2SeqplaySfxFiles,
+	k2SeqplayTlkFiles,
+	k2SeqplaySeqData,
+	k2SeqplayIntroTracks,
+	k2SeqplayFinaleTracks,
+	-1
+};
+
+const int kyra2CDFile2Need[] = {
+	k2IngameSfxFiles,
+	k2IngameSfxIndex,
+	k2IngameTracks,
+	k2IngameTalkObjIndex,
+	k2IngameItemAnimData,
+	-1
+};
+
+const int kyra2CDDemoNeed[] = {
+	k2IngameSfxFiles,
+	k2IngameSfxIndex,
+	k2IngameTracks,
+	k2IngameTalkObjIndex,
+	k2IngameItemAnimData,
+	k2IngameTlkDemoStrings,
+	-1
+};
+
+const int kyra2FloppyFile1Need[] = {
+	k2SeqplayPakFiles,
+	k2SeqplayStrings,
+	k2SeqplaySfxFiles,
+	k2SeqplayIntroTracks,
+	k2SeqplayFinaleTracks,
+	k2SeqplaySeqData,
+	-1
+};
+
+const int kyra2FloppyFile2Need[] = {
+	k2IngamePakFiles,
+	k2IngameSfxFiles,
+	k2IngameSfxIndex,
+	k2IngameTracks,
+	k2IngameTalkObjIndex,
+	k2IngameItemAnimData,
+	-1
+};
+
+const int kyra2TownsFile1Need[] = {
+	k2SeqplayPakFiles,
+	k2SeqplayStrings,
+	k2SeqplaySfxFiles,
+	k2SeqplaySeqData,
+	k2SeqplayIntroCDA,
+	k2SeqplayFinaleCDA,
+	-1
+};
+
+const int kyra2TownsFile2Need[] = {
+	k2IngamePakFiles,
+	k2IngameSfxFilesTns,
+	k2IngameSfxIndex,
+	k2IngameCDA,
+	k2IngameTalkObjIndex,
+	k2IngameTimJpStrings,
+	k2IngameItemAnimData,
+	-1
+};
+
+const int kyra2DemoNeed[] = {
+	k2SeqplayPakFiles,
+	k2SeqplaySeqData,
+	k2SeqplaySfxFiles,
+	k2SeqplayIntroTracks,
+	k2SeqplayShapeAnimData,
+	-1
+};
+
+const int kyra2TlkDemoNeed[] = {
+	k2IngameTlkDemoStrings,
+	-1
+};
+
+const int kyra3Need[] = {
+	k3MainMenuStrings,
+	k3MusicFiles,
+	k3ScoreTable,
+	k3SfxFiles,
+	k3SfxMap,
+	k3ItemAnimData,
+	k3ItemMagicTable,
+	k3ItemStringMap,
+	-1
+};
+
+const int lolFloppyNeed[] = {
+	kLolIngamePakFiles,
+
+	kLolCharacterDefs,
+	kLolIngameSfxFiles,
+	kLolIngameSfxIndex,
+	kLolMusicTrackMap,
+	kLolGMSfxIndex,
+	kLolMT32SfxIndex,
+	kLolSpellProperties,
+	kLolGameShapeMap,
+	kLolSceneItemOffs,
+	kLolCharInvIndex,
+	kLolCharInvDefs,
+	kLolCharDefsMan,
+	kLolCharDefsWoman,
+	kLolCharDefsKieran,
+	kLolCharDefsAkshel,
+	kLolExpRequirements,
+	kLolMonsterModifiers,
+	kLolMonsterLevelOffsets,
+	kLolMonsterDirFlags,
+	kLolMonsterScaleY,
+	kLolMonsterScaleX,
+	kLolMonsterScaleWH,
+	kLolFlyingItemShp,
+	kLolInventoryDesc,
+
+	kLolLevelShpList,
+	kLolLevelDatList,
+	kLolCompassDefs,
+	kLolStashSetup,
+	kLolDscUnk1,
+	kLolDscShapeIndex1,
+	kLolDscShapeIndex2,
+	kLolDscScaleWidthData,
+	kLolDscScaleHeightData,
+	kLolDscX,
+	kLolDscY,
+	kLolDscTileIndex,
+	kLolDscUnk2,
+	kLolDscDoorShapeIndex,
+	kLolDscDimData1,
+	kLolDscDimData2,
+	kLolDscBlockMap,
+	kLolDscDimMap,
+	kLolDscShapeOvlIndex,
+	kLolDscBlockIndex,
+	kLolDscDoor1,
+	kLolDscDoorScale,
+	kLolDscDoor4,
+	kLolDscDoorX,
+	kLolDscDoorY,
+
+	kLolScrollXTop,
+	kLolScrollYTop,
+	kLolScrollXBottom,
+	kLolScrollYBottom,
+
+	kLolButtonDefs,
+	kLolButtonList1,
+	kLolButtonList1,
+	kLolButtonList2,
+	kLolButtonList3,
+	kLolButtonList4,
+	kLolButtonList5,
+	kLolButtonList6,
+	kLolButtonList7,
+	kLolButtonList8,
+
+	kLolLegendData,
+	kLolMapCursorOvl,
+	kLolMapStringId,
+
+	kLolSpellbookAnim,
+	kLolSpellbookCoords,
+	kLolHealShapeFrames,
+	kLolLightningDefs,
+	kLolFireballCoords,
+
+	-1
+};
+
+const int lolCDFile1Need[] = {
+	kLolHistory,
+	-1
+};
+
+const int lolCDFile2Need[] = {
+	kLolCharacterDefs,
+	kLolIngameSfxFiles,
+	kLolIngameSfxIndex,
+	kLolMusicTrackMap,
+	kLolGMSfxIndex,
+	kLolMT32SfxIndex,
+	kLolSpellProperties,
+	kLolGameShapeMap,
+	kLolSceneItemOffs,
+	kLolCharInvIndex,
+	kLolCharInvDefs,
+	kLolCharDefsMan,
+	kLolCharDefsWoman,
+	kLolCharDefsKieran,
+	kLolCharDefsAkshel,
+	kLolExpRequirements,
+	kLolMonsterModifiers,
+	kLolMonsterLevelOffsets,
+	kLolMonsterDirFlags,
+	kLolMonsterScaleY,
+	kLolMonsterScaleX,
+	kLolMonsterScaleWH,
+	kLolFlyingItemShp,
+	kLolInventoryDesc,
+
+	kLolLevelShpList,
+	kLolLevelDatList,
+	kLolCompassDefs,
+	kLolItemPrices,
+	kLolStashSetup,
+	kLolDscUnk1,
+	kLolDscShapeIndex1,
+	kLolDscShapeIndex2,
+	kLolDscScaleWidthData,
+	kLolDscScaleHeightData,
+	kLolDscX,
+	kLolDscY,
+	kLolDscTileIndex,
+	kLolDscUnk2,
+	kLolDscDoorShapeIndex,
+	kLolDscDimData1,
+	kLolDscDimData2,
+	kLolDscBlockMap,
+	kLolDscDimMap,
+	kLolDscShapeOvlIndex,
+	kLolDscBlockIndex,
+	kLolDscDoor1,
+	kLolDscDoorScale,
+	kLolDscDoor4,
+	kLolDscDoorX,
+	kLolDscDoorY,
+
+	kLolScrollXTop,
+	kLolScrollYTop,
+	kLolScrollXBottom,
+	kLolScrollYBottom,
+
+	kLolButtonDefs,
+	kLolButtonList1,
+	kLolButtonList1,
+	kLolButtonList2,
+	kLolButtonList3,
+	kLolButtonList4,
+	kLolButtonList5,
+	kLolButtonList6,
+	kLolButtonList7,
+	kLolButtonList8,
+
+	kLolLegendData,
+	kLolMapCursorOvl,
+	kLolMapStringId,
+
+	kLolSpellbookAnim,
+	kLolSpellbookCoords,
+	kLolHealShapeFrames,
+	kLolLightningDefs,
+	kLolFireballCoords,
+
+	-1
+};
+
+const int lolDemoNeed[] = {
+	k2SeqplayPakFiles,
+	k2SeqplayStrings,
+	k2SeqplaySeqData,
+	k2SeqplaySfxFiles,
+	kLolSeqplayIntroTracks,
+	-1
+};
+
+struct GameNeed {
+	int game;
+	int special;
+
+	const int *entries;
+};
+
+const GameNeed gameNeedTable[] = {
+	{ kKyra1, -1, kyra1FloppyNeed },
+	{ kKyra1, kTalkieVersion, kyra1CDNeed },
+	{ kKyra1, kFMTownsVersionE , kyra1TownsNeed },
+	{ kKyra1, kFMTownsVersionJ, kyra1TownsNeed },
+	{ kKyra1, kAmigaVersion, kyra1AmigaNeed },
+	{ kKyra1, kDemoVersion, kyra1DemoNeed },
+	{ kKyra1, kDemoCDVersion, kyra1DemoCDNeed },
+
+	{ kKyra2, k2FloppyFile1, kyra2FloppyFile1Need },
+	{ kKyra2, k2FloppyFile2, kyra2FloppyFile2Need },
+	{ kKyra2, k2CDFile1E, kyra2CDFile1Need },
+	{ kKyra2, k2CDFile1F, kyra2CDFile1Need },
+	{ kKyra2, k2CDFile1G, kyra2CDFile1Need },
+	{ kKyra2, k2CDFile1I, kyra2CDFile1Need }, // Italian fan translation
+	{ kKyra2, k2CDFile2E, kyra2CDFile2Need },
+	{ kKyra2, k2CDFile2F, kyra2CDFile2Need },
+	{ kKyra2, k2CDFile2G, kyra2CDFile2Need },
+	{ kKyra2, k2CDDemoE, kyra2CDDemoNeed },
+	{ kKyra2, k2CDDemoF, kyra2CDDemoNeed },
+	{ kKyra2, k2CDDemoG, kyra2CDDemoNeed },
+	{ kKyra2, k2TownsFile1E , kyra2TownsFile1Need },
+	{ kKyra2, k2TownsFile1J, kyra2TownsFile1Need },
+	{ kKyra2, k2TownsFile2E , kyra2TownsFile2Need },
+	{ kKyra2, k2TownsFile2J, kyra2TownsFile2Need },
+	{ kKyra2, k2DemoVersion, kyra2DemoNeed },
+	{ kKyra2, k2DemoVersionTlkE, kyra2TlkDemoNeed },
+	{ kKyra2, k2DemoVersionTlkF, kyra2TlkDemoNeed },
+	{ kKyra2, k2DemoVersionTlkG, kyra2TlkDemoNeed },
+	{ kLol, k2DemoLol, lolDemoNeed },
+
+	{ kKyra3, -1, kyra3Need },
+
+	{ kLol, -1, lolFloppyNeed },
+	{ kLol, kLolCD1, lolCDFile1Need },
+	{ kLol, kLolCD2, lolCDFile2Need },
+
+	{ -1, -1, 0 }
+};
+
+} // end of anonymous namespace
+
+const int *getNeedList(const Game *g) {
+	for (const GameNeed *need = gameNeedTable; need->game != -1; ++need) {
+		if (need->game == g->game && need->special == g->special)
+			return need->entries;
+	}
+
+	return 0;
+}
+


Property changes on: scummvm/trunk/tools/create_kyradat/games.cpp
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author URL Id
Added: svn:eol-style
   + native

Deleted: scummvm/trunk/tools/create_kyradat/misc.h
===================================================================
--- scummvm/trunk/tools/create_kyradat/misc.h	2009-09-17 11:01:08 UTC (rev 44142)
+++ scummvm/trunk/tools/create_kyradat/misc.h	2009-09-17 12:02:17 UTC (rev 44143)
@@ -1,791 +0,0 @@
-const int kyra1FloppyNeed[] = {
-	kKallakWritingSeq,
-	kMalcolmTreeSeq,
-	kWestwoodLogoSeq,
-	kKyrandiaLogoSeq,
-	kKallakMalcolmSeq,
-	kForestSeq,
-	kIntroCPSStrings,
-	kIntroCOLStrings,
-	kIntroWSAStrings,
-	kIntroStrings,
-	kRoomList,
-	kRoomFilenames,
-	kCharacterImageFilenames,
-	kDefaultShapes,
-	kItemNames,
-	kTakenStrings,
-	kPlacedStrings,
-	kDroppedStrings,
-	kNoDropStrings,
-	kAmuleteAnimSeq,
-	kPaletteList1,
-	kPaletteList2,
-	kPaletteList3,
-	kPaletteList4,
-	kPaletteList5,
-	kPaletteList6,
-	kPaletteList7,
-	kPaletteList8,
-	kPaletteList9,
-	kPaletteList10,
-	kPaletteList11,
-	kPaletteList12,
-	kPaletteList13,
-	kPaletteList14,
-	kPaletteList15,
-	kPaletteList16,
-	kPaletteList17,
-	kPaletteList18,
-	kPaletteList19,
-	kPaletteList20,
-	kPaletteList21,
-	kPaletteList22,
-	kPaletteList23,
-	kPaletteList24,
-	kPaletteList25,
-	kPaletteList26,
-	kPaletteList27,
-	kPaletteList28,
-	kPaletteList29,
-	kPaletteList30,
-	kPaletteList31,
-	kPaletteList32,
-	kPaletteList33,
-	kPutDownString,
-	kWaitAmuletString,
-	kBlackJewelString,
-	kHealingTipString,
-	kPoisonGoneString,
-	kHealing1Shapes,
-	kHealing2Shapes,
-	kThePoisonStrings,
-	kFluteStrings,
-	kPoisonDeathShapes,
-	kFluteShapes,
-	kWinter1Shapes,
-	kWinter2Shapes,
-	kWinter3Shapes,
-	kDrinkShapes,
-	kWispShapes,
-	kMagicAnimShapes,
-	kBranStoneShapes,
-	kWispJewelStrings,
-	kMagicJewelStrings,
-	kFlaskFullString,
-	kFullFlaskString,
-	kOutroReunionSeq,
-	kOutroHomeString,
-	kVeryCleverString,
-	kGUIStrings,
-	kNewGameString,
-	kConfigStrings,
-	kAudioTracks,
-	kAudioTracksIntro,
-	-1
-};
-
-const int kyra1CDNeed[] = {
-	kKallakWritingSeq,
-	kMalcolmTreeSeq,
-	kWestwoodLogoSeq,
-	kKyrandiaLogoSeq,
-	kKallakMalcolmSeq,
-	kForestSeq,
-	kIntroCPSStrings,
-	kIntroCOLStrings,
-	kIntroWSAStrings,
-	kIntroStrings,
-	kRoomList,
-	kRoomFilenames,
-	kCharacterImageFilenames,
-	kDefaultShapes,
-	kItemNames,
-	kTakenStrings,
-	kPlacedStrings,
-	kDroppedStrings,
-	kNoDropStrings,
-	kAmuleteAnimSeq,
-	kPaletteList1,
-	kPaletteList2,
-	kPaletteList3,
-	kPaletteList4,
-	kPaletteList5,
-	kPaletteList6,
-	kPaletteList7,
-	kPaletteList8,
-	kPaletteList9,
-	kPaletteList10,
-	kPaletteList11,
-	kPaletteList12,
-	kPaletteList13,
-	kPaletteList14,
-	kPaletteList15,
-	kPaletteList16,
-	kPaletteList17,
-	kPaletteList18,
-	kPaletteList19,
-	kPaletteList20,
-	kPaletteList21,
-	kPaletteList22,
-	kPaletteList23,
-	kPaletteList24,
-	kPaletteList25,
-	kPaletteList26,
-	kPaletteList27,
-	kPaletteList28,
-	kPaletteList29,
-	kPaletteList30,
-	kPaletteList31,
-	kPaletteList32,
-	kPaletteList33,
-	kPutDownString,
-	kWaitAmuletString,
-	kBlackJewelString,
-	kHealingTipString,
-	kPoisonGoneString,
-	kHealing1Shapes,
-	kHealing2Shapes,
-	kThePoisonStrings,
-	kFluteStrings,
-	kPoisonDeathShapes,
-	kFluteShapes,
-	kWinter1Shapes,
-	kWinter2Shapes,
-	kWinter3Shapes,
-	kDrinkShapes,
-	kWispShapes,
-	kMagicAnimShapes,
-	kBranStoneShapes,
-	kWispJewelStrings,
-	kMagicJewelStrings,
-	kFlaskFullString,
-	kFullFlaskString,
-	kOutroReunionSeq,
-	kOutroHomeString,
-	kVeryCleverString,
-	kGUIStrings,
-	kNewGameString,
-	kConfigStrings,
-	kAudioTracks,
-	kAudioTracksIntro,
-	-1
-};
-
-const int kyra1DemoNeed[] = {
-	kWestwoodLogoSeq,
-	kKyrandiaLogoSeq,
-	kIntroCPSStrings,
-	kIntroCOLStrings,
-	kIntroWSAStrings,
-	kIntroStrings,
-	kDemo1Seq,
-	kDemo2Seq,
-	kDemo3Seq,
-	kDemo4Seq,
-	kAudioTracksIntro,
-	-1
-};
-
-const int kyra1DemoCDNeed[] = {
-	kKallakWritingSeq,
-	kMalcolmTreeSeq,
-	kWestwoodLogoSeq,
-	kKyrandiaLogoSeq,
-	kKallakMalcolmSeq,
-	kForestSeq,
-	kIntroCPSStrings,
-	kIntroCOLStrings,
-	kIntroWSAStrings,
-	kIntroStrings,
-	kAudioTracksIntro,
-	-1
-};
-
-const int kyra1TownsNeed[] = {
-	kKallakWritingSeq,
-	kMalcolmTreeSeq,
-	kWestwoodLogoSeq,
-	kKyrandiaLogoSeq,
-	kKallakMalcolmSeq,
-	kForestSeq,
-	kIntroCPSStrings,
-	kIntroCOLStrings,
-	kIntroWSAStrings,
-	kIntroStrings,
-	kRoomList,
-	kRoomFilenames,
-	kCharacterImageFilenames,
-	kDefaultShapes,
-	kItemNames,
-	kTakenStrings,
-	kPlacedStrings,
-	kDroppedStrings,
-	kNoDropStrings,
-	kAmuleteAnimSeq,
-	kPaletteList1,
-	kPaletteList2,
-	kPaletteList3,
-	kPaletteList4,
-	kPaletteList5,
-	kPaletteList6,
-	kPaletteList7,
-	kPaletteList8,
-	kPaletteList9,
-	kPaletteList10,
-	kPaletteList11,
-	kPaletteList12,
-	kPaletteList13,
-	kPaletteList14,
-	kPaletteList15,
-	kPaletteList16,
-	kPaletteList17,
-	kPaletteList18,
-	kPaletteList19,
-	kPaletteList20,
-	kPaletteList21,
-	kPaletteList22,
-	kPaletteList23,
-	kPaletteList24,
-	kPaletteList25,
-	kPaletteList26,
-	kPaletteList27,
-	kPaletteList28,
-	kPaletteList29,
-	kPaletteList30,
-	kPaletteList31,
-	kPaletteList32,
-	kPaletteList33,
-	kPutDownString,
-	kWaitAmuletString,
-	kBlackJewelString,
-	kHealingTipString,
-	kPoisonGoneString,
-	kHealing1Shapes,
-	kHealing2Shapes,
-	kThePoisonStrings,
-	kFluteStrings,
-	kPoisonDeathShapes,
-	kFluteShapes,
-	kWinter1Shapes,
-	kWinter2Shapes,
-	kWinter3Shapes,
-	kDrinkShapes,
-	kWispShapes,
-	kMagicAnimShapes,
-	kBranStoneShapes,
-	kWispJewelStrings,
-	kMagicJewelStrings,
-	kFlaskFullString,
-	kFullFlaskString,
-	kOutroReunionSeq,
-	kOutroHomeString,
-	kVeryCleverString,
-	kGUIStrings,
-	kNewGameString,
-	kConfigStrings,
-
-	kKyra1TownsSFXwdTable,
-	kKyra1TownsSFXbtTable,
-	kKyra1TownsCDATable,
-	kAudioTracks,
-	kCreditsStrings,
-	-1
-};
-
-const int kyra1AmigaNeed[] = {
-	kKallakWritingSeq,
-	kMalcolmTreeSeq,
-	kWestwoodLogoSeq,
-	kKyrandiaLogoSeq,
-	kKallakMalcolmSeq,
-	kForestSeq,
-	kIntroCPSStrings,
-	kIntroWSAStrings,
-	kIntroCOLStrings,
-	kIntroStrings,
-	kRoomList,
-	kRoomFilenames,
-	kCharacterImageFilenames,
-	kDefaultShapes,
-	kItemNames,
-	kTakenStrings,
-	kPlacedStrings,
-	kDroppedStrings,
-	kNoDropStrings,
-	kAmuleteAnimSeq,
-	kPutDownString,
-	kWaitAmuletString,
-	kBlackJewelString,
-	kHealingTipString,
-	kPoisonGoneString,
-	kHealing1Shapes,
-	kHealing2Shapes,
-	kThePoisonStrings,
-	kFluteStrings,
-	kPoisonDeathShapes,
-	kFluteShapes,
-	kWinter1Shapes,
-	kWinter2Shapes,
-	kWinter3Shapes,
-	kDrinkShapes,
-	kWispShapes,
-	kMagicAnimShapes,
-	kBranStoneShapes,
-	kWispJewelStrings,
-	kMagicJewelStrings,
-	kFlaskFullString,
-	kFullFlaskString,
-	kOutroReunionSeq,
-	kOutroHomeString,
-	kVeryCleverString,
-	kGUIStrings,
-	kNewGameString,
-	kConfigStrings,
-	kCreditsStrings,
-	kAmigaIntroSFXTable,
-	kAmigaGameSFXTable,
-	-1
-};
-
-const int kyra2CDFile1Need[] = {
-	k2SeqplayPakFiles,
-	k2SeqplayCredits,
-	k2SeqplayCreditsSpecial,
-	k2SeqplayStrings,
-	k2SeqplaySfxFiles,
-	k2SeqplayTlkFiles,
-	k2SeqplaySeqData,
-	k2SeqplayIntroTracks,
-	k2SeqplayFinaleTracks,
-	-1
-};
-
-const int kyra2CDFile2Need[] = {
-	k2IngameSfxFiles,
-	k2IngameSfxIndex,
-	k2IngameTracks,
-	k2IngameTalkObjIndex,
-	k2IngameItemAnimData,
-	-1
-};
-
-const int kyra2CDDemoNeed[] = {
-	k2IngameSfxFiles,
-	k2IngameSfxIndex,
-	k2IngameTracks,
-	k2IngameTalkObjIndex,
-	k2IngameItemAnimData,
-	k2IngameTlkDemoStrings,
-	-1
-};
-
-const int kyra2FloppyFile1Need[] = {
-	k2SeqplayPakFiles,
-	k2SeqplayStrings,
-	k2SeqplaySfxFiles,
-	k2SeqplayIntroTracks,
-	k2SeqplayFinaleTracks,
-	k2SeqplaySeqData,
-	-1
-};
-
-const int kyra2FloppyFile2Need[] = {
-	k2IngamePakFiles,
-	k2IngameSfxFiles,
-	k2IngameSfxIndex,
-	k2IngameTracks,
-	k2IngameTalkObjIndex,
-	k2IngameItemAnimData,
-	-1
-};
-
-const int kyra2TownsFile1Need[] = {
-	k2SeqplayPakFiles,
-	k2SeqplayStrings,
-	k2SeqplaySfxFiles,
-	k2SeqplaySeqData,
-	k2SeqplayIntroCDA,
-	k2SeqplayFinaleCDA,
-	-1
-};
-
-const int kyra2TownsFile2Need[] = {
-	k2IngamePakFiles,
-	k2IngameSfxFilesTns,
-	k2IngameSfxIndex,
-	k2IngameCDA,
-	k2IngameTalkObjIndex,
-	k2IngameTimJpStrings,
-	k2IngameItemAnimData,
-	-1
-};
-
-const int kyra2DemoNeed[] = {
-	k2SeqplayPakFiles,
-	k2SeqplaySeqData,
-	k2SeqplaySfxFiles,
-	k2SeqplayIntroTracks,
-	k2SeqplayShapeAnimData,
-	-1
-};
-
-const int kyra2TlkDemoNeed[] = {
-	k2IngameTlkDemoStrings,
-	-1
-};
-
-const int kyra3Need[] = {
-	k3MainMenuStrings,
-	k3MusicFiles,
-	k3ScoreTable,
-	k3SfxFiles,
-	k3SfxMap,
-	k3ItemAnimData,
-	k3ItemMagicTable,
-	k3ItemStringMap,
-	-1
-};
-
-const int lolFloppyNeed[] = {
-	kLolIngamePakFiles,
-
-	kLolCharacterDefs,
-	kLolIngameSfxFiles,
-	kLolIngameSfxIndex,
-	kLolMusicTrackMap,
-	kLolGMSfxIndex,
-	kLolMT32SfxIndex,
-	kLolSpellProperties,
-	kLolGameShapeMap,
-	kLolSceneItemOffs,
-	kLolCharInvIndex,
-	kLolCharInvDefs,
-	kLolCharDefsMan,
-	kLolCharDefsWoman,
-	kLolCharDefsKieran,
-	kLolCharDefsAkshel,
-	kLolExpRequirements,
-	kLolMonsterModifiers,
-	kLolMonsterLevelOffsets,
-	kLolMonsterDirFlags,
-	kLolMonsterScaleY,
-	kLolMonsterScaleX,
-	kLolMonsterScaleWH,
-	kLolFlyingItemShp,
-	kLolInventoryDesc,
-
-	kLolLevelShpList,
-	kLolLevelDatList,
-	kLolCompassDefs,
-	kLolStashSetup,
-	kLolDscUnk1,
-	kLolDscShapeIndex1,
-	kLolDscShapeIndex2,
-	kLolDscScaleWidthData,
-	kLolDscScaleHeightData,
-	kLolDscX,
-	kLolDscY,
-	kLolDscTileIndex,
-	kLolDscUnk2,
-	kLolDscDoorShapeIndex,
-	kLolDscDimData1,
-	kLolDscDimData2,
-	kLolDscBlockMap,
-	kLolDscDimMap,
-	kLolDscShapeOvlIndex,
-	kLolDscBlockIndex,
-	kLolDscDoor1,
-	kLolDscDoorScale,
-	kLolDscDoor4,
-	kLolDscDoorX,
-	kLolDscDoorY,
-
-	kLolScrollXTop,
-	kLolScrollYTop,
-	kLolScrollXBottom,
-	kLolScrollYBottom,
-
-	kLolButtonDefs,
-	kLolButtonList1,
-	kLolButtonList1,
-	kLolButtonList2,
-	kLolButtonList3,
-	kLolButtonList4,
-	kLolButtonList5,
-	kLolButtonList6,
-	kLolButtonList7,
-	kLolButtonList8,
-
-	kLolLegendData,
-	kLolMapCursorOvl,
-	kLolMapStringId,
-
-	kLolSpellbookAnim,
-	kLolSpellbookCoords,
-	kLolHealShapeFrames,
-	kLolLightningDefs,
-	kLolFireballCoords,
-
-	-1
-};
-
-const int lolCDFile1Need[] = {
-	kLolHistory,
-	-1
-};
-
-const int lolCDFile2Need[] = {
-	kLolCharacterDefs,
-	kLolIngameSfxFiles,
-	kLolIngameSfxIndex,
-	kLolMusicTrackMap,
-	kLolGMSfxIndex,
-	kLolMT32SfxIndex,
-	kLolSpellProperties,
-	kLolGameShapeMap,
-	kLolSceneItemOffs,
-	kLolCharInvIndex,
-	kLolCharInvDefs,
-	kLolCharDefsMan,
-	kLolCharDefsWoman,
-	kLolCharDefsKieran,
-	kLolCharDefsAkshel,
-	kLolExpRequirements,
-	kLolMonsterModifiers,
-	kLolMonsterLevelOffsets,
-	kLolMonsterDirFlags,
-	kLolMonsterScaleY,
-	kLolMonsterScaleX,
-	kLolMonsterScaleWH,
-	kLolFlyingItemShp,
-	kLolInventoryDesc,
-
-	kLolLevelShpList,
-	kLolLevelDatList,
-	kLolCompassDefs,
-	kLolItemPrices,
-	kLolStashSetup,
-	kLolDscUnk1,
-	kLolDscShapeIndex1,
-	kLolDscShapeIndex2,
-	kLolDscScaleWidthData,
-	kLolDscScaleHeightData,
-	kLolDscX,
-	kLolDscY,
-	kLolDscTileIndex,
-	kLolDscUnk2,
-	kLolDscDoorShapeIndex,
-	kLolDscDimData1,
-	kLolDscDimData2,
-	kLolDscBlockMap,
-	kLolDscDimMap,
-	kLolDscShapeOvlIndex,
-	kLolDscBlockIndex,
-	kLolDscDoor1,
-	kLolDscDoorScale,
-	kLolDscDoor4,
-	kLolDscDoorX,
-	kLolDscDoorY,
-
-	kLolScrollXTop,
-	kLolScrollYTop,
-	kLolScrollXBottom,
-	kLolScrollYBottom,
-
-	kLolButtonDefs,
-	kLolButtonList1,
-	kLolButtonList1,
-	kLolButtonList2,
-	kLolButtonList3,
-	kLolButtonList4,
-	kLolButtonList5,
-	kLolButtonList6,
-	kLolButtonList7,
-	kLolButtonList8,
-
-	kLolLegendData,
-	kLolMapCursorOvl,
-	kLolMapStringId,
-
-	kLolSpellbookAnim,
-	kLolSpellbookCoords,
-	kLolHealShapeFrames,
-	kLolLightningDefs,
-	kLolFireballCoords,
-
-	-1
-};
-
-const int lolDemoNeed[] = {
-	k2SeqplayPakFiles,
-	k2SeqplayStrings,
-	k2SeqplaySeqData,
-	k2SeqplaySfxFiles,
-	kLolSeqplayIntroTracks,
-	-1
-};
-
-const GameNeed gameNeedTable[] = {
-	{ kKyra1, -1, kyra1FloppyNeed },
-	{ kKyra1, kTalkieVersion, kyra1CDNeed },
-	{ kKyra1, kFMTownsVersionE , kyra1TownsNeed },
-	{ kKyra1, kFMTownsVersionJ, kyra1TownsNeed },
-	{ kKyra1, kAmigaVersion, kyra1AmigaNeed },
-	{ kKyra1, kDemoVersion, kyra1DemoNeed },
-	{ kKyra1, kDemoCDVersion, kyra1DemoCDNeed },
-
-	{ kKyra2, k2FloppyFile1, kyra2FloppyFile1Need },
-	{ kKyra2, k2FloppyFile2, kyra2FloppyFile2Need },
-	{ kKyra2, k2CDFile1E, kyra2CDFile1Need },
-	{ kKyra2, k2CDFile1F, kyra2CDFile1Need },
-	{ kKyra2, k2CDFile1G, kyra2CDFile1Need },
-	{ kKyra2, k2CDFile1I, kyra2CDFile1Need }, // Italian fan translation
-	{ kKyra2, k2CDFile2E, kyra2CDFile2Need },
-	{ kKyra2, k2CDFile2F, kyra2CDFile2Need },
-	{ kKyra2, k2CDFile2G, kyra2CDFile2Need },
-	{ kKyra2, k2CDDemoE, kyra2CDDemoNeed },
-	{ kKyra2, k2CDDemoF, kyra2CDDemoNeed },
-	{ kKyra2, k2CDDemoG, kyra2CDDemoNeed },
-	{ kKyra2, k2TownsFile1E , kyra2TownsFile1Need },
-	{ kKyra2, k2TownsFile1J, kyra2TownsFile1Need },
-	{ kKyra2, k2TownsFile2E , kyra2TownsFile2Need },
-	{ kKyra2, k2TownsFile2J, kyra2TownsFile2Need },
-	{ kKyra2, k2DemoVersion, kyra2DemoNeed },
-	{ kKyra2, k2DemoVersionTlkE, kyra2TlkDemoNeed },
-	{ kKyra2, k2DemoVersionTlkF, kyra2TlkDemoNeed },
-	{ kKyra2, k2DemoVersionTlkG, kyra2TlkDemoNeed },
-	{ kLol, k2DemoLol, lolDemoNeed },
-
-	{ kKyra3, -1, kyra3Need },
-
-	{ kLol, -1, lolFloppyNeed },
-	{ kLol, kLolCD1, lolCDFile1Need },
-	{ kLol, kLolCD2, lolCDFile2Need },
-
-	{ -1, -1, 0 }
-};
-
-const SpecialExtension specialTable[] = {
-	{ kTalkieVersion, "CD" },
-	{ kDemoVersion, "DEM" },
-	{ kDemoCDVersion, "CD.DEM" },
-	{ kFMTownsVersionE , "TNS" },
-	{ kFMTownsVersionJ, "TNS" },
-	{ kAmigaVersion, "AMG" },
-
-	{ k2CDFile1E, "CD" },
-	{ k2CDFile1F, "CD" },
-	{ k2CDFile1G, "CD" },
-	{ k2CDFile1I, "CD" },
-	{ k2CDFile2E, "CD" },
-	{ k2CDFile2F, "CD" },
-	{ k2CDFile2G, "CD" },
-	{ k2CDDemoE, "CD" },
-	{ k2CDDemoF, "CD" },
-	{ k2CDDemoG, "CD" },
-
-	{ k2TownsFile1E, "TNS" },
-	{ k2TownsFile1J, "TNS" },
-	{ k2TownsFile2E, "TNS" },
-	{ k2TownsFile2J, "TNS" },
-	{ k2DemoVersion, "DEM" },
-	{ k2DemoLol, "DEM" },
-
-	{ kLolCD1, "CD" },
-	{ kLolCD2, "CD" },
-
-	{ -1, 0 }
-};
-
-const Language languageTable[] = {
-	{ EN_ANY, "ENG" },
-	{ DE_DEU, "GER" },
-	{ FR_FRA, "FRE" },
-	{ IT_ITA, "ITA" },
-	{ ES_ESP, "SPA" },
-	{ JA_JPN, "JPN" },
-	{ -1, 0 }
-};
-
-const Game kyra1Games[] = {
-	// Demos
-	{ kKyra1, EN_ANY, kPlatformPC, kDemoVersion, "7b7504c8560ffc914d34c44c71b3094c" },
-	{ kKyra1, EN_ANY, kPlatformPC, kDemoCDVersion, "226fdba99cb11ef1047131d9a50e6292" },
-
-	// Amiga
-	{ kKyra1, EN_ANY, kPlatformAmiga, kAmigaVersion, "b620564b6b7e0787b053ca9e35bd9f52" },
-
-	// 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" },
-
-	// 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
-
-	// FM-TOWNS
-	{ kKyra1, EN_ANY, kPlatformFMTowns, kFMTownsVersionE, "5a3ad60ccd0f2e29463e0368cd14a60d" },
-	{ kKyra1, JA_JPN, kPlatformFMTowns, kFMTownsVersionJ, "5a3ad60ccd0f2e29463e0368cd14a60d" },
-
-	GAME_DUMMY_ENTRY
-};
-
-const Game kyra2Games[] = {
-	// demos
-	{ kKyra2, EN_ANY, kPlatformPC, k2DemoVersion, "a620a37579dd44ab0403482285e3897f" },
-	{ kKyra2, EN_ANY, kPlatformPC, k2CDDemoE, "fa54d8abfe05f9186c05f7de7eaf1480" },
-	{ kKyra2, FR_FRA, kPlatformPC, k2CDDemoF, "fa54d8abfe05f9186c05f7de7eaf1480" },
-	{ kKyra2, DE_DEU, kPlatformPC, k2CDDemoG, "fa54d8abfe05f9186c05f7de7eaf1480" },
-
-	// floppy games
-	{ kKyra2, EN_ANY, kPlatformPC, k2FloppyFile1, "9b0f5e57b5a2ed88b5b989cbb402b6c7" },
-	{ kKyra2, FR_FRA, kPlatformPC, k2FloppyFile1, "df31cc9e37e1cf68df2fdc75ddf2d87b" },
-	{ kKyra2, DE_DEU, kPlatformPC, k2FloppyFile1, "0ca4f9a1438264a4c63c3218e064ed3b" },
-	{ kKyra2, IT_ITA, kPlatformPC, k2FloppyFile1, "178d3ab913f61bfba21d2fb196405e8c" },
-	{ kKyra2, EN_ANY, kPlatformPC, k2FloppyFile2, "7c3eadbe5122722cf2e5e1611e19dfb9" },
-	{ kKyra2, FR_FRA, kPlatformPC, k2FloppyFile2, "fc2c6782778e6c6d5a553d1cb73c98ad" },
-	{ kKyra2, DE_DEU, kPlatformPC, k2FloppyFile2, "0d9b0eb7b0ad889ec942d74d80dde1bf" },
-	{ kKyra2, IT_ITA, kPlatformPC, k2FloppyFile2, "3a61ed6b7c00ddae383a0361799e2ba6" },
-
-	// talkie games
-	{ kKyra2, EN_ANY, kPlatformPC, k2CDFile1E, "85bbc1cc6c4cef6ad31fc6ee79518efb" },
-	{ kKyra2, FR_FRA, kPlatformPC, k2CDFile1F, "85bbc1cc6c4cef6ad31fc6ee79518efb" },
-	{ kKyra2, DE_DEU, kPlatformPC, k2CDFile1G, "85bbc1cc6c4cef6ad31fc6ee79518efb" },
-	{ kKyra2, EN_ANY, kPlatformPC, k2CDFile2E, "e20d0d2e500f01e399ec588247a7e213" },
-	{ kKyra2, FR_FRA, kPlatformPC, k2CDFile2F, "e20d0d2e500f01e399ec588247a7e213" },
-	{ kKyra2, DE_DEU, kPlatformPC, k2CDFile2G, "e20d0d2e500f01e399ec588247a7e213" },
-	{ kKyra2, IT_ITA, kPlatformPC, k2CDFile1I, "130795aa8f2333250c895dae9028b9bb" }, // Italian Fan Translation (using same offsets as English)
-
-	// FM-TOWNS games
-	{ kKyra2, EN_ANY, kPlatformFMTowns, k2TownsFile1E, "74f50d79c919cc8e7196c24942ce43d7" },
-	{ kKyra2, JA_JPN, kPlatformFMTowns, k2TownsFile1J, "74f50d79c919cc8e7196c24942ce43d7" },
-	{ kKyra2, EN_ANY, kPlatformFMTowns, k2TownsFile2E, "a9a7fd4f05d00090e9e8bda073e6d431" },
-	{ kKyra2, JA_JPN, kPlatformFMTowns, k2TownsFile2J, "a9a7fd4f05d00090e9e8bda073e6d431" },
-
-	GAME_DUMMY_ENTRY
-};
-
-const Game kyra3Games[] = {
-	{ kKyra3, EN_ANY, kPlatformPC, -1, "bf68701eb591d0b72219f314c0d32688" },
-	GAME_DUMMY_ENTRY
-};
-
-const Game lolGames[] = {
-	// DOS demo
-	{ kLol, EN_ANY, kPlatformPC, k2DemoLol, "30bb5af87d38adb47d3e6ce06b1cb042" },
-
-	// DOS floppy
-	{ kLol, EN_ANY, kPlatformPC, -1, "6b843869772c1b779e1386be868c15dd" },
-
-	// DOS CD
-	{ kLol, EN_ANY, kPlatformPC, kLolCD1, "9d1778314de80598c0b0d032e2a1a1cf" },
-	{ kLol, EN_ANY, kPlatformPC, kLolCD2, "263998ec600afca1cc7b935c473df670" },
-
-	GAME_DUMMY_ENTRY
-};

Modified: scummvm/trunk/tools/create_kyradat/module.mk
===================================================================
--- scummvm/trunk/tools/create_kyradat/module.mk	2009-09-17 11:01:08 UTC (rev 44142)
+++ scummvm/trunk/tools/create_kyradat/module.mk	2009-09-17 12:02:17 UTC (rev 44143)
@@ -6,10 +6,12 @@
 MODULE_OBJS := \
 	create_kyradat.o \
 	extract.o \
+	games.o \
+	md5.o \
 	pak.o \
-	md5.o \
-	util.o \
-	search.o
+	search.o \
+	tables.o \
+	util.o
 
 # Set the name of the executable
 TOOL_EXECUTABLE := create_kyradat

Deleted: scummvm/trunk/tools/create_kyradat/providers.h
===================================================================
--- scummvm/trunk/tools/create_kyradat/providers.h	2009-09-17 11:01:08 UTC (rev 44142)
+++ scummvm/trunk/tools/create_kyradat/providers.h	2009-09-17 12:02:17 UTC (rev 44143)
@@ -1,201 +0,0 @@
-const ExtractEntry extractProviders[] = {
-	{ kForestSeq, kForestSeqProvider },
-	{ kKallakWritingSeq, kKallakWritingSeqProvider },
-	{ kKyrandiaLogoSeq, kKyrandiaLogoSeqProvider },
-	{ kKallakMalcolmSeq, kKallakMalcolmSeqProvider },
-	{ kMalcolmTreeSeq, kMalcolmTreeSeqProvider },
-	{ kWestwoodLogoSeq, kWestwoodLogoSeqProvider },
-	{ kDemo1Seq, kDemo1SeqProvider },
-	{ kDemo2Seq, kDemo2SeqProvider },
-	{ kDemo3Seq, kDemo3SeqProvider },
-	{ kDemo4Seq, kDemo4SeqProvider },
-	{ kAmuleteAnimSeq, kAmuleteAnimSeqProvider },
-	{ kOutroReunionSeq, kOutroReunionSeqProvider },
-	{ kIntroCPSStrings, kIntroCPSStringsProvider },
-	{ kIntroCOLStrings, kIntroCOLStringsProvider },
-	{ kIntroWSAStrings, kIntroWSAStringsProvider },
-	{ kIntroStrings, kIntroStringsProvider },
-	{ kOutroHomeString, kOutroHomeStringProvider },
-	{ kRoomFilenames, kRoomFilenamesProvider },
-	{ kRoomList, kRoomListProvider },
-	{ kCharacterImageFilenames, kCharacterImageFilenamesProvider },
-	{ kAudioTracks, kAudioTracksProvider },
-	{ kAudioTracksIntro, kAudioTracksIntroProvider },
-	{ kItemNames, kItemNamesProvider },
-	{ kTakenStrings, kTakenStringsProvider },
-	{ kPlacedStrings, kPlacedStringsProvider },
-	{ kDroppedStrings, kDroppedStringsProvider },
-	{ kNoDropStrings, kNoDropStringsProvider },
-	{ kPutDownString, kPutDownStringProvider },
-	{ kWaitAmuletString, kWaitAmuletStringProvider },
-	{ kBlackJewelString, kBlackJewelStringProvider },
-	{ kPoisonGoneString, kPoisonGoneStringProvider },
-	{ kHealingTipString, kHealingTipStringProvider },
-	{ kWispJewelStrings, kWispJewelStringsProvider },
-	{ kMagicJewelStrings, kMagicJewelStringsProvider },
-	{ kThePoisonStrings, kThePoisonStringsProvider },
-	{ kFluteStrings, kFluteStringsProvider },
-	{ kFlaskFullString, kFlaskFullStringProvider },
-	{ kFullFlaskString, kFullFlaskStringProvider },
-	{ kVeryCleverString, kVeryCleverStringProvider },
-	{ kNewGameString, kNewGameStringProvider },
-	{ kDefaultShapes, kDefaultShapesProvider },
-	{ kHealing1Shapes, kHealing1ShapesProvider },
-	{ kHealing2Shapes, kHealing2ShapesProvider },
-	{ kPoisonDeathShapes, kPoisonDeathShapesProvider },
-	{ kFluteShapes, kFluteShapesProvider },
-	{ kWinter1Shapes, kWinter1ShapesProvider },
-	{ kWinter2Shapes, kWinter2ShapesProvider },
-	{ kWinter3Shapes, kWinter3ShapesProvider },
-	{ kDrinkShapes, kDrinkShapesProvider },
-	{ kWispShapes, kWispShapesProvider },
-	{ kMagicAnimShapes, kMagicAnimShapesProvider },
-	{ kBranStoneShapes, kBranStoneShapesProvider },
-	{ kPaletteList1, kPaletteList1Provider },
-	{ kPaletteList2, kPaletteList2Provider },
-	{ kPaletteList3, kPaletteList3Provider },
-	{ kPaletteList4, kPaletteList4Provider },
-	{ kPaletteList5, kPaletteList5Provider },
-	{ kPaletteList6, kPaletteList6Provider },
-	{ kPaletteList7, kPaletteList7Provider },
-	{ kPaletteList8, kPaletteList8Provider },
-	{ kPaletteList9, kPaletteList9Provider },
-	{ kPaletteList10, kPaletteList10Provider },
-	{ kPaletteList11, kPaletteList11Provider },
-	{ kPaletteList12, kPaletteList12Provider },
-	{ kPaletteList13, kPaletteList13Provider },
-	{ kPaletteList14, kPaletteList14Provider },
-	{ kPaletteList15, kPaletteList15Provider },
-	{ kPaletteList16, kPaletteList16Provider },
-	{ kPaletteList17, kPaletteList17Provider },
-	{ kPaletteList18, kPaletteList18Provider },
-	{ kPaletteList19, kPaletteList19Provider },
-	{ kPaletteList20, kPaletteList20Provider },
-	{ kPaletteList21, kPaletteList21Provider },
-	{ kPaletteList22, kPaletteList22Provider },
-	{ kPaletteList23, kPaletteList23Provider },
-	{ kPaletteList24, kPaletteList24Provider },
-	{ kPaletteList25, kPaletteList25Provider },
-	{ kPaletteList26, kPaletteList26Provider },
-	{ kPaletteList27, kPaletteList27Provider },
-	{ kPaletteList28, kPaletteList28Provider },
-	{ kPaletteList29, kPaletteList29Provider },
-	{ kPaletteList30, kPaletteList30Provider },
-	{ kPaletteList31, kPaletteList31Provider },
-	{ kPaletteList32, kPaletteList32Provider },
-	{ kPaletteList33, kPaletteList33Provider },
-	{ kGUIStrings, kGUIStringsProvider },
-	{ kConfigStrings, kConfigStringsProvider },
-	{ kKyra1TownsSFXwdTable, kKyra1TownsSFXwdTableProvider },
-	{ kKyra1TownsSFXbtTable, kKyra1TownsSFXbtTableProvider },
-	{ kKyra1TownsCDATable, kKyra1TownsCDATableProvider },
-	{ kCreditsStrings, kCreditsStringsProvider },
-	{ kAmigaIntroSFXTable, kAmigaIntroSFXTableProvider },
-	{ kAmigaGameSFXTable, kAmigaGameSFXTableProvider },
-	{ k2SeqplayPakFiles, k2SeqplayPakFilesProvider },
-	{ k2SeqplayStrings, k2SeqplayStringsProvider },
-	{ k2SeqplaySfxFiles, k2SeqplaySfxFilesProvider },
-	{ k2SeqplayTlkFiles, k2SeqplayTlkFilesProvider },
-	{ k2SeqplaySeqData, k2SeqplaySeqDataProvider },
-	{ k2SeqplayCredits, k2SeqplayCreditsProvider },
-	{ k2SeqplayCreditsSpecial, k2SeqplayCreditsSpecialProvider },
-	{ k2SeqplayIntroTracks, k2SeqplayIntroTracksProvider },
-	{ k2SeqplayFinaleTracks, k2SeqplayFinaleTracksProvider },
-	{ k2SeqplayIntroCDA, k2SeqplayIntroCDAProvider },
-	{ k2SeqplayFinaleCDA, k2SeqplayFinaleCDAProvider },
-	{ k2SeqplayShapeAnimData, k2SeqplayShapeAnimDataProvider },
-	{ k2IngamePakFiles, k2IngamePakFilesProvider },
-	{ k2IngameSfxFiles, k2IngameSfxFilesProvider },
-	{ k2IngameSfxFilesTns, k2IngameSfxFilesTnsProvider },
-	{ k2IngameSfxIndex, k2IngameSfxIndexProvider },
-	{ k2IngameTracks, k2IngameTracksProvider },
-	{ k2IngameCDA, k2IngameCDAProvider },
-	{ k2IngameTalkObjIndex, k2IngameTalkObjIndexProvider },
-	{ k2IngameTimJpStrings, k2IngameTimJpStringsProvider },
-	{ k2IngameItemAnimData, k2IngameItemAnimDataProvider },
-	{ k2IngameTlkDemoStrings, k2IngameTlkDemoStringsProvider },
-	{ k3MainMenuStrings, k3MainMenuStringsProvider },
-	{ k3MusicFiles, k3MusicFilesProvider },
-	{ k3ScoreTable, k3ScoreTableProvider },
-	{ k3SfxFiles, k3SfxFilesProvider },
-	{ k3SfxMap, k3SfxMapProvider },
-	{ k3ItemAnimData, k3ItemAnimDataProvider },
-	{ k3ItemMagicTable, k3ItemMagicTableProvider },
-	{ k3ItemStringMap, k3ItemStringMapProvider },
-	{ kLolSeqplayIntroTracks, kLolSeqplayIntroTracksProvider },
-	{ kLolIngamePakFiles, kLolIngamePakFilesProvider },
-	{ kLolCharacterDefs, kLolCharacterDefsProvider },
-	{ kLolIngameSfxFiles, kLolIngameSfxFilesProvider },
-	{ kLolIngameSfxIndex, kLolIngameSfxIndexProvider },
-	{ kLolMusicTrackMap, kLolMusicTrackMapProvider },
-	{ kLolGMSfxIndex, kLolGMSfxIndexProvider },
-	{ kLolMT32SfxIndex, kLolMT32SfxIndexProvider },
-	{ kLolSpellProperties, kLolSpellPropertiesProvider },
-	{ kLolGameShapeMap, kLolGameShapeMapProvider },
-	{ kLolSceneItemOffs, kLolSceneItemOffsProvider },
-	{ kLolCharInvIndex, kLolCharInvIndexProvider },
-	{ kLolCharInvDefs, kLolCharInvDefsProvider },
-	{ kLolCharDefsMan, kLolCharDefsManProvider },
-	{ kLolCharDefsWoman, kLolCharDefsWomanProvider },
-	{ kLolCharDefsKieran, kLolCharDefsKieranProvider },
-	{ kLolCharDefsAkshel, kLolCharDefsAkshelProvider },
-	{ kLolExpRequirements, kLolExpRequirementsProvider },
-	{ kLolMonsterModifiers, kLolMonsterModifiersProvider },
-	{ kLolMonsterLevelOffsets, kLolMonsterLevelOffsetsProvider },
-	{ kLolMonsterDirFlags, kLolMonsterDirFlagsProvider },
-	{ kLolMonsterScaleY, kLolMonsterScaleYProvider },
-	{ kLolMonsterScaleX, kLolMonsterScaleXProvider },
-	{ kLolMonsterScaleWH, kLolMonsterScaleWHProvider },
-	{ kLolFlyingItemShp, kLolFlyingItemShpProvider },
-	{ kLolInventoryDesc, kLolInventoryDescProvider },
-	{ kLolLevelShpList, kLolLevelShpListProvider },
-	{ kLolLevelDatList, kLolLevelDatListProvider },
-	{ kLolCompassDefs, kLolCompassDefsProvider },
-	{ kLolItemPrices, kLolItemPricesProvider },
-	{ kLolStashSetup, kLolStashSetupProvider },
-	{ kLolDscUnk1, kLolDscUnk1Provider },
-	{ kLolDscShapeIndex1, kLolDscShapeIndex1Provider },
-	{ kLolDscShapeIndex2, kLolDscShapeIndex2Provider },
-	{ kLolDscScaleWidthData, kLolDscScaleWidthDataProvider },
-	{ kLolDscScaleHeightData, kLolDscScaleHeightDataProvider },
-	{ kLolDscX, kLolDscXProvider },
-	{ kLolDscY, kLolDscYProvider },
-	{ kLolDscTileIndex, kLolDscTileIndexProvider },
-	{ kLolDscUnk2, kLolDscUnk2Provider },
-	{ kLolDscDoorShapeIndex, kLolDscDoorShapeIndexProvider },
-	{ kLolDscDimData1, kLolDscDimData1Provider },
-	{ kLolDscDimData2, kLolDscDimData2Provider },
-	{ kLolDscBlockMap, kLolDscBlockMapProvider },
-	{ kLolDscDimMap, kLolDscDimMapProvider },
-	{ kLolDscShapeOvlIndex, kLolDscShapeOvlIndexProvider },
-	{ kLolDscBlockIndex, kLolDscBlockIndexProvider },
-	{ kLolDscDoor1, kLolDscDoor1Provider },
-	{ kLolDscDoorScale, kLolDscDoorScaleProvider },
-	{ kLolDscDoor4, kLolDscDoor4Provider },
-	{ kLolDscDoorX, kLolDscDoorXProvider },
-	{ kLolDscDoorY, kLolDscDoorYProvider },
-	{ kLolScrollXTop, kLolScrollXTopProvider },
-	{ kLolScrollYTop, kLolScrollYTopProvider },
-	{ kLolScrollXBottom, kLolScrollXBottomProvider },
-	{ kLolScrollYBottom, kLolScrollYBottomProvider },
-	{ kLolButtonDefs, kLolButtonDefsProvider },
-	{ kLolButtonList1, kLolButtonList1Provider },
-	{ kLolButtonList2, kLolButtonList2Provider },
-	{ kLolButtonList3, kLolButtonList3Provider },
-	{ kLolButtonList4, kLolButtonList4Provider },
-	{ kLolButtonList5, kLolButtonList5Provider },
-	{ kLolButtonList6, kLolButtonList6Provider },
-	{ kLolButtonList7, kLolButtonList7Provider },
-	{ kLolButtonList8, kLolButtonList8Provider },
-	{ kLolLegendData, kLolLegendDataProvider },
-	{ kLolMapCursorOvl, kLolMapCursorOvlProvider },
-	{ kLolMapStringId, kLolMapStringIdProvider },
-	{ kLolSpellbookAnim, kLolSpellbookAnimProvider },
-	{ kLolSpellbookCoords, kLolSpellbookCoordsProvider },
-	{ kLolHealShapeFrames, kLolHealShapeFramesProvider },
-	{ kLolLightningDefs, kLolLightningDefsProvider },
-	{ kLolFireballCoords, kLolFireballCoordsProvider },
-	{ kLolHistory, kLolHistoryProvider },
-	{ -1, NULL }
-};
-

Copied: scummvm/trunk/tools/create_kyradat/tables.cpp (from rev 44142, scummvm/trunk/tools/create_kyradat/tables.h)
===================================================================
--- scummvm/trunk/tools/create_kyradat/tables.cpp	                        (rev 0)
+++ scummvm/trunk/tools/create_kyradat/tables.cpp	2009-09-17 12:02:17 UTC (rev 44143)
@@ -0,0 +1,1844 @@
+/* ScummVM Tools
+ * Copyright (C) 2009 The ScummVM project
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "tables.h"
+
+// Id provider tables 
+
+const ExtractEntrySearchData kForestSeqProvider[] = {
+	{ UNK_LANG, kPlatformPC, { 0x00000195, 0x00001455, { { 0x86, 0xC2, 0x45, 0xEB, 0x16, 0x8A, 0x44, 0x73, 0xB4, 0x59, 0x13, 0x9B, 0x85, 0x40, 0x82, 0x81 } } } }, // floppy
+	{ UNK_LANG, kPlatformPC, { 0x000002DE, 0x00003946, { { 0x85, 0x79, 0xDC, 0xB8, 0x62, 0xAD, 0xD6, 0x01, 0xA5, 0x66, 0x6B, 0xC4, 0x61, 0xCA, 0x82, 0xF5 } } } }, // CD
+
+	{ UNK_LANG, kPlatformAmiga, { 0x00000273, 0x00001D80, { { 0x18, 0x32, 0xB7, 0xFB, 0xD8, 0x1A, 0x6D, 0x83, 0x75, 0xF5, 0x2B, 0xF7, 0xC0, 0xFD, 0x85, 0xEF } } } },
+
+	{ UNK_LANG, kPlatformFMTowns, { 0x00000196, 0x00001468, { { 0x06, 0x8D, 0xC1, 0x9B, 0xBC, 0x28, 0xE8, 0x36, 0x43, 0x67, 0x34, 0xAA, 0x78, 0xB9, 0xCB, 0x72 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kKallakWritingSeqProvider[] = {
+	{ UNK_LANG, kPlatformPC, { 0x000007F5, 0x00006DCD, { { 0x0E, 0x0A, 0x75, 0xA5, 0x71, 0x5A, 0xC6, 0x32, 0x52, 0x7F, 0xEC, 0x2B, 0x0B, 0xF2, 0x22, 0xE6 } } } }, // floppy
+	{ UNK_LANG, kPlatformPC, { 0x00000805, 0x0000719E, { { 0xA2, 0xFE, 0x0A, 0xAA, 0xD9, 0x43, 0x5A, 0xBE, 0x56, 0x38, 0x73, 0x42, 0xAC, 0xA9, 0x1B, 0x01 } } } }, // CD
+
+	{ UNK_LANG, kPlatformAmiga, { 0x000007F4, 0x00006DAD, { { 0x84, 0x9D, 0x82, 0xD2, 0x4E, 0x8B, 0xE2, 0x86, 0x82, 0x5E, 0xE7, 0x2C, 0x7A, 0xD6, 0xFE, 0x19 } } } },
+
+	{ UNK_LANG, kPlatformFMTowns, { 0x000007F7, 0x00006E23, { { 0x97, 0x8C, 0x63, 0x8D, 0x91, 0x68, 0xA5, 0x63, 0x55, 0x43, 0xE7, 0xE0, 0x12, 0xF9, 0x80, 0xA4 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kKyrandiaLogoSeqProvider[] = {
+	{ UNK_LANG, kPlatformUnknown, { 0x0000005C, 0x000003D3, { { 0x75, 0xC5, 0x55, 0x54, 0x00, 0xD7, 0xE9, 0x26, 0x0F, 0x01, 0xB1, 0xB7, 0xA9, 0x29, 0xF7, 0x69 } } } },
+	{ UNK_LANG, kPlatformPC, { 0x000000A6, 0x00000A09, { { 0x70, 0x6E, 0x74, 0xBB, 0xD7, 0x09, 0x05, 0xDD, 0xA3, 0x09, 0x96, 0x40, 0xBD, 0x01, 0x19, 0x05 } } } }, // CD
+	{ UNK_LANG, kPlatformPC, { 0x00000054, 0x00000300, { { 0x4E, 0xAD, 0xD0, 0x73, 0xD2, 0x3C, 0xF6, 0x6B, 0x65, 0x23, 0xA2, 0x30, 0xD6, 0xEE, 0x1C, 0x13 } } } }, // demo
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kKallakMalcolmSeqProvider[] = {
+	{ UNK_LANG, kPlatformPC, { 0x0000026B, 0x00002132, { { 0x51, 0x07, 0x32, 0xA2, 0x09, 0x47, 0x97, 0x02, 0x85, 0x31, 0x39, 0x93, 0x3A, 0x53, 0x47, 0xA5 } } } }, // floppy
+	{ UNK_LANG, kPlatformPC, { 0x0000027B, 0x0000220A, { { 0xB7, 0xC1, 0x57, 0x04, 0x9B, 0x67, 0x82, 0x7B, 0x6E, 0xFD, 0x59, 0xF2, 0x10, 0x93, 0x89, 0x12 } } } }, // CD
+
+	{ UNK_LANG, kPlatformAmiga, { 0x000002B8, 0x0000280B, { { 0x98, 0xC8, 0x36, 0x8C, 0xF8, 0x92, 0xC2, 0xB9, 0x1B, 0x71, 0x6B, 0x4C, 0xA4, 0x6C, 0xF6, 0x30 } } } },
+
+	{ UNK_LANG, kPlatformFMTowns, { 0x0000026D, 0x00002188, { { 0x7E, 0x3B, 0x06, 0x69, 0x11, 0x59, 0xBE, 0x42, 0xCB, 0x33, 0x9C, 0x15, 0xCF, 0x61, 0xF6, 0xB0 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kMalcolmTreeSeqProvider[] = {
+	{ UNK_LANG, kPlatformPC, { 0x00000216, 0x000014FB, { { 0xBA, 0x6F, 0x63, 0xD5, 0x44, 0xCE, 0xE8, 0x20, 0xD4, 0x4C, 0x06, 0x58, 0x21, 0x8E, 0x07, 0x8B } } } }, // floppy
+	{ UNK_LANG, kPlatformPC, { 0x00000230, 0x0000192A, { { 0x28, 0xCC, 0x89, 0x40, 0x8A, 0xF7, 0xCB, 0xC0, 0x11, 0x8F, 0x0F, 0xE5, 0x5F, 0x24, 0x2D, 0x32 } } } }, // CD
+
+	{ UNK_LANG, kPlatformAmiga, { 0x00000214, 0x000014C4, { { 0xA2, 0x60, 0x16, 0x14, 0x20, 0xE4, 0x8D, 0x89, 0xC4, 0x30, 0x07, 0x21, 0xC9, 0x26, 0xA6, 0x84 } } } },
+
+	{ UNK_LANG, kPlatformFMTowns, { 0x00000218, 0x00001551, { { 0x30, 0x42, 0xD3, 0x7D, 0x6B, 0x43, 0x3B, 0xC7, 0x63, 0x56, 0x7D, 0x12, 0xE0, 0x53, 0x41, 0x48 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kWestwoodLogoSeqProvider[] = {
+	{ UNK_LANG, kPlatformUnknown, { 0x0000004B, 0x000002FE, { { 0x6E, 0xDA, 0x5D, 0x1E, 0xF4, 0x38, 0xAE, 0x7A, 0x9F, 0xBC, 0x00, 0x7C, 0x77, 0x9D, 0x03, 0xAF } } } },
+	{ UNK_LANG, kPlatformPC, { 0x0000004B, 0x0000032A, { { 0x9A, 0x54, 0x6F, 0x6C, 0x70, 0xD1, 0x02, 0x94, 0xD1, 0xA1, 0xA7, 0xBE, 0x1B, 0x10, 0xBD, 0x2F } } } }, // CD
+	{ UNK_LANG, kPlatformPC, { 0x00000044, 0x00000243, { { 0x00, 0x11, 0x10, 0x64, 0x60, 0xE8, 0xB5, 0x59, 0x00, 0x60, 0xF5, 0x10, 0xB5, 0x63, 0x9D, 0x55 } } } }, // demo
+
+	{ UNK_LANG, kPlatformAmiga, { 0x0000004D, 0x00000319, { { 0xE9, 0x5D, 0xD4, 0x60, 0x4E, 0xA6, 0x92, 0x30, 0x9C, 0x77, 0x99, 0xBC, 0xB1, 0x97, 0xFB, 0xBD } } } },
+
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kDemo1SeqProvider[] = {
+	{ UNK_LANG, kPlatformUnknown, { 0x00000026, 0x0000016E, { { 0x61, 0xF2, 0x84, 0x42, 0x89, 0x6E, 0xB8, 0x0D, 0x01, 0xB7, 0xE4, 0x49, 0xA1, 0x72, 0xDC, 0x66 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kDemo2SeqProvider[] = {
+	{ UNK_LANG, kPlatformUnknown, { 0x00000023, 0x00000151, { { 0xE7, 0x9F, 0xA7, 0x80, 0xE3, 0xC1, 0x63, 0xF2, 0x3F, 0x7B, 0x64, 0xD9, 0x70, 0x3A, 0xF1, 0x55 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kDemo3SeqProvider[] = {
+	{ UNK_LANG, kPlatformUnknown, { 0x00000059, 0x000001A8, { { 0x9E, 0x90, 0x4F, 0x9E, 0xBC, 0x39, 0x37, 0xD1, 0x10, 0x67, 0x8C, 0xE5, 0x84, 0xFD, 0xD9, 0x7C } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kDemo4SeqProvider[] = {
+	{ UNK_LANG, kPlatformUnknown, { 0x00000020, 0x0000013E, { { 0xB7, 0x67, 0x1D, 0x50, 0x11, 0xD0, 0x16, 0x91, 0x40, 0x40, 0xD1, 0xC0, 0xA0, 0x79, 0x3D, 0xCE } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kAmuleteAnimSeqProvider[] = {
+	{ UNK_LANG, kPlatformUnknown, { 0x0000002A, 0x0000025D, { { 0xB1, 0x59, 0x3C, 0x9A, 0x61, 0xC0, 0x1D, 0x80, 0xB5, 0x0C, 0x2E, 0xF9, 0xF6, 0x36, 0xED, 0x7D } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kOutroReunionSeqProvider[] = {
+	{ UNK_LANG, kPlatformPC, { 0x00000547, 0x0000781C, { { 0xCF, 0xD6, 0x1D, 0x3D, 0x14, 0x40, 0x88, 0x35, 0x36, 0x4F, 0x0B, 0x1F, 0x9A, 0x1C, 0x3D, 0xAC } } } }, // floppy
+	{ UNK_LANG, kPlatformPC, { 0x000005E5, 0x00008918, { { 0x6A, 0x33, 0x8C, 0xB0, 0x16, 0x57, 0x2D, 0xEB, 0xB2, 0xE1, 0x64, 0x80, 0x98, 0x99, 0x98, 0x19 } } } }, // CD
+
+	{ UNK_LANG, kPlatformAmiga, { 0x0000054A, 0x0000785F, { { 0x55, 0xEA, 0xB8, 0x7F, 0x3A, 0x86, 0xCD, 0xA6, 0xBC, 0xA7, 0x9A, 0x39, 0xED, 0xF5, 0x30, 0x0A } } } },
+
+	{ UNK_LANG, kPlatformFMTowns, { 0x00000547, 0x00007876, { { 0x7A, 0xC7, 0x80, 0x34, 0x7A, 0x1B, 0xAB, 0xF8, 0xA7, 0x2F, 0x63, 0x3C, 0xDA, 0x89, 0x3F, 0x82 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kIntroCPSStringsProvider[] = {
+	{ UNK_LANG, kPlatformPC, { 0x00000014, 0x0000071D, { { 0xBA, 0xB6, 0x58, 0xB3, 0x28, 0x5E, 0x9F, 0x77, 0x69, 0x9D, 0x77, 0x53, 0x9D, 0x0D, 0xB0, 0x29 } } } }, // floppy
+	{ UNK_LANG, kPlatformPC, { 0x00000015, 0x00000786, { { 0xCF, 0x09, 0xE1, 0xD9, 0x8E, 0x34, 0x5D, 0xEA, 0xBC, 0xAC, 0xC4, 0xF4, 0x4A, 0xEC, 0xFF, 0xC1 } } } }, // CD
+	{ UNK_LANG, kPlatformPC, { 0x0000000C, 0x00000413, { { 0xA1, 0xE3, 0x06, 0x53, 0x23, 0x9A, 0xE0, 0xF1, 0xE4, 0xFD, 0xD9, 0x05, 0x22, 0xA6, 0x28, 0x46 } } } }, // demo
+
+	{ UNK_LANG, kPlatformAmiga, { 0x00000016, 0x0000070A, { { 0xD9, 0xDB, 0x91, 0xCD, 0x93, 0x81, 0xC4, 0x3F, 0x14, 0xF1, 0xC5, 0x02, 0xE7, 0x3F, 0x3A, 0x6C } } } },
+
+	{ UNK_LANG, kPlatformFMTowns, { 0x00000015, 0x0000071D, { { 0x59, 0x65, 0x08, 0xF9, 0x4C, 0x81, 0xA1, 0xE3, 0x68, 0xF7, 0xE3, 0xF6, 0x33, 0x5F, 0xF5, 0x36 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kIntroCOLStringsProvider[] = {
+	{ UNK_LANG, kPlatformPC, { 0x0000002B, 0x00000F09, { { 0x01, 0x40, 0x65, 0xC1, 0x33, 0xAA, 0x64, 0xA7, 0x44, 0xD5, 0x89, 0x68, 0x17, 0x47, 0xC7, 0x1D } } } },
+	{ UNK_LANG, kPlatformPC, { 0x00000046, 0x0000174F, { { 0xAA, 0x59, 0x01, 0x20, 0x06, 0xB4, 0x80, 0xC0, 0x84, 0x38, 0xFD, 0x97, 0xBF, 0x78, 0xDD, 0x78 } } } }, // demo
+
+	{ UNK_LANG, kPlatformAmiga, { 0x0000002E, 0x00000F09, { { 0x2A, 0x42, 0xB8, 0x4E, 0xC6, 0xF0, 0x5F, 0x4A, 0x08, 0xB4, 0xE3, 0xE5, 0xBD, 0x32, 0x11, 0x06 } } } },
+
+	{ UNK_LANG, kPlatformFMTowns, { 0x00000030, 0x00000F09, { { 0x05, 0x7B, 0x69, 0xB7, 0x6A, 0xC3, 0x7F, 0xD9, 0x7E, 0x51, 0x87, 0xA5, 0x31, 0xD8, 0x80, 0xB3 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kIntroWSAStringsProvider[] = {
+	{ UNK_LANG, kPlatformPC, { 0x00000086, 0x00002E5D, { { 0xD2, 0x8D, 0x62, 0xEF, 0xEB, 0x75, 0x04, 0x13, 0x64, 0x85, 0x6B, 0x6C, 0xE8, 0x6C, 0xCF, 0x52 } } } },
+	{ UNK_LANG, kPlatformPC, { 0x0000004D, 0x00001AEC, { { 0x15, 0xBC, 0x8C, 0xD9, 0x33, 0x0C, 0xC5, 0x66, 0x87, 0x3B, 0x76, 0xEE, 0x0C, 0x41, 0x4D, 0x1F } } } }, // demo
+
+	{ UNK_LANG, kPlatformAmiga, { 0x00000080, 0x00002E5D, { { 0x67, 0x03, 0x20, 0xDF, 0xAA, 0x3C, 0x6A, 0xB5, 0x45, 0xD0, 0x00, 0x2B, 0x30, 0xCC, 0x36, 0xB6 } } } },
+
+	{ UNK_LANG, kPlatformFMTowns, { 0x00000093, 0x00002E5D, { { 0xAB, 0xD1, 0x32, 0x89, 0x2A, 0x8D, 0xC0, 0x2C, 0x87, 0x87, 0xA3, 0x14, 0x2A, 0x2A, 0x22, 0x7F } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kIntroStringsProvider[] = {
+	{ EN_ANY, kPlatformPC, { 0x000004F5, 0x0001A7B1, { { 0xC7, 0x65, 0x5B, 0x5A, 0x56, 0x43, 0x94, 0x55, 0x5B, 0x00, 0xFD, 0x5D, 0xF4, 0xB5, 0x04, 0x15 } } } }, // floppy
+	{ EN_ANY, kPlatformPC, { 0x000004F6, 0x0001A7B1, { { 0xDE, 0x41, 0xB1, 0x98, 0xD5, 0xAD, 0x6B, 0xBA, 0x33, 0x04, 0x19, 0x5D, 0xCC, 0x07, 0xB5, 0x56 } } } }, // CD
+	{ EN_ANY, kPlatformPC, { 0x000002FA, 0x00010181, { { 0x48, 0xD3, 0x1B, 0x8E, 0x8D, 0xBC, 0x1F, 0x51, 0x35, 0x71, 0xE2, 0xAB, 0xC8, 0xBE, 0xFC, 0x88 } } } }, // demo
+
+	{ FR_FRA, kPlatformPC, { 0x000005EF, 0x000207E6, { { 0xDC, 0x6C, 0x9A, 0x7C, 0x19, 0x45, 0x2B, 0x25, 0x84, 0xCC, 0xE1, 0x40, 0xFE, 0x8E, 0xF4, 0x51 } } } }, // floppy
+	{ FR_FRA, kPlatformPC, { 0x000005F0, 0x000207E6, { { 0xB8, 0x51, 0xEA, 0x44, 0x64, 0x04, 0xE4, 0x6A, 0x7B, 0xBD, 0x31, 0x62, 0xC0, 0xDD, 0xEA, 0xEF } } } }, // CD
+
+	{ DE_DEU, kPlatformPC, { 0x00000605, 0x000212AB, { { 0x8F, 0x3A, 0x9D, 0x9A, 0x81, 0xF2, 0x4A, 0x90, 0xBC, 0xBD, 0x62, 0x8B, 0xD8, 0xD6, 0xF4, 0x5D } } } }, // floppy
+	{ DE_DEU, kPlatformPC, { 0x00000606, 0x000212AB, { { 0xB0, 0x78, 0x86, 0xFB, 0xCB, 0x3D, 0x1E, 0x1E, 0x86, 0xE7, 0x2C, 0x2B, 0x3A, 0x3C, 0x6F, 0x1C } } } }, // CD
+
+	{ IT_ITA, kPlatformPC, { 0x0000057C, 0x0001DF02, { { 0x4B, 0x09, 0xBC, 0xBC, 0xB3, 0x3C, 0x69, 0xEB, 0xA6, 0xB5, 0x76, 0xED, 0xC7, 0x57, 0x71, 0xB0 } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x000005F0, 0x0001CF13, { { 0x4F, 0xA0, 0x47, 0x57, 0x6D, 0x2D, 0xA6, 0x62, 0x06, 0xBE, 0x86, 0xD2, 0xD7, 0xEA, 0x2E, 0xD6 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x000005CF, 0x00020415, { { 0xCC, 0xE5, 0x9F, 0xB8, 0xCA, 0xFA, 0x2D, 0x05, 0xB8, 0xAF, 0x9F, 0x1F, 0x8A, 0xA8, 0x56, 0xDE } } } },
+
+	{ EN_ANY, kPlatformAmiga, { 0x0000050A, 0x0001A7B1, { { 0x1B, 0x74, 0x71, 0x4C, 0xAB, 0x81, 0x10, 0x59, 0x8A, 0x21, 0x50, 0xBB, 0xFE, 0x6F, 0xD0, 0xE8 } } } },
+
+	{ EN_ANY, kPlatformFMTowns, { 0x00000545, 0x0001A84C, { { 0xEF, 0xE2, 0xE4, 0x92, 0xE1, 0x18, 0xF8, 0x3C, 0x91, 0x29, 0x4D, 0x82, 0xA4, 0x3E, 0xE6, 0x7D } } } },
+	{ JA_JPN, kPlatformFMTowns, { 0x000005FB, 0x0003163E, { { 0x16, 0x28, 0x83, 0xCE, 0x29, 0x94, 0x9F, 0x82, 0xDC, 0xD4, 0x06, 0xE8, 0x67, 0xC9, 0x56, 0x29 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kOutroHomeStringProvider[] = {
+	{ EN_ANY, kPlatformUnknown, { 0x00000005, 0x00000189, { { 0xA5, 0xF3, 0x03, 0x3F, 0x43, 0x2B, 0x77, 0xCC, 0x5C, 0x96, 0x64, 0xB1, 0x75, 0xB5, 0x3E, 0xF6 } } } },
+
+	{ FR_FRA, kPlatformPC, { 0x00000007, 0x00000267, { { 0xD0, 0xC1, 0x11, 0x49, 0x3D, 0x3F, 0xCE, 0x84, 0x8F, 0xEF, 0xE3, 0xFD, 0x43, 0xCA, 0x92, 0xB0 } } } },
+
+	{ DE_DEU, kPlatformPC, { 0x0000000E, 0x00000473, { { 0xB6, 0xEB, 0xE8, 0x22, 0x67, 0x24, 0xA9, 0xA3, 0x94, 0x55, 0xC6, 0x57, 0x17, 0x15, 0x5B, 0x04 } } } },
+
+	{ UNK_LANG, kPlatformPC, { 0x00000005, 0x00000178, { { 0x2E, 0x9C, 0x94, 0x0F, 0x29, 0x77, 0x27, 0x1D, 0x77, 0x1E, 0x5A, 0xF8, 0x0E, 0x8D, 0x09, 0x6B } } } }, // floppy italian + spanish
+
+	{ IT_ITA, kPlatformPC, { 0x00000007, 0x000001B8, { { 0x17, 0x95, 0x5B, 0x4F, 0xE2, 0x07, 0x5A, 0x49, 0xFA, 0xCE, 0x53, 0x8B, 0xE7, 0x46, 0x69, 0xC7 } } } }, // (fan) CD
+
+	{ JA_JPN, kPlatformFMTowns, { 0x00000007, 0x000003E8, { { 0x68, 0x35, 0x87, 0x53, 0xD9, 0x53, 0x1F, 0x13, 0x24, 0x61, 0x0D, 0x8D, 0x33, 0x91, 0xF3, 0x47 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kRoomFilenamesProvider[] = {
+	{ UNK_LANG, kPlatformPC, { 0x000002DC, 0x0000B7AA, { { 0x31, 0x56, 0x41, 0x69, 0x1E, 0x84, 0x54, 0x2C, 0xF7, 0x7B, 0x98, 0x25, 0xF3, 0x91, 0x56, 0xFD } } } },
+
+	{ UNK_LANG, kPlatformAmiga, { 0x00000308, 0x0000B7AA, { { 0x6D, 0xA4, 0xE8, 0x27, 0x68, 0x24, 0xCF, 0xAA, 0x30, 0x32, 0x71, 0x74, 0x36, 0x68, 0x82, 0x20 } } } },
+
+	{ UNK_LANG, kPlatformFMTowns, { 0x0000034C, 0x0000B7AA, { { 0x7C, 0x1B, 0x89, 0x09, 0xF0, 0x87, 0x3C, 0x64, 0x3D, 0x0E, 0x61, 0xCC, 0x09, 0x8D, 0xC9, 0x95 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kRoomListProvider[] = {
+	{ UNK_LANG, kPlatformPC, { 0x00004DD6, 0x0010312B, { { 0xC6, 0xF0, 0xC4, 0x2C, 0x5A, 0xD7, 0x48, 0xE4, 0x41, 0x23, 0x65, 0x6D, 0xC8, 0xC7, 0xCE, 0xF5 } } } },
+
+	{ UNK_LANG, kPlatformAmiga, { 0x00004ECC, 0x0010312B, { { 0x9A, 0x91, 0xF1, 0x9C, 0x8A, 0x96, 0x1C, 0x7B, 0xB7, 0xE4, 0xF1, 0xE9, 0x7D, 0xEF, 0x40, 0xBF } } } },
+
+	{ UNK_LANG, kPlatformFMTowns, { 0x000064E8, 0x0010312B, { { 0x94, 0x5C, 0x87, 0x35, 0x35, 0x6B, 0x3E, 0xBF, 0x55, 0x3D, 0xDB, 0xD9, 0xFB, 0x97, 0x27, 0x5D } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kCharacterImageFilenamesProvider[] = {
+	{ UNK_LANG, kPlatformPC, { 0x000000E4, 0x00003A8F, { { 0x7A, 0x77, 0x6D, 0x26, 0xC8, 0x43, 0xCB, 0x74, 0x46, 0x2E, 0x04, 0x22, 0x89, 0x27, 0x33, 0x06 } } } },
+
+	{ UNK_LANG, kPlatformAmiga, { 0x000000F0, 0x00003A8F, { { 0xC0, 0xD9, 0x8C, 0x2B, 0x65, 0x51, 0x7C, 0x13, 0x52, 0x7E, 0xF7, 0x63, 0xA6, 0xA9, 0xCE, 0x40 } } } },
+
+	{ UNK_LANG, kPlatformFMTowns, { 0x000000F7, 0x00003A8F, { { 0x1F, 0xAB, 0x8E, 0x5F, 0xAD, 0x76, 0x57, 0x37, 0xD7, 0x9B, 0x3F, 0x35, 0x4B, 0xA0, 0x98, 0x37 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kAudioTracksProvider[] = {
+	{ UNK_LANG, kPlatformPC, { 0x00000041, 0x00000FBF, { { 0xB5, 0xA2, 0x90, 0xE9, 0x73, 0x83, 0x47, 0x5A, 0xB3, 0x3E, 0x04, 0xBB, 0xAA, 0xC8, 0x84, 0x53 } } } },
+
+	{ UNK_LANG, kPlatformFMTowns, { 0x0000005D, 0x0000154E, { { 0xA7, 0x7E, 0x03, 0x0A, 0x81, 0x54, 0xD2, 0x5D, 0x7B, 0x33, 0x07, 0xBF, 0x70, 0x01, 0x4B, 0x79 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kAudioTracksIntroProvider[] = {
+	{ UNK_LANG, kPlatformUnknown, { 0x00000006, 0x0000022C, { { 0x5F, 0xC9, 0xE1, 0x4B, 0x34, 0x52, 0xB9, 0xF8, 0xFF, 0x37, 0x8B, 0xF4, 0xEF, 0x5E, 0xC5, 0xDA } } } }, // floppy + demo
+	{ UNK_LANG, kPlatformUnknown, { 0x0000000C, 0x00000458, { { 0xEB, 0xB3, 0x96, 0xA5, 0x07, 0xE6, 0x11, 0x58, 0xDB, 0x3F, 0x34, 0x30, 0xFB, 0x7B, 0x92, 0xC8 } } } }, // CD
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kItemNamesProvider[] = {
+	{ EN_ANY, kPlatformPC, { 0x00000468, 0x00018B13, { { 0xCE, 0xFE, 0x19, 0x5D, 0x3F, 0xD7, 0x2A, 0xF6, 0xD0, 0xC5, 0xBC, 0x17, 0x6A, 0x52, 0xDB, 0xFE } } } },
+
+	{ FR_FRA, kPlatformPC, { 0x00000506, 0x0001C3CC, { { 0x46, 0xD4, 0x19, 0x04, 0x2A, 0x46, 0xCD, 0x63, 0x41, 0x5A, 0x8E, 0xA8, 0x00, 0xDD, 0x02, 0x77 } } } },
+
+	{ DE_DEU, kPlatformPC, { 0x00000512, 0x0001DD2C, { { 0x5D, 0xB0, 0x6B, 0x8E, 0x9C, 0x70, 0x09, 0x90, 0x3C, 0xC6, 0x58, 0x1F, 0x71, 0x24, 0x76, 0x56 } } } },
+
+	{ IT_ITA, kPlatformPC, { 0x00000591, 0x0001F869, { { 0x4D, 0xD7, 0x66, 0xBB, 0x9A, 0xD8, 0x79, 0x1E, 0x92, 0x2B, 0xE5, 0xC2, 0x0F, 0x02, 0x0B, 0x35 } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x00000506, 0x0001C1D9, { { 0xF2, 0x2D, 0x18, 0x13, 0x61, 0xFB, 0x57, 0x93, 0x5C, 0xDC, 0x79, 0x44, 0x96, 0x01, 0xA6, 0x90 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x00000530, 0x0001D90A, { { 0x52, 0xFB, 0xA8, 0x3F, 0xA3, 0x6F, 0xC2, 0x67, 0x55, 0x9F, 0x66, 0x9F, 0xFD, 0x79, 0x44, 0xDF } } } },
+
+	{ EN_ANY, kPlatformAmiga, { 0x00000380, 0x00012960, { { 0x2D, 0x81, 0xCF, 0x7A, 0x9D, 0x71, 0x83, 0xB7, 0xE5, 0x00, 0xB0, 0x6E, 0x25, 0x94, 0xCB, 0xA4 } } } },
+
+	{ EN_ANY, kPlatformFMTowns, { 0x00000505, 0x00018B13, { { 0x62, 0x76, 0x84, 0x5D, 0x8D, 0xBA, 0x23, 0xC5, 0x67, 0x26, 0x22, 0xBD, 0xBE, 0x81, 0x2D, 0xFF } } } },
+	{ JA_JPN, kPlatformFMTowns, { 0x00000587, 0x000247A1, { { 0xE8, 0xCA, 0x1E, 0x34, 0x05, 0xE5, 0x08, 0xCA, 0xA7, 0xFE, 0x55, 0xCB, 0x75, 0xD0, 0xA7, 0x19 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kTakenStringsProvider[] = {
+	{ EN_ANY, kPlatformPC, { 0x00000010, 0x000004C2, { { 0x08, 0xC0, 0x66, 0xB1, 0x45, 0x04, 0x78, 0xF9, 0xAF, 0x0F, 0x52, 0xC8, 0x0E, 0x0C, 0x69, 0x86 } } } },
+
+	{ FR_FRA, kPlatformPC, { 0x0000001E, 0x000008FA, { { 0xC9, 0xCC, 0x2E, 0x0B, 0xE4, 0xE0, 0x44, 0xBD, 0xC2, 0x10, 0x09, 0xA3, 0x36, 0xB1, 0x5D, 0x1C } } } }, // floppy
+	{ FR_FRA, kPlatformPC, { 0x0000000F, 0x0000047D, { { 0xE8, 0xB5, 0x15, 0xD5, 0x96, 0x81, 0xD2, 0x84, 0xAB, 0x33, 0xC1, 0x1C, 0x47, 0x1B, 0xFE, 0xDB } } } }, // CD
+
+	{ DE_DEU, kPlatformPC, { 0x0000001C, 0x000009C0, { { 0xA8, 0x64, 0xDD, 0x9D, 0x91, 0x42, 0x04, 0x26, 0xD0, 0x80, 0x40, 0xED, 0x08, 0x51, 0xC9, 0xBB } } } },
+
+	{ IT_ITA, kPlatformPC, { 0x00000014, 0x00000588, { { 0x5B, 0x75, 0xAE, 0xD7, 0x50, 0x6C, 0x3E, 0x65, 0x5C, 0xF8, 0x84, 0x34, 0x48, 0x58, 0x0E, 0x6E } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x0000000F, 0x000002F0, { { 0x37, 0x22, 0x62, 0xE4, 0x1B, 0x1F, 0xD6, 0x9E, 0x94, 0xA3, 0x41, 0x00, 0xD5, 0x29, 0x28, 0x09 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x00000014, 0x000005D8, { { 0xD6, 0x00, 0x90, 0x6A, 0x75, 0x3B, 0xF1, 0xFE, 0xF4, 0x3E, 0x0E, 0x1D, 0x39, 0xEB, 0x2D, 0xC8 } } } },
+
+	{ EN_ANY, kPlatformAmiga, { 0x00000008, 0x00000261, { { 0x93, 0x5B, 0x79, 0xE8, 0x89, 0x8E, 0xB5, 0x37, 0x39, 0x2A, 0xB0, 0x04, 0x98, 0x80, 0x5A, 0x4E } } } },
+
+	{ EN_ANY, kPlatformFMTowns, { 0x0000001C, 0x00000AED, { { 0x32, 0xD2, 0x87, 0x67, 0x3D, 0x01, 0x50, 0xF3, 0xFA, 0x19, 0x7A, 0xB0, 0xF8, 0x6F, 0x8A, 0x07 } } } },
+	{ JA_JPN, kPlatformFMTowns, { 0x0000001F, 0x00000EB7, { { 0x7F, 0x8C, 0xFF, 0x35, 0x30, 0x71, 0x9A, 0x78, 0xCC, 0x07, 0x11, 0x86, 0xE3, 0x0D, 0x16, 0xDF } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kPlacedStringsProvider[] = {
+	{ EN_ANY, kPlatformUnknown, { 0x00000009, 0x000002B7, { { 0xE7, 0xCF, 0x8A, 0x19, 0xEF, 0x98, 0xE5, 0x74, 0x46, 0x46, 0x47, 0x65, 0xB6, 0x81, 0x70, 0x0A } } } },
+
+	{ FR_FRA, kPlatformPC, { 0x00000011, 0x00000545, { { 0x05, 0xEF, 0x74, 0x54, 0x06, 0xB7, 0x64, 0x47, 0x21, 0x56, 0x55, 0x74, 0x70, 0x2D, 0xA8, 0x23 } } } },
+
+	{ DE_DEU, kPlatformPC, { 0x0000000B, 0x00000389, { { 0xB9, 0x74, 0xBE, 0x63, 0xB4, 0xA4, 0x8A, 0x04, 0xD9, 0x50, 0x73, 0xB7, 0x01, 0x9E, 0x77, 0xD3 } } } },
+
+	{ IT_ITA, kPlatformPC, { 0x0000000D, 0x0000040D, { { 0x9C, 0x71, 0x53, 0x35, 0xC3, 0xE8, 0x46, 0xB9, 0xD2, 0xFA, 0x1C, 0x8C, 0xC3, 0xFF, 0xBC, 0x1F } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x00000011, 0x000003B8, { { 0xC8, 0xA6, 0xE4, 0x8A, 0xF7, 0x4C, 0x3F, 0xA6, 0x24, 0x7F, 0xEF, 0xE4, 0x63, 0x8B, 0x72, 0xF3 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x0000000D, 0x00000439, { { 0x57, 0xAE, 0x1C, 0xC1, 0xF5, 0xE8, 0x5B, 0x9E, 0x90, 0x02, 0xB9, 0x8D, 0x86, 0x38, 0xFB, 0xA8 } } } },
+
+	{ JA_JPN, kPlatformFMTowns, { 0x0000000D, 0x0000074C, { { 0x0E, 0x1C, 0x1F, 0xD2, 0xCF, 0xBF, 0x40, 0xE1, 0x59, 0x0F, 0x1B, 0x46, 0xED, 0x8B, 0x96, 0x8E } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kDroppedStringsProvider[] = {
+	{ EN_ANY, kPlatformUnknown, { 0x0000000A, 0x0000033C, { { 0x96, 0x63, 0xFD, 0x73, 0x71, 0xCC, 0x62, 0x59, 0x86, 0x02, 0x47, 0x55, 0x82, 0xF8, 0x5E, 0x1F } } } },
+
+	{ FR_FRA, kPlatformPC, { 0x00000011, 0x00000579, { { 0x3D, 0x0C, 0x3C, 0xAD, 0x2E, 0xE3, 0x7A, 0x5A, 0x4A, 0x21, 0x1C, 0x96, 0xC5, 0x5A, 0xA7, 0x9E } } } },
+
+	{ DE_DEU, kPlatformPC, { 0x00000011, 0x00000612, { { 0xEC, 0xCD, 0x99, 0x58, 0xF7, 0x08, 0x92, 0x43, 0x95, 0x10, 0x6B, 0xDD, 0x61, 0xF7, 0x5C, 0xA4 } } } },
+
+	{ IT_ITA, kPlatformPC, { 0x0000000B, 0x0000031B, { { 0x32, 0x0C, 0xCD, 0x83, 0xF6, 0x97, 0xC8, 0x76, 0x57, 0x6B, 0x7C, 0xAD, 0x51, 0xEB, 0x91, 0x1F } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x00000011, 0x000003B8, { { 0xC8, 0xA6, 0xE4, 0x8A, 0xF7, 0x4C, 0x3F, 0xA6, 0x24, 0x7F, 0xEF, 0xE4, 0x63, 0x8B, 0x72, 0xF3 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x00000008, 0x00000261, { { 0x1D, 0xB5, 0xFB, 0x23, 0x94, 0xA7, 0x86, 0x7A, 0xAC, 0x53, 0xDA, 0x6F, 0xCC, 0x41, 0x0F, 0xD7 } } } },
+
+	{ JA_JPN, kPlatformFMTowns, { 0x0000000B, 0x0000059F, { { 0xDD, 0x5E, 0x51, 0x7E, 0xD9, 0xFC, 0xCD, 0xAD, 0x6B, 0x93, 0x71, 0xBE, 0x83, 0x63, 0x3F, 0x88 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kNoDropStringsProvider[] = {
+	{ EN_ANY, kPlatformPC, { 0x00000047, 0x00001881, { { 0xEF, 0x81, 0x2B, 0x8F, 0x06, 0x0C, 0xA6, 0xBA, 0x50, 0x9C, 0x99, 0x40, 0x53, 0xFD, 0xC1, 0x55 } } } },
+
+	{ FR_FRA, kPlatformPC, { 0x0000004C, 0x00001B39, { { 0xFF, 0xD5, 0x5D, 0x1C, 0xF1, 0x8A, 0xA4, 0x21, 0xB1, 0x56, 0x2B, 0xAC, 0x9F, 0x40, 0x30, 0x53 } } } },
+
+	{ DE_DEU, kPlatformPC, { 0x0000004C, 0x00001AFF, { { 0xE5, 0x05, 0x79, 0x10, 0x91, 0x95, 0x64, 0x40, 0xB2, 0x73, 0x39, 0xFA, 0x50, 0x8D, 0xCE, 0x8A } } } },
+
+	{ IT_ITA, kPlatformPC, { 0x00000045, 0x00001850, { { 0x50, 0x34, 0x82, 0xA9, 0x28, 0xDE, 0x44, 0xB3, 0x2D, 0x59, 0x0B, 0x7F, 0xCE, 0x42, 0x1F, 0x73 } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x0000004C, 0x00001650, { { 0x42, 0x7A, 0x04, 0xCD, 0x69, 0xB1, 0x06, 0x9A, 0xD8, 0x7E, 0x7A, 0x14, 0x5B, 0x1C, 0x70, 0xB8 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x0000003D, 0x000015FA, { { 0x87, 0x2E, 0xE6, 0x8A, 0xF1, 0xC9, 0xC9, 0xEC, 0xD3, 0x2C, 0x25, 0x7E, 0x36, 0x02, 0xF7, 0xAC } } } },
+
+	{ EN_ANY, kPlatformAmiga, { 0x00000048, 0x00001881, { { 0x69, 0xA8, 0x0B, 0x47, 0xFD, 0xA0, 0x94, 0x12, 0x82, 0x1D, 0xE0, 0x9C, 0xB1, 0x10, 0x6D, 0x11 } } } },
+
+	{ EN_ANY, kPlatformFMTowns, { 0x0000007A, 0x0000323C, { { 0x00, 0x7F, 0x8E, 0x2E, 0x7B, 0xFC, 0x06, 0x0B, 0x7A, 0x7F, 0x17, 0xAF, 0x47, 0x82, 0xC1, 0x16 } } } },
+	{ JA_JPN, kPlatformFMTowns, { 0x00000061, 0x00002E9C, { { 0x8A, 0xFA, 0x43, 0x26, 0x68, 0x6D, 0x5A, 0x59, 0x0C, 0x9E, 0xCB, 0x28, 0x43, 0x33, 0x54, 0x49 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kPutDownStringProvider[] = {
+	{ EN_ANY, kPlatformUnknown, { 0x00000026, 0x00000D27, { { 0x83, 0x09, 0x51, 0xD3, 0x94, 0x2B, 0xB1, 0x8B, 0x8B, 0x16, 0xA9, 0xEB, 0xE8, 0xA2, 0x4F, 0x0C } } } },
+
+	{ FR_FRA, kPlatformPC, { 0x0000002E, 0x0000101D, { { 0xBC, 0xEA, 0x6C, 0x1F, 0x31, 0xCF, 0x30, 0x26, 0x2D, 0x24, 0xC5, 0xEA, 0x97, 0x49, 0xDC, 0x4C } } } },
+
+	{ DE_DEU, kPlatformPC, { 0x00000028, 0x00000E7E, { { 0x26, 0x93, 0x76, 0x37, 0x41, 0x2E, 0xF3, 0xED, 0xF5, 0x7B, 0xA7, 0xEB, 0x80, 0x61, 0x3B, 0x84 } } } },
+
+	{ IT_ITA, kPlatformPC, { 0x00000034, 0x0000131D, { { 0x36, 0x87, 0x4D, 0x73, 0x2A, 0x67, 0xBA, 0xCE, 0xCB, 0x33, 0x3C, 0x10, 0xCC, 0x3E, 0x7E, 0xAD } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x0000002E, 0x00000EB2, { { 0x14, 0x08, 0xE6, 0xD1, 0x54, 0x76, 0x2A, 0x9E, 0xBE, 0x5A, 0x15, 0xEB, 0x52, 0x01, 0x52, 0x97 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x0000002D, 0x00001052, { { 0x12, 0x0A, 0x23, 0x11, 0xDF, 0x8A, 0x59, 0xD4, 0xF2, 0xCA, 0xA5, 0xA7, 0x76, 0x1B, 0x54, 0xB6 } } } },
+
+	{ JA_JPN, kPlatformFMTowns, { 0x00000029, 0x0000187D, { { 0xDE, 0xEE, 0x66, 0x88, 0x57, 0xF5, 0xF9, 0x2E, 0xD2, 0x14, 0xF5, 0x83, 0xA0, 0x0D, 0x96, 0x86 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kWaitAmuletStringProvider[] = {
+	{ EN_ANY, kPlatformUnknown, { 0x0000003D, 0x0000150D, { { 0x11, 0xC8, 0x7E, 0x83, 0x7A, 0xC3, 0x5D, 0xD9, 0x72, 0xFC, 0x75, 0xCB, 0x57, 0xE9, 0xF1, 0x36 } } } },
+
+	{ FR_FRA, kPlatformPC, { 0x00000049, 0x00001ADD, { { 0xFD, 0xCF, 0x9C, 0xAD, 0xA2, 0xAA, 0x74, 0x11, 0x8E, 0x89, 0x02, 0xCB, 0x2B, 0x5B, 0x2B, 0x1C } } } },
+
+	{ DE_DEU, kPlatformPC, { 0x00000048, 0x000019CF, { { 0x82, 0xDD, 0xBD, 0xA3, 0xD0, 0xE0, 0x19, 0xC0, 0x6D, 0xC5, 0xEE, 0x7A, 0x0B, 0x49, 0x06, 0xCE } } } },
+
+	{ IT_ITA, kPlatformPC, { 0x0000004A, 0x00001B4C, { { 0x38, 0x26, 0x54, 0x10, 0x3D, 0x32, 0xCD, 0xAE, 0x3F, 0x96, 0xFE, 0x6F, 0x4A, 0x94, 0x72, 0xB0 } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x00000049, 0x0000184F, { { 0x11, 0x42, 0xB2, 0xD6, 0x76, 0xEA, 0xF9, 0xCA, 0x46, 0xE4, 0xA6, 0x35, 0xE8, 0xB9, 0x8B, 0xE9 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x00000042, 0x000017FD, { { 0x0A, 0x8A, 0x7E, 0x9A, 0x5F, 0x4A, 0x35, 0x06, 0x4D, 0x6B, 0xBF, 0x29, 0x1B, 0xAD, 0xD8, 0x37 } } } },
+
+	{ EN_ANY, kPlatformAmiga, { 0x0000003E, 0x0000150D, { { 0xA8, 0xBF, 0x99, 0x9B, 0xC1, 0x36, 0x21, 0x47, 0x6D, 0x99, 0x4F, 0x34, 0xE6, 0x61, 0x47, 0xFD } } } },
+
+	{ JA_JPN, kPlatformFMTowns, { 0x00000029, 0x000017A7, { { 0xFD, 0xA3, 0xAD, 0x24, 0x16, 0x49, 0x22, 0x6F, 0x52, 0xE9, 0x50, 0x11, 0x51, 0x38, 0xCA, 0xE0 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kBlackJewelStringProvider[] = {
+	{ EN_ANY, kPlatformUnknown, { 0x00000023, 0x00000B73, { { 0xBE, 0xE9, 0xBD, 0x65, 0xB9, 0xB1, 0xCD, 0xF0, 0x45, 0x03, 0x01, 0x70, 0xBE, 0xD0, 0x0F, 0x80 } } } },
+
+	{ FR_FRA, kPlatformPC, { 0x0000002B, 0x00000F11, { { 0x68, 0xA0, 0xA3, 0xA0, 0xB6, 0xD1, 0x40, 0x22, 0xB4, 0x10, 0x3D, 0x5A, 0x7F, 0x1F, 0x4B, 0xE7 } } } },
+
+	{ DE_DEU, kPlatformPC, { 0x00000031, 0x0000113B, { { 0xA5, 0x00, 0xD1, 0xDC, 0x25, 0x99, 0x3E, 0x6B, 0xFF, 0xC8, 0x6C, 0xDA, 0xA4, 0xCF, 0x51, 0xD7 } } } },
+
+	{ IT_ITA, kPlatformPC, { 0x00000022, 0x00000B6E, { { 0xAE, 0xA0, 0xDF, 0x07, 0xDD, 0x88, 0x98, 0x6B, 0xDD, 0x9E, 0x2E, 0xC0, 0xBD, 0x45, 0x2E, 0x2B } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x0000002B, 0x00000D6D, { { 0x08, 0x5E, 0x1F, 0xA8, 0x8F, 0x1F, 0x6A, 0xE0, 0xF3, 0x49, 0xEF, 0x44, 0xA8, 0xCD, 0xDE, 0x45 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x00000025, 0x00000CF6, { { 0x4B, 0x13, 0x39, 0xCB, 0x3F, 0x44, 0x18, 0x46, 0x43, 0xDB, 0x94, 0xC5, 0x3E, 0x6B, 0xC4, 0x74 } } } },
+
+	{ EN_ANY, kPlatformAmiga, { 0x00000024, 0x00000B73, { { 0x8D, 0x57, 0x5F, 0x93, 0x85, 0x75, 0xF2, 0xD8, 0x36, 0xC2, 0x7C, 0x0E, 0x3B, 0xEA, 0xE0, 0x0A } } } },
+
+	{ JA_JPN, kPlatformFMTowns, { 0x00000035, 0x0000205F, { { 0x33, 0xD6, 0x19, 0xEE, 0xEA, 0xDD, 0x9F, 0xB5, 0x77, 0x0C, 0x8E, 0x84, 0x5E, 0x61, 0x22, 0x3E } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kPoisonGoneStringProvider[] = {
+	{ EN_ANY, kPlatformPC, { 0x0000002D, 0x00000F59, { { 0x9A, 0x88, 0x07, 0x5A, 0x9C, 0xC3, 0x7B, 0xB0, 0x79, 0x69, 0xE0, 0x84, 0x11, 0x9B, 0x82, 0xCD } } } },
+
+	{ FR_FRA, kPlatformPC, { 0x00000059, 0x00001E91, { { 0xDA, 0x9C, 0xC4, 0x7A, 0x79, 0x73, 0x60, 0xBF, 0x31, 0xF8, 0x8F, 0xAF, 0xC1, 0x4D, 0x25, 0xEC } } } }, // floppy
+	{ FR_FRA, kPlatformPC, { 0x0000002A, 0x00000EAA, { { 0x0B, 0x4E, 0xDF, 0x03, 0x9E, 0x64, 0x3B, 0x13, 0x10, 0x6A, 0xF9, 0x4C, 0x66, 0x0D, 0x09, 0xC5 } } } }, // (fan) CD
+
+	{ DE_DEU, kPlatformPC, { 0x00000036, 0x00001324, { { 0x30, 0x67, 0xEE, 0x7C, 0x4D, 0x36, 0xFE, 0x46, 0x05, 0x44, 0x23, 0xA1, 0xB4, 0x07, 0x16, 0xB5 } } } },
+
+	{ IT_ITA, kPlatformPC, { 0x00000034, 0x0000128D, { { 0x4E, 0x54, 0xFE, 0x58, 0x7F, 0x15, 0xFA, 0xC1, 0x50, 0xF8, 0x47, 0x29, 0x15, 0xE8, 0x83, 0xC7 } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x0000002A, 0x00000DFD, { { 0x57, 0xDC, 0xE0, 0x45, 0x2E, 0x89, 0x77, 0x7F, 0x4B, 0x41, 0xCF, 0x4A, 0xFE, 0x0B, 0xAF, 0xC1 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x00000033, 0x0000127E, { { 0x67, 0xEB, 0xD3, 0x00, 0xF8, 0x4F, 0xF1, 0x79, 0x48, 0xE6, 0x9C, 0xB2, 0xA7, 0xCF, 0x76, 0x07 } } } },
+
+	{ EN_ANY, kPlatformAmiga, { 0x0000002E, 0x00000F59, { { 0xAD, 0x95, 0xF3, 0xA7, 0xBB, 0x04, 0x08, 0x77, 0xD0, 0x71, 0xFC, 0x8B, 0x33, 0x2A, 0x6D, 0xD3 } } } },
+
+	{ EN_ANY, kPlatformFMTowns, { 0x0000003C, 0x000013B4, { { 0xE9, 0x54, 0xF1, 0xEC, 0x64, 0x5A, 0xEB, 0xC7, 0xAA, 0x7E, 0xA2, 0x9F, 0xE8, 0xFB, 0x3A, 0x82 } } } },
+	{ JA_JPN, kPlatformFMTowns, { 0x0000003D, 0x000017D1, { { 0x7C, 0x93, 0x62, 0x32, 0x47, 0xB9, 0x78, 0x03, 0x86, 0x8D, 0x99, 0xB8, 0x86, 0x68, 0xEF, 0x3A } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kHealingTipStringProvider[] = {
+	{ EN_ANY, kPlatformUnknown, { 0x0000002D, 0x00000F04, { { 0xC0, 0xC7, 0x0C, 0x3D, 0xA7, 0x62, 0x14, 0xFB, 0xE8, 0x52, 0x05, 0x0D, 0xFE, 0xF6, 0xC7, 0x28 } } } },
+
+	{ FR_FRA, kPlatformPC, { 0x00000036, 0x0000132C, { { 0x86, 0x65, 0x80, 0x10, 0x40, 0x32, 0x6C, 0x2F, 0x5E, 0x76, 0xFB, 0xDC, 0x19, 0x33, 0x02, 0x3C } } } },
+
+	{ DE_DEU, kPlatformPC, { 0x0000003C, 0x00001537, { { 0x78, 0xC2, 0x76, 0x24, 0x0D, 0x1F, 0xC0, 0x13, 0x4E, 0x34, 0x0A, 0x50, 0x4C, 0x35, 0x7E, 0xB1 } } } },
+
+	{ IT_ITA, kPlatformPC, { 0x0000003F, 0x0000170E, { { 0x0B, 0x37, 0xA4, 0x5E, 0x05, 0x4A, 0x96, 0x1F, 0x2E, 0x02, 0x43, 0xBE, 0xCC, 0xF9, 0x21, 0x5E } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x00000036, 0x00001364, { { 0x59, 0x70, 0x13, 0x8D, 0x93, 0x9C, 0x1B, 0x69, 0x2F, 0x13, 0x9A, 0xB2, 0x4C, 0x97, 0x7E, 0x95 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x00000028, 0x00000E0F, { { 0x3E, 0x40, 0xCA, 0x2A, 0x5F, 0xFE, 0x74, 0x30, 0x8C, 0x31, 0x41, 0x09, 0xBD, 0xFD, 0xA3, 0x7E } } } },
+
+	{ EN_ANY, kPlatformAmiga, { 0x0000002E, 0x00000F04, { { 0x95, 0x39, 0x36, 0x89, 0xC4, 0x60, 0x7C, 0x0C, 0xDC, 0x06, 0xF7, 0x86, 0x1A, 0xF7, 0x93, 0x2B } } } },
+
+	{ JA_JPN, kPlatformFMTowns, { 0x0000002B, 0x00001949, { { 0xC7, 0xE3, 0x0A, 0x6B, 0x8F, 0xCA, 0xBC, 0x3A, 0xDC, 0x76, 0x48, 0xD3, 0x8B, 0xD9, 0x44, 0x2E } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kWispJewelStringsProvider[] = {
+	{ EN_ANY, kPlatformPC, { 0x00000053, 0x00001C62, { { 0x9A, 0xF1, 0xCC, 0xB3, 0x09, 0xF0, 0x9C, 0x33, 0x0E, 0xF0, 0xE3, 0xF8, 0x24, 0x63, 0x40, 0x95 } } } }, // floppy
+	{ EN_ANY, kPlatformPC, { 0x00000052, 0x00001CE8, { { 0x6D, 0x69, 0x6D, 0x15, 0x4F, 0xF1, 0xD8, 0xA6, 0x53, 0x9F, 0xE3, 0x77, 0x75, 0x25, 0xE7, 0x93 } } } }, // CD
+
+	{ FR_FRA, kPlatformPC, { 0x0000005B, 0x00001E9A, { { 0xC1, 0x26, 0xF3, 0x64, 0x18, 0x7D, 0xF7, 0x5A, 0xB6, 0x2B, 0x44, 0x57, 0xDC, 0x60, 0x20, 0x3C } } } }, // floppy
+	{ FR_FRA, kPlatformPC, { 0x00000050, 0x00001B8D, { { 0x9A, 0xCE, 0x1D, 0x62, 0xFA, 0xC6, 0x73, 0x80, 0x02, 0x0A, 0x61, 0x24, 0xDC, 0x2A, 0xEF, 0xE6 } } } }, // CD
+
+	{ DE_DEU, kPlatformPC, { 0x00000061, 0x00002184, { { 0x4B, 0x20, 0xD7, 0xE6, 0x00, 0xBF, 0x32, 0x40, 0xB7, 0xD0, 0xD6, 0xEC, 0x9C, 0x0F, 0x0B, 0xF0 } } } }, // floppy
+	{ DE_DEU, kPlatformPC, { 0x00000058, 0x00001E88, { { 0x0E, 0x14, 0xD1, 0xF3, 0x03, 0x29, 0x48, 0x1D, 0x32, 0x2A, 0xBB, 0x0B, 0x48, 0xB3, 0x2E, 0x47 } } } }, // CD
+
+	{ IT_ITA, kPlatformPC, { 0x00000074, 0x00002945, { { 0x17, 0x8B, 0x7E, 0xD9, 0x04, 0x7C, 0xD4, 0x9D, 0xCE, 0xF0, 0x79, 0x00, 0xAC, 0x82, 0x7C, 0x82 } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x00000050, 0x00001A10, { { 0xFB, 0x79, 0x74, 0x14, 0xB9, 0x75, 0x4F, 0x44, 0x83, 0xB1, 0xD4, 0xBE, 0x17, 0x0F, 0xC4, 0xD6 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x0000005F, 0x0000211E, { { 0xE7, 0x0A, 0x85, 0x25, 0x44, 0x41, 0x47, 0x3B, 0x7A, 0xA6, 0x62, 0xAE, 0xAE, 0xD5, 0x92, 0x45 } } } },
+
+	{ EN_ANY, kPlatformAmiga, { 0x00000056, 0x00001C62, { { 0x43, 0x28, 0x3C, 0x0F, 0x78, 0x52, 0xE7, 0x2A, 0x77, 0xF3, 0x21, 0x5A, 0xF0, 0xFC, 0x9E, 0xF8 } } } },
+
+	{ EN_ANY, kPlatformFMTowns, { 0x00000075, 0x00002B94, { { 0xA5, 0x4C, 0xBF, 0x5F, 0xD3, 0xF8, 0x6D, 0xE4, 0xB4, 0x8E, 0x64, 0x84, 0xD9, 0xBA, 0x2B, 0x33 } } } },
+	{ JA_JPN, kPlatformFMTowns, { 0x00000067, 0x00002C6B, { { 0x55, 0x56, 0x6B, 0xEA, 0xEF, 0x34, 0xDA, 0x23, 0x23, 0xF4, 0x9D, 0x0F, 0xBF, 0xC3, 0x1F, 0xDA } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kMagicJewelStringsProvider[] = {
+	{ EN_ANY, kPlatformUnknown, { 0x00000013, 0x0000069E, { { 0x7C, 0xF2, 0xEE, 0x7C, 0x8A, 0xCE, 0x5B, 0x09, 0x32, 0xDC, 0x31, 0x1F, 0x45, 0x21, 0x84, 0xFF } } } },
+
+	{ FR_FRA, kPlatformPC, { 0x00000011, 0x000005DB, { { 0x44, 0x99, 0x35, 0x77, 0x9B, 0x3D, 0xF8, 0xAF, 0x7A, 0xA6, 0x14, 0xD0, 0x99, 0xC6, 0x80, 0x7B } } } },
+
+	{ DE_DEU, kPlatformPC, { 0x00000014, 0x000006EF, { { 0xDE, 0x77, 0xB6, 0x8C, 0x39, 0x5C, 0x6F, 0xDF, 0x7D, 0x04, 0x0F, 0x65, 0x24, 0x75, 0xED, 0x95 } } } },
+
+	{ IT_ITA, kPlatformPC, { 0x0000001D, 0x00000A83, { { 0x60, 0x69, 0x18, 0x6C, 0x34, 0xB0, 0x56, 0xE3, 0x06, 0x7C, 0xB1, 0xDD, 0x26, 0x80, 0xAE, 0x30 } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x00000011, 0x000005E4, { { 0xD5, 0x11, 0xDA, 0x40, 0x09, 0x6A, 0x5D, 0x76, 0x5C, 0x20, 0xC4, 0x43, 0x4D, 0xF3, 0x67, 0xF0 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x00000011, 0x000005CD, { { 0x32, 0x2A, 0xFF, 0x9F, 0x10, 0x75, 0x6B, 0xD6, 0x46, 0xAE, 0x55, 0xD3, 0x68, 0x4F, 0xBB, 0x5A } } } },
+
+	{ EN_ANY, kPlatformAmiga, { 0x00000014, 0x0000069E, { { 0x6A, 0x1C, 0x9B, 0x85, 0x61, 0xC7, 0x28, 0xA9, 0xA3, 0xF4, 0xFA, 0x47, 0x90, 0x8F, 0x06, 0xB4 } } } },
+
+	{ JA_JPN, kPlatformFMTowns, { 0x0000000F, 0x0000087E, { { 0xD8, 0xF1, 0x40, 0x9D, 0x9C, 0x15, 0x9E, 0xBD, 0x69, 0xE5, 0xE1, 0x51, 0x34, 0x22, 0xF3, 0x75 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kThePoisonStringsProvider[] = {
+	{ EN_ANY, kPlatformPC, { 0x00000057, 0x00001C24, { { 0xBC, 0x31, 0x5C, 0x25, 0x50, 0x36, 0x58, 0x20, 0x55, 0xFC, 0x75, 0x47, 0x2D, 0x43, 0x73, 0x78 } } } },
+
+	{ FR_FRA, kPlatformPC, { 0x00000068, 0x000022D8, { { 0x39, 0xDA, 0xB3, 0xD2, 0xDA, 0x3F, 0xAB, 0x40, 0x1A, 0x4F, 0x9D, 0x02, 0xBA, 0x37, 0xEC, 0x4D } } } },
+
+	{ DE_DEU, kPlatformPC, { 0x00000072, 0x00002690, { { 0xEF, 0x62, 0x85, 0xA3, 0x8B, 0x20, 0x4B, 0x65, 0xF8, 0xE7, 0x2C, 0x02, 0x3F, 0x3F, 0x25, 0x65 } } } },
+
+	{ IT_ITA, kPlatformPC, { 0x00000063, 0x000021F8, { { 0x3C, 0x2E, 0xF8, 0xAD, 0xCF, 0xB5, 0xE7, 0x2C, 0x98, 0x7A, 0xB9, 0x6F, 0x7A, 0x42, 0xE1, 0x92 } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x00000068, 0x00002077, { { 0x5D, 0xF4, 0xF9, 0xD9, 0x87, 0x34, 0x14, 0xAB, 0xE4, 0x9A, 0x67, 0xAF, 0x18, 0x8B, 0x40, 0x98 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x00000059, 0x00001DF7, { { 0x16, 0x7B, 0x5F, 0x91, 0x06, 0x5B, 0xFC, 0x9C, 0x88, 0x61, 0xCC, 0x1B, 0x52, 0x4F, 0x91, 0xC5 } } } },
+
+	{ EN_ANY, kPlatformAmiga, { 0x00000058, 0x00001C24, { { 0xBA, 0x1F, 0xBD, 0x5C, 0x85, 0x3D, 0x3C, 0x92, 0xD1, 0x13, 0xF3, 0x40, 0x2E, 0xBB, 0x1C, 0xE2 } } } },
+
+	{ EN_ANY, kPlatformFMTowns, { 0x00000092, 0x0000334E, { { 0xC9, 0x02, 0xB5, 0xEF, 0x90, 0xA8, 0x9C, 0x6E, 0xAD, 0xD6, 0x1F, 0xCC, 0x71, 0x9F, 0x19, 0x2C } } } },
+	{ JA_JPN, kPlatformFMTowns, { 0x000000A0, 0x00003EEB, { { 0x4B, 0x0C, 0xD5, 0xF0, 0xFE, 0x05, 0xF5, 0x09, 0x96, 0xA9, 0xE4, 0xDD, 0x86, 0x8D, 0x79, 0x3C } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kFluteStringsProvider[] = {
+	{ EN_ANY, kPlatformUnknown, { 0x0000003C, 0x00001599, { { 0x96, 0x72, 0x5A, 0x8A, 0xA0, 0xEE, 0xA2, 0xCE, 0x4D, 0x21, 0x01, 0x6C, 0xC5, 0x1A, 0xEB, 0x21 } } } }, // floppy + AMIGA
+	{ EN_ANY, kPlatformPC, { 0x0000009C, 0x00002334, { { 0xA8, 0xA3, 0x1F, 0x0D, 0x36, 0x25, 0x19, 0x98, 0x50, 0xA0, 0x13, 0x65, 0xF4, 0xE8, 0x27, 0x19 } } } },      // CD
+
+	{ FR_FRA, kPlatformPC, { 0x00000045, 0x000018EE, { { 0x3E, 0x3B, 0x20, 0x46, 0xEB, 0xB0, 0x88, 0x26, 0xB2, 0x0D, 0xD6, 0x8F, 0xF7, 0x53, 0x74, 0xAE } } } },
+
+	{ DE_DEU, kPlatformPC, { 0x00000040, 0x000016F2, { { 0x70, 0xFF, 0x86, 0x73, 0x9E, 0x75, 0xDD, 0x17, 0x27, 0x86, 0x44, 0xE9, 0x78, 0x3D, 0x48, 0xDB } } } },
+
+	{ IT_ITA, kPlatformPC, { 0x0000004C, 0x00001BFB, { { 0x06, 0x4F, 0x6A, 0x37, 0x8B, 0x44, 0x27, 0x26, 0xCE, 0x28, 0xB2, 0x47, 0x71, 0xE2, 0x27, 0x73 } } } }, // floppy
+	{ IT_ITA, kPlatformPC, { 0x00000045, 0x00001726, { { 0x5A, 0xCF, 0x64, 0x4B, 0x61, 0x57, 0xEC, 0xB3, 0xBF, 0x32, 0x45, 0x51, 0x5D, 0x02, 0xC5, 0xB6 } } } }, // (fan) CD
+
+	{ ES_ESP, kPlatformPC, { 0x00000052, 0x00001D8E, { { 0x9D, 0xA5, 0xF1, 0x42, 0xD1, 0x48, 0xEB, 0x8F, 0x4B, 0xDC, 0xD9, 0x10, 0x55, 0xBD, 0x12, 0xBB } } } },
+
+	{ EN_ANY, kPlatformFMTowns, { 0x0000005A, 0x000024F9, { { 0xCA, 0x1F, 0x62, 0x23, 0x22, 0x25, 0x4A, 0x94, 0x8A, 0x50, 0x59, 0xD5, 0xB4, 0x4E, 0xF1, 0xA6 } } } },
+	{ JA_JPN, kPlatformFMTowns, { 0x00000053, 0x00002745, { { 0x7A, 0xBB, 0xFC, 0x30, 0xB6, 0xCE, 0x61, 0xD4, 0xDB, 0xB0, 0xE6, 0xB2, 0xF4, 0x4D, 0x81, 0x35 } } } },
+
+	EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kFlaskFullStringProvider[] = {
+	{ EN_ANY, kPlatformUnknown, { 0x0000001C, 0x000009C8, { { 0xA5, 0xC7, 0x5E, 0x6E, 0x02, 0xEE, 0x8C, 0xF8, 0xF0, 0xBF, 0x69, 0xB8, 0x05, 0x1E, 0xF5, 0x28 } } } },
+
+	{ FR_FRA, kPlatformPC, { 0x0000001E, 0x00000AC7, { { 0x4E, 0x7A, 0xC8, 0xC5, 0xD4, 0xB8, 0xD0, 0x73, 0x66, 0x2B, 0x2A, 0x13, 0xDE, 0xE1, 0x32, 0xAA } } } },
+
+	{ DE_DEU, kPlatformPC, { 0x0000001E, 0x00000A71, { { 0x11, 0x88, 0x37, 0x8E, 0x17, 0xF2, 0x82, 0x1E, 0x72, 0xF0, 0xA3, 0x2B, 0x4F, 0x76, 0x5F, 0xBA } } } },
+

@@ Diff output truncated at 100000 characters. @@

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