- Got rid of hardcoded filename list for kyra.dat

- Synced static resource definitions between KYRA main codebase and create_kyradat
- Rebuilt kyra.dat

svn-id: r46047
This commit is contained in:
Johannes Schickel 2009-11-21 20:20:24 +00:00
parent e8c67bda4b
commit bf5ce985a0
9 changed files with 1098 additions and 1062 deletions

Binary file not shown.

View File

@ -102,6 +102,239 @@ protected:
enum KyraResources {
kLoadAll = -1,
// This list has to match orderwise (and thus value wise) the static data list of "tools/create_kyradat/create_kyradat.h"!
k1ForestSeq,
k1KallakWritingSeq,
k1KyrandiaLogoSeq,
k1KallakMalcolmSeq,
k1MalcolmTreeSeq,
k1WestwoodLogoSeq,
k1Demo1Seq,
k1Demo2Seq,
k1Demo3Seq,
k1Demo4Seq,
k1AmuleteAnimSeq,
k1OutroReunionSeq,
k1IntroCPSStrings,
k1IntroCOLStrings,
k1IntroWSAStrings,
k1IntroStrings,
k1OutroHomeString,
k1RoomFilenames,
k1RoomList,
k1CharacterImageFilenames,
k1ItemNames,
k1TakenStrings,
k1PlacedStrings,
k1DroppedStrings,
k1NoDropStrings,
k1PutDownString,
k1WaitAmuletString,
k1BlackJewelString,
k1PoisonGoneString,
k1HealingTipString,
k1WispJewelStrings,
k1MagicJewelStrings,
k1ThePoisonStrings,
k1FluteStrings,
k1FlaskFullString,
k1FullFlaskString,
k1VeryCleverString,
k1NewGameString,
k1DefaultShapes,
k1Healing1Shapes,
k1Healing2Shapes,
k1PoisonDeathShapes,
k1FluteShapes,
k1Winter1Shapes,
k1Winter2Shapes,
k1Winter3Shapes,
k1DrinkShapes,
k1WispShapes,
k1MagicAnimShapes,
k1BranStoneShapes,
k1SpecialPalette1,
k1SpecialPalette2,
k1SpecialPalette3,
k1SpecialPalette4,
k1SpecialPalette5,
k1SpecialPalette6,
k1SpecialPalette7,
k1SpecialPalette8,
k1SpecialPalette9,
k1SpecialPalette10,
k1SpecialPalette11,
k1SpecialPalette12,
k1SpecialPalette13,
k1SpecialPalette14,
k1SpecialPalette15,
k1SpecialPalette16,
k1SpecialPalette17,
k1SpecialPalette18,
k1SpecialPalette19,
k1SpecialPalette20,
k1SpecialPalette21,
k1SpecialPalette22,
k1SpecialPalette23,
k1SpecialPalette24,
k1SpecialPalette25,
k1SpecialPalette26,
k1SpecialPalette27,
k1SpecialPalette28,
k1SpecialPalette29,
k1SpecialPalette30,
k1SpecialPalette31,
k1SpecialPalette32,
k1SpecialPalette33,
k1GUIStrings,
k1ConfigStrings,
k1AudioTracks,
k1AudioTracksIntro,
k1CreditsStrings,
k1TownsSFXwdTable,
k1TownsSFXbtTable,
k1TownsCDATable,
k1PC98StoryStrings,
k1PC98IntroSfx,
k1AmigaIntroSFXTable,
k1AmigaGameSFXTable,
k2SeqplayPakFiles,
k2SeqplayCredits,
k2SeqplayCreditsSpecial,
k2SeqplayStrings,
k2SeqplaySfxFiles,
k2SeqplayTlkFiles,
k2SeqplaySeqData,
k2SeqplayIntroTracks,
k2SeqplayFinaleTracks,
k2SeqplayIntroCDA,
k2SeqplayFinaleCDA,
k2SeqplayShapeAnimData,
k2IngamePakFiles,
k2IngameSfxFiles,
k2IngameSfxIndex,
k2IngameTracks,
k2IngameCDA,
k2IngameTalkObjIndex,
k2IngameTimJpStrings,
k2IngameShapeAnimData,
k2IngameTlkDemoStrings,
k3MainMenuStrings,
k3MusicFiles,
k3ScoreTable,
k3SfxFiles,
k3SfxMap,
k3ItemAnimData,
k3ItemMagicTable,
k3ItemStringMap,
#ifdef ENABLE_LOL
kLolIngamePakFiles,
kLolCharacterDefs,
kLolIngameSfxFiles,
kLolIngameSfxIndex,
kLolMusicTrackMap,
kLolIngameGMSfxIndex,
kLolIngameMT32SfxIndex,
kLolIngamePcSpkSfxIndex,
kLolSpellProperties,
kLolGameShapeMap,
kLolSceneItemOffs,
kLolCharInvIndex,
kLolCharInvDefs,
kLolCharDefsMan,
kLolCharDefsWoman,
kLolCharDefsKieran,
kLolCharDefsAkshel,
kLolExpRequirements,
kLolMonsterModifiers,
kLolMonsterShiftOffsets,
kLolMonsterDirFlags,
kLolMonsterScaleY,
kLolMonsterScaleX,
kLolMonsterScaleWH,
kLolFlyingObjectShp,
kLolInventoryDesc,
kLolLevelShpList,
kLolLevelDatList,
kLolCompassDefs,
kLolItemPrices,
kLolStashSetup,
kLolDscUnk1,
kLolDscShapeIndex,
kLolDscOvlMap,
kLolDscScaleWidthData,
kLolDscScaleHeightData,
kLolDscX,
kLolDscY,
kLolDscTileIndex,
kLolDscUnk2,
kLolDscDoorShapeIndex,
kLolDscDimData1,
kLolDscDimData2,
kLolDscBlockMap,
kLolDscDimMap,
kLolDscDoor1,
kLolDscDoorScale,
kLolDscDoor4,
kLolDscDoorX,
kLolDscDoorY,
kLolDscOvlIndex,
kLolDscBlockIndex,
kLolScrollXTop,
kLolScrollYTop,
kLolScrollXBottom,
kLolScrollYBottom,
kLolButtonDefs,
kLolButtonList1,
kLolButtonList2,
kLolButtonList3,
kLolButtonList4,
kLolButtonList5,
kLolButtonList6,
kLolButtonList7,
kLolButtonList8,
kLolLegendData,
kLolMapCursorOvl,
kLolMapStringId,
kLolSpellbookAnim,
kLolSpellbookCoords,
kLolHealShapeFrames,
kLolLightningDefs,
kLolFireballCoords,
kLolCredits,
kLolHistory,
k1ForestSeq,
k1KallakWritingSeq,
k1KyrandiaLogoSeq,
@ -347,7 +580,7 @@ class StaticResource {
public:
static const Common::String staticDataFilename() { return "KYRA.DAT"; }
StaticResource(KyraEngine_v1 *vm) : _vm(vm), _resList(), _fileLoader(0), _builtIn(0), _filenameTable(0) {}
StaticResource(KyraEngine_v1 *vm) : _vm(vm), _resList(), _fileLoader(0), _builtIn(0), _dataTable(0) {}
~StaticResource() { deinit(); }
bool loadStaticResourceFile();
@ -390,27 +623,25 @@ private:
bool checkResList(int id, int &type, const void *&ptr, int &size);
const void *checkForBuiltin(int id, int &type, int &size);
const FilenameTable *searchFile(int id);
const FileType *getFiletype(int type);
const void *getData(int id, int requesttype, int &size);
bool loadLanguageTable(const char *filename, void *&ptr, int &size);
bool loadStringTable(const char *filename, void *&ptr, int &size);
bool loadRawData(const char *filename, void *&ptr, int &size);
bool loadShapeTable(const char *filename, void *&ptr, int &size);
bool loadAmigaSfxTable(const char *filename, void *&ptr, int &size);
bool loadRoomTable(const char *filename, void *&ptr, int &size);
bool loadHofSequenceData(const char *filename, void *&ptr, int &size);
bool loadShapeAnimData_v1(const char *filename, void *&ptr, int &size);
bool loadShapeAnimData_v2(const char *filename, void *&ptr, int &size);
bool loadStringTable(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadRawData(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadShapeTable(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadAmigaSfxTable(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadRoomTable(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadHofSequenceData(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadShapeAnimData_v1(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadShapeAnimData_v2(Common::SeekableReadStream &stream, void *&ptr, int &size);
#ifdef ENABLE_LOL
bool loadCharData(const char *filename, void *&ptr, int &size);
bool loadSpellData(const char *filename, void *&ptr, int &size);
bool loadCompassData(const char *filename, void *&ptr, int &size);
bool loadFlyingObjectData(const char *filename, void *&ptr, int &size);
bool loadRawDataBe16(const char *filename, void *&ptr, int &size);
bool loadRawDataBe32(const char *filename, void *&ptr, int &size);
bool loadButtonDefs(const char *filename, void *&ptr, int &size);
bool loadCharData(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadSpellData(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadCompassData(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadFlyingObjectData(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadRawDataBe16(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadRawDataBe32(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadButtonDefs(Common::SeekableReadStream &stream, void *&ptr, int &size);
#endif // ENABLE_LOL
void freeRawData(void *&ptr, int &size);
@ -435,24 +666,23 @@ private:
Common::SeekableReadStream *getFile(const char *name);
enum ResTypes {
kLanguageList,
kStringList,
kRoomList,
kShapeList,
kRawData,
kAmigaSfxTable,
kStringList = 0,
kRawData = 1,
kRoomList = 2,
kShapeList = 3,
kAmigaSfxTable = 4,
k2SeqData,
k2ShpAnimDataV1,
k2ShpAnimDataV2,
k2SeqData = 5,
k2ShpAnimDataV1 = 6,
k2ShpAnimDataV2 = 7,
kLolCharData,
kLolSpellData,
kLolCompassData,
kLolFlightShpData,
kLolRawDataBe16,
kLolRawDataBe32,
kLolButtonData
kLolCharData = 8,
kLolSpellData = 9,
kLolCompassData = 10,
kLolFlightShpData = 11,
kLolButtonData = 12,
kLolRawDataBe16 = 13,
kLolRawDataBe32 = 14
};
struct BuiltinRes {
@ -462,15 +692,9 @@ private:
const void *data;
};
struct FilenameTable {
int id;
int type;
const char *filename;
};
struct FileType {
int type;
typedef bool (StaticResource::*LoadFunc)(const char *filename, void *&ptr, int &size);
typedef bool (StaticResource::*LoadFunc)(Common::SeekableReadStream &stream, void *&ptr, int &size);
typedef void (StaticResource::*FreeFunc)(void *&ptr, int &size);
LoadFunc load;
@ -488,7 +712,7 @@ private:
const FileType *_fileLoader;
const BuiltinRes *_builtIn;
const FilenameTable *_filenameTable;
const int *_dataTable;
};
} // End of namespace Kyra

File diff suppressed because it is too large Load Diff

View File

@ -42,261 +42,257 @@
#include <map>
enum {
kKyraDatVersion = 65
kKyraDatVersion = 66
};
const ExtractFilename extractFilenames[] = {
// INTRO / OUTRO sequences
{ k1ForestSeq, kTypeRawData, "FOREST.SEQ" },
{ k1KallakWritingSeq, kTypeRawData, "KALLAK-WRITING.SEQ" },
{ k1KyrandiaLogoSeq, kTypeRawData, "KYRANDIA-LOGO.SEQ" },
{ k1KallakMalcolmSeq, kTypeRawData, "KALLAK-MALCOLM.SEQ" },
{ k1MalcolmTreeSeq, kTypeRawData, "MALCOLM-TREE.SEQ" },
{ k1WestwoodLogoSeq, kTypeRawData, "WESTWOOD-LOGO.SEQ" },
{ k1Demo1Seq, kTypeRawData, "DEMO1.SEQ" },
{ k1Demo2Seq, kTypeRawData, "DEMO2.SEQ" },
{ k1Demo3Seq, kTypeRawData, "DEMO3.SEQ" },
{ k1Demo4Seq, kTypeRawData, "DEMO4.SEQ" },
{ k1OutroReunionSeq, kTypeRawData, "REUNION.SEQ" },
{ k1ForestSeq, kTypeRawData, false },
{ k1KallakWritingSeq, kTypeRawData, false },
{ k1KyrandiaLogoSeq, kTypeRawData, false },
{ k1KallakMalcolmSeq, kTypeRawData, false },
{ k1MalcolmTreeSeq, kTypeRawData, false },
{ k1WestwoodLogoSeq, kTypeRawData, false },
{ k1Demo1Seq, kTypeRawData, false },
{ k1Demo2Seq, kTypeRawData, false },
{ k1Demo3Seq, kTypeRawData, false },
{ k1Demo4Seq, kTypeRawData, false },
{ k1OutroReunionSeq, kTypeRawData, false },
// INTRO / OUTRO strings
{ k1IntroCPSStrings, kTypeStringList, "INTRO-CPS.TXT" },
{ k1IntroCOLStrings, kTypeStringList, "INTRO-COL.TXT" },
{ k1IntroWSAStrings, kTypeStringList, "INTRO-WSA.TXT" },
{ k1IntroStrings, kTypeLanguageList, "INTRO-STRINGS" },
{ k1OutroHomeString, kTypeLanguageList, "HOME" },
{ k1IntroCPSStrings, kTypeStringList, false },
{ k1IntroCOLStrings, kTypeStringList, false },
{ k1IntroWSAStrings, kTypeStringList, false },
{ k1IntroStrings, kTypeStringList, true },
{ k1OutroHomeString, kTypeStringList, true },
// INGAME strings
{ k1ItemNames, kTypeLanguageList, "ITEMLIST" },
{ k1TakenStrings, kTypeLanguageList, "TAKEN" },
{ k1PlacedStrings, kTypeLanguageList, "PLACED" },
{ k1DroppedStrings, kTypeLanguageList, "DROPPED" },
{ k1NoDropStrings, kTypeLanguageList, "NODROP" },
{ k1PutDownString, kTypeLanguageList, "PUTDOWN" },
{ k1WaitAmuletString, kTypeLanguageList, "WAITAMUL" },
{ k1BlackJewelString, kTypeLanguageList, "BLACKJEWEL" },
{ k1PoisonGoneString, kTypeLanguageList, "POISONGONE" },
{ k1HealingTipString, kTypeLanguageList, "HEALINGTIP" },
{ k1ThePoisonStrings, kTypeLanguageList, "THEPOISON" },
{ k1FluteStrings, kTypeLanguageList, "FLUTE" },
{ k1WispJewelStrings, kTypeLanguageList, "WISPJEWEL" },
{ k1MagicJewelStrings, kTypeLanguageList, "MAGICJEWEL" },
{ k1FlaskFullString, kTypeLanguageList, "FLASKFULL" },
{ k1FullFlaskString, kTypeLanguageList, "FULLFLASK" },
{ k1VeryCleverString, kTypeLanguageList, "VERYCLEVER" },
{ k1NewGameString, kTypeLanguageList, "NEWGAME" },
{ k1ItemNames, kTypeStringList, true },
{ k1TakenStrings, kTypeStringList, true },
{ k1PlacedStrings, kTypeStringList, true },
{ k1DroppedStrings, kTypeStringList, true },
{ k1NoDropStrings, kTypeStringList, true },
{ k1PutDownString, kTypeStringList, true },
{ k1WaitAmuletString, kTypeStringList, true },
{ k1BlackJewelString, kTypeStringList, true },
{ k1PoisonGoneString, kTypeStringList, true },
{ k1HealingTipString, kTypeStringList, true },
{ k1ThePoisonStrings, kTypeStringList, true },
{ k1FluteStrings, kTypeStringList, true },
{ k1WispJewelStrings, kTypeStringList, true },
{ k1MagicJewelStrings, kTypeStringList, true },
{ k1FlaskFullString, kTypeStringList, true },
{ k1FullFlaskString, kTypeStringList, true },
{ k1VeryCleverString, kTypeStringList, true },
{ k1NewGameString, kTypeStringList, true },
// GUI strings table
{ k1GUIStrings, kTypeLanguageList, "GUISTRINGS" },
{ k1ConfigStrings, kTypeLanguageList, "CONFIGSTRINGS" },
{ k1GUIStrings, kTypeStringList, true },
{ k1ConfigStrings, kTypeStringList, true },
// ROOM table/filenames
{ k1RoomList, kTypeRoomList, "ROOM-TABLE.ROOM" },
{ k1RoomFilenames, kTypeStringList, "ROOM-FILENAMES.TXT" },
{ k1RoomList, kTypeRoomList, false },
{ k1RoomFilenames, kTypeStringList, false },
// SHAPE tables
{ k1DefaultShapes, kTypeShapeList, "SHAPES-DEFAULT.SHP" },
{ k1Healing1Shapes, kTypeShapeList, "HEALING.SHP" },
{ k1Healing2Shapes, kTypeShapeList, "HEALING2.SHP" },
{ k1PoisonDeathShapes, kTypeShapeList, "POISONDEATH.SHP" },
{ k1FluteShapes, kTypeShapeList, "FLUTE.SHP" },
{ k1Winter1Shapes, kTypeShapeList, "WINTER1.SHP" },
{ k1Winter2Shapes, kTypeShapeList, "WINTER2.SHP" },
{ k1Winter3Shapes, kTypeShapeList, "WINTER3.SHP" },
{ k1DrinkShapes, kTypeShapeList, "DRINK.SHP" },
{ k1WispShapes, kTypeShapeList, "WISP.SHP" },
{ k1MagicAnimShapes, kTypeShapeList, "MAGICANIM.SHP" },
{ k1BranStoneShapes, kTypeShapeList, "BRANSTONE.SHP" },
{ k1DefaultShapes, kTypeShapeList, false },
{ k1Healing1Shapes, kTypeShapeList, false },
{ k1Healing2Shapes, kTypeShapeList, false },
{ k1PoisonDeathShapes, kTypeShapeList, false },
{ k1FluteShapes, kTypeShapeList, false },
{ k1Winter1Shapes, kTypeShapeList, false },
{ k1Winter2Shapes, kTypeShapeList, false },
{ k1Winter3Shapes, kTypeShapeList, false },
{ k1DrinkShapes, kTypeShapeList, false },
{ k1WispShapes, kTypeShapeList, false },
{ k1MagicAnimShapes, kTypeShapeList, false },
{ k1BranStoneShapes, kTypeShapeList, false },
// IMAGE filename table
{ k1CharacterImageFilenames, kTypeStringList, "CHAR-IMAGE.TXT" },
{ k1CharacterImageFilenames, kTypeStringList, false },
// AUDIO filename table
{ k1AudioTracks, kTypeStringList, "TRACKS.TXT" },
{ k1AudioTracksIntro, kTypeStringList, "TRACKSINT.TXT" },
{ k1AudioTracks, kTypeStringList, false },
{ k1AudioTracksIntro, kTypeStringList, false },
// AMULET anim
{ k1AmuleteAnimSeq, kTypeRawData, "AMULETEANIM.SEQ" },
{ k1AmuleteAnimSeq, kTypeRawData, false },
// PALETTE table
{ k1SpecialPalette1, kTypeRawData, "PALTABLE1.PAL" },
{ k1SpecialPalette2, kTypeRawData, "PALTABLE2.PAL" },
{ k1SpecialPalette3, kTypeRawData, "PALTABLE3.PAL" },
{ k1SpecialPalette4, kTypeRawData, "PALTABLE4.PAL" },
{ k1SpecialPalette5, kTypeRawData, "PALTABLE5.PAL" },
{ k1SpecialPalette6, kTypeRawData, "PALTABLE6.PAL" },
{ k1SpecialPalette7, kTypeRawData, "PALTABLE7.PAL" },
{ k1SpecialPalette8, kTypeRawData, "PALTABLE8.PAL" },
{ k1SpecialPalette9, kTypeRawData, "PALTABLE9.PAL" },
{ k1SpecialPalette10, kTypeRawData, "PALTABLE10.PAL" },
{ k1SpecialPalette11, kTypeRawData, "PALTABLE11.PAL" },
{ k1SpecialPalette12, kTypeRawData, "PALTABLE12.PAL" },
{ k1SpecialPalette13, kTypeRawData, "PALTABLE13.PAL" },
{ k1SpecialPalette14, kTypeRawData, "PALTABLE14.PAL" },
{ k1SpecialPalette15, kTypeRawData, "PALTABLE15.PAL" },
{ k1SpecialPalette16, kTypeRawData, "PALTABLE16.PAL" },
{ k1SpecialPalette17, kTypeRawData, "PALTABLE17.PAL" },
{ k1SpecialPalette18, kTypeRawData, "PALTABLE18.PAL" },
{ k1SpecialPalette19, kTypeRawData, "PALTABLE19.PAL" },
{ k1SpecialPalette20, kTypeRawData, "PALTABLE20.PAL" },
{ k1SpecialPalette21, kTypeRawData, "PALTABLE21.PAL" },
{ k1SpecialPalette22, kTypeRawData, "PALTABLE22.PAL" },
{ k1SpecialPalette23, kTypeRawData, "PALTABLE23.PAL" },
{ k1SpecialPalette24, kTypeRawData, "PALTABLE24.PAL" },
{ k1SpecialPalette25, kTypeRawData, "PALTABLE25.PAL" },
{ k1SpecialPalette26, kTypeRawData, "PALTABLE26.PAL" },
{ k1SpecialPalette27, kTypeRawData, "PALTABLE27.PAL" },
{ k1SpecialPalette28, kTypeRawData, "PALTABLE28.PAL" },
{ k1SpecialPalette29, kTypeRawData, "PALTABLE29.PAL" },
{ k1SpecialPalette30, kTypeRawData, "PALTABLE30.PAL" },
{ k1SpecialPalette31, kTypeRawData, "PALTABLE31.PAL" },
{ k1SpecialPalette32, kTypeRawData, "PALTABLE32.PAL" },
{ k1SpecialPalette33, kTypeRawData, "PALTABLE33.PAL" },
{ k1SpecialPalette1, kTypeRawData, false },
{ k1SpecialPalette2, kTypeRawData, false },
{ k1SpecialPalette3, kTypeRawData, false },
{ k1SpecialPalette4, kTypeRawData, false },
{ k1SpecialPalette5, kTypeRawData, false },
{ k1SpecialPalette6, kTypeRawData, false },
{ k1SpecialPalette7, kTypeRawData, false },
{ k1SpecialPalette8, kTypeRawData, false },
{ k1SpecialPalette9, kTypeRawData, false },
{ k1SpecialPalette10, kTypeRawData, false },
{ k1SpecialPalette11, kTypeRawData, false },
{ k1SpecialPalette12, kTypeRawData, false },
{ k1SpecialPalette13, kTypeRawData, false },
{ k1SpecialPalette14, kTypeRawData, false },
{ k1SpecialPalette15, kTypeRawData, false },
{ k1SpecialPalette16, kTypeRawData, false },
{ k1SpecialPalette17, kTypeRawData, false },
{ k1SpecialPalette18, kTypeRawData, false },
{ k1SpecialPalette19, kTypeRawData, false },
{ k1SpecialPalette20, kTypeRawData, false },
{ k1SpecialPalette21, kTypeRawData, false },
{ k1SpecialPalette22, kTypeRawData, false },
{ k1SpecialPalette23, kTypeRawData, false },
{ k1SpecialPalette24, kTypeRawData, false },
{ k1SpecialPalette25, kTypeRawData, false },
{ k1SpecialPalette26, kTypeRawData, false },
{ k1SpecialPalette27, kTypeRawData, false },
{ k1SpecialPalette28, kTypeRawData, false },
{ k1SpecialPalette29, kTypeRawData, false },
{ k1SpecialPalette30, kTypeRawData, false },
{ k1SpecialPalette31, kTypeRawData, false },
{ k1SpecialPalette32, kTypeRawData, false },
{ k1SpecialPalette33, kTypeRawData, false },
// CREDITS (used in FM-TOWNS and AMIGA)
{ k1CreditsStrings, kTypeRawData, "CREDITS" },
{ k1CreditsStrings, kTypeRawData, false },
// FM-TOWNS specific
{ k1TOWNSSfxWDTable, kTypeTownsWDSfxTable, "SFXWDTABLE" },
{ k1TOWNSSfxBTTable, kTypeRawData, "SFXBTTABLE" },
{ k1TOWNSCDATable, kTypeRawData, "CDATABLE" },
{ k1TownsSFXwdTable, kTypeTownsWDSfxTable, false },
{ k1TownsSFXbtTable, kTypeRawData, false },
{ k1TownsCDATable, kTypeRawData, false },
// PC98 specific
{ k1PC98StoryStrings, kTypeLanguageList, "INTROSTORY" },
{ k1PC98IntroSfx, kTypeRawData, "INTROSFX" },
{ k1PC98StoryStrings, kTypeStringList, true },
{ k1PC98IntroSfx, kTypeRawData, false },
// AMIGA specific
{ k1AmigaIntroSFXTable, kTypeAmigaSfxTable, "SFXINTRO" },
{ k1AmigaGameSFXTable, kTypeAmigaSfxTable, "SFXGAME" },
{ k1AmigaIntroSFXTable, kTypeAmigaSfxTable, false },
{ k1AmigaGameSFXTable, kTypeAmigaSfxTable, false },
// HAND OF FATE
// Sequence Player
{ k2SeqplayPakFiles, kTypeStringList, "S_PAKFILES.TXT" },
{ k2SeqplayCredits, kTypeRawData, "S_CREDITS.TXT" },
{ k2SeqplayCreditsSpecial, kTypeStringList, "S_CREDITS2.TXT" },
{ k2SeqplayStrings, kTypeLanguageList, "S_STRINGS" },
{ k2SeqplaySfxFiles, k2TypeSoundList, "S_SFXFILES.TXT" },
{ k2SeqplayTlkFiles, k2TypeLangSoundList, "S_TLKFILES" },
{ k2SeqplaySeqData, k2TypeSeqData, "S_DATA.SEQ" },
{ k2SeqplayIntroTracks, kTypeStringList, "S_INTRO.TRA" },
{ k2SeqplayFinaleTracks, kTypeStringList, "S_FINALE.TRA" },
{ k2SeqplayIntroCDA, kTypeRawData, "S_INTRO.CDA" },
{ k2SeqplayFinaleCDA, kTypeRawData, "S_FINALE.CDA" },
{ k2SeqplayShapeAnimData, k2TypeShpDataV1, "S_DEMO.SHP" },
{ k2SeqplayPakFiles, kTypeStringList, false },
{ k2SeqplayCredits, kTypeRawData, false },
{ k2SeqplayCreditsSpecial, kTypeStringList, false },
{ k2SeqplayStrings, kTypeStringList, true },
{ k2SeqplaySfxFiles, k2TypeSoundList, false },
{ k2SeqplayTlkFiles, k2TypeLangSoundList, true },
{ k2SeqplaySeqData, k2TypeSeqData, false },
{ k2SeqplayIntroTracks, kTypeStringList, false },
{ k2SeqplayFinaleTracks, kTypeStringList, false },
{ k2SeqplayIntroCDA, kTypeRawData, false },
{ k2SeqplayFinaleCDA, kTypeRawData, false },
{ k2SeqplayShapeAnimData, k2TypeShpDataV1, false },
// Ingame
{ k2IngamePakFiles, kTypeStringList, "I_PAKFILES.TXT" },
{ k2IngameSfxFiles, k2TypeSize10StringList, "I_SFXFILES.TRA" },
{ k2IngameSfxFilesTns, k2TypeSoundList, "I_SFXFILES.TRA" },
{ k2IngameSfxIndex, kTypeRawData, "I_SFXINDEX.MAP" },
{ k2IngameTracks, kTypeStringList, "I_TRACKS.TRA" },
{ k2IngameCDA, kTypeRawData, "I_TRACKS.CDA" },
{ k2IngameTalkObjIndex, kTypeRawData, "I_TALKOBJECTS.MAP" },
{ k2IngameTimJpStrings, kTypeStringList, "I_TIMJPSTR.TXT" },
{ k2IngameItemAnimData, k2TypeShpDataV2, "I_INVANIM.SHP" },
{ k2IngameTlkDemoStrings, kTypeLanguageList, "I_TLKDEMO.TXT" },
{ k2IngamePakFiles, kTypeStringList, false },
{ k2IngameSfxFiles, k2TypeSize10StringList, false },
{ k2IngameSfxIndex, kTypeRawData, false },
{ k2IngameTracks, kTypeStringList, false },
{ k2IngameCDA, kTypeRawData, false },
{ k2IngameTalkObjIndex, kTypeRawData, false },
{ k2IngameTimJpStrings, kTypeStringList, false },
{ k2IngameShapeAnimData, k2TypeShpDataV2, false },
{ k2IngameTlkDemoStrings, kTypeStringList, true },
// MALCOLM'S REVENGE
{ k3MainMenuStrings, kTypeStringList, "MAINMENU.TXT" },
{ k3MusicFiles, k2TypeSoundList, "SCORE.TRA" },
{ k3ScoreTable, kTypeRawData, "SCORE.MAP" },
{ k3SfxFiles, k2TypeSfxList, "SFXFILES.TRA" },
{ k3SfxMap, k3TypeRaw16to8, "SFXINDEX.MAP" },
{ k3ItemAnimData, k3TypeShpData, "INVANIM.SHP" },
{ k3ItemMagicTable, k3TypeRaw16to8, "ITEMMAGIC.MAP" },
{ k3ItemStringMap, kTypeRawData, "ITEMSTRINGS.MAP" },
{ k3MainMenuStrings, kTypeStringList, false },
{ k3MusicFiles, k2TypeSoundList, false },
{ k3ScoreTable, kTypeRawData, false },
{ k3SfxFiles, k2TypeSfxList, false },
{ k3SfxMap, k3TypeRaw16to8, false },
{ k3ItemAnimData, k3TypeShpData, false },
{ k3ItemMagicTable, k3TypeRaw16to8, false },
{ k3ItemStringMap, kTypeRawData, false },
// LANDS OF LORE
// Demo Sequence Player
{ kLolSeqplayIntroTracks, k2TypeSoundList, "S_INTRO.TRA" },
// Ingame
{ kLolIngamePakFiles, kTypeStringList, "PAKFILES.TXT" },
{ kLolIngamePakFiles, kTypeStringList, false },
{ kLolCharacterDefs, kTypeRawData, "CHARACTER.DEF" },
{ kLolIngameSfxFiles, k2TypeSfxList, "SFXFILES.TRA" },
{ kLolIngameSfxIndex, kTypeRawData, "SFXINDEX.MAP" },
{ kLolMusicTrackMap, kTypeRawData, "MUSIC.MAP" },
{ kLolGMSfxIndex, kTypeRawData, "SFX_GM.MAP" },
{ kLolMT32SfxIndex, kTypeRawData, "SFX_MT32.MAP" },
{ kLolPcSpkSfxIndex, kTypeRawData, "SFX_PCS.MAP" },
{ kLolSpellProperties, kTypeRawData, "SPELLS.DEF" },
{ kLolGameShapeMap, kTypeRawData, "GAMESHP.MAP" },
{ kLolSceneItemOffs, kTypeRawData, "ITEMOFFS.DEF" },
{ kLolCharInvIndex, k3TypeRaw16to8, "CHARINV.MAP" },
{ kLolCharInvDefs, kTypeRawData, "CHARINV.DEF" },
{ kLolCharDefsMan, kLolTypeRaw16, "CHMAN.DEF" },
{ kLolCharDefsWoman, kLolTypeRaw16, "CHWOMAN.DEF" },
{ kLolCharDefsKieran, kLolTypeRaw16, "CHKIERAN.DEF" },
{ kLolCharDefsAkshel, kLolTypeRaw16, "CHAKSHEL.DEF" },
{ kLolExpRequirements, kLolTypeRaw32, "EXPERIENCE.DEF" },
{ kLolMonsterModifiers, kLolTypeRaw16, "MONSTMOD.DEF" },
{ kLolMonsterLevelOffsets, kTypeRawData, "MONSTLVL.DEF" },
{ kLolMonsterDirFlags, kTypeRawData, "MONSTDIR.DEF" },
{ kLolMonsterScaleY, kTypeRawData, "MONSTZY.DEF" },
{ kLolMonsterScaleX, kTypeRawData, "MONSTZX.DEF" },
{ kLolMonsterScaleWH, kLolTypeRaw16, "MONSTSCL.DEF" },
{ kLolFlyingItemShp, k3TypeRaw16to8, "THRWNSHP.DEF" },
{ kLolInventoryDesc, kLolTypeRaw16, "INVDESC.DEF" },
{ kLolLevelShpList, kTypeStringList, "SHPFILES.TXT" },
{ kLolLevelDatList, kTypeStringList, "DATFILES.TXT" },
{ kLolCompassDefs, k3TypeRaw16to8, "COMPASS.DEF" },
{ kLolItemPrices, kLolTypeRaw16, "ITEMCOST.DEF" },
{ kLolStashSetup, kTypeRawData, "MONEYSTS.DEF" },
{ kLolCharacterDefs, kLolTypeCharData, false },
{ kLolIngameSfxFiles, k2TypeSfxList, false },
{ kLolIngameSfxIndex, kTypeRawData, false },
{ kLolMusicTrackMap, kTypeRawData, false },
{ kLolIngameGMSfxIndex, kTypeRawData, false },
{ kLolIngameMT32SfxIndex, kTypeRawData, false },
{ kLolIngamePcSpkSfxIndex, kTypeRawData, false },
{ kLolSpellProperties, kLolTypeSpellData, false },
{ kLolGameShapeMap, kTypeRawData, false },
{ kLolSceneItemOffs, kTypeRawData, false },
{ kLolCharInvIndex, k3TypeRaw16to8, false },
{ kLolCharInvDefs, kTypeRawData, false },
{ kLolCharDefsMan, kLolTypeRaw16, false },
{ kLolCharDefsWoman, kLolTypeRaw16, false },
{ kLolCharDefsKieran, kLolTypeRaw16, false },
{ kLolCharDefsAkshel, kLolTypeRaw16, false },
{ kLolExpRequirements, kLolTypeRaw32, false },
{ kLolMonsterModifiers, kLolTypeRaw16, false },
{ kLolMonsterShiftOffsets, kTypeRawData, false },
{ kLolMonsterDirFlags, kTypeRawData, false },
{ kLolMonsterScaleY, kTypeRawData, false },
{ kLolMonsterScaleX, kTypeRawData, false },
{ kLolMonsterScaleWH, kLolTypeRaw16, false },
{ kLolFlyingObjectShp, kLolTypeFlightShpData, false },
{ kLolInventoryDesc, kLolTypeRaw16, false },
{ kLolLevelShpList, kTypeStringList, false },
{ kLolLevelDatList, kTypeStringList, false },
{ kLolCompassDefs, kLolTypeCompassData, false },
{ kLolItemPrices, kLolTypeRaw16, false },
{ kLolStashSetup, kTypeRawData, false },
{ kLolDscUnk1, kTypeRawData, "DSCSHPU1.DEF" },
{ kLolDscShapeIndex1, kTypeRawData, "DSCSHPI1.DEF" },
{ kLolDscShapeIndex2, kTypeRawData, "DSCSHPI2.DEF" },
{ kLolDscScaleWidthData, kLolTypeRaw16, "DSCSHPW.DEF" },
{ kLolDscScaleHeightData, kLolTypeRaw16, "DSCSHPH.DEF" },
{ kLolDscX, kLolTypeRaw16, "DSCSHPX.DEF" },
{ kLolDscY, kTypeRawData, "DSCSHPY.DEF" },
{ kLolDscTileIndex, kTypeRawData, "DSCSHPT.DEF" },
{ kLolDscUnk2, kTypeRawData, "DSCSHPU2.DEF" },
{ kLolDscDoorShapeIndex, kTypeRawData, "DSCDOOR.DEF" },
{ kLolDscDimData1, kTypeRawData, "DSCDIM1.DEF" },
{ kLolDscDimData2, kTypeRawData, "DSCDIM2.DEF" },
{ kLolDscBlockMap, kTypeRawData, "DSCBLOCK1.DEF" },
{ kLolDscDimMap, kTypeRawData, "DSCDIM.DEF" },
{ kLolDscDoorScale, kLolTypeRaw16, "DSCDOOR3.DEF" },
{ kLolDscShapeOvlIndex, k3TypeRaw16to8, "DSCBLOCK2.DEF" },
{ kLolDscBlockIndex, kTypeRawData, "DSCBLOCKX.DEF" },
{ kLolDscDoor4, kLolTypeRaw16, "DSCDOOR4.DEF" },
{ kLolDscDoor1, kTypeRawData, "DSCDOOR1.DEF" },
{ kLolDscDoorX, kLolTypeRaw16, "DSCDOORX.DEF" },
{ kLolDscDoorY, kLolTypeRaw16, "DSCDOORY.DEF" },
{ kLolDscUnk1, kTypeRawData, false },
{ kLolDscShapeIndex, kTypeRawData, false },
{ kLolDscOvlMap, kTypeRawData, false },
{ kLolDscScaleWidthData, kLolTypeRaw16, false },
{ kLolDscScaleHeightData, kLolTypeRaw16, false },
{ kLolDscX, kLolTypeRaw16, false },
{ kLolDscY, kTypeRawData, false },
{ kLolDscTileIndex, kTypeRawData, false },
{ kLolDscUnk2, kTypeRawData, false },
{ kLolDscDoorShapeIndex, kTypeRawData, false },
{ kLolDscDimData1, kTypeRawData, false },
{ kLolDscDimData2, kTypeRawData, false },
{ kLolDscBlockMap, kTypeRawData, false },
{ kLolDscDimMap, kTypeRawData, false },
{ kLolDscDoorScale, kLolTypeRaw16, false },
{ kLolDscOvlIndex, k3TypeRaw16to8, false },
{ kLolDscBlockIndex, kTypeRawData, false },
{ kLolDscDoor4, kLolTypeRaw16, false },
{ kLolDscDoor1, kTypeRawData, false },
{ kLolDscDoorX, kLolTypeRaw16, false },
{ kLolDscDoorY, kLolTypeRaw16, false },
{ kLolScrollXTop, k3TypeRaw16to8, "SCROLLXT.DEF" },
{ kLolScrollYTop, k3TypeRaw16to8, "SCROLLYT.DEF" },
{ kLolScrollXBottom, k3TypeRaw16to8, "SCROLLXB.DEF" },
{ kLolScrollYBottom, k3TypeRaw16to8, "SCROLLYB.DEF" },
{ kLolScrollXTop, k3TypeRaw16to8, false },
{ kLolScrollYTop, k3TypeRaw16to8, false },
{ kLolScrollXBottom, k3TypeRaw16to8, false },
{ kLolScrollYBottom, k3TypeRaw16to8, false },
{ kLolButtonDefs, kLolTypeButtonDef, "BUTTONS.DEF" },
{ kLolButtonList1, kLolTypeRaw16, "BUTTON1.LST" },
{ kLolButtonList2, kLolTypeRaw16, "BUTTON2.LST" },
{ kLolButtonList3, kLolTypeRaw16, "BUTTON3.LST" },
{ kLolButtonList4, kLolTypeRaw16, "BUTTON4.LST" },
{ kLolButtonList5, kLolTypeRaw16, "BUTTON5.LST" },
{ kLolButtonList6, kLolTypeRaw16, "BUTTON6.LST" },
{ kLolButtonList7, kLolTypeRaw16, "BUTTON7.LST" },
{ kLolButtonList8, kLolTypeRaw16, "BUTTON84.LST" },
{ kLolButtonDefs, kLolTypeButtonDef, false },
{ kLolButtonList1, kLolTypeRaw16, false },
{ kLolButtonList2, kLolTypeRaw16, false },
{ kLolButtonList3, kLolTypeRaw16, false },
{ kLolButtonList4, kLolTypeRaw16, false },
{ kLolButtonList5, kLolTypeRaw16, false },
{ kLolButtonList6, kLolTypeRaw16, false },
{ kLolButtonList7, kLolTypeRaw16, false },
{ kLolButtonList8, kLolTypeRaw16, false },
{ kLolLegendData, kTypeRawData, "MAPLGND.DEF" },
{ kLolMapCursorOvl, kTypeRawData, "MAPCURSOR.PAL" },
{ kLolMapStringId, kLolTypeRaw16, "MAPSTRID.LST" },
{ kLolLegendData, kTypeRawData, false },
{ kLolMapCursorOvl, kTypeRawData, false },
{ kLolMapStringId, kLolTypeRaw16, false },
{ kLolSpellbookAnim, k3TypeRaw16to8, "MBOOKA.DEF" },
{ kLolSpellbookCoords, k3TypeRaw16to8, "MBOOKC.DEF" },
{ kLolHealShapeFrames, kTypeRawData, "MHEAL.SHP" },
{ kLolLightningDefs, kTypeRawData, "MLGHTNG.DEF" },
{ kLolFireballCoords, kLolTypeRaw16, "MFIREBLL.DEF" },
{ kLolSpellbookAnim, k3TypeRaw16to8, false },
{ kLolSpellbookCoords, k3TypeRaw16to8, false },
{ kLolHealShapeFrames, kTypeRawData, false },
{ kLolLightningDefs, kTypeRawData, false },
{ kLolFireballCoords, kLolTypeRaw16, false },
{ kLolCredits, kTypeRawData, "LOLCREDITS" },
{ kLolCredits, kTypeRawData, false },
{ kLolHistory, kTypeRawData, "HISTORY.FLS" },
{ kLolHistory, kTypeRawData, false },
{ -1, 0, 0 }
};
@ -309,59 +305,16 @@ const ExtractFilename *getFilenameDesc(const int id) {
return 0;
}
// filename processing
bool getFilename(char *dstFilename, const ExtractInformation *info, const int id) {
const ExtractFilename *i = getFilenameDesc(id);
if (!i)
bool isLangSpecific(const int id) {
const ExtractFilename *desc = getFilenameDesc(id);
if (!desc)
return false;
const ExtractType *type = findExtractType(i->type);
type->createFilename(dstFilename, info, i->filename);
return true;
return desc->langSpecific;
}
// misc tables
const SpecialExtension specialTable[] = {
{ kTalkieVersion, "CD" },
{ kDemoVersion, "DEM" },
{ kTalkieDemoVersion, "CD.DEM" },
{ -1, 0 }
};
const Language languageTable[] = {
{ EN_ANY, "ENG" },
{ DE_DEU, "GER" },
{ FR_FRA, "FRE" },
{ IT_ITA, "ITA" },
{ ES_ESP, "SPA" },
{ JA_JPN, "JPN" },
{ -1, 0 }
};
const PlatformExtension platformTable[] = {
{ kPlatformAmiga, "AMG" },
{ kPlatformFMTowns, "TNS" },
{ kPlatformPC98, "98" },
{ -1, 0 }
};
// index generation
struct IndexTable {
int type;
int value;
bool operator==(int t) const {
return (type == t);
}
};
const IndexTable iGameTable[] = {
const TypeTable gameTable[] = {
{ kKyra1, 0 },
{ kKyra2, 1 },
{ kKyra3, 2 },
@ -370,10 +323,10 @@ const IndexTable iGameTable[] = {
};
byte getGameID(int game) {
return std::find(iGameTable, iGameTable + ARRAYSIZE(iGameTable) - 1, game)->value;
return std::find(gameTable, gameTable + ARRAYSIZE(gameTable), game)->value;
}
/*const IndexTable iLanguageTable[] = {
const TypeTable languageTable[] = {
{ EN_ANY, 0 },
{ FR_FRA, 1 },
{ DE_DEU, 2 },
@ -384,10 +337,10 @@ byte getGameID(int game) {
};
byte getLanguageID(int lang) {
return std::find(iLanguageTable, iLanguageTable + ARRAYSIZE(iLanguageTable) - 1, lang)->value;
}*/
return std::find(languageTable, languageTable + ARRAYSIZE(languageTable), lang)->value;
}
const IndexTable iPlatformTable[] = {
const TypeTable platformTable[] = {
{ kPlatformPC, 0 },
{ kPlatformAmiga, 1 },
{ kPlatformFMTowns, 2 },
@ -397,10 +350,10 @@ const IndexTable iPlatformTable[] = {
};
byte getPlatformID(int platform) {
return std::find(iPlatformTable, iPlatformTable + ARRAYSIZE(iPlatformTable) - 1, platform)->value;
return std::find(platformTable, platformTable + ARRAYSIZE(platformTable), platform)->value;
}
const IndexTable iSpecialTable[] = {
const TypeTable specialTable[] = {
{ kNoSpecial, 0 },
{ kTalkieVersion, 1 },
{ kDemoVersion, 2 },
@ -409,9 +362,27 @@ const IndexTable iSpecialTable[] = {
};
byte getSpecialID(int special) {
return std::find(iSpecialTable, iSpecialTable + ARRAYSIZE(iSpecialTable) - 1, special)->value;
return std::find(specialTable, specialTable + ARRAYSIZE(specialTable), special)->value;
}
// filename processing
bool getFilename(char *dstFilename, const ExtractInformation *info, const int id) {
const ExtractFilename *i = getFilenameDesc(id);
if (!i)
return false;
// GAME, PLATFORM, SPECIAL, TYPE, ID[, LANG]
if (i->langSpecific)
sprintf(dstFilename, "%01X%01X%01X%02X%03X%01X", getGameID(info->game), getPlatformID(info->platform), getSpecialID(info->special), getTypeID(i->type), id, getLanguageID(info->lang));
else
sprintf(dstFilename, "%01X%01X%01X%02X%03X", getGameID(info->game), getPlatformID(info->platform), getSpecialID(info->special), getTypeID(i->type), id);
return true;
}
// index generation
typedef uint16 GameDef;
GameDef createGameDef(const ExtractInformation *eI) {
@ -910,12 +881,12 @@ const char *getIdString(const int id) {
return "k1GUIStrings";
case k1ConfigStrings:
return "k1ConfigStrings";
case k1TOWNSSfxWDTable:
return "k1TOWNSSfxWDTable";
case k1TOWNSSfxBTTable:
return "k1TOWNSSfxBTTable";
case k1TOWNSCDATable:
return "k1TOWNSCDATable";
case k1TownsSFXwdTable:
return "k1TownsSFXwdTable";
case k1TownsSFXbtTable:
return "k1TownsSFXbtTable";
case k1TownsCDATable:
return "k1TownsCDATable";
case k1PC98StoryStrings:
return "k1PC98StoryStrings";
case k1PC98IntroSfx:
@ -954,8 +925,6 @@ const char *getIdString(const int id) {
return "k2IngamePakFiles";
case k2IngameSfxFiles:
return "k2IngameSfxFiles";
case k2IngameSfxFilesTns:
return "k2IngameSfxFilesTns";
case k2IngameSfxIndex:
return "k2IngameSfxIndex";
case k2IngameTracks:
@ -966,8 +935,8 @@ const char *getIdString(const int id) {
return "k2IngameTalkObjIndex";
case k2IngameTimJpStrings:
return "k2IngameTimJpStrings";
case k2IngameItemAnimData:
return "k2IngameItemAnimData";
case k2IngameShapeAnimData:
return "k2IngameShapeAnimData";
case k2IngameTlkDemoStrings:
return "k2IngameTlkDemoStrings";
case k3MainMenuStrings:
@ -986,8 +955,6 @@ const char *getIdString(const int id) {
return "k3ItemMagicTable";
case k3ItemStringMap:
return "k3ItemStringMap";
case kLolSeqplayIntroTracks:
return "kLolSeqplayIntroTracks";
case kLolIngamePakFiles:
return "kLolIngamePakFiles";
case kLolCharacterDefs:
@ -998,12 +965,12 @@ const char *getIdString(const int id) {
return "kLolIngameSfxIndex";
case kLolMusicTrackMap:
return "kLolMusicTrackMap";
case kLolGMSfxIndex:
return "kLolGMSfxIndex";
case kLolMT32SfxIndex:
return "kLolMT32SfxIndex";
case kLolPcSpkSfxIndex:
return "kLolPcSpkSfxIndex";
case kLolIngameGMSfxIndex:
return "kLolIngameGMSfxIndex";
case kLolIngameMT32SfxIndex:
return "kLolIngameMT32SfxIndex";
case kLolIngamePcSpkSfxIndex:
return "kLolIngamePcSpkSfxIndex";
case kLolSpellProperties:
return "kLolSpellProperties";
case kLolGameShapeMap:
@ -1026,8 +993,8 @@ const char *getIdString(const int id) {
return "kLolExpRequirements";
case kLolMonsterModifiers:
return "kLolMonsterModifiers";
case kLolMonsterLevelOffsets:
return "kLolMonsterLevelOffsets";
case kLolMonsterShiftOffsets:
return "kLolMonsterShiftOffsets";
case kLolMonsterDirFlags:
return "kLolMonsterDirFlags";
case kLolMonsterScaleY:
@ -1036,8 +1003,8 @@ const char *getIdString(const int id) {
return "kLolMonsterScaleX";
case kLolMonsterScaleWH:
return "kLolMonsterScaleWH";
case kLolFlyingItemShp:
return "kLolFlyingItemShp";
case kLolFlyingObjectShp:
return "kLolFlyingObjectShp";
case kLolInventoryDesc:
return "kLolInventoryDesc";
case kLolLevelShpList:
@ -1052,10 +1019,10 @@ const char *getIdString(const int id) {
return "kLolStashSetup";
case kLolDscUnk1:
return "kLolDscUnk1";
case kLolDscShapeIndex1:
return "kLolDscShapeIndex1";
case kLolDscShapeIndex2:
return "kLolDscShapeIndex2";
case kLolDscShapeIndex:
return "kLolDscShapeIndex";
case kLolDscOvlMap:
return "kLolDscOvlMap";
case kLolDscScaleWidthData:
return "kLolDscScaleWidthData";
case kLolDscScaleHeightData:
@ -1078,8 +1045,8 @@ const char *getIdString(const int id) {
return "kLolDscBlockMap";
case kLolDscDimMap:
return "kLolDscDimMap";
case kLolDscShapeOvlIndex:
return "kLolDscShapeOvlIndex";
case kLolDscOvlIndex:
return "kLolDscOvlIndex";
case kLolDscBlockIndex:
return "kLolDscBlockIndex";
case kLolDscDoor1:
@ -1183,25 +1150,25 @@ bool process(PAKFile &out, const Game *g, const byte *data, const uint32 size) {
const ExtractFilename *fDesc = getFilenameDesc(id);
if (!fDesc) {
fprintf(stderr, "ERROR: couldn't find file description for id %d\n", id);
fprintf(stderr, "ERROR: couldn't find file description for id %d/%s\n", id, getIdString(id));
return false;
}
if (isLangSpecific(fDesc->type))
if (fDesc->langSpecific)
extractInfo.lang = i->second.desc.lang;
else
extractInfo.lang = UNK_LANG;
filename[0] = 0;
if (!getFilename(filename, &extractInfo, id)) {
fprintf(stderr, "ERROR: couldn't get filename for id %d\n", id);
fprintf(stderr, "ERROR: couldn't get filename for id %d/%s\n", id, getIdString(id));
return false;
}
const ExtractType *tDesc = findExtractType(fDesc->type);
if (!tDesc) {
fprintf(stderr, "ERROR: couldn't find type description for id %d\n", id);
fprintf(stderr, "ERROR: couldn't find type description for id %d/%s (%d)\n", id, getIdString(id), fDesc->type);
return false;
}
@ -1210,7 +1177,7 @@ bool process(PAKFile &out, const Game *g, const byte *data, const uint32 size) {
continue;
if (!tDesc->extract(out, &extractInfo, data + i->second.offset, i->second.desc.hint.size, filename, id)) {
fprintf(stderr, "ERROR: couldn't extract id %d\n", id);
fprintf(stderr, "ERROR: couldn't extract id %d/%s\n", id, getIdString(id));
return false;
}
}
@ -1368,11 +1335,7 @@ bool getExtractionData(const Game *g, Search &search, ExtractMap &map) {
continue;
}
const ExtractFilename *fDesc = getFilenameDesc(*entry);
if (!fDesc)
continue;
if (isLangSpecific(fDesc->type)) {
if (isLangSpecific(*entry)) {
for (int i = 0; i < 3; ++i) {
if (g->lang[i] == -1)
continue;

View File

@ -25,20 +25,7 @@
#include "util.h"
struct Language {
int lang;
const char *ext;
};
extern const Language languageTable[];
struct PlatformExtension {
int platform;
const char *ext;
};
extern const PlatformExtension platformTable[];
// This list has to match orderwise (and thus value wise) the static data list of "engines/kyra/resource.h"!
enum kExtractID {
k1ForestSeq = 0,
k1KallakWritingSeq,
@ -68,9 +55,6 @@ enum kExtractID {
k1CharacterImageFilenames,
k1AudioTracks,
k1AudioTracksIntro,
k1ItemNames,
k1TakenStrings,
k1PlacedStrings,
@ -144,23 +128,28 @@ enum kExtractID {
k1GUIStrings,
k1ConfigStrings,
k1TOWNSSfxWDTable,
k1TOWNSSfxBTTable,
k1TOWNSCDATable,
k1AudioTracks,
k1AudioTracksIntro,
k1CreditsStrings,
k1TownsSFXwdTable,
k1TownsSFXbtTable,
k1TownsCDATable,
k1PC98StoryStrings,
k1PC98IntroSfx,
k1CreditsStrings,
k1AmigaIntroSFXTable,
k1AmigaGameSFXTable,
k2SeqplayPakFiles,
k2SeqplayCredits,
k2SeqplayCreditsSpecial,
k2SeqplayStrings,
k2SeqplaySfxFiles,
k2SeqplayTlkFiles,
k2SeqplaySeqData,
k2SeqplayCredits,
k2SeqplayCreditsSpecial,
k2SeqplayIntroTracks,
k2SeqplayFinaleTracks,
k2SeqplayIntroCDA,
@ -169,13 +158,12 @@ enum kExtractID {
k2IngamePakFiles,
k2IngameSfxFiles,
k2IngameSfxFilesTns,
k2IngameSfxIndex,
k2IngameTracks,
k2IngameCDA,
k2IngameTalkObjIndex,
k2IngameTimJpStrings,
k2IngameItemAnimData,
k2IngameShapeAnimData,
k2IngameTlkDemoStrings,
k3MainMenuStrings,
@ -187,17 +175,14 @@ enum kExtractID {
k3ItemMagicTable,
k3ItemStringMap,
kLolSeqplayIntroTracks,
kLolIngamePakFiles,
kLolCharacterDefs,
kLolIngameSfxFiles,
kLolIngameSfxIndex,
kLolMusicTrackMap,
kLolGMSfxIndex,
kLolMT32SfxIndex,
kLolPcSpkSfxIndex,
kLolIngameGMSfxIndex,
kLolIngameMT32SfxIndex,
kLolIngamePcSpkSfxIndex,
kLolSpellProperties,
kLolGameShapeMap,
kLolSceneItemOffs,
@ -209,12 +194,12 @@ enum kExtractID {
kLolCharDefsAkshel,
kLolExpRequirements,
kLolMonsterModifiers,
kLolMonsterLevelOffsets,
kLolMonsterShiftOffsets,
kLolMonsterDirFlags,
kLolMonsterScaleY,
kLolMonsterScaleX,
kLolMonsterScaleWH,
kLolFlyingItemShp,
kLolFlyingObjectShp,
kLolInventoryDesc,
kLolLevelShpList,
@ -224,8 +209,8 @@ enum kExtractID {
kLolStashSetup,
kLolDscUnk1,
kLolDscShapeIndex1,
kLolDscShapeIndex2,
kLolDscShapeIndex,
kLolDscOvlMap,
kLolDscScaleWidthData,
kLolDscScaleHeightData,
kLolDscX,
@ -237,13 +222,13 @@ enum kExtractID {
kLolDscDimData2,
kLolDscBlockMap,
kLolDscDimMap,
kLolDscShapeOvlIndex,
kLolDscBlockIndex,
kLolDscDoor1,
kLolDscDoorScale,
kLolDscDoor4,
kLolDscDoorX,
kLolDscDoorY,
kLolDscOvlIndex,
kLolDscBlockIndex,
kLolScrollXTop,
kLolScrollYTop,
@ -280,7 +265,7 @@ enum kExtractID {
struct ExtractFilename {
int id;
int type;
const char *filename;
bool langSpecific;
};
enum kSpecial {
@ -290,18 +275,11 @@ enum kSpecial {
kTalkieDemoVersion
};
struct SpecialExtension {
int special;
const char *ext;
};
extern const SpecialExtension specialTable[];
enum kGame {
kKyra1 = 0,
kKyra2 = 1,
kKyra3 = 2,
kLol = 4
kKyra2,
kKyra3,
kLol
};
struct Game {
@ -319,4 +297,13 @@ extern const Game * const gameDescs[];
const int *getNeedList(const Game *g);
struct TypeTable {
int type;
int value;
bool operator==(int t) const {
return (type == t);
}
};
#endif

View File

@ -23,13 +23,10 @@
#include "extract.h"
#include <algorithm>
namespace {
// Filename creation
void createFilename(char *dstFilename, const ExtractInformation *info, const char *filename);
void createLangFilename(char *dstFilename, const ExtractInformation *info, const char *filename);
// Extraction function prototypes
bool extractRaw(PAKFile &out, const ExtractInformation *info, const byte *data, const uint32 size, const char *filename, int id);
@ -55,82 +52,62 @@ bool extractLolButtonDefs(PAKFile &out, const ExtractInformation *info, const by
// Extraction type table
const ExtractType extractTypeTable[] = {
{ kTypeLanguageList, extractStrings, createLangFilename },
{ kTypeStringList, extractStrings, createFilename },
{ kTypeRoomList, extractRooms, createFilename },
{ kTypeShapeList, extractShapes, createFilename },
{ kTypeRawData, extractRaw, createFilename },
{ kTypeAmigaSfxTable, extractAmigaSfx, createFilename },
{ kTypeTownsWDSfxTable, extractWdSfx, createFilename },
{ kTypeStringList, extractStrings },
{ kTypeRoomList, extractRooms },
{ kTypeShapeList, extractShapes },
{ kTypeRawData, extractRaw },
{ kTypeAmigaSfxTable, extractAmigaSfx },
{ kTypeTownsWDSfxTable, extractWdSfx },
{ k2TypeSeqData, extractHofSeqData, createFilename },
{ k2TypeShpDataV1, extractHofShapeAnimDataV1, createFilename },
{ k2TypeShpDataV2, extractHofShapeAnimDataV2, createFilename },
{ k2TypeSoundList, extractStringsWoSuffix, createFilename },
{ k2TypeLangSoundList, extractStringsWoSuffix, createLangFilename },
{ k2TypeSize10StringList, extractStrings10, createFilename },
{ k2TypeSfxList, extractPaddedStrings, createFilename },
{ k3TypeRaw16to8, extractRaw16to8, createFilename },
{ k3TypeShpData, extractMrShapeAnimData, createFilename },
{ k2TypeSeqData, extractHofSeqData },
{ k2TypeShpDataV1, extractHofShapeAnimDataV1 },
{ k2TypeShpDataV2, extractHofShapeAnimDataV2 },
{ k2TypeSoundList, extractStringsWoSuffix },
{ k2TypeLangSoundList, extractStringsWoSuffix },
{ k2TypeSize10StringList, extractStrings10 },
{ k2TypeSfxList, extractPaddedStrings },
{ k3TypeRaw16to8, extractRaw16to8 },
{ k3TypeShpData, extractMrShapeAnimData },
{ kLolTypeRaw16, extractRaw16, createFilename },
{ kLolTypeRaw32, extractRaw32, createFilename },
{ kLolTypeButtonDef, extractLolButtonDefs, createFilename },
{ kLolTypeCharData, extractRaw },
{ kLolTypeSpellData, extractRaw },
{ kLolTypeCompassData, extractRaw16to8 },
{ kLolTypeFlightShpData, extractRaw16to8 },
{ kLolTypeRaw16, extractRaw16 },
{ kLolTypeRaw32, extractRaw32 },
{ kLolTypeButtonDef, extractLolButtonDefs },
{ -1, 0, 0}
{ -1, 0 }
};
void createFilename(char *dstFilename, const ExtractInformation *info, const char *filename) {
strcpy(dstFilename, filename);
static const char *gidExtensions[] = { "", ".K2", ".K3", 0, ".LOL" };
strcat(dstFilename, gidExtensions[info->game]);
for (const SpecialExtension *specialE = specialTable; specialE->special != -1; ++specialE) {
if (specialE->special == info->special) {
strcat(dstFilename, ".");
strcat(dstFilename, specialE->ext);
break;
}
}
for (const PlatformExtension *platformE = platformTable; platformE->platform != -1; ++platformE) {
if (platformE->platform == info->platform) {
strcat(dstFilename, ".");
strcat(dstFilename, platformE->ext);
}
}
}
void createLangFilename(char *dstFilename, const ExtractInformation *info, const char *filename) {
strcpy(dstFilename, filename);
for (const Language *langE = languageTable; langE->lang != -1; ++langE) {
if (langE->lang == info->lang) {
strcat(dstFilename, ".");
strcat(dstFilename, langE->ext);
break;
}
}
static const char *gidExtensions[] = { "", ".K2", ".K3", 0, ".LOL" };
strcat(dstFilename, gidExtensions[info->game]);
for (const SpecialExtension *specialE = specialTable; specialE->special != -1; ++specialE) {
if (specialE->special == info->special) {
strcat(dstFilename, ".");
strcat(dstFilename, specialE->ext);
break;
}
}
for (const PlatformExtension *platformE = platformTable; platformE->platform != -1; ++platformE) {
if (platformE->platform == info->platform) {
strcat(dstFilename, ".");
strcat(dstFilename, platformE->ext);
}
}
}
// TODO: Clean up the mess of data types we have... it seems some special types
// we have (even in the main KYRA code, is just raw data access, but used specially
// to have a nice wrapper from inside StaticResource...).
const TypeTable typeTable[] = {
{ kTypeStringList, 0 },
{ kTypeRawData, 1 },
{ kTypeRoomList, 2 },
{ kTypeShapeList, 3 },
{ kTypeAmigaSfxTable, 4 },
{ kTypeTownsWDSfxTable, 1 },
{ k2TypeSeqData, 5 },
{ k2TypeShpDataV1, 6 },
{ k2TypeShpDataV2, 7 },
{ k2TypeSoundList, 0 },
{ k2TypeLangSoundList, 0 },
{ k2TypeSize10StringList, 0 },
{ k2TypeSfxList, 0 },
{ k3TypeRaw16to8, 1 },
{ k3TypeShpData, 7 },
{ kLolTypeRaw16, 15 },
{ kLolTypeRaw32, 16 },
{ kLolTypeButtonDef, 14 },
{ kLolTypeCharData, 10 },
{ kLolTypeSpellData, 11 },
{ kLolTypeCompassData, 12 },
{ kLolTypeFlightShpData, 13 },
{ -1, 0 }
};
} // end of anonymous namespace
@ -144,15 +121,9 @@ const ExtractType *findExtractType(const int type) {
return 0;
}
// TODO: Get rid of this....
bool isLangSpecific(const int type) {
const ExtractType *ext = findExtractType(type);
if (!ext)
return false;
return (ext->createFilename == createLangFilename);
byte getTypeID(int type) {
return std::find(typeTable, typeTable + ARRAYSIZE(typeTable), type)->value;
}
// Extractor implementation
namespace {
@ -179,6 +150,10 @@ bool extractStrings(PAKFile &out, const ExtractInformation *info, const byte *da
} else if (info->platform == kPlatformPC) {
if (id == k2IngamePakFiles)
fmtPatch = 4;
// HACK
if (id == k2SeqplayIntroTracks && info->game == kLol)
return extractStringsWoSuffix(out, info, data, size, filename, id);
}
uint32 entries = 0;
@ -332,6 +307,10 @@ bool extractStrings(PAKFile &out, const ExtractInformation *info, const byte *da
}
bool extractStrings10(PAKFile &out, const ExtractInformation *info, const byte *data, const uint32 size, const char *filename, int id) {
// HACK...
if (info->platform == kPlatformFMTowns && id == k2IngameSfxFiles)
return extractStringsWoSuffix(out, info, data, size, filename, id);
const int strSize = 10;
uint32 entries = (size + (strSize - 1)) / strSize;

View File

@ -28,8 +28,7 @@
#include "util.h"
enum kExtractType {
kTypeLanguageList = 0,
kTypeStringList,
kTypeStringList = 0,
kTypeRoomList,
kTypeShapeList,
kTypeRawData,
@ -49,7 +48,11 @@ enum kExtractType {
kLolTypeRaw16,
kLolTypeRaw32,
kLolTypeButtonDef
kLolTypeButtonDef,
kLolTypeCharData,
kLolTypeSpellData,
kLolTypeCompassData,
kLolTypeFlightShpData
};
struct ExtractInformation {
@ -62,11 +65,10 @@ struct ExtractInformation {
struct ExtractType {
int type;
bool (*extract)(PAKFile &out, const ExtractInformation *info, const byte *data, const uint32 size, const char *filename, int id);
void (*createFilename)(char *dstFilename, const ExtractInformation *info, const char *filename);
};
const ExtractType *findExtractType(const int type);
bool isLangSpecific(const int type);
byte getTypeID(int type);
#endif

View File

@ -405,9 +405,9 @@ const int kyra1TownsNeed[] = {
k1NewGameString,
k1ConfigStrings,
k1TOWNSSfxWDTable,
k1TOWNSSfxBTTable,
k1TOWNSCDATable,
k1TownsSFXwdTable,
k1TownsSFXbtTable,
k1TownsCDATable,
k1AudioTracks,
k1CreditsStrings,
-1
@ -571,7 +571,7 @@ const int kyra2CDNeed[] = {
k2IngameSfxIndex,
k2IngameTracks,
k2IngameTalkObjIndex,
k2IngameItemAnimData,
k2IngameShapeAnimData,
-1
};
@ -589,7 +589,7 @@ const int kyra2CDDemoNeed[] = {
k2IngameSfxIndex,
k2IngameTracks,
k2IngameTalkObjIndex,
k2IngameItemAnimData,
k2IngameShapeAnimData,
k2IngameTlkDemoStrings,
-1
};
@ -606,7 +606,7 @@ const int kyra2FloppyNeed[] = {
k2IngameSfxIndex,
k2IngameTracks,
k2IngameTalkObjIndex,
k2IngameItemAnimData,
k2IngameShapeAnimData,
-1
};
@ -618,12 +618,12 @@ const int kyra2TownsNeed[] = {
k2SeqplayIntroCDA,
k2SeqplayFinaleCDA,
k2IngamePakFiles,
k2IngameSfxFilesTns,
k2IngameSfxFiles,
k2IngameSfxIndex,
k2IngameCDA,
k2IngameTalkObjIndex,
k2IngameTimJpStrings,
k2IngameItemAnimData,
k2IngameShapeAnimData,
-1
};
@ -655,9 +655,9 @@ const int lolFloppyNeed[] = {
kLolIngameSfxFiles,
kLolIngameSfxIndex,
kLolMusicTrackMap,
kLolGMSfxIndex,
kLolMT32SfxIndex,
kLolPcSpkSfxIndex,
kLolIngameGMSfxIndex,
kLolIngameMT32SfxIndex,
kLolIngamePcSpkSfxIndex,
kLolSpellProperties,
kLolGameShapeMap,
kLolSceneItemOffs,
@ -669,12 +669,12 @@ const int lolFloppyNeed[] = {
kLolCharDefsAkshel,
kLolExpRequirements,
kLolMonsterModifiers,
kLolMonsterLevelOffsets,
kLolMonsterShiftOffsets,
kLolMonsterDirFlags,
kLolMonsterScaleY,
kLolMonsterScaleX,
kLolMonsterScaleWH,
kLolFlyingItemShp,
kLolFlyingObjectShp,
kLolInventoryDesc,
kLolLevelShpList,
@ -682,8 +682,8 @@ const int lolFloppyNeed[] = {
kLolCompassDefs,
kLolStashSetup,
kLolDscUnk1,
kLolDscShapeIndex1,
kLolDscShapeIndex2,
kLolDscShapeIndex,
kLolDscOvlMap,
kLolDscScaleWidthData,
kLolDscScaleHeightData,
kLolDscX,
@ -695,7 +695,7 @@ const int lolFloppyNeed[] = {
kLolDscDimData2,
kLolDscBlockMap,
kLolDscDimMap,
kLolDscShapeOvlIndex,
kLolDscOvlIndex,
kLolDscBlockIndex,
kLolDscDoor1,
kLolDscDoorScale,
@ -749,12 +749,12 @@ const int lolPC98Need[] = {
kLolCharDefsAkshel,
kLolExpRequirements,
kLolMonsterModifiers,
kLolMonsterLevelOffsets,
kLolMonsterShiftOffsets,
kLolMonsterDirFlags,
kLolMonsterScaleY,
kLolMonsterScaleX,
kLolMonsterScaleWH,
kLolFlyingItemShp,
kLolFlyingObjectShp,
kLolInventoryDesc,
kLolLevelShpList,
@ -762,8 +762,8 @@ const int lolPC98Need[] = {
kLolCompassDefs,
kLolStashSetup,
kLolDscUnk1,
kLolDscShapeIndex1,
kLolDscShapeIndex2,
kLolDscShapeIndex,
kLolDscOvlMap,
kLolDscScaleWidthData,
kLolDscScaleHeightData,
kLolDscX,
@ -775,7 +775,7 @@ const int lolPC98Need[] = {
kLolDscDimData2,
kLolDscBlockMap,
kLolDscDimMap,
kLolDscShapeOvlIndex,
kLolDscOvlIndex,
kLolDscBlockIndex,
kLolDscDoor1,
kLolDscDoorScale,
@ -819,9 +819,9 @@ const int lolCDNeed[] = {
kLolIngameSfxFiles,
kLolIngameSfxIndex,
kLolMusicTrackMap,
kLolGMSfxIndex,
kLolMT32SfxIndex,
kLolPcSpkSfxIndex,
kLolIngameGMSfxIndex,
kLolIngameMT32SfxIndex,
kLolIngamePcSpkSfxIndex,
kLolSpellProperties,
kLolGameShapeMap,
kLolSceneItemOffs,
@ -833,12 +833,12 @@ const int lolCDNeed[] = {
kLolCharDefsAkshel,
kLolExpRequirements,
kLolMonsterModifiers,
kLolMonsterLevelOffsets,
kLolMonsterShiftOffsets,
kLolMonsterDirFlags,
kLolMonsterScaleY,
kLolMonsterScaleX,
kLolMonsterScaleWH,
kLolFlyingItemShp,
kLolFlyingObjectShp,
kLolInventoryDesc,
kLolLevelShpList,
@ -847,8 +847,8 @@ const int lolCDNeed[] = {
kLolItemPrices,
kLolStashSetup,
kLolDscUnk1,
kLolDscShapeIndex1,
kLolDscShapeIndex2,
kLolDscShapeIndex,
kLolDscOvlMap,
kLolDscScaleWidthData,
kLolDscScaleHeightData,
kLolDscX,
@ -860,7 +860,7 @@ const int lolCDNeed[] = {
kLolDscDimData2,
kLolDscBlockMap,
kLolDscDimMap,
kLolDscShapeOvlIndex,
kLolDscOvlIndex,
kLolDscBlockIndex,
kLolDscDoor1,
kLolDscDoorScale,
@ -901,7 +901,7 @@ const int lolDemoNeed[] = {
k2SeqplayStrings,
k2SeqplaySeqData,
k2SeqplaySfxFiles,
kLolSeqplayIntroTracks,
k2SeqplayIntroTracks,
-1
};

View File

@ -965,19 +965,19 @@ const ExtractEntrySearchData k1ConfigStringsProvider[] = {
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData k1TOWNSSfxWDTableProvider[] = {
const ExtractEntrySearchData k1TownsSFXwdTableProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x00012608, 0x006717A1, { { 0x34, 0xDD, 0x2D, 0xA5, 0x14, 0x05, 0xEE, 0x2F, 0x93, 0x7C, 0x78, 0x4D, 0xCA, 0x13, 0xED, 0x93 } } } },
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData k1TOWNSSfxBTTableProvider[] = {
const ExtractEntrySearchData k1TownsSFXbtTableProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x00000100, 0x00007FFE, { { 0xEF, 0x3D, 0x9F, 0x31, 0xE7, 0x19, 0x1E, 0x4F, 0xF3, 0x66, 0x42, 0xC8, 0x0D, 0x89, 0x96, 0x20 } } } },
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData k1TOWNSCDATableProvider[] = {
const ExtractEntrySearchData k1TownsCDATableProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x000002C4, 0x0000C5ED, { { 0x76, 0x86, 0x77, 0xF9, 0x85, 0x23, 0x32, 0x56, 0x3C, 0x06, 0x03, 0xCF, 0x0C, 0x49, 0x94, 0xB5 } } } },
EXTRACT_END_ENTRY
@ -1142,13 +1142,8 @@ const ExtractEntrySearchData k2IngamePakFilesProvider[] = {
};
const ExtractEntrySearchData k2IngameSfxFilesProvider[] = {
{ UNK_LANG, kPlatformUnknown, { 0x000006F1, 0x0001545E, { { 0xD3, 0x8A, 0xA1, 0xD4, 0x83, 0x77, 0x96, 0x6D, 0x87, 0xB1, 0x71, 0x8F, 0x38, 0x6A, 0x34, 0xDC } } } },
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData k2IngameSfxFilesTnsProvider[] = {
{ UNK_LANG, kPlatformUnknown, { 0x00000967, 0x0002101A, { { 0x09, 0xC7, 0xB7, 0x2A, 0x76, 0xF1, 0x4B, 0x87, 0xC5, 0x83, 0xFF, 0xF3, 0xDB, 0x3C, 0x66, 0x60 } } } },
{ UNK_LANG, kPlatformPC, { 0x000006F1, 0x0001545E, { { 0xD3, 0x8A, 0xA1, 0xD4, 0x83, 0x77, 0x96, 0x6D, 0x87, 0xB1, 0x71, 0x8F, 0x38, 0x6A, 0x34, 0xDC } } } },
{ UNK_LANG, kPlatformFMTowns, { 0x00000967, 0x0002101A, { { 0x09, 0xC7, 0xB7, 0x2A, 0x76, 0xF1, 0x4B, 0x87, 0xC5, 0x83, 0xFF, 0xF3, 0xDB, 0x3C, 0x66, 0x60 } } } },
EXTRACT_END_ENTRY
};
@ -1190,7 +1185,7 @@ const ExtractEntrySearchData k2IngameTimJpStringsProvider[] = {
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData k2IngameItemAnimDataProvider[] = {
const ExtractEntrySearchData k2IngameShapeAnimDataProvider[] = {
{ UNK_LANG, kPlatformPC, { 0x00000348, 0x0001AAEB, { { 0x67, 0xD1, 0x03, 0xBF, 0x4B, 0xEC, 0x80, 0x26, 0x5D, 0x1D, 0x0E, 0x5B, 0xF1, 0xE8, 0x4C, 0x64 } } } }, // CD
{ UNK_LANG, kPlatformUnknown, { 0x00000348, 0x00002473, { { 0xBC, 0x18, 0x51, 0xFA, 0x51, 0x1D, 0x24, 0x7D, 0x44, 0xD0, 0xE2, 0x38, 0x31, 0x33, 0x3B, 0x56 } } } }, // floppy + FM-TOWNS
@ -1254,12 +1249,6 @@ const ExtractEntrySearchData k3ItemStringMapProvider[] = {
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kLolSeqplayIntroTracksProvider[] = {
{ UNK_LANG, kPlatformPC, { 0x0000001A, 0x0000096C, { { 0xC2, 0xBD, 0x2C, 0x65, 0xD3, 0xFE, 0xF1, 0x6A, 0xE7, 0x34, 0x18, 0x0C, 0x86, 0x95, 0x66, 0x35 } } } },
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kLolIngamePakFilesProvider[] = {
{ UNK_LANG, kPlatformPC, { 0x00000088, 0x0000224F, { { 0xDA, 0x24, 0x18, 0xA3, 0xEF, 0x16, 0x70, 0x8F, 0xA8, 0xC2, 0x2E, 0xC2, 0xED, 0x39, 0x03, 0xD1 } } } },
{ UNK_LANG, kPlatformPC98, { 0x00000084, 0x00002125, { { 0x7A, 0x89, 0xE2, 0x36, 0xEC, 0x6F, 0x52, 0x2B, 0xEF, 0xBA, 0x3D, 0x28, 0x54, 0xDA, 0xFB, 0x72 } } } },
@ -1295,19 +1284,19 @@ const ExtractEntrySearchData kLolMusicTrackMapProvider[] = {
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kLolGMSfxIndexProvider[] = {
const ExtractEntrySearchData kLolIngameGMSfxIndexProvider[] = {
{ UNK_LANG, kPlatformPC, { 0x000000FA, 0x00006281, { { 0x25, 0x89, 0xB0, 0x3B, 0x12, 0x09, 0x02, 0xF6, 0xFE, 0x76, 0xD5, 0xC9, 0x5B, 0x88, 0xAC, 0xAA } } } },
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kLolMT32SfxIndexProvider[] = {
const ExtractEntrySearchData kLolIngameMT32SfxIndexProvider[] = {
{ UNK_LANG, kPlatformPC, { 0x000000FA, 0x00006579, { { 0x16, 0x40, 0x1C, 0x09, 0x69, 0xA9, 0x0D, 0x6D, 0x4B, 0x0C, 0x99, 0xF0, 0x40, 0x5D, 0xBB, 0x6E } } } },
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kLolPcSpkSfxIndexProvider[] = {
const ExtractEntrySearchData kLolIngamePcSpkSfxIndexProvider[] = {
{ UNK_LANG, kPlatformPC, { 0x000000FA, 0x00005EFC, { { 0xA3, 0x5C, 0x69, 0xED, 0x13, 0xEC, 0x08, 0x0E, 0xFA, 0x72, 0x83, 0x0D, 0xD7, 0x8D, 0x9C, 0x70 } } } },
EXTRACT_END_ENTRY
@ -1381,7 +1370,7 @@ const ExtractEntrySearchData kLolMonsterModifiersProvider[] = {
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kLolMonsterLevelOffsetsProvider[] = {
const ExtractEntrySearchData kLolMonsterShiftOffsetsProvider[] = {
{ UNK_LANG, kPlatformUnknown, { 0x00000020, 0x00000803, { { 0x30, 0x55, 0x74, 0x0D, 0xC7, 0x3B, 0xD9, 0x5C, 0x26, 0xF0, 0x4E, 0x8F, 0xE4, 0x4D, 0xCB, 0x2A } } } },
EXTRACT_END_ENTRY
@ -1412,7 +1401,7 @@ const ExtractEntrySearchData kLolMonsterScaleWHProvider[] = {
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kLolFlyingItemShpProvider[] = {
const ExtractEntrySearchData kLolFlyingObjectShpProvider[] = {
{ UNK_LANG, kPlatformUnknown, { 0x00000082, 0x00000252, { { 0xDE, 0x9D, 0x89, 0xAF, 0x0F, 0x50, 0x14, 0x60, 0x68, 0xAF, 0x19, 0xD8, 0x54, 0x8A, 0x36, 0x27 } } } },
EXTRACT_END_ENTRY
@ -1461,13 +1450,13 @@ const ExtractEntrySearchData kLolDscUnk1Provider[] = {
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kLolDscShapeIndex1Provider[] = {
const ExtractEntrySearchData kLolDscShapeIndexProvider[] = {
{ UNK_LANG, kPlatformUnknown, { 0x00000024, 0x00000728, { { 0x14, 0xBA, 0x6D, 0x5C, 0x7D, 0x20, 0x0D, 0x35, 0xA7, 0xB0, 0x8D, 0x2F, 0x1D, 0x2A, 0x49, 0xA4 } } } },
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kLolDscShapeIndex2Provider[] = {
const ExtractEntrySearchData kLolDscOvlMapProvider[] = {
{ UNK_LANG, kPlatformUnknown, { 0x0000000A, 0x0000001F, { { 0x9C, 0xF2, 0xCC, 0x48, 0x42, 0xC6, 0x76, 0x83, 0xD3, 0x1A, 0x43, 0x42, 0x7F, 0xEF, 0x19, 0x0F } } } },
EXTRACT_END_ENTRY
@ -1539,7 +1528,7 @@ const ExtractEntrySearchData kLolDscDimMapProvider[] = {
EXTRACT_END_ENTRY
};
const ExtractEntrySearchData kLolDscShapeOvlIndexProvider[] = {
const ExtractEntrySearchData kLolDscOvlIndexProvider[] = {
{ UNK_LANG, kPlatformUnknown, { 0x00000028, 0x00000048, { { 0x3E, 0x8E, 0x62, 0xAF, 0xD1, 0x28, 0x39, 0x73, 0x0D, 0xD8, 0x4A, 0xA7, 0xF4, 0xD7, 0x32, 0x25 } } } },
EXTRACT_END_ENTRY
@ -1816,9 +1805,9 @@ const ExtractEntry extractProviders[] = {
{ k1SpecialPalette33, k1SpecialPalette33Provider },
{ k1GUIStrings, k1GUIStringsProvider },
{ k1ConfigStrings, k1ConfigStringsProvider },
{ k1TOWNSSfxWDTable, k1TOWNSSfxWDTableProvider },
{ k1TOWNSSfxBTTable, k1TOWNSSfxBTTableProvider },
{ k1TOWNSCDATable, k1TOWNSCDATableProvider },
{ k1TownsSFXwdTable, k1TownsSFXwdTableProvider },
{ k1TownsSFXbtTable, k1TownsSFXbtTableProvider },
{ k1TownsCDATable, k1TownsCDATableProvider },
{ k1PC98StoryStrings, k1PC98StoryStringsProvider },
{ k1PC98IntroSfx, k1PC98IntroSfxProvider },
{ k1CreditsStrings, k1CreditsStringsProvider },
@ -1838,13 +1827,12 @@ const ExtractEntry extractProviders[] = {
{ k2SeqplayShapeAnimData, k2SeqplayShapeAnimDataProvider },
{ k2IngamePakFiles, k2IngamePakFilesProvider },
{ k2IngameSfxFiles, k2IngameSfxFilesProvider },
{ k2IngameSfxFilesTns, k2IngameSfxFilesTnsProvider },
{ k2IngameSfxIndex, k2IngameSfxIndexProvider },
{ k2IngameTracks, k2IngameTracksProvider },
{ k2IngameCDA, k2IngameCDAProvider },
{ k2IngameTalkObjIndex, k2IngameTalkObjIndexProvider },
{ k2IngameTimJpStrings, k2IngameTimJpStringsProvider },
{ k2IngameItemAnimData, k2IngameItemAnimDataProvider },
{ k2IngameShapeAnimData, k2IngameShapeAnimDataProvider },
{ k2IngameTlkDemoStrings, k2IngameTlkDemoStringsProvider },
{ k3MainMenuStrings, k3MainMenuStringsProvider },
{ k3MusicFiles, k3MusicFilesProvider },
@ -1854,15 +1842,14 @@ const ExtractEntry extractProviders[] = {
{ k3ItemAnimData, k3ItemAnimDataProvider },
{ k3ItemMagicTable, k3ItemMagicTableProvider },
{ k3ItemStringMap, k3ItemStringMapProvider },
{ kLolSeqplayIntroTracks, kLolSeqplayIntroTracksProvider },
{ kLolIngamePakFiles, kLolIngamePakFilesProvider },
{ kLolCharacterDefs, kLolCharacterDefsProvider },
{ kLolIngameSfxFiles, kLolIngameSfxFilesProvider },
{ kLolIngameSfxIndex, kLolIngameSfxIndexProvider },
{ kLolMusicTrackMap, kLolMusicTrackMapProvider },
{ kLolGMSfxIndex, kLolGMSfxIndexProvider },
{ kLolMT32SfxIndex, kLolMT32SfxIndexProvider },
{ kLolPcSpkSfxIndex, kLolPcSpkSfxIndexProvider },
{ kLolIngameGMSfxIndex, kLolIngameGMSfxIndexProvider },
{ kLolIngameMT32SfxIndex, kLolIngameMT32SfxIndexProvider },
{ kLolIngamePcSpkSfxIndex, kLolIngamePcSpkSfxIndexProvider },
{ kLolSpellProperties, kLolSpellPropertiesProvider },
{ kLolGameShapeMap, kLolGameShapeMapProvider },
{ kLolSceneItemOffs, kLolSceneItemOffsProvider },
@ -1874,12 +1861,12 @@ const ExtractEntry extractProviders[] = {
{ kLolCharDefsAkshel, kLolCharDefsAkshelProvider },
{ kLolExpRequirements, kLolExpRequirementsProvider },
{ kLolMonsterModifiers, kLolMonsterModifiersProvider },
{ kLolMonsterLevelOffsets, kLolMonsterLevelOffsetsProvider },
{ kLolMonsterShiftOffsets, kLolMonsterShiftOffsetsProvider },
{ kLolMonsterDirFlags, kLolMonsterDirFlagsProvider },
{ kLolMonsterScaleY, kLolMonsterScaleYProvider },
{ kLolMonsterScaleX, kLolMonsterScaleXProvider },
{ kLolMonsterScaleWH, kLolMonsterScaleWHProvider },
{ kLolFlyingItemShp, kLolFlyingItemShpProvider },
{ kLolFlyingObjectShp, kLolFlyingObjectShpProvider },
{ kLolInventoryDesc, kLolInventoryDescProvider },
{ kLolLevelShpList, kLolLevelShpListProvider },
{ kLolLevelDatList, kLolLevelDatListProvider },
@ -1887,8 +1874,8 @@ const ExtractEntry extractProviders[] = {
{ kLolItemPrices, kLolItemPricesProvider },
{ kLolStashSetup, kLolStashSetupProvider },
{ kLolDscUnk1, kLolDscUnk1Provider },
{ kLolDscShapeIndex1, kLolDscShapeIndex1Provider },
{ kLolDscShapeIndex2, kLolDscShapeIndex2Provider },
{ kLolDscShapeIndex, kLolDscShapeIndexProvider },
{ kLolDscOvlMap, kLolDscOvlMapProvider },
{ kLolDscScaleWidthData, kLolDscScaleWidthDataProvider },
{ kLolDscScaleHeightData, kLolDscScaleHeightDataProvider },
{ kLolDscX, kLolDscXProvider },
@ -1900,7 +1887,7 @@ const ExtractEntry extractProviders[] = {
{ kLolDscDimData2, kLolDscDimData2Provider },
{ kLolDscBlockMap, kLolDscBlockMapProvider },
{ kLolDscDimMap, kLolDscDimMapProvider },
{ kLolDscShapeOvlIndex, kLolDscShapeOvlIndexProvider },
{ kLolDscOvlIndex, kLolDscOvlIndexProvider },
{ kLolDscBlockIndex, kLolDscBlockIndexProvider },
{ kLolDscDoor1, kLolDscDoor1Provider },
{ kLolDscDoorScale, kLolDscDoorScaleProvider },