rewritten Logic::initialise(), making use of 'unserializing' functions

svn-id: r10799
This commit is contained in:
Gregory Montoir 2003-10-14 12:55:31 +00:00
parent a1dfb5863e
commit 93f64e3357
4 changed files with 206 additions and 228 deletions

View File

@ -48,323 +48,180 @@ void Logic::initialise() {
//_display->loadFont();
_numRooms = READ_BE_UINT16(ptr);
ptr += 2;
_numNames = READ_BE_UINT16(ptr);
ptr += 2;
_numObjects = READ_BE_UINT16(ptr);
ptr += 2;
_numDescriptions = READ_BE_UINT16(ptr);
ptr += 2;
_numRooms = READ_BE_UINT16(ptr); ptr += 2;
_numNames = READ_BE_UINT16(ptr); ptr += 2;
_numObjects = READ_BE_UINT16(ptr); ptr += 2;
_numDescriptions = READ_BE_UINT16(ptr); ptr += 2;
//Object data
// Object data
_objectData = new ObjectData[_numObjects + 1];
//clear first object
_objectData[0].name = 0;
_objectData[0].x = 0;
_objectData[0].y = 0;
_objectData[0].description = 0;
_objectData[0].entryObj = 0;
_objectData[0].room = 0;
_objectData[0].state = 0;
_objectData[0].image = 0;
memset(&_objectData[0], 0, sizeof(ObjectData));
for (i = 1; i <= _numObjects; i++) {
_objectData[i].name = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_objectData[i].x = READ_BE_UINT16(ptr);
ptr += 2;
_objectData[i].y = READ_BE_UINT16(ptr);
ptr += 2;
_objectData[i].description = READ_BE_UINT16(ptr);
ptr += 2;
_objectData[i].entryObj = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_objectData[i].room = READ_BE_UINT16(ptr);
ptr += 2;
_objectData[i].state = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_objectData[i].image = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_objectData[i].readFrom(ptr);
}
//Room data
// Room data
_roomData = new uint16[_numRooms + 2];
_roomData[0] = 0;
for (i = 1; i <= (_numRooms + 1); i++) {
_roomData[i] = READ_BE_UINT16(ptr);
ptr += 2;
_roomData[i] = READ_BE_UINT16(ptr); ptr += 2;
}
_roomData[_numRooms + 1] = _numObjects;
//SFX Name
// SFX Name
// the following table isn't available in demo version
if (_resource->isDemo()) {
_sfxName = NULL;
}
else {
_sfxName = new uint16[_numRooms + 1];
_sfxName[0] = 0;
for (i = 1; i <= _numRooms; i++) {
_sfxName[i] = READ_BE_UINT16(ptr);
ptr += 2;
_sfxName[i] = READ_BE_UINT16(ptr); ptr += 2;
}
}
//Item information
_numItems = READ_BE_UINT16(ptr);
ptr += 2;
// Item information
_numItems = READ_BE_UINT16(ptr); ptr += 2;
_itemData = new ItemData[_numItems + 1];
memset(&_itemData[0], 0, sizeof(ItemData));
for (i = 1; i <= _numItems; i++) {
_itemData[i].item = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_itemData[i].description = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_itemData[i].state = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_itemData[i].bobFrame = READ_BE_UINT16(ptr);
ptr += 2;
_itemData[i].sfxDescription = READ_BE_UINT16(ptr);
ptr += 2;
_itemData[i].readFrom(ptr);
}
//Graphic Image Data
_numGraphics = READ_BE_UINT16(ptr);
ptr += 2;
// Graphic Image Data
_numGraphics = READ_BE_UINT16(ptr); ptr += 2;
_graphicData = new GraphicData[_numGraphics + 1];
memset(&_graphicData[0], 0, sizeof(GraphicData));
for (i = 1; i <= _numGraphics; i++) {
_graphicData[i].x = READ_BE_UINT16(ptr);
ptr += 2;
_graphicData[i].y = READ_BE_UINT16(ptr);
ptr += 2;
_graphicData[i].firstFrame = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_graphicData[i].lastFrame = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_graphicData[i].speed = READ_BE_UINT16(ptr);
ptr += 2;
_graphicData[i].readFrom(ptr);
}
_objMax = new int16[_numRooms + 1];
_areaMax = new int16[_numRooms + 1];
_area = new Area[_numRooms + 1][11];
_area = new Area[_numRooms + 1][MAX_AREAS_NUMBER];
_objMax[0] = 0;
_areaMax[0] = 0;
memset(&_area[0], 0, sizeof(Area) * MAX_AREAS_NUMBER);
for (i = 1; i <= _numRooms; i++) {
_objMax[i] = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_areaMax[i] = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_objMax[i] = (int16)READ_BE_UINT16(ptr); ptr += 2;
_areaMax[i] = (int16)READ_BE_UINT16(ptr); ptr += 2;
memset(&_area[i][0], 0, sizeof(Area));
for (j = 1; j <= _areaMax[i]; j++) {
assert(j < 11);
_area[i][j].mapNeighbours = READ_BE_UINT16(ptr); ptr += 2;
_area[i][j].box.x1 = READ_BE_UINT16(ptr); ptr += 2;
_area[i][j].box.y1 = READ_BE_UINT16(ptr); ptr += 2;
_area[i][j].box.x2 = READ_BE_UINT16(ptr); ptr += 2;
_area[i][j].box.y2 = READ_BE_UINT16(ptr); ptr += 2;
_area[i][j].bottomScaleFactor = READ_BE_UINT16(ptr); ptr += 2;
_area[i][j].topScaleFactor = READ_BE_UINT16(ptr); ptr += 2;
_area[i][j].object = READ_BE_UINT16(ptr); ptr += 2;
assert(j < MAX_AREAS_NUMBER);
_area[i][j].readFrom(ptr);
}
}
_objectBox = new Box[_numObjects + 1];
memset(&_objectBox[0], 0, sizeof(Box));
for (i = 1; i <= _numObjects; i++) {
_objectBox[i].x1 = READ_BE_UINT16(ptr);
ptr += 2;
_objectBox[i].y1 = READ_BE_UINT16(ptr);
ptr += 2;
_objectBox[i].x2 = READ_BE_UINT16(ptr);
ptr += 2;
_objectBox[i].y2 = READ_BE_UINT16(ptr);
ptr += 2;
_objectBox[i].readFrom(ptr);
}
//Walk OFF Data
_numWalkOffs = READ_BE_UINT16(ptr);
ptr += 2;
// Walk OFF Data
_numWalkOffs = READ_BE_UINT16(ptr); ptr += 2;
_walkOffData = new WalkOffData[_numWalkOffs + 1];
memset(&_walkOffData[0], 0, sizeof(WalkOffData));
for (i = 1; i <= _numWalkOffs; i++) {
_walkOffData[i].entryObj = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_walkOffData[i].x = READ_BE_UINT16(ptr);
ptr += 2;
_walkOffData[i].y = READ_BE_UINT16(ptr);
ptr += 2;
_walkOffData[i].readFrom(ptr);
}
//Special Object Descriptions
_numObjDesc = READ_BE_UINT16(ptr);
ptr += 2;
// Special Object Descriptions
_numObjDesc = READ_BE_UINT16(ptr); ptr += 2;
_objectDescription = new ObjectDescription[_numObjDesc + 1];
memset(&_objectDescription[0], 0, sizeof(ObjectDescription));
for (i = 1; i <= _numObjDesc; i++) {
_objectDescription[i].object = READ_BE_UINT16(ptr);
ptr += 2;
_objectDescription[i].type = READ_BE_UINT16(ptr);
ptr += 2;
_objectDescription[i].lastDescription = READ_BE_UINT16(ptr);
ptr += 2;
_objectDescription[i].seenCount = READ_BE_UINT16(ptr);
ptr += 2;
_objectDescription[i].readFrom(ptr);
}
//Command List Data
_numCmdList = READ_BE_UINT16(ptr);
ptr += 2;
// Command List Data
_numCmdList = READ_BE_UINT16(ptr); ptr += 2;
_cmdList = new CmdListData[_numCmdList + 1];
memset(&_cmdList[0], 0, sizeof(CmdListData));
for (i = 1; i <= _numCmdList; i++) {
_cmdList[i].verb = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdList[i].nounObj1 = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdList[i].nounObj2 = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdList[i].song = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdList[i].setAreas = READ_BE_UINT16(ptr) != 0;
ptr += 2;
_cmdList[i].setObjects = READ_BE_UINT16(ptr) != 0;
ptr += 2;
_cmdList[i].setItems = READ_BE_UINT16(ptr) != 0;
ptr += 2;
_cmdList[i].setConditions = READ_BE_UINT16(ptr) != 0;
ptr += 2;
_cmdList[i].image = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdList[i].specialSection = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdList[i].readFrom(ptr);
}
//Command AREA
_numCmdArea = READ_BE_UINT16(ptr);
ptr += 2;
// Command AREA
_numCmdArea = READ_BE_UINT16(ptr); ptr += 2;
_cmdArea = new CmdArea[_numCmdArea + 1];
memset(&_cmdArea[0], 0, sizeof(CmdArea));
for (i = 1; i <= _numCmdArea; i++) {
_cmdArea[i].id = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdArea[i].area = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdArea[i].room = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdArea[i].readFrom(ptr);
}
//Command OBJECT
_numCmdObject = READ_BE_UINT16(ptr);
ptr += 2;
// Command OBJECT
_numCmdObject = READ_BE_UINT16(ptr); ptr += 2;
_cmdObject = new CmdObject[_numCmdObject + 1];
memset(&_cmdObject[0], 0, sizeof(CmdObject));
for (i = 1; i <= _numCmdObject; i++) {
_cmdObject[i].id = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdObject[i].dstObj = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdObject[i].srcObj = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdObject[i].readFrom(ptr);
}
//Command INVENTORY
_numCmdInventory = READ_BE_UINT16(ptr);
ptr += 2;
// Command INVENTORY
_numCmdInventory = READ_BE_UINT16(ptr); ptr += 2;
_cmdInventory = new CmdInventory[_numCmdInventory + 1];
memset(&_cmdInventory[0], 0, sizeof(CmdInventory));
for (i = 1; i <= _numCmdInventory; i++) {
_cmdInventory[i].id = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdInventory[i].dstItem = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdInventory[i].srcItem = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdInventory[i].readFrom(ptr);
}
//Command GAMESTATE
_numCmdGameState = READ_BE_UINT16(ptr);
ptr += 2;
// Command GAMESTATE
_numCmdGameState = READ_BE_UINT16(ptr); ptr += 2;
_cmdGameState = new CmdGameState[_numCmdGameState + 1];
memset(&_cmdGameState[0], 0, sizeof(CmdGameState));
for (i = 1; i <= _numCmdGameState; i++) {
_cmdGameState[i].id = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdGameState[i].gameStateSlot = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdGameState[i].gameStateValue = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdGameState[i].speakValue = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_cmdGameState[i].readFrom(ptr);
}
_entryObj = READ_BE_UINT16(ptr);
ptr += 2;
_entryObj = READ_BE_UINT16(ptr); ptr += 2;
//Furniture DATA
_numFurniture = READ_BE_UINT16(ptr);
ptr += 2;
// Furniture DATA
_numFurniture = READ_BE_UINT16(ptr); ptr += 2;
_furnitureData = new FurnitureData[_numFurniture + 1];
memset(&_furnitureData[0], 0, sizeof(_furnitureData));
for (i = 1; i <= _numFurniture; i++) {
_furnitureData[i].room = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_furnitureData[i].gameStateValue = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_furnitureData[i].readFrom(ptr);
}
_numActors = READ_BE_UINT16(ptr);
ptr += 2;
_numAAnim = READ_BE_UINT16(ptr);
ptr += 2;
_numAName = READ_BE_UINT16(ptr);
ptr += 2;
_numAFile = READ_BE_UINT16(ptr);
ptr += 2;
// Actors
_numActors = READ_BE_UINT16(ptr); ptr += 2;
_numAAnim = READ_BE_UINT16(ptr); ptr += 2;
_numAName = READ_BE_UINT16(ptr); ptr += 2;
_numAFile = READ_BE_UINT16(ptr); ptr += 2;
_actorData = new ActorData[_numActors + 1];
memset(&_actorData[0], 0, sizeof(ActorData));
for (i = 1; i <= _numActors; i++) {
_actorData[i].room = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_actorData[i].bobNum = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_actorData[i].name = READ_BE_UINT16(ptr);
ptr += 2;
_actorData[i].gameStateSlot = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_actorData[i].gameStateValue = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_actorData[i].color = READ_BE_UINT16(ptr);
ptr += 2;
_actorData[i].bobFrameStanding = READ_BE_UINT16(ptr);
ptr += 2;
_actorData[i].x = READ_BE_UINT16(ptr);
ptr += 2;
_actorData[i].y = READ_BE_UINT16(ptr);
ptr += 2;
_actorData[i].anim = READ_BE_UINT16(ptr);
ptr += 2;
_actorData[i].bankNum = READ_BE_UINT16(ptr);
ptr += 2;
_actorData[i].actorFile = READ_BE_UINT16(ptr);
ptr += 2;
_actorData[i].readFrom(ptr);
}
_numGraphicAnim = READ_BE_UINT16(ptr);
ptr += 2;
_numGraphicAnim = READ_BE_UINT16(ptr); ptr += 2;
_graphicAnim = new GraphicAnim[_numGraphicAnim + 1];
memset(&_graphicAnim[0], 0, sizeof(GraphicAnim));
for (i = 1; i <= _numGraphicAnim; i++) {
_graphicAnim[i].frame1 = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_graphicAnim[i].frame2 = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_graphicAnim[i].frame3 = (int16)READ_BE_UINT16(ptr);
ptr += 2;
_graphicAnim[i].readFrom(ptr);
}
_currentRoom = _objectData[_entryObj].room;
_entryObj = 0;
if(memcmp(ptr, _resource->JASVersion(), 5) != 0) {
warning("Unexpected queen.jas file format");
}
/*
switch (_resource->getLanguage()) {
case ENGLISH:

View File

@ -28,6 +28,7 @@
namespace Queen {
#define MAX_ZONES_NUMBER 32
#define MAX_AREAS_NUMBER 11
#define JOE_RESPONSE_MAX 40
enum RoomDisplayMode {
@ -163,7 +164,7 @@ protected:
ObjectData *_objectData;
ObjectDescription *_objectDescription;
ActorData *_actorData;
Area (*_area)[11];
Area (*_area)[MAX_AREAS_NUMBER];
WalkOffData *_walkOffData;
CmdListData *_cmdList;
CmdArea *_cmdArea;

View File

@ -67,6 +67,7 @@ public:
bool isFloppy();
uint32 fileSize(const char *filename);
Language getLanguage();
const char *JASVersion();
protected:
File *_resourceFile;
@ -81,7 +82,6 @@ protected:
int32 resourceIndex(const char *filename);
uint32 fileOffset(const char *filename);
const char *JASVersion();
bool readTableFile();
static const GameVersion *detectGameVersion(uint32 dataFilesize);
};

View File

@ -28,6 +28,13 @@ namespace Queen {
struct Box {
uint16 x1, y1, x2, y2;
void readFrom(byte *&ptr) {
x1 = READ_BE_UINT16(ptr); ptr += 2;
y1 = READ_BE_UINT16(ptr); ptr += 2;
x2 = READ_BE_UINT16(ptr); ptr += 2;
y2 = READ_BE_UINT16(ptr); ptr += 2;
}
int16 xDiff() const {
return (int16)(x2 - x1);
}
@ -53,6 +60,14 @@ struct Area {
uint16 topScaleFactor;
uint16 object;
void readFrom(byte *&ptr) {
mapNeighbours = (int16)READ_BE_UINT16(ptr); ptr += 2;
box.readFrom(ptr);
bottomScaleFactor = READ_BE_UINT16(ptr); ptr += 2;
topScaleFactor = READ_BE_UINT16(ptr); ptr += 2;
object = READ_BE_UINT16(ptr); ptr += 2;
}
uint16 calcScale(int16 y) const {
uint16 dy = box.y2 - box.y1;
int16 ds = (int16)(topScaleFactor - bottomScaleFactor);
@ -73,6 +88,12 @@ struct WalkOffData {
int16 entryObj;
uint16 x;
uint16 y;
void readFrom(byte *& ptr) {
entryObj = (int16)READ_BE_UINT16(ptr); ptr += 2;
x = READ_BE_UINT16(ptr); ptr += 2;
y = READ_BE_UINT16(ptr); ptr += 2;
}
};
@ -80,6 +101,14 @@ struct GraphicData {
uint16 x, y;
int16 firstFrame, lastFrame;
uint16 speed;
void readFrom(byte *& ptr) {
x = READ_BE_UINT16(ptr); ptr += 2;
y = READ_BE_UINT16(ptr); ptr += 2;
firstFrame = (int16)READ_BE_UINT16(ptr); ptr += 2;
lastFrame = (int16)READ_BE_UINT16(ptr); ptr += 2;
speed = READ_BE_UINT16(ptr); ptr += 2;
}
};
@ -92,6 +121,17 @@ struct ObjectData {
uint16 room;
int16 state;
int16 image;
void readFrom(byte *& ptr) {
name = (int16)READ_BE_UINT16(ptr); ptr += 2;
x = READ_BE_UINT16(ptr); ptr += 2;
y = READ_BE_UINT16(ptr); ptr += 2;
description = READ_BE_UINT16(ptr); ptr += 2;
entryObj = (int16)READ_BE_UINT16(ptr); ptr += 2;
room = READ_BE_UINT16(ptr); ptr += 2;
state = (int16)READ_BE_UINT16(ptr); ptr += 2;
image = (int16)READ_BE_UINT16(ptr); ptr += 2;
}
};
@ -100,6 +140,13 @@ struct ObjectDescription {
uint16 type; // see select.c l.75-101
uint16 lastDescription;
uint16 seenCount;
void readFrom(byte *&ptr) {
object = READ_BE_UINT16(ptr); ptr += 2;
type = READ_BE_UINT16(ptr); ptr += 2;
lastDescription = READ_BE_UINT16(ptr); ptr += 2;
seenCount = READ_BE_UINT16(ptr); ptr += 2;
}
};
@ -109,6 +156,14 @@ struct ItemData {
int16 state;
uint16 bobFrame;
uint16 sfxDescription;
void readFrom(byte *&ptr) {
item = (int16)READ_BE_UINT16(ptr); ptr += 2;
description = (int16)READ_BE_UINT16(ptr); ptr += 2;
state = (int16)READ_BE_UINT16(ptr); ptr += 2;
bobFrame = READ_BE_UINT16(ptr); ptr += 2;
sfxDescription = READ_BE_UINT16(ptr); ptr += 2;
}
};
@ -125,6 +180,22 @@ struct ActorData {
uint16 anim;
uint16 bankNum;
uint16 actorFile;
void readFrom(byte *&ptr) {
room = (int16)READ_BE_UINT16(ptr); ptr += 2;
bobNum = (int16)READ_BE_UINT16(ptr); ptr += 2;
name = READ_BE_UINT16(ptr); ptr += 2;
gameStateSlot = (int16)READ_BE_UINT16(ptr); ptr += 2;
gameStateValue = (int16)READ_BE_UINT16(ptr); ptr += 2;
color = READ_BE_UINT16(ptr); ptr += 2;
bobFrameStanding = READ_BE_UINT16(ptr); ptr += 2;
x = READ_BE_UINT16(ptr); ptr += 2;
y = READ_BE_UINT16(ptr); ptr += 2;
anim = READ_BE_UINT16(ptr); ptr += 2;
bankNum = READ_BE_UINT16(ptr); ptr += 2;
actorFile = READ_BE_UINT16(ptr); ptr += 2;
}
};
@ -139,6 +210,19 @@ struct CmdListData {
bool setConditions;
int16 image;
int16 specialSection; // see execute.c l.423-451
void readFrom(byte *&ptr) {
verb = (int16)READ_BE_UINT16(ptr); ptr += 2;
nounObj1 = (int16)READ_BE_UINT16(ptr); ptr += 2;
nounObj2 = (int16)READ_BE_UINT16(ptr); ptr += 2;
song = (int16)READ_BE_UINT16(ptr); ptr += 2;
setAreas = READ_BE_UINT16(ptr) != 0; ptr += 2;
setObjects = READ_BE_UINT16(ptr) != 0; ptr += 2;
setItems = READ_BE_UINT16(ptr) != 0; ptr += 2;
setConditions = READ_BE_UINT16(ptr) != 0; ptr += 2;
image = (int16)READ_BE_UINT16(ptr); ptr += 2;
specialSection = (int16)READ_BE_UINT16(ptr); ptr += 2;
}
};
@ -146,6 +230,12 @@ struct CmdArea {
int16 id;
int16 area; // <0: turn off, >0: turn on
int16 room;
void readFrom(byte *&ptr) {
id = (int16)READ_BE_UINT16(ptr); ptr += 2;
area = (int16)READ_BE_UINT16(ptr); ptr += 2;
room = (int16)READ_BE_UINT16(ptr); ptr += 2;
}
};
@ -153,6 +243,12 @@ struct CmdObject {
int16 id;
int16 dstObj; // >0: show, <0: hide
int16 srcObj; // >0: copy from srcObj, -1: delete dstObj
void readFrom(byte *&ptr) {
id = (int16)READ_BE_UINT16(ptr); ptr += 2;
dstObj = (int16)READ_BE_UINT16(ptr); ptr += 2;
srcObj = (int16)READ_BE_UINT16(ptr); ptr += 2;
}
};
@ -160,6 +256,12 @@ struct CmdInventory {
int16 id;
int16 dstItem; // <0: delete, >0: add
int16 srcItem; // >0: valid
void readFrom(byte *&ptr) {
id = (int16)READ_BE_UINT16(ptr); ptr += 2;
dstItem = (int16)READ_BE_UINT16(ptr); ptr += 2;
srcItem = (int16)READ_BE_UINT16(ptr); ptr += 2;
}
};
@ -168,12 +270,24 @@ struct CmdGameState {
int16 gameStateSlot;
int16 gameStateValue;
int16 speakValue;
void readFrom(byte *&ptr) {
id = (int16)READ_BE_UINT16(ptr); ptr += 2;
gameStateSlot = (int16)READ_BE_UINT16(ptr); ptr += 2;
gameStateValue = (int16)READ_BE_UINT16(ptr); ptr += 2;
speakValue = (int16)READ_BE_UINT16(ptr); ptr += 2;
}
};
struct FurnitureData {
int16 room;
int16 gameStateValue;
void readFrom(byte *&ptr) {
room = (int16)READ_BE_UINT16(ptr); ptr += 2;
gameStateValue = (int16)READ_BE_UINT16(ptr); ptr += 2;
}
};
@ -181,6 +295,12 @@ struct GraphicAnim {
int16 frame1;
int16 frame2;
int16 frame3;
void readFrom(byte *&ptr) {
frame1 = (int16)READ_BE_UINT16(ptr); ptr += 2;
frame2 = (int16)READ_BE_UINT16(ptr); ptr += 2;
frame3 = (int16)READ_BE_UINT16(ptr); ptr += 2;
}
};