const int kyra1FloppyNeed[] = { kKallakWritingSeq, kMalcolmTreeSeq, kWestwoodLogoSeq, kKyrandiaLogoSeq, kKallakMalcolmSeq, kForestSeq, kIntroCPSStrings, kIntroCOLStrings, kIntroWSAStrings, kIntroStrings, kRoomList, kRoomFilenames, kCharacterImageFilenames, kDefaultShapes, kItemNames, kTakenStrings, kPlacedStrings, kDroppedStrings, kNoDropStrings, kAmuleteAnimSeq, kPaletteList1, kPaletteList2, kPaletteList3, kPaletteList4, kPaletteList5, kPaletteList6, kPaletteList7, kPaletteList8, kPaletteList9, kPaletteList10, kPaletteList11, kPaletteList12, kPaletteList13, kPaletteList14, kPaletteList15, kPaletteList16, kPaletteList17, kPaletteList18, kPaletteList19, kPaletteList20, kPaletteList21, kPaletteList22, kPaletteList23, kPaletteList24, kPaletteList25, kPaletteList26, kPaletteList27, kPaletteList28, kPaletteList29, kPaletteList30, kPaletteList31, kPaletteList32, kPaletteList33, kPutDownString, kWaitAmuletString, kBlackJewelString, kHealingTipString, kPoisonGoneString, kHealing1Shapes, kHealing2Shapes, kThePoisonStrings, kFluteStrings, kPoisonDeathShapes, kFluteShapes, kWinter1Shapes, kWinter2Shapes, kWinter3Shapes, kDrinkShapes, kWispShapes, kMagicAnimShapes, kBranStoneShapes, kWispJewelStrings, kMagicJewelStrings, kFlaskFullString, kFullFlaskString, kOutroReunionSeq, kOutroHomeString, kVeryCleverString, kGUIStrings, kNewGameString, kConfigStrings, kAudioTracks, kAudioTracksIntro, -1 }; const int kyra1CDNeed[] = { kKallakWritingSeq, kMalcolmTreeSeq, kWestwoodLogoSeq, kKyrandiaLogoSeq, kKallakMalcolmSeq, kForestSeq, kIntroCPSStrings, kIntroCOLStrings, kIntroWSAStrings, kIntroStrings, kRoomList, kRoomFilenames, kCharacterImageFilenames, kDefaultShapes, kItemNames, kTakenStrings, kPlacedStrings, kDroppedStrings, kNoDropStrings, kAmuleteAnimSeq, kPaletteList1, kPaletteList2, kPaletteList3, kPaletteList4, kPaletteList5, kPaletteList6, kPaletteList7, kPaletteList8, kPaletteList9, kPaletteList10, kPaletteList11, kPaletteList12, kPaletteList13, kPaletteList14, kPaletteList15, kPaletteList16, kPaletteList17, kPaletteList18, kPaletteList19, kPaletteList20, kPaletteList21, kPaletteList22, kPaletteList23, kPaletteList24, kPaletteList25, kPaletteList26, kPaletteList27, kPaletteList28, kPaletteList29, kPaletteList30, kPaletteList31, kPaletteList32, kPaletteList33, kPutDownString, kWaitAmuletString, kBlackJewelString, kHealingTipString, kPoisonGoneString, kHealing1Shapes, kHealing2Shapes, kThePoisonStrings, kFluteStrings, kPoisonDeathShapes, kFluteShapes, kWinter1Shapes, kWinter2Shapes, kWinter3Shapes, kDrinkShapes, kWispShapes, kMagicAnimShapes, kBranStoneShapes, kWispJewelStrings, kMagicJewelStrings, kFlaskFullString, kFullFlaskString, kOutroReunionSeq, kOutroHomeString, kVeryCleverString, kGUIStrings, kNewGameString, kConfigStrings, kAudioTracks, kAudioTracksIntro, -1 }; const int kyra1DemoNeed[] = { kWestwoodLogoSeq, kKyrandiaLogoSeq, kIntroCPSStrings, kIntroCOLStrings, kIntroWSAStrings, kIntroStrings, kDemo1Seq, kDemo2Seq, kDemo3Seq, kDemo4Seq, kAudioTracksIntro, -1 }; const int kyra1TownsEngNeed[] = { kKallakWritingSeq, kMalcolmTreeSeq, kWestwoodLogoSeq, kKyrandiaLogoSeq, kKallakMalcolmSeq, kForestSeq, kIntroCPSStrings, kIntroCOLStrings, kIntroWSAStrings, kIntroStrings, kRoomList, kRoomFilenames, kCharacterImageFilenames, kDefaultShapes, kItemNames, kTakenStrings, kPlacedStrings, kDroppedStrings, kNoDropStrings, kAmuleteAnimSeq, kPaletteList1, kPaletteList2, kPaletteList3, kPaletteList4, kPaletteList5, kPaletteList6, kPaletteList7, kPaletteList8, kPaletteList9, kPaletteList10, kPaletteList11, kPaletteList12, kPaletteList13, kPaletteList14, kPaletteList15, kPaletteList16, kPaletteList17, kPaletteList18, kPaletteList19, kPaletteList20, kPaletteList21, kPaletteList22, kPaletteList23, kPaletteList24, kPaletteList25, kPaletteList26, kPaletteList27, kPaletteList28, kPaletteList29, kPaletteList30, kPaletteList31, kPaletteList32, kPaletteList33, kPutDownString, kWaitAmuletString, kBlackJewelString, kHealingTipString, kPoisonGoneString, kHealing1Shapes, kHealing2Shapes, kThePoisonStrings, kFluteStrings, kPoisonDeathShapes, kFluteShapes, kWinter1Shapes, kWinter2Shapes, kWinter3Shapes, kDrinkShapes, kWispShapes, kMagicAnimShapes, kBranStoneShapes, kWispJewelStrings, kMagicJewelStrings, kFlaskFullString, kFullFlaskString, kOutroReunionSeq, kOutroHomeString, kVeryCleverString, kGUIStrings, kNewGameString, kConfigStrings, kKyra1TownsSFXwdTable, kKyra1TownsSFXbtTable, kKyra1TownsCDATable, kAudioTracks, kCreditsStrings, -1 }; const int 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, kWestwoodLogoSeq, kKyrandiaLogoSeq, kKallakMalcolmSeq, kForestSeq, kIntroCPSStrings, kIntroWSAStrings, kIntroCOLStrings, kIntroStrings, kRoomList, kRoomFilenames, kCharacterImageFilenames, kDefaultShapes, kItemNames, kTakenStrings, kPlacedStrings, kDroppedStrings, kNoDropStrings, kAmuleteAnimSeq, kPutDownString, kWaitAmuletString, kBlackJewelString, kHealingTipString, kPoisonGoneString, kHealing1Shapes, kHealing2Shapes, kThePoisonStrings, kFluteStrings, kPoisonDeathShapes, kFluteShapes, kWinter1Shapes, kWinter2Shapes, kWinter3Shapes, kDrinkShapes, kWispShapes, kMagicAnimShapes, kBranStoneShapes, kWispJewelStrings, kMagicJewelStrings, kFlaskFullString, kFullFlaskString, kOutroReunionSeq, kOutroHomeString, kVeryCleverString, kGUIStrings, kNewGameString, kConfigStrings, kCreditsStrings, -1 }; const int kyra2CDFile1EngNeed[] = { k2SeqplayPakFiles, k2SeqplayCredits, k2SeqplayCreditsSpecial, k2SeqplayStrings, k2SeqplaySfxFiles, k2SeqplayTlkFiles, k2SeqplaySeqData, k2SeqplayIntroTracks, k2SeqplayFinaleTracks, -1 }; const int kyra2CDFile1FreNeed[] = { k2SeqplayStrings, k2SeqplayTlkFiles, -1 }; const int kyra2CDFile1GerNeed[] = { k2SeqplayStrings, k2SeqplayTlkFiles, -1 }; const int kyra2CDFile1ItaNeed[] = { k2SeqplayStrings, k2SeqplayTlkFiles, -1 }; const int kyra2CDFile2EngNeed[] = { k2IngameSfxFiles, k2IngameSfxIndex, k2IngameTracks, k2IngameTalkObjIndex, k2IngameItemAnimData, -1 }; const int kyra2CDFile2FreNeed[] = { -1 }; const int kyra2CDFile2GerNeed[] = { -1 }; const int kyra2FloppyFile1Need[] = { k2SeqplayPakFiles, k2SeqplayStrings, k2SeqplaySfxFiles, k2SeqplayIntroTracks, k2SeqplayFinaleTracks, k2SeqplaySeqData, -1 }; const int kyra2FloppyFile2Need[] = { k2IngamePakFiles, k2IngameSfxFiles, k2IngameSfxIndex, k2IngameTracks, k2IngameTalkObjIndex, k2IngameItemAnimData, -1 }; const int kyra2TownsFile1EngNeed[] = { k2SeqplayPakFiles, k2SeqplayStrings, k2SeqplaySfxFiles, k2SeqplaySeqData, k2SeqplayIntroCDA, k2SeqplayFinaleCDA, -1 }; const int kyra2TownsFile1JapNeed[] = { k2SeqplayStrings, -1 }; const int kyra2TownsFile2EngNeed[] = { k2IngamePakFiles, k2IngameSfxFilesTns, k2IngameSfxIndex, k2IngameCDA, k2IngameTalkObjIndex, k2IngameTimJpStrings, k2IngameItemAnimData, -1 }; const int kyra2TownsFile2JapNeed[] = { -1 }; const int kyra2DemoNeed[] = { k2SeqplayPakFiles, k2SeqplaySeqData, k2SeqplaySfxFiles, k2SeqplayIntroTracks, k2SeqplayShapeAnimData, -1 }; const int kyra2TlkDemoNeed[] = { k2IngameTlkDemoStrings, -1 }; const int kyra3Need[] = { k3MainMenuStrings, k3MusicFiles, k3ScoreTable, k3SfxFiles, k3SfxMap, k3ItemAnimData, k3ItemMagicTable, k3ItemStringMap, -1 }; const int lolCDFile1ENeed[] = { kLolHistory, -1 }; const int lolCDFile2Need[] = { kLolCharacterDefs, kLolIngameSfxFiles, kLolIngameSfxIndex, kLolMusicTrackMap, kLolGMSfxIndex, kLolMT32SfxIndex, //lolADLSfxIndex, kLolSpellProperties, kLolGameShapeMap, kLolSceneItemOffs, kLolCharInvIndex, kLolCharInvDefs, kLolCharDefsMan, kLolCharDefsWoman, kLolCharDefsKieran, //lolCharDefsUnk, kLolCharDefsAkshel, kLolExpRequirements, kLolMonsterModifiers, kLolMonsterLevelOffsets, kLolMonsterDirFlags, kLolMonsterScaleY, kLolMonsterScaleX, kLolMonsterScaleWH, kLolFlyingItemShp, kLolInventoryDesc, kLolLevelShpList, kLolLevelDatList, kLolCompassDefs, kLolItemPrices, kLolStashSetup, kLolDscUnk1, kLolDscShapeIndex1, kLolDscShapeIndex2, kLolDscScaleWidthData, kLolDscScaleHeightData, kLolDscX, kLolDscY, kLolDscTileIndex, kLolDscUnk2, kLolDscDoorShapeIndex, kLolDscDimData1, kLolDscDimData2, kLolDscBlockMap, kLolDscDimMap, kLolDscShapeOvlIndex, kLolDscBlockIndex, kLolDscDoor1, kLolDscDoorScale, kLolDscDoor4, kLolDscDoorX, kLolDscDoorY, kLolScrollXTop, kLolScrollYTop, kLolScrollXBottom, kLolScrollYBottom, kLolButtonDefs, kLolButtonList1, kLolButtonList1, kLolButtonList2, kLolButtonList3, kLolButtonList4, kLolButtonList5, kLolButtonList6, kLolButtonList7, kLolButtonList8, kLolLegendData, kLolMapCursorOvl, kLolMapStringId, //lolMapPal, kLolSpellbookAnim, kLolSpellbookCoords, kLolHealShapeFrames, kLolLightningDefs, kLolFireballCoords, -1 }; const int lolDemoNeed[] = { k2SeqplayPakFiles, k2SeqplayStrings, k2SeqplaySeqData, k2SeqplaySfxFiles, kLolSeqplayIntroTracks, -1 }; const GameNeed gameNeedTable[] = { { kKyra1, -1, kyra1FloppyNeed }, { kKyra1, kTalkieVersion, kyra1CDNeed }, { kKyra1, kFMTownsVersionE , kyra1TownsEngNeed }, { kKyra1, kFMTownsVersionJ, kyra1TownsJapNeed }, { kKyra1, kAmigaVersion, kyra1AmigaNeed }, { kKyra1, kDemoVersion, kyra1DemoNeed }, { 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}, { kKyra3, -1, kyra3Need }, { kLol, kLolCD, lolCDFile1ENeed }, { kLol, kLolCD, lolCDFile2Need }, { -1, -1, 0 } }; const SpecialExtension specialTable[] = { { kTalkieVersion, "CD" }, { kDemoVersion, "DEM" }, { kFMTownsVersionE , "TNS" }, { kFMTownsVersionJ, "TNS" }, { kAmigaVersion, "AMG" }, { k2CDFile1E, "CD" }, { k2CDFile1F, "CD" }, { k2CDFile1G, "CD" }, { k2CDFile1I, "CD" }, { k2CDFile2E, "CD" }, { k2CDFile2F, "CD" }, { k2CDFile2G, "CD" }, { k2TownsFile1E, "TNS" }, { k2TownsFile1J, "TNS" }, { k2TownsFile2E, "TNS" }, { k2TownsFile2J, "TNS" }, { k2DemoVersion, "DEM" }, { k2DemoLol, "DEM" }, { kLolCD, "CD" }, { -1, 0 } }; const Language languageTable[] = { { EN_ANY, "ENG" }, { DE_DEU, "GER" }, { FR_FRA, "FRE" }, { IT_ITA, "ITA" }, { ES_ESP, "SPA" }, { JA_JPN, "JPN" }, { -1, 0 } };