aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/lab/dispman.h4
-rw-r--r--engines/lab/engine.cpp150
-rw-r--r--engines/lab/lab.h14
-rw-r--r--engines/lab/map.cpp44
-rw-r--r--engines/lab/processroom.cpp322
-rw-r--r--engines/lab/processroom.h21
-rw-r--r--engines/lab/resource.cpp8
-rw-r--r--engines/lab/savegame.cpp4
-rw-r--r--engines/lab/special.cpp64
-rw-r--r--engines/lab/transitions.cpp10
-rw-r--r--engines/lab/utils.cpp10
-rw-r--r--engines/lab/utils.h1
12 files changed, 319 insertions, 333 deletions
diff --git a/engines/lab/dispman.h b/engines/lab/dispman.h
index dbeeefc1c1..5b6217bb60 100644
--- a/engines/lab/dispman.h
+++ b/engines/lab/dispman.h
@@ -79,8 +79,8 @@ public:
void copyPage(uint16 width, uint16 height, uint16 nheight, uint16 startline, byte *mem);
void doScrollWipe(char *filename);
void doScrollBounce();
- void doTransWipe(CloseDataPtr *cPtr, char *filename);
- void doTransition(TransitionType transitionType, CloseDataPtr *cPtr, char *filename);
+ void doTransWipe(CloseDataPtr *closePtrList, char *filename);
+ void doTransition(TransitionType transitionType, CloseDataPtr *closePtrList, char *filename);
void blackScreen();
void whiteScreen();
void blackAllScreen();
diff --git a/engines/lab/engine.cpp b/engines/lab/engine.cpp
index 0b353b521e..5f6f9f96e9 100644
--- a/engines/lab/engine.cpp
+++ b/engines/lab/engine.cpp
@@ -164,7 +164,7 @@ void LabEngine::eatMessages() {
* Checks whether the close up is one of the special case closeups.
*/
bool LabEngine::doCloseUp(CloseDataPtr closePtr) {
- if (closePtr == NULL)
+ if (!closePtr)
return false;
int monltmargin, monrtmargin, montopmargin, lutertmargin;
@@ -253,7 +253,7 @@ const char *LabEngine::getInvName(uint16 curInv) {
*/
void LabEngine::interfaceOff() {
if (!_interfaceOff) {
- _event->attachGadgetList(NULL);
+ _event->attachGadgetList(nullptr);
_event->mouseHide();
_interfaceOff = true;
}
@@ -286,10 +286,10 @@ bool LabEngine::doUse(uint16 curInv) {
interfaceOff();
_anim->stopDiff();
_curFileName = " ";
- _cptr = NULL;
+ _closeDataPtr = nullptr;
doMap(_roomNum);
_graphics->setPalette(initcolors, 8);
- _graphics->drawMessage(NULL);
+ _graphics->drawMessage(nullptr);
_graphics->drawPanel();
} else if (curInv == JOURNALNUM) {
// LAB: Labyrinth specific
@@ -297,10 +297,10 @@ bool LabEngine::doUse(uint16 curInv) {
interfaceOff();
_anim->stopDiff();
_curFileName = " ";
- _cptr = NULL;
+ _closeDataPtr = nullptr;
doJournal();
_graphics->drawPanel();
- _graphics->drawMessage(NULL);
+ _graphics->drawMessage(nullptr);
} else if (curInv == LAMPNUM) {
// LAB: Labyrinth specific
interfaceOff();
@@ -400,7 +400,7 @@ void LabEngine::mainGameLoop() {
_graphics->setPalette(initcolors, 8);
- _cptr = NULL;
+ _closeDataPtr = nullptr;
_roomNum = 1;
_direction = NORTH;
@@ -434,16 +434,15 @@ void LabEngine::mainGameLoop() {
_music->resumeBackMusic();
// Sees what kind of close up we're in and does the appropriate stuff, if any.
- if (doCloseUp(_cptr)) {
- _cptr = NULL;
-
+ if (doCloseUp(_closeDataPtr)) {
+ _closeDataPtr = nullptr;
mayShowCrumbIndicator();
_graphics->screenUpdate();
}
// Sets the current picture properly on the screen
if (_mainDisplay)
- _nextFileName = getPictName(&_cptr);
+ _nextFileName = getPictName(&_closeDataPtr);
if (_noUpdateDiff) {
// Potentially entered another room
@@ -458,21 +457,21 @@ void LabEngine::mainGameLoop() {
_roomsFound->inclElement(_roomNum);
_curFileName = _nextFileName;
- if (_cptr) {
- if ((_cptr->_closeUpType == SPECIALLOCK) && _mainDisplay)
+ if (_closeDataPtr) {
+ if ((_closeDataPtr->_closeUpType == SPECIALLOCK) && _mainDisplay)
// LAB: Labyrinth specific code
showCombination(_curFileName);
- else if (((_cptr->_closeUpType == SPECIALBRICK) ||
- (_cptr->_closeUpType == SPECIALBRICKNOMOUSE)) &&
+ else if (((_closeDataPtr->_closeUpType == SPECIALBRICK) ||
+ (_closeDataPtr->_closeUpType == SPECIALBRICKNOMOUSE)) &&
_mainDisplay)
// LAB: Labyrinth specific code
- showTile(_curFileName, (bool)(_cptr->_closeUpType == SPECIALBRICKNOMOUSE));
+ showTile(_curFileName, (bool)(_closeDataPtr->_closeUpType == SPECIALBRICKNOMOUSE));
else
_graphics->readPict(_curFileName, false);
} else
_graphics->readPict(_curFileName, false);
- drawRoomMessage(curInv, _cptr);
+ drawRoomMessage(curInv, _closeDataPtr);
forceDraw = false;
mayShowCrumbIndicator();
@@ -483,7 +482,7 @@ void LabEngine::mainGameLoop() {
}
if (forceDraw) {
- drawRoomMessage(curInv, _cptr);
+ drawRoomMessage(curInv, _closeDataPtr);
forceDraw = false;
_graphics->screenUpdate();
}
@@ -494,7 +493,7 @@ void LabEngine::mainGameLoop() {
interfaceOn();
IntuiMessage *curMsg = getMsg();
- if (curMsg == NULL) {
+ if (!curMsg) {
// Does music load and next animation frame when you've run out of messages
gotMessage = false;
_music->checkRoomMusic();
@@ -516,7 +515,7 @@ void LabEngine::mainGameLoop() {
gotMessage = true;
mayShowCrumbIndicator();
_graphics->screenUpdate();
- if (!from_crumbs(GADGETUP, code, 0, _event->updateAndGetMousePos(), curInv, curMsg, forceDraw, code, actionMode))
+ if (!fromCrumbs(GADGETUP, code, 0, _event->updateAndGetMousePos(), curInv, curMsg, forceDraw, code, actionMode))
break;
}
}
@@ -531,7 +530,7 @@ void LabEngine::mainGameLoop() {
curPos.y = curMsg->_mouseY;
_followingCrumbs = false;
- if (!from_crumbs(curMsg->_msgClass, curMsg->_code, curMsg->_qualifier, curPos, curInv, curMsg, forceDraw, curMsg->_gadgetID, actionMode))
+ if (!fromCrumbs(curMsg->_msgClass, curMsg->_code, curMsg->_qualifier, curPos, curInv, curMsg, forceDraw, curMsg->_gadgetID, actionMode))
break;
}
}
@@ -557,14 +556,14 @@ void LabEngine::mainGameLoop() {
}
}
-bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Common::Point tmpPos,
+bool LabEngine::fromCrumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Common::Point tmpPos,
uint16 &curInv, IntuiMessage *curMsg, bool &forceDraw, uint16 gadgetId, uint16 &actionMode) {
uint32 msgClass = tmpClass;
Common::Point curPos = tmpPos;
uint16 oldDirection = 0;
uint16 lastInv = MAPNUM;
- CloseDataPtr hcptr = nullptr;
+ CloseDataPtr wrkClosePtr = nullptr;
bool doit;
_anim->_doBlack = false;
@@ -602,7 +601,7 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
// Sets the correct gadget list
interfaceOn();
_graphics->drawPanel();
- drawRoomMessage(curInv, _cptr);
+ drawRoomMessage(curInv, _closeDataPtr);
_graphics->screenUpdate();
}
} else {
@@ -627,7 +626,7 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
_music->updateMusic();
curMsg = getMsg();
- if (curMsg == NULL) {
+ if (!curMsg) {
// Does music load and next animation frame when you've run out of messages
_music->updateMusic();
_anim->diffNextFrame();
@@ -657,7 +656,7 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
msgClass = DELTAMOVE;
} else if (code == 27) {
// ESC key
- _cptr = NULL;
+ _closeDataPtr = nullptr;
}
eatMessages();
@@ -670,17 +669,17 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
_graphics->_longWinInFront = false;
_graphics->_doNotDrawMessage = false;
_graphics->drawPanel();
- drawRoomMessage(curInv, _cptr);
+ drawRoomMessage(curInv, _closeDataPtr);
_graphics->screenUpdate();
}
} else if ((msgClass == GADGETUP) && !_alternate) {
if (gadgetId <= 5) {
- if ((actionMode == 4) && (gadgetId == 4) && (_cptr != NULL)) {
- doMainView(&_cptr);
+ if ((actionMode == 4) && (gadgetId == 4) && _closeDataPtr) {
+ doMainView(&_closeDataPtr);
_anim->_doBlack = true;
- hcptr = NULL;
- _cptr = NULL;
+ wrkClosePtr = nullptr;
+ _closeDataPtr = nullptr;
mayShowCrumbIndicator();
_graphics->screenUpdate();
} else if (gadgetId == 5) {
@@ -700,7 +699,7 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
decIncInv(&curInv, false);
_graphics->drawPanel();
- drawRoomMessage(curInv, _cptr);
+ drawRoomMessage(curInv, _closeDataPtr);
mayShowCrumbIndicator();
_graphics->screenUpdate();
@@ -724,8 +723,8 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
_graphics->screenUpdate();
} else if (gadgetId >= 6) {
// Arrow Gadgets
- _cptr = NULL;
- hcptr = NULL;
+ _closeDataPtr = nullptr;
+ wrkClosePtr = nullptr;
if ((gadgetId == 6) || (gadgetId == 8)) {
if (gadgetId == 6)
@@ -738,7 +737,7 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
oldDirection = _direction;
uint16 newDir = processArrow(_direction, gadgetId - 6);
- doTurn(_direction, newDir, &_cptr);
+ doTurn(_direction, newDir, &_closeDataPtr);
_anim->_doBlack = true;
_direction = newDir;
forceDraw = true;
@@ -748,7 +747,7 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
} else if (gadgetId == 7) {
uint16 oldRoomNum = _roomNum;
- if (doGoForward(&_cptr)) {
+ if (doGoForward(&_closeDataPtr)) {
if (oldRoomNum == _roomNum)
_anim->_doBlack = true;
} else {
@@ -825,7 +824,7 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
// Sets the correct gadget list
interfaceOn();
_graphics->drawPanel();
- drawRoomMessage(curInv, _cptr);
+ drawRoomMessage(curInv, _closeDataPtr);
_graphics->screenUpdate();
}
@@ -838,8 +837,7 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
_curFileName = " ";
doit = !saveRestoreGame();
- _cptr = NULL;
-
+ _closeDataPtr = nullptr;
_mainDisplay = true;
curInv = MAPNUM;
@@ -888,7 +886,7 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
decIncInv(&curInv, true);
lastInv = curInv;
_graphics->_doNotDrawMessage = false;
- drawRoomMessage(curInv, _cptr);
+ drawRoomMessage(curInv, _closeDataPtr);
_graphics->screenUpdate();
} else if (gadgetId == 4) {
@@ -896,7 +894,7 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
decIncInv(&curInv, false);
lastInv = curInv;
_graphics->_doNotDrawMessage = false;
- drawRoomMessage(curInv, _cptr);
+ drawRoomMessage(curInv, _closeDataPtr);
_graphics->screenUpdate();
} else if (gadgetId == 5) {
@@ -925,7 +923,7 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
// Sets the correct gadget list
interfaceOn();
_graphics->drawPanel();
- drawRoomMessage(curInv, _cptr);
+ drawRoomMessage(curInv, _closeDataPtr);
_graphics->screenUpdate();
} else {
_breadCrumbs[0]._roomNum = 0;
@@ -943,11 +941,11 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
doit = false;
- if (_cptr) {
- if ((_cptr->_closeUpType == SPECIALLOCK) && _mainDisplay)
+ if (_closeDataPtr) {
+ if ((_closeDataPtr->_closeUpType == SPECIALLOCK) && _mainDisplay)
// LAB: Labyrinth specific code
mouseCombination(curPos);
- else if ((_cptr->_closeUpType == SPECIALBRICK) && _mainDisplay)
+ else if ((_closeDataPtr->_closeUpType == SPECIALBRICK) && _mainDisplay)
mouseTile(curPos);
else
doit = true;
@@ -956,48 +954,48 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
if (doit) {
- hcptr = NULL;
+ wrkClosePtr = nullptr;
eatMessages();
if (actionMode == 0) {
// Take something.
- if (doActionRule(Common::Point(curPos.x, curPos.y), actionMode, _roomNum, &_cptr))
+ if (doActionRule(Common::Point(curPos.x, curPos.y), actionMode, _roomNum, &_closeDataPtr))
_curFileName = _newFileName;
- else if (takeItem(curPos.x, curPos.y, &_cptr))
+ else if (takeItem(curPos.x, curPos.y, &_closeDataPtr))
drawStaticMessage(kTextTakeItem);
- else if (doActionRule(curPos, TAKEDEF - 1, _roomNum, &_cptr))
+ else if (doActionRule(curPos, TAKEDEF - 1, _roomNum, &_closeDataPtr))
_curFileName = _newFileName;
- else if (doActionRule(curPos, TAKE - 1, 0, &_cptr))
+ else if (doActionRule(curPos, TAKE - 1, 0, &_closeDataPtr))
_curFileName = _newFileName;
else if (curPos.y < (_utils->vgaScaleY(149) + _utils->svgaCord(2)))
drawStaticMessage(kTextNothing);
} else if ((actionMode == 1) || (actionMode == 2) || (actionMode == 3)) {
// Manipulate an object, Open up a "door" or Close a "door"
- if (doActionRule(curPos, actionMode, _roomNum, &_cptr))
+ if (doActionRule(curPos, actionMode, _roomNum, &_closeDataPtr))
_curFileName = _newFileName;
- else if (!doActionRule(curPos, actionMode, 0, &_cptr)) {
+ else if (!doActionRule(curPos, actionMode, 0, &_closeDataPtr)) {
if (curPos.y < (_utils->vgaScaleY(149) + _utils->svgaCord(2)))
drawStaticMessage(kTextNothing);
}
} else if (actionMode == 4) {
// Look at closeups
- CloseDataPtr tempcptr = _cptr;
- setCurClose(curPos, &tempcptr);
+ CloseDataPtr tmpClosePtr = _closeDataPtr;
+ setCurrentClose(curPos, &tmpClosePtr);
- if (_cptr == tempcptr) {
+ if (_closeDataPtr == tmpClosePtr) {
if (curPos.y < (_utils->vgaScaleY(149) + _utils->svgaCord(2)))
drawStaticMessage(kTextNothing);
- } else if (tempcptr->_graphicName) {
- if (*(tempcptr->_graphicName)) {
+ } else if (tmpClosePtr->_graphicName) {
+ if (*(tmpClosePtr->_graphicName)) {
_anim->_doBlack = true;
- _cptr = tempcptr;
+ _closeDataPtr = tmpClosePtr;
} else if (curPos.y < (_utils->vgaScaleY(149) + _utils->svgaCord(2)))
drawStaticMessage(kTextNothing);
} else if (curPos.y < (_utils->vgaScaleY(149) + _utils->svgaCord(2)))
drawStaticMessage(kTextNothing);
} else if ((actionMode == 5) && _conditions->in(curInv)) {
// Use an item on something else
- if (doOperateRule(curPos.x, curPos.y, curInv, &_cptr)) {
+ if (doOperateRule(curPos, curInv, &_closeDataPtr)) {
_curFileName = _newFileName;
if (!_conditions->in(curInv))
@@ -1011,32 +1009,32 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
_graphics->screenUpdate();
} else if (msgClass == DELTAMOVE) {
ViewData *vptr = getViewData(_roomNum, _direction);
- CloseDataPtr oldcptr = vptr->_closeUps;
+ CloseDataPtr oldClosePtr = vptr->_closeUps;
- if (hcptr == NULL) {
- CloseDataPtr tempcptr = _cptr;
- setCurClose(curPos, &tempcptr);
+ if (!wrkClosePtr) {
+ CloseDataPtr tmpClosePtr = _closeDataPtr;
+ setCurrentClose(curPos, &tmpClosePtr);
- if ((tempcptr == NULL) || (tempcptr == _cptr)) {
- if (_cptr == NULL)
- hcptr = oldcptr;
+ if (!tmpClosePtr || (tmpClosePtr == _closeDataPtr)) {
+ if (!_closeDataPtr)
+ wrkClosePtr = oldClosePtr;
else
- hcptr = _cptr->_subCloseUps;
+ wrkClosePtr = _closeDataPtr->_subCloseUps;
} else
- hcptr = tempcptr->_nextCloseUp;
+ wrkClosePtr = tmpClosePtr->_nextCloseUp;
} else
- hcptr = hcptr->_nextCloseUp;
+ wrkClosePtr = wrkClosePtr->_nextCloseUp;
- if (hcptr == NULL) {
- if (_cptr == NULL)
- hcptr = oldcptr;
+ if (!wrkClosePtr) {
+ if (!_closeDataPtr)
+ wrkClosePtr = oldClosePtr;
else
- hcptr = _cptr->_subCloseUps;
+ wrkClosePtr = _closeDataPtr->_subCloseUps;
}
- if (hcptr)
- _event->setMousePos(Common::Point(_utils->scaleX((hcptr->x1 + hcptr->x2) / 2), _utils->scaleY((hcptr->y1 + hcptr->y2) / 2)));
+ if (wrkClosePtr)
+ _event->setMousePos(Common::Point(_utils->scaleX((wrkClosePtr->_x1 + wrkClosePtr->_x2) / 2), _utils->scaleY((wrkClosePtr->_y1 + wrkClosePtr->_y2) / 2)));
} else if ((msgClass == MOUSEBUTTONS) && (IEQUALIFIER_RBUTTON & qualifier)) {
eatMessages();
_alternate = !_alternate;
@@ -1054,7 +1052,7 @@ bool LabEngine::from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Comm
}
_graphics->drawPanel();
- drawRoomMessage(curInv, _cptr);
+ drawRoomMessage(curInv, _closeDataPtr);
mayShowCrumbIndicator();
_graphics->screenUpdate();
diff --git a/engines/lab/lab.h b/engines/lab/lab.h
index 3e545cc4b1..a490ad7d08 100644
--- a/engines/lab/lab.h
+++ b/engines/lab/lab.h
@@ -164,19 +164,19 @@ public:
private:
int _lastWaitTOFTicks;
bool _lastTooLong;
- CloseDataPtr _cptr;
+ CloseDataPtr _closeDataPtr;
InventoryData *_inventory;
Image *_tiles[16];
GadgetList _journalGadgetList;
GadgetList _mapGadgetList;
private:
- bool from_crumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Common::Point tmpPos,
+ bool fromCrumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Common::Point tmpPos,
uint16 &curInv, IntuiMessage *curMsg, bool &forceDraw, uint16 gadgetId, uint16 &actionMode);
public:
void waitTOF();
- void drawRoomMessage(uint16 CurInv, CloseDataPtr cptr);
+ void drawRoomMessage(uint16 curInv, CloseDataPtr closePtr);
void interfaceOff();
void interfaceOn();
void decIncInv(uint16 *CurInv, bool dec);
@@ -198,17 +198,17 @@ public:
void doWestPaper();
void eatMessages();
void drawStaticMessage(byte index);
- void drawDirection(CloseDataPtr lcPtr);
+ void drawDirection(CloseDataPtr closePtr);
int followCrumbs();
void changeVolume(int delta);
- char *getPictName(CloseDataPtr *lcptr);
+ char *getPictName(CloseDataPtr *closePtrList);
private:
// engine.cpp
void freeScreens();
void perFlipGadget(uint16 gadID);
- bool doCloseUp(CloseDataPtr cptr);
+ bool doCloseUp(CloseDataPtr closePtr);
void mainGameLoop();
bool doUse(uint16 curInv);
void mayShowCrumbIndicator();
@@ -229,7 +229,7 @@ private:
bool saveRestoreGame();
public:
- void doActions(Action *aPtr, CloseDataPtr *lcptr);
+ void doActions(Action *actionList, CloseDataPtr *closePtrList);
};
diff --git a/engines/lab/map.cpp b/engines/lab/map.cpp
index bc95304369..6bf77c48fe 100644
--- a/engines/lab/map.cpp
+++ b/engines/lab/map.cpp
@@ -117,11 +117,11 @@ void LabEngine::loadMapData() {
MaxRooms = mapFile->readUint16LE();
Maps = new MapData[MaxRooms]; // will be freed when the user exits the map
for (int i = 0; i < MaxRooms; i++) {
- Maps[i].x = mapFile->readUint16LE();
- Maps[i].y = mapFile->readUint16LE();
- Maps[i].PageNumber = mapFile->readUint16LE();
- Maps[i].SpecialID = mapFile->readUint16LE();
- Maps[i].MapFlags = mapFile->readUint32LE();
+ Maps[i]._x = mapFile->readUint16LE();
+ Maps[i]._y = mapFile->readUint16LE();
+ Maps[i]._pageNumber = mapFile->readUint16LE();
+ Maps[i]._specialID = mapFile->readUint16LE();
+ Maps[i]._mapFlags = mapFile->readUint32LE();
}
delete mapFile;
@@ -140,7 +140,7 @@ void LabEngine::freeMapData() {
static void roomCoords(uint16 curRoom, uint16 *x1, uint16 *y1, uint16 *x2, uint16 *y2) {
Image *curRoomImg = NULL;
- switch (Maps[curRoom].SpecialID) {
+ switch (Maps[curRoom]._specialID) {
case NORMAL:
case UPARROWROOM:
case DOWNARROWROOM:
@@ -160,8 +160,8 @@ static void roomCoords(uint16 curRoom, uint16 *x1, uint16 *y1, uint16 *x2, uint1
break;
}
- *x1 = mapScaleX(Maps[curRoom].x);
- *y1 = mapScaleY(Maps[curRoom].y);
+ *x1 = mapScaleX(Maps[curRoom]._x);
+ *y1 = mapScaleY(Maps[curRoom]._y);
*x2 = *x1;
*y2 = *y1;
@@ -178,17 +178,17 @@ static void drawRoomMap(uint16 curRoom, bool drawx) {
uint16 x, y, xx, xy, offset;
uint32 flags;
- x = mapScaleX(Maps[curRoom].x);
- y = mapScaleY(Maps[curRoom].y);
- flags = Maps[curRoom].MapFlags;
+ x = mapScaleX(Maps[curRoom]._x);
+ y = mapScaleY(Maps[curRoom]._y);
+ flags = Maps[curRoom]._mapFlags;
- switch (Maps[curRoom].SpecialID) {
+ switch (Maps[curRoom]._specialID) {
case NORMAL:
case UPARROWROOM:
case DOWNARROWROOM:
- if (Maps[curRoom].SpecialID == NORMAL)
+ if (Maps[curRoom]._specialID == NORMAL)
Room->drawImage(x, y);
- else if (Maps[curRoom].SpecialID == DOWNARROWROOM)
+ else if (Maps[curRoom]._specialID == DOWNARROWROOM)
DownArrowRoom->drawImage(x, y);
else
UpArrowRoom->drawImage(x, y);
@@ -311,7 +311,7 @@ static void drawRoomMap(uint16 curRoom, bool drawx) {
*/
static bool onFloor(uint16 flr) {
for (uint16 i = 1; i <= MaxRooms; i++) {
- if ((Maps[i].PageNumber == flr) && g_lab->_roomsFound->in(i) && Maps[i].x)
+ if ((Maps[i]._pageNumber == flr) && g_lab->_roomsFound->in(i) && Maps[i]._x)
return true;
}
@@ -379,7 +379,7 @@ void LabEngine::drawMap(uint16 curRoom, uint16 curMsg, uint16 flr, bool fadeout,
drawGadgetList(&_mapGadgetList);
for (uint16 i = 1; i <= MaxRooms; i++) {
- if ((Maps[i].PageNumber == flr) && _roomsFound->in(i) && Maps[i].x) {
+ if ((Maps[i]._pageNumber == flr) && _roomsFound->in(i) && Maps[i]._x) {
drawRoomMap(i, (bool)(i == curRoom));
_music->updateMusic();
}
@@ -388,7 +388,7 @@ void LabEngine::drawMap(uint16 curRoom, uint16 curMsg, uint16 flr, bool fadeout,
// Makes sure the X is drawn in corridors
// NOTE: this here on purpose just in case there's some weird
// condition, like the surreal maze where there are no rooms
- if ((Maps[curRoom].PageNumber == flr) && _roomsFound->in(curRoom) && Maps[curRoom].x)
+ if ((Maps[curRoom]._pageNumber == flr) && _roomsFound->in(curRoom) && Maps[curRoom]._x)
drawRoomMap(curRoom, true);
uint16 tempfloor = flr;
@@ -452,7 +452,7 @@ void LabEngine::processMap(uint16 curRoom) {
uint32 place = 1;
uint16 curMsg = curRoom;
- uint16 curFloor = Maps[curRoom].PageNumber;
+ uint16 curFloor = Maps[curRoom]._pageNumber;
while (1) {
// Make sure we check the music at least after every message
@@ -567,7 +567,7 @@ void LabEngine::processMap(uint16 curRoom) {
for (uint16 i = 1; i <= MaxRooms; i++) {
roomCoords(i, &x1, &y1, &x2, &y2);
- if ((Maps[i].PageNumber == curFloor)
+ if ((Maps[i]._pageNumber == curFloor)
&& _roomsFound->in(i)
&& (mouseX >= x1) && (mouseX <= x2)
&& (mouseY >= y1) && (mouseY <= y2)) {
@@ -586,14 +586,14 @@ void LabEngine::processMap(uint16 curRoom) {
_graphics->rectFillScaled(13, 148, 135, 186);
_graphics->flowTextScaled(_msgFont, 0, 5, 3, true, true, true, true, 14, 148, 134, 186, sptr);
- if (Maps[oldMsg].PageNumber == curFloor)
+ if (Maps[oldMsg]._pageNumber == curFloor)
drawRoomMap(oldMsg, (bool)(oldMsg == curRoom));
roomCoords(curMsg, &x1, &y1, &x2, &y2);
x1 = (x1 + x2) / 2;
y1 = (y1 + y2) / 2;
- if ((curMsg != curRoom) && (Maps[curMsg].PageNumber == curFloor)) {
+ if ((curMsg != curRoom) && (Maps[curMsg]._pageNumber == curFloor)) {
_graphics->setAPen(1);
_graphics->rectFill(x1 - 1, y1, x1, y1);
}
@@ -636,7 +636,7 @@ void LabEngine::doMap(uint16 curRoom) {
XMark = MapWest;
_event->attachGadgetList(&_mapGadgetList);
- drawMap(curRoom, curRoom, Maps[curRoom].PageNumber, false, true);
+ drawMap(curRoom, curRoom, Maps[curRoom]._pageNumber, false, true);
_event->mouseShow();
_graphics->screenUpdate();
processMap(curRoom);
diff --git a/engines/lab/processroom.cpp b/engines/lab/processroom.cpp
index 31a4cdd4e4..be03a0dcaf 100644
--- a/engines/lab/processroom.cpp
+++ b/engines/lab/processroom.cpp
@@ -45,20 +45,10 @@ namespace Lab {
#define NOFILE "no file"
/**
- * Generates a random number.
- */
-uint16 getRandom(uint16 max) {
- uint32 secs, micros;
-
- g_lab->getTime(&secs, &micros);
- return ((micros + secs) % max);
-}
-
-/**
* Checks whether all the conditions in a condition list are met.
*/
static bool checkConditions(int16 *condition) {
- if (condition == NULL)
+ if (!condition)
return true;
if (condition[0] == 0)
@@ -97,61 +87,60 @@ ViewData *getViewData(uint16 roomNum, uint16 direction) {
/**
* Gets an object, if any, from the user's click on the screen.
*/
-static CloseData *getObject(uint16 x, uint16 y, CloseDataPtr lcptr) {
- if (lcptr == NULL) {
- lcptr = getViewData(g_lab->_roomNum, g_lab->_direction)->_closeUps;
- } else {
- lcptr = lcptr->_subCloseUps;
- }
+static CloseData *getObject(Common::Point pos, CloseDataPtr closePtr) {
+ if (closePtr == nullptr)
+ closePtr = getViewData(g_lab->_roomNum, g_lab->_direction)->_closeUps;
+ else
+ closePtr = closePtr->_subCloseUps;
- while (lcptr != NULL) {
- if ((x >= g_lab->_utils->scaleX(lcptr->x1)) && (y >= g_lab->_utils->scaleY(lcptr->y1)) &&
- (x <= g_lab->_utils->scaleX(lcptr->x2)) && (y <= g_lab->_utils->scaleY(lcptr->y2)))
- return lcptr;
+ while (closePtr) {
+ if ((pos.x >= g_lab->_utils->scaleX(closePtr->_x1)) && (pos.y >= g_lab->_utils->scaleY(closePtr->_y1)) &&
+ (pos.x <= g_lab->_utils->scaleX(closePtr->_x2)) && (pos.y <= g_lab->_utils->scaleY(closePtr->_y2)))
+ return closePtr;
- lcptr = lcptr->_nextCloseUp;
+ closePtr = closePtr->_nextCloseUp;
}
- return NULL;
+ return nullptr;
}
/**
* Goes through the list of closeups to find a match.
* NYI: Known bug here. If there are two objects that have closeups, and
* some of the closeups have the same hit boxes, then this returns the
- * first occurence of the object with the same hit box.
+ * first occurrence of the object with the same hit box.
*/
-static CloseDataPtr findCPtrMatch(CloseDataPtr cpmain, CloseDataPtr list) {
- CloseDataPtr cptr;
+static CloseDataPtr findClosePtrMatch(CloseDataPtr closePtr, CloseDataPtr closePtrList) {
+ CloseDataPtr resClosePtr;
- while (list) {
- if ((cpmain->x1 == list->x1) && (cpmain->x2 == list->x2) &&
- (cpmain->y1 == list->y1) && (cpmain->y2 == list->y2) &&
- (cpmain->_depth == list->_depth))
- return list;
+ while (closePtrList) {
+ if ((closePtr->_x1 == closePtrList->_x1) && (closePtr->_x2 == closePtrList->_x2) &&
+ (closePtr->_y1 == closePtrList->_y1) && (closePtr->_y2 == closePtrList->_y2) &&
+ (closePtr->_depth == closePtrList->_depth))
+ return closePtrList;
- cptr = findCPtrMatch(cpmain, list->_subCloseUps);
+ resClosePtr = findClosePtrMatch(closePtr, closePtrList->_subCloseUps);
- if (cptr)
- return cptr;
+ if (resClosePtr)
+ return resClosePtr;
else
- list = list->_nextCloseUp;
+ closePtrList = closePtrList->_nextCloseUp;
}
- return NULL;
+ return nullptr;
}
/**
* Returns the current picture name.
*/
-char *LabEngine::getPictName(CloseDataPtr *lcptr) {
- ViewData *viewPtr = getViewData(g_lab->_roomNum, g_lab->_direction);
+char *LabEngine::getPictName(CloseDataPtr *closePtrList) {
+ ViewData *viewPtr = getViewData(_roomNum, _direction);
- if (*lcptr != NULL) {
- *lcptr = findCPtrMatch(*lcptr, viewPtr->_closeUps);
+ if (*closePtrList) {
+ *closePtrList = findClosePtrMatch(*closePtrList, viewPtr->_closeUps);
- if (*lcptr)
- return (*lcptr)->_graphicName;
+ if (*closePtrList)
+ return (*closePtrList)->_graphicName;
}
return viewPtr->_graphicName;
@@ -160,9 +149,9 @@ char *LabEngine::getPictName(CloseDataPtr *lcptr) {
/**
* Draws the current direction to the screen.
*/
-void LabEngine::drawDirection(CloseDataPtr lcptr) {
- if (lcptr != NULL && lcptr->_message) {
- _graphics->drawMessage(lcptr->_message);
+void LabEngine::drawDirection(CloseDataPtr closePtr) {
+ if (closePtr && closePtr->_message) {
+ _graphics->drawMessage(closePtr->_message);
return;
}
@@ -232,61 +221,53 @@ uint16 processArrow(uint16 curDirection, uint16 arrow) {
/**
* Sets the current close up data.
*/
-void setCurClose(Common::Point pos, CloseDataPtr *cptr, bool useAbsoluteCoords) {
- CloseDataPtr lcptr;
- uint16 x1, y1, x2, y2;
+void setCurrentClose(Common::Point pos, CloseDataPtr *closePtrList, bool useAbsoluteCoords) {
+ CloseDataPtr closePtr;
- if (*cptr == NULL) {
- lcptr = getViewData(g_lab->_roomNum, g_lab->_direction)->_closeUps;
- } else
- lcptr = (*cptr)->_subCloseUps;
-
- while (lcptr != NULL) {
- if (!useAbsoluteCoords) {
- x1 = lcptr->x1;
- y1 = lcptr->y1;
- x2 = lcptr->x2;
- y2 = lcptr->y2;
- } else {
- x1 = g_lab->_utils->scaleX(lcptr->x1);
- y1 = g_lab->_utils->scaleY(lcptr->y1);
- x2 = g_lab->_utils->scaleX(lcptr->x2);
- y2 = g_lab->_utils->scaleY(lcptr->y2);
- }
+ if (!*closePtrList)
+ closePtr = getViewData(g_lab->_roomNum, g_lab->_direction)->_closeUps;
+ else
+ closePtr = (*closePtrList)->_subCloseUps;
+
+ Common::Rect target;
+ while (closePtr) {
+ if (!useAbsoluteCoords)
+ target = Common::Rect(closePtr->_x1, closePtr->_y1, closePtr->_x2, closePtr->_y2);
+ else
+ target = Common::Rect(g_lab->_utils->scaleX(closePtr->_x1), g_lab->_utils->scaleY(closePtr->_y1), g_lab->_utils->scaleX(closePtr->_x2), g_lab->_utils->scaleY(closePtr->_y2));
- if (pos.x >= x1 && pos.y >= y1 && pos.x <= x2 && pos.y <= y2 && lcptr->_graphicName) {
- *cptr = lcptr;
+ if (target.contains(pos) && closePtr->_graphicName) {
+ *closePtrList = closePtr;
return;
}
- lcptr = lcptr->_nextCloseUp;
+ closePtr = closePtr->_nextCloseUp;
}
}
/**
* Takes the currently selected item.
*/
-bool takeItem(uint16 x, uint16 y, CloseDataPtr *cptr) {
- CloseDataPtr lcptr;
+bool takeItem(uint16 x, uint16 y, CloseDataPtr *closePtrList) {
+ CloseDataPtr closePtr;
- if (*cptr == NULL) {
- lcptr = getViewData(g_lab->_roomNum, g_lab->_direction)->_closeUps;
- } else if ((*cptr)->_closeUpType < 0) {
- g_lab->_conditions->inclElement(abs((*cptr)->_closeUpType));
+ if (!*closePtrList) {
+ closePtr = getViewData(g_lab->_roomNum, g_lab->_direction)->_closeUps;
+ } else if ((*closePtrList)->_closeUpType < 0) {
+ g_lab->_conditions->inclElement(abs((*closePtrList)->_closeUpType));
return true;
} else
- lcptr = (*cptr)->_subCloseUps;
+ closePtr = (*closePtrList)->_subCloseUps;
-
- while (lcptr != NULL) {
- if ((x >= g_lab->_utils->scaleX(lcptr->x1)) && (y >= g_lab->_utils->scaleY(lcptr->y1)) &&
- (x <= g_lab->_utils->scaleX(lcptr->x2)) && (y <= g_lab->_utils->scaleY(lcptr->y2)) &&
- (lcptr->_closeUpType < 0)) {
- g_lab->_conditions->inclElement(abs(lcptr->_closeUpType));
+ while (closePtr) {
+ if ((x >= g_lab->_utils->scaleX(closePtr->_x1)) && (y >= g_lab->_utils->scaleY(closePtr->_y1)) &&
+ (x <= g_lab->_utils->scaleX(closePtr->_x2)) && (y <= g_lab->_utils->scaleY(closePtr->_y2)) &&
+ (closePtr->_closeUpType < 0)) {
+ g_lab->_conditions->inclElement(abs(closePtr->_closeUpType));
return true;
}
- lcptr = lcptr->_nextCloseUp;
+ closePtr = closePtr->_nextCloseUp;
}
return false;
@@ -295,47 +276,47 @@ bool takeItem(uint16 x, uint16 y, CloseDataPtr *cptr) {
/**
* Processes the action list.
*/
-void LabEngine::doActions(Action *aptr, CloseDataPtr *lcptr) {
- while (aptr) {
+void LabEngine::doActions(Action *actionList, CloseDataPtr *closePtrList) {
+ while (actionList) {
_music->updateMusic();
- switch (aptr->_actionType) {
+ switch (actionList->_actionType) {
case PLAYSOUND:
_music->_loopSoundEffect = false;
_music->_waitTillFinished = true;
- _music->readMusic((char *)aptr->_data, true);
+ _music->readMusic((char *)actionList->_data, true);
_music->_waitTillFinished = false;
break;
case PLAYSOUNDB:
_music->_loopSoundEffect = false;
_music->_waitTillFinished = false;
- _music->readMusic((char *)aptr->_data, false);
+ _music->readMusic((char *)actionList->_data, false);
break;
case PLAYSOUNDCONT:
_music->_doNotFilestopSoundEffect = true;
_music->_loopSoundEffect = true;
- _music->readMusic((char *)aptr->_data, _music->_waitTillFinished);
+ _music->readMusic((char *)actionList->_data, _music->_waitTillFinished);
break;
case SHOWDIFF:
- _graphics->readPict((char *)aptr->_data, true);
+ _graphics->readPict((char *)actionList->_data, true);
break;
case SHOWDIFFCONT:
- _graphics->readPict((char *)aptr->_data, false);
+ _graphics->readPict((char *)actionList->_data, false);
break;
case LOADDIFF:
- if (aptr->_data)
+ if (actionList->_data)
// Puts a file into memory
- _graphics->loadPict((char *)aptr->_data);
+ _graphics->loadPict((char *)actionList->_data);
break;
case TRANSITION:
- _graphics->doTransition((TransitionType)aptr->_param1, lcptr, (char *)aptr->_data);
+ _graphics->doTransition((TransitionType)actionList->_param1, closePtrList, (char *)actionList->_data);
break;
case NOUPDATE:
@@ -348,92 +329,93 @@ void LabEngine::doActions(Action *aptr, CloseDataPtr *lcptr) {
break;
case SHOWCURPICT: {
- char *test = getPictName(lcptr);
+ char *test = getPictName(closePtrList);
- if (strcmp(test, _curFileName) != 0) {
- _curFileName = test;
- _graphics->readPict(_curFileName, true);
- }
+ if (strcmp(test, _curFileName) != 0) {
+ _curFileName = test;
+ _graphics->readPict(_curFileName, true);
+ }
}
break;
case SETELEMENT:
- _conditions->inclElement(aptr->_param1);
+ _conditions->inclElement(actionList->_param1);
break;
case UNSETELEMENT:
- _conditions->exclElement(aptr->_param1);
+ _conditions->exclElement(actionList->_param1);
break;
case SHOWMESSAGE:
_graphics->_doNotDrawMessage = false;
if (_graphics->_longWinInFront)
- _graphics->longDrawMessage((char *)aptr->_data);
+ _graphics->longDrawMessage((char *)actionList->_data);
else
- _graphics->drawMessage((char *)aptr->_data);
+ _graphics->drawMessage((char *)actionList->_data);
_graphics->_doNotDrawMessage = true;
break;
case CSHOWMESSAGE:
- if (*lcptr == NULL) {
+ if (!*closePtrList) {
_graphics->_doNotDrawMessage = false;
- _graphics->drawMessage((char *)aptr->_data);
+ _graphics->drawMessage((char *)actionList->_data);
_graphics->_doNotDrawMessage = true;
}
break;
case SHOWMESSAGES: {
- char **str = (char **)aptr->_data;
+ char **str = (char **)actionList->_data;
_graphics->_doNotDrawMessage = false;
- _graphics->drawMessage(str[getRandom(aptr->_param1)]);
+ _graphics->drawMessage(str[_utils->getRandom(actionList->_param1)]);
_graphics->_doNotDrawMessage = true;
}
break;
case SETPOSITION:
- if (aptr->_param1 & 0x8000) {
+ if (actionList->_param1 & 0x8000) {
// This is a Wyrmkeep Windows trial version, thus stop at this
// point, since we can't check for game payment status
- _graphics->readPict(getPictName(lcptr), true);
- aptr = NULL;
+ _graphics->readPict(getPictName(closePtrList), true);
+ actionList = nullptr;
GUI::MessageDialog trialMessage("This is the end of the trial version. You can play the full game using the original interpreter from Wyrmkeep");
trialMessage.runModal();
continue;
}
- _roomNum = aptr->_param1;
- _direction = aptr->_param2 - 1;
- *lcptr = NULL;
+ _roomNum = actionList->_param1;
+ _direction = actionList->_param2 - 1;
+ *closePtrList = nullptr;
_anim->_doBlack = true;
break;
case SETCLOSEUP: {
- CloseDataPtr tlcptr = getObject(g_lab->_utils->scaleX(aptr->_param1), g_lab->_utils->scaleY(aptr->_param2), *lcptr);
+ Common::Point curPos = Common::Point(g_lab->_utils->scaleX(actionList->_param1), g_lab->_utils->scaleY(actionList->_param2));
+ CloseDataPtr tmpClosePtr = getObject(curPos, *closePtrList);
- if (tlcptr)
- *lcptr = tlcptr;
+ if (tmpClosePtr)
+ *closePtrList = tmpClosePtr;
}
break;
case MAINVIEW:
- *lcptr = NULL;
+ *closePtrList = nullptr;
break;
case SUBINV:
- if (_inventory[aptr->_param1]._many)
- (_inventory[aptr->_param1]._many)--;
+ if (_inventory[actionList->_param1]._many)
+ (_inventory[actionList->_param1]._many)--;
- if (_inventory[aptr->_param1]._many == 0)
- _conditions->exclElement(aptr->_param1);
+ if (_inventory[actionList->_param1]._many == 0)
+ _conditions->exclElement(actionList->_param1);
break;
case ADDINV:
- (_inventory[aptr->_param1]._many) += aptr->_param2;
- _conditions->inclElement(aptr->_param1);
+ (_inventory[actionList->_param1]._many) += actionList->_param2;
+ _conditions->inclElement(actionList->_param1);
break;
case SHOWDIR:
@@ -442,8 +424,7 @@ void LabEngine::doActions(Action *aptr, CloseDataPtr *lcptr) {
case WAITSECS: {
uint32 startSecs, startMicros, curSecs, curMicros;
-
- addCurTime(aptr->_param1, 0, &startSecs, &startMicros);
+ addCurTime(actionList->_param1, 0, &startSecs, &startMicros);
_graphics->screenUpdate();
@@ -467,7 +448,7 @@ void LabEngine::doActions(Action *aptr, CloseDataPtr *lcptr) {
break;
case CHANGEMUSIC:
- _music->changeMusic((const char *)aptr->_data);
+ _music->changeMusic((const char *)actionList->_data);
_music->setMusicReset(false);
break;
@@ -517,13 +498,13 @@ void LabEngine::doActions(Action *aptr, CloseDataPtr *lcptr) {
break;
case SPECIALCMD:
- if (aptr->_param1 == 0)
+ if (actionList->_param1 == 0)
_anim->_doBlack = true;
- else if (aptr->_param1 == 1)
- _anim->_doBlack = (_cptr == NULL);
- else if (aptr->_param1 == 2)
- _anim->_doBlack = (_cptr != NULL);
- else if (aptr->_param1 == 5) {
+ else if (actionList->_param1 == 1)
+ _anim->_doBlack = (_closeDataPtr == nullptr);
+ else if (actionList->_param1 == 2)
+ _anim->_doBlack = (_closeDataPtr != nullptr);
+ else if (actionList->_param1 == 5) {
// inverse the palette
for (uint16 idx = (8 * 3); idx < (255 * 3); idx++)
_anim->_diffPalette[idx] = 255 - _anim->_diffPalette[idx];
@@ -532,18 +513,18 @@ void LabEngine::doActions(Action *aptr, CloseDataPtr *lcptr) {
_graphics->setPalette(_anim->_diffPalette, 256);
waitTOF();
waitTOF();
- } else if (aptr->_param1 == 4) {
+ } else if (actionList->_param1 == 4) {
// white the palette
_graphics->whiteScreen();
waitTOF();
waitTOF();
- } else if (aptr->_param1 == 6) {
+ } else if (actionList->_param1 == 6) {
// Restore the palette
waitTOF();
_graphics->setPalette(_anim->_diffPalette, 256);
waitTOF();
waitTOF();
- } else if (aptr->_param1 == 7) {
+ } else if (actionList->_param1 == 7) {
// Quick pause
waitTOF();
waitTOF();
@@ -553,7 +534,7 @@ void LabEngine::doActions(Action *aptr, CloseDataPtr *lcptr) {
break;
}
- aptr = aptr->_nextAction;
+ actionList = actionList->_nextAction;
}
if (_music->_loopSoundEffect) {
@@ -573,13 +554,13 @@ void LabEngine::doActions(Action *aptr, CloseDataPtr *lcptr) {
/**
* Does the work for doActionRule.
*/
-static bool doActionRuleSub(int16 action, int16 roomNum, CloseDataPtr lcptr, CloseDataPtr *set, bool allowDefaults) {
+static bool doActionRuleSub(int16 action, int16 roomNum, CloseDataPtr closePtr, CloseDataPtr *setCloseList, bool allowDefaults) {
action++;
- if (lcptr) {
+ if (closePtr) {
RuleList *rules = g_lab->_rooms[g_lab->_roomNum]._rules;
- if ((rules == NULL) && (roomNum == 0)) {
+ if (!rules && (roomNum == 0)) {
g_lab->_resource->readViews(roomNum);
rules = g_lab->_rooms[roomNum]._rules;
}
@@ -587,11 +568,11 @@ static bool doActionRuleSub(int16 action, int16 roomNum, CloseDataPtr lcptr, Clo
for (RuleList::iterator rule = rules->begin(); rule != rules->end(); ++rule) {
if (((*rule)->_ruleType == ACTION) &&
(((*rule)->_param1 == action) || (((*rule)->_param1 == 0) && allowDefaults))) {
- if ((((*rule)->_param2 == lcptr->_closeUpType) ||
+ if ((((*rule)->_param2 == closePtr->_closeUpType) ||
(((*rule)->_param2 == 0) && allowDefaults)) ||
- ((action == 1) && ((*rule)->_param2 == (-lcptr->_closeUpType)))) {
+ ((action == 1) && ((*rule)->_param2 == (-closePtr->_closeUpType)))) {
if (checkConditions((*rule)->_condition)) {
- g_lab->doActions((*rule)->_actionList, set);
+ g_lab->doActions((*rule)->_actionList, setCloseList);
return true;
}
}
@@ -605,21 +586,21 @@ static bool doActionRuleSub(int16 action, int16 roomNum, CloseDataPtr lcptr, Clo
/**
* Goes through the rules if an action is taken.
*/
-bool doActionRule(Common::Point pos, int16 action, int16 roomNum, CloseDataPtr *lcptr) {
+bool doActionRule(Common::Point pos, int16 action, int16 roomNum, CloseDataPtr *closePtrList) {
if (roomNum)
g_lab->_newFileName = NOFILE;
else
g_lab->_newFileName = g_lab->_curFileName;
- CloseDataPtr tlcptr = getObject(pos.x, pos.y, *lcptr);
+ CloseDataPtr curClosePtr = getObject(pos, *closePtrList);
- if (doActionRuleSub(action, roomNum, tlcptr, lcptr, false))
+ if (doActionRuleSub(action, roomNum, curClosePtr, closePtrList, false))
return true;
- else if (doActionRuleSub(action, roomNum, *lcptr, lcptr, false))
+ else if (doActionRuleSub(action, roomNum, *closePtrList, closePtrList, false))
return true;
- else if (doActionRuleSub(action, roomNum, tlcptr, lcptr, true))
+ else if (doActionRuleSub(action, roomNum, curClosePtr, closePtrList, true))
return true;
- else if (doActionRuleSub(action, roomNum, *lcptr, lcptr, true))
+ else if (doActionRuleSub(action, roomNum, *closePtrList, closePtrList, true))
return true;
return false;
@@ -628,12 +609,12 @@ bool doActionRule(Common::Point pos, int16 action, int16 roomNum, CloseDataPtr *
/**
* Does the work for doActionRule.
*/
-static bool doOperateRuleSub(int16 itemNum, int16 roomNum, CloseDataPtr lcptr, CloseDataPtr *set, bool allowDefaults) {
- if (lcptr)
- if (lcptr->_closeUpType > 0) {
+static bool doOperateRuleSub(int16 itemNum, int16 roomNum, CloseDataPtr closePtr, CloseDataPtr *setCloseList, bool allowDefaults) {
+ if (closePtr)
+ if (closePtr->_closeUpType > 0) {
RuleList *rules = g_lab->_rooms[roomNum]._rules;
- if ((rules == NULL) && (roomNum == 0)) {
+ if (!rules && (roomNum == 0)) {
g_lab->_resource->readViews(roomNum);
rules = g_lab->_rooms[roomNum]._rules;
}
@@ -641,9 +622,9 @@ static bool doOperateRuleSub(int16 itemNum, int16 roomNum, CloseDataPtr lcptr, C
for (RuleList::iterator rule = rules->begin(); rule != rules->end(); ++rule) {
if (((*rule)->_ruleType == OPERATE) &&
(((*rule)->_param1 == itemNum) || (((*rule)->_param1 == 0) && allowDefaults)) &&
- (((*rule)->_param2 == lcptr->_closeUpType) || (((*rule)->_param2 == 0) && allowDefaults))) {
+ (((*rule)->_param2 == closePtr->_closeUpType) || (((*rule)->_param2 == 0) && allowDefaults))) {
if (checkConditions((*rule)->_condition)) {
- g_lab->doActions((*rule)->_actionList, set);
+ g_lab->doActions((*rule)->_actionList, setCloseList);
return true;
}
}
@@ -656,31 +637,28 @@ static bool doOperateRuleSub(int16 itemNum, int16 roomNum, CloseDataPtr lcptr, C
/**
* Goes through the rules if the user tries to operate an item on an object.
*/
-bool doOperateRule(int16 x, int16 y, int16 ItemNum, CloseDataPtr *lcptr) {
- CloseDataPtr tlcptr;
-
+bool doOperateRule(Common::Point pos, int16 ItemNum, CloseDataPtr *closePtrList) {
g_lab->_newFileName = NOFILE;
+ CloseDataPtr closePtr = getObject(pos, *closePtrList);
- tlcptr = getObject(x, y, *lcptr);
-
- if (doOperateRuleSub(ItemNum, g_lab->_roomNum, tlcptr, lcptr, false))
+ if (doOperateRuleSub(ItemNum, g_lab->_roomNum, closePtr, closePtrList, false))
return true;
- else if (doOperateRuleSub(ItemNum, g_lab->_roomNum, *lcptr, lcptr, false))
+ else if (doOperateRuleSub(ItemNum, g_lab->_roomNum, *closePtrList, closePtrList, false))
return true;
- else if (doOperateRuleSub(ItemNum, g_lab->_roomNum, tlcptr, lcptr, true))
+ else if (doOperateRuleSub(ItemNum, g_lab->_roomNum, closePtr, closePtrList, true))
return true;
- else if (doOperateRuleSub(ItemNum, g_lab->_roomNum, *lcptr, lcptr, true))
+ else if (doOperateRuleSub(ItemNum, g_lab->_roomNum, *closePtrList, closePtrList, true))
return true;
else {
g_lab->_newFileName = g_lab->_curFileName;
- if (doOperateRuleSub(ItemNum, 0, tlcptr, lcptr, false))
+ if (doOperateRuleSub(ItemNum, 0, closePtr, closePtrList, false))
return true;
- else if (doOperateRuleSub(ItemNum, 0, *lcptr, lcptr, false))
+ else if (doOperateRuleSub(ItemNum, 0, *closePtrList, closePtrList, false))
return true;
- else if (doOperateRuleSub(ItemNum, 0, tlcptr, lcptr, true))
+ else if (doOperateRuleSub(ItemNum, 0, closePtr, closePtrList, true))
return true;
- else if (doOperateRuleSub(ItemNum, 0, *lcptr, lcptr, true))
+ else if (doOperateRuleSub(ItemNum, 0, *closePtrList, closePtrList, true))
return true;
}
@@ -690,14 +668,14 @@ bool doOperateRule(int16 x, int16 y, int16 ItemNum, CloseDataPtr *lcptr) {
/**
* Goes through the rules if the user tries to go forward.
*/
-bool doGoForward(CloseDataPtr *lcptr) {
+bool doGoForward(CloseDataPtr *closePtrList) {
RuleList *rules = g_lab->_rooms[g_lab->_roomNum]._rules;
for (RuleList::iterator ruleIter = rules->begin(); ruleIter != rules->end(); ++ruleIter) {
Rule *rule = *ruleIter;
if ((rule->_ruleType == GOFORWARD) && (rule->_param1 == (g_lab->_direction + 1))) {
if (checkConditions(rule->_condition)) {
- g_lab->doActions(rule->_actionList, lcptr);
+ g_lab->doActions(rule->_actionList, closePtrList);
return true;
}
}
@@ -709,7 +687,7 @@ bool doGoForward(CloseDataPtr *lcptr) {
/**
* Goes through the rules if the user tries to turn.
*/
-bool doTurn(uint16 from, uint16 to, CloseDataPtr *lcptr) {
+bool doTurn(uint16 from, uint16 to, CloseDataPtr *closePtrList) {
from++;
to++;
@@ -720,7 +698,7 @@ bool doTurn(uint16 from, uint16 to, CloseDataPtr *lcptr) {
(((*rule)->_ruleType == TURNFROMTO) &&
((*rule)->_param1 == from) && ((*rule)->_param2 == to))) {
if (checkConditions((*rule)->_condition)) {
- g_lab->doActions((*rule)->_actionList, lcptr);
+ g_lab->doActions((*rule)->_actionList, closePtrList);
return true;
}
}
@@ -732,12 +710,12 @@ bool doTurn(uint16 from, uint16 to, CloseDataPtr *lcptr) {
/**
* Goes through the rules if the user tries to go to the main view
*/
-bool doMainView(CloseDataPtr *lcptr) {
+bool doMainView(CloseDataPtr *closePtrList) {
RuleList *rules = g_lab->_rooms[g_lab->_roomNum]._rules;
for (RuleList::iterator rule = rules->begin(); rule != rules->end(); ++rule) {
if ((*rule)->_ruleType == GOMAINVIEW) {
if (checkConditions((*rule)->_condition)) {
- g_lab->doActions((*rule)->_actionList, lcptr);
+ g_lab->doActions((*rule)->_actionList, closePtrList);
return true;
}
}
diff --git a/engines/lab/processroom.h b/engines/lab/processroom.h
index cf2f8df019..20b6946607 100644
--- a/engines/lab/processroom.h
+++ b/engines/lab/processroom.h
@@ -92,7 +92,7 @@ namespace Lab {
#endif
typedef struct CloseData {
- uint16 x1, y1, x2, y2;
+ uint16 _x1, _y1, _x2, _y2;
int16 _closeUpType; // if > 0, an object. If < 0, an item
uint16 _depth; // Level of the closeup.
char *_graphicName;
@@ -177,8 +177,8 @@ struct InventoryData {
#define MULTIMAZEF3 11
struct MapData {
- uint16 x, y, PageNumber, SpecialID;
- uint32 MapFlags;
+ uint16 _x, _y, _pageNumber, _specialID;
+ uint32 _mapFlags;
};
#if defined(WIN32)
@@ -187,15 +187,14 @@ struct MapData {
bool parse(const char *inputFile);
ViewData *getViewData(uint16 roomNum, uint16 direction);
-void drawDirection(CloseDataPtr lcptr);
uint16 processArrow(uint16 curDirection, uint16 arrow);
-void setCurClose(Common::Point pos, CloseDataPtr *cptr, bool useAbsoluteCoords = true);
-bool takeItem(uint16 x, uint16 y, CloseDataPtr *cptr);
-bool doActionRule(Common::Point pos, int16 action, int16 roomNum, CloseDataPtr *lcptr);
-bool doOperateRule(int16 x, int16 y, int16 itemNum, CloseDataPtr *lcptr);
-bool doGoForward(CloseDataPtr *lcptr);
-bool doTurn(uint16 from, uint16 to, CloseDataPtr *lcptr);
-bool doMainView(CloseDataPtr *lcptr);
+void setCurrentClose(Common::Point pos, CloseDataPtr *closePtrList, bool useAbsoluteCoords = true);
+bool takeItem(uint16 x, uint16 y, CloseDataPtr *closePtrList);
+bool doActionRule(Common::Point pos, int16 action, int16 roomNum, CloseDataPtr *closePtrList);
+bool doOperateRule(Common::Point pos, int16 itemNum, CloseDataPtr *closePtrList);
+bool doGoForward(CloseDataPtr *closePtrList);
+bool doTurn(uint16 from, uint16 to, CloseDataPtr *closePtrList);
+bool doMainView(CloseDataPtr *closePtrList);
} // End of namespace Lab
diff --git a/engines/lab/resource.cpp b/engines/lab/resource.cpp
index 281f9a22cc..1d9a1aedfa 100644
--- a/engines/lab/resource.cpp
+++ b/engines/lab/resource.cpp
@@ -301,10 +301,10 @@ CloseData *Resource::readCloseUps(uint16 depth, Common::File *file) {
head = closeup;
if (prev)
prev->_nextCloseUp = closeup;
- closeup->x1 = file->readUint16LE();
- closeup->y1 = file->readUint16LE();
- closeup->x2 = file->readUint16LE();
- closeup->y2 = file->readUint16LE();
+ closeup->_x1 = file->readUint16LE();
+ closeup->_y1 = file->readUint16LE();
+ closeup->_x2 = file->readUint16LE();
+ closeup->_y2 = file->readUint16LE();
closeup->_closeUpType = file->readSint16LE();
closeup->_depth = depth;
closeup->_graphicName = readString(file);
diff --git a/engines/lab/savegame.cpp b/engines/lab/savegame.cpp
index 0f0c772e4d..686b537182 100644
--- a/engines/lab/savegame.cpp
+++ b/engines/lab/savegame.cpp
@@ -131,8 +131,8 @@ bool saveGame(uint16 Direction, uint16 Quarters, int slot, Common::String desc)
return false;
// Load scene pic
- CloseDataPtr cPtr = nullptr;
- g_lab->_graphics->readPict(g_lab->getPictName(&cPtr), true);
+ CloseDataPtr closePtr = nullptr;
+ g_lab->_graphics->readPict(g_lab->getPictName(&closePtr), true);
writeSaveGameHeader(file, desc);
file->writeUint16LE(g_lab->_roomNum);
diff --git a/engines/lab/special.cpp b/engines/lab/special.cpp
index 63b8109e2f..d015c4e263 100644
--- a/engines/lab/special.cpp
+++ b/engines/lab/special.cpp
@@ -442,24 +442,24 @@ void LabEngine::drawMonText(char *text, TextFont *monitorFont, uint16 x1, uint16
* Processes user input.
*/
void LabEngine::processMonitor(char *ntext, TextFont *monitorFont, bool isinteractive, uint16 x1, uint16 y1, uint16 x2, uint16 y2) {
- IntuiMessage *Msg;
- uint32 Class;
- uint16 Qualifier, Code, MouseX, MouseY;
+ IntuiMessage *msg;
+ uint32 msgClass;
+ uint16 qualifier, code, mouseX, mouseY;
const char *Test = " ", *StartFileName = TextFileName;
- CloseDataPtr startcptr = _cptr, testcptr, lastcptr[10];
+ CloseDataPtr startClosePtr = _closeDataPtr, lastClosePtr[10];
uint16 depth = 0;
- lastcptr[0] = _cptr;
+ lastClosePtr[0] = _closeDataPtr;
while (1) {
if (isinteractive) {
- if (_cptr == NULL)
- _cptr = startcptr;
+ if (_closeDataPtr == NULL)
+ _closeDataPtr = startClosePtr;
- if (_cptr == startcptr)
+ if (_closeDataPtr == startClosePtr)
Test = StartFileName;
else
- Test = _cptr->_graphicName;
+ Test = _closeDataPtr->_graphicName;
if (strcmp(Test, TextFileName)) {
monitorPage = 0;
@@ -475,42 +475,42 @@ void LabEngine::processMonitor(char *ntext, TextFont *monitorFont, bool isintera
// Make sure we check the music at least after every message
_music->updateMusic();
- Msg = getMsg();
+ msg = getMsg();
- if (Msg == NULL) {
+ if (msg == NULL) {
_music->updateMusic();
} else {
- Class = Msg->_msgClass;
- Qualifier = Msg->_qualifier;
- MouseX = Msg->_mouseX;
- MouseY = Msg->_mouseY;
- Code = Msg->_code;
-
- if (((Class == MOUSEBUTTONS) && (IEQUALIFIER_RBUTTON & Qualifier)) ||
- ((Class == RAWKEY) && (Code == 27)))
+ msgClass = msg->_msgClass;
+ qualifier = msg->_qualifier;
+ mouseX = msg->_mouseX;
+ mouseY = msg->_mouseY;
+ code = msg->_code;
+
+ if (((msgClass == MOUSEBUTTONS) && (IEQUALIFIER_RBUTTON & qualifier)) ||
+ ((msgClass == RAWKEY) && (code == 27)))
return;
- else if ((Class == MOUSEBUTTONS) && (IEQUALIFIER_LEFTBUTTON & Qualifier)) {
- if ((MouseY >= g_lab->_utils->vgaScaleY(171)) && (MouseY <= g_lab->_utils->vgaScaleY(200))) {
- if ((MouseX >= g_lab->_utils->vgaScaleX(259)) && (MouseX <= g_lab->_utils->vgaScaleX(289))) {
+ else if ((msgClass == MOUSEBUTTONS) && (IEQUALIFIER_LEFTBUTTON & qualifier)) {
+ if ((mouseY >= g_lab->_utils->vgaScaleY(171)) && (mouseY <= g_lab->_utils->vgaScaleY(200))) {
+ if ((mouseX >= g_lab->_utils->vgaScaleX(259)) && (mouseX <= g_lab->_utils->vgaScaleX(289))) {
if (!lastpage) {
monitorPage += 1;
drawMonText(ntext, monitorFont, x1, y1, x2, y2, isinteractive);
}
- } else if ((MouseX >= g_lab->_utils->vgaScaleX(0)) && (MouseX <= g_lab->_utils->vgaScaleX(31))) {
+ } else if ((mouseX >= g_lab->_utils->vgaScaleX(0)) && (mouseX <= g_lab->_utils->vgaScaleX(31))) {
return;
- } else if ((MouseX >= g_lab->_utils->vgaScaleX(290)) && (MouseX <= g_lab->_utils->vgaScaleX(320))) {
+ } else if ((mouseX >= g_lab->_utils->vgaScaleX(290)) && (mouseX <= g_lab->_utils->vgaScaleX(320))) {
if (monitorPage >= 1) {
monitorPage -= 1;
drawMonText(ntext, monitorFont, x1, y1, x2, y2, isinteractive);
}
- } else if ((MouseX >= g_lab->_utils->vgaScaleX(31)) && (MouseX <= g_lab->_utils->vgaScaleX(59))) {
+ } else if ((mouseX >= g_lab->_utils->vgaScaleX(31)) && (mouseX <= g_lab->_utils->vgaScaleX(59))) {
if (isinteractive) {
monitorPage = 0;
if (depth) {
depth--;
- _cptr = lastcptr[depth];
+ _closeDataPtr = lastClosePtr[depth];
}
} else if (monitorPage > 0) {
monitorPage = 0;
@@ -518,13 +518,13 @@ void LabEngine::processMonitor(char *ntext, TextFont *monitorFont, bool isintera
}
}
} else if (isinteractive) {
- testcptr = _cptr;
- MouseY = 64 + (MouseY / MonGadHeight) * 42;
- MouseX = 101;
- setCurClose(Common::Point(MouseX, MouseY), &_cptr, false);
+ CloseDataPtr tmpClosePtr = _closeDataPtr;
+ mouseY = 64 + (mouseY / MonGadHeight) * 42;
+ mouseX = 101;
+ setCurrentClose(Common::Point(mouseX, mouseY), &_closeDataPtr, false);
- if (testcptr != _cptr) {
- lastcptr[depth] = testcptr;
+ if (tmpClosePtr != _closeDataPtr) {
+ lastClosePtr[depth] = tmpClosePtr;
depth++;
}
}
diff --git a/engines/lab/transitions.cpp b/engines/lab/transitions.cpp
index df3c777924..d70da5c548 100644
--- a/engines/lab/transitions.cpp
+++ b/engines/lab/transitions.cpp
@@ -241,7 +241,7 @@ void DisplayMan::doScrollBounce() {
/**
* Does the transporter wipe.
*/
-void DisplayMan::doTransWipe(CloseDataPtr *cPtr, char *filename) {
+void DisplayMan::doTransWipe(CloseDataPtr *closePtrList, char *filename) {
uint16 lastY, curY, linesdone = 0, lineslast;
Image imSource, imDest;
@@ -277,11 +277,11 @@ void DisplayMan::doTransWipe(CloseDataPtr *cPtr, char *filename) {
} // for j
if (filename == NULL)
- _vm->_curFileName = _vm->getPictName(cPtr);
+ _vm->_curFileName = _vm->getPictName(closePtrList);
else if (filename[0] > ' ')
_vm->_curFileName = filename;
else
- _vm->_curFileName = _vm->getPictName(cPtr);
+ _vm->_curFileName = _vm->getPictName(closePtrList);
byte *BitMapMem = readPictToMem(_vm->_curFileName, _screenWidth, lastY + 5);
setPalette(_vm->_anim->_diffPalette, 256);
@@ -324,11 +324,11 @@ void DisplayMan::doTransWipe(CloseDataPtr *cPtr, char *filename) {
/**
* Does a certain number of pre-programmed wipes.
*/
-void DisplayMan::doTransition(TransitionType transitionType, CloseDataPtr *cPtr, char *filename) {
+void DisplayMan::doTransition(TransitionType transitionType, CloseDataPtr *closePtrList, char *filename) {
switch (transitionType) {
case kTransitionWipe:
case kTransitionTransporter:
- doTransWipe(cPtr, filename);
+ doTransWipe(closePtrList, filename);
break;
case kTransitionScrollWipe:
doScrollWipe(filename);
diff --git a/engines/lab/utils.cpp b/engines/lab/utils.cpp
index b552a40675..c7f19cf5ff 100644
--- a/engines/lab/utils.cpp
+++ b/engines/lab/utils.cpp
@@ -411,4 +411,14 @@ void Utils::unDiff(byte *newBuf, byte *oldBuf, byte *diffData, uint16 bytesPerRo
void Utils::setBytesPerRow(int num) {
_dataBytesPerRow = num;
}
+
+/**
+ * Generates a random number.
+ */
+uint16 Utils::getRandom(uint16 max) {
+ uint32 secs, micros;
+
+ g_lab->getTime(&secs, &micros);
+ return ((micros + secs) % max);
+}
} // End of namespace Lab
diff --git a/engines/lab/utils.h b/engines/lab/utils.h
index 441473672c..59a0d4be56 100644
--- a/engines/lab/utils.h
+++ b/engines/lab/utils.h
@@ -57,6 +57,7 @@ public:
void runLengthDecode(byte *dest, byte *source);
void VRunLengthDecode(byte *dest, byte *source, uint16 bytesPerRow);
void setBytesPerRow(int num);
+ uint16 getRandom(uint16 max);
};