[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