aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb/structs.h
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2013-04-18 23:35:23 +0200
committerWillem Jan Palenstijn2013-05-08 20:40:58 +0200
commit9c2341678ef4984bf92b3878295250faf980b066 (patch)
tree2fb4805e05e16b9924e80c9947e6bad723b28c4b /engines/dreamweb/structs.h
parent8172d679df5148a4a32f46074b20cb6caf91844f (diff)
parenta5f4ff36ffc386d48f2da49387a9655ce9295a4d (diff)
downloadscummvm-rg350-9c2341678ef4984bf92b3878295250faf980b066.tar.gz
scummvm-rg350-9c2341678ef4984bf92b3878295250faf980b066.tar.bz2
scummvm-rg350-9c2341678ef4984bf92b3878295250faf980b066.zip
Merge branch 'master'
Diffstat (limited to 'engines/dreamweb/structs.h')
-rw-r--r--engines/dreamweb/structs.h345
1 files changed, 266 insertions, 79 deletions
diff --git a/engines/dreamweb/structs.h b/engines/dreamweb/structs.h
index 0d7bbb6cbf..24b67e317a 100644
--- a/engines/dreamweb/structs.h
+++ b/engines/dreamweb/structs.h
@@ -20,36 +20,29 @@
*
*/
+#ifndef DREAMWEB_STRUCTS_H
+#define DREAMWEB_STRUCTS_H
+
#include "common/endian.h"
+#include "common/rect.h"
+
+namespace DreamWeb {
+
+struct GraphicsFile;
+struct SetObject;
struct Sprite {
- uint16 _updateCallback;
- uint16 updateCallback() const { return READ_LE_UINT16(&_updateCallback); }
- void setUpdateCallback(uint16 v) { WRITE_LE_UINT16(&_updateCallback, v); }
- uint16 w2;
- uint16 w4;
- uint16 _frameData;
- uint16 frameData() const { return READ_LE_UINT16(&_frameData); }
- void setFrameData(uint16 v) { WRITE_LE_UINT16(&_frameData, v); }
- uint16 w8;
+ bool _mainManCallback;
+ const GraphicsFile *_frameData;
uint8 x;
uint8 y;
- uint16 w12;
- uint8 b14;
- uint8 b15;
- uint8 b16;
- uint8 b17;
+ uint8 frameNumber;
uint8 delay;
- uint8 frame;
- uint16 _objData;
- uint16 objData() const { return READ_LE_UINT16(&_objData); }
- void setObjData(uint16 v) { WRITE_LE_UINT16(&_objData, v); }
- uint8 b22;
+ uint8 animFrame; // index into SetObject::frames
+ SetObject *_objData;
+ uint8 speed;
uint8 priority;
- uint16 w24;
- uint16 w26;
- uint8 b28;
- uint8 b29;
+ uint8 walkFrame;
uint8 type;
uint8 hidden;
};
@@ -57,25 +50,23 @@ struct Sprite {
struct RectWithCallback {
uint16 _xMin, _xMax;
uint16 _yMin, _yMax;
- uint16 _callback;
-
- uint16 xMin() const { return READ_LE_UINT16(&_xMin); }
- uint16 xMax() const { return READ_LE_UINT16(&_xMax); }
- uint16 yMin() const { return READ_LE_UINT16(&_yMin); }
- uint16 yMax() const { return READ_LE_UINT16(&_yMax); }
- uint16 callback() const { return READ_LE_UINT16(&_callback); }
+ void (DreamWebEngine::*_callback)();
bool contains(uint16 x, uint16 y) const {
- return (x >= xMin()) && (x < xMax()) && (y >= yMin()) && (y < yMax());
+ return (x >= _xMin) && (x < _xMax) && (y >= _yMin) && (y < _yMax);
}
};
+
+
+#include "common/pack-start.h" // START STRUCT PACKING
+
struct SetObject {
uint8 b0;
uint8 b1;
uint8 b2;
- uint8 b3;
- uint8 b4;
+ uint8 slotSize;
+ uint8 slotCount;
uint8 priority;
uint8 b6;
uint8 delay;
@@ -83,10 +74,11 @@ struct SetObject {
uint8 b9;
uint8 b10;
uint8 b11;
- uint8 name[4];
+ uint8 objId[4];
uint8 b16;
uint8 index;
- uint8 b18[13]; // NB: Don't know the size yet
+ uint8 frames[13]; // Table mapping animFrame to sprite frame number
+ // NB: Don't know the size yet
uint8 b31;
uint8 b32;
uint8 b33;
@@ -116,19 +108,19 @@ struct SetObject {
uint8 b57;
uint8 mapad[5];
uint8 b63;
-};
+} PACKED_STRUCT;
struct DynObject {
uint8 currentLocation;
uint8 index;
uint8 mapad[5];
- uint8 b7;
- uint8 b8;
- uint8 b9;
- uint8 b10;
+ uint8 slotSize; // the size of an object's slots
+ uint8 slotCount; // the number of slots of an object
+ uint8 objectSize; // the size of an object
+ uint8 turnedOn;
uint8 initialLocation;
- uint8 id[4];
-};
+ uint8 objId[4];
+} PACKED_STRUCT;
struct ObjPos {
uint8 xMin;
@@ -136,7 +128,10 @@ struct ObjPos {
uint8 xMax;
uint8 yMax;
uint8 index;
-};
+ bool contains(uint8 x, uint8 y) const {
+ return (x >= xMin) && (x < xMax) && (y >= yMin) && (y < yMax);
+ }
+} PACKED_STRUCT;
struct Frame {
uint8 width;
@@ -146,7 +141,7 @@ struct Frame {
void setPtr(uint16 v) { WRITE_LE_UINT16(&_ptr, v); }
uint8 x;
uint8 y;
-};
+} PACKED_STRUCT;
struct Reel {
uint8 frame_lo;
@@ -156,39 +151,37 @@ struct Reel {
uint8 x;
uint8 y;
uint8 b4;
-};
+} PACKED_STRUCT;
+
+#include "common/pack-end.h" // END STRUCT PACKING
+
+
struct ReelRoutine {
uint8 reallocation;
uint8 mapX;
uint8 mapY;
- uint8 b3;
- uint8 b4;
- uint16 reelPointer() const { return READ_LE_UINT16(&b3); }
- void setReelPointer(uint16 v) { WRITE_LE_UINT16(&b3, v); }
- uint8 b5;
- uint8 b6;
+ uint16 _reelPointer;
+ uint16 reelPointer() const { return _reelPointer; }
+ void setReelPointer(uint16 v) { _reelPointer = v; }
+ void incReelPointer() { _reelPointer++; }
+ uint8 period;
+ uint8 counter;
uint8 b7;
};
struct People {
- uint8 b0;
- uint8 b1;
- uint16 reelPointer() const { return READ_LE_UINT16(&b0); }
- void setReelPointer(uint16 v) { WRITE_LE_UINT16(&b0, v); }
- uint8 b2;
- uint8 b3;
- uint16 routinePointer() const { return READ_LE_UINT16(&b2); }
- void setRoutinePointer(uint16 v) { WRITE_LE_UINT16(&b2, v); }
+ uint16 _reelPointer;
+ ReelRoutine *_routinePointer;
uint8 b4;
-
};
+
+
+#include "common/pack-start.h" // START STRUCT PACKING
+
struct Room {
- uint8 name[10];
- uint8 b10;
- uint8 b11;
- uint8 b12;
+ char name[13];
uint8 roomsSample;
uint8 b14;
uint8 mapX;
@@ -198,7 +191,7 @@ struct Room {
uint8 b19;
uint8 liftFlag;
uint8 b21;
- uint8 b22;
+ uint8 facing;
uint8 countToOpen;
uint8 liftPath;
uint8 doorPath;
@@ -207,45 +200,239 @@ struct Room {
uint8 b28;
uint8 b29;
uint8 b30;
- uint8 b31;
-};
+ uint8 realLocation;
+} PACKED_STRUCT;
+
+extern const Room g_roomData[];
struct Rain {
uint8 x;
uint8 y;
uint8 size;
- uint8 w3_lo;
- uint8 w3_hi;
- uint16 w3() const { return READ_LE_UINT16(&w3_lo); }
- void setW3(uint16 v) { WRITE_LE_UINT16(&w3_lo, v); }
+ uint16 w3;
uint8 b5;
-};
+} PACKED_STRUCT;
struct Change {
uint8 index;
uint8 location;
uint8 value;
uint8 type;
-};
+} PACKED_STRUCT;
struct PathNode {
uint8 x;
uint8 y;
- uint8 b2;
- uint8 b3;
- uint8 b4;
- uint8 b5;
+ uint8 x1;
+ uint8 y1;
+ uint8 x2;
+ uint8 y2;
uint8 on;
uint8 dir;
-};
+} PACKED_STRUCT;
struct PathSegment {
uint8 b0;
uint8 b1;
-};
+} PACKED_STRUCT;
struct RoomPaths {
PathNode nodes[12];
PathSegment segments[24];
+} PACKED_STRUCT;
+
+struct FileHeader {
+ char _desc[50];
+ uint16 _len[20];
+ uint8 _padding[6];
+
+ uint16 len(unsigned int i) const {
+ assert(i < 20);
+ return READ_LE_UINT16(&_len[i]);
+ }
+ void setLen(unsigned int i, uint16 length) {
+ assert(i < 20);
+ WRITE_LE_UINT16(&_len[i], length);
+ }
+} PACKED_STRUCT;
+
+struct Atmosphere {
+ uint8 _location;
+ uint8 _mapX;
+ uint8 _mapY;
+ uint8 _sound;
+ uint8 _repeat;
+} PACKED_STRUCT;
+
+#include "common/pack-end.h" // END STRUCT PACKING
+
+
+
+enum ObjectTypes {
+ kSetObjectType1 = 1,
+ kFreeObjectType = 2,
+ kSetObjectType3 = 3,
+ kExObjectType = 4
+};
+
+struct ObjectRef {
+ uint8 _index;
+ uint8 _type; // enum ObjectTypes
+
+ bool operator==(const ObjectRef &r) const {
+ return _index == r._index && _type == r._type;
+ }
+ bool operator!=(const ObjectRef &r) const {
+ return _index != r._index || _type != r._type;
+ }
};
+
+
+#include "common/pack-start.h" // START STRUCT PACKING
+
+struct BackdropMapFlag {
+ uint8 _flag;
+ uint8 _flagEx;
+} PACKED_STRUCT;
+
+struct MapFlag {
+ uint8 _flag;
+ uint8 _flagEx;
+ uint8 _type;
+} PACKED_STRUCT;
+
+#include "common/pack-end.h" // END STRUCT PACKING
+
+
+
+
+
+struct TextFile {
+ TextFile(unsigned int size = 66) : _size(size), _text(0) { _offsetsLE = new uint16[_size]; }
+
+ ~TextFile() {
+ delete[] _offsetsLE;
+ _offsetsLE = 0;
+ _size = 0;
+ clear();
+ }
+
+ uint16 *_offsetsLE;
+ unsigned int _size;
+ char *_text;
+
+ const char *getString(unsigned int i) const {
+ assert(i < _size);
+ return _text + getOffset(i);
+ }
+ void setOffset(unsigned int i, uint16 offset) {
+ WRITE_LE_UINT16(&_offsetsLE[i], offset);
+ }
+ uint16 getOffset(unsigned int i) const {
+ return READ_LE_UINT16(&_offsetsLE[i]);
+ }
+ void clear() {
+ delete[] _text;
+ _text = 0;
+ }
+};
+
+struct GraphicsFile {
+ GraphicsFile() : _data(0), _frames(0) { }
+
+ Frame *_frames;
+ uint8 *_data;
+
+ const uint8 *getFrameData(unsigned int i) const {
+ // There is 2080 bytes of Frame data, but that is between 346 and 347
+ // frames
+ assert(i < 346);
+ return _data + _frames[i].ptr();
+ }
+ void clear() {
+ delete[] _frames;
+ _frames = 0;
+ delete[] _data;
+ _data = 0;
+ }
+};
+
+struct GameVars {
+ uint8 _startVars;
+ uint8 _progressPoints;
+ uint8 _watchOn;
+ uint8 _shadesOn;
+ uint8 _secondCount;
+ uint8 _minuteCount;
+ uint8 _hourCount;
+ uint8 _zoomOn;
+ uint8 _location;
+ uint8 _exPos;
+ uint16 _exFramePos;
+ uint16 _exTextPos;
+ uint16 _card1Money;
+ uint16 _listPos;
+ uint8 _ryanPage;
+ uint16 _watchingTime;
+ uint16 _reelToWatch; // reel plays from here in mode 0
+ uint16 _endWatchReel; // and stops here. Mode set to 1
+ uint8 _speedCount;
+ uint8 _watchSpeed;
+ uint16 _reelToHold; // if mode is 1 hold on this reel
+ uint16 _endOfHoldReel; // if mode is 2 then play to endOfHoldReel and reset mode to -1
+ uint8 _watchMode;
+ uint8 _destAfterHold; // set walking destination
+ uint8 _newsItem;
+ uint8 _liftFlag;
+ uint8 _liftPath;
+ uint8 _lockStatus;
+ uint8 _doorPath;
+ uint8 _countToOpen;
+ uint8 _countToClose;
+ uint8 _rockstarDead;
+ uint8 _generalDead;
+ uint8 _sartainDead;
+ uint8 _aideDead;
+ uint8 _beenMugged;
+ uint8 _gunPassFlag;
+ uint8 _canMoveAltar;
+ uint8 _talkedToAttendant;
+ uint8 _talkedToSparky;
+ uint8 _talkedToBoss;
+ uint8 _talkedToRecep;
+ uint8 _cardPassFlag;
+ uint8 _madmanFlag;
+ uint8 _keeperFlag;
+ uint8 _lastTrigger;
+ uint8 _manDead;
+ uint8 _seed1;
+ uint8 _seed2;
+ uint8 _seed3;
+ uint8 _needToTravel;
+ uint8 _throughDoor;
+ uint8 _newObs;
+ uint8 _ryanOn;
+ uint8 _combatCount;
+ uint8 _lastWeapon;
+ uint8 _dreamNumber;
+ uint8 _roomAfterDream;
+ uint8 _shakeCounter;
+};
+
+struct TimedTemp {
+ TimedTemp() : _timeCount(0), _string(0) { }
+
+ uint8 _x;
+ uint8 _y;
+
+ uint16 _timeCount;
+ uint16 _countToTimed;
+
+ const char *_string;
+};
+
+} // End of namespace DreamWeb
+
+#endif
+