aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/resource.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/resource.h')
-rw-r--r--engines/kyra/resource.h178
1 files changed, 107 insertions, 71 deletions
diff --git a/engines/kyra/resource.h b/engines/kyra/resource.h
index f414cacee8..d43f730e6b 100644
--- a/engines/kyra/resource.h
+++ b/engines/kyra/resource.h
@@ -36,7 +36,7 @@
#include "common/stream.h"
#include "common/ptr.h"
-#include "kyra/kyra.h"
+#include "kyra/kyra_v1.h"
#include "kyra/kyra_hof.h"
namespace Kyra {
@@ -52,7 +52,7 @@ struct ResFileEntry {
enum kType {
kRaw = 0,
kPak = 1,
- kIns = 2,
+ kInsMal = 2,
kTlk = 3,
kAutoDetect
};
@@ -60,7 +60,13 @@ struct ResFileEntry {
uint32 offset;
};
+struct CompFileEntry {
+ uint32 size;
+ uint8 *data;
+};
+
typedef Common::HashMap<Common::String, ResFileEntry, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> ResFileMap;
+typedef Common::HashMap<Common::String, CompFileEntry, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> CompFileMap;
class Resource;
class ResArchiveLoader {
@@ -69,6 +75,10 @@ public:
File() : filename(), entry() {}
File(const Common::String &f, const ResFileEntry &e) : filename(f), entry(e) {}
+ bool operator ==(const Common::String &r) const {
+ return filename.equalsIgnoreCase(r);
+ }
+
Common::String filename;
ResFileEntry entry;
};
@@ -86,9 +96,17 @@ public:
protected:
};
+class CompArchiveLoader {
+public:
+ virtual ~CompArchiveLoader() {}
+
+ virtual bool checkForFiles() const = 0;
+ virtual bool loadFile(CompFileMap &loadTo) const = 0;
+};
+
class Resource {
public:
- Resource(KyraEngine *vm);
+ Resource(KyraEngine_v1 *vm);
~Resource();
bool reset();
@@ -122,89 +140,97 @@ protected:
LoaderList _loaders;
ResFileMap _map;
- KyraEngine *_vm;
+ typedef Common::List<Common::SharedPtr<CompArchiveLoader> > CompLoaderList;
+ typedef CompLoaderList::iterator CompLoaderIterator;
+ typedef CompLoaderList::const_iterator CCompLoaderIterator;
+ CompLoaderList _compLoaders;
+ CompFileMap _compFiles;
+
+ void tryLoadCompFiles();
+ void clearCompFileList();
+
+ KyraEngine_v1 *_vm;
};
-// TODO?: maybe prefix all things here with 'kKyra1' instead of 'k'
enum kKyraResources {
kLoadAll = -1,
- kForestSeq,
- kKallakWritingSeq,
- kKyrandiaLogoSeq,
- kKallakMalcolmSeq,
- kMalcolmTreeSeq,
- kWestwoodLogoSeq,
+ k1ForestSeq,
+ k1KallakWritingSeq,
+ k1KyrandiaLogoSeq,
+ k1KallakMalcolmSeq,
+ k1MalcolmTreeSeq,
+ k1WestwoodLogoSeq,
- kDemo1Seq,
- kDemo2Seq,
- kDemo3Seq,
- kDemo4Seq,
+ k1Demo1Seq,
+ k1Demo2Seq,
+ k1Demo3Seq,
+ k1Demo4Seq,
- kAmuleteAnimSeq,
+ k1AmuleteAnimSeq,
- kOutroReunionSeq,
+ k1OutroReunionSeq,
- kIntroCPSStrings,
- kIntroCOLStrings,
- kIntroWSAStrings,
- kIntroStrings,
+ k1IntroCPSStrings,
+ k1IntroCOLStrings,
+ k1IntroWSAStrings,
+ k1IntroStrings,
- kOutroHomeString,
+ k1OutroHomeString,
- kRoomFilenames,
- kRoomList,
+ k1RoomFilenames,
+ k1RoomList,
- kCharacterImageFilenames,
+ k1CharacterImageFilenames,
- kItemNames,
- kTakenStrings,
- kPlacedStrings,
- kDroppedStrings,
- kNoDropStrings,
+ k1ItemNames,
+ k1TakenStrings,
+ k1PlacedStrings,
+ k1DroppedStrings,
+ k1NoDropStrings,
- kPutDownString,
- kWaitAmuletString,
- kBlackJewelString,
- kPoisonGoneString,
- kHealingTipString,
- kWispJewelStrings,
- kMagicJewelStrings,
+ k1PutDownString,
+ k1WaitAmuletString,
+ k1BlackJewelString,
+ k1PoisonGoneString,
+ k1HealingTipString,
+ k1WispJewelStrings,
+ k1MagicJewelStrings,
- kThePoisonStrings,
- kFluteStrings,
+ k1ThePoisonStrings,
+ k1FluteStrings,
- kFlaskFullString,
- kFullFlaskString,
+ k1FlaskFullString,
+ k1FullFlaskString,
- kVeryCleverString,
- kNewGameString,
+ k1VeryCleverString,
+ k1NewGameString,
- kDefaultShapes,
- kHealing1Shapes,
- kHealing2Shapes,
- kPoisonDeathShapes,
- kFluteShapes,
- kWinter1Shapes,
- kWinter2Shapes,
- kWinter3Shapes,
- kDrinkShapes,
- kWispShapes,
- kMagicAnimShapes,
- kBranStoneShapes,
+ k1DefaultShapes,
+ k1Healing1Shapes,
+ k1Healing2Shapes,
+ k1PoisonDeathShapes,
+ k1FluteShapes,
+ k1Winter1Shapes,
+ k1Winter2Shapes,
+ k1Winter3Shapes,
+ k1DrinkShapes,
+ k1WispShapes,
+ k1MagicAnimShapes,
+ k1BranStoneShapes,
- kPaletteList,
+ k1PaletteList,
- kGUIStrings,
- kConfigStrings,
+ k1GUIStrings,
+ k1ConfigStrings,
- kAudioTracks,
- kAudioTracksIntro,
+ k1AudioTracks,
+ k1AudioTracksIntro,
- kKyra1TownsSFXwdTable,
- kKyra1TownsSFXbtTable,
- kKyra1TownsCDATable,
- kCreditsStrings,
+ k1TownsSFXwdTable,
+ k1TownsSFXbtTable,
+ k1TownsCDATable,
+ k1CreditsStrings,
k2SeqplayPakFiles,
k2SeqplayCredits,
@@ -229,6 +255,15 @@ enum kKyraResources {
k2IngameShapeAnimData,
k2IngameTlkDemoStrings,
+ k3MainMenuStrings,
+ k3MusicFiles,
+ k3ScoreTable,
+ k3SfxFiles,
+ k3SfxMap,
+ k3ItemAnimData,
+ k3ItemMagicTable,
+ k3ItemStringMap,
+
kMaxResIDs
};
@@ -239,7 +274,7 @@ class StaticResource {
public:
static const Common::String staticDataFilename() { return "kyra.dat"; }
- StaticResource(KyraEngine *vm) : _vm(vm), _resList(), _fileLoader(0), _builtIn(0), _filenameTable(0) {}
+ StaticResource(KyraEngine_v1 *vm) : _vm(vm), _resList(), _fileLoader(0), _builtIn(0), _filenameTable(0) {}
~StaticResource() { deinit(); }
static bool checkKyraDat();
@@ -253,8 +288,8 @@ public:
const Room *loadRoomTable(int id, int &entries);
const uint8 * const*loadPaletteTable(int id, int &entries);
const HofSeqData *loadHofSequenceData(int id, int &entries);
- const ItemAnimData_v1 *loadHofShapeAnimDataV1(int id, int &entries);
- const ItemAnimData_v2 *loadHofShapeAnimDataV2(int id, int &entries);
+ const ItemAnimData_v1 *loadShapeAnimData_v1(int id, int &entries);
+ const ItemAnimData_v2 *loadShapeAnimData_v2(int id, int &entries);
// use '-1' to prefetch/unload all ids
// prefetchId retruns false if only on of the resources
@@ -263,9 +298,9 @@ public:
bool prefetchId(int id);
void unloadId(int id);
private:
- void outputError();
+ void outputError(const Common::String &error);
- KyraEngine *_vm;
+ KyraEngine_v1 *_vm;
struct FilenameTable;
struct ResData;
@@ -284,8 +319,8 @@ private:
bool loadRoomTable(const char *filename, void *&ptr, int &size);
bool loadPaletteTable(const char *filename, void *&ptr, int &size);
bool loadHofSequenceData(const char *filename, void *&ptr, int &size);
- bool loadHofShapeAnimDataV1(const char *filename, void *&ptr, int &size);
- bool loadHofShapeAnimDataV2(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);
void freeRawData(void *&ptr, int &size);
void freeStringTable(void *&ptr, int &size);
@@ -354,3 +389,4 @@ private:
+