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

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Sat Feb 3 15:11:37 CET 2007


Revision: 25347
          http://scummvm.svn.sourceforge.net/scummvm/?rev=25347&view=rev
Author:   lordhoto
Date:     2007-02-03 06:11:37 -0800 (Sat, 03 Feb 2007)

Log Message:
-----------
Adds create_kyradat, which is used to create the kyra.dat file.

Modified Paths:
--------------
    tools/trunk/Makefile
    tools/trunk/Makefile.mingw
    tools/trunk/kyra_pak.cpp
    tools/trunk/kyra_pak.h

Added Paths:
-----------
    tools/trunk/create_kyradat.cpp
    tools/trunk/create_kyradat.h
    tools/trunk/kyradat_eng.h
    tools/trunk/kyradat_esp.h
    tools/trunk/kyradat_fre.h
    tools/trunk/kyradat_ger.h
    tools/trunk/kyradat_misc.h

Modified: tools/trunk/Makefile
===================================================================
--- tools/trunk/Makefile	2007-02-03 13:45:09 UTC (rev 25346)
+++ tools/trunk/Makefile	2007-02-03 14:11:37 UTC (rev 25347)
@@ -26,6 +26,7 @@
 	compress_sword1$(EXEEXT) \
 	compress_sword2$(EXEEXT) \
 	compress_touche$(EXEEXT) \
+	create_kyradat$(EXEEXT) \
 	dekyra$(EXEEXT) \
 	descumm$(EXEEXT) \
 	desword2$(EXEEXT) \
@@ -78,6 +79,9 @@
 compress_touche$(EXEEXT): compress_touche.o compress.o util.o
 	$(CC) $(LDFLAGS) -o $@ $+
 
+create_kyradat$(EXEEXT): create_kyradat.o kyra_pak.o util.o utils/md5.o
+	$(CXX) $(LDFLAGS) -o $@ $+
+
 dekyra$(EXEEXT): dekyra.o dekyra_v1.o util.o
 	$(CXX) $(LDFLAGS) -o $@ $+
 

Modified: tools/trunk/Makefile.mingw
===================================================================
--- tools/trunk/Makefile.mingw	2007-02-03 13:45:09 UTC (rev 25346)
+++ tools/trunk/Makefile.mingw	2007-02-03 14:11:37 UTC (rev 25347)
@@ -21,6 +21,7 @@
 	strip compress_sword1.exe -o $(SCUMMVMPATH)/tools/compress_sword1.exe
 	strip compress_sword2.exe -o $(SCUMMVMPATH)/tools/compress_sword2.exe
 	strip compress_touche.exe -o $(SCUMMVMPATH)/tools/compress_touche.exe
+	strip create_kyradat.exe -o $(SCUMMVMPATH)/tools/create_kyradat.exe
 	strip dekyra.exe -o $(SCUMMVMPATH)/tools/dekyra.exe
 	strip descumm.exe -o $(SCUMMVMPATH)/tools/descumm.exe
 	strip desword2.exe -o $(SCUMMVMPATH)/tools/desword2.exe

Added: tools/trunk/create_kyradat.cpp
===================================================================
--- tools/trunk/create_kyradat.cpp	                        (rev 0)
+++ tools/trunk/create_kyradat.cpp	2007-02-03 14:11:37 UTC (rev 25347)
@@ -0,0 +1,601 @@
+/* ScummVM Tools
+ * Copyright (C) 2007 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"
+
+#include "utils/md5.h"
+
+enum {
+	kKyraDatVersion = 14,
+	kIndexSize = 12
+};
+
+// tables
+
+#include "kyradat_misc.h"
+#include "kyradat_eng.h"
+#include "kyradat_esp.h"
+#include "kyradat_fre.h"
+#include "kyradat_ger.h"
+
+bool extractRaw(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename);
+bool extractStrings(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename);
+bool extractRooms(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename);
+bool extractShapes(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename);
+
+void createFilename(char *dstFilename, const int lang, const int special, const char *filename);
+void createLangFilename(char *dstFilename, 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 },
+	{ -1, 0 }
+};
+
+const ExtractFilename extractFilenames[] = {
+	// INTRO / OUTRO sequences
+	{ kForestSeq, kTypeRawData, "FOREST.SEQ" },
+	{ kKallakWritingSeq, kTypeRawData, "KALLAK-WRITING.SEQ" },
+	{ kKyrandiaLogoSeq, kTypeRawData, "KYRANDIA-LOGO.SEQ" },
+	{ kKallakMalcolmSeq, kTypeRawData, "KALLAK-MALCOLM.SEQ" },
+	{ kMalcolmTreeSeq, kTypeRawData, "MALCOLM-TREE.SEQ" },
+	{ kWestwoodLogoSeq, kTypeRawData, "WESTWOOD-LOGO.SEQ" },
+	{ kDemo1Seq, kTypeRawData, "DEMO1.SEQ" },
+	{ kDemo2Seq, kTypeRawData, "DEMO2.SEQ" },
+	{ kDemo3Seq, kTypeRawData, "DEMO3.SEQ" },
+	{ kDemo4Seq, kTypeRawData, "DEMO4.SEQ" },
+	{ kOutroReunionSeq, kTypeRawData, "REUNION.SEQ" },
+
+	// INTRO / OUTRO strings
+	{ kIntroCPSStrings, kTypeStringList, "INTRO-CPS.TXT" },
+	{ kIntroCOLStrings, kTypeStringList, "INTRO-COL.TXT" },
+	{ kIntroWSAStrings, kTypeStringList, "INTRO-WSA.TXT" },
+	{ kIntroStrings, kTypeLanguageList, "INTRO-STRINGS" },
+	{ kOutroHomeString, kTypeLanguageList, "HOME" },
+
+	// INGAME strings
+	{ kItemNames, kTypeLanguageList, "ITEMLIST" },
+	{ kTakenStrings, kTypeLanguageList, "TAKEN" },
+	{ kPlacedStrings, kTypeLanguageList, "PLACED" },
+	{ kDroppedStrings, kTypeLanguageList, "DROPPED" },
+	{ kNoDropStrings, kTypeLanguageList, "NODROP" },
+	{ kPutDownString, kTypeLanguageList, "PUTDOWN" },
+	{ kWaitAmuletString, kTypeLanguageList, "WAITAMUL" },
+	{ kBlackJewelString, kTypeLanguageList, "BLACKJEWEL" },
+	{ kPoisonGoneString, kTypeLanguageList, "POISONGONE" },
+	{ kHealingTipString, kTypeLanguageList, "HEALINGTIP" },
+	{ kThePoisonStrings, kTypeLanguageList, "THEPOISON" },
+	{ kFluteStrings, kTypeLanguageList, "FLUTE" },
+	{ kWispJewelStrings, kTypeLanguageList, "WISPJEWEL" },
+	{ kMagicJewelStrings, kTypeLanguageList, "MAGICJEWEL" },
+	{ kFlaskFullString, kTypeLanguageList, "FLASKFULL" },
+	{ kFullFlaskString, kTypeLanguageList, "FULLFLASK" },
+	{ kVeryCleverString, kTypeLanguageList, "VERYCLEVER" },
+	{ kNewGameString, kTypeLanguageList, "NEWGAME" },
+
+	// GUI strings table
+	{ kGUIStrings, kTypeLanguageList, "GUISTRINGS" },
+	{ kConfigStrings, kTypeLanguageList, "CONFIGSTRINGS" },
+	
+	// ROOM table/filenames
+	{ kRoomList, kTypeRoomList, "ROOM-TABLE.ROOM" },
+	{ kRoomFilenames, kTypeStringList, "ROOM-FILENAMES.TXT" },
+
+	// SHAPE tables
+	{ kDefaultShapes, kTypeShapeList, "SHAPES-DEFAULT.SHP" },
+	{ kHealing1Shapes, kTypeShapeList, "HEALING.SHP" },
+	{ kHealing2Shapes, kTypeShapeList, "HEALING2.SHP" },
+	{ kPoisonDeathShapes, kTypeShapeList, "POISONDEATH.SHP" },
+	{ kFluteShapes, kTypeShapeList, "FLUTE.SHP" },
+	{ kWinter1Shapes, kTypeShapeList, "WINTER1.SHP" },
+	{ kWinter2Shapes, kTypeShapeList, "WINTER2.SHP" },
+	{ kWinter3Shapes, kTypeShapeList, "WINTER3.SHP" },
+	{ kDrinkShapes, kTypeShapeList, "DRINK.SHP" },
+	{ kWispShapes, kTypeShapeList, "WISP.SHP" },
+	{ kMagicAnimShapes, kTypeShapeList, "MAGICANIM.SHP" },
+	{ kBranStoneShapes, kTypeShapeList, "BRANSTONE.SHP" },
+
+	// IMAGE filename table
+	{ kCharacterImageFilenames, kTypeStringList, "CHAR-IMAGE.TXT" },
+
+	// AMULET anim
+	{ kAmuleteAnimSeq, kTypeRawData, "AMULETEANIM.SEQ" },
+
+	// PALETTE table
+	{ kPaletteList1, kTypeRawData, "PALTABLE1.PAL" },
+	{ kPaletteList2, kTypeRawData, "PALTABLE2.PAL" },
+	{ kPaletteList3, kTypeRawData, "PALTABLE3.PAL" },
+	{ kPaletteList4, kTypeRawData, "PALTABLE4.PAL" },
+	{ kPaletteList5, kTypeRawData, "PALTABLE5.PAL" },
+	{ kPaletteList6, kTypeRawData, "PALTABLE6.PAL" },
+	{ kPaletteList7, kTypeRawData, "PALTABLE7.PAL" },
+	{ kPaletteList8, kTypeRawData, "PALTABLE8.PAL" },
+	{ kPaletteList9, kTypeRawData, "PALTABLE9.PAL" },
+	{ kPaletteList10, kTypeRawData, "PALTABLE10.PAL" },
+	{ kPaletteList11, kTypeRawData, "PALTABLE11.PAL" },
+	{ kPaletteList12, kTypeRawData, "PALTABLE12.PAL" },
+	{ kPaletteList13, kTypeRawData, "PALTABLE13.PAL" },
+	{ kPaletteList14, kTypeRawData, "PALTABLE14.PAL" },
+	{ kPaletteList15, kTypeRawData, "PALTABLE15.PAL" },
+	{ kPaletteList16, kTypeRawData, "PALTABLE16.PAL" },
+	{ kPaletteList17, kTypeRawData, "PALTABLE17.PAL" },
+	{ kPaletteList18, kTypeRawData, "PALTABLE18.PAL" },
+	{ kPaletteList19, kTypeRawData, "PALTABLE19.PAL" },
+	{ kPaletteList20, kTypeRawData, "PALTABLE20.PAL" },
+	{ kPaletteList21, kTypeRawData, "PALTABLE21.PAL" },
+	{ kPaletteList22, kTypeRawData, "PALTABLE22.PAL" },
+	{ kPaletteList23, kTypeRawData, "PALTABLE23.PAL" },
+	{ kPaletteList24, kTypeRawData, "PALTABLE24.PAL" },
+	{ kPaletteList25, kTypeRawData, "PALTABLE25.PAL" },
+	{ kPaletteList26, kTypeRawData, "PALTABLE26.PAL" },
+	{ kPaletteList27, kTypeRawData, "PALTABLE27.PAL" },
+	{ kPaletteList28, kTypeRawData, "PALTABLE28.PAL" },
+	{ kPaletteList29, kTypeRawData, "PALTABLE29.PAL" },
+	{ kPaletteList30, kTypeRawData, "PALTABLE30.PAL" },
+	{ kPaletteList31, kTypeRawData, "PALTABLE31.PAL" },
+	{ kPaletteList32, kTypeRawData, "PALTABLE32.PAL" },
+	{ kPaletteList33, kTypeRawData, "PALTABLE33.PAL" },
+	
+	// FM-TOWNS specific
+	{ kKyra1TownsSFXTable, kTypeRawData, "SFXTABLE.TSX" },
+
+	{ -1, 0, 0 }
+};
+
+const ExtractFilename *getFilenameDesc(const int id) {
+	for (const ExtractFilename *i = extractFilenames; i->id != -1; ++i) {
+		if (i->id == id)
+			return i;
+	}
+	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) {
+	const ExtractFilename *i = getFilenameDesc(id);
+
+	if (!i)
+		return false;
+
+	const ExtractType *type = findExtractType(i->type);
+	type->createFilename(dstFilename, g->lang, g->special, i->filename);
+	return true;
+}
+
+void createFilename(char *dstFilename, const int lang, const int special, const char *filename) {
+	strcpy(dstFilename, filename);
+	
+	for (const SpecialExtension *specialE = specialTable; specialE->special != -1; ++specialE) {
+		if (specialE->special == special) {
+			strcat(dstFilename, ".");
+			strcat(dstFilename, specialE->ext);
+			break;
+		}
+	}
+}
+
+void createLangFilename(char *dstFilename, 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;
+		}
+	}
+	
+	for (const SpecialExtension *specialE = specialTable; specialE->special != -1; ++specialE) {
+		if (specialE->special == special) {
+			strcat(dstFilename, ".");
+			strcat(dstFilename, specialE->ext);
+			break;
+		}
+	}
+}
+
+// entry checking
+
+int hashEntries(const int *entries) {
+	int hash = 0;
+	for (const int *i = entries; *i != -1; ++i) {
+		hash += *i;
+	}
+	return hash;
+}
+
+bool hasEntry(const ExtractEntry *entries, const int id) {
+	for (const ExtractEntry *i = entries; i->id != -1; ++i) {
+		if (i->id == id)
+			return true;
+	}
+	return false;
+}
+
+int hashEntries(const Game *game, const GameNeed *need, const PAKFile *file) {
+	int hash = 0;
+	char filename[128];
+	for (const int *i = need->entries; *i != -1; ++i) {
+		if (hasEntry(game->entries, *i)) {
+			hash += *i;
+			continue;
+		}
+		
+		if (file) {
+			filename[0] = 0;
+
+			if (!getFilename(filename, game, *i))
+				error("couldn't find filename for id %d", *i);
+			
+			PAKFile::cFileList *list = file->getFileList();
+			if (list && list->findEntry(filename) != 0)
+				hash += *i;
+		}
+	}
+
+	return hash;
+} 
+
+bool hasNeededEntries(const Game *game, const PAKFile *file) {
+	for (const GameNeed *need = gameNeedTable; need->game != -1; ++need) {
+		if (need->game == game->game && need->special == game->special) {
+			if (hashEntries(need->entries) == hashEntries(game, need, file))
+				return true;
+		}
+	}
+
+	return false;
+}
+
+// extraction
+
+bool extractRaw(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename) {
+	uint8 *buffer = new uint8[size];
+	assert(buffer);
+	memcpy(buffer, data, size);
+	return out.addFile(filename, buffer, size);
+}
+
+bool extractStrings(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename) {
+	uint32 entries = 0;
+	for (uint32 i = 0; i < size; ++i) {
+		if (!data[i])
+			++entries;
+	}
+	
+	uint8 *buffer = new uint8[size + 4];
+	assert(buffer);
+	uint8 *output = buffer;
+
+	WRITE_BE_UINT32(output, entries); output += 4;
+	memcpy(output, data, size);
+
+	return out.addFile(filename, buffer, size + 4);
+}
+
+bool extractRooms(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename) {
+	const int countRooms = size / 0x51;
+
+	uint8 *buffer = new uint8[countRooms * 9 + 4];
+	assert(buffer);
+	uint8 *output = buffer;
+
+	WRITE_BE_UINT32(output, countRooms); output += 4;
+
+	const byte *src = data;
+	for (int i = 0; i < countRooms; ++i) {
+		*output++ = *src++;
+		WRITE_BE_UINT16(output, READ_LE_UINT16(src)); output += 2; src += 2;
+		WRITE_BE_UINT16(output, READ_LE_UINT16(src)); output += 2; src += 2;
+		WRITE_BE_UINT16(output, READ_LE_UINT16(src)); output += 2; src += 2;
+		WRITE_BE_UINT16(output, READ_LE_UINT16(src)); output += 2; src += 2;
+		src += (0x51 - 9);
+	}
+
+	return out.addFile(filename, buffer, countRooms * 9 + 4);
+}
+
+bool extractShapes(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename) {
+	byte *buffer = new byte[size + 1 * 4];
+	assert(buffer);
+	byte *output = buffer;
+
+	const int count = size / 0x07;
+	WRITE_BE_UINT32(output, count); output += 4;
+	memcpy(output, data, size);
+
+	return out.addFile(filename, buffer, size + 1 * 4);
+}
+
+// index generation
+
+enum {
+	GF_FLOPPY	= 1 <<  0,
+	GF_TALKIE	= 1 <<  1,
+	GF_FMTOWNS	= 1 <<  2,
+	GF_DEMO		= 1 <<  3,
+	GF_ENGLISH	= 1 <<  4,
+	GF_FRENCH	= 1 <<  5,
+	GF_GERMAN	= 1 <<  6,
+	GF_SPANISH	= 1 <<  7,
+	GF_ITALIAN	= 1 <<  8,
+	GF_JAPANESE = 1 <<  9,
+	// ...
+	GF_LNGUNK	= 1 << 16,
+	GF_AMIGA	= 1 << 17
+};
+
+uint32 getFeatures(const Game *g) {
+	uint32 features = 0;
+
+	if (g->special == kTalkieVersion)
+		features |= GF_TALKIE;
+	else if (g->special == kDemoVersion)
+		features |= GF_DEMO;
+	else if (g->special == kFMTownsVersion)
+		features |= GF_FMTOWNS;
+	else
+		features |= GF_FLOPPY;
+
+	if (g->lang == Common::EN_ANY)
+		features |= GF_ENGLISH;
+	else if (g->lang == Common::DE_DEU)
+		features |= GF_GERMAN;
+	else if (g->lang == Common::FR_FRA)
+		features |= GF_FRENCH;
+	else if (g->lang == Common::ES_ESP)
+		features |= GF_SPANISH;
+	else if (g->lang == Common::IT_ITA)
+		features |= GF_ITALIAN;
+	
+	return features;
+}
+
+bool updateIndex(byte *dst, const int dstSize, const Game *g) {
+	if ((size_t)dstSize < kIndexSize)
+		return false;
+
+	WRITE_BE_UINT32(dst, kKyraDatVersion); dst += 4;
+	WRITE_BE_UINT32(dst, g->game); dst += 4;
+	uint32 features = READ_BE_UINT32(dst);
+	features |= getFeatures(g);
+	WRITE_BE_UINT32(dst, features); dst += 4;
+
+	return true;
+}
+
+bool checkIndex(const byte *s, const int srcSize) {
+	if ((size_t)srcSize < sizeof(uint32))
+		return false;	
+	uint32 version = READ_BE_UINT32(s);
+	return (version == kKyraDatVersion);
+}
+
+bool updateIndex(PAKFile &out, const Game *g) {
+	char filename[32];
+	createFilename(filename, -1, g->special, "INDEX");
+	
+	byte *index = new byte[kIndexSize];
+	assert(index);
+	memset(index, 0, kIndexSize);
+	
+	uint32 size = 0;
+	const uint8 *data = out.getFileData(filename, &size);
+	if (data)
+		memcpy(index, data, size);
+	
+	if (!updateIndex(index, kIndexSize, g)) {
+		delete [] index;
+		return false;
+	}
+	
+	out.removeFile(filename);
+	if (!out.addFile(filename, index, kIndexSize)) {
+		fprintf(stderr, "ERROR: couldn't update %s file", filename);
+		delete [] index;
+		return false;
+	}
+	
+	return true;
+}
+
+bool checkIndex(PAKFile &out, const Game *g) {
+	char filename[32];
+	createFilename(filename, -1, g->special, "INDEX");
+
+	uint32 size = 0;
+	const uint8 *data = out.getFileData(filename, &size);
+	if (!data)
+		return true;
+
+	return checkIndex(data, size);
+}
+
+// main processing
+
+void printHelp(const char *f) {
+	printf("Usage:\n");
+	printf("%s output inputfiles ...", f);
+}
+
+bool process(PAKFile &out, const Game *g, const byte *data, const uint32 size);
+const Game *findGame(const byte *buffer, const uint32 size);
+
+int main(int argc, char *argv[]) {
+	if (argc < 3) {
+		printHelp(argv[0]);
+		return -1;
+	}
+	
+	PAKFile out;
+	out.loadFile(argv[1], false);
+
+	for (int i = 2; i < argc; ++i) {
+		FILE *input = fopen(argv[i], "rb");
+
+		if (!input) {
+			warning("skipping missing file '%s'", argv[i]);
+			continue;
+		}
+
+		uint32 size = fileSize(input);
+		fseek(input, 0, SEEK_SET);
+		
+		byte *buffer = new uint8[size];
+		assert(buffer);
+		
+		if (fread(buffer, 1, size, input) != size) {
+			warning("couldn't read from file '%s', skipping it", argv[i]);
+			delete [] buffer;
+			fclose(input);
+			continue;
+		}
+		fclose(input);
+		
+		const Game *g = findGame(buffer, size);
+		if (!g) {
+			warning("skipping unknown file '%s'", argv[i]);
+			delete [] buffer;
+			continue;
+		}
+		
+		if (!hasNeededEntries(g, &out)) {
+			warning("file '%s' is missing offset entries and thus can't be processed", argv[i]);
+			delete [] buffer;
+			continue;
+		}
+		
+		if (!process(out, g, buffer, size))
+			fprintf(stderr, "ERROR: couldn't process file '%s'", argv[i]);
+		
+		delete [] buffer;
+	}
+
+	if (!out.saveFile(argv[1]))
+		error("couldn't save changes to '%s'", argv[1]);
+
+	uint8 digest[16];
+	if (!Common::md5_file(argv[1], digest, 0))
+		error("couldn't calc. md5 for file '%s'", argv[1]);
+	FILE *f = fopen(argv[1], "ab");
+	if (!f)
+		error("couldn't open file '%s'", argv[1]);
+	if (fwrite(digest, 1, 16, f) != 16)
+		error("couldn't write md5sum to file '%s'", argv[1]);
+	fclose(f);
+	
+	return 0;
+}
+
+bool process(PAKFile &out, const Game *g, const byte *data, const uint32 size) {
+	char filename[128];
+
+	if (!checkIndex(out, g)) {
+		fprintf(stderr, "ERROR: corrupted INDEX file\n");
+		return false;
+	}
+
+	for (const ExtractEntry *i = g->entries; i->id != -1; ++i) {
+		if (!getFilename(filename, g, i->id)) {
+			fprintf(stderr, "ERROR: couldn't get filename for id %d\n", i->id);
+			return false;
+		}
+		
+		const ExtractFilename *fDesc = getFilenameDesc(i->id);
+
+		if (!fDesc) {
+			fprintf(stderr, "ERROR: couldn't find file description for id %d\n", i->id);
+			return false;
+		}
+
+		const ExtractType *tDesc = findExtractType(fDesc->type);
+		
+		if (!tDesc) {
+			fprintf(stderr, "ERROR: couldn't find type description for id %d\n", i->id);
+			return false;
+		}
+		
+		PAKFile::cFileList *list = out.getFileList();
+		if (list && list->findEntry(filename) != 0)
+			continue;
+
+		if (!tDesc->extract(out, g, data + i->startOff, i->endOff - i->startOff, filename)) {
+			fprintf(stderr, "ERROR: couldn't extract id %d\n", i->id);
+			return false;
+		}
+	}
+
+	if (!updateIndex(out, g)) {
+		error("couldn't update INDEX file, stop processing of all files");
+		return false;
+	}
+
+	return true;
+}
+
+// game data detection
+
+const Game *gameDescs[] = {
+	kyra1EngGames,
+	kyra1EspGames,
+	kyra1FreGames,
+	kyra1GerGames,
+	0
+};
+
+const Game *findGame(const byte *buffer, const uint32 size) {
+	Common::md5_context ctx;
+	uint8 digest[16];
+	char md5str[33];
+
+	Common::md5_starts(&ctx);
+	Common::md5_update(&ctx, buffer, size);
+	Common::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;
+}


Property changes on: tools/trunk/create_kyradat.cpp
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:eol-style
   + native

Added: tools/trunk/create_kyradat.h
===================================================================
--- tools/trunk/create_kyradat.h	                        (rev 0)
+++ tools/trunk/create_kyradat.h	2007-02-03 14:11:37 UTC (rev 25347)
@@ -0,0 +1,203 @@
+/* ScummVM Tools
+ * Copyright (C) 2007 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$
+ *
+ */
+
+#ifndef CREATE_KYRADAT_H
+#define CREATE_KYRADAT_H
+
+#include "util.h"
+#include "utils/util.h"
+#include "kyra_pak.h"
+
+struct Language {
+	int lang;
+	const char *ext;
+};
+
+enum kExtractID {
+	kForestSeq = 1,
+	kKallakWritingSeq,
+	kKyrandiaLogoSeq,
+	kKallakMalcolmSeq,
+	kMalcolmTreeSeq,
+	kWestwoodLogoSeq,
+
+	kDemo1Seq,
+	kDemo2Seq,
+	kDemo3Seq,
+	kDemo4Seq,
+
+	kAmuleteAnimSeq,
+
+	kOutroReunionSeq,
+
+	kIntroCPSStrings,
+	kIntroCOLStrings,
+	kIntroWSAStrings,
+	kIntroStrings,
+
+	kOutroHomeString,
+
+	kRoomFilenames,
+	kRoomList,
+
+	kCharacterImageFilenames,
+	
+	kItemNames,
+	kTakenStrings,
+	kPlacedStrings,
+	kDroppedStrings,
+	kNoDropStrings,
+
+	kPutDownString,
+	kWaitAmuletString,
+	kBlackJewelString,
+	kPoisonGoneString,
+	kHealingTipString,
+	kWispJewelStrings,
+	kMagicJewelStrings,
+
+	kThePoisonStrings,
+	kFluteStrings,
+
+	kFlaskFullString,
+	kFullFlaskString,
+
+	kVeryCleverString,
+	kNewGameString,
+	
+	kDefaultShapes,
+	kHealing1Shapes,
+	kHealing2Shapes,
+	kPoisonDeathShapes,
+	kFluteShapes,
+	kWinter1Shapes,
+	kWinter2Shapes,
+	kWinter3Shapes,
+	kDrinkShapes,
+	kWispShapes,
+	kMagicAnimShapes,
+	kBranStoneShapes,
+
+	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,
+
+	kGUIStrings,
+	kConfigStrings,
+	
+	kKyra1TownsSFXTable,
+	
+	kMaxResIDs
+};
+
+struct ExtractEntry {
+	int id;
+	uint32 startOff;
+	uint32 endOff;
+};
+
+struct ExtractFilename {
+	int id;
+	int type;
+	const char *filename;
+};
+
+enum kSpecial {
+	kTalkieVersion = 0,
+	kDemoVersion = 1,
+	kFMTownsVersion = 2
+};
+
+struct SpecialExtension {
+	int special;
+	const char *ext;
+};
+
+enum kGame {
+	kKyra1 = 0,
+	kKyra2,
+	kKyra3
+};
+
+struct Game {
+	int game;
+	int lang;
+	int special;
+
+	const char *md5;
+	const ExtractEntry *entries;
+};
+
+#define GAME_DUMMY_ENTRY { -1, -1, -1, 0, 0 }
+
+struct GameNeed {
+	int game;
+	int special;
+
+	const int *entries;
+};
+
+enum kExtractType {
+	kTypeLanguageList = 0,
+	kTypeStringList,
+	kTypeRoomList,
+	kTypeShapeList,
+	kTypeRawData
+};
+
+struct ExtractType {
+	int type;
+	bool (*extract)(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename);
+	void (*createFilename)(char *dstFilename, const int lang, const int special, const char *filename);
+};
+
+#endif


Property changes on: tools/trunk/create_kyradat.h
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:eol-style
   + native

Modified: tools/trunk/kyra_pak.cpp
===================================================================
--- tools/trunk/kyra_pak.cpp	2007-02-03 13:45:09 UTC (rev 25346)
+++ tools/trunk/kyra_pak.cpp	2007-02-03 14:11:37 UTC (rev 25347)
@@ -31,10 +31,8 @@
 	_fileList = 0;
 
 	FILE *pakfile = fopen(file, "rb");
-	if (!pakfile) {
-		error("couldn't open file '%s'", file);
+	if (!pakfile)
 		return false;
-	}
 
 	uint32 filesize = fileSize(pakfile);
 
@@ -176,10 +174,8 @@
 const uint8 *PAKFile::getFileData(const char *file, uint32 *size) {
 	FileList *cur = (_fileList != 0) ? _fileList->findEntry(file) : 0;
 
-	if (!cur) {
-		error("file '%s' not found");
+	if (!cur)
 		return 0;
-	}
 	
 	if (size)
 		*size = cur->size;

Modified: tools/trunk/kyra_pak.h
===================================================================
--- tools/trunk/kyra_pak.h	2007-02-03 13:45:09 UTC (rev 25346)
+++ tools/trunk/kyra_pak.h	2007-02-03 14:11:37 UTC (rev 25347)
@@ -33,6 +33,9 @@
 
 	bool loadFile(const char *file, const bool isAmiga);
 	bool saveFile(const char *file);
+	void clearFile() { delete _fileList; _fileList = 0; }
+	
+	const uint32 getFileSize() const { return _fileList->getTableSize()+5+4+_fileList->getFileSize(); }
 
 	void drawFileList();
 
@@ -63,15 +66,28 @@
 			}
 			return 0;
 		}
+		
+		const FileList *findEntry(const char *f) const {
+			for (const FileList *cur = this; cur; cur = cur->next) {
+				if (scumm_stricmp(cur->filename, f) != 0)
+					continue;
+				return cur;
+			}
+			return 0;
+		}
+
 		void addEntry(FileList *e) {
 			if (next)
 				next->addEntry(e);
 			else
 				next = e;
 		}
-		uint32 getTableSize() {
+		uint32 getTableSize() const {
 			return strlen(filename)+1+4+((next != 0) ? next->getTableSize() : 0);
 		}
+		uint32 getFileSize() const {
+			return size + (next != 0 ? next->getFileSize() : 0);
+		}
 
 		char *filename;
 		uint32 size;
@@ -82,7 +98,7 @@
 
 	typedef const FileList cFileList;
 	
-	cFileList *getFileList() { return _fileList; }
+	cFileList *getFileList() const { return _fileList; }
 private:
 	FileList *_fileList;
 	bool _isAmiga;

Added: tools/trunk/kyradat_eng.h
===================================================================
--- tools/trunk/kyradat_eng.h	                        (rev 0)
+++ tools/trunk/kyradat_eng.h	2007-02-03 14:11:37 UTC (rev 25347)
@@ -0,0 +1,190 @@
+const ExtractEntry kyra1EngFloppy[] = {
+	{ kKallakWritingSeq, 0x0002FE5E, 0x00030653 },
+	{ kMalcolmTreeSeq, 0x00030653, 0x00030869 },
+	{ kWestwoodLogoSeq, 0x00030869, 0x000308B4 },
+	{ kKyrandiaLogoSeq, 0x000308B4, 0x00030910 },
+	{ kKallakMalcolmSeq, 0x00030910, 0x00030B7B },
+	{ kForestSeq, 0x00030B7B, 0x00030D10 },
+	{ kIntroCPSStrings, 0x00030D10, 0x00030D24 },
+	{ kIntroWSAStrings, 0x00030D24, 0x00030DA4 },
+	{ kIntroCOLStrings, 0x00030DA4, 0x00030DCF },
+	{ kIntroStrings, 0x00030DCF, 0x000312C4 },
+	{ kRoomList, 0x00028020, 0x0002CDF6 },
+	{ kRoomFilenames, 0x0003386A, 0x00033B46 },
+	{ kCharacterImageFilenames, 0x0003268D, 0x00032771 },
+	{ kDefaultShapes, 0x0002CFB0, 0x0002D43A },
+	{ kItemNames, 0x00033F2E, 0x00034396 },
+	{ kTakenStrings, 0x00033822, 0x00033832 },
+	{ kPlacedStrings, 0x00033832, 0x0003383B },
+	{ kDroppedStrings, 0x00033860, 0x0003386A },
+	{ kNoDropStrings, 0x000337DA, 0x00033821 },
+	{ kAmuleteAnimSeq, 0x0002EA9C, 0x0002EAC6 },
+	{ kPaletteList1, 0x00025100, 0x00025115 },
+	{ kPaletteList2, 0x00025115, 0x00025148 },
+	{ kPaletteList3, 0x00025148, 0x0002517B },
+	{ kPaletteList4, 0x0002517B, 0x000251AE },
+	{ kPaletteList5, 0x000251AE, 0x000251E1 },
+	{ kPaletteList6, 0x000251E1, 0x00025214 },
+	{ kPaletteList7, 0x00025214, 0x0002524A },
+	{ kPaletteList8, 0x0002524A, 0x00025280 },
+	{ kPaletteList9, 0x00025280, 0x000252AD },
+	{ kPaletteList10, 0x000252AD, 0x000252DA },
+	{ kPaletteList11, 0x000252DA, 0x00025307 },
+	{ kPaletteList12, 0x00025307, 0x00025334 },
+	{ kPaletteList13, 0x00025334, 0x00025361 },
+	{ kPaletteList14, 0x00025361, 0x0002539D },
+	{ kPaletteList15, 0x0002539D, 0x000253CA },
+	{ kPaletteList16, 0x000253CA, 0x000253EB },
+	{ kPaletteList17, 0x000253EB, 0x0002540C },
+	{ kPaletteList18, 0x0002540C, 0x00025421 },
+	{ kPaletteList19, 0x00025421, 0x00025436 },
+	{ kPaletteList20, 0x00025436, 0x0002544B },
+	{ kPaletteList21, 0x0002544B, 0x00025460 },
+	{ kPaletteList22, 0x00025460, 0x00025475 },
+	{ kPaletteList23, 0x00025475, 0x0002548A },
+	{ kPaletteList24, 0x0002548A, 0x000254BA },
+	{ kPaletteList25, 0x000254BA, 0x000254EA },
+	{ kPaletteList26, 0x000254EA, 0x0002551A },
+	{ kPaletteList27, 0x0002551A, 0x0002554A },
+	{ kPaletteList28, 0x0002554A, 0x0002557A },
+	{ kPaletteList29, 0x0002557A, 0x000255AA },
+	{ kPaletteList30, 0x000255AA, 0x000255E6 },
+	{ kPaletteList31, 0x000255E6, 0x0002560D },
+	{ kPaletteList32, 0x0002560D, 0x00025634 },
+	{ kPaletteList33, 0x00025634, 0x00025670 },
+	{ kPutDownString, 0x0002EBCE, 0x0002EBF4 },
+	{ kWaitAmuletString, 0x0002EBF4, 0x0002EC31 },
+	{ kBlackJewelString, 0x0002EC31, 0x0002EC54 },
+	{ kHealingTipString, 0x0002EC54, 0x0002EC81 },
+	{ kPoisonGoneString, 0x0002ECE7, 0x0002ED14 },
+	{ kHealing1Shapes, 0x0002D4A3, 0x0002D53D },
+	{ kHealing2Shapes, 0x0002D53D, 0x0002D60F },
+	{ kThePoisonStrings, 0x0002F8DC, 0x0002F933 },
+	{ kFluteStrings, 0x00031C7B, 0x00031CB7 },
+	{ kPoisonDeathShapes, 0x0002D903, 0x0002D98F },
+	{ kFluteShapes, 0x0002D807, 0x0002D903 },
+	{ kWinter1Shapes, 0x0002D60F, 0x0002D640 },
+	{ kWinter2Shapes, 0x0002D640, 0x0002D735 },
+	{ kWinter3Shapes, 0x0002D735, 0x0002D751 },
+	{ kDrinkShapes, 0x0002D43A, 0x0002D4A3 },
+	{ kWispShapes, 0x0002D751, 0x0002D807 },
+	{ kMagicAnimShapes, 0x0002D98F, 0x0002D9B2 },
+	{ kBranStoneShapes, 0x0002D9B2, 0x0002DA20 },
+	{ kWispJewelStrings, 0x0002EC81, 0x0002ECD4 },
+	{ kMagicJewelStrings, 0x0002ECD4, 0x0002ECE7 },
+	{ kFlaskFullString, 0x0002F9EB, 0x0002FA07 },
+	{ kFullFlaskString, 0x0002F954, 0x0002F9EB },
+	{ kOutroReunionSeq, 0x000313C1, 0x00031908 },
+	{ kOutroHomeString, 0x000319C2, 0x000319C7 },
+	{ kVeryCleverString, 0x00031922, 0x00031954 },
+	{ kGUIStrings, 0x0002EE7A, 0x0002F02A },
+	{ kNewGameString, 0x00032466, 0x0003247B },
+	{ kConfigStrings, 0x0002f870, 0x0002f8af },
+	{ -1, 0, 0 }
+};
+
+const ExtractEntry kyra1EngCD[] = {
+	{ kKallakWritingSeq, 0x0003008F, 0x00030894 },
+	{ kMalcolmTreeSeq, 0x00030894, 0x00030AC4 },
+	{ kWestwoodLogoSeq, 0x00030AC4, 0x00030B0F },
+	{ kKyrandiaLogoSeq, 0x00030B0F, 0x00030BB5 },
+	{ kKallakMalcolmSeq, 0x00030BB5, 0x00030E6D },
+	{ kForestSeq, 0x00030E6D, 0x000310E0 },
+	{ kIntroCPSStrings, 0x000310E0, 0x000310F5 },
+	{ kIntroWSAStrings, 0x000310F5, 0x00031175 },
+	{ kIntroCOLStrings, 0x00031175, 0x000311A0 },
+	{ kIntroStrings, 0x000311A0, 0x00031696 },
+	{ kRoomList, 0x00028280, 0x0002D056 },
+	{ kRoomFilenames, 0x00033F2C, 0x00034208 },
+	{ kCharacterImageFilenames, 0x00032F22, 0x00033006 },
+	{ kDefaultShapes, 0x0002D210, 0x0002D69A },
+	{ kItemNames, 0x00034442, 0x000348AA },
+	{ kTakenStrings, 0x00033EE4, 0x00033EF4 },
+	{ kPlacedStrings, 0x00033EF4, 0x00033EFD },
+	{ kDroppedStrings, 0x00033F22, 0x00033F2C },
+	{ kNoDropStrings, 0x00033E9C, 0x00033EE3 },
+	{ kAmuleteAnimSeq, 0x0002EE1C, 0x0002EE46 },
+	{ kPaletteList1, 0x00025530, 0x00025545 },
+	{ kPaletteList2, 0x00025545, 0x00025578 },
+	{ kPaletteList3, 0x00025578, 0x000255AB },
+	{ kPaletteList4, 0x000255AB, 0x000255DE },
+	{ kPaletteList5, 0x000255DE, 0x00025611 },
+	{ kPaletteList6, 0x00025611, 0x00025644 },
+	{ kPaletteList7, 0x00025644, 0x0002567A },
+	{ kPaletteList8, 0x0002567A, 0x000256B0 },
+	{ kPaletteList9, 0x000256B0, 0x000256DD },
+	{ kPaletteList10, 0x000256DD, 0x0002570A },
+	{ kPaletteList11, 0x0002570A, 0x00025737 },
+	{ kPaletteList12, 0x00025737, 0x00025764 },
+	{ kPaletteList13, 0x00025764, 0x00025791 },
+	{ kPaletteList14, 0x00025791, 0x000257CD },
+	{ kPaletteList15, 0x000257CD, 0x000257FA },
+	{ kPaletteList16, 0x000257FA, 0x0002581B },
+	{ kPaletteList17, 0x0002581B, 0x0002583C },
+	{ kPaletteList18, 0x0002583C, 0x00025851 },
+	{ kPaletteList19, 0x00025851, 0x00025866 },
+	{ kPaletteList20, 0x00025866, 0x0002587B },
+	{ kPaletteList21, 0x0002587B, 0x00025890 },
+	{ kPaletteList22, 0x00025890, 0x000258A5 },
+	{ kPaletteList23, 0x000258A5, 0x000258BA },
+	{ kPaletteList24, 0x000258BA, 0x000258EA },
+	{ kPaletteList25, 0x000258EA, 0x0002591A },
+	{ kPaletteList26, 0x0002591A, 0x0002594A },
+	{ kPaletteList27, 0x0002594A, 0x0002597A },
+	{ kPaletteList28, 0x0002597A, 0x000259AA },
+	{ kPaletteList29, 0x000259AA, 0x000259DA },
+	{ kPaletteList30, 0x000259DA, 0x00025A16 },
+	{ kPaletteList31, 0x00025A16, 0x00025A3D },
+	{ kPaletteList32, 0x00025A3D, 0x00025A64 },
+	{ kPaletteList33, 0x00025A64, 0x00025AA0 },
+	{ kPutDownString, 0x0002EF50, 0x0002EF76 },
+	{ kWaitAmuletString, 0x0002EF76, 0x0002EFB3 },
+	{ kBlackJewelString, 0x0002EFB3, 0x0002EFD6 },
+	{ kHealingTipString, 0x0002EFD6, 0x0002F003 },
+	{ kPoisonGoneString, 0x0002F068, 0x0002F095 },
+	{ kHealing1Shapes, 0x0002D703, 0x0002D79D },
+	{ kHealing2Shapes, 0x0002D79D, 0x0002D86F },
+	{ kThePoisonStrings, 0x0002FCCA, 0x0002FD21 },
+	{ kFluteStrings, 0x00032510, 0x000325AC },
+	{ kPoisonDeathShapes, 0x0002DB63, 0x0002DBEF },
+	{ kFluteShapes, 0x0002DA67, 0x0002DB63 },
+	{ kWinter1Shapes, 0x0002D86F, 0x0002D8A0 },
+	{ kWinter2Shapes, 0x0002D8A0, 0x0002D995 },
+	{ kWinter3Shapes, 0x0002D995, 0x0002D9B1 },
+	{ kDrinkShapes, 0x0002D69A, 0x0002D703 },
+	{ kWispShapes, 0x0002D9B1, 0x0002DA67 },
+	{ kMagicAnimShapes, 0x0002DBEF, 0x0002DC12 },
+	{ kBranStoneShapes, 0x0002DC12, 0x0002DC80 },
+	{ kWispJewelStrings, 0x0002F003, 0x0002F055 },
+	{ kMagicJewelStrings, 0x0002F055, 0x0002F068 },
+	{ kFlaskFullString, 0x0002FDE1, 0x0002FDFD },
+	{ kFullFlaskString, 0x0002FD4A, 0x0002FDE1 },
+	{ kOutroReunionSeq, 0x00031791, 0x00031D76 },
+	{ kOutroHomeString, 0x00031E3A, 0x00031E3F },
+	{ kVeryCleverString, 0x00031D90, 0x00031DC2 },
+	{ kGUIStrings, 0x0002F1EE, 0x0002F3F7 },
+	{ kNewGameString, 0x00032CFB, 0x00032D10 },
+	{ kConfigStrings, 0x0002fc3d, 0x0002fc9e },
+	{ -1, 0, 0 }
+};
+
+const ExtractEntry kyra1EngDemo[] = {
+	{ kWestwoodLogoSeq, 0x00015327, 0x0001536B },
+	{ kKyrandiaLogoSeq, 0x0001536B, 0x000153BF },
+	{ kIntroCPSStrings, 0x000154B1, 0x000154BD },
+	{ kIntroWSAStrings, 0x000154BD, 0x0001550A },
+	{ kIntroCOLStrings, 0x0001550A, 0x00015550 },
+	{ kIntroStrings, 0x00015550, 0x0001584A },
+	{ kDemo1Seq, 0x000153BF, 0x000153E5 },
+	{ kDemo2Seq, 0x000153E5, 0x00015408 },
+	{ kDemo3Seq, 0x00015408, 0x00015461 },
+	{ kDemo4Seq, 0x00015461, 0x00015481 },
+	{ -1, 0, 0 }
+};
+
+const Game kyra1EngGames[] = {
+	{ kKyra1, Common::EN_ANY, -1, "76a4fc84e173cadb6369785787e1546e", kyra1EngFloppy },
+	{ kKyra1, Common::EN_ANY, kTalkieVersion, "1ebc18f3e7fbb72474a55cb0fa089ed4", kyra1EngCD },
+	{ kKyra1, Common::EN_ANY, kDemoVersion, "7b7504c8560ffc914d34c44c71b3094c", kyra1EngDemo },
+	GAME_DUMMY_ENTRY
+};


Property changes on: tools/trunk/kyradat_eng.h
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:eol-style
   + native

Added: tools/trunk/kyradat_esp.h
===================================================================
--- tools/trunk/kyradat_esp.h	                        (rev 0)
+++ tools/trunk/kyradat_esp.h	2007-02-03 14:11:37 UTC (rev 25347)
@@ -0,0 +1,39 @@
+const ExtractEntry kyra1EspFloppy[] = {
+	{ kKallakWritingSeq, 0x00030462, 0x00030C57 },
+	{ kMalcolmTreeSeq, 0x00030C57, 0x00030E6D },
+	{ kWestwoodLogoSeq, 0x00030E6D, 0x00030EB8 },
+	{ kKyrandiaLogoSeq, 0x00030EB8, 0x00030F14 },
+	{ kKallakMalcolmSeq, 0x00030F14, 0x0003117F },
+	{ kForestSeq, 0x0003117F, 0x00031314 },
+	{ kIntroCPSStrings, 0x00031314, 0x00031328 },
+	{ kIntroWSAStrings, 0x00031328, 0x000313A8 },
+	{ kIntroCOLStrings, 0x000313A8, 0x000313D3 },
+	{ kIntroStrings, 0x000313D3, 0x000319A2 },
+	{ kItemNames, 0x0003467A, 0x00034BAA },
+	{ kTakenStrings, 0x00033F14, 0x00033F28 },
+	{ kPlacedStrings, 0x00033F28, 0x00033F35 },
+	{ kDroppedStrings, 0x00033F5E, 0x00033F66 },
+	{ kNoDropStrings, 0x00033ED6, 0x00033F13 },
+	{ kPutDownString, 0x0002F100, 0x0002F12D },
+	{ kWaitAmuletString, 0x0002F12D, 0x0002F16F },
+	{ kBlackJewelString, 0x0002F16F, 0x0002F194 },
+	{ kHealingTipString, 0x0002F194, 0x0002F1BC },
+	{ kPoisonGoneString, 0x0002F22C, 0x0002F25F },
+	{ kThePoisonStrings, 0x0002FEC6, 0x0002FF1F },
+	{ kFluteStrings, 0x00032361, 0x000323B3 },
+	{ kWispJewelStrings, 0x0002F1BC, 0x0002F21B },
+	{ kMagicJewelStrings, 0x0002F21B, 0x0002F22C },
+	{ kFlaskFullString, 0x0002FFDA, 0x0002FFF5 },
+	{ kFullFlaskString, 0x0002FF40, 0x0002FFDA },
+	{ kOutroHomeString, 0x000320A8, 0x000320AD },
+	{ kVeryCleverString, 0x00032004, 0x0003203A },
+	{ kGUIStrings, 0x0002f3d0, 0x0002f60a },
+	{ kNewGameString, 0x00032b62, 0x00032b7d },
+	{ kConfigStrings, 0x0002fe50, 0x0002fe9a },
+	{ -1, 0, 0 }
+};
+
+const Game kyra1EspGames[] = {
+	{ kKyra1, Common::ES_ESP, -1, "9ff130d2558bcd674d4074849d93c362", kyra1EspFloppy },
+	GAME_DUMMY_ENTRY
+};


Property changes on: tools/trunk/kyradat_esp.h
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:eol-style
   + native

Added: tools/trunk/kyradat_fre.h
===================================================================
--- tools/trunk/kyradat_fre.h	                        (rev 0)
+++ tools/trunk/kyradat_fre.h	2007-02-03 14:11:37 UTC (rev 25347)
@@ -0,0 +1,79 @@
+const ExtractEntry kyra1FreFloppy[] = {
+	{ kKallakWritingSeq, 0x00030598, 0x00030D8D },
+	{ kMalcolmTreeSeq, 0x00030D8D, 0x00030FA3 },
+	{ kWestwoodLogoSeq, 0x00030FA3, 0x00030FEE },
+	{ kKyrandiaLogoSeq, 0x00030FEE, 0x0003104A },
+	{ kKallakMalcolmSeq, 0x0003104A, 0x000312B5 },
+	{ kForestSeq, 0x000312B5, 0x0003144A },
+	{ kIntroCPSStrings, 0x0003144A, 0x0003145E },
+	{ kIntroWSAStrings, 0x0003145E, 0x000314DE },
+	{ kIntroCOLStrings, 0x000314DE, 0x00031509 },
+	{ kIntroStrings, 0x00031509, 0x00031AF8 },
+	{ kItemNames, 0x00034862, 0x00034d68 },
+	{ kTakenStrings, 0x00034062, 0x00034080 },
+	{ kPlacedStrings, 0x00034080, 0x00034091 },
+	{ kDroppedStrings, 0x0003412f, 0x00034140 },
+	{ kNoDropStrings, 0x00034016, 0x00034062 },
+	{ kPutDownString, 0x0002f240, 0x0002f26e },
+	{ kWaitAmuletString, 0x0002f26e, 0x0002f2b7 },
+	{ kBlackJewelString, 0x0002f2b7, 0x0002f2e2 },
+	{ kHealingTipString, 0x0002f2e2, 0x0002f318 },
+	{ kPoisonGoneString, 0x0002f384, 0x0002f3dd },
+	{ kThePoisonStrings, 0x0003000e, 0x00030076 },
+	{ kFluteStrings, 0x000324af, 0x000324f4 },
+	{ kWispJewelStrings, 0x0002f318, 0x0002f373 },
+	{ kMagicJewelStrings, 0x0002f373, 0x0002f384 },
+	{ kFlaskFullString, 0x0003011c, 0x0003013a },
+	{ kFullFlaskString, 0x00030096, 0x0003011c },
+	{ kOutroHomeString, 0x000321f4, 0x000321fb },
+	{ kVeryCleverString, 0x0003215e, 0x00032185 },
+	{ kGUIStrings, 0x0002f51c, 0x0002f750 },
+	{ kNewGameString, 0x00032ca2, 0x00032cbf },
+	{ kConfigStrings, 0x0002ff96, 0x0002ffe1 },
+	{ -1, 0, 0 }
+};
+
+const ExtractEntry kyra1FreCD[] = {
+	{ kKallakWritingSeq, 0x0003023D, 0x00030A42 },
+	{ kMalcolmTreeSeq, 0x00030A42, 0x00030C72 },
+	{ kWestwoodLogoSeq, 0x00030C72, 0x00030CBD },
+	{ kKyrandiaLogoSeq, 0x00030CBD, 0x00030D63 },
+	{ kKallakMalcolmSeq, 0x00030D63, 0x0003101B },
+	{ kForestSeq, 0x0003101B, 0x0003128E },
+	{ kIntroCPSStrings, 0x0003128E, 0x000312A3 },
+	{ kIntroWSAStrings, 0x000312A3, 0x00031323 },
+	{ kIntroCOLStrings, 0x00031323, 0x0003134E },
+	{ kIntroStrings, 0x0003134E, 0x0003193E },
+	{ kRoomList, 0x000283A0, 0x0002D176 },
+	{ kRoomFilenames, 0x000342AA, 0x00034586 },
+	{ kCharacterImageFilenames, 0x00033206, 0x000332EA },
+	{ kDefaultShapes, 0x0002D330, 0x0002D823 },
+	{ kItemNames, 0x000347C0, 0x00034CC6 },
+	{ kTakenStrings, 0x0003427B, 0x0003428A },
+	{ kPlacedStrings, 0x000341EA, 0x000341FB },
+	{ kDroppedStrings, 0x00034299, 0x000342AA },
+	{ kNoDropStrings, 0x00034180, 0x000341CC },
+	{ kPutDownString, 0x0002F070, 0x0002F09E },
+	{ kWaitAmuletString, 0x0002F09E, 0x0002F0E7 },
+	{ kBlackJewelString, 0x0002F0E7, 0x0002F112 },
+	{ kHealingTipString, 0x0002F112, 0x0002F148 },
+	{ kPoisonGoneString, 0x0002F1A9, 0x0002F1D3 },
+	{ kThePoisonStrings, 0x0002FE76, 0x0002FEDE },
+	{ kFluteStrings, 0x000327EA, 0x0003282F },
+	{ kWispJewelStrings, 0x0002F148, 0x0002F198 },
+	{ kMagicJewelStrings, 0x0002F198, 0x0002F1A9 },
+	{ kFlaskFullString, 0x0002FF8C, 0x0002FFAA },
+	{ kFullFlaskString, 0x0002FF06, 0x0002FF8C },
+	{ kOutroHomeString, 0x000320D6, 0x000320DD },
+	{ kVeryCleverString, 0x00032038, 0x0003205F },
+	{ kGUIStrings, 0x0002f32c, 0x0002f589 },
+	{ kNewGameString, 0x00032FDF, 0x00032FFC },
+	{ kConfigStrings, 0x0002fdcf, 0x0002fe49 },
+	{ -1, 0, 0 }
+};
+
+const Game kyra1FreGames[] = {
+	{ kKyra1, Common::FR_FRA, -1, "aa9d6d78d8b199deaf48efeca6d19af2", kyra1FreFloppy },
+	{ kKyra1, Common::FR_FRA, kTalkieVersion, "307c5d4a554d9068ac3d326e350ae4a6", kyra1FreCD },
+	GAME_DUMMY_ENTRY
+};


Property changes on: tools/trunk/kyradat_fre.h
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:eol-style
   + native

Added: tools/trunk/kyradat_ger.h
===================================================================
--- tools/trunk/kyradat_ger.h	                        (rev 0)
+++ tools/trunk/kyradat_ger.h	2007-02-03 14:11:37 UTC (rev 25347)
@@ -0,0 +1,80 @@
+const ExtractEntry kyra1GerFloppy[] = {
+	{ kKallakWritingSeq, 0x000304F2, 0x00030CE7 },
+	{ kMalcolmTreeSeq, 0x00030CE7, 0x00030EFD },
+	{ kWestwoodLogoSeq, 0x00030EFD, 0x00030F48 },
+	{ kKyrandiaLogoSeq, 0x00030F48, 0x00030FA4 },
+	{ kKallakMalcolmSeq, 0x00030FA4, 0x0003120F },
+	{ kForestSeq, 0x0003120F, 0x000313A4 },
+	{ kIntroCPSStrings, 0x000313A4, 0x000313B8 },
+	{ kIntroWSAStrings, 0x000313B8, 0x00031438 },
+	{ kIntroCOLStrings, 0x00031438, 0x00031463 },
+	{ kIntroStrings, 0x00031463, 0x00031A68 },
+	{ kRoomFilenames, 0x00034058, 0x00034334 },
+	{ kItemNames, 0x00034776, 0x00034C88 },
+	{ kTakenStrings, 0x00033FEE, 0x0003400A },
+	{ kPlacedStrings, 0x0003400A, 0x00034015 },
+	{ kDroppedStrings, 0x00034046, 0x00034057 },
+	{ kNoDropStrings, 0x00033FA2, 0x00033FEE },
+	{ kPutDownString, 0x0002F100, 0x0002F128 },
+	{ kWaitAmuletString, 0x0002F128, 0x0002F170 },
+	{ kBlackJewelString, 0x0002F170, 0x0002F1A1 },
+	{ kHealingTipString, 0x0002F1A1, 0x0002F1DD },
+	{ kPoisonGoneString, 0x0002F252, 0x0002F288 },
+	{ kThePoisonStrings, 0x0002FF00, 0x0002FF72 },
+	{ kFluteStrings, 0x0003243F, 0x0003247F },
+	{ kWispJewelStrings, 0x0002F1DD, 0x0002F23E },
+	{ kMagicJewelStrings, 0x0002F23E, 0x0002F252 },
+	{ kFlaskFullString, 0x00030041, 0x0003005F },
+	{ kFullFlaskString, 0x0002FF92, 0x00030041 },
+	{ kOutroHomeString, 0x0003217E, 0x0003218C },
+	{ kVeryCleverString, 0x000320CC, 0x0003210F },
+	{ kGUIStrings, 0x0002f3fa, 0x0002f630 },
+	{ kNewGameString, 0x00032c2e, 0x00032c4b },
+	{ kConfigStrings, 0x0002fe76, 0x0002fed4 },
+	{ -1, 0, 0 }
+};
+
+const ExtractEntry kyra1GerCD[] = {
+	{ kKallakWritingSeq, 0x0003018F, 0x00030994 },
+	{ kMalcolmTreeSeq, 0x00030994, 0x00030BC4 },
+	{ kWestwoodLogoSeq, 0x00030BC4, 0x00030C0F },
+	{ kKyrandiaLogoSeq, 0x00030C0F, 0x00030CB5 },
+	{ kKallakMalcolmSeq, 0x00030CB5, 0x00030F6D },
+	{ kForestSeq, 0x00030F6D, 0x000311E0 },
+	{ kIntroCPSStrings, 0x000311E0, 0x000311F5 },
+	{ kIntroWSAStrings, 0x000311F5, 0x00031275 },
+	{ kIntroCOLStrings, 0x00031275, 0x000312A0 },
+	{ kIntroStrings, 0x000312A0, 0x000318A6 },
+	{ kRoomList, 0x00028280, 0x0002D056 },
+	{ kRoomFilenames, 0x000341FA, 0x000344D6 },
+	{ kCharacterImageFilenames, 0x000331CA, 0x000332AE },
+	{ kDefaultShapes, 0x0002D210, 0x0002D703 },
+	{ kItemNames, 0x00034710, 0x00034C22 },
+	{ kTakenStrings, 0x00034190, 0x000341AC },
+	{ kPlacedStrings, 0x000341AC, 0x000341B7 },
+	{ kDroppedStrings, 0x000341E8, 0x000341F9 },
+	{ kNoDropStrings, 0x00034144, 0x00034190 },
+	{ kPutDownString, 0x0002EF50, 0x0002EF78 },
+	{ kWaitAmuletString, 0x0002EF78, 0x0002EFC0 },
+	{ kBlackJewelString, 0x0002EFC0, 0x0002EFF1 },
+	{ kHealingTipString, 0x0002EFF1, 0x0002F02D },
+	{ kPoisonGoneString, 0x0002F099, 0x0002F0CF },
+	{ kThePoisonStrings, 0x0002FD82, 0x0002FDF4 },
+	{ kFluteStrings, 0x000327B4, 0x000327F4 },
+	{ kWispJewelStrings, 0x0002F02D, 0x0002F085 },
+	{ kMagicJewelStrings, 0x0002F085, 0x0002F099 },
+	{ kFlaskFullString, 0x0002FECB, 0x0002FEE9 },
+	{ kFullFlaskString, 0x0002FE1C, 0x0002FECB },
+	{ kOutroHomeString, 0x0003205A, 0x00032068 },
+	{ kVeryCleverString, 0x00031FA0, 0x00031FE3 },
+	{ kGUIStrings, 0x0002F22C, 0x0002F48D },
+	{ kNewGameString, 0x00032FA3, 0x00032FC0 },
+	{ kConfigStrings, 0x0002fcd3, 0x0002fd55 },
+	{ -1, 0, 0 }
+};
+
+const Game kyra1GerGames[] = {
+	{ kKyra1, Common::DE_DEU, -1, "9442d6f7db6a41f3dd4aa4de5d36e107", kyra1GerFloppy },
+	{ kKyra1, Common::DE_DEU, kTalkieVersion, "c65d381184f98ac26d9efd2d45baef51", kyra1GerCD },
+	GAME_DUMMY_ENTRY
+};


Property changes on: tools/trunk/kyradat_ger.h
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:eol-style
   + native

Added: tools/trunk/kyradat_misc.h
===================================================================
--- tools/trunk/kyradat_misc.h	                        (rev 0)
+++ tools/trunk/kyradat_misc.h	2007-02-03 14:11:37 UTC (rev 25347)
@@ -0,0 +1,207 @@
+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,
+	-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,
+	-1
+};
+
+const int kyra1DemoNeed[] = {
+	kWestwoodLogoSeq,
+	kKyrandiaLogoSeq,
+	kIntroCPSStrings,
+	kIntroCOLStrings,
+	kIntroWSAStrings,
+	kIntroStrings,
+	kDemo1Seq,
+	kDemo2Seq,
+	kDemo3Seq,
+	kDemo4Seq,
+	-1
+};
+
+const GameNeed gameNeedTable[] = {
+	{ kKyra1, -1, kyra1FloppyNeed },
+	{ kKyra1, kTalkieVersion, kyra1CDNeed },
+	{ kKyra1, kDemoVersion, kyra1DemoNeed },
+	{ -1, -1, 0 }
+};
+
+const SpecialExtension specialTable[] = {
+	{ kTalkieVersion, "CD" },
+	{ kDemoVersion, "DEM" },
+	{ kFMTownsVersion, "TNS" },
+	{ -1, 0 }
+};
+
+const Language languageTable[] = {
+	{ Common::EN_ANY, "ENG" },
+	{ Common::DE_DEU, "GER" },
+	{ Common::FR_FRA, "FRE" },
+	{ Common::IT_ITA, "ITA" },
+	{ Common::ES_ESP, "SPA" },
+	{ Common::JA_JPN, "JPN" },
+	{ -1, 0 }
+};


Property changes on: tools/trunk/kyradat_misc.h
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:eol-style
   + native


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