aboutsummaryrefslogtreecommitdiff
path: root/engines/made/database.h
diff options
context:
space:
mode:
authorBenjamin Haisch2008-05-28 20:16:22 +0000
committerBenjamin Haisch2008-05-28 20:16:22 +0000
commit885fa54f28df837c2045e4d8405e1ab0de60a9e3 (patch)
tree9540ca685538bbb1ac24432fdffbbab4974a0f97 /engines/made/database.h
parentdf0e072a1b59011a4f37b41f9ae53036c3682e8f (diff)
downloadscummvm-rg350-885fa54f28df837c2045e4d8405e1ab0de60a9e3.tar.gz
scummvm-rg350-885fa54f28df837c2045e4d8405e1ab0de60a9e3.tar.bz2
scummvm-rg350-885fa54f28df837c2045e4d8405e1ab0de60a9e3.zip
Split Object/GameDatabase into engine version specific classes
svn-id: r32349
Diffstat (limited to 'engines/made/database.h')
-rw-r--r--engines/made/database.h124
1 files changed, 86 insertions, 38 deletions
diff --git a/engines/made/database.h b/engines/made/database.h
index 0924200374..49655e41ae 100644
--- a/engines/made/database.h
+++ b/engines/made/database.h
@@ -40,29 +40,25 @@ namespace Made {
class Object {
public:
Object();
- ~Object();
+ virtual ~Object();
+
+ virtual int load(Common::SeekableReadStream &source) = 0;
+ virtual int load(byte *source) = 0;
+ virtual int save(Common::WriteStream &dest) = 0;
+ virtual uint16 getFlags() = 0;
+ virtual uint16 getClass() = 0;
+ virtual uint16 getSize() = 0;
+ virtual byte getCount1() = 0;
+ virtual byte getCount2() = 0;
+ virtual byte *getData() = 0;
+ virtual bool isConstant() = 0;
- int loadVersion2(Common::SeekableReadStream &source);
- int saveVersion2(Common::WriteStream &dest);
-
- int loadVersion3(Common::SeekableReadStream &source);
- int loadVersion3(byte *source);
-
- uint16 getFlags() const;
- uint16 getClass() const;
- uint16 getSize() const;
-
- byte getCount1() const;
- byte getCount2() const;
-
- byte *getData();
const char *getString();
void setString(const char *str);
bool isObject();
bool isVector();
- bool isConstant() const { return !(getFlags() & 1); }
-
+
int16 getVectorSize();
int16 getVectorItem(int16 index);
void setVectorItem(int16 index, int16 value);
@@ -75,20 +71,52 @@ protected:
byte *_objData;
};
+class ObjectV2 : public Object {
+public:
+ int load(Common::SeekableReadStream &source);
+ int load(byte *source);
+ int save(Common::WriteStream &dest);
+ uint16 getFlags();
+ uint16 getClass();
+ uint16 getSize();
+ byte getCount1();
+ byte getCount2();
+ byte *getData();
+
+ bool isConstant() {
+ return false;
+ }
+
+};
+
+class ObjectV3 : public Object {
+public:
+ int load(Common::SeekableReadStream &source);
+ int load(byte *source);
+ int save(Common::WriteStream &dest);
+ uint16 getFlags();
+ uint16 getClass();
+ uint16 getSize();
+ byte getCount1();
+ byte getCount2();
+ byte *getData();
+
+ bool isConstant() {
+ return !(getFlags() & 1);
+ }
+
+};
+
class GameDatabase {
public:
GameDatabase(MadeEngine *vm);
- ~GameDatabase();
+ virtual ~GameDatabase();
void open(const char *filename);
void openFromRed(const char *redFilename, const char *filename);
- bool getSavegameDescription(const char *filename, Common::String &description);
- int16 savegame(const char *filename, const char *description, int16 version);
- int16 loadgame(const char *filename, int16 version);
-
- Object *getObject(int16 index) const {
+ Object *getObject(int16 index) const {
if (index >= 1)
return _objects[index - 1];
else
@@ -101,32 +129,52 @@ public:
int16 getVar(int16 index);
void setVar(int16 index, int16 value);
-
- int16 *getObjectPropertyPtrV2(int16 objectIndex, int16 propertyId, int16 &propertyFlag);
- int16 *getObjectPropertyPtrV3(int16 objectIndex, int16 propertyId, int16 &propertyFlag);
- int16 *getObjectPropertyPtr(int16 objectIndex, int16 propertyId, int16 &propertyFlag);
-
+
+ virtual int16 *getObjectPropertyPtr(int16 objectIndex, int16 propertyId, int16 &propertyFlag) = 0;
+ virtual const char *getString(uint16 offset) = 0;
+ virtual bool getSavegameDescription(const char *filename, Common::String &description) = 0;
+ virtual int16 savegame(const char *filename, const char *description, int16 version) = 0;
+ virtual int16 loadgame(const char *filename, int16 version) = 0;
+
int16 getObjectProperty(int16 objectIndex, int16 propertyId);
int16 setObjectProperty(int16 objectIndex, int16 propertyId, int16 value);
-
- const char *getString(uint16 offset);
void dumpObject(int16 index);
-
+
protected:
MadeEngine *_vm;
Common::Array<Object*> _objects;
byte *_gameState;
uint32 _gameStateSize;
- char *_gameText;
int16 _mainCodeObjectIndex;
+ virtual void load(Common::SeekableReadStream &sourceS) = 0;
+};
+
+class GameDatabaseV2 : public GameDatabase {
+public:
+ GameDatabaseV2(MadeEngine *vm);
+ ~GameDatabaseV2();
+ int16 *getObjectPropertyPtr(int16 objectIndex, int16 propertyId, int16 &propertyFlag);
+ const char *getString(uint16 offset);
+ bool getSavegameDescription(const char *filename, Common::String &description);
+ int16 savegame(const char *filename, const char *description, int16 version);
+ int16 loadgame(const char *filename, int16 version);
+protected:
+ char *_gameText;
+ void load(Common::SeekableReadStream &sourceS);
+};
+
+class GameDatabaseV3 : public GameDatabase {
+public:
+ GameDatabaseV3(MadeEngine *vm);
+ int16 *getObjectPropertyPtr(int16 objectIndex, int16 propertyId, int16 &propertyFlag);
+ const char *getString(uint16 offset);
+ bool getSavegameDescription(const char *filename, Common::String &description);
+ int16 savegame(const char *filename, const char *description, int16 version);
+ int16 loadgame(const char *filename, int16 version);
+protected:
+ char *_gameText;
void load(Common::SeekableReadStream &sourceS);
- void loadVersion2(Common::SeekableReadStream &sourceS);
- void loadVersion3(Common::SeekableReadStream &sourceS);
- int16 savegameV2(Common::OutSaveFile *out, const char *description, int16 version);
- int16 loadgameV2(Common::InSaveFile *in, int16 version);
- int16 savegameV3(Common::OutSaveFile *out, const char *description, int16 version);
- int16 loadgameV3(Common::InSaveFile *in, int16 version);
};
} // End of namespace Made