diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/bbvs/bbvs.cpp | 26 | ||||
-rw-r--r-- | engines/bbvs/logic.cpp | 4 | ||||
-rw-r--r-- | engines/bbvs/minigames/bbant.cpp | 80 | ||||
-rw-r--r-- | engines/bbvs/scene.cpp | 6 | ||||
-rw-r--r-- | engines/bbvs/walk.cpp | 22 |
5 files changed, 69 insertions, 69 deletions
diff --git a/engines/bbvs/bbvs.cpp b/engines/bbvs/bbvs.cpp index 74518d5a3e..f5daa602ac 100644 --- a/engines/bbvs/bbvs.cpp +++ b/engines/bbvs/bbvs.cpp @@ -496,8 +496,8 @@ void BbvsEngine::buildDrawList(DrawList &drawList) { Animation *anim = sceneObject->anim; if (anim) { drawList.add(anim->frameSpriteIndices[sceneObject->frameIndex], - (sceneObject->x >> 16) - _cameraPos.x, (sceneObject->y >> 16) - _cameraPos.y, - sceneObject->y >> 16); + (sceneObject->x / 65536) - _cameraPos.x, (sceneObject->y / 65536) - _cameraPos.y, + sceneObject->y / 65536); } } @@ -774,8 +774,8 @@ void BbvsEngine::updateScene(bool clicked) { SceneObject *sceneObject = &_sceneObjects[i]; if (sceneObject->anim) { Common::Rect frameRect = sceneObject->anim->frameRects1[sceneObject->frameIndex]; - const int objY = sceneObject->y >> 16; - frameRect.translate(sceneObject->x >> 16, objY); + const int objY = sceneObject->y / 65536; + frameRect.translate(sceneObject->x / 65536, objY); if (lastPriority <= objY && frameRect.width() > 0 && frameRect.contains(_mousePos)) { lastPriority = objY; _activeItemIndex = i; @@ -898,7 +898,7 @@ void BbvsEngine::updateScene(bool clicked) { if (_beavisObject->anim) { Common::Rect frameRect = _beavisObject->anim->frameRects2[_beavisObject->frameIndex]; - frameRect.translate(_beavisObject->x >> 16, (_beavisObject->y >> 16) + 1); + frameRect.translate(_beavisObject->x / 65536, (_beavisObject->y / 65536) + 1); if (!frameRect.isEmpty() && frameRect.contains(_walkMousePos)) _walkMousePos.y = frameRect.bottom; } @@ -938,7 +938,7 @@ bool BbvsEngine::performActionCommand(ActionCommand *actionCommand) { { SceneObject *sceneObject = &_sceneObjects[actionCommand->sceneObjectIndex]; debug(5, "[%s] walks from (%d, %d) to (%d, %d)", sceneObject->sceneObjectDef->name, - sceneObject->x >> 16, sceneObject->y >> 16, actionCommand->walkDest.x, actionCommand->walkDest.y); + sceneObject->x / 65536, sceneObject->y / 65536, actionCommand->walkDest.x, actionCommand->walkDest.y); walkObject(sceneObject, actionCommand->walkDest, actionCommand->param); } return true; @@ -946,8 +946,8 @@ bool BbvsEngine::performActionCommand(ActionCommand *actionCommand) { case kActionCmdMoveObject: { SceneObject *sceneObject = &_sceneObjects[actionCommand->sceneObjectIndex]; - sceneObject->x = actionCommand->walkDest.x << 16; - sceneObject->y = actionCommand->walkDest.y << 16; + sceneObject->x = actionCommand->walkDest.x * 65536; + sceneObject->y = actionCommand->walkDest.y * 65536; sceneObject->xIncr = 0; sceneObject->yIncr = 0; sceneObject->walkCount = 0; @@ -1074,7 +1074,7 @@ bool BbvsEngine::processCurrAction() { if (sceneObject->walkDestPt.x != -1) { debug(5, "waiting for walk to finish"); actionsFinished = false; - } else if ((int16)(sceneObject->x >> 16) != soAction->walkDest.x || (int16)(sceneObject->y >> 16) != soAction->walkDest.y) { + } else if ((int16)(sceneObject->x / 65536) != soAction->walkDest.x || (int16)(sceneObject->y / 65536) != soAction->walkDest.y) { debug(5, "starting to walk"); sceneObject->walkDestPt = soAction->walkDest; actionsFinished = false; @@ -1214,8 +1214,8 @@ void BbvsEngine::updateCommon() { } if (!_currAction && _buttheadObject) { - int16 buttheadX = _buttheadObject->x >> 16; - int16 buttheadY = _buttheadObject->y >> 16; + int16 buttheadX = _buttheadObject->x / 65536; + int16 buttheadY = _buttheadObject->y / 65536; CameraInit *cameraInit = _gameModule->getCameraInit(_currCameraNum); for (int i = 0; i < 8; ++i) { if (cameraInit->rects[i].contains(buttheadX, buttheadY)) { @@ -1252,8 +1252,8 @@ void BbvsEngine::updateCommon() { // Check if Butthead is inside a scene exit if (_newSceneNum == 0 && !_currAction && _buttheadObject) { - int16 buttheadX = _buttheadObject->x >> 16; - int16 buttheadY = _buttheadObject->y >> 16; + int16 buttheadX = _buttheadObject->x / 65536; + int16 buttheadY = _buttheadObject->y / 65536; for (int i = 0; i < _gameModule->getSceneExitsCount(); ++i) { SceneExit *sceneExit = _gameModule->getSceneExit(i); if (sceneExit->rect.contains(buttheadX, buttheadY)) { diff --git a/engines/bbvs/logic.cpp b/engines/bbvs/logic.cpp index 2f9925f7a0..47f8dd938b 100644 --- a/engines/bbvs/logic.cpp +++ b/engines/bbvs/logic.cpp @@ -82,7 +82,7 @@ bool BbvsEngine::evalCondition(Conditions &conditions) { break; case kCondIsButtheadAtBgObject: result = _buttheadObject && - _gameModule->getBgObject(condition.value2)->rect.contains(_buttheadObject->x >> 16, _buttheadObject->y >> 16); + _gameModule->getBgObject(condition.value2)->rect.contains(_buttheadObject->x / 65536, _buttheadObject->y / 65536); break; case kCondIsNotSceneVisited: result = _sceneVisited[_currSceneNum] == 0; @@ -209,7 +209,7 @@ int BbvsEngine::evalDialogCondition(Conditions &conditions) { break; case kCondIsButtheadAtBgObject: success = _buttheadObject && - _gameModule->getBgObject(condition.value2)->rect.contains(_buttheadObject->x >> 16, _buttheadObject->y >> 16); + _gameModule->getBgObject(condition.value2)->rect.contains(_buttheadObject->x / 65536, _buttheadObject->y / 65536); break; case kCondIsNotSceneVisited: success = _sceneVisited[_currSceneNum] == 0; diff --git a/engines/bbvs/minigames/bbant.cpp b/engines/bbvs/minigames/bbant.cpp index 72c2d62b13..5310d53357 100644 --- a/engines/bbvs/minigames/bbant.cpp +++ b/engines/bbvs/minigames/bbant.cpp @@ -85,7 +85,7 @@ void MinigameBbAnt::buildDrawList1(DrawList &drawList) { Obj *obj = &_objects[i]; if (obj->kind) { drawList.add(obj->anim->frameIndices[obj->frameIndex], - _stompX + (obj->x >> 16), _stompY + (obj->y >> 16), + _stompX + (obj->x / 65536), _stompY + (obj->y / 65536), obj->priority); } } @@ -256,8 +256,8 @@ void MinigameBbAnt::initObjects1() { for (int i = 3; i < 12; ++i) { const ObjInit *objInit = getObjInit(i - 3); _objects[i].kind = 6; - _objects[i].x = objInit->x << 16; - _objects[i].y = objInit->y << 16; + _objects[i].x = objInit->x * 65536; + _objects[i].y = objInit->y * 65536; _objects[i].xIncr = 0; _objects[i].yIncr = 0; _objects[i].anim = objInit->anim1; @@ -429,7 +429,7 @@ bool MinigameBbAnt::updateStatus1(int mouseX, int mouseY, uint mouseButtons) { if ((mouseButtons & kLeftButtonClicked) && _objects[2].status == 0 && isMagGlassAtBeavisLeg(2)) { if (_vm->getRandom(10) == 1 && !isAnySoundPlaying(kSoundTbl4, 10)) playSound(16); - insertSmokeObj(_objects[0].x << 16, _objects[0].y << 16); + insertSmokeObj(_objects[0].x * 65536, _objects[0].y * 65536); } if (_skullBugCtr > 0) { @@ -515,8 +515,8 @@ bool MinigameBbAnt::updateStatus2(int mouseX, int mouseY, uint mouseButtons) { Obj *obj = &_objects[i]; if (obj->status == 13) { const ObjInit *objInit = getObjInit(i - 3); - obj->x = objInit->x << 16; - obj->y = objInit->y << 16; + obj->x = objInit->x * 65536; + obj->y = objInit->y * 65536; obj->anim = objInit->anim3; obj->frameIndex = 0; obj->ticks = _objects[0].anim->frameTicks[0]; @@ -588,7 +588,7 @@ void MinigameBbAnt::insertBugSmokeObj(int x, int y, int bugObjIndex) { obj->priority = 950; if (bugObj->status >= 4 && (bugObj->status <= 6 || bugObj->status == 8)) { obj->xIncr = 0; - obj->yIncr = -0x10000; + obj->yIncr = (-1 * 65536); } else { obj->xIncr = bugObj->xIncr / 8; obj->yIncr = bugObj->yIncr / 8; @@ -648,11 +648,11 @@ void MinigameBbAnt::insertBugObj(int kind, int animIndexIncr, int always0, int x obj->field30 = field30; obj->animIndexIncr = animIndexIncr; obj->kind = kind; - obj->x = x << 16; - obj->y = y << 16; + obj->x = x * 65536; + obj->y = y * 65536; obj->priority = 610; - obj->xIncr = kPosIncrTbl1[0].x << 16; - obj->yIncr = kPosIncrTbl1[0].y << 16; + obj->xIncr = kPosIncrTbl1[0].x * 65536; + obj->yIncr = kPosIncrTbl1[0].y * 65536; obj->anim = objKindAnimTable[0]; obj->frameIndex = 0; obj->ticks = obj->anim->frameTicks[0]; @@ -692,8 +692,8 @@ void MinigameBbAnt::updateBugObjAnim(int objIndex) { break; } const ObjAnimation * const *objKindAnimTable = getObjKindAnimTable(obj->kind); - obj->xIncr = kPosIncrTbl1[obj->animIndexIncr].x << 16; - obj->yIncr = kPosIncrTbl1[obj->animIndexIncr].y << 16; + obj->xIncr = kPosIncrTbl1[obj->animIndexIncr].x * 65536; + obj->yIncr = kPosIncrTbl1[obj->animIndexIncr].y * 65536; obj->anim = objKindAnimTable[obj->animIndexIncr]; obj->frameIndex = 0; obj->ticks = obj->anim->frameTicks[0]; @@ -711,8 +711,8 @@ void MinigameBbAnt::updateObjAnim2(int objIndex) { if (obj->animIndexIncr >= 8) obj->animIndexIncr %= 8; const ObjAnimation * const *objKindAnimTable = getObjKindAnimTable(obj->kind); - obj->xIncr = kPosIncrTbl1[obj->animIndex + obj->animIndexIncr].x << 16; - obj->yIncr = kPosIncrTbl1[obj->animIndex + obj->animIndexIncr].y << 16; + obj->xIncr = kPosIncrTbl1[obj->animIndex + obj->animIndexIncr].x * 65536; + obj->yIncr = kPosIncrTbl1[obj->animIndex + obj->animIndexIncr].y * 65536; obj->anim = objKindAnimTable[obj->animIndex + obj->animIndexIncr]; obj->frameIndex = 0; obj->ticks = obj->anim->frameTicks[0]; @@ -730,8 +730,8 @@ bool MinigameBbAnt::isBugOutOfScreen(int objIndex) { Obj *obj = &_objects[objIndex]; return - obj->x < -0xa0000 || obj->x > (330 << 16) || - obj->y < -0xa0000 || obj->y > (250 << 16); + obj->x < (-10 * 65536) || obj->x > (330 * 65536) || + obj->y < (-10 * 65536) || obj->y > (250 * 65536); } void MinigameBbAnt::updateObjAnim3(int objIndex) { @@ -743,8 +743,8 @@ void MinigameBbAnt::updateObjAnim3(int objIndex) { if (obj->animIndexIncr > 7) obj->animIndexIncr = 0; const ObjAnimation * const *objKindAnimTable = getObjKindAnimTable(obj->kind); - obj->xIncr = kPosIncrTbl1[obj->animIndexIncr].x << 16; - obj->yIncr = kPosIncrTbl1[obj->animIndexIncr].y << 16; + obj->xIncr = kPosIncrTbl1[obj->animIndexIncr].x * 65536; + obj->yIncr = kPosIncrTbl1[obj->animIndexIncr].y * 65536; obj->anim = objKindAnimTable[obj->animIndexIncr]; } @@ -824,8 +824,8 @@ void MinigameBbAnt::updateBugObj1(int objIndex) { _objects[obj->otherObjIndex].y = obj->y; if (isBugOutOfScreen(objIndex)) { _objects[obj->otherObjIndex].status = 13; - _objects[obj->otherObjIndex].x = (500 << 16); - _objects[obj->otherObjIndex].y = (500 << 16); + _objects[obj->otherObjIndex].x = (500 * 65536); + _objects[obj->otherObjIndex].y = (500 * 65536); removeBugObj(objIndex); --_counter1; } @@ -847,8 +847,8 @@ void MinigameBbAnt::updateBugObj1(int objIndex) { if (flag1) { const ObjAnimation * const *objKindAnimTable = getObjKindAnimTable(obj->kind); obj->status = 7; - obj->xIncr = kPosIncrTbl2[obj->animIndexIncr].x << 16; - obj->yIncr = kPosIncrTbl2[obj->animIndexIncr].y << 16; + obj->xIncr = kPosIncrTbl2[obj->animIndexIncr].x * 65536; + obj->yIncr = kPosIncrTbl2[obj->animIndexIncr].y * 65536; obj->anim = objKindAnimTable[obj->animIndexIncr + 8]; obj->frameIndex = 0; obj->ticks = obj->anim->frameTicks[0]; @@ -873,8 +873,8 @@ void MinigameBbAnt::updateBugObj1(int objIndex) { obj->anim = obj->anim2; obj->frameIndex = obj->frameIndex2; obj->ticks = obj->ticks2; - obj->xIncr = kPosIncrTbl1[obj->animIndex + obj->animIndexIncr].x << 16; - obj->yIncr = kPosIncrTbl1[obj->animIndex + obj->animIndexIncr].y << 16; + obj->xIncr = kPosIncrTbl1[obj->animIndex + obj->animIndexIncr].x * 65536; + obj->yIncr = kPosIncrTbl1[obj->animIndex + obj->animIndexIncr].y * 65536; obj->priority = 610; } break; @@ -931,7 +931,7 @@ void MinigameBbAnt::updateFootObj(int objIndex) { case 1: obj->xIncr = -0x8000; - obj->yIncr = -0x40000; + obj->yIncr = (-4 * 65536); obj->status = 2; _stompCounter1 += 5; _stompCounter2 = 100; @@ -941,9 +941,9 @@ void MinigameBbAnt::updateFootObj(int objIndex) { obj->x += obj->xIncr; obj->y += obj->yIncr; obj->yIncr += 0x2000; - if (obj->y < (20 << 16)) { + if (obj->y < (20 * 65536)) { obj->xIncr = 0x8000; - obj->yIncr = (7 << 16); + obj->yIncr = (7 * 65536); obj->status = 3; } break; @@ -953,8 +953,8 @@ void MinigameBbAnt::updateFootObj(int objIndex) { obj->y += obj->yIncr; obj->yIncr += 0x2000; if (obj->y >= 0x4B0000) { - obj->x = (40 << 16); - obj->y = (75 << 16); + obj->x = (40 * 65536); + obj->y = (75 * 65536); obj->status = 4; _stompDelay1 = 6; _stompY = 0; @@ -1023,15 +1023,15 @@ bool MinigameBbAnt::isBugAtCandy(int objIndex, int &candyObjIndex) { if (obj->kind >= 1 && obj->kind <= 4) { const BBRect &frameRect1 = obj->anim->frameRects[obj->frameIndex]; - const int obj1X1 = frameRect1.x + (obj->x >> 16); - const int obj1Y1 = frameRect1.y + (obj->y >> 16); + const int obj1X1 = frameRect1.x + (obj->x / 65536); + const int obj1Y1 = frameRect1.y + (obj->y / 65536); const int obj1X2 = obj1X1 + frameRect1.width; const int obj1Y2 = obj1Y1 + frameRect1.height; for (int i = 3; i < 12 && !result; ++i) { Obj *obj2 = &_objects[i]; const BBRect &frameRect2 = obj->anim->frameRects[obj2->frameIndex]; // sic - const int obj2X1 = (obj2->x >> 16) + frameRect2.x; - const int obj2Y1 = (obj2->y >> 16) + frameRect2.y; + const int obj2X1 = (obj2->x / 65536) + frameRect2.x; + const int obj2Y1 = (obj2->y / 65536) + frameRect2.y; const int obj2X2 = obj2X1 + frameRect2.width; const int obj2Y2 = obj2Y1 + frameRect2.height; if (obj2->status == 9 && obj1X1 <= obj2X2 && obj1X2 >= obj2X1 && obj1Y1 <= obj2Y2 && obj1Y2 >= obj2Y1) { @@ -1055,8 +1055,8 @@ bool MinigameBbAnt::isMagGlassAtBug(int objIndex) { const int obj1X2 = obj1X1 + frameRect1.width; const int obj1Y2 = obj1Y1 + frameRect1.height; const BBRect &frameRect2 = obj->anim->frameRects[obj->frameIndex]; - const int obj2X1 = (obj->x >> 16) + frameRect2.x; - const int obj2Y1 = (obj->y >> 16) + frameRect2.y; + const int obj2X1 = (obj->x / 65536) + frameRect2.x; + const int obj2Y1 = (obj->y / 65536) + frameRect2.y; const int obj2X2 = obj2X1 + frameRect2.width; const int obj2Y2 = obj2Y1 + frameRect2.height; if (obj2X2 >= obj1X1 && obj1X2 >= obj2X1 && obj1Y1 <= obj2Y2 && obj1Y2 >= obj2Y1) @@ -1076,8 +1076,8 @@ bool MinigameBbAnt::isMagGlassAtBeavisLeg(int objIndex) { const int obj1X2 = obj1X1 + frameRect1.width; const int obj1Y2 = obj1Y1 + frameRect1.height; const BBRect &frameRect2 = obj->anim->frameRects[obj->frameIndex]; - const int obj2X1 = (obj->x >> 16) + frameRect2.x; - const int obj2Y1 = (obj->y >> 16) + frameRect2.y; + const int obj2X1 = (obj->x / 65536) + frameRect2.x; + const int obj2Y1 = (obj->y / 65536) + frameRect2.y; const int obj2X2 = obj2X1 + frameRect2.width; const int obj2Y2 = obj2Y1 + frameRect2.height; if (obj2X2 >= obj1X1 && obj1X2 >= obj2X1 && obj1Y1 <= obj2Y2 && obj1Y2 >= obj2Y1) @@ -1089,8 +1089,8 @@ bool MinigameBbAnt::testObj5(int objIndex) { Obj *obj = &_objects[objIndex]; bool result = false; if (obj->kind >= 1 && obj->kind <= 5) { - const int x = obj->x >> 16; - const int y = obj->y >> 16; + const int x = obj->x / 65536; + const int y = obj->y / 65536; if (x < 0 || x >= 110 || y < 0 || y >= 110) { obj->flag = 0; } else if (!obj->flag) { diff --git a/engines/bbvs/scene.cpp b/engines/bbvs/scene.cpp index 5d22ba0cc5..74bbe0618d 100644 --- a/engines/bbvs/scene.cpp +++ b/engines/bbvs/scene.cpp @@ -118,8 +118,8 @@ void BbvsEngine::initScene(bool sounds) { sceneObject->animIndex = soInit->animIndex; sceneObject->frameIndex = sceneObject->anim->frameCount - 1; sceneObject->frameTicks = 1; - sceneObject->x = soInit->x << 16; - sceneObject->y = soInit->y << 16; + sceneObject->x = soInit->x * 65536; + sceneObject->y = soInit->y * 65536; } } @@ -142,7 +142,7 @@ void BbvsEngine::initScene(bool sounds) { int minDistance = 0xFFFFFF; for (int cameraNum = 0; cameraNum < 4; ++cameraNum) { CameraInit *cameraInit = _gameModule->getCameraInit(cameraNum); - int curDistance = ABS(cameraInit->cameraPos.x - (int)(_buttheadObject->x >> 16) + 160); + int curDistance = ABS(cameraInit->cameraPos.x - (int)(_buttheadObject->x / 65536) + 160); if (curDistance < minDistance) { minDistance = curDistance; _currCameraNum = cameraNum; diff --git a/engines/bbvs/walk.cpp b/engines/bbvs/walk.cpp index f3207be1a8..ea47c24080 100644 --- a/engines/bbvs/walk.cpp +++ b/engines/bbvs/walk.cpp @@ -48,8 +48,8 @@ void BbvsEngine::startWalkObject(SceneObject *sceneObject) { return; initWalkAreas(sceneObject); - _sourceWalkAreaPt.x = sceneObject->x >> 16; - _sourceWalkAreaPt.y = sceneObject->y >> 16; + _sourceWalkAreaPt.x = sceneObject->x / 65536; + _sourceWalkAreaPt.y = sceneObject->y / 65536; _sourceWalkArea = getWalkAreaAtPos(_sourceWalkAreaPt); if (!_sourceWalkArea) @@ -107,8 +107,8 @@ void BbvsEngine::updateWalkObject(SceneObject *sceneObject) { } void BbvsEngine::walkObject(SceneObject *sceneObject, const Common::Point &destPt, int walkSpeed) { - int deltaX = destPt.x - (sceneObject->x >> 16); - int deltaY = destPt.y - (sceneObject->y >> 16); + int deltaX = destPt.x - (sceneObject->x / 65536); + int deltaY = destPt.y - (sceneObject->y / 65536); float distance = (float)sqrt((double)(deltaX * deltaX + deltaY * deltaY)); // NOTE The original doesn't have this check but without it the whole pathfinding breaks if (distance > 0.0f) { @@ -190,19 +190,19 @@ WalkInfo *BbvsEngine::addWalkInfo(int16 x, int16 y, int delta, int direction, in } void BbvsEngine::initWalkAreas(SceneObject *sceneObject) { - int16 objX = sceneObject->x >> 16; - int16 objY = sceneObject->y >> 16; + int16 objX = sceneObject->x / 65536; + int16 objY = sceneObject->y / 65536; Common::Rect rect; bool doRect = false; Common::Rect *workWalkableRects; if (_buttheadObject == sceneObject && _beavisObject->anim) { rect = _beavisObject->anim->frameRects2[_beavisObject->frameIndex]; - rect.translate(_beavisObject->x >> 16, 1 + (_beavisObject->y >> 16)); + rect.translate(_beavisObject->x / 65536, 1 + (_beavisObject->y / 65536)); doRect = !rect.isEmpty(); } else if (_buttheadObject->anim) { rect = _buttheadObject->anim->frameRects2[_buttheadObject->frameIndex]; - rect.translate(_buttheadObject->x >> 16, 1 + (_buttheadObject->y >> 16)); + rect.translate(_buttheadObject->x / 65536, 1 + (_buttheadObject->y / 65536)); doRect = !rect.isEmpty(); } @@ -293,8 +293,8 @@ bool BbvsEngine::canButtheadWalkToDest(const Common::Point &destPt) { _walkReachedDestArea = false; initWalkAreas(_buttheadObject); - srcPt.x = _buttheadObject->x >> 16; - srcPt.y = _buttheadObject->y >> 16; + srcPt.x = _buttheadObject->x / 65536; + srcPt.y = _buttheadObject->y / 65536; _sourceWalkArea = getWalkAreaAtPos(srcPt); if (_sourceWalkArea) { _destWalkArea = getWalkAreaAtPos(destPt); @@ -441,7 +441,7 @@ void BbvsEngine::updateWalkableRects() { Animation *anim = sceneObject->anim; if (anim && _buttheadObject != sceneObject && _beavisObject != sceneObject) { Common::Rect rect = sceneObject->anim->frameRects2[sceneObject->frameIndex]; - rect.translate(sceneObject->x >> 16, sceneObject->y >> 16); + rect.translate(sceneObject->x / 65536, sceneObject->y / 65536); int count = _walkableRectsCount; _walkableRectsCount = 0; for (int j = 0; j < count; ++j) |