aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/game.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/gob/game.h')
-rw-r--r--engines/gob/game.h132
1 files changed, 45 insertions, 87 deletions
diff --git a/engines/gob/game.h b/engines/gob/game.h
index 3264288a32..ead4a56492 100644
--- a/engines/gob/game.h
+++ b/engines/gob/game.h
@@ -26,10 +26,45 @@
#ifndef GOB_GAME_H
#define GOB_GAME_H
-#include "gob/variables.h"
-
namespace Gob {
+class Script;
+class Resources;
+class Variables;
+
+class Environments {
+public:
+ static const uint8 kEnvironmentCount = 5;
+
+ Environments(GobEngine *vm);
+ ~Environments();
+
+ void set(uint8 env);
+ void get(uint8 env) const;
+
+ const char *getTotFile(uint8 env) const;
+
+ bool has(Variables *variables, uint8 startEnv = 0, int16 except = -1) const;
+ bool has(Script *script , uint8 startEnv = 0, int16 except = -1) const;
+ bool has(Resources *resources, uint8 startEnv = 0, int16 except = -1) const;
+
+ void clear();
+
+private:
+ struct Environment {
+ int16 cursorHotspotX;
+ int16 cursorHotspotY;
+ char curTotFile[14];
+ Variables *variables;
+ Script *script;
+ Resources *resources;
+ };
+
+ GobEngine *_vm;
+
+ Environment *_environments;
+};
+
class Game {
public:
@@ -46,20 +81,7 @@ public:
uint16 funcEnter;
uint16 funcLeave;
uint16 funcSub;
- byte *totFileData;
- } PACKED_STRUCT;
-
-#define szGame_TotTextItem (2 + 2)
- struct TotTextItem {
- int16 offset;
- int16 size;
- } PACKED_STRUCT;
-
-#define szGame_TotTextTable (2)
- struct TotTextTable {
- int16 itemsCount;
- TotTextItem *items;
- byte *dataPtr;
+ Script *script;
} PACKED_STRUCT;
struct InputDesc {
@@ -74,18 +96,10 @@ public:
Collision *_collisionAreas;
Collision *_collStack[5];
- bool _foundTotLoc;
- TotTextTable *_totTextData;
+ Script *_script;
+ Resources *_resources;
char _curTotFile[14];
- char _curExtFile[14];
-
- byte *_imFileData;
- byte *_totFileData;
-
- int16 _extHandle;
- int16 _lomHandle;
-
char _totToLoad[20];
int32 _startTimeKey;
@@ -100,9 +114,6 @@ public:
Game(GobEngine *vm);
virtual ~Game();
- byte *loadExtData(int16 dataId, int16 *pResWidth, int16 *pResHeight, uint32 *dataSize = 0);
- byte *loadTotResource(int16 id, int16 *dataSize = 0, int16 *width = 0, int16 *height = 0);
-
void capturePush(int16 left, int16 top, int16 width, int16 height);
void capturePop(char doDraw);
@@ -142,42 +153,6 @@ public:
virtual void popCollisions(void) = 0;
protected:
-#include "common/pack-start.h" // START STRUCT PACKING
-
-#define szGame_TotResItem (4 + 2 + 2 + 2)
- struct TotResItem {
- int32 offset; // if > 0, then offset from end of resource table.
- // If < 0, then -offset-1 is index in .IM file table
- int16 size;
- int16 width;
- int16 height;
- } PACKED_STRUCT;
-
-#define szGame_TotResTable (2 + 1)
- struct TotResTable {
- int16 itemsCount;
- byte unknown;
- TotResItem *items;
- byte *dataPtr;
- } PACKED_STRUCT;
-
-#define szGame_ExtItem (4 + 2 + 2 + 2)
- struct ExtItem {
- int32 offset; // offset from the table end
- uint16 size;
- int16 width; // width & 0x7FFF: width, width & 0x8000: pack flag
- int16 height; // not zero
- } PACKED_STRUCT;
-
-#define szGame_ExtTable (2 + 1)
- struct ExtTable {
- int16 itemsCount;
- byte unknown;
- ExtItem *items;
- } PACKED_STRUCT;
-
-#include "common/pack-end.h" // END STRUCT PACKING
-
int16 _lastCollKey;
int16 _lastCollAreaIndex;
int16 _lastCollId;
@@ -190,10 +165,6 @@ protected:
char _tempStr[256];
- TotResTable *_totResourceTable;
- ExtTable *_extTable;
- char _curImaFile[18];
-
int16 _collStackSize;
int16 _collStackElemSizes[5];
@@ -206,35 +177,22 @@ protected:
char _collStr[256];
// For totSub()
- int8 _backupedCount;
- int8 _curBackupPos;
- int16 _cursorHotspotXArray[5];
- int16 _cursorHotspotYArray[5];
- TotTextTable *_totTextDataArray[5];
- byte *_totFileDataArray[5];
- TotResTable *_totResourceTableArray[5];
- ExtTable *_extTableArray[5];
- int16 _extHandleArray[5];
- byte *_imFileDataArray[5];
- Variables *_variablesArray[5];
- char _curTotFileArray[5][14];
+ int8 _curEnvironment;
+ int8 _numEnvironments;
+ Environments *_environments;
GobEngine *_vm;
virtual int16 adjustKey(int16 key);
- byte *loadLocTexts(int32 *dataSize = 0);
- int32 loadTotFile(const char *path);
- void loadExtTable(void);
- void loadImFile(void);
-
void collAreaSub(int16 index, int8 enter);
- int16 openLocTextFile(char *locTextFile, int language);
virtual void setCollisions(byte arg_0 = 1);
virtual void collSub(uint16 offset);
virtual int16 checkMousePoint(int16 all, int16 *resId, int16 *resIndex) = 0;
+
+ void clearUnusedEnvironment();
};
class Game_v1 : public Game {