scummvm/engines/kyra/resource.h
2014-02-24 01:38:24 +01:00

915 lines
22 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef KYRA_RESOURCE_H
#define KYRA_RESOURCE_H
#include "common/scummsys.h"
#include "common/str.h"
#include "common/file.h"
#include "common/list.h"
#include "common/hash-str.h"
#include "common/hashmap.h"
#include "common/stream.h"
#include "common/ptr.h"
#include "common/archive.h"
#include "kyra/kyra_v1.h"
#include "kyra/darkmoon.h"
#include "kyra/lol.h"
#include "kyra/kyra_hof.h"
namespace Kyra {
class Resource;
class ResArchiveLoader;
class Resource {
public:
Resource(KyraEngine_v1 *vm);
~Resource();
bool reset();
bool loadPakFile(Common::String filename);
bool loadPakFile(Common::String name, Common::ArchiveMemberPtr file);
void unloadPakFile(Common::String filename, bool remFromCache = false);
bool isInPakList(Common::String filename);
bool isInCacheList(Common::String name);
bool loadFileList(const Common::String &filedata);
bool loadFileList(const char *const *filelist, uint32 numFiles);
// This unloads *all* pakfiles, even kyra.dat and protected ones.
// It does not remove files from cache though!
void unloadAllPakFiles();
void listFiles(const Common::String &pattern, Common::ArchiveMemberList &list);
bool exists(const char *file, bool errorOutOnFail=false);
uint32 getFileSize(const char *file);
uint8 *fileData(const char *file, uint32 *size);
Common::SeekableReadStream *createReadStream(const Common::String &file);
bool loadFileToBuf(const char *file, void *buf, uint32 maxSize);
protected:
typedef Common::HashMap<Common::String, Common::Archive *, Common::CaseSensitiveString_Hash, Common::CaseSensitiveString_EqualTo> ArchiveMap;
ArchiveMap _archiveCache;
Common::SearchSet _files;
Common::SearchSet _archiveFiles;
Common::SearchSet _protectedFiles;
Common::Archive *loadArchive(const Common::String &name, Common::ArchiveMemberPtr member);
Common::Archive *loadInstallerArchive(const Common::String &file, const Common::String &ext, const uint8 offset);
bool loadProtectedFiles(const char *const * list);
void initializeLoaders();
typedef Common::List<Common::SharedPtr<ResArchiveLoader> > LoaderList;
LoaderList _loaders;
KyraEngine_v1 *_vm;
};
enum KyraResources {
kLoadAll = -1,
// This list has to match orderwise (and thus value wise) the static data list of "devtools/create_kyradat/create_kyradat.h"!
k1ForestSeq = 1,
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,
k1AudioTracks2,
k1AudioTracksIntro,
k1CreditsStrings,
k1TownsMusicFadeTable,
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,
#if defined(ENABLE_EOB) || defined(ENABLE_LOL)
kRpgCommonMoreStrings,
kRpgCommonDscShapeIndex,
kRpgCommonDscX,
kRpgCommonDscTileIndex,
kRpgCommonDscUnk2,
kRpgCommonDscDoorShapeIndex,
kRpgCommonDscDimData1,
kRpgCommonDscDimData2,
kRpgCommonDscBlockMap,
kRpgCommonDscDimMap,
kRpgCommonDscDoorY2,
kRpgCommonDscDoorFrameY1,
kRpgCommonDscDoorFrameY2,
kRpgCommonDscDoorFrameIndex1,
kRpgCommonDscDoorFrameIndex2,
kRpgCommonDscBlockIndex,
kEoBBaseChargenStrings1,
kEoBBaseChargenStrings2,
kEoBBaseChargenStartLevels,
kEoBBaseChargenStatStrings,
kEoBBaseChargenRaceSexStrings,
kEoBBaseChargenClassStrings,
kEoBBaseChargenAlignmentStrings,
kEoBBaseChargenEnterGameStrings,
kEoBBaseChargenClassMinStats,
kEoBBaseChargenRaceMinStats,
kEoBBaseChargenRaceMaxStats,
kEoBBaseSaveThrowTable1,
kEoBBaseSaveThrowTable2,
kEoBBaseSaveThrowTable3,
kEoBBaseSaveThrowTable4,
kEoBBaseSaveThrwLvlIndex,
kEoBBaseSaveThrwModDiv,
kEoBBaseSaveThrwModExt,
kEoBBasePryDoorStrings,
kEoBBaseWarningStrings,
kEoBBaseItemSuffixStringsRings,
kEoBBaseItemSuffixStringsPotions,
kEoBBaseItemSuffixStringsWands,
kEoBBaseRipItemStrings,
kEoBBaseCursedString,
kEoBBaseEnchantedString,
kEoBBaseMagicObjectStrings,
kEoBBaseMagicObjectString5,
kEoBBasePatternSuffix,
kEoBBasePatternGrFix1,
kEoBBasePatternGrFix2,
kEoBBaseValidateArmorString,
kEoBBaseValidateCursedString,
kEoBBaseValidateNoDropString,
kEoBBasePotionStrings,
kEoBBaseWandStrings,
kEoBBaseItemMisuseStrings,
kEoBBaseTakenStrings,
kEoBBasePotionEffectStrings,
kEoBBaseYesNoStrings,
kEoBBaseNpcMaxStrings,
kEoBBaseOkStrings,
kEoBBaseNpcJoinStrings,
kEoBBaseCancelStrings,
kEoBBaseAbortStrings,
kEoBBaseMenuStringsMain,
kEoBBaseMenuStringsSaveLoad,
kEoBBaseMenuStringsOnOff,
kEoBBaseMenuStringsSpells,
kEoBBaseMenuStringsRest,
kEoBBaseMenuStringsDrop,
kEoBBaseMenuStringsExit,
kEoBBaseMenuStringsStarve,
kEoBBaseMenuStringsScribe,
kEoBBaseMenuStringsDrop2,
kEoBBaseMenuStringsHead,
kEoBBaseMenuStringsPoison,
kEoBBaseMenuStringsMgc,
kEoBBaseMenuStringsPrefs,
kEoBBaseMenuStringsRest2,
kEoBBaseMenuStringsRest3,
kEoBBaseMenuStringsRest4,
kEoBBaseMenuStringsDefeat,
kEoBBaseMenuStringsTransfer,
kEoBBaseMenuStringsSpec,
kEoBBaseMenuStringsSpellNo,
kEoBBaseMenuYesNoStrings,
kEoBBaseSpellLevelsMage,
kEoBBaseSpellLevelsCleric,
kEoBBaseNumSpellsCleric,
kEoBBaseNumSpellsWisAdj,
kEoBBaseNumSpellsPal,
kEoBBaseNumSpellsMage,
kEoBBaseCharGuiStringsHp,
kEoBBaseCharGuiStringsWp1,
kEoBBaseCharGuiStringsWp2,
kEoBBaseCharGuiStringsWr,
kEoBBaseCharGuiStringsSt1,
kEoBBaseCharGuiStringsSt2,
kEoBBaseCharGuiStringsIn,
kEoBBaseCharStatusStrings7,
kEoBBaseCharStatusStrings81,
kEoBBaseCharStatusStrings82,
kEoBBaseCharStatusStrings9,
kEoBBaseCharStatusStrings12,
kEoBBaseCharStatusStrings131,
kEoBBaseCharStatusStrings132,
kEoBBaseLevelGainStrings,
kEoBBaseExperienceTable0,
kEoBBaseExperienceTable1,
kEoBBaseExperienceTable2,
kEoBBaseExperienceTable3,
kEoBBaseExperienceTable4,
kEoBBaseClassModifierFlags,
kEoBBaseMonsterStepTable01,
kEoBBaseMonsterStepTable02,
kEoBBaseMonsterStepTable1,
kEoBBaseMonsterStepTable2,
kEoBBaseMonsterStepTable3,
kEoBBaseMonsterCloseAttPosTable1,
kEoBBaseMonsterCloseAttPosTable21,
kEoBBaseMonsterCloseAttPosTable22,
kEoBBaseMonsterCloseAttUnkTable,
kEoBBaseMonsterCloseAttChkTable1,
kEoBBaseMonsterCloseAttChkTable2,
kEoBBaseMonsterCloseAttDstTable1,
kEoBBaseMonsterCloseAttDstTable2,
kEoBBaseMonsterProximityTable,
kEoBBaseFindBlockMonstersTable,
kEoBBaseMonsterDirChangeTable,
kEoBBaseMonsterDistAttStrings,
kEoBBaseEncodeMonsterDefs,
kEoBBaseNpcPresets,
kEoBBaseWllFlagPreset,
kEoBBaseDscShapeCoords,
kEoBBaseDscDoorScaleOffs,
kEoBBaseDscDoorScaleMult1,
kEoBBaseDscDoorScaleMult2,
kEoBBaseDscDoorScaleMult3,
kEoBBaseDscDoorScaleMult4,
kEoBBaseDscDoorScaleMult5,
kEoBBaseDscDoorScaleMult6,
kEoBBaseDscDoorType5Offs,
kEoBBaseDscDoorXE,
kEoBBaseDscDoorY1,
kEoBBaseDscDoorY3,
kEoBBaseDscDoorY4,
kEoBBaseDscDoorY5,
kEoBBaseDscDoorY6,
kEoBBaseDscDoorY7,
kEoBBaseDscDoorCoordsExt,
kEoBBaseDscItemPosIndex,
kEoBBaseDscItemShpX,
kEoBBaseDscItemScaleIndex,
kEoBBaseDscItemTileIndex,
kEoBBaseDscItemShapeMap,
kEoBBaseDscMonsterFrmOffsTbl1,
kEoBBaseDscMonsterFrmOffsTbl2,
kEoBBaseInvSlotX,
kEoBBaseInvSlotY,
kEoBBaseSlotValidationFlags,
kEoBBaseProjectileWeaponTypes,
kEoBBaseWandTypes,
kEoBBaseDrawObjPosIndex,
kEoBBaseFlightObjFlipIndex,
kEoBBaseFlightObjShpMap,
kEoBBaseFlightObjSclIndex,
kEoBBaseDscTelptrShpCoords,
kEoBBasePortalSeqData,
kEoBBaseManDef,
kEoBBaseManWord,
kEoBBaseManPrompt,
kEoBBaseBookNumbers,
kEoBBaseMageSpellsList,
kEoBBaseClericSpellsList,
kEoBBaseSpellNames,
kEoBBaseMagicStrings1,
kEoBBaseMagicStrings2,
kEoBBaseMagicStrings3,
kEoBBaseMagicStrings4,
kEoBBaseMagicStrings6,
kEoBBaseMagicStrings7,
kEoBBaseMagicStrings8,
kEoBBaseExpObjectTlMode,
kEoBBaseExpObjectTblIndex,
kEoBBaseExpObjectShpStart,
kEoBBaseExpObjectTbl1,
kEoBBaseExpObjectTbl2,
kEoBBaseExpObjectTbl3,
kEoBBaseExpObjectY,
kEoBBaseSparkDefSteps,
kEoBBaseSparkDefSubSteps,
kEoBBaseSparkDefShift,
kEoBBaseSparkDefAdd,
kEoBBaseSparkDefX,
kEoBBaseSparkDefY,
kEoBBaseSparkOfFlags1,
kEoBBaseSparkOfFlags2,
kEoBBaseSparkOfShift,
kEoBBaseSparkOfX,
kEoBBaseSparkOfY,
kEoBBaseSpellProperties,
kEoBBaseMagicFlightProps,
kEoBBaseTurnUndeadEffect,
kEoBBaseBurningHandsDest,
kEoBBaseConeOfColdDest1,
kEoBBaseConeOfColdDest2,
kEoBBaseConeOfColdDest3,
kEoBBaseConeOfColdDest4,
kEoBBaseConeOfColdGfxTbl,
kEoB1MainMenuStrings,
kEoB1BonusStrings,
kEoB1IntroFilesOpening,
kEoB1IntroFilesTower,
kEoB1IntroFilesOrb,
kEoB1IntroFilesWdEntry,
kEoB1IntroFilesKing,
kEoB1IntroFilesHands,
kEoB1IntroFilesWdExit,
kEoB1IntroFilesTunnel,
kEoB1IntroOpeningFrmDelay,
kEoB1IntroWdEncodeX,
kEoB1IntroWdEncodeY,
kEoB1IntroWdEncodeWH,
kEoB1IntroWdDsX,
kEoB1IntroWdDsY,
kEoB1IntroTvlX1,
kEoB1IntroTvlY1,
kEoB1IntroTvlX2,
kEoB1IntroTvlY2,
kEoB1IntroTvlW,
kEoB1IntroTvlH,
kEoB1DoorShapeDefs,
kEoB1DoorSwitchShapeDefs,
kEoB1DoorSwitchCoords,
kEoB1MonsterProperties,
kEoB1EnemyMageSpellList,
kEoB1EnemyMageSfx,
kEoB1BeholderSpellList,
kEoB1BeholderSfx,
kEoB1TurnUndeadString,
kEoB1CgaMappingDefault,
kEoB1CgaMappingAlt,
kEoB1CgaMappingInv,
kEoB1CgaMappingItemsL,
kEoB1CgaMappingItemsS,
kEoB1CgaMappingThrown,
kEoB1CgaMappingIcons,
kEoB1CgaMappingDeco,
kEoB1CgaLevelMappingIndex,
kEoB1CgaMappingLevel0,
kEoB1CgaMappingLevel1,
kEoB1CgaMappingLevel2,
kEoB1CgaMappingLevel3,
kEoB1CgaMappingLevel4,
kEoB1NpcShpData,
kEoB1NpcSubShpIndex1,
kEoB1NpcSubShpIndex2,
kEoB1NpcSubShpY,
kEoB1Npc0Strings,
kEoB1Npc11Strings,
kEoB1Npc12Strings,
kEoB1Npc21Strings,
kEoB1Npc22Strings,
kEoB1Npc31Strings,
kEoB1Npc32Strings,
kEoB1Npc4Strings,
kEoB1Npc5Strings,
kEoB1Npc6Strings,
kEoB1Npc7Strings,
kEoB2MainMenuStrings,
kEoB2TransferPortraitFrames,
kEoB2TransferConvertTable,
kEoB2TransferItemTable,
kEoB2TransferExpTable,
kEoB2TransferStrings1,
kEoB2TransferStrings2,
kEoB2TransferLabels,
kEoB2IntroStrings,
kEoB2IntroCPSFiles,
kEoB2IntroAnimData00,
kEoB2IntroAnimData01,
kEoB2IntroAnimData02,
kEoB2IntroAnimData03,
kEoB2IntroAnimData04,
kEoB2IntroAnimData05,
kEoB2IntroAnimData06,
kEoB2IntroAnimData07,
kEoB2IntroAnimData08,
kEoB2IntroAnimData09,
kEoB2IntroAnimData10,
kEoB2IntroAnimData11,
kEoB2IntroAnimData12,
kEoB2IntroAnimData13,
kEoB2IntroAnimData14,
kEoB2IntroAnimData15,
kEoB2IntroAnimData16,
kEoB2IntroAnimData17,
kEoB2IntroAnimData18,
kEoB2IntroAnimData19,
kEoB2IntroAnimData20,
kEoB2IntroAnimData21,
kEoB2IntroAnimData22,
kEoB2IntroAnimData23,
kEoB2IntroAnimData24,
kEoB2IntroAnimData25,
kEoB2IntroAnimData26,
kEoB2IntroAnimData27,
kEoB2IntroAnimData28,
kEoB2IntroAnimData29,
kEoB2IntroAnimData30,
kEoB2IntroAnimData31,
kEoB2IntroAnimData32,
kEoB2IntroAnimData33,
kEoB2IntroAnimData34,
kEoB2IntroAnimData35,
kEoB2IntroAnimData36,
kEoB2IntroAnimData37,
kEoB2IntroAnimData38,
kEoB2IntroAnimData39,
kEoB2IntroAnimData40,
kEoB2IntroAnimData41,
kEoB2IntroAnimData42,
kEoB2IntroAnimData43,
kEoB2IntroShapes00,
kEoB2IntroShapes01,
kEoB2IntroShapes04,
kEoB2IntroShapes07,
kEoB2FinaleStrings,
kEoB2CreditsData,
kEoB2FinaleCPSFiles,
kEoB2FinaleAnimData00,
kEoB2FinaleAnimData01,
kEoB2FinaleAnimData02,
kEoB2FinaleAnimData03,
kEoB2FinaleAnimData04,
kEoB2FinaleAnimData05,
kEoB2FinaleAnimData06,
kEoB2FinaleAnimData07,
kEoB2FinaleAnimData08,
kEoB2FinaleAnimData09,
kEoB2FinaleAnimData10,
kEoB2FinaleAnimData11,
kEoB2FinaleAnimData12,
kEoB2FinaleAnimData13,
kEoB2FinaleAnimData14,
kEoB2FinaleAnimData15,
kEoB2FinaleAnimData16,
kEoB2FinaleAnimData17,
kEoB2FinaleAnimData18,
kEoB2FinaleAnimData19,
kEoB2FinaleAnimData20,
kEoB2FinaleShapes00,
kEoB2FinaleShapes03,
kEoB2FinaleShapes07,
kEoB2FinaleShapes09,
kEoB2FinaleShapes10,
kEoB2NpcShapeData,
kEoB2Npc1Strings,
kEoB2Npc2Strings,
kEoB2MonsterDustStrings,
kEoB2DreamSteps,
kEoB2KheldranStrings,
kEoB2HornStrings,
kEoB2HornSounds,
kEoB2WallOfForceDsX,
kEoB2WallOfForceDsY,
kEoB2WallOfForceNumW,
kEoB2WallOfForceNumH,
kEoB2WallOfForceShpId,
kLoLIngamePakFiles,
kLoLCharacterDefs,
kLoLIngameSfxFiles,
kLoLIngameSfxIndex,
kLoLMusicTrackMap,
kLoLIngameGMSfxIndex,
kLoLIngameMT32SfxIndex,
kLoLIngamePcSpkSfxIndex,
kLoLSpellProperties,
kLoLGameShapeMap,
kLoLSceneItemOffs,
kLoLCharInvIndex,
kLoLCharInvDefs,
kLoLCharDefsMan,
kLoLCharDefsWoman,
kLoLCharDefsKieran,
kLoLCharDefsAkshel,
kLoLExpRequirements,
kLoLMonsterModifiers1,
kLoLMonsterModifiers2,
kLoLMonsterModifiers3,
kLoLMonsterModifiers4,
kLoLMonsterShiftOffsets,
kLoLMonsterDirFlags,
kLoLMonsterScaleY,
kLoLMonsterScaleX,
kLoLMonsterScaleWH,
kLoLFlyingObjectShp,
kLoLInventoryDesc,
kLoLLevelShpList,
kLoLLevelDatList,
kLoLCompassDefs,
kLoLItemPrices,
kLoLStashSetup,
kLoLDscWalls,
kLoLDscOvlMap,
kLoLDscScaleWidthData,
kLoLDscScaleHeightData,
kLoLBaseDscY,
kLoLDscDoorScale,
kLoLDscDoor4,
kLoLDscDoorX,
kLoLDscDoorY,
kLoLDscOvlIndex,
kLoLScrollXTop,
kLoLScrollYTop,
kLoLScrollXBottom,
kLoLScrollYBottom,
kLoLButtonDefs,
kLoLButtonList1,
kLoLButtonList2,
kLoLButtonList3,
kLoLButtonList4,
kLoLButtonList5,
kLoLButtonList6,
kLoLButtonList7,
kLoLButtonList8,
kLoLLegendData,
kLoLMapCursorOvl,
kLoLMapStringId,
kLoLSpellbookAnim,
kLoLSpellbookCoords,
kLoLHealShapeFrames,
kLoLLightningDefs,
kLoLFireballCoords,
kLoLCredits,
kLoLHistory,
#endif // ENABLE_EOB || ENABLE_LOL
kMaxResIDs
};
struct Shape;
struct Room;
struct AmigaSfxTable;
struct HoFSeqData;
struct HoFSeqItemAnimData;
class StaticResource {
public:
static const Common::String staticDataFilename() { return "KYRA.DAT"; }
StaticResource(KyraEngine_v1 *vm) : _vm(vm), _resList(), _fileLoader(0), _dataTable() {}
~StaticResource() { deinit(); }
bool loadStaticResourceFile();
bool init();
void deinit();
const char *const *loadStrings(int id, int &strings);
const uint8 *loadRawData(int id, int &size);
const Shape *loadShapeTable(int id, int &entries);
const AmigaSfxTable *loadAmigaSfxTable(int id, int &entries);
const Room *loadRoomTable(int id, int &entries);
const HoFSeqData *loadHoFSequenceData(int id, int &entries);
const HoFSeqItemAnimData *loadHoFSeqItemAnimData(int id, int &entries);
const ItemAnimDefinition *loadItemAnimDefinition(int id, int &entries);
#if defined(ENABLE_EOB) || defined(ENABLE_LOL)
const uint16 *loadRawDataBe16(int id, int &entries);
const uint32 *loadRawDataBe32(int id, int &entries);
#endif // (ENABLE_EOB || ENABLE_LOL)
#ifdef ENABLE_LOL
const LoLCharacter *loadCharData(int id, int &entries);
const SpellProperty *loadSpellData(int id, int &entries);
const CompassDef *loadCompassData(int id, int &entries);
const FlyingObjectShape *loadFlyingObjectData(int id, int &entries);
const LoLButtonDef *loadButtonDefs(int id, int &entries);
#endif // ENABLE_LOL
#ifdef ENABLE_EOB
const DarkMoonAnimCommand *loadEoB2SeqData(int id, int &entries);
const DarkMoonShapeDef *loadEoB2ShapeData(int id, int &entries);
const EoBCharacter *loadEoBNpcData(int id, int &entries);
#endif // ENABLE_EOB
// use '-1' to prefetch/unload all ids
// prefetchId retruns false if only on of the resources
// can't be loaded and it breaks then the first res
// can't be loaded
bool prefetchId(int id);
void unloadId(int id);
private:
bool tryKyraDatLoad();
KyraEngine_v1 *_vm;
struct FileType;
bool checkResList(int id, int &type, const void *&ptr, int &size);
const FileType *getFiletype(int type);
const void *getData(int id, int requesttype, int &size);
bool loadDummy(Common::SeekableReadStream &stream, 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 loadHoFSeqItemAnimData(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadItemAnimDefinition(Common::SeekableReadStream &stream, void *&ptr, int &size);
#if defined(ENABLE_EOB) || defined(ENABLE_LOL)
bool loadRawDataBe16(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadRawDataBe32(Common::SeekableReadStream &stream, void *&ptr, int &size);
#endif // (ENABLE_LOL || ENABLE_EOB)
#ifdef ENABLE_LOL
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 loadButtonDefs(Common::SeekableReadStream &stream, void *&ptr, int &size);
#endif // ENABLE_LOL
#ifdef ENABLE_EOB
bool loadEoB2SeqData(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadEoB2ShapeData(Common::SeekableReadStream &stream, void *&ptr, int &size);
bool loadEoBNpcData(Common::SeekableReadStream &stream, void *&ptr, int &size);
#endif // ENABLE_EOB
void freeDummy(void *&ptr, int &size);
void freeRawData(void *&ptr, int &size);
void freeStringTable(void *&ptr, int &size);
void freeShapeTable(void *&ptr, int &size);
void freeAmigaSfxTable(void *&ptr, int &size);
void freeRoomTable(void *&ptr, int &size);
void freeHoFSequenceData(void *&ptr, int &size);
void freeHoFSeqItemAnimData(void *&ptr, int &size);
void freeItemAnimDefinition(void *&ptr, int &size);
#if defined(ENABLE_EOB) || defined(ENABLE_LOL)
void freeRawDataBe16(void *&ptr, int &size);
void freeRawDataBe32(void *&ptr, int &size);
#endif // (ENABLE_EOB || ENABLE_LOL)
#ifdef ENABLE_LOL
void freeCharData(void *&ptr, int &size);
void freeSpellData(void *&ptr, int &size);
void freeCompassData(void *&ptr, int &size);
void freeFlyingObjectData(void *&ptr, int &size);
void freeButtonDefs(void *&ptr, int &size);
#endif // ENABLE_LOL
#ifdef ENABLE_EOB
void freeEoB2SeqData(void *&ptr, int &size);
void freeEoB2ShapeData(void *&ptr, int &size);
void freeEoBNpcData(void *&ptr, int &size);
#endif // ENABLE_EOB
enum ResTypes {
kStringList = 0,
kRawData = 1,
kRoomList = 2,
kShapeList = 3,
kAmigaSfxTable = 4,
k2SeqData = 5,
k2SeqItemAnimData = 6,
k2ItemAnimDefinition = 7,
kLoLCharData = 8,
kLoLSpellData = 9,
kLoLCompassData = 10,
kLoLFlightShpData = 11,
kLoLButtonData = 12,
kRawDataBe16 = 13,
kRawDataBe32 = 14,
kEoB2SequenceData = 15,
kEoB2ShapeData = 16,
kEoBNpcData = 17
};
struct FileType {
int type;
typedef bool (StaticResource::*LoadFunc)(Common::SeekableReadStream &stream, void *&ptr, int &size);
typedef void (StaticResource::*FreeFunc)(void *&ptr, int &size);
LoadFunc load;
FreeFunc free;
};
struct ResData {
int id;
int type;
int size;
void *data;
};
Common::List<ResData> _resList;
const FileType *_fileLoader;
struct DataDescriptor {
DataDescriptor() : filename(0), type(0) {}
DataDescriptor(uint32 f, uint8 t) : filename(f), type(t) {}
uint32 filename;
uint8 type;
};
typedef Common::HashMap<uint16, DataDescriptor> DataMap;
DataMap _dataTable;
};
} // End of namespace Kyra
#endif