aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/map.h
diff options
context:
space:
mode:
authorSven Hesse2006-05-29 18:24:52 +0000
committerSven Hesse2006-05-29 18:24:52 +0000
commitd6f1ba1540d60d374121244565a08a9c77670e5b (patch)
tree26ca285e2690fcdd78f4870d8ff1a07fa8dd9367 /engines/gob/map.h
parente1844e485f19d5abb260b5eb821f9ce38658b2ad (diff)
downloadscummvm-rg350-d6f1ba1540d60d374121244565a08a9c77670e5b.tar.gz
scummvm-rg350-d6f1ba1540d60d374121244565a08a9c77670e5b.tar.bz2
scummvm-rg350-d6f1ba1540d60d374121244565a08a9c77670e5b.zip
- More GOB2 map conversions
- Added Music_Dummy (for --music-driver=null) - Implemented IMDs. That took longer than I expected... On the bright side, Ween's intro now plays more correctly svn-id: r22754
Diffstat (limited to 'engines/gob/map.h')
-rw-r--r--engines/gob/map.h63
1 files changed, 50 insertions, 13 deletions
diff --git a/engines/gob/map.h b/engines/gob/map.h
index 1b12f9280f..cb2dc625d1 100644
--- a/engines/gob/map.h
+++ b/engines/gob/map.h
@@ -23,6 +23,8 @@
#ifndef GOB_MAP_H
#define GOB_MAP_H
+#include "gob/util.h"
+
namespace Gob {
// The same numeric values are also used for the arrow keys.
@@ -39,16 +41,13 @@ public:
kDirS = 0x5000,
kDirSE = 0x5100
};
- enum {
- kMapWidth = 26,
- kMapHeight = 28
- };
#pragma START_PACK_STRUCTS
struct Point {
int16 x;
int16 y;
+ int16 field_2; // Gob2
} GCC_PACK;
#define szMap_ItemPos 3
@@ -61,13 +60,22 @@ public:
#pragma END_PACK_STRUCTS
- int8 _passMap[kMapHeight][kMapWidth]; // [y][x]
- int16 _itemsMap[kMapHeight][kMapWidth]; // [y][x]
- Point _wayPoints[40];
+ int16 _mapWidth;
+ int16 _mapHeight;
+ int16 _screenWidth;
+ int16 _tilesWidth;
+ int16 _tilesHeight;
+ int16 _passWidth;
+ bool _bigTiles;
+
+ int8 *_passMap; // [y * _mapWidth + x], getPass(x, y);
+ int16 **_itemsMap; // [y][x]
+ int16 _wayPointsCount;
+ Point *_wayPoints;
int16 _nearestWayPoint;
int16 _nearestDest;
- int16 _curGoblinX;
+ int16 _curGoblinX;
int16 _curGoblinY;
int16 _destX;
int16 _destY;
@@ -79,16 +87,19 @@ public:
void placeItem(int16 x, int16 y, int16 id);
int16 getDirection(int16 x0, int16 y0, int16 x1, int16 y1);
- void findNearestToGob(void);
- void findNearestToDest(void);
- int16 checkDirectPath(int16 x0, int16 y0, int16 x1, int16 y1);
+ int16 checkDirectPath(int16 index, int16 x0, int16 y0, int16 x1, int16 y1);
int16 checkLongPath(int16 x0, int16 y0, int16 x1, int16 y1, int16 i0, int16 i1);
- void optimizePoints(void);
void loadItemToObject(void);
void loadDataFromAvo(char *dest, int16 size);
void loadMapsInitGobs(void);
+ virtual int8 getPass(int x, int y, int heightOff = -1) = 0;
+ virtual void setPass(int x, int y, int8 pass, int heightOff = -1) = 0;
+
virtual void loadMapObjects(char *avjFile) = 0;
+ virtual void findNearestToGob(int16 index) = 0;
+ virtual void findNearestToDest(int16 index) = 0;
+ virtual void optimizePoints(int16 index, int16 x, int16 y) = 0;
Map(GobEngine *vm);
virtual ~Map() {};
@@ -104,14 +115,40 @@ protected:
class Map_v1 : public Map {
public:
virtual void loadMapObjects(char *avjFile);
+ virtual void optimizePoints(int16 index, int16 x, int16 y);
+ virtual void findNearestToGob(int16 index);
+ virtual void findNearestToDest(int16 index);
+
+ virtual inline int8 getPass(int x, int y, int heightOff = -1) {
+ return _passMap[y * _mapWidth + x];
+ }
+
+ virtual inline void setPass(int x, int y, int8 pass, int heightOff = -1) {
+ _passMap[y * _mapWidth + x] = pass;
+ }
Map_v1(GobEngine *vm);
- virtual ~Map_v1() {};
+ virtual ~Map_v1();
};
class Map_v2 : public Map_v1 {
public:
virtual void loadMapObjects(char *avjFile);
+ virtual void optimizePoints(int16 index, int16 x, int16 y);
+ virtual void findNearestToGob(int16 index);
+ virtual void findNearestToDest(int16 index);
+
+ virtual inline int8 getPass(int x, int y, int heightOff = -1) {
+ if (heightOff == -1)
+ heightOff = _passWidth;
+ return _vm->_util->readVariableByte((char *) (_passMap + y * heightOff + x));
+ }
+
+ virtual inline void setPass(int x, int y, int8 pass, int heightOff = -1) {
+ if (heightOff == -1)
+ heightOff = _passWidth;
+ _vm->_util->writeVariableByte((char *) (_passMap + y * heightOff + x) , pass);
+ }
Map_v2(GobEngine *vm);
virtual ~Map_v2() {};