From 199fa254f9be4d7cb4395b871755557024926b9d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 9 Dec 2015 11:22:41 +0100 Subject: LAB: Rename CloseDataPtr pointers, some refactoring --- engines/lab/dispman.h | 4 +- engines/lab/engine.cpp | 150 ++++++++++----------- engines/lab/lab.h | 14 +- engines/lab/map.cpp | 44 +++--- engines/lab/processroom.cpp | 322 +++++++++++++++++++++----------------------- engines/lab/processroom.h | 21 ++- engines/lab/resource.cpp | 8 +- engines/lab/savegame.cpp | 4 +- engines/lab/special.cpp | 64 ++++----- engines/lab/transitions.cpp | 10 +- engines/lab/utils.cpp | 10 ++ engines/lab/utils.h | 1 + 12 files changed, 319 insertions(+), 333 deletions(-) (limited to 'engines') 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 @@ -44,21 +44,11 @@ namespace Lab { #define NOFILE "no file" -/** - * Generates a random number. - */ -uint16 getRandom(uint16 max) { - uint32 secs, micros; - - g_lab->getTime(&secs, µs); - 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, µs); + 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); }; -- cgit v1.2.3