HUGO: Avoid duplicated code in functions related to HUGO.DAT
This commit is contained in:
parent
41a5fc8476
commit
399b59a583
21 changed files with 495 additions and 796 deletions
|
@ -194,7 +194,7 @@ void Screen::savePal(Common::WriteStream *f) const {
|
|||
/**
|
||||
* Restore the current palette from a savegame
|
||||
*/
|
||||
void Screen::restorePal(Common::SeekableReadStream *f) {
|
||||
void Screen::restorePal(Common::ReadStream *f) {
|
||||
debugC(1, kDebugDisplay, "restorePal()");
|
||||
|
||||
byte pal[4];
|
||||
|
|
|
@ -73,7 +73,7 @@ public:
|
|||
void moveImage(image_pt srcImage, const int16 x1, const int16 y1, const int16 dx, int16 dy, const int16 width1, image_pt dstImage, const int16 x2, const int16 y2, const int16 width2);
|
||||
void remapPal(uint16 oldIndex, uint16 newIndex);
|
||||
void resetInventoryObjId();
|
||||
void restorePal(Common::SeekableReadStream *f);
|
||||
void restorePal(Common::ReadStream *f);
|
||||
void savePal(Common::WriteStream *f) const;
|
||||
void setBackgroundColor(const uint16 color);
|
||||
void setCursorPal();
|
||||
|
|
|
@ -63,8 +63,7 @@ void FileManager_v1d::readOverlay(const int screenNum, image_pt image, const ovl
|
|||
Common::String buf = Common::String(_vm->_text->getScreenNames(screenNum)) + Common::String(ovl_ext[overlayType]);
|
||||
|
||||
if (!Common::File::exists(buf)) {
|
||||
for (int i = 0; i < kOvlSize; i++)
|
||||
image[i] = 0;
|
||||
memset(image, 0, sizeof(image));
|
||||
warning("File not found: %s", buf.c_str());
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -81,8 +81,7 @@ void FileManager_v1w::readOverlay(const int screenNum, image_pt image, ovl_t ove
|
|||
break;
|
||||
}
|
||||
if (i == 0) {
|
||||
for (int idx = 0; idx < kOvlSize; idx++)
|
||||
image[idx] = 0;
|
||||
memset(image, 0, sizeof(image));
|
||||
return;
|
||||
}
|
||||
_sceneryArchive1.read(tmpImage, kOvlSize);
|
||||
|
|
|
@ -137,8 +137,7 @@ void FileManager_v2d::readOverlay(const int screenNum, image_pt image, ovl_t ove
|
|||
break;
|
||||
}
|
||||
if (i == 0) {
|
||||
for (int idx = 0; idx < kOvlSize; idx++)
|
||||
image[idx] = 0;
|
||||
memset(image, 0, sizeof(image));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -144,8 +144,7 @@ void FileManager_v3d::readOverlay(const int screenNum, image_pt image, ovl_t ove
|
|||
break;
|
||||
}
|
||||
if (i == 0) {
|
||||
for (int idx = 0; idx < kOvlSize; idx++)
|
||||
image[idx] = 0;
|
||||
memset(image, 0, sizeof(image));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -184,8 +183,7 @@ void FileManager_v3d::readOverlay(const int screenNum, image_pt image, ovl_t ove
|
|||
break;
|
||||
}
|
||||
if (i == 0) {
|
||||
for (int idx = 0; idx < kOvlSize; idx++)
|
||||
image[idx] = 0;
|
||||
memset(image, 0, sizeof(image));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -399,8 +399,7 @@ bool HugoEngine::loadHugoDat() {
|
|||
numElem = in.readUint16BE();
|
||||
if (varnt == _gameVariant) {
|
||||
_screenStates = (byte *)malloc(sizeof(byte) * numElem);
|
||||
for (int i = 0; i < numElem; i++)
|
||||
_screenStates[i] = 0;
|
||||
memset(_screenStates, 0, sizeof(_screenStates));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -426,7 +425,7 @@ bool HugoEngine::loadHugoDat() {
|
|||
return true;
|
||||
}
|
||||
|
||||
uint16 **HugoEngine::loadLongArray(Common::ReadStream &in) {
|
||||
uint16 **HugoEngine::loadLongArray(Common::SeekableReadStream &in) {
|
||||
uint16 **resArray = 0;
|
||||
|
||||
for (int varnt = 0; varnt < _numVariant; varnt++) {
|
||||
|
@ -443,8 +442,7 @@ uint16 **HugoEngine::loadLongArray(Common::ReadStream &in) {
|
|||
resRow[j] = in.readUint16BE();
|
||||
resArray[i] = resRow;
|
||||
} else {
|
||||
for (int j = 0; j < numElems; j++)
|
||||
in.readUint16BE();
|
||||
in.skip(numElems * sizeof(uint16));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -323,7 +323,7 @@ public:
|
|||
const char *getCopyrightString() const { return "Copyright 1989-1997 David P Gray, All Rights Reserved."; }
|
||||
|
||||
Common::String getSavegameFilename(int slot);
|
||||
uint16 **loadLongArray(Common::ReadStream &in);
|
||||
uint16 **loadLongArray(Common::SeekableReadStream &in);
|
||||
|
||||
FileManager *_file;
|
||||
Scheduler *_scheduler;
|
||||
|
|
|
@ -51,7 +51,7 @@ IntroHandler::~IntroHandler() {
|
|||
/**
|
||||
* Read _introX and _introY from hugo.dat
|
||||
*/
|
||||
void IntroHandler::loadIntroData(Common::ReadStream &in) {
|
||||
void IntroHandler::loadIntroData(Common::SeekableReadStream &in) {
|
||||
for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {
|
||||
int numRows = in.readUint16BE();
|
||||
if (varnt == _vm->_gameVariant) {
|
||||
|
@ -63,10 +63,7 @@ void IntroHandler::loadIntroData(Common::ReadStream &in) {
|
|||
_introY[i] = in.readByte();
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < numRows; i++) {
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
}
|
||||
in.skip(numRows * 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@ public:
|
|||
virtual bool introPlay() = 0;
|
||||
|
||||
void freeIntroData();
|
||||
void loadIntroData(Common::ReadStream &in);
|
||||
void loadIntroData(Common::SeekableReadStream &in);
|
||||
|
||||
byte getIntroSize() const { return _introXSize; }
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ InventoryHandler::InventoryHandler(HugoEngine *vm) : _vm(vm), _invent(0) {
|
|||
/**
|
||||
* Read _invent from Hugo.dat
|
||||
*/
|
||||
void InventoryHandler::loadInvent(Common::ReadStream &in) {
|
||||
void InventoryHandler::loadInvent(Common::SeekableReadStream &in) {
|
||||
for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {
|
||||
int16 numElem = in.readUint16BE();
|
||||
if (varnt == _vm->_gameVariant) {
|
||||
|
@ -66,8 +66,7 @@ void InventoryHandler::loadInvent(Common::ReadStream &in) {
|
|||
for (int i = 0; i < numElem; i++)
|
||||
_invent[i] = in.readSint16BE();
|
||||
} else {
|
||||
for (int i = 0; i < numElem; i++)
|
||||
in.readSint16BE();
|
||||
in.skip(numElem * sizeof(int16));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ public:
|
|||
istate_t getInventoryState() const { return _inventoryState; }
|
||||
|
||||
int16 findIconId(int16 objId);
|
||||
void loadInvent(Common::ReadStream &in);
|
||||
void loadInvent(Common::SeekableReadStream &in);
|
||||
int16 processInventory(const invact_t action, ...);
|
||||
void runInventory();
|
||||
|
||||
|
|
|
@ -293,31 +293,31 @@ void MouseHandler::mouseHandler() {
|
|||
resetRightButton();
|
||||
}
|
||||
|
||||
void MouseHandler::readHotspot(Common::ReadStream &in, hotspot_t &hotspot) {
|
||||
hotspot.screenIndex = in.readSint16BE();
|
||||
hotspot.x1 = in.readSint16BE();
|
||||
hotspot.y1 = in.readSint16BE();
|
||||
hotspot.x2 = in.readSint16BE();
|
||||
hotspot.y2 = in.readSint16BE();
|
||||
hotspot.actIndex = in.readUint16BE();
|
||||
hotspot.viewx = in.readSint16BE();
|
||||
hotspot.viewy = in.readSint16BE();
|
||||
hotspot.direction = in.readSint16BE();
|
||||
}
|
||||
|
||||
/**
|
||||
* Load hotspots data from hugo.dat
|
||||
*/
|
||||
void MouseHandler::loadHotspots(Common::ReadStream &in) {
|
||||
// Read _hotspots
|
||||
hotspot_t *wrkHotspots = 0;
|
||||
hotspot_t tmp;
|
||||
for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {
|
||||
int numRows = in.readUint16BE();
|
||||
hotspot_t *wrkHotspots = (hotspot_t *)malloc(sizeof(hotspot_t) * numRows);
|
||||
|
||||
for (int i = 0; i < numRows; i++) {
|
||||
wrkHotspots[i].screenIndex = in.readSint16BE();
|
||||
wrkHotspots[i].x1 = in.readSint16BE();
|
||||
wrkHotspots[i].y1 = in.readSint16BE();
|
||||
wrkHotspots[i].x2 = in.readSint16BE();
|
||||
wrkHotspots[i].y2 = in.readSint16BE();
|
||||
wrkHotspots[i].actIndex = in.readUint16BE();
|
||||
wrkHotspots[i].viewx = in.readSint16BE();
|
||||
wrkHotspots[i].viewy = in.readSint16BE();
|
||||
wrkHotspots[i].direction = in.readSint16BE();
|
||||
}
|
||||
|
||||
if (varnt == _vm->_gameVariant)
|
||||
_hotspots = wrkHotspots;
|
||||
else
|
||||
free(wrkHotspots);
|
||||
_hotspots = wrkHotspots = (hotspot_t *)malloc(sizeof(hotspot_t) * numRows);
|
||||
|
||||
for (int i = 0; i < numRows; i++)
|
||||
readHotspot(in, (varnt == _vm->_gameVariant) ? wrkHotspots[i] : tmp);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -83,6 +83,7 @@ private:
|
|||
void cursorText(const char *buffer, const int16 cx, const int16 cy, const uif_t fontId, const int16 color);
|
||||
void processRightClick(const int16 objId, const int16 cx, const int16 cy);
|
||||
void processLeftClick(const int16 objId, const int16 cx, const int16 cy);
|
||||
void readHotspot(Common::ReadStream &in, hotspot_t &hotspot);
|
||||
};
|
||||
|
||||
} // End of namespace Hugo
|
||||
|
|
|
@ -368,141 +368,114 @@ bool ObjectHandler::findObjectSpace(object_t *obj, int16 *destx, int16 *desty) {
|
|||
return foundFl;
|
||||
}
|
||||
|
||||
void ObjectHandler::readUse(Common::ReadStream &in, uses_t &curUse) {
|
||||
curUse.objId = in.readSint16BE();
|
||||
curUse.dataIndex = in.readUint16BE();
|
||||
uint16 numSubElem = in.readUint16BE();
|
||||
curUse.targets = (target_t *)malloc(sizeof(target_t) * numSubElem);
|
||||
for (int j = 0; j < numSubElem; j++) {
|
||||
curUse.targets[j].nounIndex = in.readUint16BE();
|
||||
curUse.targets[j].verbIndex = in.readUint16BE();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Load _uses from Hugo.dat
|
||||
*/
|
||||
void ObjectHandler::loadObjectUses(Common::ReadStream &in) {
|
||||
uses_t tmpUse;
|
||||
//Read _uses
|
||||
for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {
|
||||
tmpUse.targets = 0;
|
||||
uint16 numElem = in.readUint16BE();
|
||||
uses_t *wrkUses = (uses_t *)malloc(sizeof(uses_t) * numElem);
|
||||
|
||||
for (int i = 0; i < numElem; i++) {
|
||||
wrkUses[i].objId = in.readSint16BE();
|
||||
wrkUses[i].dataIndex = in.readUint16BE();
|
||||
uint16 numSubElem = in.readUint16BE();
|
||||
wrkUses[i].targets = (target_t *)malloc(sizeof(target_t) * numSubElem);
|
||||
for (int j = 0; j < numSubElem; j++) {
|
||||
wrkUses[i].targets[j].nounIndex = in.readUint16BE();
|
||||
wrkUses[i].targets[j].verbIndex = in.readUint16BE();
|
||||
}
|
||||
}
|
||||
|
||||
if (varnt == _vm->_gameVariant) {
|
||||
_usesSize = numElem;
|
||||
_uses = wrkUses;
|
||||
} else {
|
||||
for (int i = 0; i < numElem; i++)
|
||||
free(wrkUses[i].targets);
|
||||
free(wrkUses);
|
||||
_uses = (uses_t *)malloc(sizeof(uses_t) * numElem);
|
||||
}
|
||||
|
||||
for (int i = 0; i < numElem; i++)
|
||||
readUse(in, (varnt == _vm->_gameVariant) ? _uses[i] : tmpUse);
|
||||
|
||||
if (tmpUse.targets)
|
||||
free(tmpUse.targets);
|
||||
}
|
||||
}
|
||||
|
||||
void ObjectHandler::readObject(Common::ReadStream &in, object_t &curObject) {
|
||||
curObject.nounIndex = in.readUint16BE();
|
||||
curObject.dataIndex = in.readUint16BE();
|
||||
uint16 numSubElem = in.readUint16BE();
|
||||
|
||||
if (numSubElem == 0)
|
||||
curObject.stateDataIndex = 0;
|
||||
else
|
||||
curObject.stateDataIndex = (uint16 *)malloc(sizeof(uint16) * numSubElem);
|
||||
for (int j = 0; j < numSubElem; j++)
|
||||
curObject.stateDataIndex[j] = in.readUint16BE();
|
||||
|
||||
curObject.pathType = (path_t) in.readSint16BE();
|
||||
curObject.vxPath = in.readSint16BE();
|
||||
curObject.vyPath = in.readSint16BE();
|
||||
curObject.actIndex = in.readUint16BE();
|
||||
curObject.seqNumb = in.readByte();
|
||||
curObject.currImagePtr = 0;
|
||||
|
||||
if (curObject.seqNumb == 0) {
|
||||
curObject.seqList[0].imageNbr = 0;
|
||||
curObject.seqList[0].seqPtr = 0;
|
||||
}
|
||||
|
||||
for (int j = 0; j < curObject.seqNumb; j++) {
|
||||
curObject.seqList[j].imageNbr = in.readUint16BE();
|
||||
curObject.seqList[j].seqPtr = 0;
|
||||
}
|
||||
|
||||
curObject.cycling = (cycle_t)in.readByte();
|
||||
curObject.cycleNumb = in.readByte();
|
||||
curObject.frameInterval = in.readByte();
|
||||
curObject.frameTimer = in.readByte();
|
||||
curObject.radius = in.readByte();
|
||||
curObject.screenIndex = in.readByte();
|
||||
curObject.x = in.readSint16BE();
|
||||
curObject.y = in.readSint16BE();
|
||||
curObject.oldx = in.readSint16BE();
|
||||
curObject.oldy = in.readSint16BE();
|
||||
curObject.vx = in.readByte();
|
||||
curObject.vy = in.readByte();
|
||||
curObject.objValue = in.readByte();
|
||||
curObject.genericCmd = in.readSint16BE();
|
||||
curObject.cmdIndex = in.readUint16BE();
|
||||
curObject.carriedFl = (in.readByte() != 0);
|
||||
curObject.state = in.readByte();
|
||||
curObject.verbOnlyFl = (in.readByte() != 0);
|
||||
curObject.priority = in.readByte();
|
||||
curObject.viewx = in.readSint16BE();
|
||||
curObject.viewy = in.readSint16BE();
|
||||
curObject.direction = in.readSint16BE();
|
||||
curObject.curSeqNum = in.readByte();
|
||||
curObject.curImageNum = in.readByte();
|
||||
curObject.oldvx = in.readByte();
|
||||
curObject.oldvy = in.readByte();
|
||||
}
|
||||
/**
|
||||
* Load ObjectArr from Hugo.dat
|
||||
*/
|
||||
void ObjectHandler::loadObjectArr(Common::ReadStream &in) {
|
||||
debugC(6, kDebugObject, "loadObject(&in)");
|
||||
object_t tmpObject;
|
||||
|
||||
for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {
|
||||
uint16 numElem = in.readUint16BE();
|
||||
tmpObject.stateDataIndex = 0;
|
||||
if (varnt == _vm->_gameVariant) {
|
||||
_objCount = numElem;
|
||||
_objects = (object_t *)malloc(sizeof(object_t) * numElem);
|
||||
for (int i = 0; i < numElem; i++) {
|
||||
_objects[i].nounIndex = in.readUint16BE();
|
||||
_objects[i].dataIndex = in.readUint16BE();
|
||||
uint16 numSubElem = in.readUint16BE();
|
||||
if (numSubElem == 0)
|
||||
_objects[i].stateDataIndex = 0;
|
||||
else
|
||||
_objects[i].stateDataIndex = (uint16 *)malloc(sizeof(uint16) * numSubElem);
|
||||
for (int j = 0; j < numSubElem; j++)
|
||||
_objects[i].stateDataIndex[j] = in.readUint16BE();
|
||||
_objects[i].pathType = (path_t) in.readSint16BE();
|
||||
_objects[i].vxPath = in.readSint16BE();
|
||||
_objects[i].vyPath = in.readSint16BE();
|
||||
_objects[i].actIndex = in.readUint16BE();
|
||||
_objects[i].seqNumb = in.readByte();
|
||||
_objects[i].currImagePtr = 0;
|
||||
if (_objects[i].seqNumb == 0) {
|
||||
_objects[i].seqList[0].imageNbr = 0;
|
||||
_objects[i].seqList[0].seqPtr = 0;
|
||||
}
|
||||
for (int j = 0; j < _objects[i].seqNumb; j++) {
|
||||
_objects[i].seqList[j].imageNbr = in.readUint16BE();
|
||||
_objects[i].seqList[j].seqPtr = 0;
|
||||
}
|
||||
_objects[i].cycling = (cycle_t)in.readByte();
|
||||
_objects[i].cycleNumb = in.readByte();
|
||||
_objects[i].frameInterval = in.readByte();
|
||||
_objects[i].frameTimer = in.readByte();
|
||||
_objects[i].radius = in.readByte();
|
||||
_objects[i].screenIndex = in.readByte();
|
||||
_objects[i].x = in.readSint16BE();
|
||||
_objects[i].y = in.readSint16BE();
|
||||
_objects[i].oldx = in.readSint16BE();
|
||||
_objects[i].oldy = in.readSint16BE();
|
||||
_objects[i].vx = in.readByte();
|
||||
_objects[i].vy = in.readByte();
|
||||
_objects[i].objValue = in.readByte();
|
||||
_objects[i].genericCmd = in.readSint16BE();
|
||||
_objects[i].cmdIndex = in.readUint16BE();
|
||||
_objects[i].carriedFl = (in.readByte() != 0);
|
||||
_objects[i].state = in.readByte();
|
||||
_objects[i].verbOnlyFl = (in.readByte() != 0);
|
||||
_objects[i].priority = in.readByte();
|
||||
_objects[i].viewx = in.readSint16BE();
|
||||
_objects[i].viewy = in.readSint16BE();
|
||||
_objects[i].direction = in.readSint16BE();
|
||||
_objects[i].curSeqNum = in.readByte();
|
||||
_objects[i].curImageNum = in.readByte();
|
||||
_objects[i].oldvx = in.readByte();
|
||||
_objects[i].oldvy = in.readByte();
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < numElem; i++) {
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
uint16 numSubElem = in.readUint16BE();
|
||||
for (int j = 0; j < numSubElem; j++)
|
||||
in.readUint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
numSubElem = in.readByte();
|
||||
for (int j = 0; j < numSubElem; j++)
|
||||
in.readUint16BE();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < numElem; i++)
|
||||
readObject(in, (varnt == _vm->_gameVariant) ? _objects[i] : tmpObject);
|
||||
|
||||
if (tmpObject.stateDataIndex)
|
||||
free(tmpObject.stateDataIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -78,6 +78,8 @@ public:
|
|||
void loadNumObj(Common::ReadStream &in);
|
||||
void lookObject(object_t *obj);
|
||||
void readObjectImages();
|
||||
void readObject(Common::ReadStream &in, object_t &curObject);
|
||||
void readUse(Common::ReadStream &in, uses_t &curUse);
|
||||
void restoreAllSeq();
|
||||
void restoreObjects(Common::SeekableReadStream *in);
|
||||
void saveObjects(Common::WriteStream *out);
|
||||
|
|
|
@ -65,75 +65,72 @@ Parser::~Parser() {
|
|||
}
|
||||
|
||||
/**
|
||||
* Read _cmdList from Hugo.dat
|
||||
* Read a cmd structure from Hugo.dat
|
||||
*/
|
||||
void Parser::readCmd(Common::ReadStream &in, cmd &curCmd) {
|
||||
curCmd.verbIndex = in.readUint16BE();
|
||||
curCmd.reqIndex = in.readUint16BE();
|
||||
curCmd.textDataNoCarryIndex = in.readUint16BE();
|
||||
curCmd.reqState = in.readByte();
|
||||
curCmd.newState = in.readByte();
|
||||
curCmd.textDataWrongIndex = in.readUint16BE();
|
||||
curCmd.textDataDoneIndex = in.readUint16BE();
|
||||
curCmd.actIndex = in.readUint16BE();
|
||||
}
|
||||
|
||||
/**
|
||||
* Load _cmdList from Hugo.dat
|
||||
*/
|
||||
void Parser::loadCmdList(Common::ReadStream &in) {
|
||||
cmd tmpCmd;
|
||||
for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {
|
||||
uint16 numElem = in.readUint16BE();
|
||||
if (varnt == _vm->_gameVariant) {
|
||||
_cmdListSize = numElem;
|
||||
_cmdList = (cmd **)malloc(sizeof(cmd *) * _cmdListSize);
|
||||
for (int i = 0; i < _cmdListSize; i++) {
|
||||
}
|
||||
|
||||
for (int16 i = 0; i < numElem; i++) {
|
||||
uint16 numSubElem = in.readUint16BE();
|
||||
if (varnt == _vm->_gameVariant)
|
||||
_cmdList[i] = (cmd *)malloc(sizeof(cmd) * numSubElem);
|
||||
for (int j = 0; j < numSubElem; j++) {
|
||||
_cmdList[i][j].verbIndex = in.readUint16BE();
|
||||
_cmdList[i][j].reqIndex = in.readUint16BE();
|
||||
_cmdList[i][j].textDataNoCarryIndex = in.readUint16BE();
|
||||
_cmdList[i][j].reqState = in.readByte();
|
||||
_cmdList[i][j].newState = in.readByte();
|
||||
_cmdList[i][j].textDataWrongIndex = in.readUint16BE();
|
||||
_cmdList[i][j].textDataDoneIndex = in.readUint16BE();
|
||||
_cmdList[i][j].actIndex = in.readUint16BE();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < numElem; i++) {
|
||||
uint16 numSubElem = in.readUint16BE();
|
||||
for (int j = 0; j < numSubElem; j++) {
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
}
|
||||
for (int16 j = 0; j < numSubElem; j++)
|
||||
readCmd(in, (varnt == _vm->_gameVariant) ? _cmdList[i][j] : tmpCmd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Parser::readBG(Common::ReadStream &in, background_t &curBG) {
|
||||
curBG.verbIndex = in.readUint16BE();
|
||||
curBG.nounIndex = in.readUint16BE();
|
||||
curBG.commentIndex = in.readSint16BE();
|
||||
curBG.matchFl = (in.readByte() != 0);
|
||||
curBG.roomState = in.readByte();
|
||||
curBG.bonusIndex = in.readByte();
|
||||
}
|
||||
|
||||
/**
|
||||
* Read _backgrounObjects from Hugo.dat
|
||||
*/
|
||||
void Parser::loadBackgroundObjects(Common::ReadStream &in) {
|
||||
background_t tmpBG;
|
||||
|
||||
for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {
|
||||
uint16 numElem = in.readUint16BE();
|
||||
|
||||
background_t **wrkBackgroundObjects = (background_t **)malloc(sizeof(background_t *) * numElem);
|
||||
if (varnt == _vm->_gameVariant) {
|
||||
_backgroundObjectsSize = numElem;
|
||||
_backgroundObjects = (background_t **)malloc(sizeof(background_t *) * numElem);
|
||||
}
|
||||
|
||||
for (int i = 0; i < numElem; i++) {
|
||||
uint16 numSubElem = in.readUint16BE();
|
||||
wrkBackgroundObjects[i] = (background_t *)malloc(sizeof(background_t) * numSubElem);
|
||||
for (int j = 0; j < numSubElem; j++) {
|
||||
wrkBackgroundObjects[i][j].verbIndex = in.readUint16BE();
|
||||
wrkBackgroundObjects[i][j].nounIndex = in.readUint16BE();
|
||||
wrkBackgroundObjects[i][j].commentIndex = in.readSint16BE();
|
||||
wrkBackgroundObjects[i][j].matchFl = (in.readByte() != 0);
|
||||
wrkBackgroundObjects[i][j].roomState = in.readByte();
|
||||
wrkBackgroundObjects[i][j].bonusIndex = in.readByte();
|
||||
}
|
||||
}
|
||||
if (varnt == _vm->_gameVariant)
|
||||
_backgroundObjects[i] = (background_t *)malloc(sizeof(background_t) * numSubElem);
|
||||
|
||||
if (varnt == _vm->_gameVariant) {
|
||||
_backgroundObjectsSize = numElem;
|
||||
_backgroundObjects = wrkBackgroundObjects;
|
||||
} else {
|
||||
for (int i = 0; i < numElem; i++)
|
||||
free(wrkBackgroundObjects[i]);
|
||||
free(wrkBackgroundObjects);
|
||||
for (int j = 0; j < numSubElem; j++)
|
||||
readBG(in, (varnt == _vm->_gameVariant) ? _backgroundObjects[i][j] : tmpBG);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -142,27 +139,21 @@ void Parser::loadBackgroundObjects(Common::ReadStream &in) {
|
|||
* Read _catchallList from Hugo.dat
|
||||
*/
|
||||
void Parser::loadCatchallList(Common::ReadStream &in) {
|
||||
background_t *wrkCatchallList = 0;
|
||||
background_t tmpBG;
|
||||
|
||||
for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {
|
||||
uint16 numElem = in.readUint16BE();
|
||||
background_t *wrkCatchallList = (background_t *)malloc(sizeof(background_t) * numElem);
|
||||
|
||||
for (int i = 0; i < numElem; i++) {
|
||||
wrkCatchallList[i].verbIndex = in.readUint16BE();
|
||||
wrkCatchallList[i].nounIndex = in.readUint16BE();
|
||||
wrkCatchallList[i].commentIndex = in.readSint16BE();
|
||||
wrkCatchallList[i].matchFl = (in.readByte() != 0);
|
||||
wrkCatchallList[i].roomState = in.readByte();
|
||||
wrkCatchallList[i].bonusIndex = in.readByte();
|
||||
}
|
||||
|
||||
if (varnt == _vm->_gameVariant)
|
||||
_catchallList = wrkCatchallList;
|
||||
else
|
||||
free(wrkCatchallList);
|
||||
_catchallList = wrkCatchallList = (background_t *)malloc(sizeof(background_t) * numElem);
|
||||
|
||||
for (int i = 0; i < numElem; i++)
|
||||
readBG(in, (varnt == _vm->_gameVariant) ? wrkCatchallList[i] : tmpBG);
|
||||
}
|
||||
}
|
||||
|
||||
void Parser::loadArrayReqs(Common::ReadStream &in) {
|
||||
void Parser::loadArrayReqs(Common::SeekableReadStream &in) {
|
||||
_arrayReqs = _vm->loadLongArray(in);
|
||||
}
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ public:
|
|||
void command(const char *format, ...);
|
||||
void freeParser();
|
||||
void keyHandler(Common::Event event);
|
||||
void loadArrayReqs(Common::ReadStream &in);
|
||||
void loadArrayReqs(Common::SeekableReadStream &in);
|
||||
void loadBackgroundObjects(Common::ReadStream &in);
|
||||
void loadCatchallList(Common::ReadStream &in);
|
||||
void loadCmdList(Common::ReadStream &in);
|
||||
|
@ -82,6 +82,8 @@ protected:
|
|||
|
||||
const char *findNoun() const;
|
||||
const char *findVerb() const;
|
||||
void readBG(Common::ReadStream &in, background_t &curBG);
|
||||
void readCmd(Common::ReadStream &in, cmd &curCmd);
|
||||
void showDosInventory() const;
|
||||
|
||||
bool _checkDoubleF1Fl; // Flag used to display user help or instructions
|
||||
|
|
|
@ -253,7 +253,7 @@ void Scheduler::loadAlNewscrIndex(Common::ReadStream &in) {
|
|||
/**
|
||||
* Load Points from Hugo.dat
|
||||
*/
|
||||
void Scheduler::loadPoints(Common::ReadStream &in) {
|
||||
void Scheduler::loadPoints(Common::SeekableReadStream &in) {
|
||||
debugC(6, kDebugSchedule, "loadPoints(&in)");
|
||||
|
||||
for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {
|
||||
|
@ -266,610 +266,350 @@ void Scheduler::loadPoints(Common::ReadStream &in) {
|
|||
_points[i].scoredFl = false;
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < numElem; i++)
|
||||
in.readByte();
|
||||
in.skip(numElem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Scheduler::readAct(Common::ReadStream &in, act &curAct) {
|
||||
uint16 numSubAct;
|
||||
|
||||
curAct.a0.actType = (action_t) in.readByte();
|
||||
switch (curAct.a0.actType) {
|
||||
case ANULL: // -1
|
||||
break;
|
||||
case ASCHEDULE: // 0
|
||||
curAct.a0.timer = in.readSint16BE();
|
||||
curAct.a0.actIndex = in.readUint16BE();
|
||||
break;
|
||||
case START_OBJ: // 1
|
||||
curAct.a1.timer = in.readSint16BE();
|
||||
curAct.a1.objIndex = in.readSint16BE();
|
||||
curAct.a1.cycleNumb = in.readSint16BE();
|
||||
curAct.a1.cycle = (cycle_t) in.readByte();
|
||||
break;
|
||||
case INIT_OBJXY: // 2
|
||||
curAct.a2.timer = in.readSint16BE();
|
||||
curAct.a2.objIndex = in.readSint16BE();
|
||||
curAct.a2.x = in.readSint16BE();
|
||||
curAct.a2.y = in.readSint16BE();
|
||||
break;
|
||||
case PROMPT: // 3
|
||||
curAct.a3.timer = in.readSint16BE();
|
||||
curAct.a3.promptIndex = in.readSint16BE();
|
||||
numSubAct = in.readUint16BE();
|
||||
curAct.a3.responsePtr = (int *) malloc(sizeof(int) * numSubAct);
|
||||
for (int k = 0; k < numSubAct; k++)
|
||||
curAct.a3.responsePtr[k] = in.readSint16BE();
|
||||
curAct.a3.actPassIndex = in.readUint16BE();
|
||||
curAct.a3.actFailIndex = in.readUint16BE();
|
||||
curAct.a3.encodedFl = (in.readByte() == 1) ? true : false;
|
||||
break;
|
||||
case BKGD_COLOR: // 4
|
||||
curAct.a4.timer = in.readSint16BE();
|
||||
curAct.a4.newBackgroundColor = in.readUint32BE();
|
||||
break;
|
||||
case INIT_OBJVXY: // 5
|
||||
curAct.a5.timer = in.readSint16BE();
|
||||
curAct.a5.objIndex = in.readSint16BE();
|
||||
curAct.a5.vx = in.readSint16BE();
|
||||
curAct.a5.vy = in.readSint16BE();
|
||||
break;
|
||||
case INIT_CARRY: // 6
|
||||
curAct.a6.timer = in.readSint16BE();
|
||||
curAct.a6.objIndex = in.readSint16BE();
|
||||
curAct.a6.carriedFl = (in.readByte() == 1) ? true : false;
|
||||
break;
|
||||
case INIT_HF_COORD: // 7
|
||||
curAct.a7.timer = in.readSint16BE();
|
||||
curAct.a7.objIndex = in.readSint16BE();
|
||||
break;
|
||||
case NEW_SCREEN: // 8
|
||||
curAct.a8.timer = in.readSint16BE();
|
||||
curAct.a8.screenIndex = in.readSint16BE();
|
||||
break;
|
||||
case INIT_OBJSTATE: // 9
|
||||
curAct.a9.timer = in.readSint16BE();
|
||||
curAct.a9.objIndex = in.readSint16BE();
|
||||
curAct.a9.newState = in.readByte();
|
||||
break;
|
||||
case INIT_PATH: // 10
|
||||
curAct.a10.timer = in.readSint16BE();
|
||||
curAct.a10.objIndex = in.readSint16BE();
|
||||
curAct.a10.newPathType = in.readSint16BE();
|
||||
curAct.a10.vxPath = in.readByte();
|
||||
curAct.a10.vyPath = in.readByte();
|
||||
break;
|
||||
case COND_R: // 11
|
||||
curAct.a11.timer = in.readSint16BE();
|
||||
curAct.a11.objIndex = in.readSint16BE();
|
||||
curAct.a11.stateReq = in.readByte();
|
||||
curAct.a11.actPassIndex = in.readUint16BE();
|
||||
curAct.a11.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case TEXT: // 12
|
||||
curAct.a12.timer = in.readSint16BE();
|
||||
curAct.a12.stringIndex = in.readSint16BE();
|
||||
break;
|
||||
case SWAP_IMAGES: // 13
|
||||
curAct.a13.timer = in.readSint16BE();
|
||||
curAct.a13.objIndex1 = in.readSint16BE();
|
||||
curAct.a13.objIndex2 = in.readSint16BE();
|
||||
break;
|
||||
case COND_SCR: // 14
|
||||
curAct.a14.timer = in.readSint16BE();
|
||||
curAct.a14.objIndex = in.readSint16BE();
|
||||
curAct.a14.screenReq = in.readSint16BE();
|
||||
curAct.a14.actPassIndex = in.readUint16BE();
|
||||
curAct.a14.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case AUTOPILOT: // 15
|
||||
curAct.a15.timer = in.readSint16BE();
|
||||
curAct.a15.objIndex1 = in.readSint16BE();
|
||||
curAct.a15.objIndex2 = in.readSint16BE();
|
||||
curAct.a15.dx = in.readByte();
|
||||
curAct.a15.dy = in.readByte();
|
||||
break;
|
||||
case INIT_OBJ_SEQ: // 16
|
||||
curAct.a16.timer = in.readSint16BE();
|
||||
curAct.a16.objIndex = in.readSint16BE();
|
||||
curAct.a16.seqIndex = in.readSint16BE();
|
||||
break;
|
||||
case SET_STATE_BITS: // 17
|
||||
curAct.a17.timer = in.readSint16BE();
|
||||
curAct.a17.objIndex = in.readSint16BE();
|
||||
curAct.a17.stateMask = in.readSint16BE();
|
||||
break;
|
||||
case CLEAR_STATE_BITS: // 18
|
||||
curAct.a18.timer = in.readSint16BE();
|
||||
curAct.a18.objIndex = in.readSint16BE();
|
||||
curAct.a18.stateMask = in.readSint16BE();
|
||||
break;
|
||||
case TEST_STATE_BITS: // 19
|
||||
curAct.a19.timer = in.readSint16BE();
|
||||
curAct.a19.objIndex = in.readSint16BE();
|
||||
curAct.a19.stateMask = in.readSint16BE();
|
||||
curAct.a19.actPassIndex = in.readUint16BE();
|
||||
curAct.a19.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case DEL_EVENTS: // 20
|
||||
curAct.a20.timer = in.readSint16BE();
|
||||
curAct.a20.actTypeDel = (action_t) in.readByte();
|
||||
break;
|
||||
case GAMEOVER: // 21
|
||||
curAct.a21.timer = in.readSint16BE();
|
||||
break;
|
||||
case INIT_HH_COORD: // 22
|
||||
curAct.a22.timer = in.readSint16BE();
|
||||
curAct.a22.objIndex = in.readSint16BE();
|
||||
break;
|
||||
case EXIT: // 23
|
||||
curAct.a23.timer = in.readSint16BE();
|
||||
break;
|
||||
case BONUS: // 24
|
||||
curAct.a24.timer = in.readSint16BE();
|
||||
curAct.a24.pointIndex = in.readSint16BE();
|
||||
break;
|
||||
case COND_BOX: // 25
|
||||
curAct.a25.timer = in.readSint16BE();
|
||||
curAct.a25.objIndex = in.readSint16BE();
|
||||
curAct.a25.x1 = in.readSint16BE();
|
||||
curAct.a25.y1 = in.readSint16BE();
|
||||
curAct.a25.x2 = in.readSint16BE();
|
||||
curAct.a25.y2 = in.readSint16BE();
|
||||
curAct.a25.actPassIndex = in.readUint16BE();
|
||||
curAct.a25.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case SOUND: // 26
|
||||
curAct.a26.timer = in.readSint16BE();
|
||||
curAct.a26.soundIndex = in.readSint16BE();
|
||||
break;
|
||||
case ADD_SCORE: // 27
|
||||
curAct.a27.timer = in.readSint16BE();
|
||||
curAct.a27.objIndex = in.readSint16BE();
|
||||
break;
|
||||
case SUB_SCORE: // 28
|
||||
curAct.a28.timer = in.readSint16BE();
|
||||
curAct.a28.objIndex = in.readSint16BE();
|
||||
break;
|
||||
case COND_CARRY: // 29
|
||||
curAct.a29.timer = in.readSint16BE();
|
||||
curAct.a29.objIndex = in.readSint16BE();
|
||||
curAct.a29.actPassIndex = in.readUint16BE();
|
||||
curAct.a29.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case INIT_MAZE: // 30
|
||||
curAct.a30.timer = in.readSint16BE();
|
||||
curAct.a30.mazeSize = in.readByte();
|
||||
curAct.a30.x1 = in.readSint16BE();
|
||||
curAct.a30.y1 = in.readSint16BE();
|
||||
curAct.a30.x2 = in.readSint16BE();
|
||||
curAct.a30.y2 = in.readSint16BE();
|
||||
curAct.a30.x3 = in.readSint16BE();
|
||||
curAct.a30.x4 = in.readSint16BE();
|
||||
curAct.a30.firstScreenIndex = in.readByte();
|
||||
break;
|
||||
case EXIT_MAZE: // 31
|
||||
curAct.a31.timer = in.readSint16BE();
|
||||
break;
|
||||
case INIT_PRIORITY: // 32
|
||||
curAct.a32.timer = in.readSint16BE();
|
||||
curAct.a32.objIndex = in.readSint16BE();
|
||||
curAct.a32.priority = in.readByte();
|
||||
break;
|
||||
case INIT_SCREEN: // 33
|
||||
curAct.a33.timer = in.readSint16BE();
|
||||
curAct.a33.objIndex = in.readSint16BE();
|
||||
curAct.a33.screenIndex = in.readSint16BE();
|
||||
break;
|
||||
case AGSCHEDULE: // 34
|
||||
curAct.a34.timer = in.readSint16BE();
|
||||
curAct.a34.actIndex = in.readUint16BE();
|
||||
break;
|
||||
case REMAPPAL: // 35
|
||||
curAct.a35.timer = in.readSint16BE();
|
||||
curAct.a35.oldColorIndex = in.readSint16BE();
|
||||
curAct.a35.newColorIndex = in.readSint16BE();
|
||||
break;
|
||||
case COND_NOUN: // 36
|
||||
curAct.a36.timer = in.readSint16BE();
|
||||
curAct.a36.nounIndex = in.readUint16BE();
|
||||
curAct.a36.actPassIndex = in.readUint16BE();
|
||||
curAct.a36.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case SCREEN_STATE: // 37
|
||||
curAct.a37.timer = in.readSint16BE();
|
||||
curAct.a37.screenIndex = in.readSint16BE();
|
||||
curAct.a37.newState = in.readByte();
|
||||
break;
|
||||
case INIT_LIPS: // 38
|
||||
curAct.a38.timer = in.readSint16BE();
|
||||
curAct.a38.lipsObjIndex = in.readSint16BE();
|
||||
curAct.a38.objIndex = in.readSint16BE();
|
||||
curAct.a38.dxLips = in.readByte();
|
||||
curAct.a38.dyLips = in.readByte();
|
||||
break;
|
||||
case INIT_STORY_MODE: // 39
|
||||
curAct.a39.timer = in.readSint16BE();
|
||||
curAct.a39.storyModeFl = (in.readByte() == 1);
|
||||
break;
|
||||
case WARN: // 40
|
||||
curAct.a40.timer = in.readSint16BE();
|
||||
curAct.a40.stringIndex = in.readSint16BE();
|
||||
break;
|
||||
case COND_BONUS: // 41
|
||||
curAct.a41.timer = in.readSint16BE();
|
||||
curAct.a41.BonusIndex = in.readSint16BE();
|
||||
curAct.a41.actPassIndex = in.readUint16BE();
|
||||
curAct.a41.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case TEXT_TAKE: // 42
|
||||
curAct.a42.timer = in.readSint16BE();
|
||||
curAct.a42.objIndex = in.readSint16BE();
|
||||
break;
|
||||
case YESNO: // 43
|
||||
curAct.a43.timer = in.readSint16BE();
|
||||
curAct.a43.promptIndex = in.readSint16BE();
|
||||
curAct.a43.actYesIndex = in.readUint16BE();
|
||||
curAct.a43.actNoIndex = in.readUint16BE();
|
||||
break;
|
||||
case STOP_ROUTE: // 44
|
||||
curAct.a44.timer = in.readSint16BE();
|
||||
break;
|
||||
case COND_ROUTE: // 45
|
||||
curAct.a45.timer = in.readSint16BE();
|
||||
curAct.a45.routeIndex = in.readSint16BE();
|
||||
curAct.a45.actPassIndex = in.readUint16BE();
|
||||
curAct.a45.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case INIT_JUMPEXIT: // 46
|
||||
curAct.a46.timer = in.readSint16BE();
|
||||
curAct.a46.jumpExitFl = (in.readByte() == 1);
|
||||
break;
|
||||
case INIT_VIEW: // 47
|
||||
curAct.a47.timer = in.readSint16BE();
|
||||
curAct.a47.objIndex = in.readSint16BE();
|
||||
curAct.a47.viewx = in.readSint16BE();
|
||||
curAct.a47.viewy = in.readSint16BE();
|
||||
curAct.a47.direction = in.readSint16BE();
|
||||
break;
|
||||
case INIT_OBJ_FRAME: // 48
|
||||
curAct.a48.timer = in.readSint16BE();
|
||||
curAct.a48.objIndex = in.readSint16BE();
|
||||
curAct.a48.seqIndex = in.readSint16BE();
|
||||
curAct.a48.frameIndex = in.readSint16BE();
|
||||
break;
|
||||
case OLD_SONG: //49
|
||||
curAct.a49.timer = in.readSint16BE();
|
||||
curAct.a49.songIndex = in.readUint16BE();
|
||||
break;
|
||||
default:
|
||||
error("Engine - Unknown action type encountered: %d", curAct.a0.actType);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load actListArr from Hugo.dat
|
||||
*/
|
||||
void Scheduler::loadActListArr(Common::ReadStream &in) {
|
||||
debugC(6, kDebugSchedule, "loadActListArr(&in)");
|
||||
|
||||
int numElem, numSubElem, numSubAct;
|
||||
act tmpAct;
|
||||
|
||||
int numElem, numSubElem;
|
||||
for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {
|
||||
numElem = in.readUint16BE();
|
||||
if (varnt == _vm->_gameVariant) {
|
||||
_actListArrSize = numElem;
|
||||
_actListArr = (act **)malloc(sizeof(act *) * _actListArrSize);
|
||||
for (int i = 0; i < _actListArrSize; i++) {
|
||||
numSubElem = in.readUint16BE();
|
||||
_actListArr[i] = (act *) malloc(sizeof(act) * (numSubElem + 1));
|
||||
for (int j = 0; j < numSubElem; j++) {
|
||||
_actListArr[i][j].a0.actType = (action_t) in.readByte();
|
||||
switch (_actListArr[i][j].a0.actType) {
|
||||
case ANULL: // -1
|
||||
break;
|
||||
case ASCHEDULE: // 0
|
||||
_actListArr[i][j].a0.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a0.actIndex = in.readUint16BE();
|
||||
break;
|
||||
case START_OBJ: // 1
|
||||
_actListArr[i][j].a1.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a1.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a1.cycleNumb = in.readSint16BE();
|
||||
_actListArr[i][j].a1.cycle = (cycle_t) in.readByte();
|
||||
break;
|
||||
case INIT_OBJXY: // 2
|
||||
_actListArr[i][j].a2.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a2.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a2.x = in.readSint16BE();
|
||||
_actListArr[i][j].a2.y = in.readSint16BE();
|
||||
break;
|
||||
case PROMPT: // 3
|
||||
_actListArr[i][j].a3.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a3.promptIndex = in.readSint16BE();
|
||||
numSubAct = in.readUint16BE();
|
||||
_actListArr[i][j].a3.responsePtr = (int *) malloc(sizeof(int) * numSubAct);
|
||||
for (int k = 0; k < numSubAct; k++)
|
||||
_actListArr[i][j].a3.responsePtr[k] = in.readSint16BE();
|
||||
_actListArr[i][j].a3.actPassIndex = in.readUint16BE();
|
||||
_actListArr[i][j].a3.actFailIndex = in.readUint16BE();
|
||||
_actListArr[i][j].a3.encodedFl = (in.readByte() == 1) ? true : false;
|
||||
break;
|
||||
case BKGD_COLOR: // 4
|
||||
_actListArr[i][j].a4.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a4.newBackgroundColor = in.readUint32BE();
|
||||
break;
|
||||
case INIT_OBJVXY: // 5
|
||||
_actListArr[i][j].a5.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a5.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a5.vx = in.readSint16BE();
|
||||
_actListArr[i][j].a5.vy = in.readSint16BE();
|
||||
break;
|
||||
case INIT_CARRY: // 6
|
||||
_actListArr[i][j].a6.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a6.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a6.carriedFl = (in.readByte() == 1) ? true : false;
|
||||
break;
|
||||
case INIT_HF_COORD: // 7
|
||||
_actListArr[i][j].a7.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a7.objIndex = in.readSint16BE();
|
||||
break;
|
||||
case NEW_SCREEN: // 8
|
||||
_actListArr[i][j].a8.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a8.screenIndex = in.readSint16BE();
|
||||
break;
|
||||
case INIT_OBJSTATE: // 9
|
||||
_actListArr[i][j].a9.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a9.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a9.newState = in.readByte();
|
||||
break;
|
||||
case INIT_PATH: // 10
|
||||
_actListArr[i][j].a10.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a10.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a10.newPathType = in.readSint16BE();
|
||||
_actListArr[i][j].a10.vxPath = in.readByte();
|
||||
_actListArr[i][j].a10.vyPath = in.readByte();
|
||||
break;
|
||||
case COND_R: // 11
|
||||
_actListArr[i][j].a11.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a11.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a11.stateReq = in.readByte();
|
||||
_actListArr[i][j].a11.actPassIndex = in.readUint16BE();
|
||||
_actListArr[i][j].a11.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case TEXT: // 12
|
||||
_actListArr[i][j].a12.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a12.stringIndex = in.readSint16BE();
|
||||
break;
|
||||
case SWAP_IMAGES: // 13
|
||||
_actListArr[i][j].a13.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a13.objIndex1 = in.readSint16BE();
|
||||
_actListArr[i][j].a13.objIndex2 = in.readSint16BE();
|
||||
break;
|
||||
case COND_SCR: // 14
|
||||
_actListArr[i][j].a14.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a14.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a14.screenReq = in.readSint16BE();
|
||||
_actListArr[i][j].a14.actPassIndex = in.readUint16BE();
|
||||
_actListArr[i][j].a14.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case AUTOPILOT: // 15
|
||||
_actListArr[i][j].a15.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a15.objIndex1 = in.readSint16BE();
|
||||
_actListArr[i][j].a15.objIndex2 = in.readSint16BE();
|
||||
_actListArr[i][j].a15.dx = in.readByte();
|
||||
_actListArr[i][j].a15.dy = in.readByte();
|
||||
break;
|
||||
case INIT_OBJ_SEQ: // 16
|
||||
_actListArr[i][j].a16.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a16.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a16.seqIndex = in.readSint16BE();
|
||||
break;
|
||||
case SET_STATE_BITS: // 17
|
||||
_actListArr[i][j].a17.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a17.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a17.stateMask = in.readSint16BE();
|
||||
break;
|
||||
case CLEAR_STATE_BITS: // 18
|
||||
_actListArr[i][j].a18.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a18.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a18.stateMask = in.readSint16BE();
|
||||
break;
|
||||
case TEST_STATE_BITS: // 19
|
||||
_actListArr[i][j].a19.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a19.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a19.stateMask = in.readSint16BE();
|
||||
_actListArr[i][j].a19.actPassIndex = in.readUint16BE();
|
||||
_actListArr[i][j].a19.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case DEL_EVENTS: // 20
|
||||
_actListArr[i][j].a20.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a20.actTypeDel = (action_t) in.readByte();
|
||||
break;
|
||||
case GAMEOVER: // 21
|
||||
_actListArr[i][j].a21.timer = in.readSint16BE();
|
||||
break;
|
||||
case INIT_HH_COORD: // 22
|
||||
_actListArr[i][j].a22.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a22.objIndex = in.readSint16BE();
|
||||
break;
|
||||
case EXIT: // 23
|
||||
_actListArr[i][j].a23.timer = in.readSint16BE();
|
||||
break;
|
||||
case BONUS: // 24
|
||||
_actListArr[i][j].a24.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a24.pointIndex = in.readSint16BE();
|
||||
break;
|
||||
case COND_BOX: // 25
|
||||
_actListArr[i][j].a25.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a25.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a25.x1 = in.readSint16BE();
|
||||
_actListArr[i][j].a25.y1 = in.readSint16BE();
|
||||
_actListArr[i][j].a25.x2 = in.readSint16BE();
|
||||
_actListArr[i][j].a25.y2 = in.readSint16BE();
|
||||
_actListArr[i][j].a25.actPassIndex = in.readUint16BE();
|
||||
_actListArr[i][j].a25.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case SOUND: // 26
|
||||
_actListArr[i][j].a26.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a26.soundIndex = in.readSint16BE();
|
||||
break;
|
||||
case ADD_SCORE: // 27
|
||||
_actListArr[i][j].a27.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a27.objIndex = in.readSint16BE();
|
||||
break;
|
||||
case SUB_SCORE: // 28
|
||||
_actListArr[i][j].a28.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a28.objIndex = in.readSint16BE();
|
||||
break;
|
||||
case COND_CARRY: // 29
|
||||
_actListArr[i][j].a29.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a29.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a29.actPassIndex = in.readUint16BE();
|
||||
_actListArr[i][j].a29.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case INIT_MAZE: // 30
|
||||
_actListArr[i][j].a30.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a30.mazeSize = in.readByte();
|
||||
_actListArr[i][j].a30.x1 = in.readSint16BE();
|
||||
_actListArr[i][j].a30.y1 = in.readSint16BE();
|
||||
_actListArr[i][j].a30.x2 = in.readSint16BE();
|
||||
_actListArr[i][j].a30.y2 = in.readSint16BE();
|
||||
_actListArr[i][j].a30.x3 = in.readSint16BE();
|
||||
_actListArr[i][j].a30.x4 = in.readSint16BE();
|
||||
_actListArr[i][j].a30.firstScreenIndex = in.readByte();
|
||||
break;
|
||||
case EXIT_MAZE: // 31
|
||||
_actListArr[i][j].a31.timer = in.readSint16BE();
|
||||
break;
|
||||
case INIT_PRIORITY: // 32
|
||||
_actListArr[i][j].a32.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a32.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a32.priority = in.readByte();
|
||||
break;
|
||||
case INIT_SCREEN: // 33
|
||||
_actListArr[i][j].a33.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a33.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a33.screenIndex = in.readSint16BE();
|
||||
break;
|
||||
case AGSCHEDULE: // 34
|
||||
_actListArr[i][j].a34.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a34.actIndex = in.readUint16BE();
|
||||
break;
|
||||
case REMAPPAL: // 35
|
||||
_actListArr[i][j].a35.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a35.oldColorIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a35.newColorIndex = in.readSint16BE();
|
||||
break;
|
||||
case COND_NOUN: // 36
|
||||
_actListArr[i][j].a36.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a36.nounIndex = in.readUint16BE();
|
||||
_actListArr[i][j].a36.actPassIndex = in.readUint16BE();
|
||||
_actListArr[i][j].a36.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case SCREEN_STATE: // 37
|
||||
_actListArr[i][j].a37.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a37.screenIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a37.newState = in.readByte();
|
||||
break;
|
||||
case INIT_LIPS: // 38
|
||||
_actListArr[i][j].a38.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a38.lipsObjIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a38.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a38.dxLips = in.readByte();
|
||||
_actListArr[i][j].a38.dyLips = in.readByte();
|
||||
break;
|
||||
case INIT_STORY_MODE: // 39
|
||||
_actListArr[i][j].a39.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a39.storyModeFl = (in.readByte() == 1);
|
||||
break;
|
||||
case WARN: // 40
|
||||
_actListArr[i][j].a40.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a40.stringIndex = in.readSint16BE();
|
||||
break;
|
||||
case COND_BONUS: // 41
|
||||
_actListArr[i][j].a41.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a41.BonusIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a41.actPassIndex = in.readUint16BE();
|
||||
_actListArr[i][j].a41.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case TEXT_TAKE: // 42
|
||||
_actListArr[i][j].a42.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a42.objIndex = in.readSint16BE();
|
||||
break;
|
||||
case YESNO: // 43
|
||||
_actListArr[i][j].a43.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a43.promptIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a43.actYesIndex = in.readUint16BE();
|
||||
_actListArr[i][j].a43.actNoIndex = in.readUint16BE();
|
||||
break;
|
||||
case STOP_ROUTE: // 44
|
||||
_actListArr[i][j].a44.timer = in.readSint16BE();
|
||||
break;
|
||||
case COND_ROUTE: // 45
|
||||
_actListArr[i][j].a45.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a45.routeIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a45.actPassIndex = in.readUint16BE();
|
||||
_actListArr[i][j].a45.actFailIndex = in.readUint16BE();
|
||||
break;
|
||||
case INIT_JUMPEXIT: // 46
|
||||
_actListArr[i][j].a46.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a46.jumpExitFl = (in.readByte() == 1);
|
||||
break;
|
||||
case INIT_VIEW: // 47
|
||||
_actListArr[i][j].a47.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a47.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a47.viewx = in.readSint16BE();
|
||||
_actListArr[i][j].a47.viewy = in.readSint16BE();
|
||||
_actListArr[i][j].a47.direction = in.readSint16BE();
|
||||
break;
|
||||
case INIT_OBJ_FRAME: // 48
|
||||
_actListArr[i][j].a48.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a48.objIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a48.seqIndex = in.readSint16BE();
|
||||
_actListArr[i][j].a48.frameIndex = in.readSint16BE();
|
||||
break;
|
||||
case OLD_SONG: //49
|
||||
_actListArr[i][j].a49.timer = in.readSint16BE();
|
||||
_actListArr[i][j].a49.songIndex = in.readUint16BE();
|
||||
break;
|
||||
default:
|
||||
error("Engine - Unknown action type encountered: %d", _actListArr[i][j].a0.actType);
|
||||
}
|
||||
}
|
||||
_actListArr[i][numSubElem].a0.actType = ANULL;
|
||||
}
|
||||
} else {
|
||||
|
||||
for (int i = 0; i < numElem; i++) {
|
||||
numSubElem = in.readUint16BE();
|
||||
if (varnt == _vm->_gameVariant)
|
||||
_actListArr[i] = (act *) malloc(sizeof(act) * (numSubElem + 1));
|
||||
for (int j = 0; j < numSubElem; j++) {
|
||||
numSubAct = in.readByte();
|
||||
switch (numSubAct) {
|
||||
case ANULL: // -1
|
||||
break;
|
||||
case ASCHEDULE: // 0
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
break;
|
||||
case START_OBJ: // 1
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
break;
|
||||
case INIT_OBJXY: // 2
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case PROMPT: // 3
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
numSubAct = in.readUint16BE();
|
||||
for (int k = 0; k < numSubAct; k++)
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
in.readByte();
|
||||
break;
|
||||
case BKGD_COLOR: // 4
|
||||
in.readSint16BE();
|
||||
in.readUint32BE();
|
||||
break;
|
||||
case INIT_OBJVXY: // 5
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case INIT_CARRY: // 6
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
break;
|
||||
case INIT_HF_COORD: // 7
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case NEW_SCREEN: // 8
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case INIT_OBJSTATE: // 9
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
break;
|
||||
case INIT_PATH: // 10
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
break;
|
||||
case COND_R: // 11
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
break;
|
||||
case TEXT: // 12
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case SWAP_IMAGES: // 13
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case COND_SCR: // 14
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
break;
|
||||
case AUTOPILOT: // 15
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
break;
|
||||
case INIT_OBJ_SEQ: // 16
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case SET_STATE_BITS: // 17
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case CLEAR_STATE_BITS: // 18
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case TEST_STATE_BITS: // 19
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
break;
|
||||
case DEL_EVENTS: // 20
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
break;
|
||||
case GAMEOVER: // 21
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case INIT_HH_COORD: // 22
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case EXIT: // 23
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case BONUS: // 24
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case COND_BOX: // 25
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
break;
|
||||
case SOUND: // 26
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case ADD_SCORE: // 27
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case SUB_SCORE: // 28
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case COND_CARRY: // 29
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
break;
|
||||
case INIT_MAZE: // 30
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
break;
|
||||
case EXIT_MAZE: // 31
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case INIT_PRIORITY: // 32
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
break;
|
||||
case INIT_SCREEN: // 33
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case AGSCHEDULE: // 34
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
break;
|
||||
case REMAPPAL: // 35
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case COND_NOUN: // 36
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
break;
|
||||
case SCREEN_STATE: // 37
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
break;
|
||||
case INIT_LIPS: // 38
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
in.readByte();
|
||||
break;
|
||||
case INIT_STORY_MODE: // 39
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
break;
|
||||
case WARN: // 40
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case COND_BONUS: // 41
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
break;
|
||||
case TEXT_TAKE: // 42
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case YESNO: // 43
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
break;
|
||||
case STOP_ROUTE: // 44
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case COND_ROUTE: // 45
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
in.readUint16BE();
|
||||
break;
|
||||
case INIT_JUMPEXIT: // 46
|
||||
in.readSint16BE();
|
||||
in.readByte();
|
||||
break;
|
||||
case INIT_VIEW: // 47
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case INIT_OBJ_FRAME: // 48
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
in.readSint16BE();
|
||||
break;
|
||||
case OLD_SONG: //49
|
||||
in.readSint16BE();
|
||||
in.readUint16BE();
|
||||
break;
|
||||
default:
|
||||
error("Engine - Unknown action type encountered %d - variante %d pos %d.%d", numSubAct, varnt, i, j);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (varnt == _vm->_gameVariant) {
|
||||
readAct(in, _actListArr[i][j]);
|
||||
} else {
|
||||
readAct(in, tmpAct);
|
||||
if (tmpAct.a0.actType == PROMPT)
|
||||
free(tmpAct.a3.responsePtr);
|
||||
}
|
||||
}
|
||||
|
||||
if (varnt == _vm->_gameVariant)
|
||||
_actListArr[i][numSubElem].a0.actType = ANULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Read _screenActs
|
||||
*/
|
||||
void Scheduler::loadScreenAct(Common::ReadStream &in) {
|
||||
void Scheduler::loadScreenAct(Common::SeekableReadStream &in) {
|
||||
for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {
|
||||
uint16 numElem = in.readUint16BE();
|
||||
|
||||
uint16 **wrkScreenActs = (uint16 **)malloc(sizeof(uint16 *) * numElem);
|
||||
if (varnt == _vm->_gameVariant) {
|
||||
_screenActsSize = numElem;
|
||||
_screenActs = (uint16 **)malloc(sizeof(uint16 *) * numElem);
|
||||
for (int i = 0; i < numElem; i++) {
|
||||
uint16 numSubElem = in.readUint16BE();
|
||||
if (numSubElem == 0) {
|
||||
wrkScreenActs[i] = 0;
|
||||
_screenActs[i] = 0;
|
||||
} else {
|
||||
wrkScreenActs[i] = (uint16 *)malloc(sizeof(uint16) * numSubElem);
|
||||
_screenActs[i] = (uint16 *)malloc(sizeof(uint16) * numSubElem);
|
||||
for (int j = 0; j < numSubElem; j++)
|
||||
wrkScreenActs[i][j] = in.readUint16BE();
|
||||
_screenActs[i][j] = in.readUint16BE();
|
||||
}
|
||||
}
|
||||
|
||||
if (varnt == _vm->_gameVariant) {
|
||||
_screenActsSize = numElem;
|
||||
_screenActs = wrkScreenActs;
|
||||
} else {
|
||||
for (int i = 0; i < numElem; i++)
|
||||
free(wrkScreenActs[i]);
|
||||
free(wrkScreenActs);
|
||||
for (int i = 0; i < numElem; i++) {
|
||||
uint16 numSubElem = in.readUint16BE();
|
||||
in.skip(numSubElem * sizeof(uint16));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -466,11 +466,12 @@ public:
|
|||
void insertActionList(const uint16 actIndex);
|
||||
void loadActListArr(Common::ReadStream &in);
|
||||
void loadAlNewscrIndex(Common::ReadStream &in);
|
||||
void loadPoints(Common::ReadStream &in);
|
||||
void loadScreenAct(Common::ReadStream &in);
|
||||
void loadPoints(Common::SeekableReadStream &in);
|
||||
void loadScreenAct(Common::SeekableReadStream &in);
|
||||
void newScreen(const int screenIndex);
|
||||
void processBonus(const int bonusIndex);
|
||||
void processMaze(const int x1, const int x2, const int y1, const int y2);
|
||||
void readAct(Common::ReadStream &in, act &curAct);
|
||||
void restoreSchedulerData(Common::ReadStream *in);
|
||||
void restoreScreen(const int screenIndex);
|
||||
void saveSchedulerData(Common::WriteStream *out);
|
||||
|
|
|
@ -42,8 +42,8 @@ public:
|
|||
const char *getTextParser(int parserIndex) const { return _textParser[parserIndex]; }
|
||||
const char *getTextUtil(int utilIndex) const { return _textUtil[utilIndex]; }
|
||||
const char *getVerb(int idx1, int idx2) const { return _arrayVerbs[idx1][idx2]; }
|
||||
char **getNounArray(int idx1) { return _arrayNouns[idx1]; }
|
||||
char **getVerbArray(int idx1) { return _arrayVerbs[idx1]; }
|
||||
char **getNounArray(int idx1) const { return _arrayNouns[idx1]; }
|
||||
char **getVerbArray(int idx1) const { return _arrayVerbs[idx1]; }
|
||||
|
||||
void loadAllTexts(Common::ReadStream &in);
|
||||
void freeAllTexts();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue