diff options
author | Johannes Schickel | 2009-09-16 20:52:59 +0000 |
---|---|---|
committer | Johannes Schickel | 2009-09-16 20:52:59 +0000 |
commit | 08dc453d10fe77e2e543d33026a614f5161dd7eb (patch) | |
tree | 57035beadb735022f72353fc008cf1d6e8601baa /tools | |
parent | 361fd53ef3804773a17ef243dc7edc8a6a5f22ee (diff) | |
download | scummvm-rg350-08dc453d10fe77e2e543d33026a614f5161dd7eb.tar.gz scummvm-rg350-08dc453d10fe77e2e543d33026a614f5161dd7eb.tar.bz2 scummvm-rg350-08dc453d10fe77e2e543d33026a614f5161dd7eb.zip |
Adapted create_kyradat to use an automatic offset search. (Hopefully no regressions).
svn-id: r44118
Diffstat (limited to 'tools')
24 files changed, 2514 insertions, 1348 deletions
diff --git a/tools/create_kyradat/Makefile b/tools/create_kyradat/Makefile deleted file mode 100644 index b4deafe6d4..0000000000 --- a/tools/create_kyradat/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -CXX ?= g++ -CC ?= gcc - -LDFLAGS ?= -CXXFLAGS ?= -O2 -CFLAGS ?= -O2 -CPPFLAGS ?= - -BIN=create_kyradat - -OBJS=create_kyradat.o pak.o md5.o util.o - -all: $(BIN) - -$(BIN): $(OBJS) - $(CXX) $(OBJS) $(LDFLAGS) -o $(BIN) - -clean: - rm -f $(BIN) - rm -f $(OBJS) - -create_kyradat.o: amiga.h eng.h esp.h fre.h ger.h misc.h pak.h towns.h util.h md5.h -pak.o: pak.h util.h - -%.o: %.cpp - $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@ - -%.o: %.c - $(CXX) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ diff --git a/tools/create_kyradat/amiga.h b/tools/create_kyradat/amiga.h deleted file mode 100644 index 19e1a15139..0000000000 --- a/tools/create_kyradat/amiga.h +++ /dev/null @@ -1,59 +0,0 @@ -const ExtractEntry kyra1AmigaEng[] = { - { kKallakWritingSeq, 0x00031D26, 0x0003251A }, - { kMalcolmTreeSeq, 0x0003251A, 0x0003272E }, - { kWestwoodLogoSeq, 0x0003272E, 0x0003277B }, - { kKyrandiaLogoSeq, 0x0003277B, 0x000327D7 }, - { kKallakMalcolmSeq, 0x000327D7, 0x00032A52 }, - { kForestSeq, 0x00032A52, 0x00032D30 }, - { kIntroCPSStrings, 0x0000CAC4, 0x0000CADA }, - { kIntroWSAStrings, 0x0000CADA, 0x0000CB60 }, - { kIntroCOLStrings, 0x0000CB60, 0x0000CB8E }, - { kIntroStrings, 0x0000CB8E, 0x0000D098 }, - { kRoomList, 0x00032F68, 0x00037E34 }, - { kRoomFilenames, 0x00012330, 0x00012638 }, - { kCharacterImageFilenames, 0x0000C814, 0x0000C904 }, - { kDefaultShapes, 0x00039230, 0x000396BA }, - { kItemNames, 0x0001A3B8, 0x0001A738 }, - { kTakenStrings, 0x0000FAE8, 0x0000FAF0 }, - { kPlacedStrings, 0x0000FAF0, 0x0000FAFA }, - { kDroppedStrings, 0x000101F2, 0x000101FC }, - { kNoDropStrings, 0x0000C98E, 0x0000C9D6 }, - { kAmuleteAnimSeq, 0x0002C980, 0x0002C9AA }, - { kPutDownString, 0x0000499E, 0x000049C4 }, - { kWaitAmuletString, 0x000049C4, 0x00004A02 }, - { kBlackJewelString, 0x00004A02, 0x00004A26 }, - { kHealingTipString, 0x00004A26, 0x00004A54 }, - { kPoisonGoneString, 0x00004ABE, 0x00004AEC }, - { kHealing1Shapes, 0x00039723, 0x000397BD }, - { kHealing2Shapes, 0x000397BD, 0x0003988F }, - { kThePoisonStrings, 0x00017768, 0x000177C0 }, - { kFluteStrings, 0x0000038A, 0x000003C6 }, - { kPoisonDeathShapes, 0x00039B83, 0x00039C0F }, - { kFluteShapes, 0x00039A87, 0x00039B83 }, - { kWinter1Shapes, 0x0003988F, 0x000398C0 }, - { kWinter2Shapes, 0x000398C0, 0x000399B5 }, - { kWinter3Shapes, 0x000399B5, 0x000399D1 }, - { kDrinkShapes, 0x000396BA, 0x00039723 }, - { kWispShapes, 0x000399D1, 0x00039A87 }, - { kMagicAnimShapes, 0x00039C0F, 0x00039C32 }, - { kBranStoneShapes, 0x00039C32, 0x00039CA0 }, - { kWispJewelStrings, 0x00004A54, 0x00004AAA }, - { kMagicJewelStrings, 0x00004AAA, 0x00004ABE }, - { kFlaskFullString, 0x00017B9E, 0x00017BBA }, - { kFullFlaskString, 0x00017B04, 0x00017B9E }, - { kOutroReunionSeq, 0x00030A4A, 0x00030F94 }, - { kOutroHomeString, 0x0000C6FA, 0x0000C6FF }, - { kVeryCleverString, 0x0000B322, 0x0000B354 }, - { kGUIStrings, 0x0003844D, 0x0003862C }, - { kNewGameString, 0x00031164, 0x0003117A }, - { kConfigStrings, 0x00015ACA, 0x00015AF8 }, - { kCreditsStrings, 0x0000777C, 0x00007C48 }, - { kAmigaIntroSFXTable, 0x00032D5C, 0x00032E9C }, - { kAmigaGameSFXTable, 0x0002C55E, 0x0002C91E }, - { -1, 0, 0 } -}; - -const Game kyra1AmigaGames[] = { - { kKyra1, EN_ANY, kAmigaVersion, "b620564b6b7e0787b053ca9e35bd9f52", kyra1AmigaEng }, - GAME_DUMMY_ENTRY -}; diff --git a/tools/create_kyradat/create_kyradat.cpp b/tools/create_kyradat/create_kyradat.cpp index 6e9b47ec27..ffa1066feb 100644 --- a/tools/create_kyradat/create_kyradat.cpp +++ b/tools/create_kyradat/create_kyradat.cpp @@ -28,6 +28,9 @@ #include "create_kyradat.h" +#include "tables.h" +#include "providers.h" + #include "md5.h" enum { @@ -38,30 +41,6 @@ enum { // tables #include "misc.h" -#include "eng.h" -#include "esp.h" -#include "fre.h" -#include "ger.h" -#include "ita.h" -#include "towns.h" -#include "amiga.h" - -#include "hof_floppy.h" -#include "hof_towns.h" -#include "hof_cd.h" -#include "hof_demo.h" - -#include "malcolm.h" - -#include "lol_cd.h" -#include "lol_floppy.h" -//#include "lol_pc98.h" -#include "lol_demo.h" - -const Game kyra1FanTranslations[] = { - { kKyra1, IT_ITA, kTalkieVersion, "d0f1752098236083d81b9497bd2b6989", kyra1FreCD }, - GAME_DUMMY_ENTRY -}; bool extractRaw(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int fmtPatch); bool extractStrings(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int fmtPatch); @@ -430,59 +409,6 @@ void createLangFilename(char *dstFilename, const int gid, const int lang, const } } -// 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, int fmtPatch) { @@ -494,13 +420,15 @@ bool extractRaw(PAKFile &out, const Game *g, const byte *data, const uint32 size memcpy(buffer, data, 0x7EE5); memcpy(buffer + 0x7EE5, data + 0x7EE7, 0x7FFF); memcpy(buffer + 0xFEE4, data + 0xFEE8, 0x271E); + + return out.addFile(filename, buffer, 0x12602); } else { buffer = new uint8[size]; assert(buffer); memcpy(buffer, data, size); - } - return out.addFile(filename, buffer, size); + return out.addFile(filename, buffer, size); + } } bool extractStrings(PAKFile &out, const Game *g, const byte *data, const uint32 size, const char *filename, int fmtPatch) { @@ -1258,7 +1186,12 @@ enum { uint32 getFeatures(const Game *g) { uint32 features = 0; - if (g->special == kTalkieVersion || g->special == k2CDFile1E || g->special == k2CDFile1F || g->special == k2CDFile1G || g->special == k2CDFile1I || g->special == k2CDFile2E || g->special == k2CDFile2F || g->special == k2CDFile2G || g->special == kLolCD || g->game == kKyra3) + if (g->special == kTalkieVersion + || g->special == k2CDFile1E || g->special == k2CDFile1F || g->special == k2CDFile1G || g->special == k2CDFile1I + || g->special == k2CDFile2E || g->special == k2CDFile2F || g->special == k2CDFile2G + || g->special == k2CDDemoE || g->special == k2CDDemoF || g->special == k2CDDemoG + || g->special == kLolCD1 || g->special == kLolCD2 + || g->game == kKyra3) features |= GF_TALKIE; else if (g->special == kDemoVersion || g->special == k2DemoVersion || g->special == k2DemoLol) features |= GF_DEMO; @@ -1397,39 +1330,23 @@ int main(int argc, char *argv[]) { 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]); + fprintf(stderr, "ERROR: couldn't process file '%s'\n", argv[i]); if (g->special == kFMTownsVersionE || g->special == k2TownsFile1E || g->special == k2TownsFile2E || - g->special == k2CDFile1E || g->special == k2CDFile2E) { + g->special == k2CDFile1E || g->special == k2CDFile2E || g->special == k2CDDemoE) { // This is for executables which contain support for at least 2 languages // The English and non language specific data has now been extracted. // We switch to the second language and continue extraction. - if (!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]); + if (!process(out, ++g, buffer, size)) + fprintf(stderr, "ERROR: couldn't process file '%s'\n", argv[i]); } - if (g->special == k2CDFile1F || g->special == k2CDFile2F) { + if (g->special == k2CDFile1F || g->special == k2CDFile2F || g->special == k2CDDemoF) { // This is for executables which contain support for 3 languages. // We switch to the third language and continue extraction. - if (!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]); + if (!process(out, ++g, buffer, size)) + fprintf(stderr, "ERROR: couldn't process file '%s'\n", argv[i]); } delete[] buffer; @@ -1451,6 +1368,426 @@ int main(int argc, char *argv[]) { return 0; } +const int *getNeedList(const Game *g) { + for (const GameNeed *need = gameNeedTable; need->game != -1; ++need) { + if (need->game == g->game && need->special == g->special) + return need->entries; + } + + return 0; +} + +const char *getIdString(const int id) { + switch (id) { + case kForestSeq: + return "kForestSeq"; + case kKallakWritingSeq: + return "kKallakWritingSeq"; + case kKyrandiaLogoSeq: + return "kKyrandiaLogoSeq"; + case kKallakMalcolmSeq: + return "kKallakMalcolmSeq"; + case kMalcolmTreeSeq: + return "kMalcolmTreeSeq"; + case kWestwoodLogoSeq: + return "kWestwoodLogoSeq"; + case kDemo1Seq: + return "kDemo1Seq"; + case kDemo2Seq: + return "kDemo2Seq"; + case kDemo3Seq: + return "kDemo3Seq"; + case kDemo4Seq: + return "kDemo4Seq"; + case kAmuleteAnimSeq: + return "kAmuleteAnimSeq"; + case kOutroReunionSeq: + return "kOutroReunionSeq"; + case kIntroCPSStrings: + return "kIntroCPSStrings"; + case kIntroCOLStrings: + return "kIntroCOLStrings"; + case kIntroWSAStrings: + return "kIntroWSAStrings"; + case kIntroStrings: + return "kIntroStrings"; + case kOutroHomeString: + return "kOutroHomeString"; + case kRoomFilenames: + return "kRoomFilenames"; + case kRoomList: + return "kRoomList"; + case kCharacterImageFilenames: + return "kCharacterImageFilenames"; + case kAudioTracks: + return "kAudioTracks"; + case kAudioTracksIntro: + return "kAudioTracksIntro"; + case kItemNames: + return "kItemNames"; + case kTakenStrings: + return "kTakenStrings"; + case kPlacedStrings: + return "kPlacedStrings"; + case kDroppedStrings: + return "kDroppedStrings"; + case kNoDropStrings: + return "kNoDropStrings"; + case kPutDownString: + return "kPutDownString"; + case kWaitAmuletString: + return "kWaitAmuletString"; + case kBlackJewelString: + return "kBlackJewelString"; + case kPoisonGoneString: + return "kPoisonGoneString"; + case kHealingTipString: + return "kHealingTipString"; + case kWispJewelStrings: + return "kWispJewelStrings"; + case kMagicJewelStrings: + return "kMagicJewelStrings"; + case kThePoisonStrings: + return "kThePoisonStrings"; + case kFluteStrings: + return "kFluteStrings"; + case kFlaskFullString: + return "kFlaskFullString"; + case kFullFlaskString: + return "kFullFlaskString"; + case kVeryCleverString: + return "kVeryCleverString"; + case kNewGameString: + return "kNewGameString"; + case kDefaultShapes: + return "kDefaultShapes"; + case kHealing1Shapes: + return "kHealing1Shapes"; + case kHealing2Shapes: + return "kHealing2Shapes"; + case kPoisonDeathShapes: + return "kPoisonDeathShapes"; + case kFluteShapes: + return "kFluteShapes"; + case kWinter1Shapes: + return "kWinter1Shapes"; + case kWinter2Shapes: + return "kWinter2Shapes"; + case kWinter3Shapes: + return "kWinter3Shapes"; + case kDrinkShapes: + return "kDrinkShapes"; + case kWispShapes: + return "kWispShapes"; + case kMagicAnimShapes: + return "kMagicAnimShapes"; + case kBranStoneShapes: + return "kBranStoneShapes"; + case kPaletteList1: + return "kPaletteList1"; + case kPaletteList2: + return "kPaletteList2"; + case kPaletteList3: + return "kPaletteList3"; + case kPaletteList4: + return "kPaletteList4"; + case kPaletteList5: + return "kPaletteList5"; + case kPaletteList6: + return "kPaletteList6"; + case kPaletteList7: + return "kPaletteList7"; + case kPaletteList8: + return "kPaletteList8"; + case kPaletteList9: + return "kPaletteList9"; + case kPaletteList10: + return "kPaletteList10"; + case kPaletteList11: + return "kPaletteList11"; + case kPaletteList12: + return "kPaletteList12"; + case kPaletteList13: + return "kPaletteList13"; + case kPaletteList14: + return "kPaletteList14"; + case kPaletteList15: + return "kPaletteList15"; + case kPaletteList16: + return "kPaletteList16"; + case kPaletteList17: + return "kPaletteList17"; + case kPaletteList18: + return "kPaletteList18"; + case kPaletteList19: + return "kPaletteList19"; + case kPaletteList20: + return "kPaletteList20"; + case kPaletteList21: + return "kPaletteList21"; + case kPaletteList22: + return "kPaletteList22"; + case kPaletteList23: + return "kPaletteList23"; + case kPaletteList24: + return "kPaletteList24"; + case kPaletteList25: + return "kPaletteList25"; + case kPaletteList26: + return "kPaletteList26"; + case kPaletteList27: + return "kPaletteList27"; + case kPaletteList28: + return "kPaletteList28"; + case kPaletteList29: + return "kPaletteList29"; + case kPaletteList30: + return "kPaletteList30"; + case kPaletteList31: + return "kPaletteList31"; + case kPaletteList32: + return "kPaletteList32"; + case kPaletteList33: + return "kPaletteList33"; + case kGUIStrings: + return "kGUIStrings"; + case kConfigStrings: + return "kConfigStrings"; + case kKyra1TownsSFXwdTable: + return "kKyra1TownsSFXwdTable"; + case kKyra1TownsSFXbtTable: + return "kKyra1TownsSFXbtTable"; + case kKyra1TownsCDATable: + return "kKyra1TownsCDATable"; + case kCreditsStrings: + return "kCreditsStrings"; + case kAmigaIntroSFXTable: + return "kAmigaIntroSFXTable"; + case kAmigaGameSFXTable: + return "kAmigaGameSFXTable"; + case k2SeqplayPakFiles: + return "k2SeqplayPakFiles"; + case k2SeqplayStrings: + return "k2SeqplayStrings"; + case k2SeqplaySfxFiles: + return "k2SeqplaySfxFiles"; + case k2SeqplayTlkFiles: + return "k2SeqplayTlkFiles"; + case k2SeqplaySeqData: + return "k2SeqplaySeqData"; + case k2SeqplayCredits: + return "k2SeqplayCredits"; + case k2SeqplayCreditsSpecial: + return "k2SeqplayCreditsSpecial"; + case k2SeqplayIntroTracks: + return "k2SeqplayIntroTracks"; + case k2SeqplayFinaleTracks: + return "k2SeqplayFinaleTracks"; + case k2SeqplayIntroCDA: + return "k2SeqplayIntroCDA"; + case k2SeqplayFinaleCDA: + return "k2SeqplayFinaleCDA"; + case k2SeqplayShapeAnimData: + return "k2SeqplayShapeAnimData"; + case k2IngamePakFiles: + return "k2IngamePakFiles"; + case k2IngameSfxFiles: + return "k2IngameSfxFiles"; + case k2IngameSfxFilesTns: + return "k2IngameSfxFilesTns"; + case k2IngameSfxIndex: + return "k2IngameSfxIndex"; + case k2IngameTracks: + return "k2IngameTracks"; + case k2IngameCDA: + return "k2IngameCDA"; + case k2IngameTalkObjIndex: + return "k2IngameTalkObjIndex"; + case k2IngameTimJpStrings: + return "k2IngameTimJpStrings"; + case k2IngameItemAnimData: + return "k2IngameItemAnimData"; + case k2IngameTlkDemoStrings: + return "k2IngameTlkDemoStrings"; + case k3MainMenuStrings: + return "k3MainMenuStrings"; + case k3MusicFiles: + return "k3MusicFiles"; + case k3ScoreTable: + return "k3ScoreTable"; + case k3SfxFiles: + return "k3SfxFiles"; + case k3SfxMap: + return "k3SfxMap"; + case k3ItemAnimData: + return "k3ItemAnimData"; + case k3ItemMagicTable: + return "k3ItemMagicTable"; + case k3ItemStringMap: + return "k3ItemStringMap"; + case kLolSeqplayIntroTracks: + return "kLolSeqplayIntroTracks"; + case kLolIngamePakFiles: + return "kLolIngamePakFiles"; + case kLolCharacterDefs: + return "kLolCharacterDefs"; + case kLolIngameSfxFiles: + return "kLolIngameSfxFiles"; + case kLolIngameSfxIndex: + return "kLolIngameSfxIndex"; + case kLolMusicTrackMap: + return "kLolMusicTrackMap"; + case kLolGMSfxIndex: + return "kLolGMSfxIndex"; + case kLolMT32SfxIndex: + return "kLolMT32SfxIndex"; + case kLolSpellProperties: + return "kLolSpellProperties"; + case kLolGameShapeMap: + return "kLolGameShapeMap"; + case kLolSceneItemOffs: + return "kLolSceneItemOffs"; + case kLolCharInvIndex: + return "kLolCharInvIndex"; + case kLolCharInvDefs: + return "kLolCharInvDefs"; + case kLolCharDefsMan: + return "kLolCharDefsMan"; + case kLolCharDefsWoman: + return "kLolCharDefsWoman"; + case kLolCharDefsKieran: + return "kLolCharDefsKieran"; + case kLolCharDefsAkshel: + return "kLolCharDefsAkshel"; + case kLolExpRequirements: + return "kLolExpRequirements"; + case kLolMonsterModifiers: + return "kLolMonsterModifiers"; + case kLolMonsterLevelOffsets: + return "kLolMonsterLevelOffsets"; + case kLolMonsterDirFlags: + return "kLolMonsterDirFlags"; + case kLolMonsterScaleY: + return "kLolMonsterScaleY"; + case kLolMonsterScaleX: + return "kLolMonsterScaleX"; + case kLolMonsterScaleWH: + return "kLolMonsterScaleWH"; + case kLolFlyingItemShp: + return "kLolFlyingItemShp"; + case kLolInventoryDesc: + return "kLolInventoryDesc"; + case kLolLevelShpList: + return "kLolLevelShpList"; + case kLolLevelDatList: + return "kLolLevelDatList"; + case kLolCompassDefs: + return "kLolCompassDefs"; + case kLolItemPrices: + return "kLolItemPrices"; + case kLolStashSetup: + return "kLolStashSetup"; + case kLolDscUnk1: + return "kLolDscUnk1"; + case kLolDscShapeIndex1: + return "kLolDscShapeIndex1"; + case kLolDscShapeIndex2: + return "kLolDscShapeIndex2"; + case kLolDscScaleWidthData: + return "kLolDscScaleWidthData"; + case kLolDscScaleHeightData: + return "kLolDscScaleHeightData"; + case kLolDscX: + return "kLolDscX"; + case kLolDscY: + return "kLolDscY"; + case kLolDscTileIndex: + return "kLolDscTileIndex"; + case kLolDscUnk2: + return "kLolDscUnk2"; + case kLolDscDoorShapeIndex: + return "kLolDscDoorShapeIndex"; + case kLolDscDimData1: + return "kLolDscDimData1"; + case kLolDscDimData2: + return "kLolDscDimData2"; + case kLolDscBlockMap: + return "kLolDscBlockMap"; + case kLolDscDimMap: + return "kLolDscDimMap"; + case kLolDscShapeOvlIndex: + return "kLolDscShapeOvlIndex"; + case kLolDscBlockIndex: + return "kLolDscBlockIndex"; + case kLolDscDoor1: + return "kLolDscDoor1"; + case kLolDscDoorScale: + return "kLolDscDoorScale"; + case kLolDscDoor4: + return "kLolDscDoor4"; + case kLolDscDoorX: + return "kLolDscDoorX"; + case kLolDscDoorY: + return "kLolDscDoorY"; + case kLolScrollXTop: + return "kLolScrollXTop"; + case kLolScrollYTop: + return "kLolScrollYTop"; + case kLolScrollXBottom: + return "kLolScrollXBottom"; + case kLolScrollYBottom: + return "kLolScrollYBottom"; + case kLolButtonDefs: + return "kLolButtonDefs"; + case kLolButtonList1: + return "kLolButtonList1"; + case kLolButtonList2: + return "kLolButtonList2"; + case kLolButtonList3: + return "kLolButtonList3"; + case kLolButtonList4: + return "kLolButtonList4"; + case kLolButtonList5: + return "kLolButtonList5"; + case kLolButtonList6: + return "kLolButtonList6"; + case kLolButtonList7: + return "kLolButtonList7"; + case kLolButtonList8: + return "kLolButtonList8"; + case kLolLegendData: + return "kLolLegendData"; + case kLolMapCursorOvl: + return "kLolMapCursorOvl"; + case kLolMapStringId: + return "kLolMapStringId"; + case kLolSpellbookAnim: + return "kLolSpellbookAnim"; + case kLolSpellbookCoords: + return "kLolSpellbookCoords"; + case kLolHealShapeFrames: + return "kLolHealShapeFrames"; + case kLolLightningDefs: + return "kLolLightningDefs"; + case kLolFireballCoords: + return "kLolFireballCoords"; + case kLolHistory: + return "kLolHistory"; + default: + return "Unknown"; + } +} + +struct DataIdEntry { + DataIdEntry() : data(), id(-1) {} + DataIdEntry(SearchData d, int i) : data(d), id(i) {} + + SearchData data; + int id; +}; + +typedef std::list<DataIdEntry> DataIdList; + bool process(PAKFile &out, const Game *g, const byte *data, const uint32 size) { char filename[128]; @@ -1459,23 +1796,164 @@ bool process(PAKFile &out, const Game *g, const byte *data, const uint32 size) { 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); + const int *needList = getNeedList(g); + if (!needList) { + fprintf(stderr, "ERROR: No entry need list available\n"); + return false; + } + + DataIdList dataIdList; + Search search(data, size); + + bool allDataPresentAlready = true; + + for (const int *entry = needList; *entry != -1; ++entry) { + bool found = false; + + // Try whether the data is present in the kyra.dat file already + filename[0] = 0; + if (!getFilename(filename, g, *entry)) + error("couldn't find filename for id %d", *entry); + + // Do not add the entry to the search list, when it's already present + // in kyra.dat, that will speed up the creation. + PAKFile::cFileList *list = out.getFileList(); + if (list && list->findEntry(filename) != 0) + continue; + + allDataPresentAlready = false; + + for (const ExtractEntry *p = extractProviders; p->id != -1; ++p) { + if (p->id == *entry) { + // First check for special search ids + for (const ExtractEntrySearchData *d = p->providers; d->hint.size != 0; ++d) { + if (d->specialId == g->special) { + found = true; + + search.addData(d->hint); + dataIdList.push_back(DataIdEntry(d->hint, *entry)); + } + } + + // When a special variant was found, we will break. + if (found) + break; + + // Add non special variants + for (const ExtractEntrySearchData *d = p->providers; d->hint.size != 0; ++d) { + if (d->specialId == -1) { + found = true; + + search.addData(d->hint); + dataIdList.push_back(DataIdEntry(d->hint, *entry)); + } + } + + break; + } + } + + if (!found) { + fprintf(stderr, "ERROR: No provider for id %d/\"%s\"\n", *entry, getIdString(*entry)); + return false; + } + } + + if (allDataPresentAlready) + return true; + + // Process the data search + Search::ResultList results; + search.search(results); + + if (results.empty()) { + fprintf(stderr, "ERROR: Couldn't find any required data\n"); + return false; + } + + typedef std::map<int, Search::ResultData> IdMap; + + IdMap ids; + for (const int *entry = needList; *entry != -1; ++entry) { + Search::ResultList idResults; + + // Fill in all id entries found + for (Search::ResultList::const_iterator i = results.begin(); i != results.end(); ++i) { + for (DataIdList::const_iterator j = dataIdList.begin(); j != dataIdList.end(); ++j) { + if (j->id == *entry && i->data == j->data) + idResults.push_back(*i); + } + } + + if (idResults.size() > 1) + warning("Multiple entries found for id %d/\"%s\"", *entry, getIdString(*entry)); + + Search::ResultData result; + result.data.size = 0; + result.offset = 0xFFFFFFFF; + + // Reduce all entries to one single entry. + // + // We use the following rules for this (in this order): + // - Prefer the entry with the higest size + // - Prefer the entry, which starts at the smallest offest + // + // TODO: These rules might not be safe for all games, but hopefully + // they will work fine. If there are any problems it should be rather + // easy to identify them, since we print out a warning for multiple + // entries found. + for (Search::ResultList::iterator i = idResults.begin(); i != idResults.end(); ++i) { + if (result.data.size <= i->data.size) { + if (result.offset >= i->offset) + result = *i; + } + } + + ids[*entry] = result; + } + + // Free up some memory + results.clear(); + dataIdList.clear(); + + // Compare against need list + for (const int *entry = needList; *entry != -1; ++entry) { + if (ids.find(*entry) != ids.end()) + continue; + + // Try whether the data is present in the kyra.dat file already + filename[0] = 0; + if (!getFilename(filename, g, *entry)) + error("couldn't find filename for id %d", *entry); + + PAKFile::cFileList *list = out.getFileList(); + // If the data wasn't found already, we need to break the extraction here + if (!list || !list->findEntry(filename)) { + fprintf(stderr, "Couldn't find id %d/\"%s\" in executable file", *entry, getIdString(*entry)); return false; } + } - const ExtractFilename *fDesc = getFilenameDesc(i->id); + for (IdMap::const_iterator i = ids.begin(); i != ids.end(); ++i) { + const int id = i->first; + + filename[0] = 0; + if (!getFilename(filename, g, id)) { + fprintf(stderr, "ERROR: couldn't get filename for id %d\n", id); + return false; + } + + const ExtractFilename *fDesc = getFilenameDesc(id); if (!fDesc) { - fprintf(stderr, "ERROR: couldn't find file description for id %d\n", i->id); + fprintf(stderr, "ERROR: couldn't find file description for id %d\n", 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); + fprintf(stderr, "ERROR: couldn't find type description for id %d\n", id); return false; } @@ -1486,30 +1964,30 @@ bool process(PAKFile &out, const Game *g, const byte *data, const uint32 size) { int patch = 0; if (g->special == kFMTownsVersionE || g->special == kFMTownsVersionJ) { // FM Towns files that need addional patches - if (i->id == kTakenStrings || i->id == kNoDropStrings || i->id == kPoisonGoneString || - i->id == kThePoisonStrings || i->id == kFluteStrings || i->id == kWispJewelStrings) + if (id == kTakenStrings || id == kNoDropStrings || id == kPoisonGoneString || + id == kThePoisonStrings || id == kFluteStrings || id == kWispJewelStrings) patch = 1; - else if (i->id == kIntroStrings || i->id == kKyra1TownsSFXwdTable) + else if (id == kIntroStrings || id == kKyra1TownsSFXwdTable) patch = 2; } if (g->special == k2TownsFile1E || g->special == k2TownsFile1J) { - if (i->id == k2SeqplayStrings) + if (id == k2SeqplayStrings) patch = 3; } if (g->special == k2FloppyFile2) { - if (i->id == k2IngamePakFiles) + if (id == k2IngamePakFiles) patch = 4; } if (g->special == k2FloppyFile2 || g->special == k2CDFile2E) { - if (i->id == k2IngameSfxFiles) + if (id == k2IngameSfxFiles) patch = 5; } - if (!tDesc->extract(out, g, data + i->startOff, i->endOff - i->startOff, filename, patch)) { - fprintf(stderr, "ERROR: couldn't extract id %d\n", i->id); + if (!tDesc->extract(out, g, data + i->second.offset, i->second.data.size, filename, patch)) { + fprintf(stderr, "ERROR: couldn't extract id %d\n", id); return false; } } @@ -1525,27 +2003,10 @@ bool process(PAKFile &out, const Game *g, const byte *data, const uint32 size) { // game data detection const Game *gameDescs[] = { - kyra1EngGames, - kyra1EspGames, - kyra1FreGames, - kyra1GerGames, - kyra1ItaGames, - kyra1TownsGames, - kyra1AmigaGames, - kyra1FanTranslations, - - kyra2FloppyGames, - kyra2TalkieGames, - kyra2TownsGames, - kyra2Demos, - + kyra1Games, + kyra2Games, kyra3Games, - - lolDemos, - lolDosTalkieGames, - lolDosFloppyGames, - //lolPC98Games, - + lolGames, 0 }; diff --git a/tools/create_kyradat/create_kyradat.h b/tools/create_kyradat/create_kyradat.h index d3a05db727..c6e6547d51 100644 --- a/tools/create_kyradat/create_kyradat.h +++ b/tools/create_kyradat/create_kyradat.h @@ -25,6 +25,7 @@ #include "util.h" #include "pak.h" +#include "search.h" struct Language { int lang; @@ -267,10 +268,14 @@ enum kExtractID { kMaxResIDs }; +struct ExtractEntrySearchData { + int specialId; + SearchData hint; +}; + struct ExtractEntry { int id; - uint32 startOff; - uint32 endOff; + const ExtractEntrySearchData *providers; }; struct ExtractFilename { @@ -281,38 +286,42 @@ struct ExtractFilename { enum kSpecial { kTalkieVersion = 0, - kDemoVersion = 1, - kFMTownsVersionE = 2, - kFMTownsVersionJ = 3, - kAmigaVersion = 4, - - k2CDFile1E = 5, - k2CDFile1F = 6, - k2CDFile1G = 7, - k2CDFile2E = 8, - k2CDFile2F = 9, - k2CDFile2G = 10, + kDemoVersion, + kFMTownsVersionE, + kFMTownsVersionJ, + kAmigaVersion, + + k2CDFile1E, + k2CDFile1F, + k2CDFile1G, + k2CDFile2E, + k2CDFile2F, + k2CDFile2G, + k2CDDemoE, + k2CDDemoF, + k2CDDemoG, // Italian fan translation - k2CDFile1I = 11, + k2CDFile1I, - k2TownsFile1E = 12, - k2TownsFile1J = 13, - k2TownsFile2E = 14, - k2TownsFile2J = 15, + k2TownsFile1E, + k2TownsFile1J, + k2TownsFile2E, + k2TownsFile2J, - k2FloppyFile1 = 16, - k2FloppyFile2 = 17, + k2FloppyFile1, + k2FloppyFile2, - k2DemoVersion = 18, - k2DemoVersionTlkE = 19, - k2DemoVersionTlkF = 20, - k2DemoVersionTlkG = 21, - k2DemoLol = 22, + k2DemoVersion, + k2DemoVersionTlkE, + k2DemoVersionTlkF, + k2DemoVersionTlkG, + k2DemoLol, - kLolCD = 23, + kLolCD1, + kLolCD2, // special case for Kyrandia 1 CD demo - kDemoCDVersion = 24 + kDemoCDVersion }; struct SpecialExtension { @@ -333,10 +342,9 @@ struct Game { int special; const char *md5; - const ExtractEntry *entries; }; -#define GAME_DUMMY_ENTRY { -1, -1, -1, 0, 0 } +#define GAME_DUMMY_ENTRY { -1, -1, -1, 0 } struct GameNeed { int game; diff --git a/tools/create_kyradat/eng.h b/tools/create_kyradat/eng.h deleted file mode 100644 index f83979195a..0000000000 --- a/tools/create_kyradat/eng.h +++ /dev/null @@ -1,212 +0,0 @@ -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 }, - { kAudioTracks, 0x00032771, 0x000327B2 }, - { kAudioTracksIntro, 0x0002FC88, 0x0002FC8E }, - - { -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 }, - { kAudioTracks, 0x00033006, 0x00033047 }, - { kAudioTracksIntro, 0x0002FE9A, 0x0002FEA6 }, - { -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 }, - { kAudioTracksIntro, 0x00014E6E, 0x00014E74 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra1EngDemoCD[] = { - { kKallakWritingSeq, 0x0002FF3F, 0x00030744 }, - { kMalcolmTreeSeq, 0x00030744, 0x00030974 }, - { kWestwoodLogoSeq, 0x00030974, 0x000309BF }, - { kKyrandiaLogoSeq, 0x000309BF, 0x00030A65 }, - { kKallakMalcolmSeq, 0x00030A65, 0x00030D1D }, - { kForestSeq, 0x00030D1D, 0x00030F90 }, - { kIntroCPSStrings, 0x00030F90, 0x00030FA5 }, - { kIntroWSAStrings, 0x00030FA5, 0x00031025 }, - { kIntroCOLStrings, 0x00031025, 0x00031050 }, - { kIntroStrings, 0x00031050, 0x00031546 }, - { kAudioTracksIntro, 0x0002FD4A, 0x0002FD5C }, - { -1, 0, 0 } -}; - -const Game kyra1EngGames[] = { - { kKyra1, EN_ANY, -1, "76a4fc84e173cadb6369785787e1546e", kyra1EngFloppy }, - { kKyra1, EN_ANY, kTalkieVersion, "1ebc18f3e7fbb72474a55cb0fa089ed4", kyra1EngCD }, - { kKyra1, EN_ANY, kDemoVersion, "7b7504c8560ffc914d34c44c71b3094c", kyra1EngDemo }, - { kKyra1, EN_ANY, kDemoCDVersion, "226fdba99cb11ef1047131d9a50e6292", kyra1EngDemoCD }, - GAME_DUMMY_ENTRY -}; diff --git a/tools/create_kyradat/esp.h b/tools/create_kyradat/esp.h deleted file mode 100644 index 79d8bd00e7..0000000000 --- a/tools/create_kyradat/esp.h +++ /dev/null @@ -1,39 +0,0 @@ -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, ES_ESP, -1, "9ff130d2558bcd674d4074849d93c362", kyra1EspFloppy }, - GAME_DUMMY_ENTRY -}; diff --git a/tools/create_kyradat/fre.h b/tools/create_kyradat/fre.h deleted file mode 100644 index 970769f95a..0000000000 --- a/tools/create_kyradat/fre.h +++ /dev/null @@ -1,79 +0,0 @@ -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, FR_FRA, -1, "aa9d6d78d8b199deaf48efeca6d19af2", kyra1FreFloppy }, - { kKyra1, FR_FRA, kTalkieVersion, "307c5d4a554d9068ac3d326e350ae4a6", kyra1FreCD }, - GAME_DUMMY_ENTRY -}; diff --git a/tools/create_kyradat/ger.h b/tools/create_kyradat/ger.h deleted file mode 100644 index 5ecfc7e644..0000000000 --- a/tools/create_kyradat/ger.h +++ /dev/null @@ -1,80 +0,0 @@ -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, DE_DEU, -1, "9442d6f7db6a41f3dd4aa4de5d36e107", kyra1GerFloppy }, - { kKyra1, DE_DEU, kTalkieVersion, "c65d381184f98ac26d9efd2d45baef51", kyra1GerCD }, - GAME_DUMMY_ENTRY -}; diff --git a/tools/create_kyradat/hof_cd.h b/tools/create_kyradat/hof_cd.h deleted file mode 100644 index 1530a04e9f..0000000000 --- a/tools/create_kyradat/hof_cd.h +++ /dev/null @@ -1,62 +0,0 @@ -const ExtractEntry kyra2File1CDE[] = { - { k2SeqplayPakFiles, 0x00029FA4, 0x00029FEA }, - { k2SeqplayCredits, 0x00027920, 0x00028408 }, - { k2SeqplayCreditsSpecial, 0x00029E01, 0x00029E1B }, - { k2SeqplayStrings, 0x0002C566, 0x0002CE7C }, - { k2SeqplaySfxFiles, 0x0002E284, 0x0002E4B8 }, - { k2SeqplayTlkFiles, 0x0002A2AC, 0x0002A349 }, - { k2SeqplayIntroTracks, 0x0002E4C5, 0x0002E4CD }, - { k2SeqplayFinaleTracks, 0x0002E4DA, 0x0002E4E3 }, - { k2SeqplaySeqData, 0x0002BB4C, 0x0002C20A }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File1CDF[] = { - { k2SeqplayStrings, 0x0002CE7C, 0x0002D845 }, - { k2SeqplayTlkFiles, 0x0002A349, 0x0002A3E6 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File1CDG[] = { - { k2SeqplayStrings, 0x0002D845, 0x0002E284 }, - { k2SeqplayTlkFiles, 0x0002A3E6, 0x0002A483 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File1CDI[] = { - { k2SeqplayStrings, 0x0002C566, 0x0002CE7C }, - { k2SeqplayTlkFiles, 0x0002A2AC, 0x0002A349 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File2CDE[] = { - { k2IngameSfxFiles, 0x0002CB30, 0x0002D221 }, - { k2IngameSfxIndex, 0x000294F0, 0x00029848 }, - { k2IngameTracks, 0x0002F2FE, 0x0002F37E }, - { k2IngameTalkObjIndex, 0x0002BAC2, 0x0002BB46 }, - { k2IngameItemAnimData, 0x0002FE68, 0x000301B0 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File2CDF[] = { - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File2CDG[] = { - { -1, 0, 0 } -}; - -const Game kyra2TalkieGames[] = { - { kKyra2, EN_ANY, k2CDFile1E, "85bbc1cc6c4cef6ad31fc6ee79518efb", kyra2File1CDE}, - { kKyra2, FR_FRA, k2CDFile1F, "85bbc1cc6c4cef6ad31fc6ee79518efb", kyra2File1CDF}, - { kKyra2, DE_DEU, k2CDFile1G, "85bbc1cc6c4cef6ad31fc6ee79518efb", kyra2File1CDG}, - { kKyra2, EN_ANY, k2CDFile2E, "e20d0d2e500f01e399ec588247a7e213", kyra2File2CDE}, - { kKyra2, FR_FRA, k2CDFile2F, "e20d0d2e500f01e399ec588247a7e213", kyra2File2CDF}, - { kKyra2, DE_DEU, k2CDFile2G, "e20d0d2e500f01e399ec588247a7e213", kyra2File2CDG}, - - // Italian Fan Translation (using same offsets as English) - { kKyra2, IT_ITA, k2CDFile1I, "130795aa8f2333250c895dae9028b9bb", kyra2File1CDI}, - - GAME_DUMMY_ENTRY -}; - diff --git a/tools/create_kyradat/hof_demo.h b/tools/create_kyradat/hof_demo.h deleted file mode 100644 index b239f63780..0000000000 --- a/tools/create_kyradat/hof_demo.h +++ /dev/null @@ -1,33 +0,0 @@ -const ExtractEntry kyra2Demo[] = { - { k2SeqplayPakFiles, 0x0001C130, 0x0001C144 }, - { k2SeqplaySfxFiles, 0x0001CDDE, 0x0001CEBC }, - { k2SeqplaySeqData, 0x0001C920, 0x0001CB9C }, - { k2SeqplayIntroTracks, 0x0001CEBC, 0x0001CECC }, - { k2SeqplayShapeAnimData, 0x0001CC14, 0x0001CCCC }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2DemoCDE[] = { - { k2IngameTlkDemoStrings, 0x0002F367, 0x0002F432 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2DemoCDF[] = { - { k2IngameTlkDemoStrings, 0x0002F432, 0x0002F4F0 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2DemoCDG[] = { - { k2IngameTlkDemoStrings, 0x0002F4F0, 0x0002F5CC }, - { -1, 0, 0 } -}; - -const Game kyra2Demos[] = { - { kKyra2, EN_ANY, k2DemoVersion, "a620a37579dd44ab0403482285e3897f", kyra2Demo}, - { kKyra2, EN_ANY, k2CDFile2E, "fa54d8abfe05f9186c05f7de7eaf1480", kyra2DemoCDE}, - { kKyra2, FR_FRA, k2CDFile2F, "fa54d8abfe05f9186c05f7de7eaf1480", kyra2DemoCDF}, - { kKyra2, DE_DEU, k2CDFile2G, "fa54d8abfe05f9186c05f7de7eaf1480", kyra2DemoCDG}, - GAME_DUMMY_ENTRY -}; - - diff --git a/tools/create_kyradat/hof_floppy.h b/tools/create_kyradat/hof_floppy.h deleted file mode 100644 index e61f43fb2c..0000000000 --- a/tools/create_kyradat/hof_floppy.h +++ /dev/null @@ -1,91 +0,0 @@ -const ExtractEntry kyra2File1E[] = { - { k2SeqplayPakFiles, 0x0002132A, 0x0002134C }, - { k2SeqplayStrings, 0x00022DF2, 0x000236BA }, - { k2SeqplaySfxFiles, 0x000236BA, 0x0002382D }, - { k2SeqplayIntroTracks, 0x0002383A, 0x0002384A }, - { k2SeqplayFinaleTracks, 0x00023857, 0x00023869 }, - { k2SeqplaySeqData, 0x000223E0, 0x00022AD4 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File1F[] = { - { k2SeqplayPakFiles, 0x00020F9D, 0x00020FBF }, - { k2SeqplayStrings, 0x00022A9C, 0x00023431 }, - { k2SeqplaySfxFiles, 0x00023431, 0x000235A4 }, - { k2SeqplayIntroTracks, 0x000235B1, 0x000235C1 }, - { k2SeqplayFinaleTracks, 0x000235CE, 0x000235E0 }, - { k2SeqplaySeqData, 0x000223E0, 0x0002277E }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File1G[] = { - { k2SeqplayPakFiles, 0x000211F9, 0x0002121B }, - { k2SeqplayStrings, 0x00022D30, 0x0002371C }, - { k2SeqplaySfxFiles, 0x0002371C, 0x0002388F }, - { k2SeqplayIntroTracks, 0x0002389C, 0x000238AC }, - { k2SeqplayFinaleTracks, 0x000238B9, 0x000238CB }, - { k2SeqplaySeqData, 0x0002231E, 0x00022A12 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File1I[] = { - { k2SeqplayPakFiles, 0x00021189, 0x000211B7 }, - { k2SeqplayStrings, 0x00022C62, 0x0002352A }, - { k2SeqplaySfxFiles, 0x0002352A, 0x0002369D }, - { k2SeqplayIntroTracks, 0x000236AA, 0x000236AA }, - { k2SeqplayFinaleTracks, 0x000236C7, 0x000236D9 }, - { k2SeqplaySeqData, 0x00022250, 0x00022944 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File2E[] = { - { k2IngamePakFiles, 0x0035E4E, 0x00362ED }, - { k2IngameSfxFiles, 0x00034700, 0x00034DF1 }, - { k2IngameSfxIndex, 0x0002A710, 0x0002AA68 }, - { k2IngameTracks, 0x0003B2F2, 0x0003B370 }, - { k2IngameTalkObjIndex, 0x00033EB2, 0x00033F2A }, - { k2IngameItemAnimData, 0x0003B94A, 0x0003BC92 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File2F[] = { - { k2IngamePakFiles, 0x0003AA9C, 0x0003AB1A }, - { k2IngameSfxFiles, 0x00033E24, 0x00034515 }, - { k2IngameSfxIndex, 0x000288B0, 0x00028C08 }, - { k2IngameTracks, 0x0003B2F2, 0x0003B370 }, - { k2IngameTalkObjIndex, 0x0003328E, 0x00033306 }, - { k2IngameItemAnimData, 0x0003AFF6, 0x0003B33E }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File2G[] = { - { k2IngamePakFiles, 0x0035626, 0x0035AC5 }, - { k2IngameSfxFiles, 0x00033ED8, 0x000345C9 }, - { k2IngameSfxIndex, 0x000288E0, 0x00028C38 }, - { k2IngameTracks, 0x0003AA8C, 0x0003AB0A }, - { k2IngameTalkObjIndex, 0x000332BE, 0x00033336 }, - { k2IngameItemAnimData, 0x0003B00A, 0x0003B352 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File2I[] = { - { k2IngamePakFiles, 0x00036816, 0x00036CB5 }, - { k2IngameSfxFiles, 0x000350C6, 0x000357B7 }, - { k2IngameSfxIndex, 0x0002AB80, 0x0002AED8 }, - { k2IngameTracks, 0x0003BE78, 0x0003BEF6 }, - { k2IngameTalkObjIndex, 0x00034872, 0x000348EA }, - { k2IngameItemAnimData, 0x0003C4E2, 0x0003C82A }, - { -1, 0, 0 } -}; - -const Game kyra2FloppyGames[] = { - { kKyra2, EN_ANY, k2FloppyFile1, "9b0f5e57b5a2ed88b5b989cbb402b6c7", kyra2File1E}, - { kKyra2, FR_FRA, k2FloppyFile1, "df31cc9e37e1cf68df2fdc75ddf2d87b", kyra2File1F}, - { kKyra2, DE_DEU, k2FloppyFile1, "0ca4f9a1438264a4c63c3218e064ed3b", kyra2File1G}, - { kKyra2, IT_ITA, k2FloppyFile1, "178d3ab913f61bfba21d2fb196405e8c", kyra2File1I}, - { kKyra2, EN_ANY, k2FloppyFile2, "7c3eadbe5122722cf2e5e1611e19dfb9", kyra2File2E}, - { kKyra2, FR_FRA, k2FloppyFile2, "fc2c6782778e6c6d5a553d1cb73c98ad", kyra2File2F}, - { kKyra2, DE_DEU, k2FloppyFile2, "0d9b0eb7b0ad889ec942d74d80dde1bf", kyra2File2G}, - { kKyra2, IT_ITA, k2FloppyFile2, "3a61ed6b7c00ddae383a0361799e2ba6", kyra2File2I}, - GAME_DUMMY_ENTRY -}; diff --git a/tools/create_kyradat/hof_towns.h b/tools/create_kyradat/hof_towns.h deleted file mode 100644 index f2dd82d431..0000000000 --- a/tools/create_kyradat/hof_towns.h +++ /dev/null @@ -1,37 +0,0 @@ -const ExtractEntry kyra2File1FMTownsE[] = { - { k2SeqplayPakFiles, 0x00000540, 0x00000573 }, - { k2SeqplayStrings, 0x00001614, 0x00001FA4 }, - { k2SeqplaySfxFiles, 0x0000284C, 0x000029EF }, - { k2SeqplaySeqData, 0x000050D8, 0x00005794 }, - { k2SeqplayIntroCDA, 0x00007FF8, 0x00008010 }, - { k2SeqplayFinaleCDA, 0x00008010, 0x00008018 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File1FMTownsJ[] = { - { k2SeqplayStrings, 0x00001FA4, 0x0000284C }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File2FMTownsE[] = { - { k2IngamePakFiles, 0x00000540, 0x0000065C }, - { k2IngameSfxFilesTns, 0x00003E3C, 0x000047A3 }, - { k2IngameSfxIndex, 0x00013980, 0x00013CD8 }, - { k2IngameCDA, 0x0001808C, 0x000181BC }, - { k2IngameTalkObjIndex, 0x000199B6, 0x00019A30 }, - { k2IngameTimJpStrings, 0x0000677C, 0x000067A9 }, - { k2IngameItemAnimData, 0x00012F28, 0x00013270 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra2File2FMTownsJ[] = { - { -1, 0, 0 } -}; - -const Game kyra2TownsGames[] = { - { kKyra2, EN_ANY, k2TownsFile1E, "74f50d79c919cc8e7196c24942ce43d7", kyra2File1FMTownsE}, - { kKyra2, JA_JPN, k2TownsFile1J, "74f50d79c919cc8e7196c24942ce43d7", kyra2File1FMTownsJ}, - { kKyra2, EN_ANY, k2TownsFile2E, "a9a7fd4f05d00090e9e8bda073e6d431", kyra2File2FMTownsE}, - { kKyra2, JA_JPN, k2TownsFile2J, "a9a7fd4f05d00090e9e8bda073e6d431", kyra2File2FMTownsJ}, - GAME_DUMMY_ENTRY -}; diff --git a/tools/create_kyradat/ita.h b/tools/create_kyradat/ita.h deleted file mode 100644 index 6099f8f07d..0000000000 --- a/tools/create_kyradat/ita.h +++ /dev/null @@ -1,39 +0,0 @@ -const ExtractEntry kyra1ItaFloppy[] = { - { kKallakWritingSeq, 0x000304fa, 0x00030cef }, - { kMalcolmTreeSeq, 0x00030cef, 0x00030F05 }, - { kWestwoodLogoSeq, 0x00030F05, 0x00030F50 }, - { kKyrandiaLogoSeq, 0x00030F50, 0x00030FAC }, - { kKallakMalcolmSeq, 0x00030FAC, 0x00031217 }, - { kForestSeq, 0x00031217, 0x000313ac }, - { kIntroCPSStrings, 0x000313AC, 0x000313C0 }, - { kIntroWSAStrings, 0x000313C0, 0x00031440 }, - { kIntroCOLStrings, 0x00031440, 0x0003146B }, - { kIntroStrings, 0x0003146B, 0x000319E7 }, - { kItemNames, 0x000346DC, 0x00034C6D }, - { kTakenStrings, 0x00033F60, 0x00033F74 }, - { kPlacedStrings, 0x00033F74, 0x00033F81 }, - { kDroppedStrings, 0x00033FAA, 0x00033FB5 }, - { kNoDropStrings, 0x00033F1A, 0x00033F5F }, - { kPutDownString, 0x0002f120, 0x0002f154 }, - { kWaitAmuletString, 0x0002f154, 0x0002f19e }, - { kBlackJewelString, 0x0002f19e, 0x0002f1c0 }, - { kHealingTipString, 0x0002f1c0, 0x0002f1ff }, - { kPoisonGoneString, 0x0002f290, 0x0002f2c4 }, - { kThePoisonStrings, 0x0002ff20, 0x0002ff83 }, - { kFluteStrings, 0x000323ab, 0x000323f7 }, - { kWispJewelStrings, 0x0002f1ff, 0x0002f273 }, - { kMagicJewelStrings, 0x0002f273, 0x0002f290 }, - { kFlaskFullString, 0x00030059, 0x0003007a }, - { kFullFlaskString, 0x0002ffa4, 0x00030059 }, - { kOutroHomeString, 0x000320f2, 0x000320f7 }, - { kVeryCleverString, 0x0003204c, 0x00032084 }, - { kGUIStrings, 0x0002f434, 0x0002f659 }, - { kNewGameString, 0x00032ba6, 0x00032bc2 }, - { kConfigStrings, 0x0002fe9f, 0x0002fef3 }, - { -1, 0, 0 } -}; - -const Game kyra1ItaGames[] = { - { kKyra1, IT_ITA, -1, "5d7550306b369a3492f9f3402702477c", kyra1ItaFloppy }, - GAME_DUMMY_ENTRY -}; diff --git a/tools/create_kyradat/lol_cd.h b/tools/create_kyradat/lol_cd.h deleted file mode 100644 index b719c244a6..0000000000 --- a/tools/create_kyradat/lol_cd.h +++ /dev/null @@ -1,95 +0,0 @@ -const ExtractEntry lolCDFile1E[] = { - { kLolHistory, 0x1FAA0, 0x1FC71 }, - { -1, 0, 0 } -}; - -const ExtractEntry lolCDFile2[] = { - { kLolCharacterDefs, 0x00029D60, 0x0002A1F2 }, - { kLolIngameSfxFiles, 0x0002A330, 0x0002AC22 }, - { kLolIngameSfxIndex, 0x0002AC22, 0x0002B00A }, - { kLolMusicTrackMap, 0x0002A240, 0x0002A330 }, - { kLolGMSfxIndex, 0x0002B010, 0x0002B10A }, - { kLolMT32SfxIndex, 0x0002B110, 0x0002B20A }, - //{ kLolADLSfxIndex, 0x0002B210, 0x0002B30A }, - { kLolSpellProperties, 0x0002B5E0, 0x0002B6F8 }, - { kLolGameShapeMap, 0x0002B35C, 0x0002B470 }, - { kLolSceneItemOffs, 0x0003200F, 0x00032017 }, - { kLolCharInvIndex, 0x0002B470, 0x0002B47A }, - { kLolCharInvDefs, 0x0002B47A, 0x0002B4D2 }, - { kLolCharDefsMan, 0x0002B4D2, 0x0002B4E4 }, - { kLolCharDefsWoman, 0x0002B4E4, 0x0002B4F6 }, - { kLolCharDefsKieran, 0x0002B4F6, 0x0002B508 }, - //{ kLolCharDefsUnk, 0x0002B508, 0x0002B51A }, - { kLolCharDefsAkshel, 0x0002B51A, 0x0002B52C }, - { kLolExpRequirements, 0x0002B830, 0x0002B85C }, - { kLolMonsterModifiers, 0x0002B85C, 0x0002B874 }, - { kLolMonsterLevelOffsets, 0x00031FDF, 0x00031FFF }, - { kLolMonsterDirFlags, 0x00031FFF, 0x0003200F }, - { kLolMonsterScaleY, 0x00031BC0, 0x00031BDE }, - { kLolMonsterScaleX, 0x00031BDE, 0x00031BFE }, - { kLolMonsterScaleWH, 0x000285C0, 0x00028642 }, - { kLolFlyingItemShp, 0x00028642, 0x000286C4 }, - { kLolInventoryDesc, 0x00032706, 0x0003271C }, - - { kLolLevelShpList, 0x00032826, 0x000328A5 }, - { kLolLevelDatList, 0x000328A5, 0x000329A4 }, - { kLolCompassDefs, 0x000286C4, 0x000287C4 }, - { kLolItemPrices, 0x0002F8C0, 0x0002F91C }, - { kLolStashSetup, 0x000324A5, 0x000324B1 }, - - { kLolDscUnk1, 0x00032017, 0x0003203B }, - { kLolDscShapeIndex1, 0x0003203B, 0x0003205F }, - { kLolDscShapeIndex2, 0x0003205F, 0x00032069 }, - { kLolDscScaleWidthData, 0x00032069, 0x000320B1 }, - { kLolDscScaleHeightData, 0x000320B1, 0x000320F9 }, - { kLolDscX, 0x000320F9, 0x00032141 }, - { kLolDscY, 0x00032141, 0x00032165 }, - { kLolDscTileIndex, 0x00032165, 0x00032177 }, - { kLolDscUnk2, 0x00032177, 0x0003218E }, - { kLolDscDoorShapeIndex, 0x0003218E, 0x000321A5 }, - { kLolDscDimData1, 0x00031C03, 0x00031D47 }, - { kLolDscDimData2, 0x00031D47, 0x00031FD0 }, - { kLolDscBlockMap, 0x00031B64, 0x00031B70 }, - { kLolDscDimMap, 0x00031B70, 0x00031B82 }, - { kLolDscDoorScale, 0x00031B82, 0x00031B92 }, - { kLolDscShapeOvlIndex, 0x00031B92, 0x00031BBA }, - { kLolDscDoor4, 0x00031BBA, 0x00031BC2 }, - { kLolDscBlockIndex, 0x00033B53, 0x00033B9B }, - { kLolDscDoor1, 0x0002B550, 0x0002B5D0 }, - { kLolDscDoorX, 0x00027CC0, 0x00028140 }, - { kLolDscDoorY, 0x00028140, 0x000285C0 }, - - { kLolScrollXTop, 0x00033D40, 0x00033D4A }, - { kLolScrollYTop, 0x00033D4A, 0x00033D54 }, - { kLolScrollXBottom, 0x00033D54, 0x00033D5E }, - { kLolScrollYBottom, 0x00033D5E, 0x00033D68 }, - - { kLolButtonDefs, 0x00028E80, 0x000296AA }, - { kLolButtonList1, 0x000296B0, 0x00029700 }, - { kLolButtonList2, 0x00029700, 0x0002971E }, - { kLolButtonList3, 0x00029720, 0x00029724 }, - { kLolButtonList4, 0x00029730, 0x0002974E }, - { kLolButtonList5, 0x00029750, 0x00029770 }, - { kLolButtonList6, 0x00029770, 0x0002978C }, - { kLolButtonList7, 0x00029790, 0x00029796 }, - { kLolButtonList8, 0x000297A0, 0x000297A4 }, - - { kLolLegendData, 0x000321F0, 0x0003222C }, - { kLolMapCursorOvl, 0x0003222C, 0x00032245 }, - { kLolMapStringId, 0x000287D0, 0x0002880C }, - //{ kLolMapPal, 0x0001D9C0, 0x0001DBC0 }, - - { kLolSpellbookAnim, 0x00032D94, 0x00032DCC }, - { kLolSpellbookCoords, 0x00032DCC, 0x00032DE4 }, - { kLolHealShapeFrames, 0x000297D0, 0x00029820 }, - { kLolLightningDefs, 0x00032740, 0x00032754 }, - { kLolFireballCoords, 0x0001D9C0, 0x0001DBC0 }, - - { -1, 0, 0 } -}; - -const Game lolDosTalkieGames[] = { - { kLol, EN_ANY, kLolCD, "9d1778314de80598c0b0d032e2a1a1cf", lolCDFile1E }, - { kLol, EN_ANY, kLolCD, "263998ec600afca1cc7b935c473df670", lolCDFile2 }, - GAME_DUMMY_ENTRY -}; diff --git a/tools/create_kyradat/lol_demo.h b/tools/create_kyradat/lol_demo.h deleted file mode 100644 index 85470d9661..0000000000 --- a/tools/create_kyradat/lol_demo.h +++ /dev/null @@ -1,15 +0,0 @@ -const ExtractEntry lolDemo[] = { - { k2SeqplayPakFiles, 0x0001AC10, 0x0001AC1C }, - { k2SeqplayStrings, 0x0001B5EE, 0x0001B6F0 }, - { k2SeqplaySfxFiles, 0x0001B6F0, 0x0001B7B5 }, - { k2SeqplaySeqData, 0x0001B320, 0x0001B56C }, - { kLolSeqplayIntroTracks, 0x0001B7B5, 0x0001B7CF }, - { -1, 0, 0 } -}; - -const Game lolDemos[] = { - { kLol, EN_ANY, k2DemoLol, "30bb5af87d38adb47d3e6ce06b1cb042", lolDemo}, - GAME_DUMMY_ENTRY -}; - - diff --git a/tools/create_kyradat/lol_floppy.h b/tools/create_kyradat/lol_floppy.h deleted file mode 100644 index bb306b7083..0000000000 --- a/tools/create_kyradat/lol_floppy.h +++ /dev/null @@ -1,87 +0,0 @@ -const ExtractEntry lolFloppyFile2G[] = { - { kLolIngamePakFiles, 0x0038C38, 0x0038CC0 }, - - { kLolCharacterDefs, 0x0002A6D0, 0x0002AB62 }, - { kLolIngameSfxFiles, 0x0002ACA0, 0x0002B592 }, - { kLolIngameSfxIndex, 0x0002B592, 0x0002B97A }, - { kLolMusicTrackMap, 0x0002ABB0, 0x0002ACA0 }, - { kLolGMSfxIndex, 0x0002B980, 0x0002BA7A }, - { kLolMT32SfxIndex, 0x0002BA80, 0x0002BB7A }, - { kLolSpellProperties, 0x0002C0E0, 0x0002C1F8 }, - { kLolGameShapeMap, 0x0002BE5C, 0x0002BF70 }, - { kLolSceneItemOffs, 0x0003730F, 0x00037317 }, - { kLolCharInvIndex, 0x0002BF70, 0x0002BF7A }, - { kLolCharInvDefs, 0x0002BF7A, 0x0002BFD2 }, - { kLolCharDefsMan, 0x0002BFD2, 0x0002BFE4 }, - { kLolCharDefsWoman, 0x0002BFE4, 0x0002BFF6 }, - { kLolCharDefsKieran, 0x0002BFF6, 0x0002C008 }, - { kLolCharDefsAkshel, 0x0002C01A, 0x0002C02C }, - { kLolExpRequirements, 0x00031750, 0x0003177C }, - { kLolMonsterModifiers, 0x0003177C, 0x00031794 }, - { kLolMonsterLevelOffsets, 0x000372DF, 0x000372FF }, - { kLolMonsterDirFlags, 0x000372FF, 0x0003730F }, - { kLolMonsterScaleY, 0x00036EC0, 0x00036EDE }, - { kLolMonsterScaleX, 0x00036EDE, 0x00036EFE }, - { kLolMonsterScaleWH, 0x00028F30, 0x00028FB2 }, - { kLolFlyingItemShp, 0x00028FB2, 0x00029034 }, - { kLolInventoryDesc, 0x00037ACE, 0x00037AE4 }, - - { kLolLevelShpList, 0x00037C02, 0x00037C81 }, - { kLolLevelDatList, 0x00037C81, 0x00037D00 }, - { kLolCompassDefs, 0x00029034, 0x00029134 }, - { kLolStashSetup, 0x0003781D, 0x00037829 }, - - { kLolDscUnk1, 0x00037317, 0x0003733B }, - { kLolDscShapeIndex1, 0x0003733B, 0x0003735F }, - { kLolDscShapeIndex2, 0x0003735F, 0x00037369 }, - { kLolDscScaleWidthData, 0x00037369, 0x000373B1 }, - { kLolDscScaleHeightData, 0x000373B1, 0x000373F9 }, - { kLolDscX, 0x000373F9, 0x00037441 }, - { kLolDscY, 0x00037441, 0x00037465 }, - { kLolDscTileIndex, 0x00037465, 0x00037477 }, - { kLolDscUnk2, 0x00037477, 0x0003748E }, - { kLolDscDoorShapeIndex, 0x0003748E, 0x000374A5 }, - { kLolDscDimData1, 0x00036F03, 0x00037047 }, - { kLolDscDimData2, 0x00037047, 0x000372D0 }, - { kLolDscBlockMap, 0x00036E64, 0x00036E70 }, - { kLolDscDimMap, 0x00036E70, 0x00036E82 }, - { kLolDscDoorScale, 0x00036E82, 0x00036E92 }, - { kLolDscShapeOvlIndex, 0x00036E92, 0x00036EBA }, - { kLolDscDoor4, 0x00036EBA, 0x00036EC2 }, - { kLolDscBlockIndex, 0x00038B87, 0x00038BCF }, - { kLolDscDoor1, 0x0002C050, 0x0002C0D0 }, - { kLolDscDoorX, 0x00028630, 0x00028AB0 }, - { kLolDscDoorY, 0x00028AB0, 0x00028F30 }, - - { kLolScrollXTop, 0x0003C216, 0x0003C220 }, - { kLolScrollYTop, 0x0003C220, 0x0003C22A }, - { kLolScrollXBottom, 0x0003C22A, 0x0003C234 }, - { kLolScrollYBottom, 0x0003C234, 0x0003C23E }, - - { kLolButtonDefs, 0x000297F0, 0x0002A01A }, - { kLolButtonList1, 0x0002A020, 0x0002A070 }, - { kLolButtonList2, 0x0002A070, 0x0002A08E }, - { kLolButtonList3, 0x0002A090, 0x0002A094 }, - { kLolButtonList4, 0x0002A0A0, 0x0002A0BE }, - { kLolButtonList5, 0x0002A0C0, 0x0002A0E0 }, - { kLolButtonList6, 0x0002A0E0, 0x0002A0FC }, - { kLolButtonList7, 0x0002A100, 0x0002A106 }, - { kLolButtonList8, 0x0002A110, 0x0002A114 }, - - { kLolLegendData, 0x000374F0, 0x0003752C }, - { kLolMapCursorOvl, 0x0003752C, 0x00037545 }, - { kLolMapStringId, 0x00029140, 0x0002917C }, - - { kLolSpellbookAnim, 0x00038668, 0x000386A0 }, - { kLolSpellbookCoords, 0x000386A0, 0x000386B8 }, - { kLolHealShapeFrames, 0x0002A140, 0x0002A190 }, - { kLolLightningDefs, 0x00037B08, 0x00037B1C }, - { kLolFireballCoords, 0x0001E6E2, 0x0001E8E2 }, - - { -1, 0, 0 } -}; - -const Game lolDosFloppyGames[] = { - { kLol, EN_ANY, -1, "6b843869772c1b779e1386be868c15dd", lolFloppyFile2G }, - GAME_DUMMY_ENTRY -}; diff --git a/tools/create_kyradat/malcolm.h b/tools/create_kyradat/malcolm.h deleted file mode 100644 index 253d6e7b1c..0000000000 --- a/tools/create_kyradat/malcolm.h +++ /dev/null @@ -1,17 +0,0 @@ -const ExtractEntry kyra3cd[] = { - { k3MainMenuStrings, 0x0002D932, 0x0002D9E2 }, - { k3MusicFiles, 0x0003062C, 0x00030801 }, - { k3ScoreTable, 0x0002E4D0, 0x0002E598 }, - { k3SfxFiles, 0x0002E84E, 0x0002F10D }, - { k3SfxMap, 0x0002A590, 0x0002AA50 }, - { k3ItemAnimData, 0x00031614, 0x000317DC }, - { k3ItemMagicTable, 0x0002FB2A, 0x0002FB72 }, - { k3ItemStringMap, 0x0002D07A, 0x0002D0C2 }, - { -1, 0, 0 } -}; - -const Game kyra3Games[] = { - { kKyra3, EN_ANY, -1, "bf68701eb591d0b72219f314c0d32688", kyra3cd }, - GAME_DUMMY_ENTRY -}; - diff --git a/tools/create_kyradat/misc.h b/tools/create_kyradat/misc.h index 3c252f32a8..28a6303f83 100644 --- a/tools/create_kyradat/misc.h +++ b/tools/create_kyradat/misc.h @@ -202,7 +202,7 @@ const int kyra1DemoCDNeed[] = { -1 }; -const int kyra1TownsEngNeed[] = { +const int kyra1TownsNeed[] = { kKallakWritingSeq, kMalcolmTreeSeq, kWestwoodLogoSeq, @@ -293,32 +293,6 @@ const int kyra1TownsEngNeed[] = { -1 }; -const int kyra1TownsJapNeed[] = { - kIntroStrings, - kItemNames, - kTakenStrings, - kPlacedStrings, - kDroppedStrings, - kNoDropStrings, - kPutDownString, - kWaitAmuletString, - kBlackJewelString, - kHealingTipString, - kPoisonGoneString, - kThePoisonStrings, - kFluteStrings, - kWispJewelStrings, - kMagicJewelStrings, - kFlaskFullString, - kFullFlaskString, - kOutroHomeString, - kVeryCleverString, - kGUIStrings, - kNewGameString, - kConfigStrings, - -1 -}; - const int kyra1AmigaNeed[] = { kKallakWritingSeq, kMalcolmTreeSeq, @@ -374,7 +348,7 @@ const int kyra1AmigaNeed[] = { -1 }; -const int kyra2CDFile1EngNeed[] = { +const int kyra2CDFile1Need[] = { k2SeqplayPakFiles, k2SeqplayCredits, k2SeqplayCreditsSpecial, @@ -387,25 +361,7 @@ const int kyra2CDFile1EngNeed[] = { -1 }; -const int kyra2CDFile1FreNeed[] = { - k2SeqplayStrings, - k2SeqplayTlkFiles, - -1 -}; - -const int kyra2CDFile1GerNeed[] = { - k2SeqplayStrings, - k2SeqplayTlkFiles, - -1 -}; - -const int kyra2CDFile1ItaNeed[] = { - k2SeqplayStrings, - k2SeqplayTlkFiles, - -1 -}; - -const int kyra2CDFile2EngNeed[] = { +const int kyra2CDFile2Need[] = { k2IngameSfxFiles, k2IngameSfxIndex, k2IngameTracks, @@ -414,11 +370,13 @@ const int kyra2CDFile2EngNeed[] = { -1 }; -const int kyra2CDFile2FreNeed[] = { - -1 -}; - -const int kyra2CDFile2GerNeed[] = { +const int kyra2CDDemoNeed[] = { + k2IngameSfxFiles, + k2IngameSfxIndex, + k2IngameTracks, + k2IngameTalkObjIndex, + k2IngameItemAnimData, + k2IngameTlkDemoStrings, -1 }; @@ -442,7 +400,7 @@ const int kyra2FloppyFile2Need[] = { -1 }; -const int kyra2TownsFile1EngNeed[] = { +const int kyra2TownsFile1Need[] = { k2SeqplayPakFiles, k2SeqplayStrings, k2SeqplaySfxFiles, @@ -452,12 +410,7 @@ const int kyra2TownsFile1EngNeed[] = { -1 }; -const int kyra2TownsFile1JapNeed[] = { - k2SeqplayStrings, - -1 -}; - -const int kyra2TownsFile2EngNeed[] = { +const int kyra2TownsFile2Need[] = { k2IngamePakFiles, k2IngameSfxFilesTns, k2IngameSfxIndex, @@ -468,10 +421,6 @@ const int kyra2TownsFile2EngNeed[] = { -1 }; -const int kyra2TownsFile2JapNeed[] = { - -1 -}; - const int kyra2DemoNeed[] = { k2SeqplayPakFiles, k2SeqplaySeqData, @@ -581,7 +530,7 @@ const int lolFloppyNeed[] = { -1 }; -const int lolCDFile1ENeed[] = { +const int lolCDFile1Need[] = { kLolHistory, -1 }; @@ -680,36 +629,39 @@ const int lolDemoNeed[] = { const GameNeed gameNeedTable[] = { { kKyra1, -1, kyra1FloppyNeed }, { kKyra1, kTalkieVersion, kyra1CDNeed }, - { kKyra1, kFMTownsVersionE , kyra1TownsEngNeed }, - { kKyra1, kFMTownsVersionJ, kyra1TownsJapNeed }, + { kKyra1, kFMTownsVersionE , kyra1TownsNeed }, + { kKyra1, kFMTownsVersionJ, kyra1TownsNeed }, { kKyra1, kAmigaVersion, kyra1AmigaNeed }, { kKyra1, kDemoVersion, kyra1DemoNeed }, { kKyra1, kDemoCDVersion, kyra1DemoCDNeed }, { kKyra2, k2FloppyFile1, kyra2FloppyFile1Need }, { kKyra2, k2FloppyFile2, kyra2FloppyFile2Need }, - { kKyra2, k2CDFile1E, kyra2CDFile1EngNeed }, - { kKyra2, k2CDFile1F, kyra2CDFile1FreNeed }, - { kKyra2, k2CDFile1G, kyra2CDFile1GerNeed }, - { kKyra2, k2CDFile1I, kyra2CDFile1ItaNeed }, // Italian fan translation - { kKyra2, k2CDFile2E, kyra2CDFile2EngNeed }, - { kKyra2, k2CDFile2F, kyra2CDFile2FreNeed }, - { kKyra2, k2CDFile2G, kyra2CDFile2GerNeed }, - { kKyra2, k2TownsFile1E , kyra2TownsFile1EngNeed }, - { kKyra2, k2TownsFile1J, kyra2TownsFile1JapNeed }, - { kKyra2, k2TownsFile2E , kyra2TownsFile2EngNeed }, - { kKyra2, k2TownsFile2J, kyra2TownsFile2JapNeed }, - { kKyra2, k2DemoVersion, kyra2DemoNeed}, - { kKyra2, k2DemoVersionTlkE, kyra2TlkDemoNeed}, - { kKyra2, k2DemoVersionTlkF, kyra2TlkDemoNeed}, - { kKyra2, k2DemoVersionTlkG, kyra2TlkDemoNeed}, - { kLol, k2DemoLol, lolDemoNeed}, + { kKyra2, k2CDFile1E, kyra2CDFile1Need }, + { kKyra2, k2CDFile1F, kyra2CDFile1Need }, + { kKyra2, k2CDFile1G, kyra2CDFile1Need }, + { kKyra2, k2CDFile1I, kyra2CDFile1Need }, // Italian fan translation + { kKyra2, k2CDFile2E, kyra2CDFile2Need }, + { kKyra2, k2CDFile2F, kyra2CDFile2Need }, + { kKyra2, k2CDFile2G, kyra2CDFile2Need }, + { kKyra2, k2CDDemoE, kyra2CDDemoNeed }, + { kKyra2, k2CDDemoF, kyra2CDDemoNeed }, + { kKyra2, k2CDDemoG, kyra2CDDemoNeed }, + { kKyra2, k2TownsFile1E , kyra2TownsFile1Need }, + { kKyra2, k2TownsFile1J, kyra2TownsFile1Need }, + { kKyra2, k2TownsFile2E , kyra2TownsFile2Need }, + { kKyra2, k2TownsFile2J, kyra2TownsFile2Need }, + { kKyra2, k2DemoVersion, kyra2DemoNeed }, + { kKyra2, k2DemoVersionTlkE, kyra2TlkDemoNeed }, + { kKyra2, k2DemoVersionTlkF, kyra2TlkDemoNeed }, + { kKyra2, k2DemoVersionTlkG, kyra2TlkDemoNeed }, + { kLol, k2DemoLol, lolDemoNeed }, { kKyra3, -1, kyra3Need }, { kLol, -1, lolFloppyNeed }, - { kLol, kLolCD, lolCDFile1ENeed }, - { kLol, kLolCD, lolCDFile2Need }, + { kLol, kLolCD1, lolCDFile1Need }, + { kLol, kLolCD2, lolCDFile2Need }, { -1, -1, 0 } }; @@ -729,6 +681,9 @@ const SpecialExtension specialTable[] = { { k2CDFile2E, "CD" }, { k2CDFile2F, "CD" }, { k2CDFile2G, "CD" }, + { k2CDDemoE, "CD" }, + { k2CDDemoF, "CD" }, + { k2CDDemoG, "CD" }, { k2TownsFile1E, "TNS" }, { k2TownsFile1J, "TNS" }, @@ -737,7 +692,8 @@ const SpecialExtension specialTable[] = { { k2DemoVersion, "DEM" }, { k2DemoLol, "DEM" }, - { kLolCD, "CD" }, + { kLolCD1, "CD" }, + { kLolCD2, "CD" }, { -1, 0 } }; @@ -751,3 +707,85 @@ const Language languageTable[] = { { JA_JPN, "JPN" }, { -1, 0 } }; + +const Game kyra1Games[] = { + // Demos + { kKyra1, EN_ANY, kDemoVersion, "7b7504c8560ffc914d34c44c71b3094c" }, + { kKyra1, EN_ANY, kDemoCDVersion, "226fdba99cb11ef1047131d9a50e6292" }, + + // Amiga + { kKyra1, EN_ANY, kAmigaVersion, "b620564b6b7e0787b053ca9e35bd9f52" }, + + // Floppy + { kKyra1, EN_ANY, -1, "76a4fc84e173cadb6369785787e1546e" }, + { kKyra1, DE_DEU, -1, "9442d6f7db6a41f3dd4aa4de5d36e107" }, + { kKyra1, FR_FRA, -1, "aa9d6d78d8b199deaf48efeca6d19af2" }, + { kKyra1, IT_ITA, -1, "5d7550306b369a3492f9f3402702477c" }, + { kKyra1, ES_ESP, -1, "9ff130d2558bcd674d4074849d93c362" }, + + // Talkie + { kKyra1, EN_ANY, kTalkieVersion, "1ebc18f3e7fbb72474a55cb0fa089ed4" }, + { kKyra1, DE_DEU, kTalkieVersion, "c65d381184f98ac26d9efd2d45baef51" }, + { kKyra1, FR_FRA, kTalkieVersion, "307c5d4a554d9068ac3d326e350ae4a6" }, + { kKyra1, IT_ITA, kTalkieVersion, "d0f1752098236083d81b9497bd2b6989" }, // Italian fan translation + + // FM-TOWNS + { kKyra1, EN_ANY, kFMTownsVersionE, "5a3ad60ccd0f2e29463e0368cd14a60d" }, + { kKyra1, JA_JPN, kFMTownsVersionJ, "5a3ad60ccd0f2e29463e0368cd14a60d" }, + + GAME_DUMMY_ENTRY +}; + +const Game kyra2Games[] = { + // demos + { kKyra2, EN_ANY, k2DemoVersion, "a620a37579dd44ab0403482285e3897f" }, + { kKyra2, EN_ANY, k2CDDemoE, "fa54d8abfe05f9186c05f7de7eaf1480" }, + { kKyra2, FR_FRA, k2CDDemoF, "fa54d8abfe05f9186c05f7de7eaf1480" }, + { kKyra2, DE_DEU, k2CDDemoG, "fa54d8abfe05f9186c05f7de7eaf1480" }, + + // floppy games + { kKyra2, EN_ANY, k2FloppyFile1, "9b0f5e57b5a2ed88b5b989cbb402b6c7" }, + { kKyra2, FR_FRA, k2FloppyFile1, "df31cc9e37e1cf68df2fdc75ddf2d87b" }, + { kKyra2, DE_DEU, k2FloppyFile1, "0ca4f9a1438264a4c63c3218e064ed3b" }, + { kKyra2, IT_ITA, k2FloppyFile1, "178d3ab913f61bfba21d2fb196405e8c" }, + { kKyra2, EN_ANY, k2FloppyFile2, "7c3eadbe5122722cf2e5e1611e19dfb9" }, + { kKyra2, FR_FRA, k2FloppyFile2, "fc2c6782778e6c6d5a553d1cb73c98ad" }, + { kKyra2, DE_DEU, k2FloppyFile2, "0d9b0eb7b0ad889ec942d74d80dde1bf" }, + { kKyra2, IT_ITA, k2FloppyFile2, "3a61ed6b7c00ddae383a0361799e2ba6" }, + + // talkie games + { kKyra2, EN_ANY, k2CDFile1E, "85bbc1cc6c4cef6ad31fc6ee79518efb" }, + { kKyra2, FR_FRA, k2CDFile1F, "85bbc1cc6c4cef6ad31fc6ee79518efb" }, + { kKyra2, DE_DEU, k2CDFile1G, "85bbc1cc6c4cef6ad31fc6ee79518efb" }, + { kKyra2, EN_ANY, k2CDFile2E, "e20d0d2e500f01e399ec588247a7e213" }, + { kKyra2, FR_FRA, k2CDFile2F, "e20d0d2e500f01e399ec588247a7e213" }, + { kKyra2, DE_DEU, k2CDFile2G, "e20d0d2e500f01e399ec588247a7e213" }, + { kKyra2, IT_ITA, k2CDFile1I, "130795aa8f2333250c895dae9028b9bb" }, // Italian Fan Translation (using same offsets as English) + + // FM-TOWNS games + { kKyra2, EN_ANY, k2TownsFile1E, "74f50d79c919cc8e7196c24942ce43d7" }, + { kKyra2, JA_JPN, k2TownsFile1J, "74f50d79c919cc8e7196c24942ce43d7" }, + { kKyra2, EN_ANY, k2TownsFile2E, "a9a7fd4f05d00090e9e8bda073e6d431" }, + { kKyra2, JA_JPN, k2TownsFile2J, "a9a7fd4f05d00090e9e8bda073e6d431" }, + + GAME_DUMMY_ENTRY +}; + +const Game kyra3Games[] = { + { kKyra3, EN_ANY, -1, "bf68701eb591d0b72219f314c0d32688" }, + GAME_DUMMY_ENTRY +}; + +const Game lolGames[] = { + // DOS demo + { kLol, EN_ANY, k2DemoLol, "30bb5af87d38adb47d3e6ce06b1cb042" }, + + // DOS floppy + { kLol, EN_ANY, -1, "6b843869772c1b779e1386be868c15dd" }, + + // DOS CD + { kLol, EN_ANY, kLolCD1, "9d1778314de80598c0b0d032e2a1a1cf" }, + { kLol, EN_ANY, kLolCD2, "263998ec600afca1cc7b935c473df670" }, + + GAME_DUMMY_ENTRY +}; diff --git a/tools/create_kyradat/module.mk b/tools/create_kyradat/module.mk index 557871ce4a..b5bd955b88 100644 --- a/tools/create_kyradat/module.mk +++ b/tools/create_kyradat/module.mk @@ -7,7 +7,8 @@ MODULE_OBJS := \ create_kyradat.o \ pak.o \ md5.o \ - util.o + util.o \ + search.o # Set the name of the executable TOOL_EXECUTABLE := create_kyradat diff --git a/tools/create_kyradat/providers.h b/tools/create_kyradat/providers.h new file mode 100644 index 0000000000..593a9d316e --- /dev/null +++ b/tools/create_kyradat/providers.h @@ -0,0 +1,201 @@ +const ExtractEntry extractProviders[] = { + { kForestSeq, kForestSeqProvider }, + { kKallakWritingSeq, kKallakWritingSeqProvider }, + { kKyrandiaLogoSeq, kKyrandiaLogoSeqProvider }, + { kKallakMalcolmSeq, kKallakMalcolmSeqProvider }, + { kMalcolmTreeSeq, kMalcolmTreeSeqProvider }, + { kWestwoodLogoSeq, kWestwoodLogoSeqProvider }, + { kDemo1Seq, kDemo1SeqProvider }, + { kDemo2Seq, kDemo2SeqProvider }, + { kDemo3Seq, kDemo3SeqProvider }, + { kDemo4Seq, kDemo4SeqProvider }, + { kAmuleteAnimSeq, kAmuleteAnimSeqProvider }, + { kOutroReunionSeq, kOutroReunionSeqProvider }, + { kIntroCPSStrings, kIntroCPSStringsProvider }, + { kIntroCOLStrings, kIntroCOLStringsProvider }, + { kIntroWSAStrings, kIntroWSAStringsProvider }, + { kIntroStrings, kIntroStringsProvider }, + { kOutroHomeString, kOutroHomeStringProvider }, + { kRoomFilenames, kRoomFilenamesProvider }, + { kRoomList, kRoomListProvider }, + { kCharacterImageFilenames, kCharacterImageFilenamesProvider }, + { kAudioTracks, kAudioTracksProvider }, + { kAudioTracksIntro, kAudioTracksIntroProvider }, + { kItemNames, kItemNamesProvider }, + { kTakenStrings, kTakenStringsProvider }, + { kPlacedStrings, kPlacedStringsProvider }, + { kDroppedStrings, kDroppedStringsProvider }, + { kNoDropStrings, kNoDropStringsProvider }, + { kPutDownString, kPutDownStringProvider }, + { kWaitAmuletString, kWaitAmuletStringProvider }, + { kBlackJewelString, kBlackJewelStringProvider }, + { kPoisonGoneString, kPoisonGoneStringProvider }, + { kHealingTipString, kHealingTipStringProvider }, + { kWispJewelStrings, kWispJewelStringsProvider }, + { kMagicJewelStrings, kMagicJewelStringsProvider }, + { kThePoisonStrings, kThePoisonStringsProvider }, + { kFluteStrings, kFluteStringsProvider }, + { kFlaskFullString, kFlaskFullStringProvider }, + { kFullFlaskString, kFullFlaskStringProvider }, + { kVeryCleverString, kVeryCleverStringProvider }, + { kNewGameString, kNewGameStringProvider }, + { kDefaultShapes, kDefaultShapesProvider }, + { kHealing1Shapes, kHealing1ShapesProvider }, + { kHealing2Shapes, kHealing2ShapesProvider }, + { kPoisonDeathShapes, kPoisonDeathShapesProvider }, + { kFluteShapes, kFluteShapesProvider }, + { kWinter1Shapes, kWinter1ShapesProvider }, + { kWinter2Shapes, kWinter2ShapesProvider }, + { kWinter3Shapes, kWinter3ShapesProvider }, + { kDrinkShapes, kDrinkShapesProvider }, + { kWispShapes, kWispShapesProvider }, + { kMagicAnimShapes, kMagicAnimShapesProvider }, + { kBranStoneShapes, kBranStoneShapesProvider }, + { kPaletteList1, kPaletteList1Provider }, + { kPaletteList2, kPaletteList2Provider }, + { kPaletteList3, kPaletteList3Provider }, + { kPaletteList4, kPaletteList4Provider }, + { kPaletteList5, kPaletteList5Provider }, + { kPaletteList6, kPaletteList6Provider }, + { kPaletteList7, kPaletteList7Provider }, + { kPaletteList8, kPaletteList8Provider }, + { kPaletteList9, kPaletteList9Provider }, + { kPaletteList10, kPaletteList10Provider }, + { kPaletteList11, kPaletteList11Provider }, + { kPaletteList12, kPaletteList12Provider }, + { kPaletteList13, kPaletteList13Provider }, + { kPaletteList14, kPaletteList14Provider }, + { kPaletteList15, kPaletteList15Provider }, + { kPaletteList16, kPaletteList16Provider }, + { kPaletteList17, kPaletteList17Provider }, + { kPaletteList18, kPaletteList18Provider }, + { kPaletteList19, kPaletteList19Provider }, + { kPaletteList20, kPaletteList20Provider }, + { kPaletteList21, kPaletteList21Provider }, + { kPaletteList22, kPaletteList22Provider }, + { kPaletteList23, kPaletteList23Provider }, + { kPaletteList24, kPaletteList24Provider }, + { kPaletteList25, kPaletteList25Provider }, + { kPaletteList26, kPaletteList26Provider }, + { kPaletteList27, kPaletteList27Provider }, + { kPaletteList28, kPaletteList28Provider }, + { kPaletteList29, kPaletteList29Provider }, + { kPaletteList30, kPaletteList30Provider }, + { kPaletteList31, kPaletteList31Provider }, + { kPaletteList32, kPaletteList32Provider }, + { kPaletteList33, kPaletteList33Provider }, + { kGUIStrings, kGUIStringsProvider }, + { kConfigStrings, kConfigStringsProvider }, + { kKyra1TownsSFXwdTable, kKyra1TownsSFXwdTableProvider }, + { kKyra1TownsSFXbtTable, kKyra1TownsSFXbtTableProvider }, + { kKyra1TownsCDATable, kKyra1TownsCDATableProvider }, + { kCreditsStrings, kCreditsStringsProvider }, + { kAmigaIntroSFXTable, kAmigaIntroSFXTableProvider }, + { kAmigaGameSFXTable, kAmigaGameSFXTableProvider }, + { k2SeqplayPakFiles, k2SeqplayPakFilesProvider }, + { k2SeqplayStrings, k2SeqplayStringsProvider }, + { k2SeqplaySfxFiles, k2SeqplaySfxFilesProvider }, + { k2SeqplayTlkFiles, k2SeqplayTlkFilesProvider }, + { k2SeqplaySeqData, k2SeqplaySeqDataProvider }, + { k2SeqplayCredits, k2SeqplayCreditsProvider }, + { k2SeqplayCreditsSpecial, k2SeqplayCreditsSpecialProvider }, + { k2SeqplayIntroTracks, k2SeqplayIntroTracksProvider }, + { k2SeqplayFinaleTracks, k2SeqplayFinaleTracksProvider }, + { k2SeqplayIntroCDA, k2SeqplayIntroCDAProvider }, + { k2SeqplayFinaleCDA, k2SeqplayFinaleCDAProvider }, + { k2SeqplayShapeAnimData, k2SeqplayShapeAnimDataProvider }, + { k2IngamePakFiles, k2IngamePakFilesProvider }, + { k2IngameSfxFiles, k2IngameSfxFilesProvider }, + { k2IngameSfxFilesTns, k2IngameSfxFilesTnsProvider }, + { k2IngameSfxIndex, k2IngameSfxIndexProvider }, + { k2IngameTracks, k2IngameTracksProvider }, + { k2IngameCDA, k2IngameCDAProvider }, + { k2IngameTalkObjIndex, k2IngameTalkObjIndexProvider }, + { k2IngameTimJpStrings, k2IngameTimJpStringsProvider }, + { k2IngameItemAnimData, k2IngameItemAnimDataProvider }, + { k2IngameTlkDemoStrings, k2IngameTlkDemoStringsProvider }, + { k3MainMenuStrings, k3MainMenuStringsProvider }, + { k3MusicFiles, k3MusicFilesProvider }, + { k3ScoreTable, k3ScoreTableProvider }, + { k3SfxFiles, k3SfxFilesProvider }, + { k3SfxMap, k3SfxMapProvider }, + { k3ItemAnimData, k3ItemAnimDataProvider }, + { k3ItemMagicTable, k3ItemMagicTableProvider }, + { k3ItemStringMap, k3ItemStringMapProvider }, + { kLolSeqplayIntroTracks, kLolSeqplayIntroTracksProvider }, + { kLolIngamePakFiles, kLolIngamePakFilesProvider }, + { kLolCharacterDefs, kLolCharacterDefsProvider }, + { kLolIngameSfxFiles, kLolIngameSfxFilesProvider }, + { kLolIngameSfxIndex, kLolIngameSfxIndexProvider }, + { kLolMusicTrackMap, kLolMusicTrackMapProvider }, + { kLolGMSfxIndex, kLolGMSfxIndexProvider }, + { kLolMT32SfxIndex, kLolMT32SfxIndexProvider }, + { kLolSpellProperties, kLolSpellPropertiesProvider }, + { kLolGameShapeMap, kLolGameShapeMapProvider }, + { kLolSceneItemOffs, kLolSceneItemOffsProvider }, + { kLolCharInvIndex, kLolCharInvIndexProvider }, + { kLolCharInvDefs, kLolCharInvDefsProvider }, + { kLolCharDefsMan, kLolCharDefsManProvider }, + { kLolCharDefsWoman, kLolCharDefsWomanProvider }, + { kLolCharDefsKieran, kLolCharDefsKieranProvider }, + { kLolCharDefsAkshel, kLolCharDefsAkshelProvider }, + { kLolExpRequirements, kLolExpRequirementsProvider }, + { kLolMonsterModifiers, kLolMonsterModifiersProvider }, + { kLolMonsterLevelOffsets, kLolMonsterLevelOffsetsProvider }, + { kLolMonsterDirFlags, kLolMonsterDirFlagsProvider }, + { kLolMonsterScaleY, kLolMonsterScaleYProvider }, + { kLolMonsterScaleX, kLolMonsterScaleXProvider }, + { kLolMonsterScaleWH, kLolMonsterScaleWHProvider }, + { kLolFlyingItemShp, kLolFlyingItemShpProvider }, + { kLolInventoryDesc, kLolInventoryDescProvider }, + { kLolLevelShpList, kLolLevelShpListProvider }, + { kLolLevelDatList, kLolLevelDatListProvider }, + { kLolCompassDefs, kLolCompassDefsProvider }, + { kLolItemPrices, kLolItemPricesProvider }, + { kLolStashSetup, kLolStashSetupProvider }, + { kLolDscUnk1, kLolDscUnk1Provider }, + { kLolDscShapeIndex1, kLolDscShapeIndex1Provider }, + { kLolDscShapeIndex2, kLolDscShapeIndex2Provider }, + { kLolDscScaleWidthData, kLolDscScaleWidthDataProvider }, + { kLolDscScaleHeightData, kLolDscScaleHeightDataProvider }, + { kLolDscX, kLolDscXProvider }, + { kLolDscY, kLolDscYProvider }, + { kLolDscTileIndex, kLolDscTileIndexProvider }, + { kLolDscUnk2, kLolDscUnk2Provider }, + { kLolDscDoorShapeIndex, kLolDscDoorShapeIndexProvider }, + { kLolDscDimData1, kLolDscDimData1Provider }, + { kLolDscDimData2, kLolDscDimData2Provider }, + { kLolDscBlockMap, kLolDscBlockMapProvider }, + { kLolDscDimMap, kLolDscDimMapProvider }, + { kLolDscShapeOvlIndex, kLolDscShapeOvlIndexProvider }, + { kLolDscBlockIndex, kLolDscBlockIndexProvider }, + { kLolDscDoor1, kLolDscDoor1Provider }, + { kLolDscDoorScale, kLolDscDoorScaleProvider }, + { kLolDscDoor4, kLolDscDoor4Provider }, + { kLolDscDoorX, kLolDscDoorXProvider }, + { kLolDscDoorY, kLolDscDoorYProvider }, + { kLolScrollXTop, kLolScrollXTopProvider }, + { kLolScrollYTop, kLolScrollYTopProvider }, + { kLolScrollXBottom, kLolScrollXBottomProvider }, + { kLolScrollYBottom, kLolScrollYBottomProvider }, + { kLolButtonDefs, kLolButtonDefsProvider }, + { kLolButtonList1, kLolButtonList1Provider }, + { kLolButtonList2, kLolButtonList2Provider }, + { kLolButtonList3, kLolButtonList3Provider }, + { kLolButtonList4, kLolButtonList4Provider }, + { kLolButtonList5, kLolButtonList5Provider }, + { kLolButtonList6, kLolButtonList6Provider }, + { kLolButtonList7, kLolButtonList7Provider }, + { kLolButtonList8, kLolButtonList8Provider }, + { kLolLegendData, kLolLegendDataProvider }, + { kLolMapCursorOvl, kLolMapCursorOvlProvider }, + { kLolMapStringId, kLolMapStringIdProvider }, + { kLolSpellbookAnim, kLolSpellbookAnimProvider }, + { kLolSpellbookCoords, kLolSpellbookCoordsProvider }, + { kLolHealShapeFrames, kLolHealShapeFramesProvider }, + { kLolLightningDefs, kLolLightningDefsProvider }, + { kLolFireballCoords, kLolFireballCoordsProvider }, + { kLolHistory, kLolHistoryProvider }, + { -1, NULL } +}; + diff --git a/tools/create_kyradat/search.cpp b/tools/create_kyradat/search.cpp new file mode 100644 index 0000000000..a12eb231ef --- /dev/null +++ b/tools/create_kyradat/search.cpp @@ -0,0 +1,195 @@ +#include "search.h" +#include "md5.h" + +#include <algorithm> +#include <cassert> + +Hasher::Hash Hasher::createHash(const byte *data, uint32 size) { + md5_context ctx; + md5_starts(&ctx); + md5_update(&ctx, data, size); + + Hash hash; + md5_finish(&ctx, hash.digest); + return hash; +} + +SearchData SearchCreator::create(const char *filename) { + FILE *f = fopen(filename, "rb"); + assert(f); + + SearchData data; + data.size = fileSize(f); + + byte *buffer = new byte[data.size]; + fread(buffer, 1, data.size, f); + fclose(f); + + data = create(buffer, data.size); + delete[] buffer; + + return data; +} + +SearchData SearchCreator::create(const byte *buffer, uint32 size) { + SearchData data; + + data.size = size; + data.hash = Hasher::createHash(buffer, data.size); + data.byteSum = 0; + + for (uint32 i = 0; i < data.size; ++i) + data.byteSum += buffer[i]; + + return data; +} + +SumCreator::SumCreator(InputList list, const DataInput &input) : _curOffset(0), _input(input), _sums() { + // Sort in ascending order + list.sort(std::less<uint32>()); + + uint32 byteSum = 0; + uint32 oldSize = 0; + + for (InputList::const_iterator i = list.begin(); i != list.end(); ++i) { + // Strip out entries, which exceed the buffer size + if (*i > _input.size()) + continue; + + // Strip out duplicates + if (_sums.find(*i) != _sums.end()) + continue; + + // Only add the bytes exceeding the old sum's size + // to the sum. This saves a few accesses. + for (uint32 j = oldSize; j < *i; ++j) + byteSum += _input[j]; + + _sums[*i] = byteSum; + + // Save this sum's size + oldSize = *i; + } +} + +bool SumCreator::nextByte() { + // Calculate the bytes available for summing. We need to add + // 1 here, since we will only update the offset AFTER everything + // is done. + const uint32 sizeLeft = _input.size() - (_curOffset + 1); + + if (!sizeLeft) { + _sums.clear(); + return false; + } + + // Grab the old first byte. + const byte firstByte = _input[_curOffset]; + + typedef std::list<uint32> DeletionList; + DeletionList toRemove; + + for (SumMap::iterator i = _sums.begin(); i != _sums.end(); ++i) { + // If this entry needs to sum up a larger buffer than the buffer + // size left, we will remove the entry and continue to the next + // one. + if (i->first > sizeLeft) { + // Add the current entry to the removal list. + toRemove.push_back(i->first); + continue; + } + + // Update the byte sum. First we remove the old first byte + // from the sum, next we add the next available byte. + i->second -= firstByte; + i->second += _input[_curOffset + i->first]; + } + + // Remove all entries flagged for removal + for (DeletionList::const_iterator i = toRemove.begin(); i != toRemove.end(); ++i) + _sums.erase(*i); + + // Update out offset. + ++_curOffset; + + // We return whether there are still some sums left available. + return !_sums.empty(); +} + +bool SumCreator::hasSum(uint32 size) const { + return _sums.find(size) != _sums.end(); +} + +uint32 SumCreator::getSum(uint32 size) const { + SumMap::const_iterator s = _sums.find(size); + + if (s == _sums.end()) + return 0; + + return s->second; +} + +Search::Search(const char *filename) : _data(), _search() { + FILE *src = fopen(filename, "rb"); + assert(src); + + uint32 size = fileSize(src); + byte *data = new byte[size]; + fread(data, 1, size, src); + fclose(src); + + _data.resize(size); + for (uint32 i = 0; i < size; ++i) + _data[i] = data[i]; + delete[] data; +} + +Search::Search(const byte *data, uint32 size) : _data(), _search() { + _data.resize(size); + for (uint32 i = 0; i < size; ++i) + _data[i] = data[i]; +} + +void Search::addData(SearchData data) { + for (SearchList::const_iterator i = _search.begin(); i != _search.end(); ++i) { + // Do not add any duplicates + if (*i == data) + return; + } + + _search.push_back(data); +} + +bool Search::search(ResultList &res) { + SumCreator::InputList list; + for (SearchList::const_iterator i = _search.begin(); i != _search.end(); ++i) + list.push_back(i->size); + + SumCreator sum(list, _data); + list.clear(); + + do { + const uint32 offset = sum.getOffset(); + + for (SearchList::iterator i = _search.begin(); i != _search.end(); ) { + if (!sum.hasSum(i->size)) { + i = _search.erase(i); + continue; + } + + const uint32 byteSum = sum.getSum(i->size); + if (byteSum == i->byteSum) { + if (Hasher::createHash(&_data[offset], i->size) == i->hash) { + res.push_back(ResultData(*i, offset)); + i = _search.erase(i); + continue; + } + } + + ++i; + } + } while (sum.nextByte()); + + return !res.empty(); +} + diff --git a/tools/create_kyradat/search.h b/tools/create_kyradat/search.h new file mode 100644 index 0000000000..8ec8c7017e --- /dev/null +++ b/tools/create_kyradat/search.h @@ -0,0 +1,97 @@ +#ifndef SEARCH_H +#define SEARCH_H + +#include "util.h" + +#include <list> +#include <map> +#include <vector> +#include <cstring> + +class Hasher { +public: + struct Hash { + uint8 digest[16]; + + bool operator==(const Hash &r) const { + return !std::memcmp(digest, r.digest, sizeof(digest)); + } + + bool operator<(const Hash &r) const { + return std::memcmp(digest, r.digest, sizeof(digest)) < 0; + } + }; + + static Hash createHash(const byte *data, uint32 size); +}; + +struct SearchData { + uint32 size; + + uint32 byteSum; + Hasher::Hash hash; + + bool operator==(const SearchData &r) const { + return (size == r.size && byteSum == r.byteSum && hash == r.hash); + } + + bool operator<(const SearchData &r) const { + return (size < r.size && byteSum < r.byteSum && hash < r.hash); + } +}; + +class SearchCreator { +public: + static SearchData create(const char *filename); + static SearchData create(const byte *buffer, uint32 size); +}; + +class SumCreator { +public: + typedef std::list<uint32> InputList; + typedef std::vector<byte> DataInput; + + SumCreator(InputList list, const DataInput &input); + + bool nextByte(); + + uint32 getOffset() const { return _curOffset; } + + bool hasSum(uint32 size) const; + uint32 getSum(uint32 size) const; +private: + uint32 _curOffset; + DataInput _input; + + typedef std::map<uint32, uint32> SumMap; + SumMap _sums; + typedef std::map<uint32, uint> SumCount; + SumCount _sumCount; +}; + +class Search { +public: + Search(const char *filename); + Search(const byte *data, uint32 size); + + void addData(SearchData data); + + struct ResultData { + SearchData data; + uint32 offset; + + ResultData() : data(), offset() {} + ResultData(SearchData d, uint32 o) : data(d), offset(o) {} + }; + + typedef std::list<ResultData> ResultList; + bool search(ResultList &res); +private: + SumCreator::DataInput _data; + + typedef std::list<SearchData> SearchList; + SearchList _search; +}; + +#endif + diff --git a/tools/create_kyradat/tables.h b/tools/create_kyradat/tables.h new file mode 100644 index 0000000000..d337c1ed92 --- /dev/null +++ b/tools/create_kyradat/tables.h @@ -0,0 +1,1261 @@ +const ExtractEntrySearchData kForestSeqProvider[] = { + { -1, { 0x000002DE, 0x00003946, { { 0x85, 0x79, 0xDC, 0xB8, 0x62, 0xAD, 0xD6, 0x01, 0xA5, 0x66, 0x6B, 0xC4, 0x61, 0xCA, 0x82, 0xF5 } } } }, + { -1, { 0x00000273, 0x00001D80, { { 0x18, 0x32, 0xB7, 0xFB, 0xD8, 0x1A, 0x6D, 0x83, 0x75, 0xF5, 0x2B, 0xF7, 0xC0, 0xFD, 0x85, 0xEF } } } }, + { -1, { 0x00000195, 0x00001455, { { 0x86, 0xC2, 0x45, 0xEB, 0x16, 0x8A, 0x44, 0x73, 0xB4, 0x59, 0x13, 0x9B, 0x85, 0x40, 0x82, 0x81 } } } }, + { -1, { 0x00000196, 0x00001468, { { 0x06, 0x8D, 0xC1, 0x9B, 0xBC, 0x28, 0xE8, 0x36, 0x43, 0x67, 0x34, 0xAA, 0x78, 0xB9, 0xCB, 0x72 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kKallakWritingSeqProvider[] = { + { -1, { 0x000007F4, 0x00006DAD, { { 0x84, 0x9D, 0x82, 0xD2, 0x4E, 0x8B, 0xE2, 0x86, 0x82, 0x5E, 0xE7, 0x2C, 0x7A, 0xD6, 0xFE, 0x19 } } } }, + { -1, { 0x00000805, 0x0000719E, { { 0xA2, 0xFE, 0x0A, 0xAA, 0xD9, 0x43, 0x5A, 0xBE, 0x56, 0x38, 0x73, 0x42, 0xAC, 0xA9, 0x1B, 0x01 } } } }, + { -1, { 0x000007F5, 0x00006DCD, { { 0x0E, 0x0A, 0x75, 0xA5, 0x71, 0x5A, 0xC6, 0x32, 0x52, 0x7F, 0xEC, 0x2B, 0x0B, 0xF2, 0x22, 0xE6 } } } }, + { -1, { 0x000007F7, 0x00006E23, { { 0x97, 0x8C, 0x63, 0x8D, 0x91, 0x68, 0xA5, 0x63, 0x55, 0x43, 0xE7, 0xE0, 0x12, 0xF9, 0x80, 0xA4 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kKyrandiaLogoSeqProvider[] = { + { -1, { 0x0000005C, 0x000003D3, { { 0x75, 0xC5, 0x55, 0x54, 0x00, 0xD7, 0xE9, 0x26, 0x0F, 0x01, 0xB1, 0xB7, 0xA9, 0x29, 0xF7, 0x69 } } } }, + { -1, { 0x000000A6, 0x00000A09, { { 0x70, 0x6E, 0x74, 0xBB, 0xD7, 0x09, 0x05, 0xDD, 0xA3, 0x09, 0x96, 0x40, 0xBD, 0x01, 0x19, 0x05 } } } }, + { -1, { 0x00000054, 0x00000300, { { 0x4E, 0xAD, 0xD0, 0x73, 0xD2, 0x3C, 0xF6, 0x6B, 0x65, 0x23, 0xA2, 0x30, 0xD6, 0xEE, 0x1C, 0x13 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kKallakMalcolmSeqProvider[] = { + { -1, { 0x0000027B, 0x0000220A, { { 0xB7, 0xC1, 0x57, 0x04, 0x9B, 0x67, 0x82, 0x7B, 0x6E, 0xFD, 0x59, 0xF2, 0x10, 0x93, 0x89, 0x12 } } } }, + { -1, { 0x000002B8, 0x0000280B, { { 0x98, 0xC8, 0x36, 0x8C, 0xF8, 0x92, 0xC2, 0xB9, 0x1B, 0x71, 0x6B, 0x4C, 0xA4, 0x6C, 0xF6, 0x30 } } } }, + { -1, { 0x0000026B, 0x00002132, { { 0x51, 0x07, 0x32, 0xA2, 0x09, 0x47, 0x97, 0x02, 0x85, 0x31, 0x39, 0x93, 0x3A, 0x53, 0x47, 0xA5 } } } }, + { -1, { 0x0000026D, 0x00002188, { { 0x7E, 0x3B, 0x06, 0x69, 0x11, 0x59, 0xBE, 0x42, 0xCB, 0x33, 0x9C, 0x15, 0xCF, 0x61, 0xF6, 0xB0 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kMalcolmTreeSeqProvider[] = { + { -1, { 0x00000214, 0x000014C4, { { 0xA2, 0x60, 0x16, 0x14, 0x20, 0xE4, 0x8D, 0x89, 0xC4, 0x30, 0x07, 0x21, 0xC9, 0x26, 0xA6, 0x84 } } } }, + { -1, { 0x00000230, 0x0000192A, { { 0x28, 0xCC, 0x89, 0x40, 0x8A, 0xF7, 0xCB, 0xC0, 0x11, 0x8F, 0x0F, 0xE5, 0x5F, 0x24, 0x2D, 0x32 } } } }, + { -1, { 0x00000216, 0x000014FB, { { 0xBA, 0x6F, 0x63, 0xD5, 0x44, 0xCE, 0xE8, 0x20, 0xD4, 0x4C, 0x06, 0x58, 0x21, 0x8E, 0x07, 0x8B } } } }, + { -1, { 0x00000218, 0x00001551, { { 0x30, 0x42, 0xD3, 0x7D, 0x6B, 0x43, 0x3B, 0xC7, 0x63, 0x56, 0x7D, 0x12, 0xE0, 0x53, 0x41, 0x48 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kWestwoodLogoSeqProvider[] = { + { -1, { 0x0000004D, 0x00000319, { { 0xE9, 0x5D, 0xD4, 0x60, 0x4E, 0xA6, 0x92, 0x30, 0x9C, 0x77, 0x99, 0xBC, 0xB1, 0x97, 0xFB, 0xBD } } } }, + { -1, { 0x0000004B, 0x0000032A, { { 0x9A, 0x54, 0x6F, 0x6C, 0x70, 0xD1, 0x02, 0x94, 0xD1, 0xA1, 0xA7, 0xBE, 0x1B, 0x10, 0xBD, 0x2F } } } }, + { -1, { 0x00000044, 0x00000243, { { 0x00, 0x11, 0x10, 0x64, 0x60, 0xE8, 0xB5, 0x59, 0x00, 0x60, 0xF5, 0x10, 0xB5, 0x63, 0x9D, 0x55 } } } }, + { -1, { 0x0000004B, 0x000002FE, { { 0x6E, 0xDA, 0x5D, 0x1E, 0xF4, 0x38, 0xAE, 0x7A, 0x9F, 0xBC, 0x00, 0x7C, 0x77, 0x9D, 0x03, 0xAF } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kDemo1SeqProvider[] = { + { -1, { 0x00000026, 0x0000016E, { { 0x61, 0xF2, 0x84, 0x42, 0x89, 0x6E, 0xB8, 0x0D, 0x01, 0xB7, 0xE4, 0x49, 0xA1, 0x72, 0xDC, 0x66 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kDemo2SeqProvider[] = { + { -1, { 0x00000023, 0x00000151, { { 0xE7, 0x9F, 0xA7, 0x80, 0xE3, 0xC1, 0x63, 0xF2, 0x3F, 0x7B, 0x64, 0xD9, 0x70, 0x3A, 0xF1, 0x55 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kDemo3SeqProvider[] = { + { -1, { 0x00000059, 0x000001A8, { { 0x9E, 0x90, 0x4F, 0x9E, 0xBC, 0x39, 0x37, 0xD1, 0x10, 0x67, 0x8C, 0xE5, 0x84, 0xFD, 0xD9, 0x7C } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kDemo4SeqProvider[] = { + { -1, { 0x00000020, 0x0000013E, { { 0xB7, 0x67, 0x1D, 0x50, 0x11, 0xD0, 0x16, 0x91, 0x40, 0x40, 0xD1, 0xC0, 0xA0, 0x79, 0x3D, 0xCE } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kAmuleteAnimSeqProvider[] = { + { -1, { 0x0000002A, 0x0000025D, { { 0xB1, 0x59, 0x3C, 0x9A, 0x61, 0xC0, 0x1D, 0x80, 0xB5, 0x0C, 0x2E, 0xF9, 0xF6, 0x36, 0xED, 0x7D } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kOutroReunionSeqProvider[] = { + { -1, { 0x0000054A, 0x0000785F, { { 0x55, 0xEA, 0xB8, 0x7F, 0x3A, 0x86, 0xCD, 0xA6, 0xBC, 0xA7, 0x9A, 0x39, 0xED, 0xF5, 0x30, 0x0A } } } }, + { -1, { 0x000005E5, 0x00008918, { { 0x6A, 0x33, 0x8C, 0xB0, 0x16, 0x57, 0x2D, 0xEB, 0xB2, 0xE1, 0x64, 0x80, 0x98, 0x99, 0x98, 0x19 } } } }, + { -1, { 0x00000547, 0x0000781C, { { 0xCF, 0xD6, 0x1D, 0x3D, 0x14, 0x40, 0x88, 0x35, 0x36, 0x4F, 0x0B, 0x1F, 0x9A, 0x1C, 0x3D, 0xAC } } } }, + { -1, { 0x00000547, 0x00007876, { { 0x7A, 0xC7, 0x80, 0x34, 0x7A, 0x1B, 0xAB, 0xF8, 0xA7, 0x2F, 0x63, 0x3C, 0xDA, 0x89, 0x3F, 0x82 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kIntroCPSStringsProvider[] = { + { -1, { 0x00000016, 0x0000070A, { { 0xD9, 0xDB, 0x91, 0xCD, 0x93, 0x81, 0xC4, 0x3F, 0x14, 0xF1, 0xC5, 0x02, 0xE7, 0x3F, 0x3A, 0x6C } } } }, + { -1, { 0x00000015, 0x00000786, { { 0xCF, 0x09, 0xE1, 0xD9, 0x8E, 0x34, 0x5D, 0xEA, 0xBC, 0xAC, 0xC4, 0xF4, 0x4A, 0xEC, 0xFF, 0xC1 } } } }, + { -1, { 0x0000000C, 0x00000413, { { 0xA1, 0xE3, 0x06, 0x53, 0x23, 0x9A, 0xE0, 0xF1, 0xE4, 0xFD, 0xD9, 0x05, 0x22, 0xA6, 0x28, 0x46 } } } }, + { -1, { 0x00000014, 0x0000071D, { { 0xBA, 0xB6, 0x58, 0xB3, 0x28, 0x5E, 0x9F, 0x77, 0x69, 0x9D, 0x77, 0x53, 0x9D, 0x0D, 0xB0, 0x29 } } } }, + { -1, { 0x00000015, 0x0000071D, { { 0x59, 0x65, 0x08, 0xF9, 0x4C, 0x81, 0xA1, 0xE3, 0x68, 0xF7, 0xE3, 0xF6, 0x33, 0x5F, 0xF5, 0x36 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kIntroCOLStringsProvider[] = { + { -1, { 0x0000002E, 0x00000F09, { { 0x2A, 0x42, 0xB8, 0x4E, 0xC6, 0xF0, 0x5F, 0x4A, 0x08, 0xB4, 0xE3, 0xE5, 0xBD, 0x32, 0x11, 0x06 } } } }, + { -1, { 0x0000002B, 0x00000F09, { { 0x01, 0x40, 0x65, 0xC1, 0x33, 0xAA, 0x64, 0xA7, 0x44, 0xD5, 0x89, 0x68, 0x17, 0x47, 0xC7, 0x1D } } } }, + { -1, { 0x00000046, 0x0000174F, { { 0xAA, 0x59, 0x01, 0x20, 0x06, 0xB4, 0x80, 0xC0, 0x84, 0x38, 0xFD, 0x97, 0xBF, 0x78, 0xDD, 0x78 } } } }, + { -1, { 0x00000030, 0x00000F09, { { 0x05, 0x7B, 0x69, 0xB7, 0x6A, 0xC3, 0x7F, 0xD9, 0x7E, 0x51, 0x87, 0xA5, 0x31, 0xD8, 0x80, 0xB3 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kIntroWSAStringsProvider[] = { + { -1, { 0x00000086, 0x00002E5D, { { 0xD2, 0x8D, 0x62, 0xEF, 0xEB, 0x75, 0x04, 0x13, 0x64, 0x85, 0x6B, 0x6C, 0xE8, 0x6C, 0xCF, 0x52 } } } }, + { -1, { 0x00000080, 0x00002E5D, { { 0x67, 0x03, 0x20, 0xDF, 0xAA, 0x3C, 0x6A, 0xB5, 0x45, 0xD0, 0x00, 0x2B, 0x30, 0xCC, 0x36, 0xB6 } } } }, + { -1, { 0x0000004D, 0x00001AEC, { { 0x15, 0xBC, 0x8C, 0xD9, 0x33, 0x0C, 0xC5, 0x66, 0x87, 0x3B, 0x76, 0xEE, 0x0C, 0x41, 0x4D, 0x1F } } } }, + { -1, { 0x00000093, 0x00002E5D, { { 0xAB, 0xD1, 0x32, 0x89, 0x2A, 0x8D, 0xC0, 0x2C, 0x87, 0x87, 0xA3, 0x14, 0x2A, 0x2A, 0x22, 0x7F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kIntroStringsProvider[] = { + { kAmigaVersion, { 0x0000050A, 0x0001A7B1, { { 0x1B, 0x74, 0x71, 0x4C, 0xAB, 0x81, 0x10, 0x59, 0x8A, 0x21, 0x50, 0xBB, 0xFE, 0x6F, 0xD0, 0xE8 } } } }, + { -1, { 0x000004F6, 0x0001A7B1, { { 0xDE, 0x41, 0xB1, 0x98, 0xD5, 0xAD, 0x6B, 0xBA, 0x33, 0x04, 0x19, 0x5D, 0xCC, 0x07, 0xB5, 0x56 } } } }, + { -1, { 0x00000606, 0x000212AB, { { 0xB0, 0x78, 0x86, 0xFB, 0xCB, 0x3D, 0x1E, 0x1E, 0x86, 0xE7, 0x2C, 0x2B, 0x3A, 0x3C, 0x6F, 0x1C } } } }, + { -1, { 0x000005F0, 0x000207E6, { { 0xB8, 0x51, 0xEA, 0x44, 0x64, 0x04, 0xE4, 0x6A, 0x7B, 0xBD, 0x31, 0x62, 0xC0, 0xDD, 0xEA, 0xEF } } } }, + { -1, { 0x000005F0, 0x0001CF13, { { 0x4F, 0xA0, 0x47, 0x57, 0x6D, 0x2D, 0xA6, 0x62, 0x06, 0xBE, 0x86, 0xD2, 0xD7, 0xEA, 0x2E, 0xD6 } } } }, + { -1, { 0x000002FA, 0x00010181, { { 0x48, 0xD3, 0x1B, 0x8E, 0x8D, 0xBC, 0x1F, 0x51, 0x35, 0x71, 0xE2, 0xAB, 0xC8, 0xBE, 0xFC, 0x88 } } } }, + { -1, { 0x000004F5, 0x0001A7B1, { { 0xC7, 0x65, 0x5B, 0x5A, 0x56, 0x43, 0x94, 0x55, 0x5B, 0x00, 0xFD, 0x5D, 0xF4, 0xB5, 0x04, 0x15 } } } }, + { -1, { 0x00000605, 0x000212AB, { { 0x8F, 0x3A, 0x9D, 0x9A, 0x81, 0xF2, 0x4A, 0x90, 0xBC, 0xBD, 0x62, 0x8B, 0xD8, 0xD6, 0xF4, 0x5D } } } }, + { -1, { 0x000005EF, 0x000207E6, { { 0xDC, 0x6C, 0x9A, 0x7C, 0x19, 0x45, 0x2B, 0x25, 0x84, 0xCC, 0xE1, 0x40, 0xFE, 0x8E, 0xF4, 0x51 } } } }, + { -1, { 0x0000057C, 0x0001DF02, { { 0x4B, 0x09, 0xBC, 0xBC, 0xB3, 0x3C, 0x69, 0xEB, 0xA6, 0xB5, 0x76, 0xED, 0xC7, 0x57, 0x71, 0xB0 } } } }, + { -1, { 0x000005CF, 0x00020415, { { 0xCC, 0xE5, 0x9F, 0xB8, 0xCA, 0xFA, 0x2D, 0x05, 0xB8, 0xAF, 0x9F, 0x1F, 0x8A, 0xA8, 0x56, 0xDE } } } }, + { kFMTownsVersionE, { 0x00000545, 0x0001A84C, { { 0xEF, 0xE2, 0xE4, 0x92, 0xE1, 0x18, 0xF8, 0x3C, 0x91, 0x29, 0x4D, 0x82, 0xA4, 0x3E, 0xE6, 0x7D } } } }, + { kFMTownsVersionJ, { 0x000005FB, 0x0003163E, { { 0x16, 0x28, 0x83, 0xCE, 0x29, 0x94, 0x9F, 0x82, 0xDC, 0xD4, 0x06, 0xE8, 0x67, 0xC9, 0x56, 0x29 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kOutroHomeStringProvider[] = { + { -1, { 0x00000005, 0x00000189, { { 0xA5, 0xF3, 0x03, 0x3F, 0x43, 0x2B, 0x77, 0xCC, 0x5C, 0x96, 0x64, 0xB1, 0x75, 0xB5, 0x3E, 0xF6 } } } }, + { -1, { 0x0000000E, 0x00000473, { { 0xB6, 0xEB, 0xE8, 0x22, 0x67, 0x24, 0xA9, 0xA3, 0x94, 0x55, 0xC6, 0x57, 0x17, 0x15, 0x5B, 0x04 } } } }, + { -1, { 0x00000007, 0x00000267, { { 0xD0, 0xC1, 0x11, 0x49, 0x3D, 0x3F, 0xCE, 0x84, 0x8F, 0xEF, 0xE3, 0xFD, 0x43, 0xCA, 0x92, 0xB0 } } } }, + { -1, { 0x00000007, 0x000001B8, { { 0x17, 0x95, 0x5B, 0x4F, 0xE2, 0x07, 0x5A, 0x49, 0xFA, 0xCE, 0x53, 0x8B, 0xE7, 0x46, 0x69, 0xC7 } } } }, + { -1, { 0x00000005, 0x00000178, { { 0x2E, 0x9C, 0x94, 0x0F, 0x29, 0x77, 0x27, 0x1D, 0x77, 0x1E, 0x5A, 0xF8, 0x0E, 0x8D, 0x09, 0x6B } } } }, + { kFMTownsVersionE, { 0x00000005, 0x00000189, { { 0xA5, 0xF3, 0x03, 0x3F, 0x43, 0x2B, 0x77, 0xCC, 0x5C, 0x96, 0x64, 0xB1, 0x75, 0xB5, 0x3E, 0xF6 } } } }, + { kFMTownsVersionJ, { 0x00000007, 0x000003E8, { { 0x68, 0x35, 0x87, 0x53, 0xD9, 0x53, 0x1F, 0x13, 0x24, 0x61, 0x0D, 0x8D, 0x33, 0x91, 0xF3, 0x47 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kRoomFilenamesProvider[] = { + { -1, { 0x00000308, 0x0000B7AA, { { 0x6D, 0xA4, 0xE8, 0x27, 0x68, 0x24, 0xCF, 0xAA, 0x30, 0x32, 0x71, 0x74, 0x36, 0x68, 0x82, 0x20 } } } }, + { -1, { 0x000002DC, 0x0000B7AA, { { 0x31, 0x56, 0x41, 0x69, 0x1E, 0x84, 0x54, 0x2C, 0xF7, 0x7B, 0x98, 0x25, 0xF3, 0x91, 0x56, 0xFD } } } }, + { -1, { 0x0000034C, 0x0000B7AA, { { 0x7C, 0x1B, 0x89, 0x09, 0xF0, 0x87, 0x3C, 0x64, 0x3D, 0x0E, 0x61, 0xCC, 0x09, 0x8D, 0xC9, 0x95 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kRoomListProvider[] = { + { -1, { 0x00004ECC, 0x0010312B, { { 0x9A, 0x91, 0xF1, 0x9C, 0x8A, 0x96, 0x1C, 0x7B, 0xB7, 0xE4, 0xF1, 0xE9, 0x7D, 0xEF, 0x40, 0xBF } } } }, + { -1, { 0x00004DD6, 0x0010312B, { { 0xC6, 0xF0, 0xC4, 0x2C, 0x5A, 0xD7, 0x48, 0xE4, 0x41, 0x23, 0x65, 0x6D, 0xC8, 0xC7, 0xCE, 0xF5 } } } }, + { -1, { 0x000064E8, 0x0010312B, { { 0x94, 0x5C, 0x87, 0x35, 0x35, 0x6B, 0x3E, 0xBF, 0x55, 0x3D, 0xDB, 0xD9, 0xFB, 0x97, 0x27, 0x5D } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kCharacterImageFilenamesProvider[] = { + { -1, { 0x000000F0, 0x00003A8F, { { 0xC0, 0xD9, 0x8C, 0x2B, 0x65, 0x51, 0x7C, 0x13, 0x52, 0x7E, 0xF7, 0x63, 0xA6, 0xA9, 0xCE, 0x40 } } } }, + { -1, { 0x000000E4, 0x00003A8F, { { 0x7A, 0x77, 0x6D, 0x26, 0xC8, 0x43, 0xCB, 0x74, 0x46, 0x2E, 0x04, 0x22, 0x89, 0x27, 0x33, 0x06 } } } }, + { -1, { 0x000000F7, 0x00003A8F, { { 0x1F, 0xAB, 0x8E, 0x5F, 0xAD, 0x76, 0x57, 0x37, 0xD7, 0x9B, 0x3F, 0x35, 0x4B, 0xA0, 0x98, 0x37 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kAudioTracksProvider[] = { + { -1, { 0x00000041, 0x00000FBF, { { 0xB5, 0xA2, 0x90, 0xE9, 0x73, 0x83, 0x47, 0x5A, 0xB3, 0x3E, 0x04, 0xBB, 0xAA, 0xC8, 0x84, 0x53 } } } }, + { -1, { 0x0000005D, 0x0000154E, { { 0xA7, 0x7E, 0x03, 0x0A, 0x81, 0x54, 0xD2, 0x5D, 0x7B, 0x33, 0x07, 0xBF, 0x70, 0x01, 0x4B, 0x79 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kAudioTracksIntroProvider[] = { + { -1, { 0x0000000C, 0x00000458, { { 0xEB, 0xB3, 0x96, 0xA5, 0x07, 0xE6, 0x11, 0x58, 0xDB, 0x3F, 0x34, 0x30, 0xFB, 0x7B, 0x92, 0xC8 } } } }, + { -1, { 0x00000006, 0x0000022C, { { 0x5F, 0xC9, 0xE1, 0x4B, 0x34, 0x52, 0xB9, 0xF8, 0xFF, 0x37, 0x8B, 0xF4, 0xEF, 0x5E, 0xC5, 0xDA } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kItemNamesProvider[] = { + { -1, { 0x00000380, 0x00012960, { { 0x2D, 0x81, 0xCF, 0x7A, 0x9D, 0x71, 0x83, 0xB7, 0xE5, 0x00, 0xB0, 0x6E, 0x25, 0x94, 0xCB, 0xA4 } } } }, + { -1, { 0x00000468, 0x00018B13, { { 0xCE, 0xFE, 0x19, 0x5D, 0x3F, 0xD7, 0x2A, 0xF6, 0xD0, 0xC5, 0xBC, 0x17, 0x6A, 0x52, 0xDB, 0xFE } } } }, + { -1, { 0x00000512, 0x0001DD2C, { { 0x5D, 0xB0, 0x6B, 0x8E, 0x9C, 0x70, 0x09, 0x90, 0x3C, 0xC6, 0x58, 0x1F, 0x71, 0x24, 0x76, 0x56 } } } }, + { -1, { 0x00000506, 0x0001C3CC, { { 0x46, 0xD4, 0x19, 0x04, 0x2A, 0x46, 0xCD, 0x63, 0x41, 0x5A, 0x8E, 0xA8, 0x00, 0xDD, 0x02, 0x77 } } } }, + { -1, { 0x00000506, 0x0001C1D9, { { 0xF2, 0x2D, 0x18, 0x13, 0x61, 0xFB, 0x57, 0x93, 0x5C, 0xDC, 0x79, 0x44, 0x96, 0x01, 0xA6, 0x90 } } } }, + { -1, { 0x00000591, 0x0001F869, { { 0x4D, 0xD7, 0x66, 0xBB, 0x9A, 0xD8, 0x79, 0x1E, 0x92, 0x2B, 0xE5, 0xC2, 0x0F, 0x02, 0x0B, 0x35 } } } }, + { -1, { 0x00000530, 0x0001D90A, { { 0x52, 0xFB, 0xA8, 0x3F, 0xA3, 0x6F, 0xC2, 0x67, 0x55, 0x9F, 0x66, 0x9F, 0xFD, 0x79, 0x44, 0xDF } } } }, + { kFMTownsVersionE, { 0x00000505, 0x00018B13, { { 0x62, 0x76, 0x84, 0x5D, 0x8D, 0xBA, 0x23, 0xC5, 0x67, 0x26, 0x22, 0xBD, 0xBE, 0x81, 0x2D, 0xFF } } } }, + { kFMTownsVersionJ, { 0x00000587, 0x000247A1, { { 0xE8, 0xCA, 0x1E, 0x34, 0x05, 0xE5, 0x08, 0xCA, 0xA7, 0xFE, 0x55, 0xCB, 0x75, 0xD0, 0xA7, 0x19 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kTakenStringsProvider[] = { + { -1, { 0x00000008, 0x00000261, { { 0x93, 0x5B, 0x79, 0xE8, 0x89, 0x8E, 0xB5, 0x37, 0x39, 0x2A, 0xB0, 0x04, 0x98, 0x80, 0x5A, 0x4E } } } }, + { -1, { 0x00000010, 0x000004C2, { { 0x08, 0xC0, 0x66, 0xB1, 0x45, 0x04, 0x78, 0xF9, 0xAF, 0x0F, 0x52, 0xC8, 0x0E, 0x0C, 0x69, 0x86 } } } }, + { -1, { 0x0000001C, 0x000009C0, { { 0xA8, 0x64, 0xDD, 0x9D, 0x91, 0x42, 0x04, 0x26, 0xD0, 0x80, 0x40, 0xED, 0x08, 0x51, 0xC9, 0xBB } } } }, + { -1, { 0x0000000F, 0x0000047D, { { 0xE8, 0xB5, 0x15, 0xD5, 0x96, 0x81, 0xD2, 0x84, 0xAB, 0x33, 0xC1, 0x1C, 0x47, 0x1B, 0xFE, 0xDB } } } }, + { -1, { 0x0000000F, 0x000002F0, { { 0x37, 0x22, 0x62, 0xE4, 0x1B, 0x1F, 0xD6, 0x9E, 0x94, 0xA3, 0x41, 0x00, 0xD5, 0x29, 0x28, 0x09 } } } }, + { -1, { 0x0000001E, 0x000008FA, { { 0xC9, 0xCC, 0x2E, 0x0B, 0xE4, 0xE0, 0x44, 0xBD, 0xC2, 0x10, 0x09, 0xA3, 0x36, 0xB1, 0x5D, 0x1C } } } }, + { -1, { 0x00000014, 0x00000588, { { 0x5B, 0x75, 0xAE, 0xD7, 0x50, 0x6C, 0x3E, 0x65, 0x5C, 0xF8, 0x84, 0x34, 0x48, 0x58, 0x0E, 0x6E } } } }, + { -1, { 0x00000014, 0x000005D8, { { 0xD6, 0x00, 0x90, 0x6A, 0x75, 0x3B, 0xF1, 0xFE, 0xF4, 0x3E, 0x0E, 0x1D, 0x39, 0xEB, 0x2D, 0xC8 } } } }, + { kFMTownsVersionE, { 0x0000001C, 0x00000AED, { { 0x32, 0xD2, 0x87, 0x67, 0x3D, 0x01, 0x50, 0xF3, 0xFA, 0x19, 0x7A, 0xB0, 0xF8, 0x6F, 0x8A, 0x07 } } } }, + { kFMTownsVersionJ, { 0x0000001F, 0x00000EB7, { { 0x7F, 0x8C, 0xFF, 0x35, 0x30, 0x71, 0x9A, 0x78, 0xCC, 0x07, 0x11, 0x86, 0xE3, 0x0D, 0x16, 0xDF } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPlacedStringsProvider[] = { + { -1, { 0x00000009, 0x000002B7, { { 0xE7, 0xCF, 0x8A, 0x19, 0xEF, 0x98, 0xE5, 0x74, 0x46, 0x46, 0x47, 0x65, 0xB6, 0x81, 0x70, 0x0A } } } }, + { -1, { 0x0000000B, 0x00000389, { { 0xB9, 0x74, 0xBE, 0x63, 0xB4, 0xA4, 0x8A, 0x04, 0xD9, 0x50, 0x73, 0xB7, 0x01, 0x9E, 0x77, 0xD3 } } } }, + { -1, { 0x00000011, 0x00000545, { { 0x05, 0xEF, 0x74, 0x54, 0x06, 0xB7, 0x64, 0x47, 0x21, 0x56, 0x55, 0x74, 0x70, 0x2D, 0xA8, 0x23 } } } }, + { -1, { 0x00000011, 0x000003B8, { { 0xC8, 0xA6, 0xE4, 0x8A, 0xF7, 0x4C, 0x3F, 0xA6, 0x24, 0x7F, 0xEF, 0xE4, 0x63, 0x8B, 0x72, 0xF3 } } } }, + { -1, { 0x0000000D, 0x0000040D, { { 0x9C, 0x71, 0x53, 0x35, 0xC3, 0xE8, 0x46, 0xB9, 0xD2, 0xFA, 0x1C, 0x8C, 0xC3, 0xFF, 0xBC, 0x1F } } } }, + { -1, { 0x0000000D, 0x00000439, { { 0x57, 0xAE, 0x1C, 0xC1, 0xF5, 0xE8, 0x5B, 0x9E, 0x90, 0x02, 0xB9, 0x8D, 0x86, 0x38, 0xFB, 0xA8 } } } }, + { kFMTownsVersionE, { 0x00000009, 0x000002B7, { { 0xE7, 0xCF, 0x8A, 0x19, 0xEF, 0x98, 0xE5, 0x74, 0x46, 0x46, 0x47, 0x65, 0xB6, 0x81, 0x70, 0x0A } } } }, + { kFMTownsVersionJ, { 0x0000000D, 0x0000074C, { { 0x0E, 0x1C, 0x1F, 0xD2, 0xCF, 0xBF, 0x40, 0xE1, 0x59, 0x0F, 0x1B, 0x46, 0xED, 0x8B, 0x96, 0x8E } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kDroppedStringsProvider[] = { + { -1, { 0x0000000A, 0x0000033C, { { 0x96, 0x63, 0xFD, 0x73, 0x71, 0xCC, 0x62, 0x59, 0x86, 0x02, 0x47, 0x55, 0x82, 0xF8, 0x5E, 0x1F } } } }, + { -1, { 0x00000011, 0x00000612, { { 0xEC, 0xCD, 0x99, 0x58, 0xF7, 0x08, 0x92, 0x43, 0x95, 0x10, 0x6B, 0xDD, 0x61, 0xF7, 0x5C, 0xA4 } } } }, + { -1, { 0x00000011, 0x00000579, { { 0x3D, 0x0C, 0x3C, 0xAD, 0x2E, 0xE3, 0x7A, 0x5A, 0x4A, 0x21, 0x1C, 0x96, 0xC5, 0x5A, 0xA7, 0x9E } } } }, + { -1, { 0x00000011, 0x000003B8, { { 0xC8, 0xA6, 0xE4, 0x8A, 0xF7, 0x4C, 0x3F, 0xA6, 0x24, 0x7F, 0xEF, 0xE4, 0x63, 0x8B, 0x72, 0xF3 } } } }, + { -1, { 0x0000000B, 0x0000031B, { { 0x32, 0x0C, 0xCD, 0x83, 0xF6, 0x97, 0xC8, 0x76, 0x57, 0x6B, 0x7C, 0xAD, 0x51, 0xEB, 0x91, 0x1F } } } }, + { -1, { 0x00000008, 0x00000261, { { 0x1D, 0xB5, 0xFB, 0x23, 0x94, 0xA7, 0x86, 0x7A, 0xAC, 0x53, 0xDA, 0x6F, 0xCC, 0x41, 0x0F, 0xD7 } } } }, + { kFMTownsVersionE, { 0x0000000A, 0x0000033C, { { 0x96, 0x63, 0xFD, 0x73, 0x71, 0xCC, 0x62, 0x59, 0x86, 0x02, 0x47, 0x55, 0x82, 0xF8, 0x5E, 0x1F } } } }, + { kFMTownsVersionJ, { 0x0000000B, 0x0000059F, { { 0xDD, 0x5E, 0x51, 0x7E, 0xD9, 0xFC, 0xCD, 0xAD, 0x6B, 0x93, 0x71, 0xBE, 0x83, 0x63, 0x3F, 0x88 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kNoDropStringsProvider[] = { + { -1, { 0x00000048, 0x00001881, { { 0x69, 0xA8, 0x0B, 0x47, 0xFD, 0xA0, 0x94, 0x12, 0x82, 0x1D, 0xE0, 0x9C, 0xB1, 0x10, 0x6D, 0x11 } } } }, + { -1, { 0x00000047, 0x00001881, { { 0xEF, 0x81, 0x2B, 0x8F, 0x06, 0x0C, 0xA6, 0xBA, 0x50, 0x9C, 0x99, 0x40, 0x53, 0xFD, 0xC1, 0x55 } } } }, + { -1, { 0x0000004C, 0x00001AFF, { { 0xE5, 0x05, 0x79, 0x10, 0x91, 0x95, 0x64, 0x40, 0xB2, 0x73, 0x39, 0xFA, 0x50, 0x8D, 0xCE, 0x8A } } } }, + { -1, { 0x0000004C, 0x00001B39, { { 0xFF, 0xD5, 0x5D, 0x1C, 0xF1, 0x8A, 0xA4, 0x21, 0xB1, 0x56, 0x2B, 0xAC, 0x9F, 0x40, 0x30, 0x53 } } } }, + { -1, { 0x0000004C, 0x00001650, { { 0x42, 0x7A, 0x04, 0xCD, 0x69, 0xB1, 0x06, 0x9A, 0xD8, 0x7E, 0x7A, 0x14, 0x5B, 0x1C, 0x70, 0xB8 } } } }, + { -1, { 0x00000045, 0x00001850, { { 0x50, 0x34, 0x82, 0xA9, 0x28, 0xDE, 0x44, 0xB3, 0x2D, 0x59, 0x0B, 0x7F, 0xCE, 0x42, 0x1F, 0x73 } } } }, + { -1, { 0x0000003D, 0x000015FA, { { 0x87, 0x2E, 0xE6, 0x8A, 0xF1, 0xC9, 0xC9, 0xEC, 0xD3, 0x2C, 0x25, 0x7E, 0x36, 0x02, 0xF7, 0xAC } } } }, + { kFMTownsVersionE, { 0x0000007A, 0x0000323C, { { 0x00, 0x7F, 0x8E, 0x2E, 0x7B, 0xFC, 0x06, 0x0B, 0x7A, 0x7F, 0x17, 0xAF, 0x47, 0x82, 0xC1, 0x16 } } } }, + { kFMTownsVersionJ, { 0x00000061, 0x00002E9C, { { 0x8A, 0xFA, 0x43, 0x26, 0x68, 0x6D, 0x5A, 0x59, 0x0C, 0x9E, 0xCB, 0x28, 0x43, 0x33, 0x54, 0x49 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPutDownStringProvider[] = { + { -1, { 0x00000026, 0x00000D27, { { 0x83, 0x09, 0x51, 0xD3, 0x94, 0x2B, 0xB1, 0x8B, 0x8B, 0x16, 0xA9, 0xEB, 0xE8, 0xA2, 0x4F, 0x0C } } } }, + { -1, { 0x00000028, 0x00000E7E, { { 0x26, 0x93, 0x76, 0x37, 0x41, 0x2E, 0xF3, 0xED, 0xF5, 0x7B, 0xA7, 0xEB, 0x80, 0x61, 0x3B, 0x84 } } } }, + { -1, { 0x0000002E, 0x0000101D, { { 0xBC, 0xEA, 0x6C, 0x1F, 0x31, 0xCF, 0x30, 0x26, 0x2D, 0x24, 0xC5, 0xEA, 0x97, 0x49, 0xDC, 0x4C } } } }, + { -1, { 0x0000002E, 0x00000EB2, { { 0x14, 0x08, 0xE6, 0xD1, 0x54, 0x76, 0x2A, 0x9E, 0xBE, 0x5A, 0x15, 0xEB, 0x52, 0x01, 0x52, 0x97 } } } }, + { -1, { 0x00000034, 0x0000131D, { { 0x36, 0x87, 0x4D, 0x73, 0x2A, 0x67, 0xBA, 0xCE, 0xCB, 0x33, 0x3C, 0x10, 0xCC, 0x3E, 0x7E, 0xAD } } } }, + { -1, { 0x0000002D, 0x00001052, { { 0x12, 0x0A, 0x23, 0x11, 0xDF, 0x8A, 0x59, 0xD4, 0xF2, 0xCA, 0xA5, 0xA7, 0x76, 0x1B, 0x54, 0xB6 } } } }, + { kFMTownsVersionE, { 0x00000026, 0x00000D27, { { 0x83, 0x09, 0x51, 0xD3, 0x94, 0x2B, 0xB1, 0x8B, 0x8B, 0x16, 0xA9, 0xEB, 0xE8, 0xA2, 0x4F, 0x0C } } } }, + { kFMTownsVersionJ, { 0x00000029, 0x0000187D, { { 0xDE, 0xEE, 0x66, 0x88, 0x57, 0xF5, 0xF9, 0x2E, 0xD2, 0x14, 0xF5, 0x83, 0xA0, 0x0D, 0x96, 0x86 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kWaitAmuletStringProvider[] = { + { -1, { 0x0000003E, 0x0000150D, { { 0xA8, 0xBF, 0x99, 0x9B, 0xC1, 0x36, 0x21, 0x47, 0x6D, 0x99, 0x4F, 0x34, 0xE6, 0x61, 0x47, 0xFD } } } }, + { -1, { 0x0000003D, 0x0000150D, { { 0x11, 0xC8, 0x7E, 0x83, 0x7A, 0xC3, 0x5D, 0xD9, 0x72, 0xFC, 0x75, 0xCB, 0x57, 0xE9, 0xF1, 0x36 } } } }, + { -1, { 0x00000048, 0x000019CF, { { 0x82, 0xDD, 0xBD, 0xA3, 0xD0, 0xE0, 0x19, 0xC0, 0x6D, 0xC5, 0xEE, 0x7A, 0x0B, 0x49, 0x06, 0xCE } } } }, + { -1, { 0x00000049, 0x00001ADD, { { 0xFD, 0xCF, 0x9C, 0xAD, 0xA2, 0xAA, 0x74, 0x11, 0x8E, 0x89, 0x02, 0xCB, 0x2B, 0x5B, 0x2B, 0x1C } } } }, + { -1, { 0x00000049, 0x0000184F, { { 0x11, 0x42, 0xB2, 0xD6, 0x76, 0xEA, 0xF9, 0xCA, 0x46, 0xE4, 0xA6, 0x35, 0xE8, 0xB9, 0x8B, 0xE9 } } } }, + { -1, { 0x0000004A, 0x00001B4C, { { 0x38, 0x26, 0x54, 0x10, 0x3D, 0x32, 0xCD, 0xAE, 0x3F, 0x96, 0xFE, 0x6F, 0x4A, 0x94, 0x72, 0xB0 } } } }, + { -1, { 0x00000042, 0x000017FD, { { 0x0A, 0x8A, 0x7E, 0x9A, 0x5F, 0x4A, 0x35, 0x06, 0x4D, 0x6B, 0xBF, 0x29, 0x1B, 0xAD, 0xD8, 0x37 } } } }, + { kFMTownsVersionE, { 0x0000003D, 0x0000150D, { { 0x11, 0xC8, 0x7E, 0x83, 0x7A, 0xC3, 0x5D, 0xD9, 0x72, 0xFC, 0x75, 0xCB, 0x57, 0xE9, 0xF1, 0x36 } } } }, + { kFMTownsVersionJ, { 0x00000029, 0x000017A7, { { 0xFD, 0xA3, 0xAD, 0x24, 0x16, 0x49, 0x22, 0x6F, 0x52, 0xE9, 0x50, 0x11, 0x51, 0x38, 0xCA, 0xE0 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kBlackJewelStringProvider[] = { + { -1, { 0x00000024, 0x00000B73, { { 0x8D, 0x57, 0x5F, 0x93, 0x85, 0x75, 0xF2, 0xD8, 0x36, 0xC2, 0x7C, 0x0E, 0x3B, 0xEA, 0xE0, 0x0A } } } }, + { -1, { 0x00000023, 0x00000B73, { { 0xBE, 0xE9, 0xBD, 0x65, 0xB9, 0xB1, 0xCD, 0xF0, 0x45, 0x03, 0x01, 0x70, 0xBE, 0xD0, 0x0F, 0x80 } } } }, + { -1, { 0x00000031, 0x0000113B, { { 0xA5, 0x00, 0xD1, 0xDC, 0x25, 0x99, 0x3E, 0x6B, 0xFF, 0xC8, 0x6C, 0xDA, 0xA4, 0xCF, 0x51, 0xD7 } } } }, + { -1, { 0x0000002B, 0x00000F11, { { 0x68, 0xA0, 0xA3, 0xA0, 0xB6, 0xD1, 0x40, 0x22, 0xB4, 0x10, 0x3D, 0x5A, 0x7F, 0x1F, 0x4B, 0xE7 } } } }, + { -1, { 0x0000002B, 0x00000D6D, { { 0x08, 0x5E, 0x1F, 0xA8, 0x8F, 0x1F, 0x6A, 0xE0, 0xF3, 0x49, 0xEF, 0x44, 0xA8, 0xCD, 0xDE, 0x45 } } } }, + { -1, { 0x00000022, 0x00000B6E, { { 0xAE, 0xA0, 0xDF, 0x07, 0xDD, 0x88, 0x98, 0x6B, 0xDD, 0x9E, 0x2E, 0xC0, 0xBD, 0x45, 0x2E, 0x2B } } } }, + { -1, { 0x00000025, 0x00000CF6, { { 0x4B, 0x13, 0x39, 0xCB, 0x3F, 0x44, 0x18, 0x46, 0x43, 0xDB, 0x94, 0xC5, 0x3E, 0x6B, 0xC4, 0x74 } } } }, + { kFMTownsVersionE, { 0x00000023, 0x00000B73, { { 0xBE, 0xE9, 0xBD, 0x65, 0xB9, 0xB1, 0xCD, 0xF0, 0x45, 0x03, 0x01, 0x70, 0xBE, 0xD0, 0x0F, 0x80 } } } }, + { kFMTownsVersionJ, { 0x00000035, 0x0000205F, { { 0x33, 0xD6, 0x19, 0xEE, 0xEA, 0xDD, 0x9F, 0xB5, 0x77, 0x0C, 0x8E, 0x84, 0x5E, 0x61, 0x22, 0x3E } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPoisonGoneStringProvider[] = { + { -1, { 0x0000002E, 0x00000F59, { { 0xAD, 0x95, 0xF3, 0xA7, 0xBB, 0x04, 0x08, 0x77, 0xD0, 0x71, 0xFC, 0x8B, 0x33, 0x2A, 0x6D, 0xD3 } } } }, + { -1, { 0x0000002D, 0x00000F59, { { 0x9A, 0x88, 0x07, 0x5A, 0x9C, 0xC3, 0x7B, 0xB0, 0x79, 0x69, 0xE0, 0x84, 0x11, 0x9B, 0x82, 0xCD } } } }, + { -1, { 0x00000036, 0x00001324, { { 0x30, 0x67, 0xEE, 0x7C, 0x4D, 0x36, 0xFE, 0x46, 0x05, 0x44, 0x23, 0xA1, 0xB4, 0x07, 0x16, 0xB5 } } } }, + { -1, { 0x0000002A, 0x00000EAA, { { 0x0B, 0x4E, 0xDF, 0x03, 0x9E, 0x64, 0x3B, 0x13, 0x10, 0x6A, 0xF9, 0x4C, 0x66, 0x0D, 0x09, 0xC5 } } } }, + { -1, { 0x0000002A, 0x00000DFD, { { 0x57, 0xDC, 0xE0, 0x45, 0x2E, 0x89, 0x77, 0x7F, 0x4B, 0x41, 0xCF, 0x4A, 0xFE, 0x0B, 0xAF, 0xC1 } } } }, + { -1, { 0x00000059, 0x00001E91, { { 0xDA, 0x9C, 0xC4, 0x7A, 0x79, 0x73, 0x60, 0xBF, 0x31, 0xF8, 0x8F, 0xAF, 0xC1, 0x4D, 0x25, 0xEC } } } }, + { -1, { 0x00000034, 0x0000128D, { { 0x4E, 0x54, 0xFE, 0x58, 0x7F, 0x15, 0xFA, 0xC1, 0x50, 0xF8, 0x47, 0x29, 0x15, 0xE8, 0x83, 0xC7 } } } }, + { -1, { 0x00000033, 0x0000127E, { { 0x67, 0xEB, 0xD3, 0x00, 0xF8, 0x4F, 0xF1, 0x79, 0x48, 0xE6, 0x9C, 0xB2, 0xA7, 0xCF, 0x76, 0x07 } } } }, + { kFMTownsVersionE, { 0x0000003C, 0x000013B4, { { 0xE9, 0x54, 0xF1, 0xEC, 0x64, 0x5A, 0xEB, 0xC7, 0xAA, 0x7E, 0xA2, 0x9F, 0xE8, 0xFB, 0x3A, 0x82 } } } }, + { kFMTownsVersionJ, { 0x0000003D, 0x000017D1, { { 0x7C, 0x93, 0x62, 0x32, 0x47, 0xB9, 0x78, 0x03, 0x86, 0x8D, 0x99, 0xB8, 0x86, 0x68, 0xEF, 0x3A } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kHealingTipStringProvider[] = { + { -1, { 0x0000002E, 0x00000F04, { { 0x95, 0x39, 0x36, 0x89, 0xC4, 0x60, 0x7C, 0x0C, 0xDC, 0x06, 0xF7, 0x86, 0x1A, 0xF7, 0x93, 0x2B } } } }, + { -1, { 0x0000002D, 0x00000F04, { { 0xC0, 0xC7, 0x0C, 0x3D, 0xA7, 0x62, 0x14, 0xFB, 0xE8, 0x52, 0x05, 0x0D, 0xFE, 0xF6, 0xC7, 0x28 } } } }, + { -1, { 0x0000003C, 0x00001537, { { 0x78, 0xC2, 0x76, 0x24, 0x0D, 0x1F, 0xC0, 0x13, 0x4E, 0x34, 0x0A, 0x50, 0x4C, 0x35, 0x7E, 0xB1 } } } }, + { -1, { 0x00000036, 0x0000132C, { { 0x86, 0x65, 0x80, 0x10, 0x40, 0x32, 0x6C, 0x2F, 0x5E, 0x76, 0xFB, 0xDC, 0x19, 0x33, 0x02, 0x3C } } } }, + { -1, { 0x00000036, 0x00001364, { { 0x59, 0x70, 0x13, 0x8D, 0x93, 0x9C, 0x1B, 0x69, 0x2F, 0x13, 0x9A, 0xB2, 0x4C, 0x97, 0x7E, 0x95 } } } }, + { -1, { 0x0000003F, 0x0000170E, { { 0x0B, 0x37, 0xA4, 0x5E, 0x05, 0x4A, 0x96, 0x1F, 0x2E, 0x02, 0x43, 0xBE, 0xCC, 0xF9, 0x21, 0x5E } } } }, + { -1, { 0x00000028, 0x00000E0F, { { 0x3E, 0x40, 0xCA, 0x2A, 0x5F, 0xFE, 0x74, 0x30, 0x8C, 0x31, 0x41, 0x09, 0xBD, 0xFD, 0xA3, 0x7E } } } }, + { kFMTownsVersionE, { 0x0000002D, 0x00000F04, { { 0xC0, 0xC7, 0x0C, 0x3D, 0xA7, 0x62, 0x14, 0xFB, 0xE8, 0x52, 0x05, 0x0D, 0xFE, 0xF6, 0xC7, 0x28 } } } }, + { kFMTownsVersionJ, { 0x0000002B, 0x00001949, { { 0xC7, 0xE3, 0x0A, 0x6B, 0x8F, 0xCA, 0xBC, 0x3A, 0xDC, 0x76, 0x48, 0xD3, 0x8B, 0xD9, 0x44, 0x2E } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kWispJewelStringsProvider[] = { + { -1, { 0x00000056, 0x00001C62, { { 0x43, 0x28, 0x3C, 0x0F, 0x78, 0x52, 0xE7, 0x2A, 0x77, 0xF3, 0x21, 0x5A, 0xF0, 0xFC, 0x9E, 0xF8 } } } }, + { -1, { 0x00000052, 0x00001CE8, { { 0x6D, 0x69, 0x6D, 0x15, 0x4F, 0xF1, 0xD8, 0xA6, 0x53, 0x9F, 0xE3, 0x77, 0x75, 0x25, 0xE7, 0x93 } } } }, + { -1, { 0x00000058, 0x00001E88, { { 0x0E, 0x14, 0xD1, 0xF3, 0x03, 0x29, 0x48, 0x1D, 0x32, 0x2A, 0xBB, 0x0B, 0x48, 0xB3, 0x2E, 0x47 } } } }, + { -1, { 0x00000050, 0x00001B8D, { { 0x9A, 0xCE, 0x1D, 0x62, 0xFA, 0xC6, 0x73, 0x80, 0x02, 0x0A, 0x61, 0x24, 0xDC, 0x2A, 0xEF, 0xE6 } } } }, + { -1, { 0x00000050, 0x00001A10, { { 0xFB, 0x79, 0x74, 0x14, 0xB9, 0x75, 0x4F, 0x44, 0x83, 0xB1, 0xD4, 0xBE, 0x17, 0x0F, 0xC4, 0xD6 } } } }, + { -1, { 0x00000053, 0x00001C62, { { 0x9A, 0xF1, 0xCC, 0xB3, 0x09, 0xF0, 0x9C, 0x33, 0x0E, 0xF0, 0xE3, 0xF8, 0x24, 0x63, 0x40, 0x95 } } } }, + { -1, { 0x00000061, 0x00002184, { { 0x4B, 0x20, 0xD7, 0xE6, 0x00, 0xBF, 0x32, 0x40, 0xB7, 0xD0, 0xD6, 0xEC, 0x9C, 0x0F, 0x0B, 0xF0 } } } }, + { -1, { 0x0000005B, 0x00001E9A, { { 0xC1, 0x26, 0xF3, 0x64, 0x18, 0x7D, 0xF7, 0x5A, 0xB6, 0x2B, 0x44, 0x57, 0xDC, 0x60, 0x20, 0x3C } } } }, + { -1, { 0x00000074, 0x00002945, { { 0x17, 0x8B, 0x7E, 0xD9, 0x04, 0x7C, 0xD4, 0x9D, 0xCE, 0xF0, 0x79, 0x00, 0xAC, 0x82, 0x7C, 0x82 } } } }, + { -1, { 0x0000005F, 0x0000211E, { { 0xE7, 0x0A, 0x85, 0x25, 0x44, 0x41, 0x47, 0x3B, 0x7A, 0xA6, 0x62, 0xAE, 0xAE, 0xD5, 0x92, 0x45 } } } }, + { kFMTownsVersionE, { 0x00000075, 0x00002B94, { { 0xA5, 0x4C, 0xBF, 0x5F, 0xD3, 0xF8, 0x6D, 0xE4, 0xB4, 0x8E, 0x64, 0x84, 0xD9, 0xBA, 0x2B, 0x33 } } } }, + { kFMTownsVersionJ, { 0x00000067, 0x00002C6B, { { 0x55, 0x56, 0x6B, 0xEA, 0xEF, 0x34, 0xDA, 0x23, 0x23, 0xF4, 0x9D, 0x0F, 0xBF, 0xC3, 0x1F, 0xDA } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kMagicJewelStringsProvider[] = { + { -1, { 0x00000014, 0x0000069E, { { 0x6A, 0x1C, 0x9B, 0x85, 0x61, 0xC7, 0x28, 0xA9, 0xA3, 0xF4, 0xFA, 0x47, 0x90, 0x8F, 0x06, 0xB4 } } } }, + { -1, { 0x00000013, 0x0000069E, { { 0x7C, 0xF2, 0xEE, 0x7C, 0x8A, 0xCE, 0x5B, 0x09, 0x32, 0xDC, 0x31, 0x1F, 0x45, 0x21, 0x84, 0xFF } } } }, + { -1, { 0x00000014, 0x000006EF, { { 0xDE, 0x77, 0xB6, 0x8C, 0x39, 0x5C, 0x6F, 0xDF, 0x7D, 0x04, 0x0F, 0x65, 0x24, 0x75, 0xED, 0x95 } } } }, + { -1, { 0x00000011, 0x000005DB, { { 0x44, 0x99, 0x35, 0x77, 0x9B, 0x3D, 0xF8, 0xAF, 0x7A, 0xA6, 0x14, 0xD0, 0x99, 0xC6, 0x80, 0x7B } } } }, + { -1, { 0x00000011, 0x000005E4, { { 0xD5, 0x11, 0xDA, 0x40, 0x09, 0x6A, 0x5D, 0x76, 0x5C, 0x20, 0xC4, 0x43, 0x4D, 0xF3, 0x67, 0xF0 } } } }, + { -1, { 0x0000001D, 0x00000A83, { { 0x60, 0x69, 0x18, 0x6C, 0x34, 0xB0, 0x56, 0xE3, 0x06, 0x7C, 0xB1, 0xDD, 0x26, 0x80, 0xAE, 0x30 } } } }, + { -1, { 0x00000011, 0x000005CD, { { 0x32, 0x2A, 0xFF, 0x9F, 0x10, 0x75, 0x6B, 0xD6, 0x46, 0xAE, 0x55, 0xD3, 0x68, 0x4F, 0xBB, 0x5A } } } }, + { kFMTownsVersionE, { 0x00000013, 0x0000069E, { { 0x7C, 0xF2, 0xEE, 0x7C, 0x8A, 0xCE, 0x5B, 0x09, 0x32, 0xDC, 0x31, 0x1F, 0x45, 0x21, 0x84, 0xFF } } } }, + { kFMTownsVersionJ, { 0x0000000F, 0x0000087E, { { 0xD8, 0xF1, 0x40, 0x9D, 0x9C, 0x15, 0x9E, 0xBD, 0x69, 0xE5, 0xE1, 0x51, 0x34, 0x22, 0xF3, 0x75 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kThePoisonStringsProvider[] = { + { -1, { 0x00000058, 0x00001C24, { { 0xBA, 0x1F, 0xBD, 0x5C, 0x85, 0x3D, 0x3C, 0x92, 0xD1, 0x13, 0xF3, 0x40, 0x2E, 0xBB, 0x1C, 0xE2 } } } }, + { -1, { 0x00000057, 0x00001C24, { { 0xBC, 0x31, 0x5C, 0x25, 0x50, 0x36, 0x58, 0x20, 0x55, 0xFC, 0x75, 0x47, 0x2D, 0x43, 0x73, 0x78 } } } }, + { -1, { 0x00000072, 0x00002690, { { 0xEF, 0x62, 0x85, 0xA3, 0x8B, 0x20, 0x4B, 0x65, 0xF8, 0xE7, 0x2C, 0x02, 0x3F, 0x3F, 0x25, 0x65 } } } }, + { -1, { 0x00000068, 0x000022D8, { { 0x39, 0xDA, 0xB3, 0xD2, 0xDA, 0x3F, 0xAB, 0x40, 0x1A, 0x4F, 0x9D, 0x02, 0xBA, 0x37, 0xEC, 0x4D } } } }, + { -1, { 0x00000068, 0x00002077, { { 0x5D, 0xF4, 0xF9, 0xD9, 0x87, 0x34, 0x14, 0xAB, 0xE4, 0x9A, 0x67, 0xAF, 0x18, 0x8B, 0x40, 0x98 } } } }, + { -1, { 0x00000063, 0x000021F8, { { 0x3C, 0x2E, 0xF8, 0xAD, 0xCF, 0xB5, 0xE7, 0x2C, 0x98, 0x7A, 0xB9, 0x6F, 0x7A, 0x42, 0xE1, 0x92 } } } }, + { -1, { 0x00000059, 0x00001DF7, { { 0x16, 0x7B, 0x5F, 0x91, 0x06, 0x5B, 0xFC, 0x9C, 0x88, 0x61, 0xCC, 0x1B, 0x52, 0x4F, 0x91, 0xC5 } } } }, + { kFMTownsVersionE, { 0x00000092, 0x0000334E, { { 0xC9, 0x02, 0xB5, 0xEF, 0x90, 0xA8, 0x9C, 0x6E, 0xAD, 0xD6, 0x1F, 0xCC, 0x71, 0x9F, 0x19, 0x2C } } } }, + { kFMTownsVersionJ, { 0x000000A0, 0x00003EEB, { { 0x4B, 0x0C, 0xD5, 0xF0, 0xFE, 0x05, 0xF5, 0x09, 0x96, 0xA9, 0xE4, 0xDD, 0x86, 0x8D, 0x79, 0x3C } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kFluteStringsProvider[] = { + { -1, { 0x0000003C, 0x00001599, { { 0x96, 0x72, 0x5A, 0x8A, 0xA0, 0xEE, 0xA2, 0xCE, 0x4D, 0x21, 0x01, 0x6C, 0xC5, 0x1A, 0xEB, 0x21 } } } }, + { -1, { 0x0000009C, 0x00002334, { { 0xA8, 0xA3, 0x1F, 0x0D, 0x36, 0x25, 0x19, 0x98, 0x50, 0xA0, 0x13, 0x65, 0xF4, 0xE8, 0x27, 0x19 } } } }, + { -1, { 0x00000040, 0x000016F2, { { 0x70, 0xFF, 0x86, 0x73, 0x9E, 0x75, 0xDD, 0x17, 0x27, 0x86, 0x44, 0xE9, 0x78, 0x3D, 0x48, 0xDB } } } }, + { -1, { 0x00000045, 0x000018EE, { { 0x3E, 0x3B, 0x20, 0x46, 0xEB, 0xB0, 0x88, 0x26, 0xB2, 0x0D, 0xD6, 0x8F, 0xF7, 0x53, 0x74, 0xAE } } } }, + { -1, { 0x00000045, 0x00001726, { { 0x5A, 0xCF, 0x64, 0x4B, 0x61, 0x57, 0xEC, 0xB3, 0xBF, 0x32, 0x45, 0x51, 0x5D, 0x02, 0xC5, 0xB6 } } } }, + { -1, { 0x0000004C, 0x00001BFB, { { 0x06, 0x4F, 0x6A, 0x37, 0x8B, 0x44, 0x27, 0x26, 0xCE, 0x28, 0xB2, 0x47, 0x71, 0xE2, 0x27, 0x73 } } } }, + { -1, { 0x00000052, 0x00001D8E, { { 0x9D, 0xA5, 0xF1, 0x42, 0xD1, 0x48, 0xEB, 0x8F, 0x4B, 0xDC, 0xD9, 0x10, 0x55, 0xBD, 0x12, 0xBB } } } }, + { kFMTownsVersionE, { 0x0000005A, 0x000024F9, { { 0xCA, 0x1F, 0x62, 0x23, 0x22, 0x25, 0x4A, 0x94, 0x8A, 0x50, 0x59, 0xD5, 0xB4, 0x4E, 0xF1, 0xA6 } } } }, + { kFMTownsVersionJ, { 0x00000053, 0x00002745, { { 0x7A, 0xBB, 0xFC, 0x30, 0xB6, 0xCE, 0x61, 0xD4, 0xDB, 0xB0, 0xE6, 0xB2, 0xF4, 0x4D, 0x81, 0x35 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kFlaskFullStringProvider[] = { + { -1, { 0x0000001C, 0x000009C8, { { 0xA5, 0xC7, 0x5E, 0x6E, 0x02, 0xEE, 0x8C, 0xF8, 0xF0, 0xBF, 0x69, 0xB8, 0x05, 0x1E, 0xF5, 0x28 } } } }, + { -1, { 0x0000001E, 0x00000A71, { { 0x11, 0x88, 0x37, 0x8E, 0x17, 0xF2, 0x82, 0x1E, 0x72, 0xF0, 0xA3, 0x2B, 0x4F, 0x76, 0x5F, 0xBA } } } }, + { -1, { 0x0000001E, 0x00000AC7, { { 0x4E, 0x7A, 0xC8, 0xC5, 0xD4, 0xB8, 0xD0, 0x73, 0x66, 0x2B, 0x2A, 0x13, 0xDE, 0xE1, 0x32, 0xAA } } } }, + { -1, { 0x0000001E, 0x00000973, { { 0xD3, 0x93, 0x3C, 0xA6, 0xF7, 0x79, 0xE6, 0x05, 0x49, 0x88, 0x89, 0xDE, 0xCA, 0x77, 0x2F, 0x1B } } } }, + { -1, { 0x00000021, 0x00000C19, { { 0xC0, 0xFA, 0xD2, 0xB8, 0xCA, 0x94, 0x67, 0x10, 0x65, 0x01, 0x7F, 0xB0, 0x95, 0xC6, 0x0E, 0xFF } } } }, + { -1, { 0x0000001B, 0x0000099D, { { 0x13, 0x23, 0x5D, 0x38, 0x9B, 0xFB, 0x00, 0x5C, 0xA1, 0x3A, 0x22, 0xD6, 0xCD, 0x5C, 0x09, 0xAE } } } }, + { kFMTownsVersionE, { 0x0000001C, 0x000009C8, { { 0xA5, 0xC7, 0x5E, 0x6E, 0x02, 0xEE, 0x8C, 0xF8, 0xF0, 0xBF, 0x69, 0xB8, 0x05, 0x1E, 0xF5, 0x28 } } } }, + { kFMTownsVersionJ, { 0x0000001F, 0x00001135, { { 0x90, 0x52, 0x4A, 0x95, 0xE4, 0x89, 0xD6, 0x0A, 0xE1, 0x2E, 0x98, 0x11, 0x02, 0xF5, 0x79, 0x37 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kFullFlaskStringProvider[] = { + { -1, { 0x0000009A, 0x00003521, { { 0x26, 0xE5, 0xC8, 0x6D, 0x14, 0x81, 0x9F, 0x90, 0x38, 0x3C, 0x00, 0x9D, 0x8E, 0x72, 0xB1, 0x83 } } } }, + { -1, { 0x00000097, 0x00003521, { { 0x9C, 0x30, 0xC7, 0xC9, 0x97, 0xF3, 0x0E, 0xC4, 0x6E, 0xCA, 0x63, 0xC6, 0xD8, 0x06, 0xFF, 0x30 } } } }, + { -1, { 0x000000AF, 0x00003E38, { { 0x66, 0x86, 0xAF, 0x1A, 0x2D, 0x33, 0x40, 0xE7, 0x96, 0x9B, 0x32, 0x26, 0xFF, 0x9F, 0x79, 0x8B } } } }, + { -1, { 0x00000086, 0x00002E16, { { 0x94, 0x6C, 0x6D, 0xB6, 0x4C, 0x84, 0xBB, 0xF6, 0xC8, 0x50, 0x4C, 0x00, 0x38, 0xE3, 0x09, 0x5B } } } }, + { -1, { 0x00000086, 0x00002CDB, { { 0xB1, 0xAE, 0x2A, 0x03, 0x28, 0xEC, 0x6D, 0x2F, 0xED, 0x71, 0xBE, 0x60, 0xCF, 0xAB, 0x8C, 0x00 } } } }, + { -1, { 0x000000B5, 0x00004111, { { 0xA3, 0x4D, 0xA0, 0xF5, 0xE5, 0xD7, 0xFE, 0x11, 0xBB, 0x2C, 0xB5, 0xF2, 0xE0, 0x52, 0xF1, 0xF0 } } } }, + { -1, { 0x0000009A, 0x0000363B, { { 0x38, 0x25, 0xE6, 0xB5, 0xCB, 0x78, 0x5E, 0xAD, 0x2D, 0xD4, 0x2E, 0x8B, 0x89, 0x20, 0xB1, 0x95 } } } }, + { kFMTownsVersionE, { 0x0000009D, 0x00003521, { { 0xAB, 0x74, 0x71, 0x5C, 0x6E, 0x65, 0xF5, 0x5E, 0xB0, 0x6E, 0x0E, 0xC7, 0x56, 0xCB, 0x55, 0x98 } } } }, + { kFMTownsVersionJ, { 0x0000007D, 0x000039CE, { { 0x9E, 0xBE, 0x13, 0x7F, 0x4D, 0x4B, 0xCB, 0x08, 0xC3, 0xE5, 0xF1, 0xC2, 0xD3, 0x69, 0x9E, 0xDF } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kVeryCleverStringProvider[] = { + { -1, { 0x00000032, 0x0000118D, { { 0x4B, 0x6D, 0xD4, 0xDC, 0x3E, 0xA2, 0x2D, 0x6D, 0x2C, 0x5A, 0xF7, 0x67, 0x4B, 0x6D, 0x40, 0xEF } } } }, + { -1, { 0x00000043, 0x00001871, { { 0x33, 0x3F, 0xEA, 0x7F, 0x5F, 0x56, 0x98, 0xF3, 0x03, 0x8D, 0x3E, 0xAC, 0xA1, 0x62, 0x2A, 0xD7 } } } }, + { -1, { 0x00000027, 0x00000DE1, { { 0x43, 0xC2, 0xC7, 0xD2, 0xA3, 0x70, 0x36, 0x38, 0xB5, 0x5B, 0x22, 0xEF, 0xBA, 0x0D, 0x37, 0x27 } } } }, + { -1, { 0x00000027, 0x00000D01, { { 0x72, 0x7E, 0x88, 0xFB, 0xDA, 0xC0, 0x9E, 0x31, 0xAC, 0x32, 0xFD, 0x90, 0x7D, 0x01, 0x86, 0xD0 } } } }, + { -1, { 0x00000038, 0x000013CF, { { 0x58, 0x7B, 0x59, 0x50, 0x84, 0xBB, 0x5B, 0x70, 0xDF, 0x76, 0x2F, 0xC3, 0x7E, 0xEC, 0x6A, 0x8B } } } }, + { -1, { 0x00000036, 0x000013F8, { { 0x2D, 0x9B, 0x7D, 0x58, 0xD1, 0x94, 0x04, 0x45, 0x6E, 0x81, 0xCC, 0x1E, 0x2F, 0xC5, 0xC9, 0xEA } } } }, + { kFMTownsVersionE, { 0x00000032, 0x0000118D, { { 0x4B, 0x6D, 0xD4, 0xDC, 0x3E, 0xA2, 0x2D, 0x6D, 0x2C, 0x5A, 0xF7, 0x67, 0x4B, 0x6D, 0x40, 0xEF } } } }, + { kFMTownsVersionJ, { 0x0000002F, 0x00001BDF, { { 0x32, 0x2C, 0x60, 0x1E, 0xB7, 0xE0, 0xFE, 0x5F, 0xEA, 0xEF, 0xA4, 0x73, 0xAC, 0xCB, 0xBA, 0xFE } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kNewGameStringProvider[] = { + { -1, { 0x00000015, 0x0000052B, { { 0xAB, 0xD2, 0x16, 0x26, 0xC2, 0x86, 0xFA, 0xC8, 0x42, 0xCD, 0x16, 0xCD, 0x25, 0xB7, 0x44, 0xDC } } } }, + { -1, { 0x0000001D, 0x0000076F, { { 0x5C, 0x84, 0x2A, 0xB1, 0x61, 0xDD, 0x7B, 0xB3, 0xD4, 0x6A, 0xD2, 0xEF, 0xA4, 0x5F, 0x81, 0xFE } } } }, + { -1, { 0x0000001D, 0x0000079B, { { 0x2B, 0x5B, 0x54, 0x29, 0x76, 0x31, 0x5E, 0x89, 0xC2, 0xD1, 0xDB, 0x3B, 0xF0, 0xBC, 0xCD, 0x66 } } } }, + { -1, { 0x0000001D, 0x000007BD, { { 0xF4, 0x5C, 0x50, 0x82, 0x91, 0x7E, 0x09, 0x52, 0x44, 0x95, 0xC2, 0x2E, 0xC9, 0x52, 0x12, 0x2B } } } }, + { -1, { 0x0000001C, 0x0000075E, { { 0xC8, 0xCB, 0x35, 0x5E, 0x73, 0x09, 0xDB, 0xA1, 0xF1, 0x8D, 0x14, 0x54, 0x8D, 0xF7, 0xB1, 0xD3 } } } }, + { -1, { 0x0000001B, 0x00000701, { { 0x2B, 0x87, 0xC3, 0x82, 0x68, 0xA5, 0xFC, 0xC5, 0x64, 0x9E, 0xAB, 0xD2, 0x8A, 0x07, 0x9C, 0x1E } } } }, + { kFMTownsVersionE, { 0x00000015, 0x0000052B, { { 0xAB, 0xD2, 0x16, 0x26, 0xC2, 0x86, 0xFA, 0xC8, 0x42, 0xCD, 0x16, 0xCD, 0x25, 0xB7, 0x44, 0xDC } } } }, + { kFMTownsVersionJ, { 0x0000001B, 0x00000EC8, { { 0x13, 0x9A, 0xBC, 0x8F, 0xE2, 0x4B, 0xD7, 0x0B, 0xC0, 0x81, 0x60, 0x10, 0xC2, 0xA6, 0x9C, 0xFA } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kDefaultShapesProvider[] = { + { -1, { 0x0000048A, 0x00012C0A, { { 0x90, 0x9E, 0x21, 0x9F, 0x90, 0x16, 0x1D, 0xA5, 0x57, 0xF8, 0x71, 0xE1, 0x15, 0x44, 0x29, 0x73 } } } }, + { -1, { 0x000004F3, 0x00014AE4, { { 0x6E, 0x37, 0x81, 0x15, 0x4D, 0xDD, 0xBA, 0xA6, 0xE3, 0x5F, 0xB6, 0xC8, 0x20, 0xE9, 0xE0, 0x63 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kHealing1ShapesProvider[] = { + { -1, { 0x0000009A, 0x00002F17, { { 0x92, 0x2C, 0xF1, 0x5C, 0x8B, 0xCE, 0xEB, 0x0B, 0xE4, 0x07, 0x16, 0xAA, 0x25, 0x4F, 0x83, 0xEB } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kHealing2ShapesProvider[] = { + { -1, { 0x000000D2, 0x00004257, { { 0xAC, 0x35, 0xAA, 0x72, 0x50, 0x67, 0x58, 0xE4, 0x70, 0xB0, 0xBB, 0xCA, 0xA7, 0x4C, 0x91, 0x82 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPoisonDeathShapesProvider[] = { + { -1, { 0x0000008C, 0x00002E90, { { 0xBC, 0x44, 0xFB, 0x98, 0xE7, 0x42, 0xF6, 0xC8, 0x87, 0xDD, 0x00, 0x42, 0x85, 0xD8, 0x1E, 0x81 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kFluteShapesProvider[] = { + { -1, { 0x000000FC, 0x00004F0F, { { 0xB1, 0xF0, 0x56, 0x6E, 0xAB, 0x3C, 0x88, 0x13, 0x97, 0x7C, 0xCC, 0x61, 0x85, 0x8A, 0x28, 0x12 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kWinter1ShapesProvider[] = { + { -1, { 0x00000031, 0x00000E70, { { 0x3A, 0x15, 0x36, 0x51, 0x2F, 0xF8, 0xAF, 0xE6, 0x41, 0x71, 0x8D, 0x44, 0x99, 0x48, 0xB3, 0x4F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kWinter2ShapesProvider[] = { + { -1, { 0x000000F5, 0x00005192, { { 0xD3, 0x64, 0xAC, 0x64, 0x42, 0x9F, 0xB9, 0xCA, 0x0C, 0xC8, 0x97, 0x67, 0x8C, 0x92, 0xB4, 0x79 } } } }, + { -1, { 0x000000F5, 0x000029E4, { { 0xF0, 0x7B, 0x05, 0xD8, 0xC1, 0x97, 0x27, 0x17, 0xFA, 0x32, 0xE9, 0x1A, 0x46, 0xA5, 0xEB, 0x84 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kWinter3ShapesProvider[] = { + { -1, { 0x0000001C, 0x00000A5E, { { 0x84, 0xDD, 0xC0, 0xEA, 0xE3, 0xBE, 0x98, 0x66, 0xE0, 0xA3, 0x4D, 0x00, 0x88, 0x31, 0x61, 0x1F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kDrinkShapesProvider[] = { + { -1, { 0x00000069, 0x00001EDA, { { 0x21, 0xFA, 0x2F, 0x41, 0x8F, 0x70, 0x3B, 0xBB, 0x93, 0x35, 0x49, 0xEC, 0x1C, 0xEE, 0xDD, 0xAC } } } }, + { -1, { 0x0000006A, 0x00001EDA, { { 0xE2, 0xDA, 0xEC, 0x87, 0x4A, 0x27, 0xD8, 0xC1, 0x57, 0xE7, 0xD8, 0xD7, 0x87, 0x5F, 0x3A, 0xEB } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kWispShapesProvider[] = { + { -1, { 0x000000B6, 0x00003A53, { { 0x34, 0x52, 0x9D, 0x06, 0x4F, 0x1B, 0xCD, 0xB7, 0x30, 0xF7, 0xB4, 0x9F, 0x0F, 0x34, 0xDD, 0xF7 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kMagicAnimShapesProvider[] = { + { -1, { 0x00000023, 0x00000A2D, { { 0x48, 0x8E, 0x2A, 0x61, 0x93, 0xCD, 0x58, 0x3B, 0x45, 0x62, 0xD9, 0x01, 0x8F, 0xBA, 0x2A, 0x1A } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kBranStoneShapesProvider[] = { + { -1, { 0x0000006E, 0x00002026, { { 0x5A, 0xAF, 0x28, 0xF3, 0x0F, 0x82, 0x05, 0xB4, 0x33, 0x83, 0xCE, 0x56, 0xDB, 0xE7, 0x5C, 0xB4 } } } }, + { -1, { 0x0000006E, 0x00001E41, { { 0x77, 0x99, 0x54, 0xED, 0x4C, 0x31, 0x08, 0x50, 0x41, 0x22, 0x6B, 0xED, 0x34, 0xF4, 0x17, 0xA1 } } } }, + { -1, { 0x00000063, 0x00001E41, { { 0xDA, 0xA1, 0x93, 0x68, 0xBF, 0xB3, 0xBB, 0xD1, 0x2E, 0xF9, 0xB2, 0x25, 0x72, 0xD9, 0xA6, 0x00 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList1Provider[] = { + { -1, { 0x00000015, 0x0000024B, { { 0x6C, 0x6C, 0xE9, 0xB6, 0xC4, 0xC2, 0x29, 0xA5, 0xB6, 0xB3, 0x82, 0xB6, 0x03, 0x5B, 0x66, 0x7A } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList2Provider[] = { + { -1, { 0x00000033, 0x00000470, { { 0x63, 0x02, 0x97, 0x7D, 0xBE, 0x97, 0x5E, 0x88, 0x2E, 0x50, 0x18, 0x6A, 0x4A, 0x61, 0x09, 0xA6 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList3Provider[] = { + { -1, { 0x00000033, 0x0000042A, { { 0xF8, 0x32, 0x65, 0x55, 0x1C, 0xC5, 0x6E, 0x71, 0xC6, 0x6A, 0x8E, 0xC5, 0x3C, 0xBC, 0x1F, 0xA8 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList4Provider[] = { + { -1, { 0x00000033, 0x000003A4, { { 0xA1, 0xA6, 0x6F, 0x53, 0xA2, 0x1E, 0x27, 0x6F, 0x0D, 0xD0, 0x4F, 0xDC, 0x4C, 0xDC, 0xAE, 0x17 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList5Provider[] = { + { -1, { 0x00000033, 0x0000033D, { { 0x22, 0x02, 0xB3, 0xCD, 0x4E, 0xD5, 0x6E, 0x65, 0x2B, 0x38, 0x7D, 0x3E, 0x27, 0x03, 0x1A, 0x59 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList6Provider[] = { + { -1, { 0x00000033, 0x000001EA, { { 0xC7, 0xA7, 0x0E, 0xBA, 0x3F, 0x5E, 0xD3, 0x02, 0x99, 0x3B, 0x32, 0x00, 0x39, 0x3C, 0xD2, 0xAC } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList7Provider[] = { + { -1, { 0x00000036, 0x0000040C, { { 0x1A, 0x8E, 0x3E, 0x5F, 0x09, 0xFE, 0x4A, 0xF1, 0x5D, 0x2E, 0x2C, 0xD3, 0xFF, 0x75, 0x7D, 0x1C } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList8Provider[] = { + { -1, { 0x00000036, 0x000008E4, { { 0x55, 0xB4, 0xD3, 0xD1, 0x89, 0x49, 0xA5, 0x7E, 0x40, 0xF9, 0xFE, 0x6E, 0x16, 0xE8, 0xBD, 0xBB } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList9Provider[] = { + { -1, { 0x0000002D, 0x000001DB, { { 0x7A, 0x04, 0x16, 0xDD, 0x6A, 0xBA, 0x51, 0x9E, 0x24, 0x9E, 0xEA, 0x76, 0xD0, 0xFA, 0x92, 0xF4 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList10Provider[] = { + { -1, { 0x0000002D, 0x0000017A, { { 0xD2, 0x20, 0x1F, 0x12, 0xE1, 0x65, 0x68, 0xA7, 0x9C, 0x69, 0x8E, 0x99, 0xDF, 0xC5, 0xD2, 0x8E } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList11Provider[] = { + { -1, { 0x0000002D, 0x00000136, { { 0xBF, 0x38, 0xB1, 0xFE, 0xBF, 0x25, 0xBC, 0xD3, 0xCC, 0x60, 0x40, 0x97, 0xB6, 0x4A, 0xC7, 0xB2 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList12Provider[] = { + { -1, { 0x0000002D, 0x00000102, { { 0x1C, 0x1E, 0x6A, 0x30, 0xE1, 0xD1, 0xF9, 0x3D, 0x9A, 0xF1, 0x84, 0xBD, 0x44, 0x07, 0x51, 0xEA } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList13Provider[] = { + { -1, { 0x0000002D, 0x00000000, { { 0x76, 0x22, 0x21, 0x4B, 0x85, 0x36, 0xAF, 0xE7, 0xB8, 0x9B, 0x1C, 0x66, 0x06, 0x06, 0x9B, 0x0D } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList14Provider[] = { + { -1, { 0x0000003C, 0x000003BF, { { 0x78, 0xE8, 0xA8, 0xF2, 0x4D, 0x54, 0x48, 0x47, 0xC9, 0xC1, 0x5B, 0x6C, 0x69, 0xCB, 0x65, 0xB6 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList15Provider[] = { + { -1, { 0x0000002D, 0x000002DD, { { 0x9F, 0x66, 0x50, 0xAC, 0xED, 0x0C, 0x63, 0x20, 0xE9, 0x4E, 0x4D, 0x3D, 0xC4, 0xBC, 0x94, 0x8A } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList16Provider[] = { + { -1, { 0x00000021, 0x0000036E, { { 0xA9, 0xDB, 0x1C, 0x35, 0xED, 0xED, 0xE4, 0x40, 0x68, 0x29, 0xB1, 0x6E, 0x60, 0xE4, 0xB0, 0xDB } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList17Provider[] = { + { -1, { 0x00000021, 0x000004D7, { { 0xC0, 0xB5, 0x7B, 0x94, 0xED, 0xD7, 0x48, 0x66, 0x37, 0x54, 0xE8, 0xFC, 0x0F, 0xA5, 0x54, 0x8A } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList18Provider[] = { + { -1, { 0x00000015, 0x000002FD, { { 0x0A, 0xDD, 0x81, 0xA8, 0x89, 0xD2, 0x53, 0x05, 0x25, 0xCC, 0x2B, 0x8B, 0x48, 0x1D, 0xAB, 0x0A } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList19Provider[] = { + { -1, { 0x00000015, 0x00000134, { { 0xCB, 0x0F, 0xA9, 0xD2, 0xD8, 0xEA, 0x2A, 0x1F, 0x16, 0x7B, 0x90, 0xE5, 0x72, 0xB3, 0x52, 0x50 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList20Provider[] = { + { -1, { 0x00000015, 0x00000396, { { 0x3B, 0xD8, 0xA5, 0xC5, 0x66, 0x3E, 0xC7, 0x88, 0xD0, 0x3B, 0x42, 0x29, 0x84, 0x58, 0xA7, 0x00 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList21Provider[] = { + { -1, { 0x00000015, 0x00000134, { { 0x96, 0x70, 0x7D, 0x5B, 0xC4, 0xBA, 0x89, 0x89, 0xC9, 0x42, 0xF4, 0x70, 0x33, 0xF5, 0xE8, 0x02 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList22Provider[] = { + { -1, { 0x00000015, 0x00000376, { { 0xA2, 0x92, 0x28, 0x65, 0xAB, 0xCC, 0x16, 0xE8, 0xA5, 0x72, 0x2F, 0x00, 0x66, 0x8F, 0x8D, 0x96 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList23Provider[] = { + { -1, { 0x00000015, 0x000002C2, { { 0x5C, 0x78, 0x74, 0x81, 0x76, 0xB5, 0x26, 0x8E, 0x20, 0xAE, 0x50, 0xCD, 0x2B, 0x9E, 0x81, 0x8B } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList24Provider[] = { + { -1, { 0x00000030, 0x00000472, { { 0xC6, 0xF0, 0xA6, 0x33, 0x7E, 0xAE, 0xBC, 0xF9, 0xAE, 0xE2, 0xF4, 0x7B, 0x71, 0x44, 0x50, 0xEF } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList25Provider[] = { + { -1, { 0x00000030, 0x000004CD, { { 0x57, 0x03, 0xB5, 0x27, 0x64, 0x48, 0xBF, 0x6A, 0x0F, 0xC2, 0xC0, 0x4A, 0x73, 0x9A, 0xFE, 0xB3 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList26Provider[] = { + { -1, { 0x00000030, 0x000004CA, { { 0xF8, 0x39, 0x8D, 0x6F, 0x8D, 0x9C, 0x6E, 0x0A, 0x33, 0xE8, 0xF2, 0xA6, 0xF6, 0x40, 0x70, 0xE5 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList27Provider[] = { + { -1, { 0x00000030, 0x000004D9, { { 0xF6, 0xD4, 0x88, 0x57, 0x6F, 0x1A, 0xA3, 0x1F, 0x6B, 0x17, 0x4D, 0xA0, 0x9E, 0xD8, 0x09, 0x66 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList28Provider[] = { + { -1, { 0x00000030, 0x0000051D, { { 0x59, 0x02, 0xE3, 0xC6, 0x28, 0xF6, 0xBC, 0xD4, 0xC8, 0x7E, 0x58, 0x6F, 0xE4, 0xA2, 0x28, 0x4F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList29Provider[] = { + { -1, { 0x00000030, 0x00000534, { { 0xC2, 0x26, 0x94, 0x47, 0x28, 0x11, 0xAA, 0xE6, 0x10, 0xA2, 0xD4, 0xD9, 0x61, 0x57, 0x62, 0x22 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList30Provider[] = { + { -1, { 0x0000003C, 0x00000453, { { 0xE1, 0x30, 0xC2, 0xCD, 0x79, 0xD8, 0x36, 0x8D, 0xAC, 0xF7, 0x87, 0x05, 0x49, 0xD7, 0x7A, 0x5F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList31Provider[] = { + { -1, { 0x00000027, 0x000002FB, { { 0xA6, 0x65, 0xE1, 0xE1, 0xCC, 0x71, 0x83, 0x63, 0x9A, 0x04, 0xE2, 0x00, 0xBF, 0x90, 0xDF, 0x95 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList32Provider[] = { + { -1, { 0x00000027, 0x0000016C, { { 0xAA, 0x88, 0x97, 0xE3, 0xCA, 0x06, 0x11, 0x07, 0x8F, 0xFA, 0x75, 0x26, 0xA8, 0x7A, 0x49, 0x28 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kPaletteList33Provider[] = { + { -1, { 0x0000003C, 0x0000094C, { { 0x2E, 0x5E, 0x34, 0x3E, 0x99, 0x61, 0x6F, 0x88, 0x91, 0xA7, 0x75, 0xAA, 0x42, 0x4B, 0x1F, 0x5D } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kGUIStringsProvider[] = { + { -1, { 0x000001DF, 0x00009042, { { 0x0D, 0xD3, 0x1A, 0x92, 0x8D, 0x9C, 0x72, 0x55, 0xEF, 0xFB, 0x81, 0x21, 0x3B, 0x43, 0xA7, 0xE8 } } } }, + { -1, { 0x00000209, 0x00009788, { { 0xDD, 0xA0, 0x5C, 0x30, 0x60, 0x68, 0xDC, 0x24, 0xBE, 0x3F, 0xA2, 0x31, 0xE0, 0x81, 0x6C, 0xCA } } } }, + { -1, { 0x00000261, 0x0000C538, { { 0xF3, 0xED, 0x5E, 0x73, 0x6F, 0x6E, 0x06, 0xF8, 0x48, 0xF8, 0x30, 0x69, 0x34, 0x5D, 0x99, 0x0C } } } }, + { -1, { 0x0000025D, 0x0000CBDC, { { 0x36, 0xF0, 0x92, 0x9C, 0x5F, 0xFF, 0x5D, 0x65, 0x5F, 0x0B, 0xC0, 0x72, 0x9F, 0x30, 0x47, 0xAB } } } }, + { -1, { 0x0000025D, 0x0000AFD0, { { 0x8E, 0x97, 0xA9, 0x55, 0x16, 0xF7, 0x42, 0x83, 0xA3, 0x68, 0x2F, 0xD6, 0x37, 0x1C, 0x9A, 0xD1 } } } }, + { -1, { 0x000001B0, 0x00009562, { { 0x78, 0xB0, 0x81, 0x15, 0x96, 0x09, 0x1E, 0x6C, 0x20, 0x7B, 0xF7, 0xB1, 0x29, 0x2A, 0x3D, 0xE4 } } } }, + { -1, { 0x00000236, 0x0000BA9C, { { 0xEB, 0xA6, 0x90, 0x9D, 0x99, 0x4B, 0x4F, 0xD9, 0xCE, 0xFF, 0x44, 0x3F, 0x77, 0x6F, 0xE1, 0x71 } } } }, + { -1, { 0x00000234, 0x0000C262, { { 0x08, 0x83, 0x32, 0x4E, 0x48, 0xEC, 0x83, 0x4B, 0x1B, 0x82, 0x58, 0x48, 0xA3, 0x30, 0x05, 0x33 } } } }, + { -1, { 0x00000225, 0x0000B0E1, { { 0x57, 0xE2, 0x39, 0xA8, 0xF5, 0x70, 0x48, 0xB4, 0x3D, 0xD4, 0x2A, 0x8C, 0x7C, 0x76, 0xB7, 0x8D } } } }, + { -1, { 0x0000023A, 0x0000C3BD, { { 0xED, 0x0D, 0xE7, 0x5B, 0xDC, 0x21, 0x41, 0x54, 0x68, 0x7D, 0x8E, 0x97, 0x1A, 0xB1, 0xA1, 0x4A } } } }, + { kFMTownsVersionE, { 0x000001FC, 0x00009D9A, { { 0xE8, 0x39, 0x46, 0x0A, 0x41, 0xC3, 0xDC, 0x33, 0x6E, 0xC5, 0x5D, 0x99, 0xCC, 0xF6, 0xDD, 0xCC } } } }, + { kFMTownsVersionJ, { 0x0000025F, 0x0000E56A, { { 0x77, 0x9A, 0x02, 0x52, 0xED, 0x62, 0x23, 0x5A, 0x58, 0x78, 0x19, 0x52, 0x03, 0xD7, 0x88, 0x40 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kConfigStringsProvider[] = { + { -1, { 0x0000002E, 0x00000FA1, { { 0x5E, 0xFF, 0xFF, 0x3D, 0xF8, 0x11, 0x6F, 0x3B, 0xC5, 0x39, 0x8F, 0x25, 0x8F, 0x0F, 0xE9, 0x2B } } } }, + { -1, { 0x00000061, 0x00002249, { { 0x5D, 0xE2, 0x05, 0xA7, 0xEC, 0x0A, 0x73, 0xF5, 0x01, 0x5B, 0x64, 0x71, 0x83, 0xEC, 0x56, 0x24 } } } }, + { -1, { 0x00000082, 0x00002E94, { { 0xC5, 0xDC, 0x44, 0x6C, 0x4B, 0x3E, 0x4E, 0x27, 0x0C, 0xCC, 0x65, 0x6C, 0x20, 0x8D, 0x71, 0x07 } } } }, + { -1, { 0x0000007A, 0x00002C37, { { 0x9E, 0xD8, 0x85, 0xB4, 0x9D, 0x32, 0x9D, 0x80, 0x58, 0xE4, 0x08, 0xC7, 0x75, 0xD2, 0x9C, 0x1E } } } }, + { -1, { 0x0000007A, 0x00002904, { { 0xD3, 0xD2, 0x96, 0x6E, 0xE7, 0xE8, 0x64, 0x77, 0x73, 0xCD, 0xC2, 0x9E, 0x57, 0xB5, 0xD3, 0xCD } } } }, + { -1, { 0x0000003F, 0x000016E9, { { 0x4F, 0x19, 0x60, 0x67, 0xA8, 0x31, 0x0B, 0xD5, 0x3D, 0x06, 0x39, 0xF1, 0x42, 0xB0, 0xFD, 0x5C } } } }, + { -1, { 0x0000005E, 0x00002280, { { 0xC7, 0xD2, 0x22, 0xB5, 0xD3, 0xBC, 0x7A, 0x97, 0x26, 0x04, 0x07, 0x78, 0xAA, 0xAB, 0x1D, 0x5C } } } }, + { -1, { 0x0000004B, 0x00001AE8, { { 0xE3, 0xC9, 0x0F, 0x54, 0x48, 0x31, 0x6E, 0x5F, 0x51, 0x8E, 0xF8, 0xE6, 0xAC, 0x16, 0xAC, 0x1C } } } }, + { -1, { 0x00000054, 0x00001E98, { { 0x10, 0x6B, 0x6B, 0x9B, 0x91, 0x05, 0xE9, 0x30, 0xE2, 0x75, 0xE2, 0x45, 0x79, 0x17, 0x73, 0xC9 } } } }, + { -1, { 0x0000004A, 0x00001B7B, { { 0x6B, 0x69, 0x50, 0x92, 0x9B, 0x35, 0x58, 0xE1, 0xEA, 0xBF, 0x42, 0x0B, 0xEB, 0x88, 0x41, 0x8D } } } }, + { kFMTownsVersionE, { 0x0000004A, 0x000016E9, { { 0x37, 0x12, 0xAD, 0x4C, 0xB8, 0x2C, 0xF5, 0x75, 0x20, 0x74, 0xA0, 0xFD, 0x58, 0xB1, 0x71, 0x77 } } } }, + { kFMTownsVersionJ, { 0x00000057, 0x00002262, { { 0xC5, 0x9A, 0x4A, 0xE3, 0xDF, 0xD3, 0x0E, 0x8E, 0xBB, 0xAF, 0x75, 0xD3, 0x67, 0xB1, 0xF6, 0x08 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kKyra1TownsSFXwdTableProvider[] = { + { -1, { 0x00012608, 0x006717A1, { { 0x34, 0xDD, 0x2D, 0xA5, 0x14, 0x05, 0xEE, 0x2F, 0x93, 0x7C, 0x78, 0x4D, 0xCA, 0x13, 0xED, 0x93 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kKyra1TownsSFXbtTableProvider[] = { + { -1, { 0x00000100, 0x00007FFE, { { 0xEF, 0x3D, 0x9F, 0x31, 0xE7, 0x19, 0x1E, 0x4F, 0xF3, 0x66, 0x42, 0xC8, 0x0D, 0x89, 0x96, 0x20 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kKyra1TownsCDATableProvider[] = { + { -1, { 0x000002C4, 0x0000C5ED, { { 0x76, 0x86, 0x77, 0xF9, 0x85, 0x23, 0x32, 0x56, 0x3C, 0x06, 0x03, 0xCF, 0x0C, 0x49, 0x94, 0xB5 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kCreditsStringsProvider[] = { + { -1, { 0x000004CC, 0x000182F7, { { 0x7D, 0x14, 0xA6, 0xEC, 0x12, 0x67, 0xAC, 0xA7, 0x7B, 0xF8, 0x44, 0x19, 0x52, 0xCC, 0x3A, 0x65 } } } }, + { -1, { 0x0000058C, 0x0001AD16, { { 0xFC, 0x1B, 0xE6, 0xEB, 0x03, 0x1C, 0x54, 0x93, 0x64, 0x53, 0xB1, 0x17, 0x9D, 0x95, 0x1B, 0x4A } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kAmigaIntroSFXTableProvider[] = { + { -1, { 0x00000140, 0x00000D82, { { 0x61, 0xF6, 0x8F, 0xE5, 0xCD, 0x15, 0x58, 0x9F, 0xDF, 0x0E, 0x22, 0xAA, 0x9A, 0xCF, 0xC4, 0xA6 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kAmigaGameSFXTableProvider[] = { + { -1, { 0x000003C0, 0x00005505, { { 0x8D, 0x6D, 0x2C, 0x58, 0x50, 0xF7, 0xBF, 0x60, 0xC3, 0x15, 0x20, 0x23, 0x1F, 0x90, 0x3E, 0xD6 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2SeqplayPakFilesProvider[] = { + { -1, { 0x00000046, 0x0000121A, { { 0x42, 0xC2, 0x5A, 0xDC, 0x27, 0x2D, 0xB4, 0x44, 0x85, 0x58, 0x0F, 0xB6, 0x6D, 0x76, 0x04, 0x4F } } } }, + { -1, { 0x00000014, 0x000004FA, { { 0xBB, 0x4C, 0x16, 0xEB, 0x56, 0xEF, 0xAC, 0x68, 0x6B, 0x49, 0x96, 0x3A, 0x9F, 0x00, 0x75, 0xF6 } } } }, + { -1, { 0x00000022, 0x000008E0, { { 0xB7, 0x3B, 0x51, 0x46, 0x78, 0x2D, 0x4D, 0x82, 0xD4, 0x30, 0xFC, 0x6E, 0xC4, 0x5B, 0x27, 0x3E } } } }, + { -1, { 0x0000002E, 0x00000C09, { { 0x6A, 0x25, 0xF6, 0x03, 0xA6, 0x88, 0xA0, 0x53, 0xE1, 0xF4, 0xB9, 0x0C, 0x71, 0x17, 0x36, 0x6B } } } }, + { -1, { 0x00000033, 0x00000BBD, { { 0x92, 0x5B, 0xDA, 0xE3, 0x7C, 0x39, 0xC4, 0x75, 0x24, 0xBA, 0x67, 0x27, 0x6E, 0x21, 0xA3, 0xF7 } } } }, + { -1, { 0x0000000C, 0x00000308, { { 0xC0, 0xAC, 0x10, 0xF1, 0x12, 0xD1, 0x21, 0x92, 0xA1, 0x62, 0x5B, 0x6E, 0xCF, 0x88, 0x32, 0x7C } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2SeqplayStringsProvider[] = { + { k2CDFile1E, { 0x00000916, 0x00031417, { { 0x3E, 0x15, 0xDA, 0xF4, 0x77, 0x44, 0x80, 0x47, 0xDB, 0x32, 0x0E, 0x6D, 0xCA, 0x32, 0x65, 0x1B } } } }, + { k2CDFile1F, { 0x000009C9, 0x00036324, { { 0x2C, 0xC2, 0xD9, 0xCF, 0x90, 0x2A, 0xDF, 0xE9, 0x85, 0x9E, 0x5D, 0xBB, 0x1D, 0x9A, 0x14, 0x69 } } } }, + { k2CDFile1G, { 0x00000A3F, 0x000389F4, { { 0x51, 0xC1, 0x87, 0x16, 0x53, 0x8C, 0x68, 0x8E, 0x9B, 0x81, 0xA1, 0xD2, 0xCE, 0x5F, 0x83, 0x31 } } } }, + { k2CDFile1I, { 0x00000916, 0x0003188F, { { 0xDC, 0x46, 0x06, 0xE1, 0xB0, 0x66, 0xBC, 0x18, 0x2E, 0x6E, 0x9E, 0xC9, 0xA4, 0x14, 0x8D, 0x08 } } } }, + { -1, { 0x000008C8, 0x0002FDE3, { { 0x62, 0xD1, 0x6F, 0xBC, 0xEC, 0xE6, 0xCF, 0xE8, 0xD8, 0xE9, 0xDE, 0xFB, 0x09, 0xAF, 0x34, 0x92 } } } }, + { -1, { 0x000009EC, 0x000370F9, { { 0x56, 0x94, 0xCC, 0xE5, 0x38, 0x19, 0xAD, 0xD1, 0xBB, 0x6A, 0x6E, 0xEC, 0xC5, 0x1B, 0x57, 0x7B } } } }, + { -1, { 0x00000995, 0x000352D7, { { 0xED, 0x7C, 0x49, 0x7B, 0x1A, 0x2C, 0x73, 0x61, 0x73, 0xAF, 0x16, 0x89, 0x1E, 0x01, 0xE2, 0xAE } } } }, + { -1, { 0x000008C8, 0x00030947, { { 0x7F, 0x75, 0x5F, 0x99, 0x94, 0xFE, 0xA1, 0xE6, 0xEF, 0xB8, 0x93, 0x71, 0x83, 0x1B, 0xAC, 0x4A } } } }, + { k2TownsFile1E, { 0x00000990, 0x00030C61, { { 0x60, 0x51, 0x11, 0x83, 0x3F, 0x06, 0xC3, 0xA3, 0xE0, 0xC0, 0x2F, 0x41, 0x29, 0xDE, 0x65, 0xB1 } } } }, + { k2TownsFile1J, { 0x000008A8, 0x00036831, { { 0x56, 0x5B, 0x23, 0x61, 0xE8, 0x3B, 0xE1, 0x36, 0xD6, 0x62, 0xD0, 0x84, 0x00, 0x04, 0x05, 0xAD } } } }, + { -1, { 0x00000102, 0x00005BD6, { { 0xB3, 0x00, 0xE5, 0x39, 0x02, 0x3D, 0xBF, 0xDD, 0x54, 0x70, 0xEA, 0xC1, 0xCB, 0xAC, 0xAA, 0xF7 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2SeqplaySfxFilesProvider[] = { + { -1, { 0x00000234, 0x0000B0B2, { { 0xE4, 0x19, 0x4F, 0x8C, 0x53, 0xFD, 0x5F, 0x2A, 0xFB, 0x77, 0x1C, 0x32, 0xB3, 0x39, 0x25, 0x85 } } } }, + { -1, { 0x000000DE, 0x00004EA4, { { 0x97, 0xA8, 0x4A, 0xED, 0x12, 0x87, 0xEB, 0x82, 0x42, 0xFA, 0x45, 0x0D, 0x45, 0x8F, 0xFE, 0x76 } } } }, + { -1, { 0x00000173, 0x00008198, { { 0x2D, 0xF5, 0x5C, 0xAE, 0xDB, 0x71, 0x60, 0xFE, 0x78, 0x04, 0xFC, 0xAD, 0x4B, 0x43, 0xB1, 0x4B } } } }, + { -1, { 0x000001A3, 0x00008098, { { 0xA9, 0xD2, 0xE2, 0x32, 0x59, 0xC4, 0x97, 0x74, 0x11, 0x49, 0x8F, 0x2B, 0xBF, 0x00, 0xF9, 0xF1 } } } }, + { -1, { 0x000000C5, 0x00004508, { { 0xBF, 0xA9, 0x1A, 0x37, 0x0B, 0xF8, 0x13, 0x9D, 0x2D, 0x67, 0x3D, 0x9B, 0xE9, 0x16, 0x07, 0x0C } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2SeqplayTlkFilesProvider[] = { + { k2CDFile1E, { 0x0000009D, 0x0000286B, { { 0x58, 0x30, 0x72, 0x62, 0xC8, 0x77, 0x2A, 0x06, 0xD6, 0x24, 0x1A, 0x7A, 0xAF, 0x79, 0xFF, 0xAE } } } }, + { k2CDFile1F, { 0x0000009D, 0x00002878, { { 0x28, 0x5D, 0x7F, 0x5B, 0x57, 0xC2, 0xFF, 0x73, 0xC1, 0x8E, 0xD6, 0xE0, 0x4D, 0x03, 0x99, 0x2C } } } }, + { k2CDFile1G, { 0x0000009D, 0x00002885, { { 0x87, 0x24, 0xB6, 0xE9, 0xD6, 0xAA, 0x68, 0x2D, 0x6B, 0x05, 0xDF, 0xE1, 0x2B, 0xA4, 0x79, 0xE5 } } } }, + { k2CDFile1I, { 0x0000009D, 0x0000286B, { { 0x58, 0x30, 0x72, 0x62, 0xC8, 0x77, 0x2A, 0x06, 0xD6, 0x24, 0x1A, 0x7A, 0xAF, 0x79, 0xFF, 0xAE } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2SeqplaySeqDataProvider[] = { + { -1, { 0x000006BE, 0x0000E9FF, { { 0x9A, 0xCD, 0x40, 0x44, 0xEF, 0x9F, 0x05, 0x86, 0xDA, 0x49, 0x8A, 0x85, 0x68, 0xDF, 0xA7, 0x55 } } } }, + { -1, { 0x0000027C, 0x00007742, { { 0x42, 0x37, 0xF8, 0xDD, 0xA2, 0x8C, 0xA6, 0x26, 0x89, 0x5F, 0xCF, 0x61, 0xDD, 0x8F, 0xC7, 0x1E } } } }, + { -1, { 0x000006F4, 0x0000F5AD, { { 0x23, 0x1E, 0x30, 0xF0, 0xF1, 0x5B, 0xFF, 0x4B, 0xDF, 0xB1, 0x78, 0xD8, 0x48, 0x7A, 0xA3, 0xDD } } } }, + { -1, { 0x000006F4, 0x0000F8A6, { { 0x8B, 0xF3, 0x80, 0xE1, 0xB8, 0xCA, 0xE1, 0x18, 0x72, 0xA3, 0xF0, 0x4C, 0xBF, 0x81, 0x97, 0x71 } } } }, + { -1, { 0x0000039E, 0x00009F90, { { 0x86, 0x54, 0xEF, 0xDC, 0xBB, 0x0B, 0x5C, 0x8B, 0x36, 0x37, 0xD2, 0x89, 0xD1, 0xDB, 0x36, 0xC8 } } } }, + { -1, { 0x000006F4, 0x0000FA35, { { 0x4C, 0x26, 0x1B, 0xF6, 0x8E, 0x73, 0xB7, 0xD2, 0x58, 0x59, 0xB8, 0x97, 0x58, 0xFB, 0x0E, 0x2A } } } }, + { -1, { 0x000006BC, 0x0000DCE3, { { 0x27, 0x09, 0x22, 0xDC, 0xED, 0xDE, 0x88, 0xAE, 0xDB, 0x97, 0x52, 0x12, 0x96, 0x8D, 0x8D, 0x37 } } } }, + { -1, { 0x0000024C, 0x00004C10, { { 0x21, 0x3A, 0x86, 0x60, 0xA8, 0xFF, 0x42, 0x19, 0x35, 0x32, 0xA5, 0xB9, 0x3A, 0xDD, 0xA9, 0xC7 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2SeqplayCreditsProvider[] = { + { -1, { 0x00000AE8, 0x0002E520, { { 0x19, 0x59, 0xEA, 0x70, 0x23, 0xE2, 0x41, 0x78, 0x2D, 0xF5, 0xE6, 0x28, 0xEA, 0x0C, 0xCF, 0x79 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2SeqplayCreditsSpecialProvider[] = { + { -1, { 0x0000001A, 0x00000829, { { 0xDF, 0x31, 0x0F, 0xB9, 0xC9, 0xC4, 0xF2, 0xB5, 0xF7, 0x98, 0x6F, 0x44, 0x4E, 0x9C, 0xFE, 0xA7 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2SeqplayIntroTracksProvider[] = { + { -1, { 0x00000008, 0x000002C9, { { 0xFA, 0x80, 0x3C, 0x78, 0x66, 0x2C, 0xD5, 0x91, 0x5D, 0xF1, 0xE9, 0xC1, 0x6A, 0x65, 0xEB, 0xD6 } } } }, + { -1, { 0x00000010, 0x00000542, { { 0xE5, 0xAA, 0x6A, 0xB9, 0x19, 0xAB, 0x35, 0x26, 0x43, 0x70, 0x32, 0xEF, 0xB9, 0x7F, 0x0F, 0x19 } } } }, + { -1, { 0x00000010, 0x00000592, { { 0xDE, 0xD9, 0x5E, 0xCA, 0x5A, 0x9F, 0x8B, 0xB1, 0xE2, 0xDB, 0xA4, 0xA1, 0xAF, 0xD4, 0x75, 0x46 } } } }, + { -1, { 0x00000000, 0x00000000, { { 0xD4, 0x1D, 0x8C, 0xD9, 0x8F, 0x00, 0xB2, 0x04, 0xE9, 0x80, 0x09, 0x98, 0xEC, 0xF8, 0x42, 0x7E } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2SeqplayFinaleTracksProvider[] = { + { -1, { 0x00000009, 0x0000030C, { { 0x24, 0x3F, 0x57, 0xFA, 0x7E, 0x6D, 0x61, 0x6C, 0x53, 0xBC, 0x44, 0x38, 0x61, 0xE9, 0x3E, 0xE6 } } } }, + { -1, { 0x00000012, 0x00000618, { { 0x22, 0x61, 0x4D, 0x6F, 0xCE, 0x38, 0x64, 0xAB, 0x20, 0xD8, 0x34, 0x33, 0x44, 0x21, 0xE0, 0x23 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2SeqplayIntroCDAProvider[] = { + { -1, { 0x00000018, 0x00000036, { { 0xCE, 0x10, 0x68, 0x7E, 0x84, 0x68, 0x3A, 0x23, 0x36, 0x41, 0x07, 0xE8, 0x59, 0xDB, 0xA3, 0x31 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2SeqplayFinaleCDAProvider[] = { + { -1, { 0x00000008, 0x000000AE, { { 0x38, 0x47, 0x35, 0xAA, 0xEC, 0xBA, 0xD3, 0xD0, 0x3E, 0x17, 0xFD, 0xB8, 0x9F, 0xB9, 0xAD, 0x61 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2SeqplayShapeAnimDataProvider[] = { + { -1, { 0x000000B8, 0x00000270, { { 0xBD, 0x3B, 0xFA, 0xE6, 0xA0, 0x40, 0x4E, 0x6E, 0x3E, 0x43, 0x81, 0xF3, 0x35, 0x57, 0x62, 0x27 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2IngamePakFilesProvider[] = { + { -1, { 0x0000049F, 0x00012F40, { { 0x4B, 0x2A, 0x84, 0xE3, 0xA5, 0x34, 0xE9, 0xB3, 0xB7, 0x39, 0xF1, 0x1B, 0x4C, 0xE6, 0x43, 0x79 } } } }, + { -1, { 0x0000007E, 0x00001E45, { { 0xC6, 0x52, 0xCC, 0x1A, 0x23, 0x3B, 0xDA, 0x03, 0xF3, 0xC2, 0x46, 0xDF, 0x01, 0xA3, 0x9E, 0x50 } } } }, + { -1, { 0x0000011C, 0x00003FB8, { { 0x66, 0x34, 0xE8, 0x1C, 0xF9, 0xFF, 0x84, 0x90, 0x20, 0x71, 0x42, 0xA3, 0x2C, 0x4A, 0xE9, 0x46 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2IngameSfxFilesProvider[] = { + { -1, { 0x000006F1, 0x0001545E, { { 0xD3, 0x8A, 0xA1, 0xD4, 0x83, 0x77, 0x96, 0x6D, 0x87, 0xB1, 0x71, 0x8F, 0x38, 0x6A, 0x34, 0xDC } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2IngameSfxFilesTnsProvider[] = { + { -1, { 0x00000967, 0x0002101A, { { 0x09, 0xC7, 0xB7, 0x2A, 0x76, 0xF1, 0x4B, 0x87, 0xC5, 0x83, 0xFF, 0xF3, 0xDB, 0x3C, 0x66, 0x60 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2IngameSfxIndexProvider[] = { + { -1, { 0x00000358, 0x000074F4, { { 0xC8, 0x30, 0x1D, 0x9C, 0xFC, 0xF8, 0xD5, 0xBA, 0x7E, 0xAB, 0x13, 0x3F, 0x43, 0x50, 0xFA, 0xC4 } } } }, + { -1, { 0x00000358, 0x0000747E, { { 0x20, 0x99, 0x4D, 0xB8, 0xF2, 0x05, 0xF2, 0xA7, 0x07, 0x28, 0x97, 0xFB, 0x70, 0x1F, 0x2A, 0x73 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2IngameTracksProvider[] = { + { -1, { 0x0000007E, 0x00001E45, { { 0xC6, 0x52, 0xCC, 0x1A, 0x23, 0x3B, 0xDA, 0x03, 0xF3, 0xC2, 0x46, 0xDF, 0x01, 0xA3, 0x9E, 0x50 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2IngameCDAProvider[] = { + { -1, { 0x00000130, 0x00001B9D, { { 0x9E, 0xFB, 0x01, 0xE7, 0xBA, 0xE1, 0x4F, 0x3C, 0xC5, 0xB9, 0x75, 0x80, 0xEA, 0xAC, 0xB0, 0x0F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2IngameTalkObjIndexProvider[] = { + { -1, { 0x00000084, 0x00000CD0, { { 0x82, 0x2E, 0xF4, 0xDD, 0x28, 0x75, 0xDD, 0x79, 0x78, 0x62, 0x55, 0x48, 0xDD, 0xF7, 0x16, 0x81 } } } }, + { -1, { 0x00000078, 0x00000A9C, { { 0x27, 0x65, 0xFA, 0xB1, 0xF8, 0x04, 0x7F, 0x93, 0x2B, 0x2D, 0x44, 0x3C, 0x95, 0x13, 0x50, 0xD2 } } } }, + { -1, { 0x00000078, 0x00000A53, { { 0x18, 0x5B, 0x79, 0x92, 0x54, 0xDB, 0x4B, 0x0C, 0x78, 0x89, 0x7C, 0x59, 0xBF, 0x53, 0x37, 0x14 } } } }, + { -1, { 0x00000078, 0x00000A7C, { { 0x33, 0x89, 0x69, 0xEF, 0x62, 0x94, 0x3A, 0xC0, 0xB2, 0xBA, 0xFB, 0x0C, 0x86, 0x2C, 0xAC, 0x5C } } } }, + { -1, { 0x0000007A, 0x00000744, { { 0x74, 0x84, 0xB4, 0xA6, 0x9D, 0x91, 0xBF, 0x24, 0x1E, 0xD5, 0xDE, 0xD4, 0x73, 0x93, 0x1F, 0xE6 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2IngameTimJpStringsProvider[] = { + { -1, { 0x0000002D, 0x00001302, { { 0x15, 0x29, 0xFD, 0xB1, 0xEB, 0xC0, 0x00, 0xA4, 0x19, 0xDA, 0xC7, 0x2E, 0x17, 0x0F, 0x3F, 0xB7 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2IngameItemAnimDataProvider[] = { + { -1, { 0x00000348, 0x0001AAEB, { { 0x67, 0xD1, 0x03, 0xBF, 0x4B, 0xEC, 0x80, 0x26, 0x5D, 0x1D, 0x0E, 0x5B, 0xF1, 0xE8, 0x4C, 0x64 } } } }, + { -1, { 0x00000348, 0x00002473, { { 0xBC, 0x18, 0x51, 0xFA, 0x51, 0x1D, 0x24, 0x7D, 0x44, 0xD0, 0xE2, 0x38, 0x31, 0x33, 0x3B, 0x56 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k2IngameTlkDemoStringsProvider[] = { + { k2CDDemoE, { 0x000000CB, 0x00004741, { { 0xF3, 0x54, 0x37, 0xEE, 0x61, 0x9E, 0xE0, 0x82, 0x64, 0x8B, 0xF3, 0x53, 0xC7, 0x2F, 0x49, 0x1F } } } }, + { k2CDDemoF, { 0x000000BE, 0x00004327, { { 0x8C, 0xF2, 0x5E, 0x85, 0xDA, 0xA1, 0x91, 0x90, 0xE5, 0xC7, 0x2A, 0xBA, 0x48, 0xC3, 0x9A, 0xCA } } } }, + { k2CDDemoG, { 0x000000DC, 0x00004C7B, { { 0xC9, 0x75, 0x3A, 0x4A, 0xF4, 0xB0, 0xE8, 0x61, 0x90, 0x74, 0x34, 0x84, 0x53, 0x54, 0xA2, 0x4F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k3MainMenuStringsProvider[] = { + { -1, { 0x000000B0, 0x00003E75, { { 0xA7, 0x91, 0x9B, 0x61, 0x31, 0x12, 0x74, 0xB5, 0x4B, 0x4F, 0x8A, 0x44, 0xA9, 0xB1, 0x03, 0xC0 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k3MusicFilesProvider[] = { + { -1, { 0x000001D5, 0x00007436, { { 0x27, 0xC2, 0x96, 0xFF, 0x22, 0xEC, 0xB5, 0x26, 0xF9, 0x4F, 0x04, 0xDD, 0x58, 0x17, 0xFE, 0xC6 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k3ScoreTableProvider[] = { + { -1, { 0x000000C8, 0x0000038F, { { 0x4E, 0x2E, 0xC3, 0xD9, 0x13, 0xA0, 0x74, 0x7E, 0xAB, 0xA1, 0x23, 0x2F, 0x11, 0x35, 0x4D, 0xA5 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k3SfxFilesProvider[] = { + { -1, { 0x000008BF, 0x0001A766, { { 0xBD, 0x5D, 0x65, 0x5D, 0xC4, 0x34, 0xDF, 0x36, 0xF5, 0xC0, 0xE8, 0x7B, 0x51, 0x9F, 0xE5, 0xC7 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k3SfxMapProvider[] = { + { -1, { 0x000004C0, 0x0000C4F9, { { 0x06, 0x61, 0x45, 0x38, 0xC2, 0x6A, 0x12, 0x23, 0x55, 0x2C, 0x7F, 0xA5, 0xE2, 0x79, 0x81, 0x9E } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k3ItemAnimDataProvider[] = { + { -1, { 0x000001C8, 0x00003777, { { 0x8F, 0xE8, 0x80, 0x4A, 0x88, 0x83, 0xC0, 0x48, 0x55, 0x47, 0x81, 0xD3, 0xB7, 0xD5, 0x09, 0x8F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k3ItemMagicTableProvider[] = { + { -1, { 0x00000048, 0x00000F9E, { { 0x87, 0xA7, 0xC0, 0xA2, 0x0F, 0xA3, 0x5B, 0x08, 0x76, 0x6F, 0x02, 0x68, 0x13, 0x17, 0x3B, 0x76 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData k3ItemStringMapProvider[] = { + { -1, { 0x00000048, 0x0000003C, { { 0x4C, 0xA7, 0xAA, 0xB0, 0x3C, 0xCC, 0x78, 0x91, 0x0A, 0xF2, 0x7F, 0x25, 0x80, 0xB3, 0x74, 0x74 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolSeqplayIntroTracksProvider[] = { + { -1, { 0x0000001A, 0x0000096C, { { 0xC2, 0xBD, 0x2C, 0x65, 0xD3, 0xFE, 0xF1, 0x6A, 0xE7, 0x34, 0x18, 0x0C, 0x86, 0x95, 0x66, 0x35 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolIngamePakFilesProvider[] = { + { -1, { 0x00000088, 0x0000224F, { { 0xDA, 0x24, 0x18, 0xA3, 0xEF, 0x16, 0x70, 0x8F, 0xA8, 0xC2, 0x2E, 0xC2, 0xED, 0x39, 0x03, 0xD1 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolCharacterDefsProvider[] = { + { -1, { 0x00000492, 0x000047FD, { { 0x8C, 0x0B, 0x8B, 0xCE, 0xE0, 0xB0, 0x8F, 0xA9, 0x06, 0xC3, 0x98, 0xE6, 0x2E, 0x09, 0xB6, 0x93 } } } }, + { -1, { 0x00000492, 0x00004ACD, { { 0xDF, 0x87, 0xFE, 0x89, 0x59, 0xCC, 0x01, 0xD7, 0xC7, 0xEB, 0x16, 0xA4, 0x09, 0xAF, 0x5D, 0xC0 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolIngameSfxFilesProvider[] = { + { -1, { 0x000008F2, 0x0001E5B6, { { 0x63, 0x5E, 0x37, 0xAA, 0x27, 0x80, 0x4C, 0x85, 0xB1, 0x9D, 0x7B, 0x1D, 0x64, 0xA3, 0xEB, 0x97 } } } }, + { -1, { 0x000008F2, 0x0001E5B7, { { 0x9E, 0xC8, 0xE8, 0x19, 0x2F, 0x58, 0x0B, 0xC7, 0x2D, 0x41, 0x72, 0xE7, 0xF4, 0x80, 0x03, 0xCB } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolIngameSfxIndexProvider[] = { + { -1, { 0x000003E8, 0x0000E8D2, { { 0x19, 0x39, 0x17, 0xED, 0xAE, 0xDC, 0x7A, 0xAC, 0x45, 0x5F, 0x2D, 0xCD, 0x65, 0x8D, 0xAD, 0xAE } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolMusicTrackMapProvider[] = { + { -1, { 0x000000F0, 0x0000210D, { { 0x55, 0x25, 0x3E, 0x35, 0xD2, 0xD8, 0x13, 0xE3, 0x1D, 0xB1, 0xB3, 0x00, 0x2E, 0x17, 0x91, 0x2F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolGMSfxIndexProvider[] = { + { -1, { 0x000000FA, 0x00006281, { { 0x25, 0x89, 0xB0, 0x3B, 0x12, 0x09, 0x02, 0xF6, 0xFE, 0x76, 0xD5, 0xC9, 0x5B, 0x88, 0xAC, 0xAA } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolMT32SfxIndexProvider[] = { + { -1, { 0x000000FA, 0x00006579, { { 0x16, 0x40, 0x1C, 0x09, 0x69, 0xA9, 0x0D, 0x6D, 0x4B, 0x0C, 0x99, 0xF0, 0x40, 0x5D, 0xBB, 0x6E } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolSpellPropertiesProvider[] = { + { -1, { 0x00000118, 0x00000B06, { { 0x27, 0x69, 0x53, 0x01, 0xA0, 0xE3, 0x76, 0xAA, 0x33, 0xA4, 0x52, 0x11, 0x52, 0xB1, 0x0E, 0xDA } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolGameShapeMapProvider[] = { + { -1, { 0x00000114, 0x000038D3, { { 0xB2, 0x8A, 0x5D, 0x9A, 0x51, 0x63, 0x4D, 0x65, 0xE4, 0xF5, 0xBA, 0x88, 0x70, 0x6C, 0xA6, 0xF8 } } } }, + { -1, { 0x00000114, 0x00003B97, { { 0x29, 0xE5, 0x0F, 0x51, 0xF0, 0x10, 0x35, 0x3E, 0x70, 0x3A, 0xAA, 0xFE, 0xD7, 0xD5, 0xAA, 0x9F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolSceneItemOffsProvider[] = { + { -1, { 0x00000008, 0x00000300, { { 0x69, 0x80, 0x5A, 0x3E, 0x63, 0xC1, 0x04, 0x60, 0x09, 0x2F, 0x49, 0xD7, 0x26, 0x32, 0xAA, 0xE2 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolCharInvIndexProvider[] = { + { -1, { 0x0000000A, 0x00000006, { { 0x19, 0x79, 0x4E, 0xFC, 0x05, 0x14, 0x89, 0x23, 0xEB, 0xCA, 0x94, 0x50, 0xE8, 0xD3, 0x81, 0x24 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolCharInvDefsProvider[] = { + { -1, { 0x00000058, 0x00001D7A, { { 0x25, 0xE4, 0xEB, 0x6D, 0xBE, 0xEA, 0xBD, 0x9A, 0x9F, 0xA5, 0x9E, 0xEB, 0x3D, 0x03, 0x1D, 0x72 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolCharDefsManProvider[] = { + { -1, { 0x00000012, 0x0000003D, { { 0xEB, 0x82, 0x32, 0x9D, 0x76, 0xC8, 0x3D, 0x5E, 0x8C, 0x26, 0x53, 0xDF, 0xC1, 0xFD, 0x0F, 0xC5 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolCharDefsWomanProvider[] = { + { -1, { 0x00000012, 0x0000003D, { { 0xEB, 0x82, 0x32, 0x9D, 0x76, 0xC8, 0x3D, 0x5E, 0x8C, 0x26, 0x53, 0xDF, 0xC1, 0xFD, 0x0F, 0xC5 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolCharDefsKieranProvider[] = { + { -1, { 0x00000012, 0x000002E3, { { 0xBF, 0xB1, 0x0F, 0x40, 0xBF, 0xA1, 0xD0, 0x2B, 0xC9, 0x80, 0x35, 0x40, 0xA9, 0xA3, 0x01, 0xC8 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolCharDefsAkshelProvider[] = { + { -1, { 0x00000012, 0x000002FB, { { 0x47, 0x3C, 0x07, 0x15, 0x20, 0xE6, 0x90, 0x59, 0x55, 0xF2, 0xA7, 0xC3, 0x27, 0x22, 0xAB, 0xDC } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolExpRequirementsProvider[] = { + { -1, { 0x0000002C, 0x00000C0A, { { 0x3F, 0x36, 0xFA, 0xE3, 0xB0, 0x76, 0x5E, 0xFF, 0xE9, 0xBA, 0xDF, 0xD0, 0x9D, 0xFF, 0xDD, 0x27 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolMonsterModifiersProvider[] = { + { -1, { 0x00000018, 0x000002C6, { { 0x38, 0x9A, 0x8B, 0x50, 0xD2, 0x9B, 0x95, 0x38, 0x91, 0x02, 0xA9, 0xBE, 0x78, 0xE5, 0x89, 0x65 } } } }, + { -1, { 0x00000018, 0x000002EE, { { 0x4E, 0x37, 0x56, 0xE3, 0x42, 0xB3, 0x15, 0x2C, 0x7E, 0x9B, 0x7E, 0x50, 0x32, 0x91, 0x55, 0xBE } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolMonsterLevelOffsetsProvider[] = { + { -1, { 0x00000020, 0x00000803, { { 0x30, 0x55, 0x74, 0x0D, 0xC7, 0x3B, 0xD9, 0x5C, 0x26, 0xF0, 0x4E, 0x8F, 0xE4, 0x4D, 0xCB, 0x2A } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolMonsterDirFlagsProvider[] = { + { -1, { 0x00000010, 0x00000080, { { 0xE5, 0xA1, 0xE3, 0xCE, 0xA0, 0x5F, 0x15, 0xE9, 0x5B, 0x28, 0x90, 0xC0, 0xDF, 0x21, 0xEC, 0x24 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolMonsterScaleYProvider[] = { + { -1, { 0x0000001E, 0x00000982, { { 0xE2, 0x71, 0x5F, 0x57, 0x4A, 0x8F, 0x50, 0xDB, 0x3E, 0xDA, 0xAB, 0x10, 0xEB, 0xDB, 0x0D, 0x14 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolMonsterScaleXProvider[] = { + { -1, { 0x00000020, 0x00000918, { { 0xF6, 0x14, 0xE6, 0x48, 0x4E, 0x5B, 0x43, 0xCC, 0xCE, 0x4E, 0x98, 0x71, 0x5A, 0xC2, 0x00, 0x1E } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolMonsterScaleWHProvider[] = { + { -1, { 0x00000082, 0x00001D2A, { { 0x85, 0x7E, 0x18, 0xDD, 0x74, 0x1C, 0x62, 0x6F, 0xF4, 0xE5, 0xAF, 0x65, 0xEC, 0x6A, 0x90, 0xAD } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolFlyingItemShpProvider[] = { + { -1, { 0x00000082, 0x00000252, { { 0xDE, 0x9D, 0x89, 0xAF, 0x0F, 0x50, 0x14, 0x60, 0x68, 0xAF, 0x19, 0xD8, 0x54, 0x8A, 0x36, 0x27 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolInventoryDescProvider[] = { + { -1, { 0x00000016, 0x0000082D, { { 0x86, 0xB4, 0xB9, 0x50, 0xB6, 0xDA, 0x29, 0xB2, 0xC0, 0x0D, 0x34, 0x3F, 0x8D, 0x88, 0xAA, 0xE4 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolLevelShpListProvider[] = { + { -1, { 0x0000007F, 0x00002090, { { 0x17, 0x31, 0x8A, 0xB5, 0x9B, 0x3A, 0xDA, 0x16, 0x9E, 0xE3, 0xD1, 0x5F, 0xB4, 0x7B, 0xB2, 0x25 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolLevelDatListProvider[] = { + { -1, { 0x0000007F, 0x00001FB8, { { 0xF6, 0xE9, 0x98, 0x79, 0x51, 0xCA, 0xA0, 0x35, 0xE4, 0xD0, 0xA1, 0xCD, 0x23, 0x89, 0x7D, 0x11 } } } }, + { -1, { 0x000000FF, 0x000047EC, { { 0x0D, 0xA5, 0xFD, 0x8A, 0x33, 0xDB, 0x93, 0x43, 0xE2, 0x57, 0x35, 0xEC, 0xA6, 0xCF, 0x7A, 0xA1 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolCompassDefsProvider[] = { + { -1, { 0x00000100, 0x000030EF, { { 0x6F, 0xF0, 0x46, 0x6E, 0xB3, 0x72, 0xCF, 0xC7, 0xE3, 0xAF, 0xBE, 0x63, 0xA1, 0x1C, 0x33, 0x20 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolItemPricesProvider[] = { + { -1, { 0x0000005C, 0x00001251, { { 0x18, 0x62, 0x5E, 0xE2, 0xE4, 0x2A, 0xB0, 0xA0, 0x8B, 0x8D, 0x9D, 0x07, 0x5F, 0x83, 0x53, 0xF7 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolStashSetupProvider[] = { + { -1, { 0x0000000C, 0x0000001E, { { 0x1C, 0x93, 0x66, 0x56, 0xDB, 0xD7, 0xA4, 0xB3, 0xE7, 0x2F, 0xEA, 0x88, 0xE2, 0xC8, 0x79, 0xD0 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscUnk1Provider[] = { + { -1, { 0x00000024, 0x00000A2A, { { 0xAC, 0x4E, 0x73, 0x2C, 0xB0, 0xEE, 0x24, 0x0E, 0x66, 0x8D, 0x48, 0xE5, 0xCA, 0x6B, 0x7F, 0x7F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscShapeIndex1Provider[] = { + { -1, { 0x00000024, 0x00000728, { { 0x14, 0xBA, 0x6D, 0x5C, 0x7D, 0x20, 0x0D, 0x35, 0xA7, 0xB0, 0x8D, 0x2F, 0x1D, 0x2A, 0x49, 0xA4 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscShapeIndex2Provider[] = { + { -1, { 0x0000000A, 0x0000001F, { { 0x9C, 0xF2, 0xCC, 0x48, 0x42, 0xC6, 0x76, 0x83, 0xD3, 0x1A, 0x43, 0x42, 0x7F, 0xEF, 0x19, 0x0F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscScaleWidthDataProvider[] = { + { -1, { 0x00000048, 0x00000ABE, { { 0x28, 0x9A, 0xAA, 0x16, 0xC4, 0xFD, 0x52, 0xA9, 0x76, 0x98, 0x72, 0x0C, 0x2D, 0xE4, 0xB0, 0x57 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscScaleHeightDataProvider[] = { + { -1, { 0x00000048, 0x000009E8, { { 0x25, 0x35, 0x07, 0xBC, 0xF9, 0x82, 0x8B, 0x5B, 0x67, 0x7C, 0x38, 0xD1, 0xF8, 0x35, 0x81, 0xC7 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscXProvider[] = { + { -1, { 0x00000048, 0x00001468, { { 0x55, 0xC5, 0x30, 0x76, 0x0A, 0xDC, 0xEC, 0xAB, 0x68, 0x9B, 0x61, 0xF0, 0x58, 0x78, 0x56, 0xA6 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscYProvider[] = { + { -1, { 0x00000024, 0x00000282, { { 0x09, 0x98, 0x3A, 0x33, 0x15, 0xA1, 0x4A, 0xFF, 0x76, 0x19, 0x2B, 0xB1, 0x74, 0x89, 0xF4, 0x37 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscTileIndexProvider[] = { + { -1, { 0x00000012, 0x00000099, { { 0x18, 0xD9, 0x39, 0x27, 0x5B, 0x34, 0xAE, 0x7C, 0xA9, 0xA9, 0xDB, 0x42, 0x49, 0x61, 0x6B, 0x37 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscUnk2Provider[] = { + { -1, { 0x00000017, 0x000000D2, { { 0xDE, 0xDA, 0x75, 0x15, 0x2B, 0xDC, 0x90, 0x3F, 0xC9, 0x92, 0x04, 0x01, 0x23, 0x7A, 0xDA, 0x2E } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscDoorShapeIndexProvider[] = { + { -1, { 0x00000017, 0x0000000A, { { 0x2E, 0xC4, 0xA1, 0x47, 0x7C, 0xAE, 0xAD, 0xD8, 0x8A, 0x72, 0x95, 0x2F, 0x18, 0xC5, 0x08, 0x19 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscDimData1Provider[] = { + { -1, { 0x00000144, 0x0001007D, { { 0x18, 0x3D, 0xA5, 0xF7, 0x1A, 0x5A, 0x90, 0xA7, 0x4E, 0x66, 0x1A, 0x4E, 0x0C, 0x69, 0x58, 0x31 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscDimData2Provider[] = { + { -1, { 0x00000289, 0x00001BC2, { { 0x7F, 0x9D, 0xD3, 0x5A, 0x57, 0x73, 0xEA, 0x37, 0x44, 0x5E, 0x1A, 0x88, 0xFB, 0xE8, 0xE8, 0x8F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscBlockMapProvider[] = { + { -1, { 0x0000000C, 0x00000012, { { 0x01, 0xEE, 0x32, 0xA6, 0x71, 0x15, 0x8D, 0xFB, 0x33, 0xF2, 0xD6, 0x8A, 0x30, 0x00, 0x10, 0x4B } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscDimMapProvider[] = { + { -1, { 0x00000012, 0x00000014, { { 0x4D, 0x53, 0x2E, 0xF2, 0xA3, 0xF9, 0xE2, 0xEC, 0x44, 0xBE, 0x5F, 0x04, 0x91, 0xF8, 0xE1, 0x04 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscShapeOvlIndexProvider[] = { + { -1, { 0x00000028, 0x00000048, { { 0x3E, 0x8E, 0x62, 0xAF, 0xD1, 0x28, 0x39, 0x73, 0x0D, 0xD8, 0x4A, 0xA7, 0xF4, 0xD7, 0x32, 0x25 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscBlockIndexProvider[] = { + { -1, { 0x00000048, 0x00002200, { { 0xF4, 0x8B, 0x32, 0xC3, 0xD3, 0xFB, 0x46, 0xF2, 0xB8, 0x3A, 0x58, 0x39, 0x94, 0x57, 0x97, 0x4B } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscDoor1Provider[] = { + { -1, { 0x00000080, 0x00000348, { { 0xC6, 0x58, 0x8B, 0xFE, 0x18, 0x72, 0x47, 0xF1, 0xB6, 0x3A, 0x0F, 0xFB, 0x3D, 0x99, 0x74, 0xD0 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscDoorScaleProvider[] = { + { -1, { 0x00000010, 0x0000024C, { { 0x8D, 0x83, 0x26, 0xEE, 0xDC, 0xF7, 0x13, 0xC0, 0xAA, 0x88, 0xC2, 0xAA, 0x66, 0xA7, 0x59, 0x41 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscDoor4Provider[] = { + { -1, { 0x00000008, 0x00000103, { { 0x29, 0xC0, 0x4B, 0x7F, 0x36, 0x23, 0xBB, 0x38, 0x4C, 0x83, 0xC6, 0x9D, 0xB4, 0x8F, 0x29, 0x2E } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscDoorXProvider[] = { + { -1, { 0x00000480, 0x0001654D, { { 0x2A, 0x1F, 0xBF, 0xE3, 0xC4, 0xEF, 0x7E, 0xD1, 0x61, 0x51, 0xFE, 0x88, 0x8D, 0x1F, 0x59, 0x70 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolDscDoorYProvider[] = { + { -1, { 0x00000480, 0x00026666, { { 0x06, 0xBF, 0xA4, 0xD4, 0x6E, 0x29, 0x42, 0xA2, 0xA0, 0x8E, 0x3C, 0x14, 0xF3, 0xD6, 0x3F, 0x87 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolScrollXTopProvider[] = { + { -1, { 0x0000000A, 0x0000004B, { { 0x18, 0x1E, 0x6E, 0xE9, 0x34, 0xF0, 0x02, 0xC6, 0x57, 0x34, 0xDF, 0x55, 0xD9, 0x39, 0xE8, 0x98 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolScrollYTopProvider[] = { + { -1, { 0x0000000A, 0x00000022, { { 0xF3, 0x20, 0x5A, 0xC1, 0xBB, 0x0C, 0x79, 0x52, 0x23, 0xC1, 0x36, 0x81, 0x70, 0x2F, 0x92, 0xFC } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolScrollXBottomProvider[] = { + { -1, { 0x0000000A, 0x0000004B, { { 0x18, 0x1E, 0x6E, 0xE9, 0x34, 0xF0, 0x02, 0xC6, 0x57, 0x34, 0xDF, 0x55, 0xD9, 0x39, 0xE8, 0x98 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolScrollYBottomProvider[] = { + { -1, { 0x0000000A, 0x0000003C, { { 0x5B, 0x4F, 0xB7, 0xB5, 0x55, 0xA2, 0x9A, 0x21, 0xEF, 0xB4, 0x98, 0x47, 0x05, 0x57, 0x49, 0x55 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolButtonDefsProvider[] = { + { -1, { 0x0000082A, 0x0000C34E, { { 0x7F, 0x9A, 0x0F, 0x28, 0x1A, 0x8F, 0x03, 0x46, 0x48, 0xEB, 0xC9, 0xB9, 0x23, 0x29, 0x5E, 0x50 } } } }, + { -1, { 0x0000082A, 0x0000C47B, { { 0xDF, 0x1A, 0x18, 0x1F, 0x58, 0x05, 0x1F, 0x56, 0xD8, 0x6D, 0xBB, 0x93, 0xEC, 0x35, 0x9D, 0xA5 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolButtonList1Provider[] = { + { -1, { 0x00000050, 0x00000A37, { { 0x0F, 0x73, 0xEC, 0xDD, 0xAB, 0xFF, 0x49, 0x46, 0x5E, 0x8F, 0x0D, 0xC3, 0xE7, 0x1B, 0x89, 0x51 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolButtonList2Provider[] = { + { -1, { 0x0000001E, 0x00000522, { { 0xEA, 0x41, 0x46, 0xE2, 0xFE, 0xAA, 0x7D, 0x5E, 0x89, 0x7F, 0xBF, 0x9B, 0x30, 0x60, 0x74, 0xF3 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolButtonList3Provider[] = { + { -1, { 0x00000004, 0x0000023E, { { 0x70, 0xAA, 0xCA, 0xAC, 0x5C, 0x21, 0xCF, 0xA5, 0xBF, 0x7F, 0x5F, 0xBC, 0xF1, 0x24, 0x8A, 0xAF } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolButtonList4Provider[] = { + { -1, { 0x0000001E, 0x0000054D, { { 0x19, 0x2A, 0xBE, 0x7F, 0x94, 0x10, 0xA0, 0x60, 0x2A, 0x33, 0xD6, 0x11, 0x85, 0xF0, 0xA4, 0xA9 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolButtonList5Provider[] = { + { -1, { 0x00000020, 0x0000045D, { { 0xE3, 0x7C, 0xC2, 0x36, 0x21, 0x46, 0xDB, 0xF3, 0xDD, 0x38, 0x4B, 0x40, 0xE0, 0x35, 0x09, 0xC3 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolButtonList6Provider[] = { + { -1, { 0x0000001C, 0x000004C4, { { 0x21, 0x7C, 0x29, 0x3F, 0x95, 0x6F, 0x91, 0x8C, 0xB2, 0x30, 0x09, 0xA6, 0x7B, 0x48, 0x44, 0x8F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolButtonList7Provider[] = { + { -1, { 0x00000006, 0x0000021D, { { 0xDC, 0xCE, 0x1B, 0xEB, 0x11, 0x6D, 0xDE, 0x37, 0x17, 0xC8, 0x06, 0x51, 0xC3, 0x0C, 0xCB, 0xA6 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolButtonList8Provider[] = { + { -1, { 0x00000004, 0x00000253, { { 0x0C, 0x7B, 0x10, 0x99, 0x93, 0xD0, 0x33, 0xCA, 0xAB, 0x8D, 0x7E, 0x24, 0xE5, 0x7E, 0x6C, 0x91 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolLegendDataProvider[] = { + { -1, { 0x0000003C, 0x00000A52, { { 0x81, 0xC5, 0xA4, 0xE7, 0x60, 0xDA, 0xD6, 0x5E, 0x19, 0xAB, 0xF3, 0xC7, 0xDD, 0xDB, 0x92, 0x5E } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolMapCursorOvlProvider[] = { + { -1, { 0x00000019, 0x000009CD, { { 0xF6, 0xD2, 0xFA, 0x36, 0x62, 0x95, 0x1D, 0x99, 0x7F, 0x11, 0x5F, 0xA8, 0x4D, 0x47, 0x72, 0x40 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolMapStringIdProvider[] = { + { -1, { 0x0000003C, 0x00000CFB, { { 0xE3, 0xC3, 0x41, 0x06, 0xD1, 0x71, 0x77, 0x78, 0xAD, 0x39, 0xAE, 0x2C, 0x16, 0x21, 0x45, 0xB7 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolSpellbookAnimProvider[] = { + { -1, { 0x00000038, 0x000003A1, { { 0x50, 0xA0, 0xF6, 0xA7, 0x53, 0x96, 0x86, 0x49, 0xB0, 0x8D, 0xA8, 0xB2, 0x2D, 0x9A, 0xE2, 0x1F } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolSpellbookCoordsProvider[] = { + { -1, { 0x00000018, 0x0000018F, { { 0xA5, 0xF6, 0x8A, 0x58, 0x9A, 0xC7, 0x3C, 0x3A, 0xB5, 0x87, 0x89, 0x87, 0x73, 0x51, 0x9B, 0x1B } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolHealShapeFramesProvider[] = { + { -1, { 0x00000050, 0x000000F4, { { 0xC9, 0x6E, 0x39, 0xE1, 0xD7, 0xAD, 0x10, 0x4F, 0xE2, 0xFE, 0xDC, 0xAD, 0x00, 0x9D, 0x41, 0xEF } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolLightningDefsProvider[] = { + { -1, { 0x00000014, 0x00000385, { { 0x68, 0x39, 0x65, 0xCB, 0xA9, 0x80, 0x90, 0xFB, 0xDD, 0x77, 0x0C, 0x76, 0x5A, 0xB5, 0x05, 0x03 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolFireballCoordsProvider[] = { + { -1, { 0x00000200, 0x0000FD81, { { 0xB3, 0xE0, 0x6F, 0x89, 0xCD, 0xE5, 0xA9, 0x6A, 0x4B, 0x61, 0x7A, 0x3F, 0x47, 0x26, 0x73, 0x58 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + +const ExtractEntrySearchData kLolHistoryProvider[] = { + { -1, { 0x000001D1, 0x00007F9B, { { 0x25, 0x10, 0x86, 0x40, 0xAC, 0x53, 0xFE, 0x11, 0x4D, 0xE2, 0xD9, 0x35, 0xD6, 0x89, 0xBB, 0x09 } } } }, + { -1, { 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } } +}; + diff --git a/tools/create_kyradat/towns.h b/tools/create_kyradat/towns.h deleted file mode 100644 index 4e632ec571..0000000000 --- a/tools/create_kyradat/towns.h +++ /dev/null @@ -1,122 +0,0 @@ -const ExtractEntry kyra1FMTownsE[] = { - { kKallakWritingSeq, 0x0002F1FF, 0x0002F9F6 }, - { kMalcolmTreeSeq, 0x0002FCC3, 0x0002FEDB }, - { kWestwoodLogoSeq, 0x0002FEDB, 0x0002FF26 }, - { kKyrandiaLogoSeq, 0x0002F9F7, 0x0002FA53 }, - { kKallakMalcolmSeq, 0x0002FA53, 0x0002FCC0 }, - { kForestSeq, 0x0002F067, 0x0002F1FD }, - { kIntroCPSStrings, 0x00027D5A, 0x00027D6F }, - { kIntroWSAStrings, 0x00027D72, 0x00027E05 }, - { kIntroCOLStrings, 0x00027E06, 0x00027E36 }, - { kIntroStrings, 0x00027E36, 0x0002837B }, - { kRoomList, 0x0002FF90, 0x00036478 }, - { kRoomFilenames, 0x00028B20, 0x00028E6C}, - { kCharacterImageFilenames, 0x0002606E, 0x00026165 }, - { kDefaultShapes, 0x00037CF9, 0x00038183 }, - { kItemNames, 0x00029724, 0x00029C29 }, - { kTakenStrings, 0x00028978, 0x00028994 }, - { kPlacedStrings, 0x000289A0, 0x000289A9 }, - { kDroppedStrings, 0x000289E4, 0x000289EE }, - { kNoDropStrings, 0x00027C0E, 0x00027C88 }, - { kAmuleteAnimSeq, 0x0002A814, 0x0002A83E }, - { kPaletteList1, 0x0002E80B, 0x0002E820 }, - { kPaletteList2, 0x0002E823, 0x0002E856 }, - { kPaletteList3, 0x0002E857, 0x0002E88A }, - { kPaletteList4, 0x0002E88B, 0x0002E8BE }, - { kPaletteList5, 0x0002E8BF, 0x0002E8F2 }, - { kPaletteList6, 0x0002E8F3, 0x0002E926 }, - { kPaletteList7, 0x0002E927, 0x0002E95D }, - { kPaletteList8, 0x0002E95F, 0x0002E995 }, - { kPaletteList9, 0x0002E997, 0x0002E9C4 }, - { kPaletteList10, 0x0002E9C7, 0x0002E9F4 }, - { kPaletteList11, 0x0002E9F7, 0x0002EA24 }, - { kPaletteList12, 0x0002EA27, 0x0002EA54 }, - { kPaletteList13, 0x0002EA54, 0x0002EA81 }, - { kPaletteList14, 0x0002EA87, 0x0002EAC3 }, - { kPaletteList15, 0x0002EAC3, 0x0002EAF0 }, - { kPaletteList16, 0x0002EAF3, 0x0002EB14 }, - { kPaletteList17, 0x0002EB17, 0x0002EB38 }, - { kPaletteList18, 0x0002EB3B, 0x0002EB50 }, - { kPaletteList19, 0x0002EB53, 0x0002EB68 }, - { kPaletteList20, 0x0002EB6B, 0x0002EB80 }, - { kPaletteList21, 0x0002EB83, 0x0002EB98 }, - { kPaletteList22, 0x0002EB9B, 0x0002EBB0 }, - { kPaletteList23, 0x0002EBB3, 0x0002EBC8 }, - { kPaletteList24, 0x0002EBCB, 0x0002EBFB }, - { kPaletteList25, 0x0002EBFB, 0x0002EC2B }, - { kPaletteList26, 0x0002EC2B, 0x0002EC5B }, - { kPaletteList27, 0x0002EC5B, 0x0002EC8B }, - { kPaletteList28, 0x0002EC8B, 0x0002ECBB }, - { kPaletteList29, 0x0002ECBB, 0x0002ECEB }, - { kPaletteList30, 0x0002ECEB, 0x0002ED27 }, - { kPaletteList31, 0x0002ED27, 0x0002ED4E }, - { kPaletteList32, 0x0002ED4F, 0x0002ED76 }, - { kPaletteList33, 0x0002ED77, 0x0002EDB3 }, - { kPutDownString, 0x00025BD6, 0x00025BFC }, - { kWaitAmuletString, 0x00025C2A, 0x00025C67 }, - { kBlackJewelString, 0x00025C96, 0x00025CB9 }, - { kHealingTipString, 0x00025CF2, 0x00025D1F }, - { kPoisonGoneString, 0x00025E06, 0x00025E42 }, - { kHealing1Shapes, 0x000381F1, 0x0003828B }, - { kHealing2Shapes, 0x0003828D, 0x0003835F }, - { kThePoisonStrings, 0x000294B8, 0x0002954A }, - { kFluteStrings, 0x00025B1E, 0x00025B78 }, - { kPoisonDeathShapes, 0x0003865D, 0x000386E9 }, - { kFluteShapes, 0x00038561, 0x0003865D }, - { kWinter1Shapes, 0x00038361, 0x00038392 }, - { kWinter2Shapes, 0x00038395, 0x0003848A }, - { kWinter3Shapes, 0x0003848D, 0x000384A9 }, - { kDrinkShapes, 0x00038185, 0x000381EF }, - { kWispShapes, 0x000384A9, 0x0003855F }, - { kMagicAnimShapes, 0x000386E9, 0x0003870C }, - { kBranStoneShapes, 0x0003870D, 0x00038770 }, - { kWispJewelStrings, 0x00025D4E, 0x00025DC3 }, - { kMagicJewelStrings, 0x00025DE2, 0x00025DF5 }, - { kFlaskFullString, 0x00029688, 0x000296A4 }, - { kFullFlaskString, 0x00029568, 0x00029605 }, - { kOutroReunionSeq, 0x0002B529, 0x0002BA70 }, - { kOutroHomeString, 0x00025F7E, 0x00025F83 }, - { kVeryCleverString, 0x00025F8E, 0x00025FC0 }, - { kGUIStrings, 0x000291E0, 0x000293DC }, - { kNewGameString, 0x0002919C, 0x000291B1 }, - { kConfigStrings, 0x00029360, 0x000293AA}, - { kKyra1TownsSFXwdTable, 0x0003A978, 0x0004CF80 }, - { kKyra1TownsSFXbtTable, 0x0003A878, 0x0003A978 }, - { kKyra1TownsCDATable, 0x0004D021, 0x0004D2E5 }, - { kAudioTracks, 0x00027B8E, 0x00027BEB }, - { kCreditsStrings, 0x0002AED8, 0x0002B464 }, - { -1, 0, 0 } -}; - -const ExtractEntry kyra1FMTownsJ[] = { - { kIntroStrings, 0x0002837C, 0x00028977 }, - { kItemNames, 0x00029C2C, 0x0002A1B3 }, - { kTakenStrings, 0x00028980, 0x0002899F }, - { kPlacedStrings, 0x000289AC, 0x000289B9 }, - { kDroppedStrings, 0x000289F0, 0x000289FB }, - { kNoDropStrings, 0x00027C3E, 0x00027C9F }, - { kPutDownString, 0x00025BFE, 0x00025C27 }, - { kWaitAmuletString, 0x00025C6A, 0x00025C93 }, - { kBlackJewelString, 0x00025CBA, 0x00025CEF }, - { kHealingTipString, 0x00025D22, 0x00025D4D }, - { kPoisonGoneString, 0x00025E12, 0x00025E4F }, - { kThePoisonStrings, 0x000294C8, 0x00029568 }, - { kFluteStrings, 0x00025B3E, 0x00025B91 }, - { kWispJewelStrings, 0x00025D7A, 0x00025DE1 }, - { kMagicJewelStrings, 0x00025DF6, 0x00025E05 }, - { kFlaskFullString, 0x000296A4, 0x000296C3 }, - { kFullFlaskString, 0x00029608, 0x00029685 }, - { kOutroHomeString, 0x00025F86, 0x00025F8D }, - { kVeryCleverString, 0x00025FC2, 0x00025FF1 }, - { kGUIStrings, 0x000368D1, 0x00036B30 }, - { kNewGameString, 0x000291B4, 0x000291CF}, - { kConfigStrings, 0x000290AC, 0x00029103 }, - { -1, 0, 0 } -}; - -const Game kyra1TownsGames[] = { - { kKyra1, EN_ANY, kFMTownsVersionE, "5a3ad60ccd0f2e29463e0368cd14a60d", kyra1FMTownsE }, - { kKyra1, JA_JPN, kFMTownsVersionJ, "5a3ad60ccd0f2e29463e0368cd14a60d", kyra1FMTownsJ }, - GAME_DUMMY_ENTRY -}; - |