aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/gob.h
diff options
context:
space:
mode:
authorSven Hesse2006-11-27 14:19:30 +0000
committerSven Hesse2006-11-27 14:19:30 +0000
commit9afb08341c89d20f54de4b6c9efec69ab60fc79d (patch)
tree4a4ec7a00af1ff2cd88e0b328d69f2b5ec40cb49 /engines/gob/gob.h
parentb2fb23a134d7f6486bef0922159fa747411d9f14 (diff)
downloadscummvm-rg350-9afb08341c89d20f54de4b6c9efec69ab60fc79d.tar.gz
scummvm-rg350-9afb08341c89d20f54de4b6c9efec69ab60fc79d.tar.bz2
scummvm-rg350-9afb08341c89d20f54de4b6c9efec69ab60fc79d.zip
- Properly implemented o2_getCDTrackPos()
- Each save has now its own file (.s??). They also should be endian-safe now (Can be disabled for testing by uncommenting #define GOB_ORIGSAVES in gob.cpp) - General endianness-fixes svn-id: r24794
Diffstat (limited to 'engines/gob/gob.h')
-rw-r--r--engines/gob/gob.h53
1 files changed, 45 insertions, 8 deletions
diff --git a/engines/gob/gob.h b/engines/gob/gob.h
index e13b959955..c90dde4592 100644
--- a/engines/gob/gob.h
+++ b/engines/gob/gob.h
@@ -52,13 +52,38 @@ class GTimer;
class Util;
class Music;
+/*
#define VAR_OFFSET(offs) (*(uint32 *)(_vm->_global->_inter_variables + (offs)))
#define VAR(var) VAR_OFFSET((var) << 2)
#define VAR_ADDRESS(var) (&VAR(var))
-//#define WRITE_VAR_OFFSET(offs, val) _vm->writeVarDebug(offs, val)
#define WRITE_VAR_OFFSET(offs, val) (VAR_OFFSET(offs) = (val))
#define WRITE_VAR(var, val) WRITE_VAR_OFFSET((var) << 2, (val))
+*/
+
+#define VARP(offs) (_vm->_global->_inter_variables + (offs))
+#define WRITE_VARO_UINT32(offs, val) _vm->_global->writeVar(offs, (uint32) (val))
+#define WRITE_VARO_UINT16(offs, val) _vm->_global->writeVar(offs, (uint16) (val))
+#define WRITE_VARO_UINT8(offs, val) _vm->_global->writeVar(offs, (uint8) (val))
+#define WRITE_VARO_STR(offs, str) _vm->_global->writeVar(offs, (const char *) (str))
+#define WRITE_VAR_UINT32(var, val) WRITE_VARO_UINT32((var) << 2, (val))
+#define WRITE_VAR_UINT16(var, val) WRITE_VARO_UINT16((var) << 2, (val))
+#define WRITE_VAR_UINT8(var, val) WRITE_VARO_UINT8((var) << 2, (val))
+#define WRITE_VAR_STR(var, str) WRITE_VARO_STR((var) << 2, (str))
+#define READ_VARO_UINT32(offs) (*((uint32 *) VARP(offs)))
+#define READ_VARO_UINT16(offs) (*((uint16 *) VARP(offs)))
+#define READ_VARO_UINT8(offs) (*((uint8 *) VARP(offs)))
+#define READ_VAR_UINT32(var) READ_VARO_UINT32((var) << 2)
+#define READ_VAR_UINT16(var) READ_VARO_UINT16((var) << 2)
+#define READ_VAR_UINT8(var) READ_VARO_UINT8((var) << 2)
+#define GET_VARO_STR(offs) ((char *) VARP(offs))
+#define GET_VAR_STR(var) GET_VARO_STR((var) << 2)
+
+#define WRITE_VAR_OFFSET(offs, val) WRITE_VARO_UINT32((offs), (val))
+#define WRITE_VAR(var, val) WRITE_VAR_UINT32((var), (val))
+#define VAR_OFFSET(offs) READ_VARO_UINT32(offs)
+#define VAR(var) READ_VAR_UINT32(var)
+#define VAR_ADDRESS(var) ((uint32 *) VARP((var) << 2))
enum {
GF_GOB1 = 1 << 0,
@@ -83,16 +108,28 @@ enum {
};
enum SaveFiles {
- SAVE_CAT = 0,
- SAVE_SAV,
- SAVE_BLO
+ SAVE_CAT = 0, // Saves
+ SAVE_SAV, // Draw::_backSurface (why?)
+ SAVE_BLO // Notes
};
class GobEngine : public Engine {
protected:
+ char **_saveFiles;
+ char *_saveSlotFile;
+ char _saveIndex[600];
+ byte _saveIndexSizes[600];
+
int go();
int init();
+ inline uint32 getSaveSize(Common::InSaveFile &in);
+ const char *getSaveSlotFile(int slot);
+ bool saveGame(int saveSlot, int16 dataVar, int32 size, int32 offset);
+ bool loadGame(int saveSlot, int16 dataVar, int32 size, int32 offset);
+ uint32 writeDataEndian(Common::OutSaveFile &out, char *varBuf, byte *sizeBuf, int32 size);
+ uint32 readDataEndian(Common::InSaveFile &in, char *varBuf, byte *sizeBuf, int32 size);
+
public:
GobEngine(OSystem *syst, uint32 features, Common::Language lang, const char *startTotBase);
virtual ~GobEngine();
@@ -105,7 +142,6 @@ public:
Common::Language _language;
char *_startTot;
char *_startTot0;
- char **_saveFiles;
bool _copyProtection;
bool _quitRequested;
@@ -129,12 +165,13 @@ public:
Util *_util;
Inter *_inter;
Music *_music;
+ GobEngine *_vm;
void writeVarDebug(uint32 offs, uint32 v);
- inline uint32 getSaveSize(Common::InSaveFile &in);
+
int32 getSaveSize(enum SaveFiles sFile);
- void saveGame(enum SaveFiles sFile, int16 dataVar, int32 size, int32 offset);
- void loadGame(enum SaveFiles sFile, int16 dataVar, int32 size, int32 offset);
+ void saveGameData(enum SaveFiles sFile, int16 dataVar, int32 size, int32 offset);
+ void loadGameData(enum SaveFiles sFile, int16 dataVar, int32 size, int32 offset);
};
} // End of namespace Gob