From fdabbcc16ab90b47a14eda8c168ab206a92780f1 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 8 May 2016 10:14:46 +0200 Subject: GNAP: Reduce dereferencing of _gnap --- engines/gnap/character.cpp | 9 +- engines/gnap/scenes/group0.cpp | 1356 +++++++++++++++++++------------------ engines/gnap/scenes/group1.cpp | 1455 ++++++++++++++++++++-------------------- engines/gnap/scenes/group2.cpp | 1063 +++++++++++++++-------------- engines/gnap/scenes/group3.cpp | 603 +++++++++-------- engines/gnap/scenes/group4.cpp | 727 ++++++++++---------- engines/gnap/scenes/group5.cpp | 50 +- 7 files changed, 2683 insertions(+), 2580 deletions(-) (limited to 'engines') diff --git a/engines/gnap/character.cpp b/engines/gnap/character.cpp index 114c2f4adf..3d74d1e300 100644 --- a/engines/gnap/character.cpp +++ b/engines/gnap/character.cpp @@ -1208,7 +1208,9 @@ void PlayerPlat::updateIdleSequence() { } void PlayerPlat::updateIdleSequence2() { - if (_actionStatus < 0 && _vm->_gnap->_actionStatus < 0) { + PlayerGnap& gnap = *_vm->_gnap; + + if (_actionStatus < 0 && gnap._actionStatus < 0) { if (_vm->_timers[0]) { if (!_vm->_timers[1]) { _vm->_timers[1] = _vm->getRandom(20) + 30; @@ -1268,6 +1270,7 @@ int PlayerPlat::getWalkSequenceId(int deltaX, int deltaY) { bool PlayerPlat::walkTo(Common::Point gridPos, int animationIndex, int sequenceId, int flags) { int datNum = flags & 3; + PlayerGnap& gnap = *_vm->_gnap; _vm->_timers[1] = 60; @@ -1282,8 +1285,8 @@ bool PlayerPlat::walkTo(Common::Point gridPos, int animationIndex, int sequenceI _walkDestX = CLIP(gridX, 0, _vm->_gridMaxX - 1); _walkDestY = CLIP(gridY, 0, _vm->_gridMaxY - 1); - if (animationIndex >= 0 && _vm->_gnap->_pos == Common::Point(_walkDestX, _walkDestY)) - _vm->_gnap->walkStep(); + if (animationIndex >= 0 && gnap._pos == Common::Point(_walkDestX, _walkDestY)) + gnap.walkStep(); bool done = findPath1(_pos.x, _pos.y, 0); diff --git a/engines/gnap/scenes/group0.cpp b/engines/gnap/scenes/group0.cpp index 982cfcaff0..f5e8307def 100644 --- a/engines/gnap/scenes/group0.cpp +++ b/engines/gnap/scenes/group0.cpp @@ -72,6 +72,7 @@ void Scene01::run() { // NOTE Removed _s01_dword_474380 which was set when the mud was taken // which is also set in the global game flags. GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x1091C, true); _vm->startSoundTimerC(5); @@ -90,15 +91,15 @@ void Scene01::run() { _vm->queueInsertDeviceIcon(); if (_vm->_prevSceneNum == 2) { - _vm->_gnap->initPos(11, 6, kDirBottomLeft); + gnap.initPos(11, 6, kDirBottomLeft); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->initPos(12, 6, kDirUnk4); _vm->endSceneInit(); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(Common::Point(9, 6), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(8, 6), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(8, 6), -1, 0x107B9, 1); } else { - _vm->_gnap->initPos(1, 6, kDirBottomRight); + gnap.initPos(1, 6, kDirBottomRight); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->initPos(1, 7, kDirNone); _vm->endSceneInit(); @@ -115,35 +116,35 @@ void Scene01::run() { switch (_vm->_sceneClickedHotspot) { case kHS01Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS01Platypus: - if (_vm->_gnap->_actionStatus < 0 && _vm->isFlag(kGFPlatypus)) { + if (gnap._actionStatus < 0 && _vm->isFlag(kGFPlatypus)) { if (_vm->_grabCursorSpriteIndex == kItemDisguise) { - _vm->_gnap->useDisguiseOnPlatypus(); + gnap.useDisguiseOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: if (_vm->isFlag(kGFKeysTaken)) - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); else - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -151,20 +152,20 @@ void Scene01::run() { break; case kHS01Spaceship: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[4].x, _vm->_hotspotsWalkPos[4].y, 0, 2); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[4].x, _vm->_hotspotsWalkPos[4].y, 0, 2); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpLeft; - if (_vm->_gnap->walkTo(_vm->_hotspotsWalkPos[4], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1)) - _vm->_gnap->_actionStatus = kAS01LookSpaceship; + gnap._idleFacing = kDirUpLeft; + if (gnap.walkTo(_vm->_hotspotsWalkPos[4], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1)) + gnap._actionStatus = kAS01LookSpaceship; break; case GRAB_CURSOR: case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -172,21 +173,21 @@ void Scene01::run() { break; case kHS01Mud: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y, 2, 3); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y, 2, 3); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(3, 3); + gnap.playScratchingHead(3, 3); break; case GRAB_CURSOR: - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[2], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(2, 3)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS01TakeMud; + gnap.walkTo(_vm->_hotspotsWalkPos[2], 0, gnap.getSequenceId(gskIdle, Common::Point(2, 3)) | 0x10000, 1); + gnap._actionStatus = kAS01TakeMud; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -194,28 +195,28 @@ void Scene01::run() { break; case kHS01Pigs: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[3].x, _vm->_hotspotsWalkPos[3].y, 7, 2); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[3].x, _vm->_hotspotsWalkPos[3].y, 7, 2); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[3], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(7, 2)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS01LookPigs; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[3], 0, gnap.getSequenceId(gskIdle, Common::Point(7, 2)) | 0x10000, 1); + gnap._actionStatus = kAS01LookPigs; break; case GRAB_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[3], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(7, 2)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS01UsePigs; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[3], 0, gnap.getSequenceId(gskIdle, Common::Point(7, 2)) | 0x10000, 1); + gnap._actionStatus = kAS01UsePigs; break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[3], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(7, 2)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS01LookPigs; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[3], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(7, 2)) | 0x10000, 1); + gnap._actionStatus = kAS01LookPigs; break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -223,10 +224,10 @@ void Scene01::run() { break; case kHS01ExitTruck: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[1], 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS01LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[1], 0, 0x107AB, 1); + gnap._actionStatus = kAS01LeaveScene; if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(_vm->_hotspotsWalkPos[1] + Common::Point(0, 1), -1, 0x107CD, 1); _vm->_newSceneNum = 2; @@ -241,13 +242,13 @@ void Scene01::run() { case kHS01WalkArea6: case kHS01WalkArea7: case kHS01WalkArea8: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -262,8 +263,8 @@ void Scene01::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0 && _vm->isFlag(kGFPlatypus)) _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0) + gnap.updateIdleSequence(); if (_vm->_timers[4] == 0) { // Update bird animation _vm->_timers[4] = _vm->getRandom(100) + 300; @@ -288,23 +289,24 @@ void Scene01::run() { void Scene01::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS01LookSpaceship: _spaceshipSurface = gameSys.createSurface(47); gameSys.insertSpriteDrawItem(_spaceshipSurface, 0, 0, 255); gameSys.setAnimation(133, 256, 0); gameSys.insertSequence(133, 256, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->_actionStatus = kAS01LookSpaceshipDone; + gnap._actionStatus = kAS01LookSpaceshipDone; break; case kAS01LookSpaceshipDone: gameSys.removeSequence(133, 256, true); gameSys.removeSpriteDrawItem(_spaceshipSurface, 255); _vm->deleteSurface(&_spaceshipSurface); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS01LeaveScene: @@ -312,25 +314,25 @@ void Scene01::updateAnimations() { break; case kAS01TakeMud: - _vm->_gnap->playPullOutDevice(2, 3); - _vm->_gnap->playUseDevice(0, 0); + gnap.playPullOutDevice(2, 3); + gnap.playUseDevice(0, 0); gameSys.insertSequence(128, 40, 129, 40, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(128, 40, 3); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS01LookPigs: _vm->playSound(0x8A, false); _vm->playSound(0x8B, false); _vm->playSound(0x8C, false); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS01UsePigs: - _vm->_gnap->playPullOutDevice(7, 2); - _vm->_gnap->playUseDevice(0, 0); + gnap.playPullOutDevice(7, 2); + gnap.playUseDevice(0, 0); gameSys.insertSequence(135, 39, 0, 0, kSeqNone, 25, _vm->getRandom(140) - 40, 0); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -396,6 +398,7 @@ void Scene02::updateHotspots() { void Scene02::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x1091C, true); _vm->startSoundTimerC(6); @@ -412,20 +415,20 @@ void Scene02::run() { switch (_vm->_prevSceneNum) { case 3: - _vm->_gnap->initPos(11, 6, kDirBottomLeft); + gnap.initPos(11, 6, kDirBottomLeft); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->initPos(12, 6, kDirUnk4); _vm->endSceneInit(); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(Common::Point(9, 6), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(8, 6), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(8, 6), -1, 0x107BA, 1); break; case 4: - _vm->_gnap->initPos(_vm->_hotspotsWalkPos[6].x, _vm->_hotspotsWalkPos[6].y, kDirBottomLeft); + gnap.initPos(_vm->_hotspotsWalkPos[6].x, _vm->_hotspotsWalkPos[6].y, kDirBottomLeft); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->initPos(_vm->_hotspotsWalkPos[6].x + 1, _vm->_hotspotsWalkPos[6].y, kDirUnk4); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(7, 6), 0, 0x107B9, 1); + gnap.walkTo(Common::Point(7, 6), 0, 0x107B9, 1); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(Common::Point(8, 6), 1, 0x107C2, 1); updateHotspots(); @@ -433,24 +436,24 @@ void Scene02::run() { break; case 47: _vm->clearFlag(kGFUnk25); - _vm->_gnap->initPos(5, 6, kDirBottomLeft); + gnap.initPos(5, 6, kDirBottomLeft); _vm->_plat->initPos(6, 7, kDirUnk4); _vm->endSceneInit(); break; case 49: - _vm->_gnap->initPos(5, 6, kDirBottomRight); + gnap.initPos(5, 6, kDirBottomRight); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->initPos(6, 7, kDirNone); _vm->endSceneInit(); break; default: - _vm->_gnap->initPos(-1, 6, kDirBottomRight); + gnap.initPos(-1, 6, kDirBottomRight); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->initPos(-1, 7, kDirNone); _vm->endSceneInit(); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(Common::Point(2, 7), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(2, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 8), -1, 0x107B9, 1); break; } @@ -465,35 +468,35 @@ void Scene02::run() { switch (_vm->_sceneClickedHotspot) { case kHS02Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS02Platypus: - if (_vm->_gnap->_actionStatus < 0 && _vm->isFlag(kGFPlatypus)) { + if (gnap._actionStatus < 0 && _vm->isFlag(kGFPlatypus)) { if (_vm->_grabCursorSpriteIndex == kItemDisguise) { - _vm->_gnap->useDisguiseOnPlatypus(); + gnap.useDisguiseOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: if (_vm->isFlag(kGFKeysTaken)) - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); else - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -501,33 +504,33 @@ void Scene02::run() { break; case kHS02Chicken: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemTwig) { - _vm->_gnap->_idleFacing = kDirUpRight; + gnap._idleFacing = kDirUpRight; Common::Point destPos = Common::Point(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y + 1); - _vm->_gnap->walkTo(destPos, 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS02UseTwigWithChicken; + gnap.walkTo(destPos, 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS02UseTwigWithChicken; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[1].x, _vm->_hotspotsWalkPos[1].y + 1, 9, 8); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[1].x, _vm->_hotspotsWalkPos[1].y + 1, 9, 8); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan2(9, 8); + gnap.playMoan2(9, 8); break; case GRAB_CURSOR: - _vm->_gnap->_idleFacing = kDirBottomRight; - if (_vm->_gnap->walkTo(_vm->_hotspotsWalkPos[1], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1)) - _vm->_gnap->_actionStatus = kAS02GrabChicken; + gnap._idleFacing = kDirBottomRight; + if (gnap.walkTo(_vm->_hotspotsWalkPos[1], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1)) + gnap._actionStatus = kAS02GrabChicken; else - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirBottomRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[1], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS02TalkChicken; + gnap._idleFacing = kDirBottomRight; + gnap.walkTo(_vm->_hotspotsWalkPos[1], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS02TalkChicken; break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -536,45 +539,45 @@ void Scene02::run() { case kHS02Truck1: case kHS02Truck2: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemKeys) { - if (_vm->_gnap->walkTo(_vm->_hotspotsWalkPos[3], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(2, 2)) | 0x10000, 1)) { + if (gnap.walkTo(_vm->_hotspotsWalkPos[3], 0, gnap.getSequenceId(gskIdle, Common::Point(2, 2)) | 0x10000, 1)) { _vm->setGrabCursorSprite(-1); _vm->invRemove(kItemKeys); if (_vm->isFlag(kGFTruckFilledWithGas)) - _vm->_gnap->_actionStatus = kAS02UseTruckGas; + gnap._actionStatus = kAS02UseTruckGas; else - _vm->_gnap->_actionStatus = kAS02UseTruckNoGas; + gnap._actionStatus = kAS02UseTruckNoGas; } } else if (_vm->_grabCursorSpriteIndex == kItemGas) { _vm->_hotspots[kHS02WalkArea4]._flags |= SF_WALKABLE; - if (_vm->_gnap->walkTo(_vm->_hotspotsWalkPos[2], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(2, 2)) | 0x10000, 1)) - _vm->_gnap->_actionStatus = kAS02UseGasWithTruck; + if (gnap.walkTo(_vm->_hotspotsWalkPos[2], 0, gnap.getSequenceId(gskIdle, Common::Point(2, 2)) | 0x10000, 1)) + gnap._actionStatus = kAS02UseGasWithTruck; _vm->_hotspots[kHS02WalkArea4]._flags &= ~SF_WALKABLE; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y, 2, 2); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y, 2, 2); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(2, 2); + gnap.playScratchingHead(2, 2); break; case GRAB_CURSOR: if (_vm->isFlag(kGFTruckKeysUsed)) { - if (_vm->_gnap->walkTo(_vm->_hotspotsWalkPos[3], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(2, 2)) | 0x10000, 1)) { + if (gnap.walkTo(_vm->_hotspotsWalkPos[3], 0, gnap.getSequenceId(gskIdle, Common::Point(2, 2)) | 0x10000, 1)) { if (_vm->isFlag(kGFTruckFilledWithGas)) - _vm->_gnap->_actionStatus = kAS02UseTruckGas; + gnap._actionStatus = kAS02UseTruckGas; else - _vm->_gnap->_actionStatus = kAS02UseTruckNoGas; + gnap._actionStatus = kAS02UseTruckNoGas; } } else { - _vm->_gnap->_idleFacing = kDirUnk4; - if (_vm->_gnap->walkTo(_vm->_hotspotsWalkPos[3], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(2, 2)) | 0x10000, 1)) - _vm->_gnap->_actionStatus = kAS02UseTruckNoKeys; + gnap._idleFacing = kDirUnk4; + if (gnap.walkTo(_vm->_hotspotsWalkPos[3], 0, gnap.getSequenceId(gskIdle, Common::Point(2, 2)) | 0x10000, 1)) + gnap._actionStatus = kAS02UseTruckNoKeys; } break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -582,22 +585,22 @@ void Scene02::run() { break; case kHS02TruckGrill: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[4].x, _vm->_hotspotsWalkPos[4].y, 2, 4); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[4].x, _vm->_hotspotsWalkPos[4].y, 2, 4); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan2(2, 4); + gnap.playMoan2(2, 4); break; case GRAB_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[4], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS02GrabTruckGrill; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[4], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS02GrabTruckGrill; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -605,10 +608,10 @@ void Scene02::run() { break; case kHS02ExitHouse: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[6], 0, 0x107AD, 1); - _vm->_gnap->_actionStatus = kAS02LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[6], 0, 0x107AD, 1); + gnap._actionStatus = kAS02LeaveScene; if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(_vm->_hotspotsWalkPos[6] + Common::Point(1, 0), -1, 0x107C1, 1); updateHotspots(); @@ -617,10 +620,10 @@ void Scene02::run() { break; case kHS02ExitBarn: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[7], 0, 0x107AD, 1); - _vm->_gnap->_actionStatus = kAS02LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[7], 0, 0x107AD, 1); + gnap._actionStatus = kAS02LeaveScene; if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(_vm->_hotspotsWalkPos[7] + Common::Point(1, 0), -1, 0x107C1, 1); updateHotspots(); @@ -629,10 +632,10 @@ void Scene02::run() { break; case kHS02ExitCreek: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[8], 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS02LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[8], 0, 0x107AB, 1); + gnap._actionStatus = kAS02LeaveScene; if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(_vm->_hotspotsWalkPos[8], -1, 0x107CD, 1); _vm->_newSceneNum = 3; @@ -640,10 +643,10 @@ void Scene02::run() { break; case kHS02ExitPigpen: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[9], 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = kAS02LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[9], 0, 0x107AF, 1); + gnap._actionStatus = kAS02LeaveScene; if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(_vm->_hotspotsWalkPos[9], -1, 0x107CF, 1); _vm->_newSceneNum = 1; @@ -654,13 +657,13 @@ void Scene02::run() { case kHS02WalkArea2: case kHS02WalkArea3: case kHS02WalkArea4: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -674,8 +677,8 @@ void Scene02::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0 && _vm->isFlag(kGFPlatypus)) _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0) + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { // Update bird animation _vm->_timers[4] = _vm->getRandom(100) + 300; @@ -684,7 +687,7 @@ void Scene02::run() { else gameSys.insertSequence(0x154, 256, 0, 0, kSeqNone, 0, 0, 0); } - if (!_vm->_timers[5] && _nextChickenSequenceId == -1 && _vm->_gnap->_actionStatus != 7 && _vm->_gnap->_actionStatus != 8) { + if (!_vm->_timers[5] && _nextChickenSequenceId == -1 && gnap._actionStatus != 7 && gnap._actionStatus != 8) { if (_vm->getRandom(6) != 0) { _nextChickenSequenceId = 0x14B; _vm->_timers[5] = _vm->getRandom(20) + 30; @@ -710,25 +713,26 @@ void Scene02::run() { void Scene02::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS02UseTruckNoKeys: - gameSys.insertSequence(0x14E, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - gameSys.setAnimation(0x14E, _vm->_gnap->_id, 0); - _vm->_gnap->_sequenceId = 0x14E; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = kAS02UseTruckNoKeysDone; + gameSys.insertSequence(0x14E, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gameSys.setAnimation(0x14E, gnap._id, 0); + gnap._sequenceId = 0x14E; + gnap._sequenceDatNum = 0; + gnap._actionStatus = kAS02UseTruckNoKeysDone; break; case kAS02UseGasWithTruck: - gameSys.insertSequence(0x151, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - gameSys.setAnimation(0x151, _vm->_gnap->_id, 0); - _vm->_gnap->_sequenceId = 0x151; - _vm->_gnap->_sequenceDatNum = 0; + gameSys.insertSequence(0x151, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gameSys.setAnimation(0x151, gnap._id, 0); + gnap._sequenceId = 0x151; + gnap._sequenceDatNum = 0; _vm->invRemove(kItemGas); _vm->setGrabCursorSprite(-1); _vm->setFlag(kGFTruckFilledWithGas); - _vm->_gnap->_actionStatus = kAS02UseGasWithTruckDone; + gnap._actionStatus = kAS02UseGasWithTruckDone; break; case kAS02UseTruckGas: _vm->_timers[5] = 9999; @@ -736,11 +740,11 @@ void Scene02::updateAnimations() { _vm->hideCursor(); _vm->setGrabCursorSprite(-1); if (!_vm->isFlag(kGFTruckKeysUsed)) { - gameSys.insertSequence(0x14F, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x14F, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.waitForUpdate(); _vm->setFlag(kGFTruckKeysUsed); - _vm->_gnap->_sequenceId = 0x14F; - _vm->_gnap->_sequenceDatNum = 0; + gnap._sequenceId = 0x14F; + gnap._sequenceDatNum = 0; _vm->invRemove(kItemKeys); _vm->setGrabCursorSprite(-1); } @@ -752,11 +756,11 @@ void Scene02::updateAnimations() { _vm->setGrabCursorSprite(-1); _vm->_timers[4] = 250; if (!_vm->isFlag(kGFTruckKeysUsed)) { - gameSys.insertSequence(0x14F, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x14F, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.waitForUpdate(); _vm->setFlag(kGFTruckKeysUsed); - _vm->_gnap->_sequenceId = 0x14F; - _vm->_gnap->_sequenceDatNum = 0; + gnap._sequenceId = 0x14F; + gnap._sequenceDatNum = 0; _vm->invRemove(kItemKeys); _vm->setGrabCursorSprite(-1); } @@ -777,11 +781,11 @@ void Scene02::updateAnimations() { break; } _truckGrillCtr = (_truckGrillCtr + 1) % 3; - gameSys.insertSequence(_gnapTruckSequenceId, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - gameSys.setAnimation(_gnapTruckSequenceId, _vm->_gnap->_id, 0); - _vm->_gnap->_sequenceId = _gnapTruckSequenceId; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = -1; + gameSys.insertSequence(_gnapTruckSequenceId, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gameSys.setAnimation(_gnapTruckSequenceId, gnap._id, 0); + gnap._sequenceId = _gnapTruckSequenceId; + gnap._sequenceDatNum = 0; + gnap._actionStatus = -1; break; case kAS02LeaveScene: _vm->_sceneDone = true; @@ -794,26 +798,26 @@ void Scene02::updateAnimations() { _vm->_timers[2] = 100; break; case kAS02GrabChickenDone: - gameSys.insertSequence(0x107B5, _vm->_gnap->_id, 0x150, 179, kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); - _vm->_gnap->_sequenceId = 0x7B5; - _vm->_gnap->_sequenceDatNum = 1; + gameSys.insertSequence(0x107B5, gnap._id, 0x150, 179, kSeqSyncWait, 0, 75 * gnap._pos.x - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); + gnap._sequenceId = 0x7B5; + gnap._sequenceDatNum = 1; _currChickenSequenceId = 0x14B; gameSys.setAnimation(0x14B, 179, 2); gameSys.insertSequence(_currChickenSequenceId, 179, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; _vm->_timers[5] = 30; break; case kAS02UseTwigWithChicken: - _vm->_gnap->playShowItem(5, 0, 0); + gnap.playShowItem(5, 0, 0); gameSys.insertSequence(0x155, 179, _currChickenSequenceId, 179, kSeqSyncExists, 0, 0, 0); _currChickenSequenceId = 0x155; _nextChickenSequenceId = -1; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS02UseTruckNoKeysDone: case kAS02UseGasWithTruckDone: default: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -821,18 +825,18 @@ void Scene02::updateAnimations() { if (gameSys.getAnimationStatus(2) == 2) { if (_nextChickenSequenceId == 0x150) { gameSys.setAnimation(_nextChickenSequenceId, 179, 0); - gameSys.insertSequence(_nextChickenSequenceId, 179, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(_nextChickenSequenceId, 179, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.removeSequence(_currChickenSequenceId, 179, true); _nextChickenSequenceId = -1; _currChickenSequenceId = -1; - _vm->_gnap->_actionStatus = kAS02GrabChickenDone; + gnap._actionStatus = kAS02GrabChickenDone; _vm->_timers[5] = 500; } else if (_nextChickenSequenceId == 0x14C) { gameSys.setAnimation(_nextChickenSequenceId, 179, 2); gameSys.insertSequence(_nextChickenSequenceId, 179, _currChickenSequenceId, 179, kSeqSyncWait, 0, 0, 0); _currChickenSequenceId = _nextChickenSequenceId; _nextChickenSequenceId = -1; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } else if (_nextChickenSequenceId != -1) { gameSys.setAnimation(_nextChickenSequenceId, 179, 2); gameSys.insertSequence(_nextChickenSequenceId, 179, _currChickenSequenceId, 179, kSeqSyncWait, 0, 0, 0); @@ -885,6 +889,7 @@ void Scene03::updateHotspots() { void Scene03::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x10925, true); _vm->startSoundTimerC(7); @@ -893,7 +898,7 @@ void Scene03::run() { gameSys.insertSequence(0x1CB, 251, 0, 0, kSeqLoop, 0, 0, 0); _platypusHypnotized = false; - _vm->_gnap->initPos(3, 4, kDirBottomRight); + gnap.initPos(3, 4, kDirBottomRight); gameSys.insertSequence(0x1C6, 253, 0, 0, kSeqNone, 0, 0, 0); @@ -926,7 +931,7 @@ void Scene03::run() { if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(Common::Point(4, 7), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(3, 6), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(3, 6), -1, 0x107B9, 1); while (!_vm->_sceneDone) { _vm->updateMouseCursor(); @@ -937,28 +942,28 @@ void Scene03::run() { switch (_vm->_sceneClickedHotspot) { case kHS03Platypus: - if (_vm->_gnap->_actionStatus < 0 && _vm->isFlag(kGFPlatypus)) { + if (gnap._actionStatus < 0 && _vm->isFlag(kGFPlatypus)) { if (_vm->_grabCursorSpriteIndex == kItemDisguise) { - _vm->_gnap->useDisguiseOnPlatypus(); + gnap.useDisguiseOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: if (_vm->isFlag(kGFKeysTaken)) - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); else - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -966,26 +971,26 @@ void Scene03::run() { break; case kHS03Grass: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFGrassTaken)) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 9, 6); + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 9, 6); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(9, 6); + gnap.playScratchingHead(9, 6); break; case GRAB_CURSOR: - _vm->_gnap->playPullOutDevice(9, 6); - _vm->_gnap->playUseDevice(0, 0); + gnap.playPullOutDevice(9, 6); + gnap.playUseDevice(0, 0); gameSys.insertSequence(0x1B3, 253, 0x1B2, 253, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(0x1B3, 253, 5); _vm->_hotspots[kHS03Grass]._flags |= SF_WALKABLE | SF_DISABLED; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -993,11 +998,11 @@ void Scene03::run() { break; case kHS03ExitTruck: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_hotspots[kHS03PlatypusWalkArea]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[2], 0, 0x107AD, 1); - _vm->_gnap->_actionStatus = kAS03LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[2], 0, 0x107AD, 1); + gnap._actionStatus = kAS03LeaveScene; if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(_vm->_hotspotsWalkPos[2], -1, 0x107C2, 1); _vm->_hotspots[kHS03PlatypusWalkArea]._flags &= ~SF_WALKABLE; @@ -1009,25 +1014,25 @@ void Scene03::run() { break; case kHS03Creek: - if (_vm->_gnap->_actionStatus == -1) { + if (gnap._actionStatus == -1) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan2(2, 8); + gnap.playMoan2(2, 8); break; case GRAB_CURSOR: if (!_vm->isFlag(kGFPlatypus)) _vm->_hotspots[kHS03PlatypusWalkArea]._flags |= SF_WALKABLE; - if (_vm->_gnap->walkTo(_vm->_hotspotsWalkPos[3], 0, _vm->_gnap->getSequenceId(gskIdle, _vm->_hotspotsWalkPos[3] + Common::Point(1, 1)) | 0x10000, 1)) - _vm->_gnap->_actionStatus = kAS03GrabCreek; + if (gnap.walkTo(_vm->_hotspotsWalkPos[3], 0, gnap.getSequenceId(gskIdle, _vm->_hotspotsWalkPos[3] + Common::Point(1, 1)) | 0x10000, 1)) + gnap._actionStatus = kAS03GrabCreek; if (!_vm->isFlag(kGFPlatypus)) _vm->_hotspots[kHS03PlatypusWalkArea]._flags &= ~SF_WALKABLE; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1035,42 +1040,42 @@ void Scene03::run() { break; case kHS03TrappedPlatypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFPlatypus)) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 8, 4); + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 8, 4); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(8, 4); + gnap.playScratchingHead(8, 4); break; case GRAB_CURSOR: if (_platypusHypnotized) { - _vm->_gnap->walkTo(Common::Point(7, 6), 0, 0x107B5, 1); - _vm->_gnap->_actionStatus = kAS03FreePlatypus; + gnap.walkTo(Common::Point(7, 6), 0, 0x107B5, 1); + gnap._actionStatus = kAS03FreePlatypus; } else { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[4], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[4], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); if (_platypusScared) - _vm->_gnap->_actionStatus = kAS03GrabScaredPlatypus; + gnap._actionStatus = kAS03GrabScaredPlatypus; else - _vm->_gnap->_actionStatus = kAS03GrabPlatypus; + gnap._actionStatus = kAS03GrabPlatypus; } break; case TALK_CURSOR: if (_platypusHypnotized) { - _vm->_gnap->playBrainPulsating(8, 4); + gnap.playBrainPulsating(8, 4); } else { - _vm->_gnap->_idleFacing = kDirBottomRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[4], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._idleFacing = kDirBottomRight; + gnap.walkTo(_vm->_hotspotsWalkPos[4], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); if (_platypusScared) - _vm->_gnap->_actionStatus = kAS03HypnotizeScaredPlat; + gnap._actionStatus = kAS03HypnotizeScaredPlat; else - _vm->_gnap->_actionStatus = kAS03HypnotizePlat; + gnap._actionStatus = kAS03HypnotizePlat; } break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1078,7 +1083,7 @@ void Scene03::run() { break; case kHS03Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } @@ -1087,27 +1092,27 @@ void Scene03::run() { case kHS03WalkAreas1: case kHS03WalkAreas2: case kHS03WalkAreas3: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; case kHS03PlatypusWalkArea: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFPlatypus) || _platypusHypnotized) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); } else { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[4], 0, 0x107B5, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[4], 0, 0x107B5, 1); if (_platypusScared) - _vm->_gnap->_actionStatus = kAS03GrabScaredPlatypus; + gnap._actionStatus = kAS03GrabScaredPlatypus; else - _vm->_gnap->_actionStatus = kAS03GrabPlatypus; + gnap._actionStatus = kAS03GrabPlatypus; } } break; default: - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -1122,16 +1127,16 @@ void Scene03::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0 && _vm->isFlag(kGFPlatypus)) _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0) + gnap.updateIdleSequence(); if (!_vm->_timers[1] && !_platypusScared) { _vm->_timers[1] = _vm->getRandom(40) + 20; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0 && !_vm->isFlag(kGFPlatypus) && !_platypusHypnotized) + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0 && !_vm->isFlag(kGFPlatypus) && !_platypusHypnotized) _nextPlatSequenceId = 450; } if (!_vm->_timers[6]) { _vm->_timers[6] = _vm->getRandom(20) + 30; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextFrogSequenceId == -1) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextFrogSequenceId == -1) { if (_vm->getRandom(5) == 1) _nextFrogSequenceId = 0x1C6; else @@ -1141,12 +1146,12 @@ void Scene03::run() { if (!_vm->_timers[4]) { // Update bird animation _vm->_timers[4] = _vm->getRandom(100) + 300; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0) + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0) gameSys.insertSequence(_vm->getRandom(2) != 0 ? 0x1C8 : 0x1C3, 253, 0, 0, kSeqNone, 0, 0, 0); } if (!_vm->_timers[5]) { _vm->_timers[5] = _vm->getRandom(100) + 200; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0) { gameSys.setAnimation(0x1C5, 253, 4); gameSys.insertSequence(0x1C5, 253, 0, 0, kSeqNone, 0, 0, 0); } @@ -1171,10 +1176,11 @@ void Scene03::run() { void Scene03::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS03LeaveScene: _vm->_sceneDone = true; break; @@ -1182,7 +1188,7 @@ void Scene03::updateAnimations() { _nextPlatSequenceId = 0x1BC; break; case kAS03FreePlatypusDone: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; _vm->_plat->_pos = Common::Point(6, 6); _vm->_plat->_idleFacing = kDirUnk4; _vm->_plat->_id = 120; @@ -1196,7 +1202,7 @@ void Scene03::updateAnimations() { updateHotspots(); break; case kAS03HypnotizePlat: - _vm->_gnap->playBrainPulsating(0, 0); + gnap.playBrainPulsating(0, 0); _vm->addFullScreenSprite(0x106, 255); gameSys.setAnimation(0x1C9, 256, 1); gameSys.insertSequence(0x1C9, 256, 0, 0, kSeqNone, 0, 0, 0); @@ -1207,12 +1213,12 @@ void Scene03::updateAnimations() { gameSys.insertSequence(0x1BA, 99, _vm->_plat->_sequenceId | (_vm->_plat->_sequenceDatNum << 16), 99, kSeqSyncExists, 0, 0, 0); _vm->_plat->_sequenceDatNum = 0; _vm->_plat->_sequenceId = 0x1BA; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; _platypusHypnotized = true; updateHotspots(); break; case kAS03HypnotizeScaredPlat: - _vm->_gnap->playBrainPulsating(0, 0); + gnap.playBrainPulsating(0, 0); gameSys.insertSequence(0x1BF, 99, _vm->_plat->_sequenceId | (_vm->_plat->_sequenceDatNum << 16), 99, kSeqSyncExists, 0, 0, 0); gameSys.setAnimation(0x1BF, 99, 1); while (gameSys.getAnimationStatus(1) != 2) @@ -1227,7 +1233,7 @@ void Scene03::updateAnimations() { gameSys.insertSequence(0x1BA, 99, 447, 99, kSeqSyncWait, 0, 0, 0); _vm->_plat->_sequenceDatNum = 0; _vm->_plat->_sequenceId = 0x1BA; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; _platypusHypnotized = true; updateHotspots(); break; @@ -1240,14 +1246,14 @@ void Scene03::updateAnimations() { _platypusHypnotized = false; break; case kAS03GrabCreek: - gameSys.insertSequence(0x1B4, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - gameSys.setAnimation(0x1B4, _vm->_gnap->_id, 0); - _vm->_gnap->_sequenceId = 0x1B4; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = kAS03GrabCreekDone; + gameSys.insertSequence(0x1B4, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gameSys.setAnimation(0x1B4, gnap._id, 0); + gnap._sequenceId = 0x1B4; + gnap._sequenceDatNum = 0; + gnap._actionStatus = kAS03GrabCreekDone; break; default: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -1256,26 +1262,26 @@ void Scene03::updateAnimations() { if (_nextPlatSequenceId == 0x1BD || _nextPlatSequenceId == 0x1C0) { gameSys.setAnimation(0, 0, 1); _platypusScared = true; - gameSys.insertSequence(0x1B5, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x1B5, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(_nextPlatSequenceId, 99, _vm->_plat->_sequenceId | (_vm->_plat->_sequenceDatNum << 16), 99, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x1B5; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_idleFacing = kDirNone; + gnap._sequenceId = 0x1B5; + gnap._sequenceDatNum = 0; + gnap._idleFacing = kDirNone; _vm->_plat->_sequenceId = _nextPlatSequenceId; _vm->_plat->_sequenceDatNum = 0; gameSys.setAnimation(_nextPlatSequenceId, 99, 1); _nextPlatSequenceId = -1; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } else if (_nextPlatSequenceId == 0x1BC) { - _vm->_gnap->_pos = Common::Point(3, 6); - gameSys.insertSequence(0x1B6, 120, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gnap._pos = Common::Point(3, 6); + gameSys.insertSequence(0x1B6, 120, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(0x1BC, 99, _vm->_plat->_sequenceId | (_vm->_plat->_sequenceDatNum << 16), 99, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(0x1BC, 99, 0); - _vm->_gnap->_id = 20 * _vm->_gnap->_pos.y; - _vm->_gnap->_sequenceId = 0x1B6; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_idleFacing = kDirNone; - _vm->_gnap->_actionStatus = kAS03FreePlatypusDone; + gnap._id = 20 * gnap._pos.y; + gnap._sequenceId = 0x1B6; + gnap._sequenceDatNum = 0; + gnap._idleFacing = kDirNone; + gnap._actionStatus = kAS03FreePlatypusDone; _nextPlatSequenceId = -1; } else if (_nextPlatSequenceId == 0x1C2 && !_platypusScared) { gameSys.setAnimation(0, 0, 1); @@ -1351,6 +1357,7 @@ void Scene04::updateHotspots() { void Scene04::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x1091C, true); _vm->startSoundTimerC(4); @@ -1379,11 +1386,11 @@ void Scene04::run() { _vm->_timers[3] = 300; // TODO setCursor((LPCSTR)IDC_WAIT); _vm->setGrabCursorSprite(kItemKeys); - _vm->_gnap->_pos = Common::Point(4, 7); - _vm->_gnap->_id = 140; + gnap._pos = Common::Point(4, 7); + gnap._id = 140; _vm->_plat->_pos = Common::Point(6, 7); _vm->_plat->_id = 141; - gameSys.insertSequence(0x107B5, 140, 0, 0, kSeqNone, 0, 300 - _vm->_gnap->_gridX, 336 - _vm->_gnap->_gridY); + gameSys.insertSequence(0x107B5, 140, 0, 0, kSeqNone, 0, 300 - gnap._gridX, 336 - gnap._gridY); gameSys.insertSequence(0x20C, 141, 0, 0, kSeqNone, 0, 0, 0); gameSys.insertSequence(0x208, 121, 0, 0, kSeqNone, 0, 0, 0); gameSys.insertSequence(0x209, 121, 0x208, 121, kSeqSyncWait, 0, 0, 0); @@ -1395,31 +1402,31 @@ void Scene04::run() { _vm->_plat->_sequenceId = 0x20C; _vm->_plat->_sequenceDatNum = 0; _vm->_plat->_idleFacing = kDirBottomRight; - _vm->_gnap->_sequenceId = 0x7B5; - _vm->_gnap->_sequenceDatNum = 1; + gnap._sequenceId = 0x7B5; + gnap._sequenceDatNum = 1; gameSys.waitForUpdate(); } else { gameSys.insertSequence(0x209, 121, 0, 0, kSeqNone, 0, 0, 0); if (_vm->_prevSceneNum == 2) { - _vm->_gnap->initPos(5, 11, kDirUpRight); + gnap.initPos(5, 11, kDirUpRight); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->initPos(6, 11, kDirUpLeft); _vm->endSceneInit(); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(Common::Point(5, 8), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(6, 9), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(6, 9), -1, 0x107BA, 1); } else if (_vm->_prevSceneNum == 38) { - _vm->_gnap->initPos(5, 7, kDirBottomRight); + gnap.initPos(5, 7, kDirBottomRight); _vm->_plat->initPos(4, 7, kDirNone); _vm->endSceneInit(); } else { - _vm->_gnap->initPos(12, 9, kDirBottomRight); + gnap.initPos(12, 9, kDirBottomRight); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->initPos(12, 8, kDirNone); _vm->endSceneInit(); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(Common::Point(9, 8), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(9, 9), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(9, 9), -1, 0x107BA, 1); } } @@ -1434,38 +1441,38 @@ void Scene04::run() { switch (_vm->_sceneClickedHotspot) { case kHS04Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS04Platypus: - if (_vm->_gnap->_actionStatus < 0 && _vm->isFlag(kGFPlatypus)) { + if (gnap._actionStatus < 0 && _vm->isFlag(kGFPlatypus)) { if (_vm->_grabCursorSpriteIndex == kItemDisguise) { - _vm->_gnap->useDisguiseOnPlatypus(); + gnap.useDisguiseOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: if (_vm->isFlag(kGFKeysTaken)) - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); else - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: if (_vm->_cursorValue == 4) - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); else - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1473,23 +1480,23 @@ void Scene04::run() { break; case kHS04Twig: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 9, 6); + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 9, 6); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(_vm->_hotspotsWalkPos[1].x, _vm->_hotspotsWalkPos[1].y); + gnap.playScratchingHead(_vm->_hotspotsWalkPos[1].x, _vm->_hotspotsWalkPos[1].y); break; case GRAB_CURSOR: - _vm->_gnap->playPullOutDevice(_vm->_hotspotsWalkPos[1].x, _vm->_hotspotsWalkPos[1].y); - _vm->_gnap->playUseDevice(_vm->_hotspotsWalkPos[1].x, _vm->_hotspotsWalkPos[1].y); + gnap.playPullOutDevice(_vm->_hotspotsWalkPos[1].x, _vm->_hotspotsWalkPos[1].y); + gnap.playUseDevice(_vm->_hotspotsWalkPos[1].x, _vm->_hotspotsWalkPos[1].y); gameSys.insertSequence(0x1FD, 100, 510, 100, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(0x1FD, 100, 2); break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1497,24 +1504,24 @@ void Scene04::run() { break; case kHS04Axe: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[3].x, _vm->_hotspotsWalkPos[3].y, 9, 5); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[3].x, _vm->_hotspotsWalkPos[3].y, 9, 5); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan2(_vm->_hotspotsWalkPos[3].x, _vm->_hotspotsWalkPos[3].y); + gnap.playMoan2(_vm->_hotspotsWalkPos[3].x, _vm->_hotspotsWalkPos[3].y); break; case GRAB_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[3], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS04GrabAxe; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[3], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS04GrabAxe; _vm->setFlag(kGFPlatypusTalkingToAssistant); updateHotspots(); break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1522,31 +1529,31 @@ void Scene04::run() { break; case kHS04Dog: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y, 9, 7); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y, 9, 7); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - if (_vm->_gnap->walkTo(_vm->_gnap->_pos, 0, -1, 1)) { - _vm->_gnap->playMoan2(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y); + if (gnap.walkTo(gnap._pos, 0, -1, 1)) { + gnap.playMoan2(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y); _nextDogSequenceId = 0x20F; } break; case GRAB_CURSOR: - _vm->_gnap->_idleFacing = kDirBottomRight; - if (_vm->_gnap->walkTo(_vm->_hotspotsWalkPos[2], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1)) - _vm->_gnap->_actionStatus = kAS04GrabDog; + gnap._idleFacing = kDirBottomRight; + if (gnap.walkTo(_vm->_hotspotsWalkPos[2], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1)) + gnap._actionStatus = kAS04GrabDog; break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirBottomRight; - if (_vm->_gnap->walkTo(_vm->_gnap->_pos, 0, -1, 1)) { - _vm->_gnap->playBrainPulsating(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y); + gnap._idleFacing = kDirBottomRight; + if (gnap.walkTo(gnap._pos, 0, -1, 1)) { + gnap.playBrainPulsating(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y); _nextDogSequenceId = 0x20E; } break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1554,30 +1561,30 @@ void Scene04::run() { break; case kHS04Door: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 4, 3); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 4, 3); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playScratchingHead(4, 3); + gnap.playScratchingHead(4, 3); break; case GRAB_CURSOR: if (_vm->_cursorValue == 1) { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[4], 0, 0x107BC, 1); - _vm->_gnap->_actionStatus = kAS04OpenDoor; + gnap.walkTo(_vm->_hotspotsWalkPos[4], 0, 0x107BC, 1); + gnap._actionStatus = kAS04OpenDoor; _vm->_timers[5] = 300; - _vm->_gnap->_idleFacing = kDirUpLeft; + gnap._idleFacing = kDirUpLeft; } else { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[4], 0, 0x107BC, 1); - _vm->_gnap->_actionStatus = kAS04LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[4], 0, 0x107BC, 1); + gnap._actionStatus = kAS04LeaveScene; _vm->_newSceneNum = 38; } break; case TALK_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1585,10 +1592,10 @@ void Scene04::run() { break; case kHS04ExitTruck: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[5], 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = kAS04LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[5], 0, 0x107AE, 1); + gnap._actionStatus = kAS04LeaveScene; if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(_vm->_hotspotsWalkPos[5], -1, 0x107C7, 1); if (_vm->_cursorValue == 1) @@ -1599,29 +1606,29 @@ void Scene04::run() { break; case kHS04Window: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 2, 3); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 2, 3); } else if (_vm->isFlag(kGFKeysTaken)) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - if (_vm->_gnap->walkTo(_vm->_hotspotsWalkPos[7], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(10, 2)) | 0x10000, 1)) { + if (gnap.walkTo(_vm->_hotspotsWalkPos[7], 0, gnap.getSequenceId(gskIdle, Common::Point(10, 2)) | 0x10000, 1)) { if (_triedWindow) { - _vm->_gnap->_actionStatus = kAS04GetKeyAnother; + gnap._actionStatus = kAS04GetKeyAnother; } else { - _vm->_gnap->_actionStatus = kAS04GetKeyFirst; + gnap._actionStatus = kAS04GetKeyFirst; _triedWindow = true; } } break; case GRAB_CURSOR: - _vm->_gnap->playScratchingHead(_vm->_hotspotsWalkPos[7].x, _vm->_hotspotsWalkPos[7].y); + gnap.playScratchingHead(_vm->_hotspotsWalkPos[7].x, _vm->_hotspotsWalkPos[7].y); break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1629,10 +1636,10 @@ void Scene04::run() { break; case kHS04ExitBarn: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[8], 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS04LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[8], 0, 0x107AB, 1); + gnap._actionStatus = kAS04LeaveScene; if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(_vm->_hotspotsWalkPos[8] + Common::Point(0, 1), -1, 0x107C1, 1); if (_vm->_cursorValue == 1) @@ -1644,13 +1651,13 @@ void Scene04::run() { case kHS04WalkArea1: case kHS04WalkArea2: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -1665,11 +1672,11 @@ void Scene04::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0 && _vm->isFlag(kGFPlatypus)) _vm->_plat->updateIdleSequence2(); - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->updateIdleSequence2(); + if (gnap._actionStatus < 0) + gnap.updateIdleSequence2(); if (!_vm->_timers[5]) { _vm->_timers[5] = _vm->getRandom(150) + 300; - if (_vm->_gnap->_actionStatus < 0) + if (gnap._actionStatus < 0) gameSys.insertSequence(0x20D, 79, 0, 0, kSeqNone, 0, 0, 0); } if (!_vm->_timers[7]) { @@ -1702,95 +1709,96 @@ void Scene04::run() { void Scene04::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS04LeaveScene: _vm->_sceneDone = true; break; case kAS04OpenDoor: - gameSys.insertSequence(0x205, _vm->_gnap->_id, 0, 0, kSeqNone, 0, 0, 0); + gameSys.insertSequence(0x205, gnap._id, 0, 0, kSeqNone, 0, 0, 0); gameSys.insertSequence(0x207, 121, 521, 121, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_pos = Common::Point(6, 7); - gameSys.insertSequence(0x107B5, _vm->_gnap->_id, - makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, - kSeqSyncWait, _vm->getSequenceTotalDuration(0x205) - 1, 450 - _vm->_gnap->_gridX, 336 - _vm->_gnap->_gridY); - gameSys.setAnimation(0x107B5, _vm->_gnap->_id, 0); - _vm->_gnap->_sequenceId = 0x7B5; - _vm->_gnap->_sequenceDatNum = 1; - _vm->_gnap->_actionStatus = kAS04OpenDoorDone; + gnap._pos = Common::Point(6, 7); + gameSys.insertSequence(0x107B5, gnap._id, + makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, + kSeqSyncWait, _vm->getSequenceTotalDuration(0x205) - 1, 450 - gnap._gridX, 336 - gnap._gridY); + gameSys.setAnimation(0x107B5, gnap._id, 0); + gnap._sequenceId = 0x7B5; + gnap._sequenceDatNum = 1; + gnap._actionStatus = kAS04OpenDoorDone; break; case kAS04OpenDoorDone: gameSys.insertSequence(0x209, 121, 0x207, 121, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS04GetKeyFirst: - gameSys.insertSequence(0x204, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - gameSys.setAnimation(0x204, _vm->_gnap->_id, 0); - _vm->_gnap->_sequenceId = 0x204; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = kAS04GetKeyFirst2; + gameSys.insertSequence(0x204, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gameSys.setAnimation(0x204, gnap._id, 0); + gnap._sequenceId = 0x204; + gnap._sequenceDatNum = 0; + gnap._actionStatus = kAS04GetKeyFirst2; break; case kAS04GetKeyFirst2: - gameSys.insertSequence(0x206, 255, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x206, 255, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(0x1FF, 256, 0, 0, kSeqNone, 0, 0, 0); gameSys.insertSequence(0x20B, 256, 0, 0, kSeqNone, 0, 0, 0); gameSys.setAnimation(0x20B, 256, 0); - _vm->_gnap->_sequenceId = 0x206; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = kAS04GetKeyFirstDone; + gnap._sequenceId = 0x206; + gnap._sequenceDatNum = 0; + gnap._actionStatus = kAS04GetKeyFirstDone; break; case kAS04GetKeyFirstDone: gameSys.requestRemoveSequence(0x1FF, 256); gameSys.requestRemoveSequence(0x20B, 256); - gameSys.insertSequence(0x107B5, _vm->_gnap->_id, - makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), 255, - kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); - _vm->_gnap->_idleFacing = kDirBottomRight; - _vm->_gnap->_sequenceId = 0x7B5; - _vm->_gnap->_sequenceDatNum = 1; - _vm->_gnap->_actionStatus = -1; + gameSys.insertSequence(0x107B5, gnap._id, + makeRid(gnap._sequenceDatNum, gnap._sequenceId), 255, + kSeqSyncWait, 0, 75 * gnap._pos.x - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); + gnap._idleFacing = kDirBottomRight; + gnap._sequenceId = 0x7B5; + gnap._sequenceDatNum = 1; + gnap._actionStatus = -1; break; case kAS04GetKeyAnother: - gameSys.insertSequence(0x202, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - gameSys.setAnimation(0x202, _vm->_gnap->_id, 0); - _vm->_gnap->_sequenceId = 0x202; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = kAS04GetKeyAnother2; + gameSys.insertSequence(0x202, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gameSys.setAnimation(0x202, gnap._id, 0); + gnap._sequenceId = 0x202; + gnap._sequenceDatNum = 0; + gnap._actionStatus = kAS04GetKeyAnother2; break; case kAS04GetKeyAnother2: - gameSys.insertSequence(0x203, 255, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x203, 255, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(0x1FF, 256, 0, 0, kSeqNone, 0, 0, 0); gameSys.insertSequence(0x20A, 256, 0, 0, kSeqNone, 0, 0, 0); gameSys.setAnimation(0x20A, 256, 0); - _vm->_gnap->_sequenceId = 0x203; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = kAS04GetKeyAnotherDone; + gnap._sequenceId = 0x203; + gnap._sequenceDatNum = 0; + gnap._actionStatus = kAS04GetKeyAnotherDone; break; case kAS04GetKeyAnotherDone: gameSys.removeSequence(0x1FF, 256, true); gameSys.removeSequence(0x20A, 256, true); - gameSys.insertSequence(0x107B5, _vm->_gnap->_id, - makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), 255, - kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); - _vm->_gnap->_sequenceId = 0x7B5; - _vm->_gnap->_sequenceDatNum = 1; - _vm->_gnap->_idleFacing = kDirBottomRight; - _vm->_gnap->_actionStatus = -1; + gameSys.insertSequence(0x107B5, gnap._id, + makeRid(gnap._sequenceDatNum, gnap._sequenceId), 255, + kSeqSyncWait, 0, 75 * gnap._pos.x - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); + gnap._sequenceId = 0x7B5; + gnap._sequenceDatNum = 1; + gnap._idleFacing = kDirBottomRight; + gnap._actionStatus = -1; break; case kAS04GrabDog: _nextDogSequenceId = 0x201; break; case kAS04GrabAxe: - gameSys.insertSequence(0x211, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x211, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.requestRemoveSequence(0x212, 100); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x211; - _vm->_gnap->_actionStatus = -1; + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x211; + gnap._actionStatus = -1; break; default: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -1808,13 +1816,13 @@ void Scene04::updateAnimations() { gameSys.insertSequence(_nextDogSequenceId, 139 - _dogIdCtr, _currDogSequenceId, 139 - (_dogIdCtr + 1) % 2, kSeqSyncWait, 0, 0, 0); - gameSys.insertSequence(0x200, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x200, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(_nextDogSequenceId, 139 - _dogIdCtr, 3); _dogIdCtr = (_dogIdCtr + 1) % 2; _currDogSequenceId = 0x201; - _vm->_gnap->_sequenceId = 0x200; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = -1; + gnap._sequenceId = 0x200; + gnap._sequenceDatNum = 0; + gnap._actionStatus = -1; _vm->_timers[6] = _vm->getRandom(20) + 60; _nextDogSequenceId = -1; } else if (_nextDogSequenceId != -1) { @@ -1865,6 +1873,7 @@ void Scene05::updateHotspots() { void Scene05::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x1091C, true); _vm->startSoundTimerC(7); @@ -1884,15 +1893,15 @@ void Scene05::run() { _vm->queueInsertDeviceIcon(); if (_vm->_prevSceneNum != 6 && _vm->_prevSceneNum != 36) { - _vm->_gnap->initPos(-1, 8, kDirBottomRight); + gnap.initPos(-1, 8, kDirBottomRight); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->initPos(-1, 9, kDirNone); _vm->endSceneInit(); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(Common::Point(2, 8), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(2, 9), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 9), -1, 0x107B9, 1); } else { - _vm->_gnap->initPos(6, 8, kDirBottomRight); + gnap.initPos(6, 8, kDirBottomRight); if (_vm->isFlag(kGFPlatypus)) _vm->_plat->initPos(7, 9, kDirNone); _vm->endSceneInit(); @@ -1909,35 +1918,35 @@ void Scene05::run() { switch (_vm->_sceneClickedHotspot) { case kHS05Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS05Platypus: - if (_vm->_gnap->_actionStatus < 0 && _vm->isFlag(kGFPlatypus)) { + if (gnap._actionStatus < 0 && _vm->isFlag(kGFPlatypus)) { if (_vm->_grabCursorSpriteIndex == kItemDisguise) { - _vm->_gnap->useDisguiseOnPlatypus(); + gnap.useDisguiseOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: if (_vm->isFlag(kGFKeysTaken)) - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); else - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1945,30 +1954,30 @@ void Scene05::run() { break; case kHS05Haystack: - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[1].x - 2, _vm->_hotspotsWalkPos[1].y, 4, 5); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[1].x - 2, _vm->_hotspotsWalkPos[1].y, 4, 5); } else if (_vm->isFlag(kGFNeedleTaken)) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(_vm->_hotspotsWalkPos[1].x, _vm->_hotspotsWalkPos[1].y - 1); + gnap.playScratchingHead(_vm->_hotspotsWalkPos[1].x, _vm->_hotspotsWalkPos[1].y - 1); break; case GRAB_CURSOR: case TALK_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case PLAT_CURSOR: if (_vm->isFlag(kGFPlatypus)) { - _vm->_gnap->useDeviceOnPlatypus(); + gnap.useDeviceOnPlatypus(); if (_vm->_plat->walkTo(_vm->_hotspotsWalkPos[1], 1, 0x107C2, 1)) { _vm->_plat->_actionStatus = kAS05PlatSearchHaystack; _vm->_plat->_idleFacing = kDirUnk4; } - if (_vm->_gnap->_pos.x == 4 && (_vm->_gnap->_pos.y == 8 || _vm->_gnap->_pos.y == 7)) - _vm->_gnap->walkStep(); - _vm->_gnap->playIdle(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + if (gnap._pos.x == 4 && (gnap._pos.y == 8 || gnap._pos.y == 7)) + gnap.walkStep(); + gnap.playIdle(_vm->_plat->_pos.x, _vm->_plat->_pos.y); } break; } @@ -1977,31 +1986,31 @@ void Scene05::run() { break; case kHS05Chicken: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemTwig) { - _vm->_gnap->_idleFacing = kDirUpRight; + gnap._idleFacing = kDirUpRight; Common::Point checkPt = _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot] + Common::Point(0, 1); - _vm->_gnap->walkTo(checkPt, 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS05UseTwigWithChicken; + gnap.walkTo(checkPt, 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS05UseTwigWithChicken; } else if (_vm->_grabCursorSpriteIndex >= 0) - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y + 1, 9, 7); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y + 1, 9, 7); else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan2(9, 7); + gnap.playMoan2(9, 7); break; case GRAB_CURSOR: - _vm->_gnap->_idleFacing = kDirBottomRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[5], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS05GrabChicken; + gnap._idleFacing = kDirBottomRight; + gnap.walkTo(_vm->_hotspotsWalkPos[5], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS05GrabChicken; break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirBottomRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[5], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS05TalkChicken; + gnap._idleFacing = kDirBottomRight; + gnap.walkTo(_vm->_hotspotsWalkPos[5], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS05TalkChicken; break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2009,22 +2018,22 @@ void Scene05::run() { break; case kHS05Ladder: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 2, 5); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 2, 5); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan2(2, 4); + gnap.playMoan2(2, 4); break; case GRAB_CURSOR: - _vm->_gnap->_idleFacing = kDirBottomLeft; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[3], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS05GrabLadder; + gnap._idleFacing = kDirBottomLeft; + gnap.walkTo(_vm->_hotspotsWalkPos[3], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS05GrabLadder; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2035,32 +2044,32 @@ void Scene05::run() { if (_vm->isFlag(kGFBarnPadlockOpen)) { _vm->_isLeavingScene = true; Common::Point destPt = _vm->_hotspotsWalkPos[2] + Common::Point(- 1, 1); - _vm->_gnap->walkTo(destPt, 0, -1, 1); - _vm->_gnap->_actionStatus = kAS05EnterBarn; + gnap.walkTo(destPt, 0, -1, 1); + gnap._actionStatus = kAS05EnterBarn; if (_vm->_cursorValue == 1) _vm->_newSceneNum = 6; else _vm->_newSceneNum = 36; - } else if (_vm->_gnap->_actionStatus < 0) { + } else if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemNeedle) { - if (_vm->_gnap->walkTo(_vm->_hotspotsWalkPos[2], 0, - _vm->_gnap->getSequenceId(gskIdle, _vm->_hotspotsWalkPos[2]) | 0x10000, 1)) - _vm->_gnap->_actionStatus = kAS05PickPadlock; + if (gnap.walkTo(_vm->_hotspotsWalkPos[2], 0, + gnap.getSequenceId(gskIdle, _vm->_hotspotsWalkPos[2]) | 0x10000, 1)) + gnap._actionStatus = kAS05PickPadlock; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y, 7, 4); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y, 7, 4); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(7, 4); + gnap.playScratchingHead(7, 4); break; case GRAB_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS05TryPickPadlock; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS05TryPickPadlock; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2068,10 +2077,10 @@ void Scene05::run() { break; case kHS05ExitHouse: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[4], 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = kAS05LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[4], 0, 0x107AF, 1); + gnap._actionStatus = kAS05LeaveScene; if (_vm->isFlag(kGFPlatypus)) _vm->_plat->walkTo(_vm->_hotspotsWalkPos[4] + Common::Point(0, 1), -1, 0x107C7, 1); if (_vm->_cursorValue == 1) @@ -2083,8 +2092,8 @@ void Scene05::run() { case kHS05WalkArea1: case kHS05WalkArea2: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; case kHS05WalkArea3: @@ -2092,8 +2101,8 @@ void Scene05::run() { break; default: - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -2108,10 +2117,10 @@ void Scene05::run() { if (!_vm->_isLeavingScene) { if (_vm->isFlag(kGFPlatypus)) _vm->_plat->updateIdleSequence(); - _vm->_gnap->updateIdleSequence(); + gnap.updateIdleSequence(); if (!_vm->_timers[5]) { _vm->_timers[5] = _vm->getRandom(20) + 30; - if (_vm->_gnap->_actionStatus != kAS05TalkChicken && _nextChickenSequenceId == -1) { + if (gnap._actionStatus != kAS05TalkChicken && _nextChickenSequenceId == -1) { if (_vm->getRandom(4) != 0) _nextChickenSequenceId = 0x142; else @@ -2120,7 +2129,7 @@ void Scene05::run() { } if (!_vm->_timers[6]) { _vm->_timers[6] = _vm->getRandom(150) + 300; - if (_vm->_gnap->_actionStatus < 0) + if (gnap._actionStatus < 0) gameSys.insertSequence(0x149, 39, 0, 0, kSeqNone, 0, 0, 0); } _vm->playSoundC(); @@ -2141,36 +2150,37 @@ void Scene05::run() { void Scene05::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS05LeaveScene: _vm->_sceneDone = true; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS05TryPickPadlock: - gameSys.insertSequence(0x148, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x148; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = -1; + gameSys.insertSequence(0x148, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x148; + gnap._sequenceDatNum = 0; + gnap._actionStatus = -1; break; case kAS05PickPadlock: - gameSys.setAnimation(0x147, _vm->_gnap->_id, 0); - gameSys.insertSequence(0x147, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x147; - _vm->_gnap->_sequenceDatNum = 0; + gameSys.setAnimation(0x147, gnap._id, 0); + gameSys.insertSequence(0x147, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x147; + gnap._sequenceDatNum = 0; _vm->setFlag(kGFBarnPadlockOpen); _vm->setFlag(kGFSceneFlag1); _vm->setGrabCursorSprite(-1); _vm->_newSceneNum = 6; _vm->_timers[2] = 100; _vm->invRemove(kItemNeedle); - _vm->_gnap->_actionStatus = kAS05LeaveScene; + gnap._actionStatus = kAS05LeaveScene; break; case kAS05TalkChicken: _nextChickenSequenceId = 0x144; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS05GrabChicken: _nextChickenSequenceId = 0x14B; @@ -2178,25 +2188,25 @@ void Scene05::updateAnimations() { case kAS05GrabLadder: while (gameSys.isSequenceActive(0x149, 39)) _vm->gameUpdateTick(); - gameSys.insertSequence(0x14E, _vm->_gnap->_id + 1, 0, 0, kSeqNone, 0, 0, 0); - gameSys.insertSequence(0x14D, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x14D; - _vm->_gnap->_sequenceDatNum = 0; + gameSys.insertSequence(0x14E, gnap._id + 1, 0, 0, kSeqNone, 0, 0, 0); + gameSys.insertSequence(0x14D, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x14D; + gnap._sequenceDatNum = 0; _vm->_timers[2] = 200; _vm->_timers[6] = 300; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS05EnterBarn: gameSys.insertSequence(0x107B1, 1, - makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, - kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); + makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, + kSeqSyncWait, 0, 75 * gnap._pos.x - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); gameSys.setAnimation(0x107B1, 1, 0); - _vm->_gnap->_actionStatus = kAS05LeaveScene; + gnap._actionStatus = kAS05LeaveScene; break; case kAS05UseTwigWithChicken: - _vm->_gnap->playShowItem(5, 0, 0); + gnap.playShowItem(5, 0, 0); _nextChickenSequenceId = 0x14F; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -2232,12 +2242,12 @@ void Scene05::updateAnimations() { if (_nextChickenSequenceId == 0x14B) { gameSys.setAnimation(_nextChickenSequenceId, 100, 3); gameSys.insertSequence(_nextChickenSequenceId, 100, _currChickenSequenceId, 100, kSeqSyncWait, 0, 0, 0); - gameSys.insertSequence(0x14C, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x14C; + gameSys.insertSequence(0x14C, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x14C; _currChickenSequenceId = _nextChickenSequenceId; _nextChickenSequenceId = -1; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } else if (_nextChickenSequenceId != -1) { gameSys.setAnimation(_nextChickenSequenceId, 100, 3); gameSys.insertSequence(_nextChickenSequenceId, 100, _currChickenSequenceId, 100, kSeqSyncWait, 0, 0, 0); @@ -2292,6 +2302,7 @@ void Scene06::updateHotspots() { void Scene06::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; bool triedDeviceOnGas = false; _vm->startSoundTimerC(7); @@ -2315,12 +2326,12 @@ void Scene06::run() { _vm->queueInsertDeviceIcon(); - _vm->_gnap->initPos(5, 12, kDirBottomRight); + gnap.initPos(5, 12, kDirBottomRight); _vm->_plat->initPos(6, 12, kDirNone); _vm->endSceneInit(); _vm->_plat->walkTo(Common::Point(6, 8), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(5, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(5, 8), -1, 0x107B9, 1); while (!_vm->_sceneDone) { _vm->updateMouseCursor(); @@ -2333,35 +2344,35 @@ void Scene06::run() { switch (_vm->_sceneClickedHotspot) { case kHS06Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS06Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemDisguise) { - _vm->_gnap->useDisguiseOnPlatypus(); + gnap.useDisguiseOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: if (_vm->isFlag(kGFKeysTaken)) - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); else - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2369,33 +2380,33 @@ void Scene06::run() { break; case kHS06Gas: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 5, 0); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 5, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(5, 0); + gnap.playScratchingHead(5, 0); break; case GRAB_CURSOR: if (_vm->isFlag(kGFUnk04)) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else if (triedDeviceOnGas) { _vm->_hotspots[kHS06WalkArea5]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[1], 0, 0x107BC, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[1], 0, 0x107BC, 1); _vm->_hotspots[kHS06WalkArea5]._flags &= ~SF_WALKABLE; - _vm->_gnap->_actionStatus = kAS06TryToGetGas; + gnap._actionStatus = kAS06TryToGetGas; } else { triedDeviceOnGas = true; - _vm->_gnap->playPullOutDeviceNonWorking(_vm->_hotspotsWalkPos[1].x, _vm->_hotspotsWalkPos[1].y); + gnap.playPullOutDeviceNonWorking(_vm->_hotspotsWalkPos[1].x, _vm->_hotspotsWalkPos[1].y); } break; case TALK_CURSOR: case PLAT_CURSOR: if (_vm->isFlag(kGFUnk04)) - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); else - _vm->_gnap->playScratchingHead(5, 0); + gnap.playScratchingHead(5, 0); break; } } @@ -2403,26 +2414,26 @@ void Scene06::run() { break; case kHS06Ladder: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 8, 4); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 8, 4); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(8, 4); + gnap.playScratchingHead(8, 4); break; case GRAB_CURSOR: if (_vm->isFlag(kGFGasTaken)) - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); else { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[2], 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS06TryToClimbLadder; + gnap.walkTo(_vm->_hotspotsWalkPos[2], 0, 0x107BB, 1); + gnap._actionStatus = kAS06TryToClimbLadder; _vm->setFlag(kGFGasTaken); } break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2430,37 +2441,37 @@ void Scene06::run() { break; case kHS06Horse: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemTwig && _horseTurnedBack) { _vm->_hotspots[kHS06WalkArea5]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[3], 0, 0x107BC, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[3], 0, 0x107BC, 1); _vm->_hotspots[kHS06WalkArea5]._flags &= ~SF_WALKABLE; - _vm->_gnap->_idleFacing = kDirUpLeft; + gnap._idleFacing = kDirUpLeft; _vm->_plat->walkTo(Common::Point(6, 8), 1, 0x107C2, 1); _vm->_plat->_idleFacing = kDirNone; - _vm->_gnap->_actionStatus = kAS06UseTwigOnHorse; + gnap._actionStatus = kAS06UseTwigOnHorse; _vm->setGrabCursorSprite(-1); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 3, 2); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 3, 2); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(3, 2); + gnap.playScratchingHead(3, 2); break; case TALK_CURSOR: if (_horseTurnedBack) { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[3], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(3, 2)) | 0x10000, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[3], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(3, 2)) | 0x10000, 1); } else { - _vm->_gnap->_idleFacing = kDirBottomLeft; + gnap._idleFacing = kDirBottomLeft; _vm->_hotspots[kHS06WalkArea5]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[3], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[3], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); _vm->_hotspots[kHS06WalkArea5]._flags &= ~SF_WALKABLE; - _vm->_gnap->_actionStatus = kAS06TalkToHorse; + gnap._actionStatus = kAS06TalkToHorse; } break; case GRAB_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2468,10 +2479,10 @@ void Scene06::run() { break; case kHS06ExitOutsideBarn: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[4], 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = kAS06LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[4], 0, 0x107AE, 1); + gnap._actionStatus = kAS06LeaveScene; if (_vm->_cursorValue == 1) _vm->_newSceneNum = 5; else @@ -2484,13 +2495,13 @@ void Scene06::run() { case kHS06WalkArea3: case kHS06WalkArea4: case kHS06WalkArea5: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -2502,11 +2513,11 @@ void Scene06::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0) _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0) + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(40) + 25; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextHorseSequenceId == -1) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextHorseSequenceId == -1) { if (_horseTurnedBack) { _nextHorseSequenceId = 0xF5; } else { @@ -2543,31 +2554,32 @@ void Scene06::run() { void Scene06::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS06LeaveScene: _vm->_sceneDone = true; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS06TryToGetGas: - gameSys.insertSequence(0xFC, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0xFC; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = -1; + gameSys.insertSequence(0xFC, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0xFC; + gnap._sequenceDatNum = 0; + gnap._actionStatus = -1; break; case kAS06TryToClimbLadder: gameSys.insertSequence(0xFF, 20, 0xFE, 20, kSeqSyncWait, 0, 0, 0); - gameSys.setAnimation(0xFD, _vm->_gnap->_id, 0); - gameSys.insertSequence(0xFD, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0xFD; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = kAS06TryToClimbLadderDone; + gameSys.setAnimation(0xFD, gnap._id, 0); + gameSys.insertSequence(0xFD, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0xFD; + gnap._sequenceDatNum = 0; + gnap._actionStatus = kAS06TryToClimbLadderDone; break; case kAS06TryToClimbLadderDone: - _vm->_gnap->_pos = Common::Point(6, 7); - _vm->_gnap->_actionStatus = -1; + gnap._pos = Common::Point(6, 7); + gnap._actionStatus = -1; break; case kAS06TalkToHorse: _nextHorseSequenceId = 0xF6; @@ -2576,7 +2588,7 @@ void Scene06::updateAnimations() { _nextPlatSequenceId = 0xFB; break; default: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -2595,7 +2607,7 @@ void Scene06::updateAnimations() { _vm->_plat->_sequenceId = 0x7C1; _vm->_plat->_sequenceDatNum = 1; _vm->setFlag(kGFUnk04); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; _vm->showCursor(); } if (_nextPlatSequenceId == 0xFB) { @@ -2612,16 +2624,16 @@ void Scene06::updateAnimations() { _vm->hideCursor(); gameSys.setAnimation(0xFA, 256, 1); gameSys.insertSequence(0xF2, 120, _currHorseSequenceId, 120, kSeqSyncWait, 0, 0, 0); - gameSys.insertSequence(0x100, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x100, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(0xF7, 20, 0xF8, 20, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(0xFB, _vm->_plat->_id, _vm->_plat->_sequenceId | (_vm->_plat->_sequenceDatNum << 16), _vm->_plat->_id, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(0xFA, 256, 0xFB, _vm->_plat->_id, kSeqSyncWait, 0, 0, 0); _vm->_plat->_sequenceId = 0xFA; _vm->_plat->_sequenceDatNum = 0; - gameSys.insertSequence(0x107B7, _vm->_gnap->_id, 0x100, _vm->_gnap->_id, - kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); - _vm->_gnap->_sequenceId = 0x7B7; - _vm->_gnap->_sequenceDatNum = 1; + gameSys.insertSequence(0x107B7, gnap._id, 0x100, gnap._id, + kSeqSyncWait, 0, 75 * gnap._pos.x - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); + gnap._sequenceId = 0x7B7; + gnap._sequenceDatNum = 1; _currHorseSequenceId = _nextHorseSequenceId; _nextHorseSequenceId = -1; _nextPlatSequenceId = -1; @@ -2633,7 +2645,7 @@ void Scene06::updateAnimations() { _horseTurnedBack = true; _currHorseSequenceId = _nextHorseSequenceId; _nextHorseSequenceId = -1; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; default: gameSys.setAnimation(_nextHorseSequenceId, 120, 2); @@ -2669,6 +2681,7 @@ void Scene07::updateHotspots() { void Scene07::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->queueInsertDeviceIcon(); gameSys.insertSequence(0x8C, 1, 0, 0, kSeqLoop, 0, 0, 0); @@ -2681,18 +2694,18 @@ void Scene07::run() { gameSys.insertSequence(0x8D, 1, 0, 0, kSeqNone, 0, 0, 0); if (_vm->_prevSceneNum == 8) { - _vm->_gnap->initPos(7, 7, kDirBottomLeft); + gnap.initPos(7, 7, kDirBottomLeft); _vm->_plat->initPos(9, 7, kDirUnk4); _vm->endSceneInit(); } else { - _vm->_gnap->_pos = Common::Point(6, 7); - _vm->_gnap->_id = 140; - _vm->_gnap->_sequenceId = 0x8F; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_idleFacing = kDirBottomRight; + gnap._pos = Common::Point(6, 7); + gnap._id = 140; + gnap._sequenceId = 0x8F; + gnap._sequenceDatNum = 0; + gnap._idleFacing = kDirBottomRight; gameSys.insertSequence(0x8F, 140, 0, 0, kSeqNone, 0, 0, 0); - gameSys.setAnimation(makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, 0); - _vm->_gnap->_actionStatus = kAS07Wait; + gameSys.setAnimation(makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, 0); + gnap._actionStatus = kAS07Wait; _vm->_plat->_pos = Common::Point(3, 8); _vm->_plat->_id = 160; _vm->_plat->_sequenceId = 0x91; @@ -2722,13 +2735,13 @@ void Scene07::run() { case kHS07Platypus: switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: @@ -2738,16 +2751,16 @@ void Scene07::run() { case kHS07ExitHouse: _vm->_isLeavingScene = true; - if (_vm->_gnap->_pos.x > 8) - _vm->_gnap->walkTo(Common::Point(_vm->_gnap->_pos.x, 7), 0, 0x107AD, 1); + if (gnap._pos.x > 8) + gnap.walkTo(Common::Point(gnap._pos.x, 7), 0, 0x107AD, 1); else - _vm->_gnap->walkTo(Common::Point(8, 7), 0, 0x107AD, 1); - _vm->_gnap->_actionStatus = kAS07LeaveScene; + gnap.walkTo(Common::Point(8, 7), 0, 0x107AD, 1); + gnap._actionStatus = kAS07LeaveScene; break; case kHS07Dice: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(4, 8, 3, 3); + gnap.playShowCurrItem(4, 8, 3, 3); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: @@ -2756,25 +2769,25 @@ void Scene07::run() { _vm->setFlag(kGFPlatypus); _vm->invAdd(kItemDice); updateHotspots(); - _vm->_gnap->playPullOutDevice(3, 3); + gnap.playPullOutDevice(3, 3); gameSys.setAnimation(0x8E, 1, 2); gameSys.insertSequence(0x8E, 1, 141, 1, kSeqSyncWait, 0, 0, 0); - gameSys.insertSequence(_vm->_gnap->getSequenceId(gskUseDevice, Common::Point(0, 0)) | 0x10000, _vm->_gnap->_id, - makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, - kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); - _vm->_gnap->_sequenceId = _vm->_gnap->getSequenceId(gskUseDevice, Common::Point(0, 0)); - _vm->_gnap->_sequenceDatNum = 1; + gameSys.insertSequence(gnap.getSequenceId(gskUseDevice, Common::Point(0, 0)) | 0x10000, gnap._id, + makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, + kSeqSyncWait, 0, 75 * gnap._pos.x - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); + gnap._sequenceId = gnap.getSequenceId(gskUseDevice, Common::Point(0, 0)); + gnap._sequenceDatNum = 1; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } break; case kHS07Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); _vm->_timers[4] = _vm->getRandom(40) + 50; @@ -2783,7 +2796,7 @@ void Scene07::run() { case kHS07WalkArea1: case kHS07WalkArea2: - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; case kHS07WalkArea3: @@ -2792,7 +2805,7 @@ void Scene07::run() { default: if (_vm->_mouseClickState._left) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -2801,8 +2814,8 @@ void Scene07::run() { updateAnimations(); if (!_vm->_isLeavingScene) { - _vm->_gnap->updateIdleSequence(); - if (_vm->_plat->_actionStatus < 0 && _vm->_gnap->_actionStatus < 0) { + gnap.updateIdleSequence(); + if (_vm->_plat->_actionStatus < 0 && gnap._actionStatus < 0) { if (_vm->_timers[0]) { if (!_vm->_timers[1]) { _vm->_timers[1] = _vm->getRandom(20) + 30; @@ -2856,16 +2869,17 @@ void Scene07::run() { void Scene07::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS07LeaveScene: _vm->_newSceneNum = 8; _vm->_sceneDone = true; break; } - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } if (gameSys.getAnimationStatus(2) == 2) { @@ -2922,6 +2936,7 @@ void Scene08::updateAnimationsCb() { void Scene08::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->queueInsertDeviceIcon(); @@ -2951,12 +2966,12 @@ void Scene08::run() { if (!_vm->isFlag(kGFTruckKeysUsed)) gameSys.insertSequence(0x146, 1, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->initPos(-1, 8, kDirBottomRight); + gnap.initPos(-1, 8, kDirBottomRight); _vm->_plat->initPos(-1, 7, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(1, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(1, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(1, 7), -1, 0x107C2, 1); _vm->_timers[5] = _vm->getRandom(40) + 50; @@ -2975,7 +2990,7 @@ void Scene08::run() { switch (_vm->_sceneClickedHotspot) { case kHS08Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); _vm->_timers[4] = _vm->getRandom(50) + 75; @@ -2985,21 +3000,21 @@ void Scene08::run() { case kH08SPlatypus: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: if (_vm->isFlag(kGFSceneFlag1)) - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); else - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->actionIdle(0x14D); - _vm->_gnap->kissPlatypus(8); + gnap.actionIdle(0x14D); + gnap.kissPlatypus(8); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: @@ -3010,49 +3025,49 @@ void Scene08::run() { case kHS08ExitBackdoor: _vm->_isLeavingScene = true; - _vm->_gnap->actionIdle(0x14D); - _vm->_gnap->walkTo(Common::Point(0, 6), 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = kAS08LeaveScene; + gnap.actionIdle(0x14D); + gnap.walkTo(Common::Point(0, 6), 0, 0x107AF, 1); + gnap._actionStatus = kAS08LeaveScene; _vm->_plat->walkTo(Common::Point(0, 7), 1, 0x107CF, 1); _vm->_newSceneNum = 9; break; case kHS08ExitCrash: _vm->_isLeavingScene = true; - _vm->_gnap->actionIdle(0x14D); - _vm->_gnap->walkTo(Common::Point(3, 9), 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = kAS08LeaveScene; + gnap.actionIdle(0x14D); + gnap.walkTo(Common::Point(3, 9), 0, 0x107AE, 1); + gnap._actionStatus = kAS08LeaveScene; _vm->_plat->walkTo(Common::Point(4, 9), 1, 0x107C1, 1); _vm->_newSceneNum = 7; break; case kHS08Man: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(6, 6, 7, 0); + gnap.playShowCurrItem(6, 6, 7, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->actionIdle(0x14D); - _vm->_gnap->walkTo(Common::Point(6, 6), 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS08LookMan; - _vm->_gnap->_idleFacing = kDirUpRight; + gnap.actionIdle(0x14D); + gnap.walkTo(Common::Point(6, 6), 0, 0x107BB, 1); + gnap._actionStatus = kAS08LookMan; + gnap._idleFacing = kDirUpRight; break; case GRAB_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->actionIdle(0x14D); - _vm->_gnap->walkTo(Common::Point(8, 6), 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS08TalkMan; + gnap._idleFacing = kDirUpLeft; + gnap.actionIdle(0x14D); + gnap.walkTo(Common::Point(8, 6), 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS08TalkMan; break; case PLAT_CURSOR: - _vm->_gnap->actionIdle(0x14D); - _vm->_gnap->useDeviceOnPlatypus(); + gnap.actionIdle(0x14D); + gnap.useDeviceOnPlatypus(); _vm->_plat->walkTo(Common::Point(6, 6), 1, 0x107C2, 1); _vm->_plat->_actionStatus = kAS08PlatWithMan; _vm->_plat->_idleFacing = kDirNone; - _vm->_gnap->playIdle(6, 6); + gnap.playIdle(6, 6); break; } } @@ -3060,35 +3075,35 @@ void Scene08::run() { case kHS08Door: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(4, 7, 5, 0); - gameSys.setAnimation(makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, 0); - _vm->_gnap->_actionStatus = kAS08GrabDog; + gnap.playShowCurrItem(4, 7, 5, 0); + gameSys.setAnimation(makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, 0); + gnap._actionStatus = kAS08GrabDog; } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(6, 0); - gameSys.setAnimation(makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, 0); - _vm->_gnap->_actionStatus = kAS08LookDog; + gnap.playScratchingHead(6, 0); + gameSys.setAnimation(makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, 0); + gnap._actionStatus = kAS08LookDog; break; case GRAB_CURSOR: - _vm->_gnap->walkTo(Common::Point(4, 7), 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS08GrabDog; - _vm->_gnap->_idleFacing = kDirUpRight; + gnap.walkTo(Common::Point(4, 7), 0, 0x107BB, 1); + gnap._actionStatus = kAS08GrabDog; + gnap._idleFacing = kDirUpRight; break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->actionIdle(0x14D); - _vm->_gnap->walkTo(Common::Point(4, 7), 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS08TalkDog; + gnap._idleFacing = kDirUpRight; + gnap.actionIdle(0x14D); + gnap.walkTo(Common::Point(4, 7), 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS08TalkDog; break; case PLAT_CURSOR: _vm->setFlag(kGFSceneFlag1); - _vm->_gnap->actionIdle(0x14D); - _vm->_gnap->useDeviceOnPlatypus(); + gnap.actionIdle(0x14D); + gnap.useDeviceOnPlatypus(); _vm->_plat->walkTo(Common::Point(3, 7), 1, 0x107C2, 1); _vm->_plat->_actionStatus = kAS08PlatWithDog; _vm->_plat->_idleFacing = kDirNone; - _vm->_gnap->playIdle(3, 7); + gnap.playIdle(3, 7); break; } } @@ -3096,25 +3111,25 @@ void Scene08::run() { case kHS08Meat: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(6, 8, 5, 6); + gnap.playShowCurrItem(6, 8, 5, 6); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(6, 7); + gnap.playScratchingHead(6, 7); break; case GRAB_CURSOR: if (_currDogSequenceId == 0x135) { - _vm->_gnap->playScratchingHead(6, 7); + gnap.playScratchingHead(6, 7); } else { - _vm->_gnap->actionIdle(0x14D); - _vm->_gnap->playPullOutDevice(6, 7); - _vm->_gnap->playUseDevice(0, 0); + gnap.actionIdle(0x14D); + gnap.playPullOutDevice(6, 7); + gnap.playUseDevice(0, 0); _nextDogSequenceId = 0x149; } break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -3122,25 +3137,25 @@ void Scene08::run() { case kHS08Bone: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(2, 7, 3, 6); + gnap.playShowCurrItem(2, 7, 3, 6); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(3, 6); + gnap.playScratchingHead(3, 6); break; case GRAB_CURSOR: if (_currDogSequenceId == 0x135) { - _vm->_gnap->playScratchingHead(3, 6); + gnap.playScratchingHead(3, 6); } else { - _vm->_gnap->actionIdle(0x14D); - _vm->_gnap->playPullOutDevice(3, 6); - _vm->_gnap->playUseDevice(0, 0); + gnap.actionIdle(0x14D); + gnap.playPullOutDevice(3, 6); + gnap.playUseDevice(0, 0); _nextDogSequenceId = 0x14A; } break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -3148,25 +3163,25 @@ void Scene08::run() { case kHS08Toy: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(8, 7, 7, 6); + gnap.playShowCurrItem(8, 7, 7, 6); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(7, 6); + gnap.playScratchingHead(7, 6); break; case GRAB_CURSOR: if (_currDogSequenceId == 0x135) { - _vm->_gnap->playScratchingHead(7, 6); + gnap.playScratchingHead(7, 6); } else { - _vm->_gnap->actionIdle(0x14D); - _vm->_gnap->playPullOutDevice(7, 6); - _vm->_gnap->playUseDevice(0, 0); + gnap.actionIdle(0x14D); + gnap.playPullOutDevice(7, 6); + gnap.playUseDevice(0, 0); _nextDogSequenceId = 0x14B; } break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -3174,14 +3189,14 @@ void Scene08::run() { case kHS08WalkArea1: case kHS08WalkArea2: - _vm->_gnap->actionIdle(0x14D); - _vm->_gnap->walkTo(Common::Point(-1, 6), -1, -1, 1); + gnap.actionIdle(0x14D); + gnap.walkTo(Common::Point(-1, 6), -1, -1, 1); break; default: if (_vm->_mouseClickState._left) { - _vm->_gnap->actionIdle(0x14D); - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.actionIdle(0x14D); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -3191,10 +3206,10 @@ void Scene08::run() { if (!_vm->_isLeavingScene) { _vm->_plat->updateIdleSequence(); - _vm->_gnap->updateIdleSequence(); + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(50) + 125; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextManSequenceId == -1 && + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextManSequenceId == -1 && (_currDogSequenceId == 0x134 || _currDogSequenceId == 0x135)) { int _gnapRandomValue = _vm->getRandom(4); switch (_gnapRandomValue) { @@ -3232,39 +3247,40 @@ void Scene08::run() { void Scene08::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS08LeaveScene: _vm->_sceneDone = true; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS08TalkMan: _nextManSequenceId = 0x13F; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS08LookMan: _nextManSequenceId = 0x140; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS08LookDog: _nextManSequenceId = 0x137; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS08GrabDog: if (_currDogSequenceId == 0x135) _nextDogSequenceId = 0x133; else _nextDogSequenceId = 0x13C; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS08TalkDog: if (_currDogSequenceId == 0x135) _nextDogSequenceId = 0x133; else _nextDogSequenceId = 0x13C; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -3332,8 +3348,8 @@ void Scene08::updateAnimations() { _vm->_plat->_sequenceId = 0x148; _vm->_plat->_idleFacing = kDirUnk4; _vm->_plat->_sequenceDatNum = 0; - if (_vm->_gnap->_pos == Common::Point(1, 8)) - _vm->_gnap->walkStep(); + if (gnap._pos == Common::Point(1, 8)) + gnap.walkStep(); } else if (_nextDogSequenceId != -1) { gameSys.setAnimation(_nextDogSequenceId, 100, 3); gameSys.insertSequence(_nextDogSequenceId, 100, _currDogSequenceId, 100, kSeqSyncWait, 0, 0, 0); @@ -3343,11 +3359,11 @@ void Scene08::updateAnimations() { if (_currDogSequenceId == 0x133) { _vm->_timers[2] = _vm->getRandom(30) + 20; _vm->_timers[3] = _vm->getRandom(50) + 200; - gameSys.insertSequence(0x14D, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x14D; - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = -1; + gameSys.insertSequence(0x14D, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x14D; + gnap._idleFacing = kDirUpRight; + gnap._sequenceDatNum = 0; + gnap._actionStatus = -1; } } } @@ -3376,6 +3392,7 @@ void Scene09::updateHotspots() { void Scene09::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->queueInsertDeviceIcon(); @@ -3383,13 +3400,13 @@ void Scene09::run() { gameSys.insertSequence(0x4B, 2, 0, 0, kSeqNone, 0, 0, 0); if (_vm->_prevSceneNum == 8) { - _vm->_gnap->initPos(11, 8, kDirBottomLeft); + gnap.initPos(11, 8, kDirBottomLeft); _vm->_plat->initPos(12, 7, kDirUnk4); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(9, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(9, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(9, 7), -1, 0x107D2, 1); } else { - _vm->_gnap->initPos(4, 7, kDirBottomRight); + gnap.initPos(4, 7, kDirBottomRight); _vm->_plat->initPos(5, 7, kDirNone); _vm->endSceneInit(); } @@ -3411,7 +3428,7 @@ void Scene09::run() { switch (_vm->_sceneClickedHotspot) { case kHS09Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); _vm->_timers[4] = _vm->getRandom(150) + 50; @@ -3422,13 +3439,13 @@ void Scene09::run() { case kHS09Platypus: switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: @@ -3439,8 +3456,8 @@ void Scene09::run() { case kHS09ExitKitchen: _vm->_isLeavingScene = true; _vm->_newSceneNum = 10; - _vm->_gnap->walkTo(Common::Point(4, 7), 0, 0x107BF, 1); - _vm->_gnap->_actionStatus = kAS09LeaveScene; + gnap.walkTo(Common::Point(4, 7), 0, 0x107BF, 1); + gnap._actionStatus = kAS09LeaveScene; _vm->_plat->walkTo(Common::Point(4, 8), -1, 0x107D2, 1); _vm->_plat->_idleFacing = kDirUnk4; break; @@ -3448,27 +3465,27 @@ void Scene09::run() { case kHS09ExitHouse: _vm->_isLeavingScene = true; _vm->_newSceneNum = 8; - _vm->_gnap->walkTo(Common::Point(10, -1), 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS09LeaveScene; + gnap.walkTo(Common::Point(10, -1), 0, 0x107AB, 1); + gnap._actionStatus = kAS09LeaveScene; _vm->_plat->walkTo(Common::Point(10, -1), -1, 0x107CD, 1); _vm->_plat->_idleFacing = kDirUnk4; break; case kHS09Trash: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(9, 6, 8, 0); + gnap.playShowCurrItem(9, 6, 8, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(8, 3); + gnap.playScratchingHead(8, 3); break; case GRAB_CURSOR: - _vm->_gnap->_actionStatus = kAS09SearchTrash; - _vm->_gnap->walkTo(Common::Point(9, 6), 0, 0x107BC, 1); + gnap._actionStatus = kAS09SearchTrash; + gnap.walkTo(Common::Point(9, 6), 0, 0x107BC, 1); break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -3477,12 +3494,12 @@ void Scene09::run() { case kHS09WalkArea1: case kHS09WalkArea2: case kHS09WalkArea3: - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: if (_vm->_mouseClickState._left) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -3490,9 +3507,9 @@ void Scene09::run() { updateAnimations(); - if (!_vm->_isLeavingScene && _vm->_gnap->_actionStatus != 1 && _vm->_gnap->_actionStatus != 2) { + if (!_vm->_isLeavingScene && gnap._actionStatus != 1 && gnap._actionStatus != 2) { _vm->_plat->updateIdleSequence(); - _vm->_gnap->updateIdleSequence(); + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(150) + 100; if (_vm->_timers[4] & 1) @@ -3519,30 +3536,31 @@ void Scene09::run() { void Scene09::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS09LeaveScene: _vm->_sceneDone = true; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS09SearchTrash: gameSys.setAnimation(0x4C, 120, 0); - gameSys.insertSequence(0x4C, 120, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x4C, 120, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.removeSequence(0x4B, 2, true); - _vm->_gnap->_sequenceId = 0x4C; - _vm->_gnap->_id = 120; - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_pos = Common::Point(9, 6); - _vm->_gnap->_actionStatus = kAS09SearchTrashDone; + gnap._sequenceId = 0x4C; + gnap._id = 120; + gnap._idleFacing = kDirUpLeft; + gnap._sequenceDatNum = 0; + gnap._pos = Common::Point(9, 6); + gnap._actionStatus = kAS09SearchTrashDone; break; case kAS09SearchTrashDone: gameSys.insertSequence(0x4B, 2, 0, 0, kSeqNone, 0, 0, 0); _vm->_timers[2] = 360; _vm->_timers[4] = _vm->getRandom(150) + 100; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } diff --git a/engines/gnap/scenes/group1.cpp b/engines/gnap/scenes/group1.cpp index aa55e1dcf5..d8b2a3ce28 100644 --- a/engines/gnap/scenes/group1.cpp +++ b/engines/gnap/scenes/group1.cpp @@ -59,6 +59,7 @@ void Scene10::updateHotspots() { void Scene10::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _currCookSequenceId = 0x103; @@ -72,16 +73,16 @@ void Scene10::run() { _vm->queueInsertDeviceIcon(); if (_vm->_prevSceneNum == 9) { - _vm->_gnap->initPos(11, 8, kDirBottomLeft); + gnap.initPos(11, 8, kDirBottomLeft); _vm->_plat->initPos(12, 7, kDirUnk4); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(9, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(9, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(9, 7), -1, 0x107D2, 1); } else { - _vm->_gnap->initPos(-1, 7, kDirBottomRight); + gnap.initPos(-1, 7, kDirBottomRight); _vm->_plat->initPos(-2, 8, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(1, 7), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(1, 7), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(1, 8), -1, 0x107C2, 1); } @@ -107,20 +108,20 @@ void Scene10::run() { switch (_vm->_sceneClickedHotspot) { case kHS10Platypus: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: if (_vm->isFlag(kGFMudTaken)) - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); else - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(10); + gnap.kissPlatypus(10); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: @@ -131,48 +132,48 @@ void Scene10::run() { case kHS10ExitBar: _vm->_isLeavingScene = true; - _vm->_gnap->actionIdle(0x10C); - _vm->_gnap->walkTo(Common::Point(0, 7), 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = kAS10LeaveScene; + gnap.actionIdle(0x10C); + gnap.walkTo(Common::Point(0, 7), 0, 0x107AF, 1); + gnap._actionStatus = kAS10LeaveScene; _vm->_plat->walkTo(Common::Point(0, 7), -1, 0x107CF, 1); _vm->_newSceneNum = 11; break; case kHS10ExitBackdoor: _vm->_isLeavingScene = true; - _vm->_gnap->actionIdle(0x10C); - _vm->_gnap->walkTo(Common::Point(2, 9), 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = kAS10LeaveScene; + gnap.actionIdle(0x10C); + gnap.walkTo(Common::Point(2, 9), 0, 0x107AE, 1); + gnap._actionStatus = kAS10LeaveScene; _vm->_plat->walkTo(Common::Point(3, 9), -1, 0x107C7, 1); _vm->_newSceneNum = 9; break; case kHS10Cook: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(4, 8, 6, 0); - gameSys.setAnimation(makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, 0); - _vm->_gnap->_actionStatus = kAS10AnnoyCook; + gnap.playShowCurrItem(4, 8, 6, 0); + gameSys.setAnimation(makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, 0); + gnap._actionStatus = kAS10AnnoyCook; } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(6, 0); + gnap.playScratchingHead(6, 0); break; case GRAB_CURSOR: - _vm->_gnap->playImpossible(0, 0); - _vm->_gnap->_idleFacing = kDirBottomRight; + gnap.playImpossible(0, 0); + gnap._idleFacing = kDirBottomRight; break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->actionIdle(0x10C); - _vm->_gnap->walkTo(Common::Point(4, 8), 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS10AnnoyCook; + gnap._idleFacing = kDirUpRight; + gnap.actionIdle(0x10C); + gnap.walkTo(Common::Point(4, 8), 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS10AnnoyCook; break; case PLAT_CURSOR: - _vm->_gnap->actionIdle(0x10C); - _vm->_gnap->useDeviceOnPlatypus(); + gnap.actionIdle(0x10C); + gnap.useDeviceOnPlatypus(); _vm->_plat->walkTo(Common::Point(4, 6), -1, -1, 1); - _vm->_gnap->walkTo(Common::Point(4, 8), 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS10AnnoyCook; + gnap.walkTo(Common::Point(4, 8), 0, 0x107BB, 1); + gnap._actionStatus = kAS10AnnoyCook; break; } } @@ -180,36 +181,36 @@ void Scene10::run() { case kHS10Tongs: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(3, 7, 4, 0); + gnap.playShowCurrItem(3, 7, 4, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: if (_vm->isFlag(kGFMudTaken)) - _vm->_gnap->playMoan2(-1, -1); + gnap.playMoan2(-1, -1); else - _vm->_gnap->playScratchingHead(4, 3); + gnap.playScratchingHead(4, 3); break; case GRAB_CURSOR: if (_vm->isFlag(kGFMudTaken)) - _vm->_gnap->playMoan2(-1, -1); + gnap.playMoan2(-1, -1); else { - _vm->_gnap->actionIdle(0x10C); - _vm->_gnap->walkTo(Common::Point(4, 8), 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS10AnnoyCook; + gnap.actionIdle(0x10C); + gnap.walkTo(Common::Point(4, 8), 0, 0x107BB, 1); + gnap._actionStatus = kAS10AnnoyCook; } break; case TALK_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case PLAT_CURSOR: if (_vm->isFlag(kGFMudTaken)) - _vm->_gnap->playMoan2(-1, -1); + gnap.playMoan2(-1, -1); else { - _vm->_gnap->actionIdle(0x10C); - _vm->_gnap->useDeviceOnPlatypus(); + gnap.actionIdle(0x10C); + gnap.useDeviceOnPlatypus(); _vm->_plat->walkTo(Common::Point(3, 7), -1, -1, 1); - _vm->_gnap->walkTo(Common::Point(4, 8), 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS10AnnoyCook; + gnap.walkTo(Common::Point(4, 8), 0, 0x107BB, 1); + gnap._actionStatus = kAS10AnnoyCook; } break; } @@ -218,33 +219,33 @@ void Scene10::run() { case kHS10Box: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(7, 6, 6, 0); + gnap.playShowCurrItem(7, 6, 6, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(7, 3); + gnap.playScratchingHead(7, 3); break; case GRAB_CURSOR: - _vm->_gnap->actionIdle(0x10C); - _vm->_gnap->walkTo(Common::Point(4, 8), 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS10AnnoyCook; + gnap.actionIdle(0x10C); + gnap.walkTo(Common::Point(4, 8), 0, 0x107BB, 1); + gnap._actionStatus = kAS10AnnoyCook; break; case TALK_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case PLAT_CURSOR: if (_vm->isFlag(kGFMudTaken)) - _vm->_gnap->playMoan2(-1, -1); + gnap.playMoan2(-1, -1); else { _vm->invAdd(kItemTongs); _vm->setFlag(kGFMudTaken); - _vm->_gnap->actionIdle(0x10C); - _vm->_gnap->useDeviceOnPlatypus(); + gnap.actionIdle(0x10C); + gnap.useDeviceOnPlatypus(); _vm->_plat->walkTo(Common::Point(7, 6), 1, 0x107D2, 1); _vm->_plat->_actionStatus = kAS10PlatWithBox; _vm->_plat->_idleFacing = kDirUnk4; _vm->_largeSprite = gameSys.createSurface(0xC3); - _vm->_gnap->playIdle(7, 6); + gnap.playIdle(7, 6); } break; } @@ -253,26 +254,26 @@ void Scene10::run() { case kHS10Oven: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(9, 6, 10, 0); + gnap.playShowCurrItem(9, 6, 10, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playSequence(_vm->_gnap->getSequenceId(gskDeflect, Common::Point(10, 5)) | 0x10000); + gnap.playSequence(gnap.getSequenceId(gskDeflect, Common::Point(10, 5)) | 0x10000); break; case GRAB_CURSOR: - _vm->_gnap->actionIdle(0x10C); - _vm->_gnap->walkTo(Common::Point(9, 6), 0, 0x107BB, 1); - gameSys.insertSequence(0x10E, 120, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x10E; - _vm->_gnap->_id = 120; - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_pos = Common::Point(9, 6); + gnap.actionIdle(0x10C); + gnap.walkTo(Common::Point(9, 6), 0, 0x107BB, 1); + gameSys.insertSequence(0x10E, 120, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x10E; + gnap._id = 120; + gnap._idleFacing = kDirUpRight; + gnap._sequenceDatNum = 0; + gnap._pos = Common::Point(9, 6); _vm->_timers[2] = 360; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -282,12 +283,12 @@ void Scene10::run() { case kHS10WalkArea2: case kHS10WalkArea3: case kHS10WalkArea4: - _vm->_gnap->actionIdle(0x10C); - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.actionIdle(0x10C); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; case kHS10Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } @@ -295,8 +296,8 @@ void Scene10::run() { default: if (_vm->_mouseClickState._left) { - _vm->_gnap->actionIdle(0x10C); - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.actionIdle(0x10C); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -306,7 +307,7 @@ void Scene10::run() { if (!_vm->_isLeavingScene) { _vm->_plat->updateIdleSequence(); - _vm->_gnap->updateIdleSequence(); + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(80) + 150; _vm->playSound(0x12B, false); @@ -342,10 +343,11 @@ void Scene10::run() { void Scene10::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS10LeaveScene: _vm->_sceneDone = true; break; @@ -400,8 +402,8 @@ void Scene10::updateAnimations() { _vm->setGrabCursorSprite(kItemTongs); if (_vm->_plat->_actionStatus == kAS10PlatWithBox) _vm->_plat->_actionStatus = -1; - if (_vm->_gnap->_pos == Common::Point(4, 8)) - _vm->_gnap->walkStep(); + if (gnap._pos == Common::Point(4, 8)) + gnap.walkStep(); break; default: gameSys.insertSequence(_nextCookSequenceId, 100, _currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0); @@ -411,7 +413,7 @@ void Scene10::updateAnimations() { switch (_currCookSequenceId) { case 0x106: - if (_vm->_gnap->_actionStatus >= 0 || _vm->_plat->_actionStatus >= 0) + if (gnap._actionStatus >= 0 || _vm->_plat->_actionStatus >= 0) _nextCookSequenceId = 0x106; else { int rnd = _vm->getRandom(7); @@ -432,7 +434,7 @@ void Scene10::updateAnimations() { } break; case 0x103: - if (_vm->_gnap->_actionStatus >= 0 || _vm->_plat->_actionStatus >= 0) + if (gnap._actionStatus >= 0 || _vm->_plat->_actionStatus >= 0) _nextCookSequenceId = 0x106; else if (_vm->getRandom(7) == 0) _nextCookSequenceId = 0x104; @@ -440,7 +442,7 @@ void Scene10::updateAnimations() { _nextCookSequenceId = 0x106; break; case 0x104: - if (_vm->_gnap->_actionStatus >= 0 || _vm->_plat->_actionStatus >= 0) + if (gnap._actionStatus >= 0 || _vm->_plat->_actionStatus >= 0) _nextCookSequenceId = 0x106; else if (_vm->getRandom(7) == 0) _nextCookSequenceId = 0x103; @@ -448,7 +450,7 @@ void Scene10::updateAnimations() { _nextCookSequenceId = 0x106; break; case 0x105: - if (_vm->_gnap->_actionStatus >= 0 || _vm->_plat->_actionStatus >= 0) + if (gnap._actionStatus >= 0 || _vm->_plat->_actionStatus >= 0) _nextCookSequenceId = 0x106; else { int rnd = _vm->getRandom(7); @@ -465,11 +467,11 @@ void Scene10::updateAnimations() { } _vm->_timers[2] = _vm->getRandom(30) + 20; _vm->_timers[3] = 300; - gameSys.insertSequence(0x10C, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x10C; - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = -1; + gameSys.insertSequence(0x10C, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x10C; + gnap._idleFacing = kDirUpRight; + gnap._sequenceDatNum = 0; + gnap._actionStatus = -1; _vm->_plat->_actionStatus = -1; break; } @@ -533,6 +535,8 @@ void Scene11::updateHotspots() { void Scene11::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; + bool flag = true; _vm->_timers[7] = 50; @@ -543,22 +547,22 @@ void Scene11::run() { switch (_vm->_prevSceneNum) { case 13: - _vm->_gnap->initPos(8, 5, kDirBottomLeft); + gnap.initPos(8, 5, kDirBottomLeft); _vm->_plat->initPos(9, 6, kDirUnk4); break; case 47: - _vm->_gnap->initPos(8, 5, kDirBottomLeft); + gnap.initPos(8, 5, kDirBottomLeft); _vm->_plat->initPos(9, 5, kDirUnk4); _currGoggleGuySequenceId = 0x1FA; _currHookGuySequenceId = 0x1FF; _vm->_timers[7] = 180; break; case 12: - _vm->_gnap->initPos(-1, 9, kDirBottomRight); + gnap.initPos(-1, 9, kDirBottomRight); _vm->_plat->initPos(-2, 8, kDirNone); break; default: - _vm->_gnap->initPos(6, 6, kDirBottomLeft); + gnap.initPos(6, 6, kDirBottomLeft); _vm->_plat->initPos(6, 5, kDirUnk4); break; } @@ -582,7 +586,7 @@ void Scene11::run() { _vm->endSceneInit(); if (_vm->_prevSceneNum == 12) { - _vm->_gnap->walkTo(Common::Point(2, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(1, 8), -1, 0x107C2, 1); } @@ -600,17 +604,17 @@ void Scene11::run() { switch (_vm->_sceneClickedHotspot) { case kHS11Platypus: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: @@ -621,49 +625,49 @@ void Scene11::run() { case kHS11ExitKitchen: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(6, 5), 0, 0x107BF, 1); - _vm->_gnap->_actionStatus = kAS11LeaveScene; + gnap.walkTo(Common::Point(6, 5), 0, 0x107BF, 1); + gnap._actionStatus = kAS11LeaveScene; _vm->_plat->walkTo(Common::Point(6, 6), -1, -1, 1); _vm->_newSceneNum = 10; break; case kHS11ExitToilet: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(8, 5), 0, 0x107BF, 1); - _vm->_gnap->_actionStatus = kAS11LeaveScene; + gnap.walkTo(Common::Point(8, 5), 0, 0x107BF, 1); + gnap._actionStatus = kAS11LeaveScene; _vm->_plat->walkTo(Common::Point(8, 6), -1, -1, 1); _vm->_newSceneNum = 13; break; case kHS11ExitLeft: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(-1, 8), 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = kAS11LeaveScene; + gnap.walkTo(Common::Point(-1, 8), 0, 0x107AF, 1); + gnap._actionStatus = kAS11LeaveScene; _vm->_plat->walkTo(Common::Point(-1, 9), -1, 0x107CF, 1); _vm->_newSceneNum = 12; break; case kHS11GoggleGuy: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemMagazine) { - _vm->_gnap->walkTo(Common::Point(3, 7), 0, 0x107BC, 1); - _vm->_gnap->_actionStatus = kAS11ShowMagazineToGoggleGuy; - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 2, 0); + gnap.walkTo(Common::Point(3, 7), 0, 0x107BC, 1); + gnap._actionStatus = kAS11ShowMagazineToGoggleGuy; + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 2, 0); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(3, 7, 2, 0); + gnap.playShowCurrItem(3, 7, 2, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(1, 6); + gnap.playScratchingHead(1, 6); break; case GRAB_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(Common::Point(3, 7), 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS11TalkGoggleGuy; + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(Common::Point(3, 7), 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS11TalkGoggleGuy; break; } } @@ -671,28 +675,28 @@ void Scene11::run() { break; case kHS11HookGuy: - if (_vm->_gnap->_actionStatus < 0) { - _vm->_gnap->_idleFacing = kDirUpRight; + if (gnap._actionStatus < 0) { + gnap._idleFacing = kDirUpRight; if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->walkTo(Common::Point(5, 6), 0, 0x107BC, 9); - _vm->_gnap->_actionStatus = kAS11ShowItemToHookGuy; - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 4, 0); + gnap.walkTo(Common::Point(5, 6), 0, 0x107BC, 9); + gnap._actionStatus = kAS11ShowItemToHookGuy; + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 4, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playSequence(_vm->_gnap->getSequenceId(gskDeflect, Common::Point(3, 6)) | 0x10000); + gnap.playSequence(gnap.getSequenceId(gskDeflect, Common::Point(3, 6)) | 0x10000); break; case GRAB_CURSOR: - _vm->_gnap->walkTo(Common::Point(5, 6), 0, 0x107BC, 1); - _vm->_gnap->_actionStatus = kAS11GrabHookGuy; + gnap.walkTo(Common::Point(5, 6), 0, 0x107BC, 1); + gnap._actionStatus = kAS11GrabHookGuy; break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirBottomLeft; - _vm->_gnap->walkTo(Common::Point(5, 6), 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS11TalkHookGuy; + gnap._idleFacing = kDirBottomLeft; + gnap.walkTo(Common::Point(5, 6), 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS11TalkHookGuy; break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -700,21 +704,21 @@ void Scene11::run() { break; case kHS11Billard: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(9, 8); + gnap.playImpossible(9, 8); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(9, 8); + gnap.playScratchingHead(9, 8); break; case GRAB_CURSOR: - _vm->_gnap->walkTo(Common::Point(9, 8), 0, 0x107BA, 1); - _vm->_gnap->_actionStatus = kAS11GrabBillardBall; + gnap.walkTo(Common::Point(9, 8), 0, 0x107BA, 1); + gnap._actionStatus = kAS11GrabBillardBall; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(9, 8); + gnap.playImpossible(9, 8); break; } } @@ -726,20 +730,20 @@ void Scene11::run() { case kHS11WalkArea3: case kHS11WalkArea4: case kHS11WalkArea5: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; case kHS11Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; default: - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -755,10 +759,10 @@ void Scene11::run() { gameSys.insertSequence(0x207, 257, 0, 0, kSeqNone, 0, 0, 0); } _vm->_plat->updateIdleSequence2(); - _vm->_gnap->updateIdleSequence2(); + gnap.updateIdleSequence2(); if (!_vm->_timers[5]) { _vm->_timers[5] = _vm->getRandom(100) + 75; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextGoggleGuySequenceId == -1) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextGoggleGuySequenceId == -1) { if (_vm->getRandom(2)) _nextGoggleGuySequenceId = 0x1F6; else @@ -767,7 +771,7 @@ void Scene11::run() { } if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(40) + 20; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextHookGuySequenceId == -1) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextHookGuySequenceId == -1) { if (_currHookGuySequenceId == 0x201) { switch (_vm->getRandom(7)) { case 0: @@ -821,11 +825,12 @@ void Scene11::run() { void Scene11::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { - if (_vm->_gnap->_actionStatus != kAS11GrabBillardBall) + if (gnap._actionStatus != kAS11GrabBillardBall) gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS11LeaveScene: _vm->_sceneDone = true; break; @@ -849,10 +854,10 @@ void Scene11::updateAnimations() { gameSys.setAnimation(0, 0, 0); _vm->_timers[2] = _vm->getRandom(30) + 20; _vm->_timers[3] = _vm->getRandom(50) + 200; - gameSys.insertSequence(0x1F4, 255, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x1F4; - _vm->_gnap->_id = 255; - _vm->_gnap->_sequenceDatNum = 0; + gameSys.insertSequence(0x1F4, 255, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x1F4; + gnap._id = 255; + gnap._sequenceDatNum = 0; gameSys.removeSequence(0x207, 257, true); gameSys.removeSequence(0x208, 256, true); _nextGoggleGuySequenceId = 0x1F8; @@ -882,7 +887,7 @@ void Scene11::updateAnimations() { _vm->_hotspots[kHS11Billard]._flags |= SF_DISABLED; gameSys.setAnimation(0x207, 257, 4); gameSys.insertSequence(0x207, 257, 0, 0, kSeqNone, _vm->getSequenceTotalDuration(0x1FE), 0, 0); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } break; } @@ -894,32 +899,32 @@ void Scene11::updateAnimations() { gameSys.setAnimation(_nextGoggleGuySequenceId, 121, 2); _currGoggleGuySequenceId = _nextGoggleGuySequenceId; _nextGoggleGuySequenceId = -1; - if (_vm->_gnap->_actionStatus >= 1 && _vm->_gnap->_actionStatus <= 4) - _vm->_gnap->_actionStatus = -1; + if (gnap._actionStatus >= 1 && gnap._actionStatus <= 4) + gnap._actionStatus = -1; } if (gameSys.getAnimationStatus(3) == 2) { if (_nextHookGuySequenceId == 0x204) { gameSys.setAnimation(_nextHookGuySequenceId, 120, 3); gameSys.insertSequence(0x204, 120, _currHookGuySequenceId, 120, kSeqSyncWait, 0, 0, 0); - gameSys.insertSequence(0x1F5, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x1F5, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); _currHookGuySequenceId = 0x204; _nextHookGuySequenceId = -1; - _vm->_gnap->_sequenceId = 0x1F5; - _vm->_gnap->_sequenceDatNum = 0; + gnap._sequenceId = 0x1F5; + gnap._sequenceDatNum = 0; _vm->_timers[4] = _vm->getRandom(40) + 20; _vm->_timers[2] = _vm->getRandom(20) + 70; _vm->_timers[3] = _vm->getRandom(50) + 200; - if (_vm->_gnap->_actionStatus == kAS11GrabHookGuy) - _vm->_gnap->_actionStatus = -1; + if (gnap._actionStatus == kAS11GrabHookGuy) + gnap._actionStatus = -1; } else if (_nextHookGuySequenceId != -1) { gameSys.insertSequence(_nextHookGuySequenceId, 120, _currHookGuySequenceId, 120, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(_nextHookGuySequenceId, 120, 3); _currHookGuySequenceId = _nextHookGuySequenceId; _nextHookGuySequenceId = -1; _vm->_timers[4] = _vm->getRandom(40) + 20; - if (_vm->_gnap->_actionStatus >= 6 && _vm->_gnap->_actionStatus <= 9) - _vm->_gnap->_actionStatus = -1; + if (gnap._actionStatus >= 6 && gnap._actionStatus <= 9) + gnap._actionStatus = -1; } } @@ -961,6 +966,7 @@ void Scene12::updateHotspots() { void Scene12::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; int v18 = 1; _vm->queueInsertDeviceIcon(); @@ -991,14 +997,14 @@ void Scene12::run() { _vm->_timers[7] = _vm->getRandom(100) + 100; if (_vm->_prevSceneNum == 15) { - _vm->_gnap->initPos(5, 6, kDirBottomRight); + gnap.initPos(5, 6, kDirBottomRight); _vm->_plat->initPos(3, 7, kDirNone); _vm->endSceneInit(); } else { - _vm->_gnap->initPos(11, 8, kDirBottomLeft); + gnap.initPos(11, 8, kDirBottomLeft); _vm->_plat->initPos(12, 8, kDirUnk4); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(8, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(8, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(9, 8), -1, 0x107D2, 1); } @@ -1014,7 +1020,7 @@ void Scene12::run() { switch (_vm->_sceneClickedHotspot) { case kHS12Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } @@ -1023,13 +1029,13 @@ void Scene12::run() { case kHS12Platypus: switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: @@ -1039,8 +1045,8 @@ void Scene12::run() { case kHS12ExitRight: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(10, -1), 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS12LeaveScene; + gnap.walkTo(Common::Point(10, -1), 0, 0x107AB, 1); + gnap._actionStatus = kAS12LeaveScene; _vm->_plat->walkTo(Common::Point(10, -1), -1, -1, 1); _vm->_newSceneNum = 11; break; @@ -1048,41 +1054,41 @@ void Scene12::run() { case kHS12ToothGuy: if (_vm->_grabCursorSpriteIndex == kItemQuarter) { _vm->_largeSprite = gameSys.createSurface(0x141); - _vm->_gnap->walkTo(Common::Point(3, 7), 0, 0x107BC, 9); - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->_actionStatus = kAS12QuarterToToothGuy; - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 2, 0); + gnap.walkTo(Common::Point(3, 7), 0, 0x107BC, 9); + gnap._idleFacing = kDirUpLeft; + gnap._actionStatus = kAS12QuarterToToothGuy; + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 2, 0); _vm->setGrabCursorSprite(-1); } else if (_vm->_grabCursorSpriteIndex == kItemQuarterWithHole) { - _vm->_gnap->walkTo(Common::Point(3, 7), 0, 0x107BC, 9); - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->_actionStatus = kAS12QuarterWithHoleToToothGuy; - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 2, 0); + gnap.walkTo(Common::Point(3, 7), 0, 0x107BC, 9); + gnap._idleFacing = kDirUpLeft; + gnap._actionStatus = kAS12QuarterWithHoleToToothGuy; + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 2, 0); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->walkTo(Common::Point(3, 7), 0, 0x107BC, 9); - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->_actionStatus = kAS12ShowItemToToothGuy; - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 2, 0); + gnap.walkTo(Common::Point(3, 7), 0, 0x107BC, 9); + gnap._idleFacing = kDirUpLeft; + gnap._actionStatus = kAS12ShowItemToToothGuy; + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 2, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(1, 2); + gnap.playScratchingHead(1, 2); break; case GRAB_CURSOR: - _vm->_gnap->walkTo(Common::Point(3, 7), 0, 0x107BC, 1); - _vm->_gnap->_actionStatus = kAS12GrabToothGuy; + gnap.walkTo(Common::Point(3, 7), 0, 0x107BC, 1); + gnap._actionStatus = kAS12GrabToothGuy; break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(Common::Point(3, 7), 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS12TalkToothGuy; + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(Common::Point(3, 7), 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS12TalkToothGuy; break; case PLAT_CURSOR: - _vm->_gnap->useDeviceOnPlatypus(); + gnap.useDeviceOnPlatypus(); _vm->_plat->walkTo(Common::Point(3, 7), 1, 0x107D2, 1); _vm->_plat->_actionStatus = kAS12PlatWithToothGuy; _vm->_plat->_idleFacing = kDirUnk4; - _vm->_gnap->playIdle(2, 7); + gnap.playIdle(2, 7); break; } } @@ -1090,34 +1096,34 @@ void Scene12::run() { case kHS12Barkeeper: if (_vm->_grabCursorSpriteIndex == kItemQuarter || _vm->_grabCursorSpriteIndex == kItemQuarterWithHole) { - _vm->_gnap->walkTo(Common::Point(6, 6), 0, 0x107BB, 9); - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->_actionStatus = kAS12QuarterWithBarkeeper; - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 7, 0); + gnap.walkTo(Common::Point(6, 6), 0, 0x107BB, 9); + gnap._idleFacing = kDirUpRight; + gnap._actionStatus = kAS12QuarterWithBarkeeper; + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 7, 0); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->walkTo(Common::Point(6, 6), 0, 0x107BB, 9); - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->_actionStatus = kAS12ShowItemToBarkeeper; - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 7, 0); + gnap.walkTo(Common::Point(6, 6), 0, 0x107BB, 9); + gnap._idleFacing = kDirUpRight; + gnap._actionStatus = kAS12ShowItemToBarkeeper; + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 7, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->walkTo(Common::Point(6, 6), 0, 0x107BB, 1); - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->_actionStatus = kAS12LookBarkeeper; + gnap.walkTo(Common::Point(6, 6), 0, 0x107BB, 1); + gnap._idleFacing = kDirUpRight; + gnap._actionStatus = kAS12LookBarkeeper; break; case GRAB_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(Common::Point(6, 6), 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS12TalkBarkeeper; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(Common::Point(6, 6), 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS12TalkBarkeeper; break; case PLAT_CURSOR: - _vm->_gnap->playPullOutDevice(_vm->_plat->_pos.x, _vm->_plat->_pos.y); - gameSys.setAnimation(makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, 0); - _vm->_gnap->_actionStatus = kAS12PlatWithBarkeeper; + gnap.playPullOutDevice(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gameSys.setAnimation(makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, 0); + gnap._actionStatus = kAS12PlatWithBarkeeper; break; } } @@ -1125,34 +1131,34 @@ void Scene12::run() { case kHS12BeardGuy: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->walkTo(Common::Point(7, 6), 0, 0x107BB, 9); - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->_actionStatus = kAS12ShowItemToBeardGuy; - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 8, 0); + gnap.walkTo(Common::Point(7, 6), 0, 0x107BB, 9); + gnap._idleFacing = kDirUpRight; + gnap._actionStatus = kAS12ShowItemToBeardGuy; + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 8, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->walkTo(Common::Point(7, 6), 0, 0x107BB, 1); - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->_actionStatus = kAS12LookBeardGuy; + gnap.walkTo(Common::Point(7, 6), 0, 0x107BB, 1); + gnap._idleFacing = kDirUpRight; + gnap._actionStatus = kAS12LookBeardGuy; break; case GRAB_CURSOR: // NOTE Bug in the original. It has 9 as flags which seems wrong here. - _vm->_gnap->walkTo(Common::Point(7, 6), 0, 0x107BB, 1); - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->_actionStatus = kAS12GrabBeardGuy; + gnap.walkTo(Common::Point(7, 6), 0, 0x107BB, 1); + gnap._idleFacing = kDirUpRight; + gnap._actionStatus = kAS12GrabBeardGuy; break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(Common::Point(7, 6), 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS12TalkBeardGuy; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(Common::Point(7, 6), 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS12TalkBeardGuy; break; case PLAT_CURSOR: - _vm->_gnap->useDeviceOnPlatypus(); + gnap.useDeviceOnPlatypus(); _vm->_plat->walkTo(Common::Point(7, 6), 1, 0x107C2, 1); _vm->_plat->_actionStatus = kAS12PlatWithBeardGuy; _vm->_plat->_idleFacing = kDirNone; - _vm->_gnap->playIdle(7, 6); + gnap.playIdle(7, 6); break; } } @@ -1161,21 +1167,21 @@ void Scene12::run() { case kHS12Jukebox: _vm->_newSceneNum = 15; _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(5, 6), 0, 0x107BC, 1); - _vm->_gnap->_actionStatus = kAS12LeaveScene; + gnap.walkTo(Common::Point(5, 6), 0, 0x107BC, 1); + gnap._actionStatus = kAS12LeaveScene; break; case kHS12WalkArea1: case kHS12WalkArea2: case kHS12WalkArea3: case kHS12WalkArea4: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -1186,11 +1192,11 @@ void Scene12::run() { if (!_vm->_isLeavingScene) { _vm->_plat->updateIdleSequence(); - _vm->_gnap->updateIdleSequence(); + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = 15; if (_nextToothGuySequenceId == -1) { - if (v18 == 0 && _currBeardGuySequenceId == 0x202 && _currBarkeeperSequenceId == 0x203 && _vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0) { + if (v18 == 0 && _currBeardGuySequenceId == 0x202 && _currBarkeeperSequenceId == 0x203 && gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0) { if (_vm->getRandom(2) != 0) _nextToothGuySequenceId = 0x1EC; else @@ -1202,8 +1208,8 @@ void Scene12::run() { } if (!_vm->_timers[5]) { _vm->_timers[5] = _vm->getRandom(30) + 20; - if (_nextBarkeeperSequenceId == -1 && _vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0) { - if (v18 == 0 && _currToothGuySequenceId == 0x200 && _currBeardGuySequenceId == 0x202 && _vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0) { + if (_nextBarkeeperSequenceId == -1 && gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0) { + if (v18 == 0 && _currToothGuySequenceId == 0x200 && _currBeardGuySequenceId == 0x202 && gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0) { if (_vm->getRandom(2) != 0) _nextBarkeeperSequenceId = 0x208; else @@ -1215,8 +1221,8 @@ void Scene12::run() { } if (!_vm->_timers[6]) { _vm->_timers[6] = _vm->getRandom(30) + 15; - if (_nextBeardGuySequenceId == -1 && _vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0) { - if (v18 == 0 && _currToothGuySequenceId == 0x200 && _currBarkeeperSequenceId == 0x203 && _vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0) + if (_nextBeardGuySequenceId == -1 && gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0) { + if (v18 == 0 && _currToothGuySequenceId == 0x200 && _currBarkeeperSequenceId == 0x203 && gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0) _nextBeardGuySequenceId = 0x1F2; else _nextBeardGuySequenceId = 0x202; @@ -1257,10 +1263,11 @@ void Scene12::run() { void Scene12::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS12LeaveScene: _vm->_sceneDone = true; break; @@ -1308,7 +1315,7 @@ void Scene12::updateAnimations() { } break; case kAS12QuarterToToothGuyDone: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; _vm->showCursor(); gameSys.removeSpriteDrawItem(_vm->_largeSprite, 300); _vm->deleteSurface(&_vm->_largeSprite); @@ -1367,13 +1374,13 @@ void Scene12::updateAnimations() { gameSys.setAnimation(0, 0, 2); _vm->hideCursor(); gameSys.setAnimation(0x10843, 301, 0); - _vm->_gnap->_actionStatus = kAS12QuarterToToothGuyDone; + gnap._actionStatus = kAS12QuarterToToothGuyDone; gameSys.insertSpriteDrawItem(_vm->_largeSprite, 0, 0, 300); - gameSys.insertSequence(0x10843, 301, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - gameSys.insertSequence(0x107B7, _vm->_gnap->_id, 0x10843, 301, - kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); - _vm->_gnap->_sequenceId = 0x7B7; - _vm->_gnap->_sequenceDatNum = 1; + gameSys.insertSequence(0x10843, 301, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x107B7, gnap._id, 0x10843, 301, + kSeqSyncWait, 0, 75 * gnap._pos.x - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); + gnap._sequenceId = 0x7B7; + gnap._sequenceDatNum = 1; _vm->setFlag(kGFTwigTaken); _vm->invAdd(kItemQuarterWithHole); _vm->invRemove(kItemQuarter); @@ -1381,34 +1388,34 @@ void Scene12::updateAnimations() { if (_nextToothGuySequenceId == 0x1EF) { gameSys.setAnimation(_nextToothGuySequenceId, 50, 2); gameSys.insertSequence(_nextToothGuySequenceId, 50, _currToothGuySequenceId, 50, kSeqSyncWait, 0, 0, 0); - gameSys.insertSequence(0x205, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x205, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); _currToothGuySequenceId = _nextToothGuySequenceId; _nextToothGuySequenceId = -1; - _vm->_gnap->_sequenceId = 0x205; - _vm->_gnap->_sequenceDatNum = 0; + gnap._sequenceId = 0x205; + gnap._sequenceDatNum = 0; _vm->_timers[4] = 40; _vm->_timers[2] = _vm->getRandom(20) + 70; _vm->_timers[3] = _vm->getRandom(50) + 200; - if (_vm->_gnap->_actionStatus == kAS12GrabToothGuy) - _vm->_gnap->_actionStatus = -1; + if (gnap._actionStatus == kAS12GrabToothGuy) + gnap._actionStatus = -1; } else if (_nextToothGuySequenceId != -1) { gameSys.insertSequence(_nextToothGuySequenceId, 50, _currToothGuySequenceId, 50, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(_nextToothGuySequenceId, 50, 2); _currToothGuySequenceId = _nextToothGuySequenceId; _nextToothGuySequenceId = -1; _vm->_timers[4] = 50; - if (_vm->_gnap->_actionStatus >= kAS12TalkToothGuy && _vm->_gnap->_actionStatus <= kAS12QuarterToToothGuy && _currToothGuySequenceId != 0x1E9 && + if (gnap._actionStatus >= kAS12TalkToothGuy && gnap._actionStatus <= kAS12QuarterToToothGuy && _currToothGuySequenceId != 0x1E9 && _currToothGuySequenceId != 0x1EC && _currToothGuySequenceId != 0x200) - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; if (_vm->_plat->_actionStatus == kAS12PlatWithToothGuy) _vm->_plat->_actionStatus = -1; } } if (gameSys.getAnimationStatus(3) == 2) { - if (_vm->_gnap->_actionStatus == kAS12PlatWithBarkeeper && _currBarkeeperSequenceId == 0x1F9) { - _vm->_gnap->_actionStatus = -1; - _vm->_gnap->playIdle(7, 6); + if (gnap._actionStatus == kAS12PlatWithBarkeeper && _currBarkeeperSequenceId == 0x1F9) { + gnap._actionStatus = -1; + gnap.playIdle(7, 6); _vm->_timers[5] = 0; } if (_nextBarkeeperSequenceId != -1) { @@ -1417,9 +1424,9 @@ void Scene12::updateAnimations() { _currBarkeeperSequenceId = _nextBarkeeperSequenceId; _nextBarkeeperSequenceId = -1; _vm->_timers[5] = _vm->getRandom(30) + 20; - if (_vm->_gnap->_actionStatus >= kAS12TalkBarkeeper && _vm->_gnap->_actionStatus <= kAS12QuarterWithBarkeeper && _currBarkeeperSequenceId != 0x203 && + if (gnap._actionStatus >= kAS12TalkBarkeeper && gnap._actionStatus <= kAS12QuarterWithBarkeeper && _currBarkeeperSequenceId != 0x203 && _currBarkeeperSequenceId != 0x1FB && _currBarkeeperSequenceId != 0x208) - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } } @@ -1429,8 +1436,8 @@ void Scene12::updateAnimations() { _currBeardGuySequenceId = _nextBeardGuySequenceId; _nextBeardGuySequenceId = -1; _vm->_timers[6] = _vm->getRandom(30) + 20; - if (_vm->_gnap->_actionStatus >= kAS12TalkBeardGuy && _vm->_gnap->_actionStatus <= kAS12ShowItemToBeardGuy && _currBeardGuySequenceId != 0x202 && _currBeardGuySequenceId != 0x1F2) - _vm->_gnap->_actionStatus = -1; + if (gnap._actionStatus >= kAS12TalkBeardGuy && gnap._actionStatus <= kAS12ShowItemToBeardGuy && _currBeardGuySequenceId != 0x202 && _currBeardGuySequenceId != 0x1F2) + gnap._actionStatus = -1; if (_vm->_plat->_actionStatus == kAS12PlatWithBeardGuy) _vm->_plat->_actionStatus = -1; } @@ -1488,17 +1495,18 @@ void Scene13::showScribble() { void Scene13::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; + int currSoundId = 0; _vm->queueInsertDeviceIcon(); - gameSys.insertSequence(0xAA, 256, 0, 0, kSeqNone, 0, 0, 0); if (_vm->_prevSceneNum == 14) { - _vm->_gnap->initPos(6, 6, kDirBottomLeft); + gnap.initPos(6, 6, kDirBottomLeft); _vm->_plat->initPos(9, 8, kDirNone); } else { - _vm->_gnap->initPos(3, 7, kDirBottomRight); + gnap.initPos(3, 7, kDirBottomRight); _vm->_plat->initPos(2, 7, kDirNone); } @@ -1521,7 +1529,7 @@ void Scene13::run() { switch (_vm->_sceneClickedHotspot) { case kHS13Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); _vm->_timers[4] = _vm->getRandom(20) + 20; @@ -1532,13 +1540,13 @@ void Scene13::run() { case kHS13Platypus: switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: @@ -1548,8 +1556,8 @@ void Scene13::run() { case kHS13ExitBar: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(2, 7), 0, 0x107C0, 1); - _vm->_gnap->_actionStatus = kAS13LeaveScene; + gnap.walkTo(Common::Point(2, 7), 0, 0x107C0, 1); + gnap._actionStatus = kAS13LeaveScene; _vm->_plat->walkTo(Common::Point(2, 8), -1, -1, 1); if (_vm->isFlag(kGFUnk14) || _vm->isFlag(kGFSpringTaken)) { _vm->_newSceneNum = 11; @@ -1561,30 +1569,30 @@ void Scene13::run() { case kHS13BackToilet: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(5, 5, 6, 0); + gnap.playShowCurrItem(5, 5, 6, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: case GRAB_CURSOR: case TALK_CURSOR: - if (_vm->_gnap->_pos == Common::Point(5, 5)) { + if (gnap._pos == Common::Point(5, 5)) { _backToiletCtr = MIN(5, _backToiletCtr + 1); - gameSys.setAnimation(_backToiletCtr + 0xA3, _vm->_gnap->_id, 0); - gameSys.insertSequence(_backToiletCtr + 0xA3, _vm->_gnap->_id, - makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, + gameSys.setAnimation(_backToiletCtr + 0xA3, gnap._id, 0); + gameSys.insertSequence(_backToiletCtr + 0xA3, gnap._id, + makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqScale | kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_actionStatus = kAS13Wait; - _vm->_gnap->_sequenceId = _backToiletCtr + 0xA3; - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->_sequenceDatNum = 0; + gnap._actionStatus = kAS13Wait; + gnap._sequenceId = _backToiletCtr + 0xA3; + gnap._idleFacing = kDirUpRight; + gnap._sequenceDatNum = 0; } else { - _vm->_gnap->walkTo(Common::Point(5, 5), 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS13BackToilet; - _vm->_gnap->_idleFacing = kDirUpRight; + gnap.walkTo(Common::Point(5, 5), 0, 0x107BB, 1); + gnap._actionStatus = kAS13BackToilet; + gnap._idleFacing = kDirUpRight; } break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1592,16 +1600,16 @@ void Scene13::run() { case kHS13FrontToilet: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(6, 7, 7, 0); + gnap.playShowCurrItem(6, 7, 7, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: case GRAB_CURSOR: case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->walkTo(Common::Point(6, 7), 0, 0xA9, 5); - _vm->_gnap->_actionStatus = kAS13FrontToilet; - _vm->_gnap->_idleFacing = kDirBottomRight; + gnap.walkTo(Common::Point(6, 7), 0, 0xA9, 5); + gnap._actionStatus = kAS13FrontToilet; + gnap._idleFacing = kDirBottomRight; break; } } @@ -1609,23 +1617,23 @@ void Scene13::run() { case kHS13Scribble: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(7, 7, 8, 0); + gnap.playShowCurrItem(7, 7, 8, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->walkTo(Common::Point(7, 7), 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS13LookScribble; - _vm->_gnap->_idleFacing = kDirUpRight; + gnap.walkTo(Common::Point(7, 7), 0, 0x107BB, 1); + gnap._actionStatus = kAS13LookScribble; + gnap._idleFacing = kDirUpRight; break; case GRAB_CURSOR: - _vm->_gnap->playScratchingHead(0, 0); + gnap.playScratchingHead(0, 0); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(Common::Point(7, 7), -1, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)), 1); + gnap._idleFacing = kDirUpRight; + gnap.walkTo(Common::Point(7, 7), -1, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)), 1); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1633,21 +1641,21 @@ void Scene13::run() { case kHS13Urinal: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(8, 7, 9, 0); + gnap.playShowCurrItem(8, 7, 9, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playSequence(_vm->_gnap->getSequenceId(gskDeflect, Common::Point(9, 6))); - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, -1, 1); - _vm->_gnap->_actionStatus = kAS13Wait; + gnap.playSequence(gnap.getSequenceId(gskDeflect, Common::Point(9, 6))); + gnap.walkTo(gnap._pos, 0, -1, 1); + gnap._actionStatus = kAS13Wait; break; case GRAB_CURSOR: - _vm->_gnap->walkTo(Common::Point(8, 7), 0, -1, 1); - _vm->_gnap->_actionStatus = kAS13GrabUrinal; + gnap.walkTo(Common::Point(8, 7), 0, -1, 1); + gnap._actionStatus = kAS13GrabUrinal; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1655,21 +1663,21 @@ void Scene13::run() { case kHS13Sink: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playSequence(_vm->_gnap->getSequenceId(gskDeflect, Common::Point(5, 9))); - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, -1, 1); - _vm->_gnap->_actionStatus = kAS13Wait; + gnap.playSequence(gnap.getSequenceId(gskDeflect, Common::Point(5, 9))); + gnap.walkTo(gnap._pos, 0, -1, 1); + gnap._actionStatus = kAS13Wait; break; case GRAB_CURSOR: - _vm->_gnap->walkTo(Common::Point(4, 8), 0, 0x107B9, 1); - _vm->_gnap->_actionStatus = kAS13GrabSink; + gnap.walkTo(Common::Point(4, 8), 0, 0x107B9, 1); + gnap._actionStatus = kAS13GrabSink; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1683,7 +1691,7 @@ void Scene13::run() { case kHS13WalkArea7: case kHS13WalkArea8: case kHS13WalkArea9: - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; case kHS13WalkArea1: @@ -1692,7 +1700,7 @@ void Scene13::run() { default: if (_vm->_mouseClickState._left) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -1704,8 +1712,8 @@ void Scene13::run() { _vm->_plat->updateIdleSequence(); if (_vm->_plat->_pos.y == 5 || _vm->_plat->_pos.y == 6) _vm->_plat->walkTo(Common::Point(-1, 7), -1, -1, 1); - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0) + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(20) + 20; switch (_vm->getRandom(5)) { @@ -1769,58 +1777,59 @@ void Scene13::run() { void Scene13::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS13LeaveScene: _vm->_sceneDone = true; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS13BackToilet: _backToiletCtr = MIN(5, _backToiletCtr + 1); - gameSys.insertSequence(_backToiletCtr + 0xA3, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, 9, 0, 0, 0); - _vm->_gnap->_sequenceId = _backToiletCtr + 0xA3; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = -1; + gameSys.insertSequence(_backToiletCtr + 0xA3, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, 9, 0, 0, 0); + gnap._sequenceId = _backToiletCtr + 0xA3; + gnap._sequenceDatNum = 0; + gnap._actionStatus = -1; break; case kAS13FrontToilet: _vm->_sceneDone = true; _vm->_newSceneNum = 14; break; case kAS13LookScribble: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; showScribble(); break; case kAS13GrabSink: gameSys.setAnimation(0xAB, 160, 0); - gameSys.insertSequence(0xAB, 160, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0xAB, 160, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.removeSequence(0xAA, 256, true); - _vm->_gnap->_sequenceId = 0xAB; - _vm->_gnap->_id = 160; - _vm->_gnap->_idleFacing = kDirBottomRight; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_pos = Common::Point(4, 8); + gnap._sequenceId = 0xAB; + gnap._id = 160; + gnap._idleFacing = kDirBottomRight; + gnap._sequenceDatNum = 0; + gnap._pos = Common::Point(4, 8); _vm->_timers[2] = 360; - _vm->_gnap->_actionStatus = kAS13GrabSinkDone; + gnap._actionStatus = kAS13GrabSinkDone; break; case kAS13GrabSinkDone: gameSys.insertSequence(0xAA, 256, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS13Wait: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS13GrabUrinal: gameSys.setAnimation(0xA2, 120, 0); - gameSys.insertSequence(0xA2, 120, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0xA2; - _vm->_gnap->_id = 120; - _vm->_gnap->_idleFacing = kDirBottomLeft; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_pos = Common::Point(4, 6); + gameSys.insertSequence(0xA2, 120, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0xA2; + gnap._id = 120; + gnap._idleFacing = kDirBottomLeft; + gnap._sequenceDatNum = 0; + gnap._pos = Common::Point(4, 6); _vm->_timers[2] = 360; - _vm->_gnap->_actionStatus = kAS13Wait; + gnap._actionStatus = kAS13Wait; break; } } @@ -1857,6 +1866,7 @@ void Scene14::updateHotspots() { void Scene14::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->_largeSprite = nullptr; _vm->queueInsertDeviceIcon(); @@ -1871,7 +1881,7 @@ void Scene14::run() { if (!_vm->isFlag(kGFNeedleTaken)) { gameSys.insertSequence(0x24, 10, 0x23, 10, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x24; + gnap._sequenceId = 0x24; _vm->_timers[2] = _vm->getRandom(40) + 50; } @@ -1884,7 +1894,7 @@ void Scene14::run() { switch (_vm->_sceneClickedHotspot) { case kHS14Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } @@ -1902,7 +1912,7 @@ void Scene14::run() { _vm->setGrabCursorSprite(-1); _vm->hideCursor(); gameSys.setAnimation(0x26, 10, 0); - gameSys.insertSequence(0x26, 10, _vm->_gnap->_sequenceId, 10, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x26, 10, gnap._sequenceId, 10, kSeqSyncWait, 0, 0, 0); } else if (_vm->_grabCursorSpriteIndex >= 0) { _vm->playSound(0x108E9, false); } else { @@ -1911,15 +1921,15 @@ void Scene14::run() { _vm->playSound(0x108E9, false); break; case GRAB_CURSOR: - gameSys.insertSequence(0x25, 10, _vm->_gnap->_sequenceId, 10, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x25, 10, gnap._sequenceId, 10, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(0x23, 10, 0x25, 10, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x23; + gnap._sequenceId = 0x23; break; case TALK_CURSOR: _vm->playSound((_vm->getRandom(5) + 0x8D5) | 0x10000, false); break; case PLAT_CURSOR: - gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnap->_gridX, 576 - _vm->_gnap->_gridY); + gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - gnap._gridX, 576 - gnap._gridY); break; } } @@ -1927,7 +1937,7 @@ void Scene14::run() { case kHS14Toilet: if (_vm->_grabCursorSpriteIndex >= 0) { - gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnap->_gridX, 576 - _vm->_gnap->_gridY); + gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - gnap._gridX, 576 - gnap._gridY); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: @@ -1938,7 +1948,7 @@ void Scene14::run() { _vm->playSound((_vm->getRandom(5) + 0x8D5) | 0x10000, false); break; case PLAT_CURSOR: - gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnap->_gridX, 576 - _vm->_gnap->_gridY); + gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - gnap._gridX, 576 - gnap._gridY); break; } } @@ -1953,8 +1963,8 @@ void Scene14::run() { _vm->checkGameKeys(); if (!_vm->isFlag(kGFNeedleTaken) && !_vm->_timers[2]) { - gameSys.insertSequence(0x24, 10, _vm->_gnap->_sequenceId, 10, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x24; + gameSys.insertSequence(0x24, 10, gnap._sequenceId, 10, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x24; _vm->_timers[2] = _vm->getRandom(40) + 50; } @@ -2029,6 +2039,7 @@ void Scene15::updateHotspots() { void Scene15::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _currSlotSequenceId = -1; _currUpperButtonSequenceId = -1; @@ -2060,7 +2071,7 @@ void Scene15::run() { switch (_vm->_sceneClickedHotspot) { case kHS15Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } @@ -2077,7 +2088,7 @@ void Scene15::run() { } else if (_vm->_grabCursorSpriteIndex == kItemDiceQuarterHole) { _nextSlotSequenceId = 0xDB; } else if (_vm->_grabCursorSpriteIndex >= 0) { - gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnap->_gridX, 576 - _vm->_gnap->_gridY); + gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - gnap._gridX, 576 - gnap._gridY); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: @@ -2088,7 +2099,7 @@ void Scene15::run() { _vm->playSound((_vm->getRandom(5) + 0x8D5) | 0x10000, false); break; case PLAT_CURSOR: - gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnap->_gridX, 576 - _vm->_gnap->_gridY); + gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - gnap._gridX, 576 - gnap._gridY); break; } } @@ -2096,7 +2107,7 @@ void Scene15::run() { case kHS15PlayButton: if (_vm->_grabCursorSpriteIndex >= 0) { - gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnap->_gridX, 576 - _vm->_gnap->_gridY); + gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - gnap._gridX, 576 - gnap._gridY); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: @@ -2115,7 +2126,7 @@ void Scene15::run() { _vm->playSound((_vm->getRandom(5) + 0x8D5) | 0x10000, false); break; case PLAT_CURSOR: - gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnap->_gridX, 576 - _vm->_gnap->_gridY); + gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - gnap._gridX, 576 - gnap._gridY); break; } } @@ -2128,7 +2139,7 @@ void Scene15::run() { case kHS15Button5: case kHS15Button6: if (_vm->_grabCursorSpriteIndex >= 0) { - gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnap->_gridX, 576 - _vm->_gnap->_gridY); + gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - gnap._gridX, 576 - gnap._gridY); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: @@ -2141,7 +2152,7 @@ void Scene15::run() { _vm->playSound((_vm->getRandom(5) + 0x8D5) | 0x10000, false); break; case PLAT_CURSOR: - gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnap->_gridX, 576 - _vm->_gnap->_gridY); + gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - gnap._gridX, 576 - gnap._gridY); break; } } @@ -2154,7 +2165,7 @@ void Scene15::run() { case kHS15ButtonE: case kHS15ButtonF: if (_vm->_grabCursorSpriteIndex >= 0) { - gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnap->_gridX, 576 - _vm->_gnap->_gridY); + gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - gnap._gridX, 576 - gnap._gridY); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: @@ -2167,7 +2178,7 @@ void Scene15::run() { _vm->playSound((_vm->getRandom(5) + 0x8D5) | 0x10000, false); break; case PLAT_CURSOR: - gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnap->_gridX, 576 - _vm->_gnap->_gridY); + gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - gnap._gridX, 576 - gnap._gridY); break; } } @@ -2338,10 +2349,12 @@ void Scene17::update() { void Scene17::platHangUpPhone() { GameSys& gameSys = *_vm->_gameSys; - int savedGnapActionStatus = _vm->_gnap->_actionStatus; + PlayerGnap& gnap = *_vm->_gnap; + + int savedGnapActionStatus = gnap._actionStatus; if (_vm->_plat->_actionStatus == kAS17PlatPhoningAssistant) { - _vm->_gnap->_actionStatus = kAS17PlatHangUpPhone; + gnap._actionStatus = kAS17PlatHangUpPhone; _vm->updateMouseCursor(); _platPhoneCtr = 0; _vm->_plat->_actionStatus = -1; @@ -2358,7 +2371,7 @@ void Scene17::platHangUpPhone() { _vm->clearFlag(kGFPlatypusTalkingToAssistant); while (gameSys.getAnimationStatus(1) != 2) _vm->gameUpdateTick(); - _vm->_gnap->_actionStatus = savedGnapActionStatus; + gnap._actionStatus = savedGnapActionStatus; _vm->updateMouseCursor(); } updateHotspots(); @@ -2366,6 +2379,7 @@ void Scene17::platHangUpPhone() { void Scene17::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x10940, true); _vm->startSoundTimerA(8); @@ -2424,13 +2438,13 @@ void Scene17::run() { if (_vm->_prevSceneNum == 53 || _vm->_prevSceneNum == 18 || _vm->_prevSceneNum == 20 || _vm->_prevSceneNum == 19) { if (_vm->_prevSceneNum == 20) { - _vm->_gnap->initPos(4, 6, kDirBottomRight); + gnap.initPos(4, 6, kDirBottomRight); _vm->_plat->initPos(5, 6, kDirNone); _vm->endSceneInit(); _vm->_plat->walkTo(Common::Point(5, 9), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(4, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(4, 8), -1, 0x107B9, 1); } else if (_vm->isFlag(kGFUnk27)) { - _vm->_gnap->initPos(3, 9, kDirUpLeft); + gnap.initPos(3, 9, kDirUpLeft); _vm->_plat->_pos = _vm->_hotspotsWalkPos[2]; _vm->_plat->_id = 20 * _vm->_hotspotsWalkPos[2].y; gameSys.insertSequence(0x25A, 20 * _vm->_hotspotsWalkPos[2].y, 0, 0, kSeqNone, 0, 0, 0); @@ -2450,12 +2464,12 @@ void Scene17::run() { _vm->clearFlag(kGFSpringTaken); _vm->clearFlag(kGFUnk16); _vm->_plat->initPos(7, 9, kDirNone); - _vm->_gnap->_pos = _vm->_hotspotsWalkPos[2]; - _vm->_gnap->_id = 20 * _vm->_hotspotsWalkPos[2].y; + gnap._pos = _vm->_hotspotsWalkPos[2]; + gnap._id = 20 * _vm->_hotspotsWalkPos[2].y; gameSys.insertSequence(601, 20 * _vm->_hotspotsWalkPos[2].y, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 601; - _vm->_gnap->_actionStatus = kAS17GnapHangUpPhone; + gnap._sequenceDatNum = 0; + gnap._sequenceId = 601; + gnap._actionStatus = kAS17GnapHangUpPhone; _vm->clearFlag(kGFUnk25); gameSys.insertSequence(0x251, 254, 0, 0, kSeqNone, 0, 0, 0); _vm->endSceneInit(); @@ -2465,7 +2479,7 @@ void Scene17::run() { _vm->clearFlag(kGFSpringTaken); _vm->clearFlag(kGFUnk16); _vm->_sceneWaiting = true; - _vm->_gnap->initPos(3, 9, kDirUpLeft); + gnap.initPos(3, 9, kDirUpLeft); _vm->_plat->_pos = _vm->_hotspotsWalkPos[2]; _vm->_plat->_id = 20 * _vm->_hotspotsWalkPos[2].y; _currPhoneSequenceId = 0x251; @@ -2478,18 +2492,18 @@ void Scene17::run() { _vm->_plat->_actionStatus = kAS17PlatPhoningAssistant; updateHotspots(); } else if (_vm->_prevSceneNum == 18) { - _vm->_gnap->initPos(6, 6, kDirBottomRight); + gnap.initPos(6, 6, kDirBottomRight); _vm->_plat->initPos(5, 6, kDirNone); _vm->endSceneInit(); _vm->_plat->walkTo(Common::Point(5, 9), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(4, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(4, 8), -1, 0x107B9, 1); } else { if (_vm->isFlag(kGFSpringTaken)) { - _vm->_gnap->initPos(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y, kDirBottomRight); + gnap.initPos(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y, kDirBottomRight); _vm->_plat->initPos(1, 9, kDirNone); _vm->endSceneInit(); } else { - _vm->_gnap->initPos(3, 7, kDirBottomRight); + gnap.initPos(3, 7, kDirBottomRight); _vm->_plat->initPos(1, 7, kDirNone); _vm->endSceneInit(); } @@ -2498,12 +2512,12 @@ void Scene17::run() { _vm->endSceneInit(); } } else { - _vm->_gnap->_pos = Common::Point(3, 6); - _vm->_gnap->_id = 120; - _vm->_gnap->_sequenceId = 0x23D; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_idleFacing = kDirBottomRight; - gameSys.insertSequence(makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, 0, 0, kSeqNone, 0, 0, 0); + gnap._pos = Common::Point(3, 6); + gnap._id = 120; + gnap._sequenceId = 0x23D; + gnap._sequenceDatNum = 0; + gnap._idleFacing = kDirBottomRight; + gameSys.insertSequence(makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, 0, 0, kSeqNone, 0, 0, 0); _vm->_plat->_pos = Common::Point(-1, 8); _vm->_plat->_id = 160; gameSys.insertSequence(0x241, 160, 0, 0, kSeqNone, 0, 0, 0); @@ -2527,41 +2541,41 @@ void Scene17::run() { switch (_vm->_sceneClickedHotspot) { case kHS17Device: - if (_vm->_gnap->_actionStatus < 0 || _vm->_gnap->_actionStatus == 3) { + if (gnap._actionStatus < 0 || gnap._actionStatus == 3) { _vm->runMenu(); updateHotspots(); } break; case kHS17Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemJoint) { if (_vm->isFlag(kGFGrassTaken)) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else { - _vm->_gnap->useDeviceOnPlatypus(); + gnap.useDeviceOnPlatypus(); _vm->_plat->walkTo(_vm->_hotspotsWalkPos[6], 1, 0x107C2, 1); - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[6] + Common::Point(1, 0), 0, 0x107BA, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[6] + Common::Point(1, 0), 0, 0x107BA, 1); _vm->_plat->_actionStatus = kAS17GetWrench1; - _vm->_gnap->_actionStatus = kAS17GetWrench1; + gnap._actionStatus = kAS17GetWrench1; _vm->_timers[5] = _vm->getRandom(30) + 80; _vm->setGrabCursorSprite(-1); _vm->invRemove(kItemJoint); } } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: case GRAB_CURSOR: - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2569,30 +2583,30 @@ void Scene17::run() { break; case kHS17Wrench: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFGrassTaken)) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 8, 7); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 8, 7); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: case GRAB_CURSOR: - _vm->_gnap->playScratchingHead(8, 7); + gnap.playScratchingHead(8, 7); break; case TALK_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case PLAT_CURSOR: if (_canTryGetWrench) { platHangUpPhone(); - _vm->_gnap->useDeviceOnPlatypus(); + gnap.useDeviceOnPlatypus(); _vm->_plat->walkTo(_vm->_hotspotsWalkPos[6] + Common::Point(1, 0), 1, 0x107C2, 1); _vm->_plat->_actionStatus = kAS17TryGetWrench; - _vm->_gnap->_actionStatus = kAS17TryGetWrench; + gnap._actionStatus = kAS17TryGetWrench; _vm->_timers[5] = _vm->getRandom(30) + 80; } else - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2600,40 +2614,40 @@ void Scene17::run() { break; case kHS17Phone1: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemDiceQuarterHole) { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[2], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS17PutCoinIntoPhone; + gnap.walkTo(_vm->_hotspotsWalkPos[2], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS17PutCoinIntoPhone; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y, 1, 3); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y, 1, 3); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(1, 3); + gnap.playScratchingHead(1, 3); break; case GRAB_CURSOR: if (_vm->isFlag(kGFUnk18)) { platHangUpPhone(); - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, _vm->_gnap->getSequenceId(gskIdle, _vm->_hotspotsWalkPos[2]) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS17GetCoinFromPhone; + gnap.walkTo(gnap._pos, 0, gnap.getSequenceId(gskIdle, _vm->_hotspotsWalkPos[2]) | 0x10000, 1); + gnap._actionStatus = kAS17GetCoinFromPhone; } else - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case TALK_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case PLAT_CURSOR: if (_vm->isFlag(kGFUnk18)) { platHangUpPhone(); _vm->_isLeavingScene = true; - _vm->_gnap->useDeviceOnPlatypus(); + gnap.useDeviceOnPlatypus(); _vm->_plat->_idleFacing = kDirUpLeft; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[2], 1, 0x107C2, 1); _vm->setFlag(kGFUnk16); _vm->_plat->_actionStatus = kAS17PlatUsePhone; - _vm->_gnap->_actionStatus = kAS17PlatUsePhone; + gnap._actionStatus = kAS17PlatUsePhone; } else - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2641,43 +2655,43 @@ void Scene17::run() { break; case kHS17Phone2: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemDiceQuarterHole) { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[2], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS17PutCoinIntoPhone; + gnap.walkTo(_vm->_hotspotsWalkPos[2], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS17PutCoinIntoPhone; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y, 1, 3); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[2].x, _vm->_hotspotsWalkPos[2].y, 1, 3); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(1, 3); + gnap.playScratchingHead(1, 3); break; case GRAB_CURSOR: if (_vm->isFlag(kGFUnk18)) { platHangUpPhone(); _vm->_isLeavingScene = true; - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[2], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS17GnapUsePhone; + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(_vm->_hotspotsWalkPos[2], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS17GnapUsePhone; _vm->setFlag(kGFSpringTaken); } else - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case TALK_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case PLAT_CURSOR: if (_vm->isFlag(kGFUnk18)) { platHangUpPhone(); _vm->_isLeavingScene = true; - _vm->_gnap->useDeviceOnPlatypus(); + gnap.useDeviceOnPlatypus(); _vm->_plat->_idleFacing = kDirUpLeft; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[2], 1, 0x107C2, 1); _vm->setFlag(kGFUnk16); _vm->_plat->_actionStatus = kAS17PlatUsePhone; - _vm->_gnap->_actionStatus = kAS17PlatUsePhone; + gnap._actionStatus = kAS17PlatUsePhone; } else - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2685,25 +2699,25 @@ void Scene17::run() { break; case kHS17ExitToyStore: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 18; - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[5], 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS17LeaveScene; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[5], 0, 0x107BB, 1); + gnap._actionStatus = kAS17LeaveScene; if (_vm->_plat->_actionStatus != kAS17PlatPhoningAssistant) _vm->_plat->walkTo(_vm->_hotspotsWalkPos[5] + Common::Point(-1, 0), -1, 0x107C2, 1); } break; case kHS17ExitGrubCity: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { platHangUpPhone(); _vm->_isLeavingScene = true; _vm->_newSceneNum = 20; - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[3], 0, 0x107BC, 1); - _vm->_gnap->_actionStatus = kAS17LeaveScene; + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(_vm->_hotspotsWalkPos[3], 0, 0x107BC, 1); + gnap._actionStatus = kAS17LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[3] + Common::Point(1, 0), -1, 0x107C2, 1); } break; @@ -2711,13 +2725,13 @@ void Scene17::run() { case kHS17WalkArea1: case kHS17WalkArea2: case kHS17WalkArea3: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = 0; } break; @@ -2731,15 +2745,15 @@ void Scene17::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0) _vm->_plat->updateIdleSequence2(); - _vm->_gnap->updateIdleSequence2(); + gnap.updateIdleSequence2(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(100) + 200; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0) + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0) gameSys.insertSequence(0x22B, 21, 0, 0, kSeqNone, 0, 0, 0); } if (!_vm->_timers[7]) { _vm->_timers[7] = _vm->getRandom(100) + 100; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0) { switch (_vm->getRandom(3)) { case 0: gameSys.insertSequence(0x25C, 255, 0, 0, kSeqNone, 0, 0, 0); @@ -2829,51 +2843,52 @@ void Scene17::updateAnimations() { }; GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS17GetWrench1: - _vm->_gnap->_actionStatus = kAS17GetWrenchGnapReady; + gnap._actionStatus = kAS17GetWrenchGnapReady; break; case kAS17GetCoinFromPhone: - _vm->_gnap->playPullOutDevice(1, 3); - _vm->_gnap->playUseDevice(0, 0); + gnap.playPullOutDevice(1, 3); + gnap.playUseDevice(0, 0); gameSys.setAnimation(0x250, 100, 0); gameSys.insertSequence(0x250, 100, 591, 100, kSeqSyncWait, 0, 0, 0); _vm->invAdd(kItemDiceQuarterHole); _vm->clearFlag(kGFUnk18); - _vm->_gnap->_actionStatus = kAS17GetCoinFromPhoneDone; + gnap._actionStatus = kAS17GetCoinFromPhoneDone; break; case kAS17GetCoinFromPhoneDone: _vm->setGrabCursorSprite(kItemDiceQuarterHole); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS17PutCoinIntoPhone: - gameSys.setAnimation(0x24C, _vm->_gnap->_id, 0); - gameSys.insertSequence(0x24C, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x24C; + gameSys.setAnimation(0x24C, gnap._id, 0); + gameSys.insertSequence(0x24C, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x24C; _vm->invRemove(kItemDiceQuarterHole); _vm->setGrabCursorSprite(-1); _vm->setFlag(kGFUnk18); - _vm->_gnap->_actionStatus = kAS17PutCoinIntoPhoneDone; + gnap._actionStatus = kAS17PutCoinIntoPhoneDone; break; case kAS17PutCoinIntoPhoneDone: gameSys.insertSequence(0x24F, 100, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS17GnapUsePhone: - gameSys.setAnimation(0x24D, _vm->_gnap->_id, 0); - gameSys.insertSequence(0x24D, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_actionStatus = kAS17LeaveScene; + gameSys.setAnimation(0x24D, gnap._id, 0); + gameSys.insertSequence(0x24D, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._actionStatus = kAS17LeaveScene; _vm->_newSceneNum = 53; break; case kAS17GnapHangUpPhone: - gameSys.insertSequence(0x258, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x258; - _vm->_gnap->_actionStatus = -1; + gameSys.insertSequence(0x258, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x258; + gnap._actionStatus = -1; break; case kAS17LeaveScene: _vm->_sceneDone = true; @@ -2944,7 +2959,7 @@ void Scene17::updateAnimations() { if (gameSys.getAnimationStatus(2) == 2) { switch (_nextWrenchSequenceId) { case 0x233: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; gameSys.insertSequence(0x243, _vm->_plat->_id, _vm->_plat->_sequenceId | (_vm->_plat->_sequenceDatNum << 16), _vm->_plat->_id, kSeqSyncWait, 0, 0, 0); @@ -2956,7 +2971,7 @@ void Scene17::updateAnimations() { gameSys.setAnimation(0x243, _vm->_plat->_id, 1); break; case 0x234: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; gameSys.insertSequence(0x242, _vm->_plat->_id, _vm->_plat->_sequenceId | (_vm->_plat->_sequenceDatNum << 16), _vm->_plat->_id, kSeqSyncWait, 0, 0, 0); @@ -2991,7 +3006,7 @@ void Scene17::updateAnimations() { _nextWrenchSequenceId = -1; break; case 0x230: - if (_vm->_gnap->_actionStatus == kAS17GetWrenchGnapReady) { + if (gnap._actionStatus == kAS17GetWrenchGnapReady) { gameSys.setAnimation(0, 0, 2); if (_canTryGetWrench) { gameSys.insertSequence(0x22E, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0); @@ -2999,15 +3014,15 @@ void Scene17::updateAnimations() { _canTryGetWrench = false; } gameSys.setAnimation(0x23F, _vm->_plat->_id, 1); - gameSys.insertSequence(0x10875, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x10875, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(0x23F, _vm->_plat->_id, _vm->_plat->_sequenceId | (_vm->_plat->_sequenceDatNum << 16), _vm->_plat->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceDatNum = 1; + gnap._sequenceDatNum = 1; _vm->_plat->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x875; + gnap._sequenceId = 0x875; _vm->_plat->_sequenceId = 0x23F; - _vm->_gnap->walkTo(Common::Point(3, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(3, 8), -1, 0x107B9, 1); _vm->_plat->_actionStatus = kAS17GetWrench2; } break; @@ -3050,9 +3065,9 @@ void Scene17::updateAnimations() { gameSys.insertSequence(0x230, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(_nextCarWindowSequenceId, 40, _currCarWindowSequenceId, 40, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(0x240, _vm->_plat->_id, _vm->_plat->_sequenceId, _vm->_plat->_id, kSeqSyncWait, 0, 0, 0); - gameSys.insertSequence(0x23E, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x23E; - _vm->_gnap->_sequenceDatNum = 0; + gameSys.insertSequence(0x23E, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x23E; + gnap._sequenceDatNum = 0; _vm->_plat->_sequenceId = 0x240; _vm->_plat->_sequenceDatNum = 0; gameSys.setAnimation(0x24A, 40, 3); @@ -3072,7 +3087,7 @@ void Scene17::updateAnimations() { _currWrenchSequenceId = 0x22D; _nextWrenchSequenceId = -1; _vm->setFlag(kGFGrassTaken); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; _vm->_plat->_actionStatus = 2; updateHotspots(); _vm->_timers[5] = _vm->getRandom(30) + 80; @@ -3160,13 +3175,14 @@ void Scene18::updateHotspots() { void Scene18::gnapCarryGarbageCanTo(int gridX) { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; int gnapSeqId, gnapId, gnapDatNum, gnapGridX; int destGridX, direction; int curGridX = (_vm->_leftClickMouseX - _vm->_gridMinX + 37) / 75; - if (curGridX >= _vm->_gnap->_pos.x) + if (curGridX >= gnap._pos.x) destGridX = curGridX - 1; else destGridX = curGridX + 1; @@ -3181,30 +3197,30 @@ void Scene18::gnapCarryGarbageCanTo(int gridX) { if (nextGridX >= destGridX) nextGridX = destGridX; - if (nextGridX == _vm->_gnap->_pos.x) { - gnapSeqId = _vm->_gnap->_sequenceId; - gnapId = _vm->_gnap->_id; - gnapDatNum = _vm->_gnap->_sequenceDatNum; - gnapGridX = _vm->_gnap->_pos.x; - if (_vm->_gnap->_pos.x <= curGridX) + if (nextGridX == gnap._pos.x) { + gnapSeqId = gnap._sequenceId; + gnapId = gnap._id; + gnapDatNum = gnap._sequenceDatNum; + gnapGridX = gnap._pos.x; + if (gnap._pos.x <= curGridX) direction = 1; else direction = -1; } else { - if (_vm->_gnap->_pos.y == _vm->_plat->_pos.y) { - if (nextGridX >= _vm->_gnap->_pos.x) { - if (nextGridX >= _vm->_plat->_pos.x && _vm->_gnap->_pos.x <= _vm->_plat->_pos.x) + if (gnap._pos.y == _vm->_plat->_pos.y) { + if (nextGridX >= gnap._pos.x) { + if (nextGridX >= _vm->_plat->_pos.x && gnap._pos.x <= _vm->_plat->_pos.x) _vm->_plat->makeRoom(); - } else if (nextGridX <= _vm->_plat->_pos.x && _vm->_gnap->_pos.x >= _vm->_plat->_pos.x) { + } else if (nextGridX <= _vm->_plat->_pos.x && gnap._pos.x >= _vm->_plat->_pos.x) { _vm->_plat->makeRoom(); } } - gnapSeqId = _vm->_gnap->_sequenceId; - gnapId = _vm->_gnap->_id; - gnapDatNum = _vm->_gnap->_sequenceDatNum; - gnapGridX = _vm->_gnap->_pos.x; + gnapSeqId = gnap._sequenceId; + gnapId = gnap._id; + gnapDatNum = gnap._sequenceDatNum; + gnapGridX = gnap._pos.x; int seqId; - if (nextGridX < _vm->_gnap->_pos.x) { + if (nextGridX < gnap._pos.x) { direction = -1; seqId = 0x204; } else { @@ -3212,14 +3228,14 @@ void Scene18::gnapCarryGarbageCanTo(int gridX) { seqId = 0x203; } - int seqId2 = 20 * _vm->_gnap->_pos.y + 1; + int seqId2 = 20 * gnap._pos.y + 1; do { - if (_vm->isPointBlocked(gnapGridX + direction, _vm->_gnap->_pos.y)) + if (_vm->isPointBlocked(gnapGridX + direction, gnap._pos.y)) break; seqId2 += direction; gameSys.insertSequence(seqId, seqId2, gnapSeqId | (gnapDatNum << 16), gnapId, - kSeqSyncWait, 0, 75 * gnapGridX - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); + kSeqSyncWait, 0, 75 * gnapGridX - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); gnapSeqId = seqId; gnapId = seqId2; gnapDatNum = 0; @@ -3228,51 +3244,52 @@ void Scene18::gnapCarryGarbageCanTo(int gridX) { } if (direction == 1) - _vm->_gnap->_sequenceId = 0x20A; + gnap._sequenceId = 0x20A; else - _vm->_gnap->_sequenceId = 0x209; - _vm->_gnap->_sequenceDatNum = 0; + gnap._sequenceId = 0x209; + gnap._sequenceDatNum = 0; if (direction == 1) - _vm->_gnap->_idleFacing = kDirBottomRight; + gnap._idleFacing = kDirBottomRight; else - _vm->_gnap->_idleFacing = kDirBottomLeft; + gnap._idleFacing = kDirBottomLeft; - _vm->_gnap->_id = 20 * _vm->_gnap->_pos.y + 1; + gnap._id = 20 * gnap._pos.y + 1; - gameSys.setAnimation(makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, 0); - gameSys.insertSequence(makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, + gameSys.setAnimation(makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, 0); + gameSys.insertSequence(makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, gnapSeqId | (gnapDatNum << 16), gnapId, - kSeqScale | kSeqSyncWait, 0, 75 * gnapGridX - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); + kSeqScale | kSeqSyncWait, 0, 75 * gnapGridX - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); - _vm->_gnap->_pos.x = gnapGridX; + gnap._pos.x = gnapGridX; } void Scene18::putDownGarbageCan(int animationIndex) { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (animationIndex >= 0) { while (gameSys.getAnimationStatus(animationIndex) != 2) _vm->gameUpdateTick(); } - if (_vm->_gnap->_idleFacing != kDirNone && _vm->_gnap->_idleFacing != kDirBottomRight && _vm->_gnap->_idleFacing != kDirUpRight) - _vm->_s18GarbageCanPos = _vm->_gnap->_pos.x - 1; + if (gnap._idleFacing != kDirNone && gnap._idleFacing != kDirBottomRight && gnap._idleFacing != kDirUpRight) + _vm->_s18GarbageCanPos = gnap._pos.x - 1; else - _vm->_s18GarbageCanPos = _vm->_gnap->_pos.x + 1; + _vm->_s18GarbageCanPos = gnap._pos.x + 1; _vm->clearFlag(kGFPlatypusDisguised); updateHotspots(); - if (_vm->_gnap->_idleFacing != kDirNone && _vm->_gnap->_idleFacing != kDirBottomRight && _vm->_gnap->_idleFacing != kDirUpRight) { - gameSys.insertSequence(0x107BA, _vm->_gnap->_id, - makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, - kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); - _vm->_gnap->_sequenceId = 0x7BA; + if (gnap._idleFacing != kDirNone && gnap._idleFacing != kDirBottomRight && gnap._idleFacing != kDirUpRight) { + gameSys.insertSequence(0x107BA, gnap._id, + makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, + kSeqSyncWait, 0, 75 * gnap._pos.x - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); + gnap._sequenceId = 0x7BA; } else { - gameSys.insertSequence(0x107B9, _vm->_gnap->_id, - makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, - kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); - _vm->_gnap->_sequenceId = 0x7B9; + gameSys.insertSequence(0x107B9, gnap._id, + makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, + kSeqSyncWait, 0, 75 * gnap._pos.x - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); + gnap._sequenceId = 0x7B9; } - _vm->_gnap->_sequenceDatNum = 1; + gnap._sequenceDatNum = 1; gameSys.insertSequence(0x1FB, 19, 0, 0, kSeqNone, 0, 15 * (5 * _vm->_s18GarbageCanPos - 40), 0); gameSys.setAnimation(0x1FA, 19, 4); gameSys.insertSequence(0x1FA, 19, 507, 19, kSeqSyncWait, 0, 15 * (5 * _vm->_s18GarbageCanPos - 40), 0); @@ -3308,26 +3325,30 @@ void Scene18::platEndPhoning(bool platFl) { } void Scene18::closeHydrantValve() { - _vm->_gnap->_actionStatus = kAS18LeaveScene; + PlayerGnap& gnap = *_vm->_gnap; + + gnap._actionStatus = kAS18LeaveScene; _vm->updateMouseCursor(); if (_vm->isFlag(kGFTruckFilledWithGas)) { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS18HydrantRightValve], 0, 0x107BA, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[kHS18HydrantRightValve], 0, 0x107BA, 1); if (_vm->isFlag(kGFTruckKeysUsed)) { - _vm->_gnap->_actionStatus = kAS18CloseRightValveWithGarbageCan; + gnap._actionStatus = kAS18CloseRightValveWithGarbageCan; waitForGnapAction(); } else { - _vm->_gnap->_actionStatus = kAS18CloseRightValveNoGarbageCan; + gnap._actionStatus = kAS18CloseRightValveNoGarbageCan; waitForGnapAction(); } } else if (_vm->isFlag(kGFBarnPadlockOpen)) { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS18HydrantTopValve], 0, 0x107BA, 1); - _vm->_gnap->_actionStatus = kAS18CloseTopValve; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS18HydrantTopValve], 0, 0x107BA, 1); + gnap._actionStatus = kAS18CloseTopValve; waitForGnapAction(); } } void Scene18::waitForGnapAction() { - while (_vm->_gnap->_actionStatus >= 0) { + PlayerGnap& gnap = *_vm->_gnap; + + while (gnap._actionStatus >= 0) { updateAnimations(); _vm->gameUpdateTick(); } @@ -3335,6 +3356,7 @@ void Scene18::waitForGnapAction() { void Scene18::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _cowboyHatSurface = nullptr; @@ -3370,9 +3392,9 @@ void Scene18::run() { if (_vm->isFlag(kGFPlatypusTalkingToAssistant)) { if (_vm->_prevSceneNum == 17) - _vm->_gnap->initPos(4, 11, kDirBottomRight); + gnap.initPos(4, 11, kDirBottomRight); else - _vm->_gnap->initPos(4, 7, kDirBottomRight); + gnap.initPos(4, 7, kDirBottomRight); _platPhoneCtr = _vm->getRandom(5); if (_vm->isFlag(kGFUnk27)) { gameSys.insertSequence(0x21E, 254, 0, 0, kSeqNone, 0, 0, 0); @@ -3393,7 +3415,7 @@ void Scene18::run() { } else { gameSys.setAnimation(_currPhoneSequenceId, 254, 3); } - _vm->_gnap->walkTo(Common::Point(4, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(4, 8), -1, 0x107B9, 1); } else { if (_vm->isFlag(kGFGnapControlsToyUFO)) { _vm->clearFlag(kGFGnapControlsToyUFO); @@ -3401,22 +3423,22 @@ void Scene18::run() { _vm->_prevSceneNum = 19; } if (_vm->_prevSceneNum == 17) { - _vm->_gnap->initPos(4, 11, kDirBottomRight); + gnap.initPos(4, 11, kDirBottomRight); _vm->_plat->initPos(5, 11, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(4, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(4, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(5, 9), -1, 0x107C2, 1); } else if (_vm->_prevSceneNum == 19) { - _vm->_gnap->initPos(7, 7, kDirBottomRight); + gnap.initPos(7, 7, kDirBottomRight); _vm->_plat->initPos(8, 7, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(7, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(7, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(8, 8), -1, 0x107C2, 1); } else { - _vm->_gnap->initPos(-1, 10, kDirBottomRight); + gnap.initPos(-1, 10, kDirBottomRight); _vm->_plat->initPos(-1, 10, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(3, 7), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(3, 7), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(3, 8), -1, 0x107C2, 1); } } @@ -3432,36 +3454,36 @@ void Scene18::run() { switch (_vm->_sceneClickedHotspot) { case kHS18Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS18Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFPlatypusDisguised)) { gnapCarryGarbageCanTo(-1); putDownGarbageCan(0); } if (_vm->_grabCursorSpriteIndex == kItemJoint) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, _vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playShowItem(_vm->_grabCursorSpriteIndex, _vm->_plat->_pos.x, _vm->_plat->_pos.y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -3469,27 +3491,27 @@ void Scene18::run() { break; case kHS18CowboyHat: - if (_vm->_gnap->_actionStatus == kAS18StandingOnHydrant) { - _vm->_gnap->_actionStatus = kAS18GrabCowboyHat; + if (gnap._actionStatus == kAS18StandingOnHydrant) { + gnap._actionStatus = kAS18GrabCowboyHat; _vm->_sceneWaiting = false; - } else if (_vm->_gnap->_actionStatus < 0) { + } else if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFPlatypusDisguised)) { gnapCarryGarbageCanTo(-1); putDownGarbageCan(0); } if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS18CowboyHat].x, _vm->_hotspotsWalkPos[kHS18CowboyHat].y, 3, 2); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS18CowboyHat].x, _vm->_hotspotsWalkPos[kHS18CowboyHat].y, 3, 2); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(3, 2); + gnap.playScratchingHead(3, 2); break; case GRAB_CURSOR: - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS18CowboyHat], 0, _vm->_gnap->getSequenceId(gskPullOutDeviceNonWorking, Common::Point(3, 2)) | 0x10000, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[kHS18CowboyHat], 0, gnap.getSequenceId(gskPullOutDeviceNonWorking, Common::Point(3, 2)) | 0x10000, 1); break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -3497,43 +3519,43 @@ void Scene18::run() { break; case kHS18GarbageCan: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFUnk14)) { if (_vm->_grabCursorSpriteIndex >= 0) - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS18GarbageCan].x, _vm->_hotspotsWalkPos[kHS18GarbageCan].y, 1, 5); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS18GarbageCan].x, _vm->_hotspotsWalkPos[kHS18GarbageCan].y, 1, 5); else - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { if (_vm->isFlag(kGFPlatypusTalkingToAssistant)) platEndPhoning(true); if (_vm->_grabCursorSpriteIndex >= 0) { if (!_vm->isFlag(kGFTruckKeysUsed)) - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS18GarbageCan].x - (_vm->_gnap->_pos.x < _vm->_s18GarbageCanPos ? 1 : -1), + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS18GarbageCan].x - (gnap._pos.x < _vm->_s18GarbageCanPos ? 1 : -1), _vm->_hotspotsWalkPos[kHS18GarbageCan].y, _vm->_hotspotsWalkPos[kHS18GarbageCan].x, _vm->_hotspotsWalkPos[kHS18GarbageCan].y); else - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS18GarbageCan].x, _vm->_hotspotsWalkPos[kHS18GarbageCan].y, 2, 4); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS18GarbageCan].x, _vm->_hotspotsWalkPos[kHS18GarbageCan].y, 2, 4); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: if (!_vm->isFlag(kGFTruckKeysUsed)) - _vm->_gnap->playScratchingHead(_vm->_hotspotsWalkPos[kHS18GarbageCan].x - (_vm->_gnap->_pos.x < _vm->_s18GarbageCanPos ? 1 : -1), _vm->_hotspotsWalkPos[kHS18GarbageCan].y); + gnap.playScratchingHead(_vm->_hotspotsWalkPos[kHS18GarbageCan].x - (gnap._pos.x < _vm->_s18GarbageCanPos ? 1 : -1), _vm->_hotspotsWalkPos[kHS18GarbageCan].y); else if (!_vm->isFlag(kGFTruckFilledWithGas)) - _vm->_gnap->playScratchingHead(2, 4); + gnap.playScratchingHead(2, 4); break; case GRAB_CURSOR: if (!_vm->isFlag(kGFTruckKeysUsed)) { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS18GarbageCan] + Common::Point((_vm->_gnap->_pos.x < _vm->_s18GarbageCanPos ? 1 : -1), 0), + gnap.walkTo(_vm->_hotspotsWalkPos[kHS18GarbageCan] + Common::Point((gnap._pos.x < _vm->_s18GarbageCanPos ? 1 : -1), 0), -1, -1, 1); - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(_vm->_s18GarbageCanPos, _vm->_gnap->_pos.y)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS18GrabGarbageCanFromStreet; + gnap.walkTo(gnap._pos, 0, gnap.getSequenceId(gskIdle, Common::Point(_vm->_s18GarbageCanPos, gnap._pos.y)) | 0x10000, 1); + gnap._actionStatus = kAS18GrabGarbageCanFromStreet; } else if (!_vm->isFlag(kGFTruckFilledWithGas)) { - if (_vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS18GarbageCan], 0, -1, 1)) - _vm->_gnap->_actionStatus = kAS18GrabGarbageCanFromHydrant; + if (gnap.walkTo(_vm->_hotspotsWalkPos[kHS18GarbageCan], 0, -1, 1)) + gnap._actionStatus = kAS18GrabGarbageCanFromHydrant; } break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -3542,64 +3564,64 @@ void Scene18::run() { break; case kHS18HydrantTopValve: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFPlatypusDisguised)) { // While carrying garbage can if (_vm->_grabCursorSpriteIndex >= 0) { gnapCarryGarbageCanTo(-1); putDownGarbageCan(0); - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 0, 0); + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: gnapCarryGarbageCanTo(-1); putDownGarbageCan(0); - _vm->_gnap->playScratchingHead(0, 0); + gnap.playScratchingHead(0, 0); break; case GRAB_CURSOR: if (_vm->isFlag(kGFTruckFilledWithGas)) { gnapCarryGarbageCanTo(2); - _vm->_gnap->_actionStatus = kAS18PutGarbageCanOnRunningHydrant; + gnap._actionStatus = kAS18PutGarbageCanOnRunningHydrant; } else if (!_vm->isFlag(kGFBarnPadlockOpen)) { gnapCarryGarbageCanTo(2); - _vm->_gnap->_actionStatus = kAS18PutGarbageCanOnHydrant; + gnap._actionStatus = kAS18PutGarbageCanOnHydrant; } else { gnapCarryGarbageCanTo(-1); putDownGarbageCan(0); - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } break; case TALK_CURSOR: case PLAT_CURSOR: gnapCarryGarbageCanTo(-1); putDownGarbageCan(0); - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } } else { if (_vm->_grabCursorSpriteIndex == kItemWrench) { - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(2, 8)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS18OpenTopValve; + gnap.walkTo(gnap._pos, 0, gnap.getSequenceId(gskIdle, Common::Point(2, 8)) | 0x10000, 1); + gnap._actionStatus = kAS18OpenTopValve; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS18HydrantTopValve].x, _vm->_hotspotsWalkPos[kHS18HydrantTopValve].y, 1, 5); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS18HydrantTopValve].x, _vm->_hotspotsWalkPos[kHS18HydrantTopValve].y, 1, 5); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(1, 5); + gnap.playScratchingHead(1, 5); break; case GRAB_CURSOR: if (_vm->isFlag(kGFBarnPadlockOpen)) { _vm->_hotspots[kHS18WalkArea2]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS18HydrantTopValve], 0, 0x107BA, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[kHS18HydrantTopValve], 0, 0x107BA, 1); _vm->_hotspots[kHS18WalkArea2]._flags &= ~SF_WALKABLE; - _vm->_gnap->_actionStatus = kAS18CloseTopValve; + gnap._actionStatus = kAS18CloseTopValve; } else - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -3608,12 +3630,12 @@ void Scene18::run() { break; case kHS18HydrantRightValve: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFUnk14)) { if (_vm->_grabCursorSpriteIndex == -1) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS18HydrantRightValve].x, _vm->_hotspotsWalkPos[kHS18HydrantRightValve].y, 1, 5); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS18HydrantRightValve].x, _vm->_hotspotsWalkPos[kHS18HydrantRightValve].y, 1, 5); } } else { if (_vm->isFlag(kGFPlatypusDisguised)) { @@ -3621,30 +3643,30 @@ void Scene18::run() { putDownGarbageCan(0); } if (_vm->_grabCursorSpriteIndex == kItemWrench) { - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(2, 8)) | 0x10000, 1); + gnap.walkTo(gnap._pos, 0, gnap.getSequenceId(gskIdle, Common::Point(2, 8)) | 0x10000, 1); if (_vm->isFlag(kGFTruckKeysUsed)) - _vm->_gnap->_actionStatus = kAS18OpenRightValveWithGarbageCan; + gnap._actionStatus = kAS18OpenRightValveWithGarbageCan; else - _vm->_gnap->_actionStatus = kAS18OpenRightValveNoGarbageCan; + gnap._actionStatus = kAS18OpenRightValveNoGarbageCan; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS18HydrantRightValve].x, _vm->_hotspotsWalkPos[kHS18HydrantRightValve].y, 1, 5); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS18HydrantRightValve].x, _vm->_hotspotsWalkPos[kHS18HydrantRightValve].y, 1, 5); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(1, 5); + gnap.playScratchingHead(1, 5); break; case GRAB_CURSOR: if (_vm->isFlag(kGFTruckFilledWithGas)) { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS18HydrantRightValve], 0, 0x107BA, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[kHS18HydrantRightValve], 0, 0x107BA, 1); if (_vm->isFlag(kGFTruckKeysUsed)) - _vm->_gnap->_actionStatus = kAS18CloseRightValveWithGarbageCan; + gnap._actionStatus = kAS18CloseRightValveWithGarbageCan; else - _vm->_gnap->_actionStatus = kAS18CloseRightValveNoGarbageCan; + gnap._actionStatus = kAS18CloseRightValveNoGarbageCan; } break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -3653,18 +3675,18 @@ void Scene18::run() { break; case kHS18ExitToyStore: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFPlatypusDisguised)) { gnapCarryGarbageCanTo(-1); putDownGarbageCan(0); } if (_vm->isFlag(kGFPictureTaken)) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { _vm->_isLeavingScene = true; _vm->_newSceneNum = 19; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS18ExitToyStore], 0, 0x107C0, 1); - _vm->_gnap->_actionStatus = kAS18LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS18ExitToyStore], 0, 0x107C0, 1); + gnap._actionStatus = kAS18LeaveScene; if (!_vm->isFlag(kGFPlatypusTalkingToAssistant)) _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS18ExitToyStore] + Common::Point(1, 0), -1, 0x107C2, 1); } @@ -3672,7 +3694,7 @@ void Scene18::run() { break; case kHS18ExitPhoneBooth: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFPlatypusDisguised)) { gnapCarryGarbageCanTo(-1); putDownGarbageCan(0); @@ -3680,8 +3702,8 @@ void Scene18::run() { closeHydrantValve(); _vm->_isLeavingScene = true; _vm->_newSceneNum = 17; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS18ExitPhoneBooth], 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = kAS18LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS18ExitPhoneBooth], 0, 0x107AE, 1); + gnap._actionStatus = kAS18LeaveScene; if (_vm->isFlag(kGFPlatypusTalkingToAssistant)) _vm->setFlag(kGFUnk27); else @@ -3690,7 +3712,7 @@ void Scene18::run() { break; case kHS18ExitGrubCity: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFPlatypusDisguised)) { gnapCarryGarbageCanTo(-1); putDownGarbageCan(0); @@ -3699,8 +3721,8 @@ void Scene18::run() { _vm->_isLeavingScene = true; _vm->_newSceneNum = 20; _vm->_hotspots[kHS18WalkArea2]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS18ExitGrubCity], 0, 0x107B2, 1); - _vm->_gnap->_actionStatus = kAS18LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS18ExitGrubCity], 0, 0x107B2, 1); + gnap._actionStatus = kAS18LeaveScene; if (_vm->isFlag(kGFPlatypusTalkingToAssistant)) platEndPhoning(false); else @@ -3711,24 +3733,24 @@ void Scene18::run() { case kHS18WalkArea1: case kHS18WalkArea2: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFPlatypusDisguised)) { gnapCarryGarbageCanTo(-1); putDownGarbageCan(0); } else { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); } _vm->_mouseClickState._left = false; } break; default: - if (_vm->_gnap->_actionStatus != kAS18StandingOnHydrant && _vm->_mouseClickState._left) { + if (gnap._actionStatus != kAS18StandingOnHydrant && _vm->_mouseClickState._left) { if (_vm->isFlag(kGFPlatypusDisguised)) { gnapCarryGarbageCanTo(-1); putDownGarbageCan(0); } else { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); } _vm->_mouseClickState._left = false; } @@ -3741,9 +3763,9 @@ void Scene18::run() { _vm->playSound(0x10940, true); if ((_vm->isFlag(kGFTruckFilledWithGas) || _vm->isFlag(kGFBarnPadlockOpen)) && !_vm->isSoundPlaying(0x22B) && - _vm->_gnap->_actionStatus != kAS18OpenRightValveNoGarbageCanDone && _vm->_gnap->_actionStatus != kAS18OpenRightValveNoGarbageCan && - _vm->_gnap->_actionStatus != kAS18OpenTopValve && _vm->_gnap->_actionStatus != kAS18OpenTopValveDone && - _vm->_gnap->_actionStatus != kAS18OpenRightValveWithGarbageCan && _vm->_gnap->_actionStatus != kAS18OpenRightValveWithGarbageCanDone) + gnap._actionStatus != kAS18OpenRightValveNoGarbageCanDone && gnap._actionStatus != kAS18OpenRightValveNoGarbageCan && + gnap._actionStatus != kAS18OpenTopValve && gnap._actionStatus != kAS18OpenTopValveDone && + gnap._actionStatus != kAS18OpenRightValveWithGarbageCan && gnap._actionStatus != kAS18OpenRightValveWithGarbageCanDone) _vm->playSound(0x22B, true); if (!_vm->_isLeavingScene) { @@ -3765,7 +3787,7 @@ void Scene18::run() { } if (!_vm->_timers[5]) { _vm->_timers[5] = _vm->getRandom(100) + 100; - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->getRandom(2) == 1) gameSys.insertSequence(0x220, 255, 0, 0, kSeqNone, 0, 0, 0); else @@ -3775,7 +3797,7 @@ void Scene18::run() { _vm->playSoundA(); } if (!_vm->isFlag(kGFPlatypusDisguised)) - _vm->_gnap->updateIdleSequence(); + gnap.updateIdleSequence(); } _vm->checkGameKeys(); @@ -3795,67 +3817,68 @@ void Scene18::run() { void Scene18::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS18GrabGarbageCanFromStreet: - if (_vm->_gnap->_idleFacing != kDirUpRight && _vm->_gnap->_idleFacing != kDirBottomRight) { - gameSys.insertSequence(0x1FC, _vm->_gnap->_id, - makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, - kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - 675, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x1FC; + if (gnap._idleFacing != kDirUpRight && gnap._idleFacing != kDirBottomRight) { + gameSys.insertSequence(0x1FC, gnap._id, + makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, + kSeqSyncWait, 0, 75 * gnap._pos.x - 675, 0); + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x1FC; } else { - gameSys.insertSequence(0x1FD, _vm->_gnap->_id, - makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, - kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - 525, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x1FD; + gameSys.insertSequence(0x1FD, gnap._id, + makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, + kSeqSyncWait, 0, 75 * gnap._pos.x - 525, 0); + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x1FD; } gameSys.removeSequence(0x1FA, 19, true); _vm->setFlag(kGFPlatypusDisguised); updateHotspots(); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS18GrabGarbageCanFromHydrant: - gameSys.insertSequence(0x1FE, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x1FE, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.removeSequence(0x1F9, 19, true); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x1FE; + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x1FE; _vm->clearFlag(kGFTruckKeysUsed); _vm->setFlag(kGFPlatypusDisguised); updateHotspots(); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS18CloseRightValveNoGarbageCan: - gameSys.insertSequence(0x205, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x205, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.removeSequence(0x20D, 39, true); gameSys.removeSequence(0x212, 39, true); gameSys.removeSequence(0x211, 39, true); _vm->stopSound(0x22B); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x205; + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x205; _vm->clearFlag(kGFTruckFilledWithGas); _vm->invAdd(kItemWrench); _vm->setGrabCursorSprite(kItemWrench); updateHotspots(); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS18OpenTopValve: _vm->setFlag(kGFBarnPadlockOpen); updateHotspots(); - _vm->_gnap->playPullOutDevice(2, 7); - _vm->_gnap->playUseDevice(0, 0); + gnap.playPullOutDevice(2, 7); + gnap.playUseDevice(0, 0); gameSys.insertSequence(0x20C, 19, 0, 0, kSeqNone, 0, 0, 0); _vm->_hotspots[kHS18WalkArea2]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS18HydrantTopValve], 0, 0x107BB, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[kHS18HydrantTopValve], 0, 0x107BB, 1); _vm->_hotspots[kHS18WalkArea2]._flags &= ~SF_WALKABLE; - _vm->_gnap->_actionStatus = kAS18OpenTopValveDone; + gnap._actionStatus = kAS18OpenTopValveDone; break; case kAS18OpenTopValveDone: _vm->setGrabCursorSprite(-1); - gameSys.insertSequence(0x208, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x208, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(0x216, 39, 0, 0, kSeqNone, 21, 0, 0); gameSys.removeSequence(0x20C, 19, true); gameSys.setAnimation(0x217, 39, 5); @@ -3864,32 +3887,32 @@ void Scene18::updateAnimations() { _vm->gameUpdateTick(); _vm->playSound(0x22B, true); gameSys.insertSequence(0x20E, 39, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x208; + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x208; _vm->invRemove(kItemWrench); _vm->setGrabCursorSprite(-1); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS18CloseTopValve: - gameSys.insertSequence(0x206, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x206, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.removeSequence(0x20E, 39, true); gameSys.removeSequence(0x216, 39, true); gameSys.removeSequence(0x217, 39, true); _vm->stopSound(0x22B); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x206; + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x206; _vm->clearFlag(kGFBarnPadlockOpen); _vm->invAdd(kItemWrench); _vm->setGrabCursorSprite(kItemWrench); updateHotspots(); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS18GrabCowboyHat: - gameSys.setAnimation(0x200, _vm->_gnap->_id, 0); - gameSys.insertSequence(0x200, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x200; - _vm->_gnap->_actionStatus = kAS18GrabCowboyHatDone; + gameSys.setAnimation(0x200, gnap._id, 0); + gameSys.insertSequence(0x200, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x200; + gnap._actionStatus = kAS18GrabCowboyHatDone; break; case kAS18GrabCowboyHatDone: _vm->hideCursor(); @@ -3908,55 +3931,55 @@ void Scene18::updateAnimations() { _vm->setFlag(kGFTruckKeysUsed); _vm->setFlag(kGFUnk14); // Useless, already set updateHotspots(); - _vm->_gnap->_actionStatus = kAS18LeaveScene; + gnap._actionStatus = kAS18LeaveScene; break; case kAS18LeaveScene: _vm->_sceneDone = true; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS18PutGarbageCanOnRunningHydrant: _vm->setFlag(kGFTruckKeysUsed); _vm->clearFlag(kGFPlatypusDisguised); gameSys.requestRemoveSequence(0x211, 39); gameSys.requestRemoveSequence(0x212, 39); - gameSys.insertSequence(0x210, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x210, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); _vm->stopSound(0x22B); - gameSys.setAnimation(0x210, _vm->_gnap->_id, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x210; - _vm->_gnap->_actionStatus = kAS18PutGarbageCanOnRunningHydrant2; + gameSys.setAnimation(0x210, gnap._id, 0); + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x210; + gnap._actionStatus = kAS18PutGarbageCanOnRunningHydrant2; break; case kAS18PutGarbageCanOnRunningHydrant2: _vm->playSound(0x22B, true); - gameSys.setAnimation(0x1FF, _vm->_gnap->_id, 0); - gameSys.insertSequence(0x1FF, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x1FF; + gameSys.setAnimation(0x1FF, gnap._id, 0); + gameSys.insertSequence(0x1FF, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x1FF; _vm->_sceneWaiting = true; - _vm->_gnap->_actionStatus = kAS18StandingOnHydrant; + gnap._actionStatus = kAS18StandingOnHydrant; break; case kAS18StandingOnHydrant: - gameSys.setAnimation(0x1FF, _vm->_gnap->_id, 0); - gameSys.insertSequence(0x1FF, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.setAnimation(0x1FF, gnap._id, 0); + gameSys.insertSequence(0x1FF, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); break; case kAS18OpenRightValveNoGarbageCan: case kAS18OpenRightValveWithGarbageCan: _vm->setFlag(kGFTruckFilledWithGas); updateHotspots(); - _vm->_gnap->playPullOutDevice(2, 7); - _vm->_gnap->playUseDevice(0, 0); + gnap.playPullOutDevice(2, 7); + gnap.playUseDevice(0, 0); gameSys.insertSequence(0x20B, 19, 0, 0, kSeqNone, 0, 0, 0); _vm->_hotspots[kHS18WalkArea2]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS18HydrantRightValve], 0, 0x107BA, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[kHS18HydrantRightValve], 0, 0x107BA, 1); _vm->_hotspots[kHS18WalkArea2]._flags &= ~SF_WALKABLE; - if (_vm->_gnap->_actionStatus == kAS18OpenRightValveNoGarbageCan) - _vm->_gnap->_actionStatus = kAS18OpenRightValveNoGarbageCanDone; + if (gnap._actionStatus == kAS18OpenRightValveNoGarbageCan) + gnap._actionStatus = kAS18OpenRightValveNoGarbageCanDone; else - _vm->_gnap->_actionStatus = kAS18OpenRightValveWithGarbageCanDone; + gnap._actionStatus = kAS18OpenRightValveWithGarbageCanDone; break; case kAS18OpenRightValveWithGarbageCanDone: _vm->setGrabCursorSprite(-1); - gameSys.insertSequence(0x207, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x207, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(0x213, 39, 0, 0, kSeqNone, 21, 0, 0); gameSys.requestRemoveSequence(0x1F9, 19); gameSys.removeSequence(0x20B, 19, true); @@ -3966,14 +3989,14 @@ void Scene18::updateAnimations() { _vm->gameUpdateTick(); _vm->playSound(0x22B, true); gameSys.insertSequence(0x20D, 39, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x207; + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x207; _vm->invRemove(kItemWrench); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS18OpenRightValveNoGarbageCanDone: _vm->setGrabCursorSprite(-1); - gameSys.insertSequence(0x207, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x207, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(0x211, 39, 0, 0, kSeqNone, 21, 0, 0); gameSys.removeSequence(0x20B, 19, true); gameSys.setAnimation(0x211, 39, 5); @@ -3982,13 +4005,13 @@ void Scene18::updateAnimations() { _vm->gameUpdateTick(); _vm->playSound(0x22B, true); gameSys.insertSequence(0x20D, 39, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x207; + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x207; _vm->invRemove(kItemWrench); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS18CloseRightValveWithGarbageCan: - gameSys.insertSequence(0x205, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0x205, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.removeSequence(0x20D, 39, true); gameSys.insertSequence(0x215, 39, 0x214, 39, kSeqSyncWait, 0, 0, 0); _vm->stopSound(0x22B); @@ -3997,28 +4020,28 @@ void Scene18::updateAnimations() { _vm->clearFlag(kGFTruckFilledWithGas); _vm->invAdd(kItemWrench); _vm->setGrabCursorSprite(kItemWrench); - gameSys.insertSequence(0x107B5, _vm->_gnap->_id, 517, _vm->_gnap->_id, kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); + gameSys.insertSequence(0x107B5, gnap._id, 517, gnap._id, kSeqSyncWait, 0, 75 * gnap._pos.x - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); updateHotspots(); - _vm->_gnap->_sequenceDatNum = 1; - _vm->_gnap->_sequenceId = 0x7B5; - _vm->_gnap->_actionStatus = kAS18CloseRightValveWithGarbageCanDone; + gnap._sequenceDatNum = 1; + gnap._sequenceId = 0x7B5; + gnap._actionStatus = kAS18CloseRightValveWithGarbageCanDone; break; case kAS18CloseRightValveWithGarbageCanDone: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS18PutGarbageCanOnHydrant: _vm->setFlag(kGFTruckKeysUsed); _vm->clearFlag(kGFPlatypusDisguised); - gameSys.insertSequence(0x20F, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - gameSys.setAnimation(0x20F, _vm->_gnap->_id, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x20F; - _vm->_gnap->_actionStatus = kAS18PutGarbageCanOnHydrantDone; + gameSys.insertSequence(0x20F, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gameSys.setAnimation(0x20F, gnap._id, 0); + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x20F; + gnap._actionStatus = kAS18PutGarbageCanOnHydrantDone; break; case kAS18PutGarbageCanOnHydrantDone: - gameSys.insertSequence(0x1F9, 19, 0x20F, _vm->_gnap->_id, kSeqNone, 0, 0, 0); + gameSys.insertSequence(0x1F9, 19, 0x20F, gnap._id, kSeqNone, 0, 0, 0); updateHotspots(); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -4096,6 +4119,7 @@ void Scene19::updateHotspots() { void Scene19::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->queueInsertDeviceIcon(); _toyGrabCtr = 0; @@ -4108,7 +4132,7 @@ void Scene19::run() { gameSys.insertSequence(0x69, 19, 0, 0, kSeqNone, 0, 0, 0); if (_vm->isFlag(kGFPlatypusTalkingToAssistant)) { - _vm->_gnap->initPos(3, 6, kDirBottomRight); + gnap.initPos(3, 6, kDirBottomRight); _currShopAssistantSequenceId = kS19ShopAssistantSequenceIds[_vm->getRandom(5)]; _nextShopAssistantSequenceId = _currShopAssistantSequenceId; gameSys.setAnimation(_currShopAssistantSequenceId, 20, 4); @@ -4116,7 +4140,7 @@ void Scene19::run() { gameSys.insertSequence(_currShopAssistantSequenceId, 20, 0, 0, kSeqNone, 0, 0, 0); _shopAssistantCtr = 0; _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(4, 9), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(4, 9), -1, 0x107B9, 1); updateHotspots(); } else { _currShopAssistantSequenceId = 0x6D; @@ -4124,10 +4148,10 @@ void Scene19::run() { gameSys.setAnimation(0x6D, 20, 4); gameSys.insertSequence(_currShopAssistantSequenceId, 20, 0, 0, kSeqNone, 0, 0, 0); _vm->_timers[6] = _vm->getRandom(40) + 50; - _vm->_gnap->initPos(3, 6, kDirBottomRight); + gnap.initPos(3, 6, kDirBottomRight); _vm->_plat->initPos(4, 6, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(4, 9), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(4, 9), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(5, 9), -1, 0x107C2, 1); } @@ -4142,32 +4166,32 @@ void Scene19::run() { switch (_vm->_sceneClickedHotspot) { case kHS19Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS19Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemJoint) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -4175,12 +4199,12 @@ void Scene19::run() { break; case kHS19ExitOutsideToyStore: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 18; _vm->_hotspots[kHS19WalkArea1]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[1], 0, 0x107B2, 1); - _vm->_gnap->_actionStatus = kAS19LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[1], 0, 0x107B2, 1); + gnap._actionStatus = kAS19LeaveScene; if (_vm->isFlag(kGFPlatypusTalkingToAssistant)) _vm->setFlag(kGFUnk27); else @@ -4190,23 +4214,23 @@ void Scene19::run() { break; case kHS19Picture: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 6, 2); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 6, 2); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(6, 2); + gnap.playScratchingHead(6, 2); break; case GRAB_CURSOR: if (!_vm->isFlag(kGFPictureTaken)) { - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, _vm->_gnap->getSequenceId(gskIdle, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot]) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS19GrabPicture; + gnap.walkTo(gnap._pos, 0, gnap.getSequenceId(gskIdle, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot]) | 0x10000, 1); + gnap._actionStatus = kAS19GrabPicture; } break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -4214,22 +4238,22 @@ void Scene19::run() { break; case kHS19ShopAssistant: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 6, 2); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 6, 2); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(6, 2); + gnap.playScratchingHead(6, 2); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS19TalkShopAssistant; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS19TalkShopAssistant; break; case GRAB_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -4243,22 +4267,22 @@ void Scene19::run() { case kHS19Toy5: case kHS19Toy6: case kHS19Toy7: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y); + gnap.playImpossible(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan2(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y); + gnap.playMoan2(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y); break; case GRAB_CURSOR: - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot], 0, -1, 1); - _vm->_gnap->playIdle(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y); - _vm->_gnap->_actionStatus = kAS19GrabToy; + gnap.walkTo(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot], 0, -1, 1); + gnap.playIdle(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y); + gnap._actionStatus = kAS19GrabToy; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -4266,22 +4290,22 @@ void Scene19::run() { break; case kHS19Phone: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 9, 1); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].x, _vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot].y, 9, 1); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(9, 1); + gnap.playScratchingHead(9, 1); break; case GRAB_CURSOR: - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot], 0, -1, 1); - _vm->_gnap->playIdle(8, 2); - _vm->_gnap->_actionStatus = kAS19UsePhone; + gnap.walkTo(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot], 0, -1, 1); + gnap.playIdle(8, 2); + gnap._actionStatus = kAS19UsePhone; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -4291,13 +4315,13 @@ void Scene19::run() { case kHS19WalkArea1: case kHS19WalkArea2: case kHS19WalkArea3: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: if (_vm->_mouseClickState._left) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = 0; } } @@ -4305,7 +4329,7 @@ void Scene19::run() { updateAnimations(); if (!_vm->_isLeavingScene) { - _vm->_gnap->updateIdleSequence(); + gnap.updateIdleSequence(); if (!_vm->isFlag(kGFPlatypusTalkingToAssistant)) { _vm->_plat->updateIdleSequence(); if (!_vm->_timers[6] && _nextShopAssistantSequenceId == -1) { @@ -4338,10 +4362,11 @@ void Scene19::run() { void Scene19::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS19UsePhone: _nextShopAssistantSequenceId = 0x67; break; @@ -4363,14 +4388,14 @@ void Scene19::updateAnimations() { } break; case kAS19GrabPicture: - _vm->_gnap->playPullOutDevice(6, 2); - _vm->_gnap->playUseDevice(0, 0); + gnap.playPullOutDevice(6, 2); + gnap.playUseDevice(0, 0); gameSys.setAnimation(0x68, 19, 0); gameSys.insertSequence(0x68, 19, 105, 19, kSeqSyncWait, 0, 0, 0); _vm->invAdd(kItemPicture); _vm->setFlag(kGFPictureTaken); updateHotspots(); - _vm->_gnap->_actionStatus = kAS19GrabPictureDone; + gnap._actionStatus = kAS19GrabPictureDone; break; case kAS19GrabPictureDone: _vm->setGrabCursorSprite(-1); @@ -4391,7 +4416,7 @@ void Scene19::updateAnimations() { break; case kAS19TalkShopAssistant: _nextShopAssistantSequenceId = 0x6D; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS19LeaveScene: _vm->_sceneDone = true; @@ -4424,24 +4449,24 @@ void Scene19::updateAnimations() { while (_vm->_timers[5]) { _vm->gameUpdateTick(); } - _vm->_gnap->playIdle(6, 2); - _vm->_gnap->_actionStatus = -1; + gnap.playIdle(6, 2); + gnap._actionStatus = -1; break; case 0x67: gameSys.setAnimation(_nextShopAssistantSequenceId, 20, 4); gameSys.insertSequence(_nextShopAssistantSequenceId, 20, _currShopAssistantSequenceId, 20, kSeqSyncWait, 0, 0, 0); _currShopAssistantSequenceId = _nextShopAssistantSequenceId; _nextShopAssistantSequenceId = -1; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case 0x65: - _vm->_gnap->playIdle(6, 2); + gnap.playIdle(6, 2); gameSys.setAnimation(_nextShopAssistantSequenceId, 20, 0); gameSys.insertSequence(_nextShopAssistantSequenceId, 20, _currShopAssistantSequenceId, 20, kSeqSyncWait, 0, 0, 0); _currShopAssistantSequenceId = _nextShopAssistantSequenceId; _nextShopAssistantSequenceId = -1; _vm->_newSceneNum = 18; - _vm->_gnap->_actionStatus = kAS19LeaveScene; + gnap._actionStatus = kAS19LeaveScene; break; case 0x6D: gameSys.setAnimation(_nextShopAssistantSequenceId, 20, 4); diff --git a/engines/gnap/scenes/group2.cpp b/engines/gnap/scenes/group2.cpp index 8c49bf606b..c4f578de93 100644 --- a/engines/gnap/scenes/group2.cpp +++ b/engines/gnap/scenes/group2.cpp @@ -55,6 +55,7 @@ void Scene20::updateHotspots() { void Scene20::updateAnimationsCb() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(2) == 2) { switch (_nextStonerGuySequenceId) { @@ -68,8 +69,8 @@ void Scene20::updateAnimationsCb() { break; case 0x16A: // Grab joint - _vm->_gnap->playPullOutDevice(4, 4); - _vm->_gnap->playUseDevice(0, 0); + gnap.playPullOutDevice(4, 4); + gnap.playUseDevice(0, 0); gameSys.setAnimation(0x16A, 21, 0); gameSys.insertSequence(0x16A, 21, _currStonerGuySequenceId, 21, kSeqSyncWait, 0, 0, 0); _currStonerGuySequenceId = 0x16A; @@ -77,7 +78,7 @@ void Scene20::updateAnimationsCb() { _vm->invAdd(kItemJoint); _vm->setFlag(kGFJointTaken); _stonerGuyShowingJoint = false; - _vm->_gnap->_actionStatus = kAS20GrabJointDone; + gnap._actionStatus = kAS20GrabJointDone; break; case 0x16E: gameSys.setAnimation(0x16E, 21, 2); @@ -92,7 +93,7 @@ void Scene20::updateAnimationsCb() { gameSys.insertSequence(_nextStonerGuySequenceId, 21, _currStonerGuySequenceId, 21, kSeqSyncWait, 0, 0, 0); _currStonerGuySequenceId = _nextStonerGuySequenceId; _nextStonerGuySequenceId = -1; - _vm->_gnap->_actionStatus = kAS20ActionDone; + gnap._actionStatus = kAS20ActionDone; break; case 0x16F: gameSys.setAnimation(_nextStonerGuySequenceId, 21, 2); @@ -158,6 +159,7 @@ void Scene20::stopSounds() { void Scene20::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x10940, true); _vm->startSoundTimerA(8); @@ -206,46 +208,46 @@ void Scene20::run() { // checkGameAppStatus(); _vm->gameUpdateTick(); } - _vm->_gnap->initPos(11, 8, kDirBottomLeft); + gnap.initPos(11, 8, kDirBottomLeft); _vm->_plat->initPos(11, 9, kDirUnk4); - _vm->_gnap->walkTo(Common::Point(5, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(5, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(6, 9), -1, 0x107C2, 1); } else { switch (_vm->_prevSceneNum) { case 17: - _vm->_gnap->initPos(5, 11, kDirBottomRight); + gnap.initPos(5, 11, kDirBottomRight); _vm->_plat->initPos(6, 11, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(5, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(5, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(6, 9), -1, 0x107C2, 1); break; case 18: - _vm->_gnap->initPos(11, 8, kDirBottomLeft); + gnap.initPos(11, 8, kDirBottomLeft); _vm->_plat->initPos(11, 9, kDirUnk4); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(5, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(5, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(6, 9), -1, 0x107C2, 1); break; case 21: - _vm->_gnap->initPos(-1, 8, kDirBottomLeft); + gnap.initPos(-1, 8, kDirBottomLeft); _vm->_plat->initPos(-1, 9, kDirUnk4); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(3, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(3, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(3, 9), -1, 0x107C2, 1); break; case 22: - _vm->_gnap->initPos(7, 6, kDirBottomRight); + gnap.initPos(7, 6, kDirBottomRight); _vm->_plat->initPos(8, 6, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(8, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(8, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(9, 9), -1, 0x107C2, 1); break; default: - _vm->_gnap->initPos(8, 6, kDirBottomLeft); + gnap.initPos(8, 6, kDirBottomLeft); _vm->_plat->initPos(9, 6, kDirUnk4); _vm->endSceneInit(); _vm->_hotspots[kHS20WalkArea2]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(Common::Point(8, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(8, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(9, 9), -1, 0x107C2, 1); _vm->_hotspots[kHS20WalkArea2]._flags &= ~SF_WALKABLE; break; @@ -264,32 +266,32 @@ void Scene20::run() { switch (_vm->_sceneClickedHotspot) { case kHS20Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS20Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemJoint) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(20); + gnap.kissPlatypus(20); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -297,96 +299,96 @@ void Scene20::run() { break; case kHS20ExitParkingLot: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_stonerGuyShowingJoint) _vm->_timers[4] = 0; _vm->_isLeavingScene = true; _vm->_newSceneNum = 21; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS20ExitParkingLot], 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = kAS20LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS20ExitParkingLot], 0, 0x107AF, 1); + gnap._actionStatus = kAS20LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS20ExitParkingLot] + Common::Point(0, 1), -1, 0x107CF, 1); _vm->_plat->_idleFacing = kDirUnk4; } break; case kHS20ExitPhone: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_stonerGuyShowingJoint) _vm->_timers[4] = 0; _vm->_isLeavingScene = true; _vm->_newSceneNum = 17; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS20ExitPhone], 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = kAS20LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS20ExitPhone], 0, 0x107AE, 1); + gnap._actionStatus = kAS20LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS20ExitPhone] + Common::Point(1, 0), -1, 0x107C2, 1); } break; case kHS20ExitOutsideToyStore: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_stonerGuyShowingJoint) _vm->_timers[4] = 0; _vm->_isLeavingScene = true; _vm->_newSceneNum = 18; _vm->_hotspots[kHS20WalkArea2]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS20ExitOutsideToyStore], 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS20LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS20ExitOutsideToyStore], 0, 0x107AB, 1); + gnap._actionStatus = kAS20LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS20ExitOutsideToyStore] + Common::Point(0, 1), -1, 0x107CD, 1); _vm->_hotspots[kHS20WalkArea2]._flags &= ~SF_WALKABLE; } break; case kHS20ExitInsideGrubCity: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_stonerGuyShowingJoint) _vm->_timers[4] = 0; _vm->_isLeavingScene = true; _vm->_newSceneNum = 22; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS20ExitInsideGrubCity] + Common::Point(0, - 1), 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS20LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS20ExitInsideGrubCity] + Common::Point(0, - 1), 0, 0x107BB, 1); + gnap._actionStatus = kAS20LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS20ExitInsideGrubCity] + Common::Point(1, 0), -1, 0x107C2, 1); _vm->_plat->_idleFacing = kDirUnk4; } break; case kHS20ExitOutsideCircusWorld: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_stonerGuyShowingJoint) _vm->_timers[4] = 0; _vm->_isLeavingScene = true; _vm->_newSceneNum = 24; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS20ExitOutsideCircusWorld], 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS20LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS20ExitOutsideCircusWorld], 0, 0x107BB, 1); + gnap._actionStatus = kAS20LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS20ExitOutsideCircusWorld] + Common::Point(1, 0), -1, 0x107C2, 1); } break; case kHS20StonerGuy: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS20StonerGuy].x, _vm->_hotspotsWalkPos[kHS20StonerGuy].y, 5, 4); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS20StonerGuy].x, _vm->_hotspotsWalkPos[kHS20StonerGuy].y, 5, 4); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan2(5, 4); + gnap.playMoan2(5, 4); break; case GRAB_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS20StonerGuy], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS20StonerGuy], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); if (_stonerGuyShowingJoint) - _vm->_gnap->_actionStatus = kAS20GrabJoint; + gnap._actionStatus = kAS20GrabJoint; else - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS20StonerGuy], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS20StonerGuy], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); if (_vm->isFlag(kGFJointTaken)) - _vm->_gnap->_actionStatus = kAS20TalkStonerGuyNoJoint; + gnap._actionStatus = kAS20TalkStonerGuyNoJoint; else - _vm->_gnap->_actionStatus = kAS20TalkStonerGuyHasJoint; + gnap._actionStatus = kAS20TalkStonerGuyHasJoint; break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -394,27 +396,27 @@ void Scene20::run() { break; case kHS20GroceryStoreGuy: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS20GroceryStoreGuy].x, _vm->_hotspotsWalkPos[kHS20GroceryStoreGuy].y, 2, 4); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS20GroceryStoreGuy].x, _vm->_hotspotsWalkPos[kHS20GroceryStoreGuy].y, 2, 4); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(2, 3); + gnap.playScratchingHead(2, 3); break; case GRAB_CURSOR: _stonerGuyShowingJoint = false; - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS20GroceryStoreGuy], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS20GrabGroceryStoreGuy; + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS20GroceryStoreGuy], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS20GrabGroceryStoreGuy; break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS20GroceryStoreGuy], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS20TalkGroceryStoreGuy; + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS20GroceryStoreGuy], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS20TalkGroceryStoreGuy; break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -422,27 +424,27 @@ void Scene20::run() { break; case kHS20GroceryStoreHat: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemCowboyHat) { - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS20GroceryStoreHat], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS20SwitchGroceryStoreHat; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS20GroceryStoreHat], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS20SwitchGroceryStoreHat; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS20GroceryStoreHat].x, _vm->_hotspotsWalkPos[kHS20GroceryStoreHat].y, 1, 6); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS20GroceryStoreHat].x, _vm->_hotspotsWalkPos[kHS20GroceryStoreHat].y, 1, 6); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(1, 6); + gnap.playScratchingHead(1, 6); break; case GRAB_CURSOR: _stonerGuyShowingJoint = false; - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS20GroceryStoreGuy], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS20GrabGroceryStoreHat; + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS20GroceryStoreGuy], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS20GrabGroceryStoreHat; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -451,12 +453,12 @@ void Scene20::run() { case kHS20WalkArea1: case kHS20WalkArea2: - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: if (_vm->_mouseClickState._left) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -474,9 +476,9 @@ void Scene20::run() { _vm->_plat->updateIdleSequence(); _vm->_hotspots[kHS20WalkArea1]._y2 -= 48; } - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0 && !_vm->_timers[5] && _nextGroceryStoreGuySequenceId == -1) { + if (gnap._actionStatus < 0) + gnap.updateIdleSequence(); + if (gnap._actionStatus < 0 && !_vm->_timers[5] && _nextGroceryStoreGuySequenceId == -1) { _vm->_timers[5] = _vm->getRandom(50) + 130; if (_vm->getRandom(4) != 0) _nextGroceryStoreGuySequenceId = 0x17C; @@ -485,7 +487,7 @@ void Scene20::run() { } if (!_vm->_timers[7]) { _vm->_timers[7] = _vm->getRandom(100) + 100; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0) { switch (_vm->getRandom(3)) { case 0: gameSys.insertSequence(0x183, 253, 0, 0, kSeqNone, 0, 0, 0); @@ -515,10 +517,11 @@ void Scene20::run() { void Scene20::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS20LeaveScene: _vm->_sceneDone = true; break; @@ -552,13 +555,13 @@ void Scene20::updateAnimations() { _vm->_timers[6] = 200; _vm->_timers[4] = 100; _stonerGuyShowingJoint = true; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS20GrabJoint: _nextStonerGuySequenceId = 0x16A; break; case kAS20ActionDone: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS20TalkGroceryStoreGuy: gameSys.setAnimation(0x170, 21, 2); @@ -603,13 +606,13 @@ void Scene20::updateAnimations() { break; case kAS20SwitchGroceryStoreHat: _vm->setGrabCursorSprite(-1); - gameSys.setAnimation(0x180, _vm->_gnap->_id, 0); - gameSys.insertSequence(0x180, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x180; - _vm->_gnap->_sequenceDatNum = 0; + gameSys.setAnimation(0x180, gnap._id, 0); + gameSys.insertSequence(0x180, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x180; + gnap._sequenceDatNum = 0; _vm->invRemove(kItemCowboyHat); _vm->invAdd(kItemGroceryStoreHat); - _vm->_gnap->_actionStatus = kAS20SwitchGroceryStoreHatDone; + gnap._actionStatus = kAS20SwitchGroceryStoreHatDone; break; case kAS20SwitchGroceryStoreHatDone: gameSys.insertSequence(0x17F, 20, 372, 20, kSeqSyncWait, 0, 0, 0); @@ -624,13 +627,13 @@ void Scene20::updateAnimations() { _vm->removeFullScreenSprite(); _vm->showCursor(); _vm->setGrabCursorSprite(kItemGroceryStoreHat); - _vm->_gnap->_idleFacing = kDirBottomRight; - _vm->_gnap->walkTo(Common::Point(3, 8), -1, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = -1; + gnap._idleFacing = kDirBottomRight; + gnap.walkTo(Common::Point(3, 8), -1, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = -1; break; case kAS20GrabJointDone: _vm->setGrabCursorSprite(kItemJoint); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -647,12 +650,12 @@ void Scene20::updateAnimations() { break; case 0x178: gameSys.setAnimation(_nextGroceryStoreGuySequenceId, 20, 3); - gameSys.setAnimation(0x17D, _vm->_gnap->_id, 0); + gameSys.setAnimation(0x17D, gnap._id, 0); gameSys.insertSequence(_nextGroceryStoreGuySequenceId, 20, _currGroceryStoreGuySequenceId, 20, kSeqSyncWait, 0, 0, 0); - gameSys.insertSequence(0x17D, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x17D; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = kAS20ActionDone; + gameSys.insertSequence(0x17D, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x17D; + gnap._sequenceDatNum = 0; + gnap._actionStatus = kAS20ActionDone; gameSys.setAnimation(0x16D, 21, 2); gameSys.insertSequence(0x16D, 21, _currStonerGuySequenceId, 21, kSeqSyncWait, 0, 0, 0); _currStonerGuySequenceId = 0x16D; @@ -664,17 +667,17 @@ void Scene20::updateAnimations() { gameSys.setAnimation(_nextGroceryStoreGuySequenceId, 20, 3); gameSys.setAnimation(0x16D, 21, 0); gameSys.insertSequence(_nextGroceryStoreGuySequenceId, 20, _currGroceryStoreGuySequenceId, 20, kSeqSyncWait, 0, 0, 0); - gameSys.insertSequence(0x17E, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x17E; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = kAS20ActionDone; + gameSys.insertSequence(0x17E, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x17E; + gnap._sequenceDatNum = 0; + gnap._actionStatus = kAS20ActionDone; gameSys.setAnimation(0x16D, 21, 2); gameSys.insertSequence(0x16D, 21, _currStonerGuySequenceId, 21, kSeqSyncWait, 0, 0, 0); _currStonerGuySequenceId = 0x16D; _currGroceryStoreGuySequenceId = 377; _nextGroceryStoreGuySequenceId = -1; _nextStonerGuySequenceId = -1; - _vm->_gnap->walkTo(Common::Point(4, 8), -1, 0x107BB, 1); + gnap.walkTo(Common::Point(4, 8), -1, 0x107BB, 1); break; case 0x17C: gameSys.setAnimation(0, 0, 3); @@ -690,7 +693,7 @@ void Scene20::updateAnimations() { gameSys.insertSequence(0x175, 20, _currGroceryStoreGuySequenceId, 20, kSeqSyncWait, 0, 0, 0); _currGroceryStoreGuySequenceId = 0x175; _nextGroceryStoreGuySequenceId = -1; - _vm->_gnap->_actionStatus = kAS20ActionDone; + gnap._actionStatus = kAS20ActionDone; break; default: if (_nextGroceryStoreGuySequenceId != -1) { @@ -736,6 +739,7 @@ void Scene21::updateHotspots() { void Scene21::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x10940, true); _vm->startSoundTimerA(6); @@ -744,7 +748,7 @@ void Scene21::run() { if (_vm->isFlag(kGFTwigTaken)) { if (_vm->isFlag(kGFKeysTaken)) { - _vm->_gnap->initPos(5, 8, kDirBottomRight); + gnap.initPos(5, 8, kDirBottomRight); _vm->_plat->initPos(6, 8, kDirNone); gameSys.insertSequence(0x8E, 2, 0, 0, kSeqNone, 0, 0, 0); if (!_vm->isFlag(kGFUnk04)) @@ -752,16 +756,16 @@ void Scene21::run() { _vm->endSceneInit(); _vm->clearFlag(kGFKeysTaken); } else { - _vm->_gnap->initPos(5, 11, kDirBottomRight); + gnap.initPos(5, 11, kDirBottomRight); _vm->_plat->initPos(6, 11, kDirNone); if (!_vm->isFlag(kGFUnk04)) gameSys.insertSequence(0x8D, 59, 0, 0, kSeqNone, 0, 0, 0); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(5, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(5, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(6, 8), -1, 0x107C2, 1); } } else { - _vm->_gnap->initPos(5, 11, kDirBottomRight); + gnap.initPos(5, 11, kDirBottomRight); _vm->_plat->initPos(6, 11, kDirNone); _currOldLadySequenceId = 0x89; gameSys.setAnimation(0x89, 79, 3); @@ -769,7 +773,7 @@ void Scene21::run() { _nextOldLadySequenceId = -1; _vm->_timers[4] = _vm->getRandom(30) + 50; _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(5, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(5, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(6, 8), -1, 0x107C2, 1); } @@ -782,32 +786,32 @@ void Scene21::run() { switch (_vm->_sceneClickedHotspot) { case kHS21Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS21Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemJoint) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -815,19 +819,19 @@ void Scene21::run() { break; case kHS21Banana: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 2, 5); + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 2, 5); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(2, 5); + gnap.playScratchingHead(2, 5); break; case GRAB_CURSOR: - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, _vm->_gnap->getSequenceId(gskIdle, _vm->_hotspotsWalkPos[kHS21Banana]) | 0x10000, 1); - _vm->_gnap->playPullOutDevice(2, 5); - _vm->_gnap->playUseDevice(0, 0); - _vm->_gnap->_actionStatus = kAS21GrabBanana; + gnap.walkTo(gnap._pos, 0, gnap.getSequenceId(gskIdle, _vm->_hotspotsWalkPos[kHS21Banana]) | 0x10000, 1); + gnap.playPullOutDevice(2, 5); + gnap.playUseDevice(0, 0); + gnap._actionStatus = kAS21GrabBanana; break; case TALK_CURSOR: case PLAT_CURSOR: @@ -838,32 +842,32 @@ void Scene21::run() { break; case kHS21OldLady: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemGroceryStoreHat) { _vm->_newSceneNum = 47; - _vm->_gnap->walkTo(Common::Point(4, 6), 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS21UseHatWithOldLady; + gnap.walkTo(Common::Point(4, 6), 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS21UseHatWithOldLady; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(4, 6, 7, 4); + gnap.playShowCurrItem(4, 6, 7, 4); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(7, 4); + gnap.playScratchingHead(7, 4); break; case GRAB_CURSOR: - _vm->_gnap->_idleFacing = kDirUpLeft; + gnap._idleFacing = kDirUpLeft; _vm->_hotspots[kHS21WalkArea1]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(Common::Point(7, 6), 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS21GrabOldLady; + gnap.walkTo(Common::Point(7, 6), 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS21GrabOldLady; _vm->_hotspots[kHS21WalkArea1]._flags &= ~SF_WALKABLE; break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS21OldLady], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS21TalkOldLady; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS21OldLady], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS21TalkOldLady; break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -871,23 +875,23 @@ void Scene21::run() { break; case kHS21ExitOutsideGrubCity: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 20; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS21ExitOutsideGrubCity], 0, 0x107B3, 1); - _vm->_gnap->_actionStatus = kAS21LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS21ExitOutsideGrubCity], 0, 0x107B3, 1); + gnap._actionStatus = kAS21LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS21ExitOutsideGrubCity] + Common::Point(1, 0), -1, 0x107C2, 1); } break; case kHS21WalkArea1: case kHS21WalkArea2: - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: if (_vm->_mouseClickState._left) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -901,8 +905,8 @@ void Scene21::run() { if (!_vm->_isLeavingScene) { _vm->_plat->updateIdleSequence(); - _vm->_gnap->updateIdleSequence(); - if (!_vm->isFlag(kGFTwigTaken) && !_vm->_timers[4] && _nextOldLadySequenceId == -1 && _vm->_gnap->_actionStatus == -1) { + gnap.updateIdleSequence(); + if (!_vm->isFlag(kGFTwigTaken) && !_vm->_timers[4] && _nextOldLadySequenceId == -1 && gnap._actionStatus == -1) { _vm->_timers[4] = _vm->getRandom(30) + 50; switch (_vm->getRandom(5)) { case 0: @@ -937,13 +941,14 @@ void Scene21::run() { void Scene21::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS21TalkOldLady: _nextOldLadySequenceId = 0x8B; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS21GrabBanana: gameSys.setAnimation(0x8C, 59, 0); @@ -951,22 +956,22 @@ void Scene21::updateAnimations() { _vm->setFlag(kGFUnk04); _vm->invAdd(kItemBanana); updateHotspots(); - _vm->_gnap->_actionStatus = kAS21GrabBananaDone; + gnap._actionStatus = kAS21GrabBananaDone; break; case kAS21GrabBananaDone: _vm->setGrabCursorSprite(kItemBanana); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS21GrabOldLady: _vm->_timers[4] = _vm->getRandom(30) + 50; _nextOldLadySequenceId = 0x87; break; case kAS21UseHatWithOldLady: - gameSys.setAnimation(0x8F, _vm->_gnap->_id, 0); - gameSys.insertSequence(0x8F, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x8F; - _vm->_gnap->_actionStatus = kAS21UseHatWithOldLadyDone; + gameSys.setAnimation(0x8F, gnap._id, 0); + gameSys.insertSequence(0x8F, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x8F; + gnap._actionStatus = kAS21UseHatWithOldLadyDone; _vm->invAdd(kItemTickets); _vm->invRemove(kItemGroceryStoreHat); _vm->setGrabCursorSprite(-1); @@ -984,16 +989,16 @@ void Scene21::updateAnimations() { if (_nextOldLadySequenceId == 0x87) { gameSys.setAnimation(_nextOldLadySequenceId, 79, 3); gameSys.insertSequence(_nextOldLadySequenceId, 79, _currOldLadySequenceId, 79, kSeqSyncWait, 0, 0, 0); - gameSys.insertSequence(0x86, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x86; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = -1; + gameSys.insertSequence(0x86, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x86; + gnap._sequenceDatNum = 0; + gnap._actionStatus = -1; _currOldLadySequenceId = _nextOldLadySequenceId; _nextOldLadySequenceId = -1; } else if (_nextOldLadySequenceId == 0x91) { gameSys.setAnimation(0x91, 79, 0); gameSys.insertSequence(_nextOldLadySequenceId, 79, _currOldLadySequenceId, 79, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_actionStatus = kAS21LeaveScene; + gnap._actionStatus = kAS21LeaveScene; _currOldLadySequenceId = _nextOldLadySequenceId; _nextOldLadySequenceId = -1; } else { @@ -1029,6 +1034,7 @@ void Scene22::updateHotspots() { void Scene22::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; gameSys.insertSequence(0x5D, 254, 0, 0, kSeqNone, 0, 0, 0); @@ -1043,14 +1049,14 @@ void Scene22::run() { _vm->queueInsertDeviceIcon(); if (_vm->_prevSceneNum == 20) { - _vm->_gnap->initPos(2, 8, kDirBottomRight); + gnap.initPos(2, 8, kDirBottomRight); _vm->_plat->initPos(1, 8, kDirNone); _vm->endSceneInit(); } else { - _vm->_gnap->initPos(11, _vm->_hotspotsWalkPos[kHS22ExitBackGrubCity].y, kDirBottomRight); + gnap.initPos(11, _vm->_hotspotsWalkPos[kHS22ExitBackGrubCity].y, kDirBottomRight); _vm->_plat->initPos(11, _vm->_hotspotsWalkPos[kHS22ExitBackGrubCity].y + 1, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(8, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(8, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(9, 8), -1, 0x107C2, 1); } @@ -1098,32 +1104,32 @@ void Scene22::run() { switch (_vm->_sceneClickedHotspot) { case kHS22Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS22Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemJoint) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1131,44 +1137,44 @@ void Scene22::run() { break; case kHS22ExitOutsideGrubCity: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 20; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS22ExitOutsideGrubCity], 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = kAS22LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS22ExitOutsideGrubCity], 0, 0x107AF, 1); + gnap._actionStatus = kAS22LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS22ExitOutsideGrubCity] + Common::Point(0, 1), -1, 0x107C2, 1); } break; case kHS22ExitBackGrubCity: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 23; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS22ExitBackGrubCity], 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS22LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS22ExitBackGrubCity], 0, 0x107AB, 1); + gnap._actionStatus = kAS22LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS22ExitBackGrubCity] + Common::Point(0, 1), -1, 0x107C2, 1); } break; case kHS22Cashier: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS22Cashier].x, _vm->_hotspotsWalkPos[kHS22Cashier].y, 8, 4); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS22Cashier].x, _vm->_hotspotsWalkPos[kHS22Cashier].y, 8, 4); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(8, 4); + gnap.playScratchingHead(8, 4); break; case GRAB_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS22Cashier], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS22TalkCashier; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS22Cashier], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS22TalkCashier; break; case PLAT_CURSOR: - _vm->_gnap->useDeviceOnPlatypus(); + gnap.useDeviceOnPlatypus(); break; } } @@ -1177,12 +1183,12 @@ void Scene22::run() { case kHS22WalkArea1: case kHS22WalkArea2: - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: if (_vm->_mouseClickState._left) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -1192,7 +1198,7 @@ void Scene22::run() { if (!_vm->_isLeavingScene) { _vm->_plat->updateIdleSequence(); - _vm->_gnap->updateIdleSequence(); + gnap.updateIdleSequence(); if (!_vm->_timers[6] && _nextCashierSequenceId == -1) { _vm->_timers[6] = _vm->getRandom(30) + 20; if (_vm->getRandom(8) != 0) { @@ -1235,10 +1241,11 @@ void Scene22::run() { void Scene22::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS22LeaveScene: _vm->_sceneDone = true; break; @@ -1246,7 +1253,7 @@ void Scene22::updateAnimations() { _nextCashierSequenceId = 0x5C; break; } - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } if (gameSys.getAnimationStatus(3) == 2 && _nextCashierSequenceId != -1) { @@ -1280,6 +1287,7 @@ void Scene23::updateHotspots() { void Scene23::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->_timers[4] = _vm->getRandom(100) + 200; _vm->_timers[5] = _vm->getRandom(100) + 200; @@ -1292,7 +1300,7 @@ void Scene23::run() { _vm->queueInsertDeviceIcon(); - _vm->_gnap->initPos(-1, 7, kDirBottomRight); + gnap.initPos(-1, 7, kDirBottomRight); _vm->_plat->initPos(-2, 7, kDirNone); gameSys.insertSequence(0xBD, 255, 0, 0, kSeqNone, 0, 0, 0); gameSys.insertSequence(0xBF, 2, 0, 0, kSeqNone, 0, 0, 0); @@ -1301,9 +1309,9 @@ void Scene23::run() { _vm->_plat->walkTo(Common::Point(1, 7), -1, 0x107C2, 1); if (_vm->isFlag(kGFUnk24)) { - _vm->_gnap->walkTo(Common::Point(2, 7), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 7), -1, 0x107B9, 1); } else { - _vm->_gnap->walkTo(Common::Point(2, 7), 0, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 7), 0, 0x107B9, 1); while (gameSys.getAnimationStatus(0) != 2) _vm->gameUpdateTick(); _vm->playSequences(0x48, 0xBA, 0xBB, 0xBC); @@ -1321,32 +1329,32 @@ void Scene23::run() { switch (_vm->_sceneClickedHotspot) { case kHS23Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS23Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemJoint) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1354,33 +1362,33 @@ void Scene23::run() { break; case kHS23Cereals: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS23Cereals].x, _vm->_hotspotsWalkPos[kHS23Cereals].y, 5, 4); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS23Cereals].x, _vm->_hotspotsWalkPos[kHS23Cereals].y, 5, 4); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: if (_vm->isFlag(kGFSceneFlag1)) - _vm->_gnap->playMoan2(0, 0); + gnap.playMoan2(0, 0); else { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS23Cereals], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS23LookCereals; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS23Cereals], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS23LookCereals; } break; case GRAB_CURSOR: if (_vm->isFlag(kGFSceneFlag1)) - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); else { - _vm->_gnap->_idleFacing = kDirBottomRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS23Cereals], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._idleFacing = kDirBottomRight; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS23Cereals], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); _vm->setFlag(kGFSceneFlag1); - _vm->_gnap->_actionStatus = kAS23GrabCereals; + gnap._actionStatus = kAS23GrabCereals; _vm->invAdd(kItemCereals); } break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1388,24 +1396,24 @@ void Scene23::run() { break; case kHS23ExitFrontGrubCity: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 22; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS23ExitFrontGrubCity], 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = kAS23LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS23ExitFrontGrubCity], 0, 0x107AF, 1); + gnap._actionStatus = kAS23LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS23ExitFrontGrubCity] + Common::Point(0, -1), -1, 0x107C2, 1); } break; case kHS23WalkArea1: case kHS23WalkArea2: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: if (_vm->_mouseClickState._left) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -1415,8 +1423,8 @@ void Scene23::run() { if (!_vm->_isLeavingScene) { _vm->_plat->updateIdleSequence(); - _vm->_gnap->updateIdleSequence(); - if (!_vm->_timers[4] && _vm->_gnap->_actionStatus == -1) { + gnap.updateIdleSequence(); + if (!_vm->_timers[4] && gnap._actionStatus == -1) { _vm->_timers[4] = _vm->getRandom(100) + 200; switch (_vm->getRandom(4)) { case 0: @@ -1461,25 +1469,26 @@ void Scene23::run() { void Scene23::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS23LookCereals: _vm->showFullScreenSprite(0x48); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS23GrabCereals: - gameSys.setAnimation(0xBE, _vm->_gnap->_id, 0); - gameSys.insertSequence(0xBE, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.setAnimation(0xBE, gnap._id, 0); + gameSys.insertSequence(0xBE, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.requestRemoveSequence(0xBF, 2); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0xBE; - _vm->_gnap->_actionStatus = kAS23GrabCerealsDone; + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0xBE; + gnap._actionStatus = kAS23GrabCerealsDone; break; case kAS23GrabCerealsDone: _vm->setGrabCursorSprite(kItemCereals); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS23LeaveScene: _vm->_sceneDone = true; @@ -1536,6 +1545,7 @@ void Scene24::updateHotspots() { void Scene24::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; int counter = 0; _vm->playSound(0x10940, true); @@ -1563,16 +1573,16 @@ void Scene24::run() { _vm->queueInsertDeviceIcon(); if (_vm->_prevSceneNum == 20) { - _vm->_gnap->initPos(1, 8, kDirBottomRight); + gnap.initPos(1, 8, kDirBottomRight); _vm->_plat->initPos(2, 8, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(1, 9), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(1, 9), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(2, 9), -1, 0x107C2, 1); } else { - _vm->_gnap->initPos(8, 8, kDirBottomLeft); + gnap.initPos(8, 8, kDirBottomLeft); _vm->_plat->initPos(8, 8, kDirUnk4); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(2, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(2, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(3, 8), -1, 0x107C2, 1); } @@ -1588,32 +1598,32 @@ void Scene24::run() { switch (_vm->_sceneClickedHotspot) { case kHS24Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS24Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemJoint) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1621,22 +1631,22 @@ void Scene24::run() { break; case kHS24ExitCircusWorld: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 25; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS24ExitCircusWorld], 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS24LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS24ExitCircusWorld], 0, 0x107AB, 1); + gnap._actionStatus = kAS24LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS24ExitCircusWorld] + Common::Point(1, 0), -1, 0x107C2, 1); } break; case kHS24ExitOutsideGrubCity: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 20; - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS24ExitOutsideGrubCity], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS24LeaveScene; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS24ExitOutsideGrubCity], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS24LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS24ExitOutsideGrubCity] + Common::Point(1, 0), -1, 0x107C2, 1); } break; @@ -1644,13 +1654,13 @@ void Scene24::run() { case kHS24WalkArea1: case kHS24WalkArea2: case kHS24WalkArea3: - if (_vm->_gnap->_actionStatus == -1) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus == -1) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: if (_vm->_mouseClickState._left) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -1663,7 +1673,7 @@ void Scene24::run() { if (!_vm->_isLeavingScene) { _vm->_plat->updateIdleSequence(); - _vm->_gnap->updateIdleSequence(); + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(20) + 50; gameSys.insertSequence(0x37, 20, _girlSequenceId, 20, kSeqSyncWait, 0, 0, 0); @@ -1723,12 +1733,13 @@ void Scene24::run() { void Scene24::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - if (_vm->_gnap->_actionStatus == kAS24LeaveScene) + if (gnap._actionStatus == kAS24LeaveScene) _vm->_sceneDone = true; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } } @@ -1798,6 +1809,7 @@ void Scene25::playAnims(int index) { void Scene25::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x10940, true); _vm->startSoundTimerA(5); @@ -1812,16 +1824,16 @@ void Scene25::run() { _vm->queueInsertDeviceIcon(); if (_vm->_prevSceneNum == 24) { - _vm->_gnap->initPos(5, 11, kDirUpLeft); + gnap.initPos(5, 11, kDirUpLeft); _vm->_plat->initPos(6, 11, kDirUnk4); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(5, 7), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(5, 7), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(6, 7), -1, 0x107C2, 1); } else { - _vm->_gnap->initPos(5, 6, kDirBottomRight); + gnap.initPos(5, 6, kDirBottomRight); _vm->_plat->initPos(6, 6, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(5, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(5, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(6, 8), -1, 0x107C2, 1); } @@ -1834,32 +1846,32 @@ void Scene25::run() { switch (_vm->_sceneClickedHotspot) { case kHS25Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS25Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemJoint) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playScratchingHead(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1867,29 +1879,29 @@ void Scene25::run() { break; case kHS25TicketVendor: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemTickets) { - _vm->_gnap->_actionStatus = kAS25ShowTicketToVendor; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS25TicketVendor], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(9, 4)) | 0x10000, 1); - _vm->_gnap->playPullOutDevice(0, 0); - _vm->_gnap->playUseDevice(0, 0); + gnap._actionStatus = kAS25ShowTicketToVendor; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS25TicketVendor], 0, gnap.getSequenceId(gskIdle, Common::Point(9, 4)) | 0x10000, 1); + gnap.playPullOutDevice(0, 0); + gnap.playUseDevice(0, 0); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS25TicketVendor].x, _vm->_hotspotsWalkPos[kHS25TicketVendor].y, 6, 1); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS25TicketVendor].x, _vm->_hotspotsWalkPos[kHS25TicketVendor].y, 6, 1); _nextTicketVendorSequenceId = 0x5B; } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(6, 1); + gnap.playScratchingHead(6, 1); _nextTicketVendorSequenceId = (_vm->getRandom(2) == 1) ? 0x59 : 0x56; break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS25TicketVendor], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS25TalkTicketVendor; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS25TicketVendor], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS25TalkTicketVendor; break; case GRAB_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1897,29 +1909,29 @@ void Scene25::run() { break; case kHS25ExitOutsideCircusWorld: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 24; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS25ExitOutsideCircusWorld], 0, 0x107B4, 1); - _vm->_gnap->_actionStatus = kAS25LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS25ExitOutsideCircusWorld], 0, 0x107B4, 1); + gnap._actionStatus = kAS25LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS25ExitOutsideCircusWorld] + Common::Point(1, 0), -1, 0x107C2, 1); } break; case kHS25ExitInsideCircusWorld: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFNeedleTaken)) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 26; _vm->_hotspots[kHS25WalkArea1]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS25ExitInsideCircusWorld], 0, 0x107B1, 1); - _vm->_gnap->_actionStatus = kAS25LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS25ExitInsideCircusWorld], 0, 0x107B1, 1); + gnap._actionStatus = kAS25LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS25ExitInsideCircusWorld] + Common::Point(1, 0), -1, 0x107C2, 1); _vm->_hotspots[kHS25WalkArea1]._flags &= ~SF_WALKABLE; } else { _vm->_hotspots[kHS25WalkArea1]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(Common::Point(4, 5), 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS25EnterCircusWihoutTicket; + gnap.walkTo(Common::Point(4, 5), 0, 0x107BB, 1); + gnap._actionStatus = kAS25EnterCircusWihoutTicket; _vm->_hotspots[kHS25WalkArea1]._flags &= ~SF_WALKABLE; } } @@ -1929,26 +1941,26 @@ void Scene25::run() { case kHS25Posters2: case kHS25Posters3: case kHS25Posters4: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot], -1, -1, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[_vm->_sceneClickedHotspot], -1, -1, 1); if (_vm->_sceneClickedHotspot == 5 || _vm->_sceneClickedHotspot == 6) - _vm->_gnap->_idleFacing = kDirUpLeft; + gnap._idleFacing = kDirUpLeft; else if (_vm->_sceneClickedHotspot == 8) - _vm->_gnap->_idleFacing = kDirBottomRight; + gnap._idleFacing = kDirBottomRight; else - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->playIdle(0, 0); + gnap._idleFacing = kDirUpRight; + gnap.playIdle(0, 0); playAnims(8 - _vm->_sceneClickedHotspot + 1); break; case GRAB_CURSOR: case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playMoan2(0, 0); + gnap.playMoan2(0, 0); break; } } @@ -1957,13 +1969,13 @@ void Scene25::run() { case kHS25WalkArea1: case kHS25WalkArea2: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: if (_vm->_mouseClickState._left) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -1973,8 +1985,8 @@ void Scene25::run() { if (!_vm->_isLeavingScene) { _vm->_plat->updateIdleSequence(); - _vm->_gnap->updateIdleSequence(); - if (!_vm->_timers[4] && _nextTicketVendorSequenceId == -1 && _vm->_gnap->_actionStatus == -1) { + gnap.updateIdleSequence(); + if (!_vm->_timers[4] && _nextTicketVendorSequenceId == -1 && gnap._actionStatus == -1) { _vm->_timers[4] = _vm->getRandom(20) + 20; switch (_vm->getRandom(13)) { case 0: @@ -2026,13 +2038,14 @@ void Scene25::run() { void Scene25::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS25TalkTicketVendor: _nextTicketVendorSequenceId = (_vm->getRandom(2) == 1) ? 0x57 : 0x5F; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS25EnterCircusWihoutTicket: _nextTicketVendorSequenceId = 0x5E; @@ -2043,13 +2056,13 @@ void Scene25::updateAnimations() { _currTicketVendorSequenceId = _nextTicketVendorSequenceId; _nextTicketVendorSequenceId = -1; _vm->_hotspots[kHS25WalkArea1]._flags |= SF_WALKABLE; - _vm->_gnap->playIdle(0, 0); - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[3], -1, 0x107BB, 1); + gnap.playIdle(0, 0); + gnap.walkTo(_vm->_hotspotsWalkPos[3], -1, 0x107BB, 1); _vm->_hotspots[kHS25WalkArea1]._flags &= ~SF_WALKABLE; - _vm->_gnap->_actionStatus = kAS25EnterCircusWihoutTicketDone; + gnap._actionStatus = kAS25EnterCircusWihoutTicketDone; break; case kAS25EnterCircusWihoutTicketDone: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS25ShowTicketToVendor: _vm->setGrabCursorSprite(-1); @@ -2057,7 +2070,7 @@ void Scene25::updateAnimations() { _vm->setFlag(kGFNeedleTaken); gameSys.setAnimation(0x61, 40, 0); gameSys.insertSequence(0x61, 40, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->_actionStatus = kAS25ShowTicketToVendorDone; + gnap._actionStatus = kAS25ShowTicketToVendorDone; break; case kAS25ShowTicketToVendorDone: _nextTicketVendorSequenceId = 0x53; @@ -2073,7 +2086,7 @@ void Scene25::updateAnimations() { gameSys.insertSequence(_nextTicketVendorSequenceId, 39, _currTicketVendorSequenceId, 39, kSeqSyncWait, 0, 0, 0); _currTicketVendorSequenceId = _nextTicketVendorSequenceId; _nextTicketVendorSequenceId = -1; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } else if (_nextTicketVendorSequenceId != -1) { gameSys.setAnimation(_nextTicketVendorSequenceId, 39, 3); gameSys.insertSequence(_nextTicketVendorSequenceId, 39, _currTicketVendorSequenceId, 39, kSeqSyncWait, 0, 0, 0); @@ -2109,6 +2122,7 @@ void Scene26::updateHotspots() { void Scene26::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->startSoundTimerB(7); _vm->playSound(0x1093B, true); @@ -2130,13 +2144,13 @@ void Scene26::run() { gameSys.insertSequence(0x5E, 40, 0, 0, kSeqLoop, 0, 0, 0); if (_vm->_prevSceneNum == 25) { - _vm->_gnap->initPos(-1, 8, kDirBottomRight); + gnap.initPos(-1, 8, kDirBottomRight); _vm->_plat->initPos(-2, 8, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(2, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(1, 8), -1, 0x107C2, 1); } else { - _vm->_gnap->initPos(2, 8, kDirBottomRight); + gnap.initPos(2, 8, kDirBottomRight); _vm->_plat->initPos(3, 8, kDirNone); _vm->endSceneInit(); } @@ -2150,32 +2164,32 @@ void Scene26::run() { switch (_vm->_sceneClickedHotspot) { case kHS26Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS26Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemJoint) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2183,59 +2197,59 @@ void Scene26::run() { break; case kHS26ExitOutsideCircusWorld: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 25; - _vm->_gnap->walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS26ExitOutsideCircusWorld].y), 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = kAS26LeaveScene; + gnap.walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS26ExitOutsideCircusWorld].y), 0, 0x107AE, 1); + gnap._actionStatus = kAS26LeaveScene; } break; case kHS26ExitOutsideClown: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 27; - _vm->_gnap->walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS26ExitOutsideClown].y), 0, 0x107BC, 1); - _vm->_gnap->_actionStatus = kAS26LeaveScene; + gnap.walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS26ExitOutsideClown].y), 0, 0x107BC, 1); + gnap._actionStatus = kAS26LeaveScene; } break; case kHS26ExitArcade: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 29; - _vm->_gnap->walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS26ExitArcade].y), 0, 0x107BC, 1); - _vm->_gnap->_actionStatus = kAS26LeaveScene; + gnap.walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS26ExitArcade].y), 0, 0x107BC, 1); + gnap._actionStatus = kAS26LeaveScene; } break; case kHS26ExitElephant: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 30; - _vm->_gnap->walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS26ExitElephant].y), 0, 0x107BC, 1); - _vm->_gnap->_actionStatus = kAS26LeaveScene; + gnap.walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS26ExitElephant].y), 0, 0x107BC, 1); + gnap._actionStatus = kAS26LeaveScene; } break; case kHS26ExitBeerStand: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 31; - _vm->_gnap->walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS26ExitBeerStand].y), 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS26LeaveScene; + gnap.walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS26ExitBeerStand].y), 0, 0x107BB, 1); + gnap._actionStatus = kAS26LeaveScene; } break; case kHS26WalkArea1: case kHS26WalkArea2: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: if (_vm->_mouseClickState._left) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -2248,7 +2262,7 @@ void Scene26::run() { if (!_vm->_isLeavingScene) { _vm->_plat->updateIdleSequence(); - _vm->_gnap->updateIdleSequence(); + gnap.updateIdleSequence(); if (!_vm->_timers[5] && _nextKidSequenceId == -1) { _vm->_timers[5] = _vm->getRandom(20) + 50; if (_vm->getRandom(5) != 0) @@ -2281,12 +2295,13 @@ void Scene26::run() { void Scene26::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - if (_vm->_gnap->_actionStatus == kAS26LeaveScene) + if (gnap._actionStatus == kAS26LeaveScene) _vm->_sceneDone = true; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } if (gameSys.getAnimationStatus(3) == 2 && _nextKidSequenceId != -1) { @@ -2325,6 +2340,7 @@ void Scene27::updateHotspots() { void Scene27::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x1093B, true); _vm->startSoundTimerB(4); @@ -2347,28 +2363,28 @@ void Scene27::run() { switch (_vm->_prevSceneNum) { case 26: - _vm->_gnap->initPos(7, 12, kDirBottomRight); + gnap.initPos(7, 12, kDirBottomRight); _vm->_plat->initPos(6, 12, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(7, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(7, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(6, 8), -1, 0x107C2, 1); break; case 29: - _vm->_gnap->initPos(-1, 8, kDirBottomRight); + gnap.initPos(-1, 8, kDirBottomRight); _vm->_plat->initPos(-1, 9, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(3, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(3, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(3, 9), -1, 0x107C2, 1); break; case 31: - _vm->_gnap->initPos(12, 8, kDirBottomLeft); + gnap.initPos(12, 8, kDirBottomLeft); _vm->_plat->initPos(12, 9, kDirUnk4); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(8, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(8, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(8, 9), -1, 0x107C2, 1); break; default: - _vm->_gnap->initPos(6, 8, kDirBottomRight); + gnap.initPos(6, 8, kDirBottomRight); _vm->_plat->initPos(5, 9, kDirNone); _vm->endSceneInit(); break; @@ -2378,38 +2394,38 @@ void Scene27::run() { _vm->updateMouseCursor(); _vm->updateCursorByHotspot(); _vm->_sceneClickedHotspot = -1; - if (_vm->_gnap->_actionStatus < 0) + if (gnap._actionStatus < 0) _vm->_sceneClickedHotspot = _vm->getClickedHotspotId(); _vm->updateGrabCursorSprite(0, 0); switch (_vm->_sceneClickedHotspot) { case kHS27Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS27Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemJoint) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2417,26 +2433,26 @@ void Scene27::run() { break; case kHS27Janitor: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemPicture) { - _vm->_gnap->_idleFacing = kDirUpLeft; - if (_vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS27Janitor], 0, 0x107BC, 1)) - _vm->_gnap->_actionStatus = kAS27ShowPictureToJanitor; + gnap._idleFacing = kDirUpLeft; + if (gnap.walkTo(_vm->_hotspotsWalkPos[kHS27Janitor], 0, 0x107BC, 1)) + gnap._actionStatus = kAS27ShowPictureToJanitor; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS27Janitor].x, _vm->_hotspotsWalkPos[kHS27Janitor].y, 7, 3); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS27Janitor].x, _vm->_hotspotsWalkPos[kHS27Janitor].y, 7, 3); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(6, 3); + gnap.playScratchingHead(6, 3); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS27Janitor], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS27TalkJanitor; + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS27Janitor], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS27TalkJanitor; break; case GRAB_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2444,22 +2460,22 @@ void Scene27::run() { break; case kHS27Bucket: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 3, 3); + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 3, 3); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(3, 3); + gnap.playScratchingHead(3, 3); break; case GRAB_CURSOR: - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, _vm->_gnap->getSequenceId(gskIdle, _vm->_hotspotsWalkPos[kHS27Bucket]) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS27GrabBucket; + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(gnap._pos, 0, gnap.getSequenceId(gskIdle, _vm->_hotspotsWalkPos[kHS27Bucket]) | 0x10000, 1); + gnap._actionStatus = kAS27GrabBucket; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2467,60 +2483,60 @@ void Scene27::run() { break; case kHS27ExitCircus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 26; - _vm->_gnap->walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS27ExitCircus].y), 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = kAS27LeaveScene; + gnap.walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS27ExitCircus].y), 0, 0x107AE, 1); + gnap._actionStatus = kAS27LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS27ExitCircus] + Common::Point(1, 0), -1, 0x107C7, 1); } break; case kHS27ExitArcade: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 29; - _vm->_gnap->walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS27ExitArcade].y), 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = kAS27LeaveScene; + gnap.walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS27ExitArcade].y), 0, 0x107AF, 1); + gnap._actionStatus = kAS27LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS27ExitArcade] + Common::Point(0, 1), -1, 0x107CF, 1); } break; case kHS27ExitBeerStand: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 31; - _vm->_gnap->walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS27ExitBeerStand].y), 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS27LeaveScene; + gnap.walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS27ExitBeerStand].y), 0, 0x107AB, 1); + gnap._actionStatus = kAS27LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS27ExitBeerStand] + Common::Point(0, 1), -1, 0x107CD, 1); } break; case kHS27ExitClown: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFPlatypus)) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 28; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS27ExitClown], 0, 0x107AD, 1); - _vm->_gnap->_actionStatus = kAS27LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS27ExitClown], 0, 0x107AD, 1); + gnap._actionStatus = kAS27LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS27ExitClown] + Common::Point(1, 0), -1, 0x107C4, 1); } else { _vm->_hotspots[kHS27WalkArea1]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS27ExitClown].x, 7), 0, 0x107BC, 1); + gnap.walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS27ExitClown].x, 7), 0, 0x107BC, 1); _vm->_hotspots[kHS27WalkArea1]._flags &= SF_WALKABLE; - _vm->_gnap->_actionStatus = kAS27TryEnterClownTent; + gnap._actionStatus = kAS27TryEnterClownTent; } } break; case kHS27WalkArea1: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -2534,13 +2550,13 @@ void Scene27::run() { if (!_vm->_isLeavingScene) { _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0) + gnap.updateIdleSequence(); if (_vm->_debugLevel == 4) _vm->updateIdleTimer(); if (!_vm->_timers[5]) { _vm->_timers[5] = _vm->getRandom(20) + 60; - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->getRandom(3) != 0) _nextJanitorSequenceId = 0xCB; else @@ -2549,7 +2565,7 @@ void Scene27::run() { } if (!_vm->_timers[7]) { _vm->_timers[7] = _vm->getRandom(100) + 300; - if (_vm->_gnap->_actionStatus < 0) + if (gnap._actionStatus < 0) gameSys.insertSequence(0xD4, 120, 0, 0, kSeqNone, 0, 0, 0); } _vm->playSoundB(); @@ -2569,10 +2585,11 @@ void Scene27::run() { void Scene27::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS27TalkJanitor: switch (_vm->getRandom(3)) { case 0: @@ -2587,18 +2604,18 @@ void Scene27::updateAnimations() { } break; case kAS27GrabBucket: - _vm->_gnap->playPullOutDevice(0, 0); - _vm->_gnap->playUseDevice(0, 0); + gnap.playPullOutDevice(0, 0); + gnap.playUseDevice(0, 0); _vm->_hotspots[kHS27Bucket]._flags = SF_DISABLED; _vm->invAdd(kItemEmptyBucket); _vm->setFlag(kGFUnk13); gameSys.setAnimation(0xD2, 39, 0); gameSys.insertSequence(0xD2, 39, 211, 39, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_actionStatus = kAS27GrabBucketDone; + gnap._actionStatus = kAS27GrabBucketDone; break; case kAS27GrabBucketDone: _vm->setGrabCursorSprite(kItemEmptyBucket); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS27ShowPictureToJanitor: _nextJanitorSequenceId = 0xD0; @@ -2610,17 +2627,17 @@ void Scene27::updateAnimations() { gameSys.setAnimation(_nextJanitorSequenceId, 39, 0); _currJanitorSequenceId = _nextJanitorSequenceId; _nextJanitorSequenceId = -1; - _vm->_gnap->_actionStatus = kAS27TryEnterClownTentDone; + gnap._actionStatus = kAS27TryEnterClownTentDone; break; case kAS27TryEnterClownTentDone: _vm->_hotspots[kHS27WalkArea1]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(Common::Point(_vm->_hotspotsWalkPos[7].x, 9), -1, 0x107BC, 1); + gnap.walkTo(Common::Point(_vm->_hotspotsWalkPos[7].x, 9), -1, 0x107BC, 1); _vm->_hotspots[kHS27WalkArea1]._flags &= ~SF_WALKABLE; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS27EnterClownTent: - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, 0x107B2, 1); - _vm->_gnap->_actionStatus = kAS27LeaveScene; + gnap.walkTo(gnap._pos, 0, 0x107B2, 1); + gnap._actionStatus = kAS27LeaveScene; break; case kAS27LeaveScene: _vm->_sceneDone = true; @@ -2640,7 +2657,7 @@ void Scene27::updateAnimations() { case 0xCC: case 0xCD: case 0xCE: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; gameSys.insertSequence(_nextJanitorSequenceId, 39, _currJanitorSequenceId, 39, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(_nextJanitorSequenceId, 39, 3); gameSys.setAnimation(_nextJanitorSequenceId, 39, 0); @@ -2649,11 +2666,11 @@ void Scene27::updateAnimations() { break; case 0xD0: // Show picture to janitor - _vm->_gnap->playPullOutDevice(0, 0); - _vm->_gnap->playUseDevice(0, 0); + gnap.playPullOutDevice(0, 0); + gnap.playUseDevice(0, 0); gameSys.insertSequence(_nextJanitorSequenceId, 39, _currJanitorSequenceId, 39, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(_nextJanitorSequenceId, 39, 0); - _vm->_gnap->_actionStatus = kAS27EnterClownTent; + gnap._actionStatus = kAS27EnterClownTent; _currJanitorSequenceId = _nextJanitorSequenceId; _nextJanitorSequenceId = -1; _vm->setFlag(kGFPlatypus); @@ -2701,6 +2718,7 @@ void Scene28::updateHotspots() { void Scene28::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x1093C, true); _nextClownSequenceId = -1; @@ -2723,12 +2741,12 @@ void Scene28::run() { gameSys.insertSequence(_currClownSequenceId, 39, 0, 0, kSeqNone, 0, 0, 0); _vm->_timers[4] = _vm->getRandom(20) + 80; } - _vm->_gnap->initPos(8, 8, kDirBottomLeft); + gnap.initPos(8, 8, kDirBottomLeft); _vm->_plat->initPos(9, 8, kDirUnk4); _vm->endSceneInit(); } else { gameSys.insertSequence(0x11B, 39, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->initPos(8, 8, kDirBottomLeft); + gnap.initPos(8, 8, kDirBottomLeft); _vm->_plat->initPos(9, 8, kDirUnk4); _vm->endSceneInit(); _vm->playSequences(0xF7, 0x121, 0x122, 0x123); @@ -2738,12 +2756,12 @@ void Scene28::run() { gameSys.insertSequence(_currClownSequenceId, 39, 0x11B, 39, kSeqSyncWait, 0, 0, 0); _nextClownSequenceId = -1; _vm->_timers[4] = _vm->getRandom(20) + 80; - _vm->_gnap->_actionStatus = kAS28GnapWaiting; + gnap._actionStatus = kAS28GnapWaiting; while (gameSys.getAnimationStatus(3) != 2) { _vm->gameUpdateTick(); _vm->updateMouseCursor(); } - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } while (!_vm->_sceneDone) { @@ -2755,32 +2773,32 @@ void Scene28::run() { switch (_vm->_sceneClickedHotspot) { case kHS28Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS28Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemJoint) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2788,32 +2806,32 @@ void Scene28::run() { break; case kHS28Horn: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(2, 8, 3, 4); + gnap.playShowCurrItem(2, 8, 3, 4); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(2, 4); + gnap.playScratchingHead(2, 4); break; case GRAB_CURSOR: if (_vm->isFlag(kGFUnk21)) { if (!_vm->invHas(kItemHorn)) { - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, _vm->_gnap->getSequenceId(gskIdle, _vm->_hotspotsWalkPos[kHS28Horn]) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS28GrabHornSuccess; + gnap.walkTo(gnap._pos, 0, gnap.getSequenceId(gskIdle, _vm->_hotspotsWalkPos[kHS28Horn]) | 0x10000, 1); + gnap._actionStatus = kAS28GrabHornSuccess; } } else { - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(Common::Point(2, 8), 0, 0x107BB, 1); + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(Common::Point(2, 8), 0, 0x107BB, 1); _vm->_hotspots[kHS28WalkArea1]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS28Horn], 0, 0x107BB, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[kHS28Horn], 0, 0x107BB, 1); _vm->_hotspots[kHS28WalkArea1]._flags &= ~SF_WALKABLE; - _vm->_gnap->_actionStatus = kAS28GrabHornFails; + gnap._actionStatus = kAS28GrabHornFails; } break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2821,39 +2839,39 @@ void Scene28::run() { break; case kHS28Clown: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->isFlag(kGFUnk21)) { if (_vm->_verbCursor == LOOK_CURSOR) - _vm->_gnap->playScratchingHead(5, 2); + gnap.playScratchingHead(5, 2); else - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else if (_vm->_grabCursorSpriteIndex == kItemBucketWithBeer) { - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS28Clown], 0, 0x107BC, 1); - _vm->_gnap->playPullOutDevice(0, 0); - _vm->_gnap->playUseDevice(0, 0); - _vm->_gnap->_actionStatus = kAS28UseBeerBucketWithClown; + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS28Clown], 0, 0x107BC, 1); + gnap.playPullOutDevice(0, 0); + gnap.playUseDevice(0, 0); + gnap._actionStatus = kAS28UseBeerBucketWithClown; } else if (_vm->_grabCursorSpriteIndex == kItemBucketWithPill) { - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS28Clown], 0, 0x107BC, 1); - _vm->_gnap->playPullOutDevice(0, 0); - _vm->_gnap->playUseDevice(0, 0); - _vm->_gnap->_actionStatus = kAS28UsePillBucketWithClown; + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS28Clown], 0, 0x107BC, 1); + gnap.playPullOutDevice(0, 0); + gnap.playUseDevice(0, 0); + gnap._actionStatus = kAS28UsePillBucketWithClown; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS28Clown].x, _vm->_hotspotsWalkPos[kHS28Clown].y, 2, 4); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS28Clown].x, _vm->_hotspotsWalkPos[kHS28Clown].y, 2, 4); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(5, 2); + gnap.playScratchingHead(5, 2); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(Common::Point(5, 8), 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS28TalkClown; + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(Common::Point(5, 8), 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS28TalkClown; break; case GRAB_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2861,35 +2879,35 @@ void Scene28::run() { break; case kHS28ExitOutsideClown: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 27; _vm->_hotspots[kHS28WalkArea1]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS28ExitOutsideClown], 0, 0x107BF, 1); - _vm->_gnap->_actionStatus = kAS28LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS28ExitOutsideClown], 0, 0x107BF, 1); + gnap._actionStatus = kAS28LeaveScene; _vm->_hotspots[kHS28WalkArea1]._flags &= ~SF_WALKABLE; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS28ExitOutsideClown] + Common::Point(-1, 0), -1, 0x107C2, 1); } break; case kHS28EmptyBucket: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 8, 6); + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 8, 6); } else if (_vm->isFlag(kGFUnk21)) { - _vm->_gnap->playImpossible(8, 6); + gnap.playImpossible(8, 6); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(8, 6); + gnap.playScratchingHead(8, 6); break; case GRAB_CURSOR: - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, _vm->_gnap->getSequenceId(gskIdle, _vm->_hotspotsWalkPos[kHS28EmptyBucket]) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS28GrabEmptyBucket; + gnap.walkTo(gnap._pos, 0, gnap.getSequenceId(gskIdle, _vm->_hotspotsWalkPos[kHS28EmptyBucket]) | 0x10000, 1); + gnap._actionStatus = kAS28GrabEmptyBucket; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2898,13 +2916,13 @@ void Scene28::run() { case kHS28WalkArea1: case kHS28WalkArea2: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -2917,10 +2935,10 @@ void Scene28::run() { if (!_vm->_isLeavingScene) { _vm->_plat->updateIdleSequence(); - _vm->_gnap->updateIdleSequence(); + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(20) + 80; - if (_vm->_gnap->_actionStatus < 0 && !_vm->isFlag(kGFUnk21)) + if (gnap._actionStatus < 0 && !_vm->isFlag(kGFUnk21)) _nextClownSequenceId = 0x114; } } @@ -2939,10 +2957,11 @@ void Scene28::run() { void Scene28::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS28UseBeerBucketWithClown: _vm->setFlag(kGFUnk22); _nextClownSequenceId = 0x113; @@ -2960,11 +2979,11 @@ void Scene28::updateAnimations() { _nextClownSequenceId = 0x119; break; case kAS28GrabHornSuccess: - _vm->_gnap->playPullOutDevice(0, 0); - _vm->_gnap->playUseDevice(0, 0); + gnap.playPullOutDevice(0, 0); + gnap.playUseDevice(0, 0); gameSys.setAnimation(0x117, 59, 0); gameSys.insertSequence(0x117, 59, 280, 59, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_actionStatus = kAS28GrabHornSuccessDone; + gnap._actionStatus = kAS28GrabHornSuccessDone; break; case kAS28GrabHornSuccessDone: _vm->hideCursor(); @@ -2979,31 +2998,31 @@ void Scene28::updateAnimations() { _vm->setGrabCursorSprite(kItemHorn); _vm->invAdd(kItemHorn); updateHotspots(); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS28GrabEmptyBucket: - _vm->_gnap->playPullOutDevice(0, 0); - _vm->_gnap->playUseDevice(0, 0); + gnap.playPullOutDevice(0, 0); + gnap.playUseDevice(0, 0); gameSys.setAnimation(0x111, 99, 0); gameSys.insertSequence(0x111, 99, 274, 99, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_actionStatus = kAS28GrabEmptyBucketDone; + gnap._actionStatus = kAS28GrabEmptyBucketDone; break; case kAS28GrabEmptyBucketDone: _vm->setGrabCursorSprite(kItemEmptyBucket); _vm->clearFlag(kGFUnk22);; updateHotspots(); _vm->invAdd(kItemEmptyBucket); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS28GrabHornFailsDone: - gameSys.insertSequence(0x107B5, _vm->_gnap->_id, 281, 39, kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); - _vm->_gnap->_sequenceId = 0x7B5; - _vm->_gnap->_sequenceDatNum = 1; + gameSys.insertSequence(0x107B5, gnap._id, 281, 39, kSeqSyncWait, 0, 75 * gnap._pos.x - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); + gnap._sequenceId = 0x7B5; + gnap._sequenceDatNum = 1; gameSys.insertSequence(0x11B, 39, 0, 0, kSeqNone, 0, 0, 0); _currClownSequenceId = 0x11B; _nextClownSequenceId = -1; - _vm->_gnap->_actionStatus = -1; - _vm->_gnap->walkTo(Common::Point(2, 8), -1, 0x107BB, 1); + gnap._actionStatus = -1; + gnap.walkTo(Common::Point(2, 8), -1, 0x107BB, 1); break; case kAS28TalkClown: _clownTalkCtr = (_clownTalkCtr + 1) % 2; @@ -3015,7 +3034,7 @@ void Scene28::updateAnimations() { _nextClownSequenceId = 0x11F; // NOTE CHECKME Never set, bug in the original? break; case kAS28GnapWaiting: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS28LeaveScene: _vm->_sceneDone = true; @@ -3033,7 +3052,7 @@ void Scene28::updateAnimations() { gameSys.insertSequence(0x11B, 39, _nextClownSequenceId, 39, kSeqSyncWait, 0, 0, 0); _currClownSequenceId = 0x11B; _nextClownSequenceId = -1; - _vm->_gnap->_actionStatus = kAS28GnapWaiting; + gnap._actionStatus = kAS28GnapWaiting; break; case 0x116: _vm->setGrabCursorSprite(-1); @@ -3044,20 +3063,20 @@ void Scene28::updateAnimations() { gameSys.insertSequence(0x118, 59, 0, 0, kSeqNone, _vm->getSequenceTotalDuration(_nextClownSequenceId), 0, 0); _currClownSequenceId = _nextClownSequenceId; _nextClownSequenceId = -1; - _vm->_gnap->_actionStatus = kAS28GnapWaiting; + gnap._actionStatus = kAS28GnapWaiting; break; case 0x11D: case 0x11E: case 0x11F: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case 0x119: - gameSys.insertSequence(_nextClownSequenceId, 39, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(_nextClownSequenceId, 39, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(_nextClownSequenceId, 39, 0); gameSys.removeSequence(_currClownSequenceId, 39, true); - _vm->_gnap->_actionStatus = kAS28GrabHornFailsDone; - _vm->_gnap->_sequenceId = _nextClownSequenceId; - _vm->_gnap->_sequenceDatNum = 0; + gnap._actionStatus = kAS28GrabHornFailsDone; + gnap._sequenceId = _nextClownSequenceId; + gnap._sequenceDatNum = 0; _nextClownSequenceId = -1; break; } @@ -3098,6 +3117,7 @@ void Scene29::updateHotspots() { void Scene29::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x1093B, true); _vm->startSoundTimerB(6); @@ -3124,16 +3144,16 @@ void Scene29::run() { gameSys.insertSequence(0xF5, 38, 0, 0, kSeqLoop, 0, 0, 0); if (_vm->_prevSceneNum == 27) { - _vm->_gnap->initPos(12, 7, kDirBottomRight); + gnap.initPos(12, 7, kDirBottomRight); _vm->_plat->initPos(12, 8, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(8, 7), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(8, 7), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(8, 8), -1, 0x107C2, 1); } else { - _vm->_gnap->initPos(-1, 7, kDirBottomRight); + gnap.initPos(-1, 7, kDirBottomRight); _vm->_plat->initPos(-2, 7, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(2, 7), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 7), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(1, 7), -1, 0x107C2, 1); } @@ -3146,32 +3166,32 @@ void Scene29::run() { switch (_vm->_sceneClickedHotspot) { case kHS29Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS29Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemJoint) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -3179,27 +3199,27 @@ void Scene29::run() { break; case kHS29Monkey: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemBanana) { - _vm->_gnap->_idleFacing = kDirBottomRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS29Monkey], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS29UseBananaWithMonkey; + gnap._idleFacing = kDirBottomRight; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS29Monkey], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS29UseBananaWithMonkey; _vm->_newSceneNum = 51; _vm->_isLeavingScene = true; _vm->setGrabCursorSprite(-1); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS29Monkey].x, _vm->_hotspotsWalkPos[kHS29Monkey].y, 5, 6); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS29Monkey].x, _vm->_hotspotsWalkPos[kHS29Monkey].y, 5, 6); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(5, 6); + gnap.playScratchingHead(5, 6); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_hotspotsWalkPos[kHS29Monkey].x, _vm->_hotspotsWalkPos[kHS29Monkey].y); + gnap.playBrainPulsating(_vm->_hotspotsWalkPos[kHS29Monkey].x, _vm->_hotspotsWalkPos[kHS29Monkey].y); break; case GRAB_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -3207,45 +3227,45 @@ void Scene29::run() { break; case kHS29ExitCircus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 26; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS29ExitCircus], 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = kAS29LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS29ExitCircus], 0, 0x107AE, 1); + gnap._actionStatus = kAS29LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS29ExitCircus] + Common::Point(1, 0), -1, -1, 1); } break; case kHS29ExitOutsideClown: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 27; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS29ExitOutsideClown], 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS29LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS29ExitOutsideClown], 0, 0x107AB, 1); + gnap._actionStatus = kAS29LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS29ExitOutsideClown] + Common::Point(0, -1), -1, 0x107CD, 1); } break; case kHS29Aracde: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemDiceQuarterHole) { _vm->setGrabCursorSprite(-1); _vm->_isLeavingScene = true; _vm->_newSceneNum = 52; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS29Aracde], 0, -1, 1); - _vm->_gnap->playIdle(_vm->_hotspotsWalkPos[kHS29Aracde].x, _vm->_hotspotsWalkPos[kHS29Aracde].y); - _vm->_gnap->_actionStatus = kAS29LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS29Aracde], 0, -1, 1); + gnap.playIdle(_vm->_hotspotsWalkPos[kHS29Aracde].x, _vm->_hotspotsWalkPos[kHS29Aracde].y); + gnap._actionStatus = kAS29LeaveScene; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS29Aracde].x, _vm->_hotspotsWalkPos[kHS29Aracde].y, 2, 3); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS29Aracde].x, _vm->_hotspotsWalkPos[kHS29Aracde].y, 2, 3); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan2(0, 0); + gnap.playMoan2(0, 0); break; case GRAB_CURSOR: case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -3253,13 +3273,13 @@ void Scene29::run() { break; case kHS29WalkArea1: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: if (_vm->_mouseClickState._left) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -3271,14 +3291,14 @@ void Scene29::run() { _vm->playSound(0x1093B, true); if (!_vm->_isLeavingScene) { - if (_vm->_gnap->_actionStatus < 0) { - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0) { + gnap.updateIdleSequence(); _vm->_plat->updateIdleSequence(); } if (!_vm->_timers[4]) { if (_vm->invHas(kItemHorn)) { _vm->_timers[4] = _vm->getRandom(20) + 60; - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { switch (_vm->getRandom(5)) { case 0: _nextManSequenceId = 0xED; @@ -3316,10 +3336,11 @@ void Scene29::run() { void Scene29::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS29UseBananaWithMonkey: _nextMonkeySequenceId = 0xE5; break; @@ -3338,14 +3359,14 @@ void Scene29::updateAnimations() { if (gameSys.getAnimationStatus(4) == 2) { if (_nextMonkeySequenceId == 0xE5) { - gameSys.insertSequence(0xF2, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0xF2; + gameSys.insertSequence(0xF2, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0xF2; gameSys.setAnimation(0xE6, 159, 0); gameSys.setAnimation(0, 159, 4); gameSys.insertSequence(_nextMonkeySequenceId, 159, _currMonkeySequenceId, 159, kSeqSyncWait, 0, 0, 0); gameSys.insertSequence(0xE6, 159, _nextMonkeySequenceId, 159, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_actionStatus = kAS29LeaveScene; + gnap._actionStatus = kAS29LeaveScene; _currMonkeySequenceId = 0xE6; _nextMonkeySequenceId = -1; _vm->_timers[5] = 30; diff --git a/engines/gnap/scenes/group3.cpp b/engines/gnap/scenes/group3.cpp index 871177b3d3..c0050c1567 100644 --- a/engines/gnap/scenes/group3.cpp +++ b/engines/gnap/scenes/group3.cpp @@ -46,6 +46,8 @@ void Scene30::updateHotspots() { void Scene30::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; + bool hasTakenPill = false; _vm->playSound(0x1093B, true); @@ -64,10 +66,10 @@ void Scene30::run() { _vm->_timers[4] = _vm->getRandom(100) + 300; _kidSequenceId = 0x101; - _vm->_gnap->initPos(7, 12, kDirBottomRight); + gnap.initPos(7, 12, kDirBottomRight); _vm->_plat->initPos(6, 12, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(7, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(7, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(6, 8), -1, 0x107C2, 1); while (!_vm->_sceneDone) { @@ -79,32 +81,32 @@ void Scene30::run() { switch (_vm->_sceneClickedHotspot) { case kHS30Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS30Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemJoint) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -112,27 +114,27 @@ void Scene30::run() { break; case kHS30PillMachine: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemDiceQuarterHole && !_vm->isFlag(kGFUnk23)) { _vm->_hotspots[kHS30WalkArea1]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS30PillMachine], 0, 0x107BC, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[kHS30PillMachine], 0, 0x107BC, 1); _vm->_hotspots[kHS30WalkArea1]._flags &= ~SF_WALKABLE; - _vm->_gnap->_actionStatus = kAS30UsePillMachine; + gnap._actionStatus = kAS30UsePillMachine; hasTakenPill = true; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS30PillMachine].x, _vm->_hotspotsWalkPos[kHS30PillMachine].y, 8, 5); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS30PillMachine].x, _vm->_hotspotsWalkPos[kHS30PillMachine].y, 8, 5); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->walkTo(Common::Point(9, 8), 0, 0x107BC, 1); - _vm->_gnap->_actionStatus = kAS30LookPillMachine; + gnap.walkTo(Common::Point(9, 8), 0, 0x107BC, 1); + gnap._actionStatus = kAS30LookPillMachine; break; case GRAB_CURSOR: - _vm->_gnap->playScratchingHead(8, 5); + gnap.playScratchingHead(8, 5); break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(8, 5); + gnap.playImpossible(8, 5); break; } } @@ -140,26 +142,26 @@ void Scene30::run() { break; case kHS30ExitCircus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; if (hasTakenPill) _vm->_newSceneNum = 47; else _vm->_newSceneNum = 26; - _vm->_gnap->walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS30ExitCircus].y), 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = kAS30LeaveScene; + gnap.walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS30ExitCircus].y), 0, 0x107AE, 1); + gnap._actionStatus = kAS30LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS30ExitCircus] + Common::Point(1, 0), -1, 0x107C2, 1); } break; case kHS30WalkArea1: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: if (_vm->_mouseClickState._left) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -172,11 +174,11 @@ void Scene30::run() { if (!_vm->_isLeavingScene) { _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0) + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(100) + 300; - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->getRandom(5) == 1) { gameSys.insertSequence(0xFF, 40, 0, 0, kSeqNone, 0, 0, 0); gameSys.insertSequence(0x100, 40, _kidSequenceId, 40, kSeqSyncWait, 0, 0, 0); @@ -188,7 +190,7 @@ void Scene30::run() { } if (!_vm->_timers[5]) { _vm->_timers[5] = _vm->getRandom(50) + 180; - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (!_vm->isFlag(kGFUnk23) || hasTakenPill) gameSys.insertSequence(0x109, 20, 0, 0, kSeqNone, 0, 0, 0); else @@ -212,57 +214,58 @@ void Scene30::run() { void Scene30::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS30LeaveScene: _vm->_sceneDone = true; break; case kAS30UsePillMachine: _vm->setGrabCursorSprite(-1); - gameSys.setAnimation(0x105, _vm->_gnap->_id, 0); - gameSys.insertSequence(0x105, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x105; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = kAS30UsePillMachine2; + gameSys.setAnimation(0x105, gnap._id, 0); + gameSys.insertSequence(0x105, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x105; + gnap._sequenceDatNum = 0; + gnap._actionStatus = kAS30UsePillMachine2; break; case kAS30UsePillMachine2: _vm->hideCursor(); _vm->setGrabCursorSprite(-1); _vm->addFullScreenSprite(0x3F, 255); - gameSys.removeSequence(0x105, _vm->_gnap->_id, true); + gameSys.removeSequence(0x105, gnap._id, true); gameSys.setAnimation(0x102, 256, 0); gameSys.insertSequence(0x102, 256, 0, 0, kSeqNone, 0, 0, 0); while (gameSys.getAnimationStatus(0) != 2) _vm->gameUpdateTick(); - gameSys.setAnimation(0x103, _vm->_gnap->_id, 0); - gameSys.insertSequence(0x103, _vm->_gnap->_id, 0, 0, kSeqNone, 0, 0, 0); + gameSys.setAnimation(0x103, gnap._id, 0); + gameSys.insertSequence(0x103, gnap._id, 0, 0, kSeqNone, 0, 0, 0); _vm->removeFullScreenSprite(); _vm->showCursor(); - _vm->_gnap->_actionStatus = kAS30UsePillMachine3; + gnap._actionStatus = kAS30UsePillMachine3; _vm->invAdd(kItemPill); _vm->setFlag(kGFUnk23); break; case kAS30UsePillMachine3: - gameSys.setAnimation(0x104, _vm->_gnap->_id, 0); - gameSys.insertSequence(0x104, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, 0x103), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x104; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_actionStatus = kAS30UsePillMachine4; + gameSys.setAnimation(0x104, gnap._id, 0); + gameSys.insertSequence(0x104, gnap._id, makeRid(gnap._sequenceDatNum, 0x103), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x104; + gnap._sequenceDatNum = 0; + gnap._actionStatus = kAS30UsePillMachine4; _vm->setGrabCursorSprite(kItemDiceQuarterHole); break; case kAS30UsePillMachine4: gameSys.insertSequence(0x106, 1, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS30PillMachine] + Common::Point(0, 1), -1, 0x107BC, 1); - _vm->_gnap->_actionStatus = -1; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS30PillMachine] + Common::Point(0, 1), -1, 0x107BC, 1); + gnap._actionStatus = -1; break; case kAS30LookPillMachine: if (_vm->isFlag(kGFUnk23)) _vm->showFullScreenSprite(0xE3); else _vm->showFullScreenSprite(0xE2); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -295,6 +298,7 @@ void Scene31::updateHotspots() { void Scene31::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x1093B, true); _vm->startSoundTimerB(6); @@ -312,16 +316,16 @@ void Scene31::run() { _vm->_timers[5] = _vm->getRandom(50) + 180; if (_vm->_prevSceneNum == 27) { - _vm->_gnap->initPos(-1, 8, kDirBottomLeft); + gnap.initPos(-1, 8, kDirBottomLeft); _vm->_plat->initPos(-1, 9, kDirUnk4); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(3, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(3, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(3, 9), -1, 0x107D2, 1); } else { - _vm->_gnap->initPos(7, 12, kDirBottomRight); + gnap.initPos(7, 12, kDirBottomRight); _vm->_plat->initPos(6, 12, kDirNone); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(7, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(7, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(6, 8), -1, 0x107D2, 1); } @@ -334,32 +338,32 @@ void Scene31::run() { switch (_vm->_sceneClickedHotspot) { case kHS31Device: - if (_vm->_gnap->_actionStatus < 0 || _vm->_gnap->_actionStatus == kAS31PlatMeasuringClown) { + if (gnap._actionStatus < 0 || gnap._actionStatus == kAS31PlatMeasuringClown) { _vm->runMenu(); updateHotspots(); } break; case kHS31Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemJoint) { - _vm->_gnap->useJointOnPlatypus(); + gnap.useJointOnPlatypus(); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -367,42 +371,42 @@ void Scene31::run() { break; case kHS31MeasuringClown: - if (_vm->_gnap->_actionStatus < 0 || _vm->_gnap->_actionStatus == kAS31PlatMeasuringClown) { - if (_vm->_gnap->_actionStatus == kAS31PlatMeasuringClown) { + if (gnap._actionStatus < 0 || gnap._actionStatus == kAS31PlatMeasuringClown) { + if (gnap._actionStatus == kAS31PlatMeasuringClown) { if (_vm->_verbCursor == LOOK_CURSOR) - _vm->_gnap->playScratchingHead(2, 2); + gnap.playScratchingHead(2, 2); else - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS31MeasuringClown].x, _vm->_hotspotsWalkPos[kHS31MeasuringClown].y + 1, 2, 2); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS31MeasuringClown].x, _vm->_hotspotsWalkPos[kHS31MeasuringClown].y + 1, 2, 2); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(2, 2); + gnap.playScratchingHead(2, 2); break; case GRAB_CURSOR: - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS31MeasuringClown] + Common::Point(0, 1), -1, -1, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[kHS31MeasuringClown] + Common::Point(0, 1), -1, -1, 1); _vm->_hotspots[kHS31WalkArea1]._flags |= SF_WALKABLE; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS31MeasuringClown], 0, 0x107B9, 1); + gnap.walkTo(_vm->_hotspotsWalkPos[kHS31MeasuringClown], 0, 0x107B9, 1); _vm->_hotspots[kHS31WalkArea1]._flags &= ~SF_WALKABLE; - _vm->_gnap->_actionStatus = kAS31UseMeasuringClown; + gnap._actionStatus = kAS31UseMeasuringClown; _vm->_timers[4] = 300; break; case TALK_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case PLAT_CURSOR: if (!_vm->invHas(kItemBucketWithBeer)) { - _vm->_gnap->useDeviceOnPlatypus(); + gnap.useDeviceOnPlatypus(); _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS31MeasuringClown] + Common::Point(0, 1), 1, 0x107C2, 1); _vm->_hotspots[kHS31WalkArea1]._flags |= SF_WALKABLE; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS31MeasuringClown], 1, 0x107C2, 1); _vm->_hotspots[kHS31WalkArea1]._flags &= ~SF_WALKABLE; _vm->_plat->_actionStatus = kAS31PlatMeasuringClown; - _vm->_gnap->_actionStatus = kAS31PlatMeasuringClown; + gnap._actionStatus = kAS31PlatMeasuringClown; _vm->_timers[4] = 300; } else - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -410,36 +414,36 @@ void Scene31::run() { break; case kHS31BeerBarrel: - if (_vm->_gnap->_actionStatus < 0 || _vm->_gnap->_actionStatus == kAS31PlatMeasuringClown) { + if (gnap._actionStatus < 0 || gnap._actionStatus == kAS31PlatMeasuringClown) { if (_vm->_grabCursorSpriteIndex == kItemEmptyBucket && _beerGuyDistracted) { _vm->setGrabCursorSprite(-1); - _vm->_gnap->walkTo(_vm->_gnap->_pos, -1, _vm->_gnap->getSequenceId(gskIdle, _vm->_hotspotsWalkPos[kHS31BeerBarrel]) | 0x10000, 1); + gnap.walkTo(gnap._pos, -1, gnap.getSequenceId(gskIdle, _vm->_hotspotsWalkPos[kHS31BeerBarrel]) | 0x10000, 1); _clerkMeasureMaxCtr += 5; gameSys.insertSequence(0xF8, 59, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->playPullOutDevice(6, 8); - _vm->_gnap->playUseDevice(0, 0); - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS31BeerBarrel], 0, 0x107BC, 1); - _vm->_gnap->_actionStatus = kAS31FillEmptyBucketWithBeer; + gnap.playPullOutDevice(6, 8); + gnap.playUseDevice(0, 0); + gnap.walkTo(_vm->_hotspotsWalkPos[kHS31BeerBarrel], 0, 0x107BC, 1); + gnap._actionStatus = kAS31FillEmptyBucketWithBeer; _vm->_timers[4] = 300; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS31BeerBarrel].x, _vm->_hotspotsWalkPos[kHS31BeerBarrel].y, 6, 2); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS31BeerBarrel].x, _vm->_hotspotsWalkPos[kHS31BeerBarrel].y, 6, 2); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(6, 2); + gnap.playScratchingHead(6, 2); break; case GRAB_CURSOR: if (_beerGuyDistracted) { - _vm->_gnap->playScratchingHead(6, 2); + gnap.playScratchingHead(6, 2); } else { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS31BeerBarrel], 0, 0x107BC, 1); - _vm->_gnap->_actionStatus = kAS31UseBeerBarrel; - _vm->_gnap->_idleFacing = kDirUpLeft; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS31BeerBarrel], 0, 0x107BC, 1); + gnap._actionStatus = kAS31UseBeerBarrel; + gnap._idleFacing = kDirUpLeft; } break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -447,33 +451,33 @@ void Scene31::run() { break; case kHS31ExitCircus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 26; - _vm->_gnap->walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS31ExitCircus].y), 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = kAS31LeaveScene; + gnap.walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS31ExitCircus].y), 0, 0x107AE, 1); + gnap._actionStatus = kAS31LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS31ExitCircus] + Common::Point(1, 0), -1, -1, 1); } break; case kHS31ExitOutsideClown: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_newSceneNum = 27; - _vm->_gnap->walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS31ExitOutsideClown].y), 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = kAS31LeaveScene; + gnap.walkTo(Common::Point(-1, _vm->_hotspotsWalkPos[kHS31ExitOutsideClown].y), 0, 0x107AF, 1); + gnap._actionStatus = kAS31LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS31ExitOutsideClown] + Common::Point(0, 1), -1, 0x107CF, 1); } break; case kHS31WalkArea1: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: if (_vm->_mouseClickState._left) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -487,11 +491,11 @@ void Scene31::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0) _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0) + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(20) + 60; - if (_vm->_gnap->_actionStatus < 0 && _nextClerkSequenceId == -1) { + if (gnap._actionStatus < 0 && _nextClerkSequenceId == -1) { switch (_vm->getRandom(6)){ case 0: _nextClerkSequenceId = 0xFF; @@ -510,7 +514,7 @@ void Scene31::run() { } if (!_vm->_timers[5]) { _vm->_timers[5] = _vm->getRandom(50) + 180; - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->getRandom(2) != 0) gameSys.insertSequence(0x104, 20, 0, 0, kSeqNone, 0, 0, 0); else @@ -534,28 +538,29 @@ void Scene31::run() { void Scene31::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS31UseBeerBarrel: _nextClerkSequenceId = 0xFE; break; case kAS31FillEmptyBucketWithBeer: gameSys.setAnimation(0x102, 59, 0); - gameSys.insertSequence(0x102, 59, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_pos = Common::Point(5, 7); - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_sequenceId = 0x102; - _vm->_gnap->_id = 59; - _vm->_gnap->_actionStatus = kAS31FillEmptyBucketWithBeerDone; + gameSys.insertSequence(0x102, 59, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._pos = Common::Point(5, 7); + gnap._sequenceDatNum = 0; + gnap._sequenceId = 0x102; + gnap._id = 59; + gnap._actionStatus = kAS31FillEmptyBucketWithBeerDone; break; case kAS31FillEmptyBucketWithBeerDone: - _vm->_gnap->_idleFacing = kDirBottomLeft; - _vm->_gnap->playPullOutDevice(0, 0); - _vm->_gnap->playUseDevice(0, 0); + gnap._idleFacing = kDirBottomLeft; + gnap.playPullOutDevice(0, 0); + gnap.playUseDevice(0, 0); gameSys.insertSequence(0xF9, 59, 0xF8, 59, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; _vm->invAdd(kItemBucketWithBeer); _vm->invRemove(kItemEmptyBucket); _vm->setGrabCursorSprite(kItemBucketWithBeer); @@ -566,7 +571,7 @@ void Scene31::updateAnimations() { break; case kAS31LeaveScene: _vm->_sceneDone = true; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -593,14 +598,14 @@ void Scene31::updateAnimations() { case 0xFC: ++_clerkMeasureCtr; if (_clerkMeasureCtr >= _clerkMeasureMaxCtr) { - if (_vm->_gnap->_actionStatus != 5) + if (gnap._actionStatus != 5) _vm->_plat->_actionStatus = -1; _vm->_timers[0] = 40; gameSys.insertSequence(0xFD, 39, _currClerkSequenceId, 39, kSeqSyncWait, 0, 0, 0); _currClerkSequenceId = 0xFD; _nextClerkSequenceId = -1; - if (_vm->_gnap->_actionStatus != kAS31FillEmptyBucketWithBeerDone && _vm->_gnap->_actionStatus != kAS31FillEmptyBucketWithBeer) - _vm->_gnap->_actionStatus = -1; + if (gnap._actionStatus != kAS31FillEmptyBucketWithBeerDone && gnap._actionStatus != kAS31FillEmptyBucketWithBeer) + gnap._actionStatus = -1; _beerGuyDistracted = false; _clerkMeasureMaxCtr = 3; gameSys.setAnimation(0xFD, 39, 3); @@ -617,7 +622,7 @@ void Scene31::updateAnimations() { gameSys.setAnimation(_nextClerkSequenceId, 39, 3); _currClerkSequenceId = _nextClerkSequenceId; _nextClerkSequenceId = -1; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; default: if (_nextClerkSequenceId != -1) { @@ -657,6 +662,7 @@ void Scene32::updateHotspots() { void Scene32::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x1091C, true); _vm->startSoundTimerC(5); @@ -664,13 +670,13 @@ void Scene32::run() { _vm->_timers[4] = _vm->getRandom(100) + 300; if (_vm->_prevSceneNum == 33) { - _vm->_gnap->initPos(11, 6, kDirBottomLeft); + gnap.initPos(11, 6, kDirBottomLeft); _vm->_plat->initPos(12, 6, kDirUnk4); _vm->endSceneInit(); _vm->_plat->walkTo(Common::Point(9, 6), -1, 0x107D2, 1); - _vm->_gnap->walkTo(Common::Point(8, 6), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(8, 6), -1, 0x107BA, 1); } else { - _vm->_gnap->initPos(1, 6, kDirBottomRight); + gnap.initPos(1, 6, kDirBottomRight); _vm->_plat->initPos(1, 7, kDirNone); _vm->endSceneInit(); } @@ -685,30 +691,30 @@ void Scene32::run() { switch (_vm->_sceneClickedHotspot) { case kHS32Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS32Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; } } @@ -716,11 +722,11 @@ void Scene32::run() { break; case kHS32ExitTruck: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->setGrabCursorSprite(-1); - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS32ExitTruck], 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS32LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS32ExitTruck], 0, 0x107AB, 1); + gnap._actionStatus = kAS32LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS32ExitTruck] + Common::Point(0, 1), -1, 0x107CD, 1); _vm->_newSceneNum = 33; } @@ -734,14 +740,14 @@ void Scene32::run() { case kHS32WalkArea6: case kHS32WalkArea7: case kHS32WalkArea8: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; } - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = 0; } @@ -753,8 +759,8 @@ void Scene32::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0) _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0) + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(100) + 300; if (_vm->getRandom(2) != 0) @@ -812,6 +818,7 @@ void Scene33::updateHotspots() { void Scene33::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->playSound(0x1091C, true); _vm->startSoundTimerC(6); @@ -826,26 +833,26 @@ void Scene33::run() { switch (_vm->_prevSceneNum) { case 34: - _vm->_gnap->initPos(11, 7, kDirBottomLeft); + gnap.initPos(11, 7, kDirBottomLeft); _vm->_plat->initPos(12, 7, kDirUnk4); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(8, 7), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(8, 7), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(9, 7), -1, 0x107D2, 1); break; case 37: - _vm->_gnap->initPos(7, 7, kDirBottomRight); + gnap.initPos(7, 7, kDirBottomRight); _vm->_plat->initPos(8, 7, kDirNone); _vm->endSceneInit(); break; case 32: - _vm->_gnap->initPos(-1, 6, kDirBottomRight); + gnap.initPos(-1, 6, kDirBottomRight); _vm->_plat->initPos(-1, 7, kDirNone); _vm->endSceneInit(); _vm->_plat->walkTo(Common::Point(2, 7), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(2, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 8), -1, 0x107B9, 1); break; default: - _vm->_gnap->initPos(3, 7, kDirBottomRight); + gnap.initPos(3, 7, kDirBottomRight); _vm->_plat->initPos(2, 7, kDirNone); _vm->endSceneInit(); break; @@ -861,30 +868,30 @@ void Scene33::run() { switch (_vm->_sceneClickedHotspot) { case kHS33Device: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } break; case kHS33Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; } } @@ -892,26 +899,26 @@ void Scene33::run() { break; case kHS33Chicken: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(7, 9, 9, 8); + gnap.playShowCurrItem(7, 9, 9, 8); } else { switch (_vm->_verbCursor) { case GRAB_CURSOR: - _vm->_gnap->_idleFacing = kDirBottomRight; - if (_vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS33Chicken], 0, _vm->_gnap->getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1)) - _vm->_gnap->_actionStatus = kAS33UseChicken; + gnap._idleFacing = kDirBottomRight; + if (gnap.walkTo(_vm->_hotspotsWalkPos[kHS33Chicken], 0, gnap.getSequenceId(gskIdle, Common::Point(0, 0)) | 0x10000, 1)) + gnap._actionStatus = kAS33UseChicken; else - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirBottomRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS33Chicken], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS33TalkChicken; + gnap._idleFacing = kDirBottomRight; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS33Chicken], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS33TalkChicken; break; case LOOK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -919,44 +926,44 @@ void Scene33::run() { break; case kHS33ExitHouse: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->_actionStatus = kAS33LeaveScene; + gnap._actionStatus = kAS33LeaveScene; _vm->_newSceneNum = 37; - if (_vm->_gnap->_pos.x > 6) - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, 0x107AD, 1); + if (gnap._pos.x > 6) + gnap.walkTo(gnap._pos, 0, 0x107AD, 1); else - _vm->_gnap->walkTo(Common::Point(6, 7), 0, 0x107B1, 1); + gnap.walkTo(Common::Point(6, 7), 0, 0x107B1, 1); } break; case kHS33ExitBarn: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->_actionStatus = kAS33LeaveScene; + gnap._actionStatus = kAS33LeaveScene; _vm->_newSceneNum = 35; - if (_vm->_gnap->_pos.x > 7) - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, 0x107AD, 1); + if (gnap._pos.x > 7) + gnap.walkTo(gnap._pos, 0, 0x107AD, 1); else - _vm->_gnap->walkTo(Common::Point(7, 7), 0, 0x107B1, 1); + gnap.walkTo(Common::Point(7, 7), 0, 0x107B1, 1); } break; case kHS33ExitCreek: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS33ExitCreek], 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS33LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS33ExitCreek], 0, 0x107AB, 1); + gnap._actionStatus = kAS33LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS33ExitCreek], -1, 0x107CD, 1); _vm->_newSceneNum = 34; } break; case kHS33ExitPigpen: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS33ExitPigpen], 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = kAS33LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS33ExitPigpen], 0, 0x107AF, 1); + gnap._actionStatus = kAS33LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS33ExitPigpen], -1, 0x107CF, 1); _vm->_newSceneNum = 32; } @@ -964,13 +971,13 @@ void Scene33::run() { case kHS33WalkArea1: case kHS33WalkArea2: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -984,8 +991,8 @@ void Scene33::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0) _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0) + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(100) + 300; if (_vm->getRandom(2) != 0) @@ -993,7 +1000,7 @@ void Scene33::run() { else gameSys.insertSequence(0x82, 256, 0, 0, kSeqNone, 0, 0, 0); } - if (!_vm->_timers[5] && _nextChickenSequenceId == -1 && _vm->_gnap->_actionStatus != kAS33TalkChicken && _vm->_gnap->_actionStatus != kAS33UseChicken) { + if (!_vm->_timers[5] && _nextChickenSequenceId == -1 && gnap._actionStatus != kAS33TalkChicken && gnap._actionStatus != kAS33UseChicken) { if (_vm->getRandom(6) != 0) { _nextChickenSequenceId = 0x7E; _vm->_timers[5] = _vm->getRandom(20) + 30; @@ -1018,9 +1025,10 @@ void Scene33::run() { void Scene33::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS33LeaveScene: _vm->_sceneDone = true; break; @@ -1032,17 +1040,17 @@ void Scene33::updateAnimations() { _vm->_timers[2] = 100; break; case kAS33UseChickenDone: - gameSys.insertSequence(0x107B5, _vm->_gnap->_id, 0x81, 179, kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); - _vm->_gnap->_sequenceId = 0x7B5; - _vm->_gnap->_sequenceDatNum = 1; + gameSys.insertSequence(0x107B5, gnap._id, 0x81, 179, kSeqSyncWait, 0, 75 * gnap._pos.x - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); + gnap._sequenceId = 0x7B5; + gnap._sequenceDatNum = 1; _currChickenSequenceId = 0x7E; gameSys.setAnimation(0x7E, 179, 2); gameSys.insertSequence(_currChickenSequenceId, 179, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; _vm->_timers[5] = 30; break; default: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -1050,18 +1058,18 @@ void Scene33::updateAnimations() { if (gameSys.getAnimationStatus(2) == 2) { if (_nextChickenSequenceId == 0x81) { gameSys.setAnimation(_nextChickenSequenceId, 179, 0); - gameSys.insertSequence(_nextChickenSequenceId, 179, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(_nextChickenSequenceId, 179, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); gameSys.removeSequence(_currChickenSequenceId, 179, true); _nextChickenSequenceId = -1; _currChickenSequenceId = -1; - _vm->_gnap->_actionStatus = kAS33UseChickenDone; + gnap._actionStatus = kAS33UseChickenDone; _vm->_timers[5] = 500; } else if (_nextChickenSequenceId == 0x7F) { gameSys.setAnimation(_nextChickenSequenceId, 179, 2); gameSys.insertSequence(_nextChickenSequenceId, 179, _currChickenSequenceId, 179, kSeqSyncWait, 0, 0, 0); _currChickenSequenceId = _nextChickenSequenceId; _nextChickenSequenceId = -1; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } else if (_nextChickenSequenceId != -1) { gameSys.setAnimation(_nextChickenSequenceId, 179, 2); gameSys.insertSequence(_nextChickenSequenceId, 179, _currChickenSequenceId, 179, kSeqSyncWait, 0, 0, 0); @@ -1085,6 +1093,8 @@ int Scene38::init() { } void Scene38::updateHotspots() { + PlayerGnap& gnap = *_vm->_gnap; + _vm->setHotspot(kHS38Platypus, 0, 0, 0, 0, SF_WALKABLE | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); _vm->setHotspot(kHS38ExitHouse, 150, 585, 650, 600, SF_EXIT_D_CURSOR, 0, 8); _vm->setHotspot(kHS38ExitCave, 430, 440, 655, 470, SF_WALKABLE, 0, 8); @@ -1102,15 +1112,15 @@ void Scene38::updateHotspots() { _vm->_hotspots[kHS38Platypus]._flags = SF_WALKABLE | SF_DISABLED; if (_vm->_plat->_actionStatus == kAS38PlatypusHoldingTrapDoor) _vm->_hotspots[kHS38ExitCave]._flags = SF_EXIT_D_CURSOR; - else if (_vm->_gnap->_actionStatus == kAS38HoldingHuntingTrophy) + else if (gnap._actionStatus == kAS38HoldingHuntingTrophy) _vm->_hotspots[kHS38ExitCave]._flags = SF_EXIT_D_CURSOR; if (_vm->_plat->_actionStatus == kAS38PlatypusHoldingTrapDoor) _vm->_hotspots[kHS38TrapDoorLid1]._flags = SF_DISABLED; - else if (_vm->_gnap->_actionStatus == kAS38HoldingHuntingTrophy) + else if (gnap._actionStatus == kAS38HoldingHuntingTrophy) _vm->_hotspots[kHS38TrapDoorLid1]._flags = SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR; if (_vm->_plat->_actionStatus == kAS38PlatypusHoldingTrapDoor) _vm->_hotspots[kHS38TrapDoorLid2]._flags = SF_DISABLED; - else if (_vm->_gnap->_actionStatus == kAS38HoldingHuntingTrophy) + else if (gnap._actionStatus == kAS38HoldingHuntingTrophy) _vm->_hotspots[kHS38TrapDoorLid2]._flags = SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR; if (_vm->_plat->_actionStatus == kAS38PlatypusHoldingTrapDoor) _vm->_hotspots[kHS38WalkArea6]._flags = SF_NONE; @@ -1118,14 +1128,16 @@ void Scene38::updateHotspots() { } void Scene38::run() { + PlayerGnap& gnap = *_vm->_gnap; + _vm->queueInsertDeviceIcon(); _vm->_gameSys->insertSequence(0x9B, 0, 0, 0, kSeqNone, 0, 0, 0); if (_vm->_prevSceneNum == 39) { - _vm->_gnap->initPos(3, 7, kDirBottomLeft); + gnap.initPos(3, 7, kDirBottomLeft); _vm->_plat->initPos(4, 7, kDirUnk4); } else { - _vm->_gnap->initPos(3, 8, kDirBottomRight); + gnap.initPos(3, 8, kDirBottomRight); _vm->_plat->initPos(4, 8, kDirNone); } _vm->endSceneInit(); @@ -1144,87 +1156,87 @@ void Scene38::run() { break; case kHS38Platypus: - if (_vm->_gnap->_actionStatus == kAS38HoldingHuntingTrophy) { - _vm->_gnap->_actionStatus = kAS38ReleaseHuntingTrophy; + if (gnap._actionStatus == kAS38HoldingHuntingTrophy) { + gnap._actionStatus = kAS38ReleaseHuntingTrophy; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; } } break; case kHS38ExitHouse: - if (_vm->_gnap->_actionStatus == kAS38HoldingHuntingTrophy) { - _vm->_gnap->_actionStatus = kAS38ReleaseHuntingTrophy; + if (gnap._actionStatus == kAS38HoldingHuntingTrophy) { + gnap._actionStatus = kAS38ReleaseHuntingTrophy; } else { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(-1, -1), 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = kAS38LeaveScene; + gnap.walkTo(Common::Point(-1, -1), 0, 0x107AE, 1); + gnap._actionStatus = kAS38LeaveScene; _vm->_newSceneNum = 37; } break; case kHS38ExitCave: - if (_vm->_gnap->_actionStatus == kAS38HoldingHuntingTrophy) { - _vm->_gnap->_actionStatus = kAS38ReleaseHuntingTrophy; + if (gnap._actionStatus == kAS38HoldingHuntingTrophy) { + gnap._actionStatus = kAS38ReleaseHuntingTrophy; if (_vm->_plat->_actionStatus == kAS38PlatypusHoldingTrapDoor) _vm->_isLeavingScene = true; } else if (_vm->_plat->_actionStatus == kAS38PlatypusHoldingTrapDoor) { _vm->_sceneWaiting = false; _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(5, 7), 0, 0x107BB, 1); + gnap.walkTo(Common::Point(5, 7), 0, 0x107BB, 1); _vm->_newSceneNum = 39; - _vm->_gnap->_actionStatus = kAS38ExitCave; + gnap._actionStatus = kAS38ExitCave; } break; case kHS38TrapDoorLid1: case kHS38TrapDoorLid2: - if (_vm->_gnap->_actionStatus == kAS38HoldingHuntingTrophy) { + if (gnap._actionStatus == kAS38HoldingHuntingTrophy) { if (_vm->_verbCursor == PLAT_CURSOR && _vm->_plat->_actionStatus != kAS38PlatypusHoldingTrapDoor) - _vm->_gnap->_actionStatus = kAS38UsePlatypusWithTrapDoor; + gnap._actionStatus = kAS38UsePlatypusWithTrapDoor; else - _vm->_gnap->_actionStatus = kAS38ReleaseHuntingTrophy; + gnap._actionStatus = kAS38ReleaseHuntingTrophy; } break; case kHS38HuntingTrophy: - if (_vm->_gnap->_actionStatus != kAS38HoldingHuntingTrophy) { + if (gnap._actionStatus != kAS38HoldingHuntingTrophy) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(3, 6, 2, 0); + gnap.playShowCurrItem(3, 6, 2, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(0, 0); + gnap.playScratchingHead(0, 0); break; case GRAB_CURSOR: if (_vm->_plat->_actionStatus == kAS38PlatypusHoldingTrapDoor) - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); else { - _vm->_gnap->walkTo(Common::Point(3, 6), 0, 0x107BB, 1); + gnap.walkTo(Common::Point(3, 6), 0, 0x107BB, 1); _vm->_plat->walkTo(Common::Point(4, 8), -1, -1, 1); - _vm->_gnap->_actionStatus = kAS38UseHuntingTrophy; + gnap._actionStatus = kAS38UseHuntingTrophy; } break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(2, 0); + gnap.playBrainPulsating(2, 0); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1240,18 +1252,18 @@ void Scene38::run() { case kHS38WalkArea4: case kHS38WalkArea5: case kHS38WalkArea6: - if (_vm->_gnap->_actionStatus == kAS38HoldingHuntingTrophy) - _vm->_gnap->_actionStatus = kAS38ReleaseHuntingTrophy; - else if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus == kAS38HoldingHuntingTrophy) + gnap._actionStatus = kAS38ReleaseHuntingTrophy; + else if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: if (_vm->_mouseClickState._left) { - if (_vm->_gnap->_actionStatus == kAS38HoldingHuntingTrophy) - _vm->_gnap->_actionStatus = kAS38ReleaseHuntingTrophy; - else if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus == kAS38HoldingHuntingTrophy) + gnap._actionStatus = kAS38ReleaseHuntingTrophy; + else if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -1261,7 +1273,7 @@ void Scene38::run() { if (!_vm->_isLeavingScene) { _vm->_plat->updateIdleSequence(); - _vm->_gnap->updateIdleSequence(); + gnap.updateIdleSequence(); } _vm->checkGameKeys(); @@ -1278,89 +1290,90 @@ void Scene38::run() { void Scene38::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS38LeaveScene: _vm->_sceneDone = true; break; case kAS38ExitCave: gameSys.removeSequence(_vm->_plat->_sequenceId | (_vm->_plat->_sequenceDatNum << 16), _vm->_plat->_id, true); - gameSys.insertSequence(0xA3, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0xA3; - _vm->_gnap->_sequenceDatNum = 0; - gameSys.setAnimation(0xA3, _vm->_gnap->_id, 0); - _vm->_gnap->_actionStatus = kAS38LeaveScene; + gameSys.insertSequence(0xA3, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0xA3; + gnap._sequenceDatNum = 0; + gameSys.setAnimation(0xA3, gnap._id, 0); + gnap._actionStatus = kAS38LeaveScene; break; case kAS38UseHuntingTrophy: gameSys.removeSequence(0x9B, 0, true); - gameSys.insertSequence(0x9C, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x9C; - _vm->_gnap->_sequenceDatNum = 0; - gameSys.setAnimation(0x9C, _vm->_gnap->_id, 0); - _vm->_gnap->_actionStatus = kAS38HoldingHuntingTrophy; + gameSys.insertSequence(0x9C, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x9C; + gnap._sequenceDatNum = 0; + gameSys.setAnimation(0x9C, gnap._id, 0); + gnap._actionStatus = kAS38HoldingHuntingTrophy; updateHotspots(); break; case kAS38HoldingHuntingTrophy: if (_vm->_plat->_actionStatus != kAS38PlatypusHoldingTrapDoor) _vm->_sceneWaiting = true; - if (_vm->_gnap->_sequenceId == 0xA4) { - gameSys.insertSequence(0x9D, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x9D; + if (gnap._sequenceId == 0xA4) { + gameSys.insertSequence(0x9D, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x9D; } else { - gameSys.insertSequence(0xA4, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0xA4; + gameSys.insertSequence(0xA4, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0xA4; } - _vm->_gnap->_sequenceDatNum = 0; - gameSys.setAnimation(_vm->_gnap->_sequenceId, _vm->_gnap->_id, 0); + gnap._sequenceDatNum = 0; + gameSys.setAnimation(gnap._sequenceId, gnap._id, 0); break; case kAS38ReleaseHuntingTrophy: - if (_vm->_gnap->_sequenceId == 0x9E) { + if (gnap._sequenceId == 0x9E) { gameSys.insertSequence(0x9B, 0, 0, 0, kSeqNone, 0, 0, 0); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } else if (_vm->_plat->_actionStatus == kAS38PlatypusHoldingTrapDoor) { - gameSys.insertSequence(0xA0, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0xA0; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_pos = Common::Point(3, 6); - _vm->_gnap->_idleFacing = kDirBottomRight; + gameSys.insertSequence(0xA0, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0xA0; + gnap._sequenceDatNum = 0; + gnap._pos = Common::Point(3, 6); + gnap._idleFacing = kDirBottomRight; if (_vm->_isLeavingScene) { _vm->_sceneWaiting = false; - _vm->_gnap->walkTo(Common::Point(5, 7), 0, 0x107BB, 1); + gnap.walkTo(Common::Point(5, 7), 0, 0x107BB, 1); _vm->_newSceneNum = 39; - _vm->_gnap->_actionStatus = kAS38ExitCave; + gnap._actionStatus = kAS38ExitCave; } else { - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } } else { - gameSys.insertSequence(0x9E, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x9E; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_pos = Common::Point(3, 6); - _vm->_gnap->_idleFacing = kDirBottomRight; - gameSys.setAnimation(0x9E, _vm->_gnap->_id, 0); + gameSys.insertSequence(0x9E, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x9E; + gnap._sequenceDatNum = 0; + gnap._pos = Common::Point(3, 6); + gnap._idleFacing = kDirBottomRight; + gameSys.setAnimation(0x9E, gnap._id, 0); _vm->_sceneWaiting = false; updateHotspots(); } break; case kAS38UsePlatypusWithTrapDoor: _vm->_sceneWaiting = false; - gameSys.insertSequence(0x9F, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x9F; - _vm->_gnap->_sequenceDatNum = 0; - gameSys.setAnimation(0x9F, _vm->_gnap->_id, 0); - _vm->_gnap->_actionStatus = kAS38HoldingHuntingTrophy; + gameSys.insertSequence(0x9F, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x9F; + gnap._sequenceDatNum = 0; + gameSys.setAnimation(0x9F, gnap._id, 0); + gnap._actionStatus = kAS38HoldingHuntingTrophy; if (_vm->_plat->_idleFacing != kDirNone) _vm->_plat->playSequence(0x107D5); else _vm->_plat->playSequence(0x107D4); _vm->_plat->walkTo(Common::Point(8, 7), -1, 0x107D2, 1); - gameSys.insertSequence(0xA1, _vm->_gnap->_id + 1, _vm->_plat->_sequenceId | (_vm->_plat->_sequenceDatNum << 16), _vm->_plat->_id, kSeqSyncWait, 0, 0, 0); + gameSys.insertSequence(0xA1, gnap._id + 1, _vm->_plat->_sequenceId | (_vm->_plat->_sequenceDatNum << 16), _vm->_plat->_id, kSeqSyncWait, 0, 0, 0); _vm->_plat->_sequenceId = 0xA1; _vm->_plat->_sequenceDatNum = 0; - _vm->_plat->_id = _vm->_gnap->_id + 1; - gameSys.setAnimation(0xA1, _vm->_gnap->_id + 1, 1); + _vm->_plat->_id = gnap._id + 1; + gameSys.setAnimation(0xA1, gnap._id + 1, 1); _vm->_plat->_actionStatus = kAS38PlatypusHoldingTrapDoor; updateHotspots(); break; @@ -1407,6 +1420,7 @@ void Scene39::updateHotspots() { void Scene39::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; // Bug in the original? Timer was never initialized. _vm->_timers[5] = 0; @@ -1420,11 +1434,11 @@ void Scene39::run() { _nextGuySequenceId = -1; if (_vm->_prevSceneNum == 38) { - _vm->_gnap->initPos(3, 7, kDirUpRight); + gnap.initPos(3, 7, kDirUpRight); _vm->_plat->initPos(2, 7, kDirUpLeft); _vm->endSceneInit(); } else { - _vm->_gnap->initPos(4, 7, kDirBottomRight); + gnap.initPos(4, 7, kDirBottomRight); _vm->_plat->initPos(5, 7, kDirNone); _vm->endSceneInit(); } @@ -1451,23 +1465,23 @@ void Scene39::run() { break; case kHS39Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; } } @@ -1475,30 +1489,30 @@ void Scene39::run() { break; case kHS39ExitUfoParty: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; _vm->_sceneDone = true; - _vm->_gnap->walkTo(_vm->_gnap->_pos, 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS39LeaveScene; + gnap.walkTo(gnap._pos, 0, 0x107AB, 1); + gnap._actionStatus = kAS39LeaveScene; _vm->_newSceneNum = 40; } break; case kHS39Sign: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS39Sign], 0, -1, 1); - _vm->_gnap->playIdle(_vm->_hotspotsWalkPos[kHS39Sign].x, _vm->_hotspotsWalkPos[kHS39Sign].y); + gnap.walkTo(_vm->_hotspotsWalkPos[kHS39Sign], 0, -1, 1); + gnap.playIdle(_vm->_hotspotsWalkPos[kHS39Sign].x, _vm->_hotspotsWalkPos[kHS39Sign].y); _vm->showFullScreenSprite(0x1C); break; case GRAB_CURSOR: case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1506,7 +1520,7 @@ void Scene39::run() { break; case kHS39ExitInsideHouse: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_sceneDone = true; _vm->_isLeavingScene = true; _vm->_newSceneNum = 38; @@ -1515,13 +1529,13 @@ void Scene39::run() { case kHS39WalkArea1: case kHS39WalkArea2: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; default: - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); _vm->_mouseClickState._left = false; } break; @@ -1532,8 +1546,8 @@ void Scene39::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0) _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0) + gnap.updateIdleSequence(); if (!_vm->_timers[5]) { _vm->_timers[5] = _vm->getRandom(20) + 50; switch (_vm->getRandom(4)) { @@ -1568,13 +1582,14 @@ void Scene39::run() { void Scene39::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - if (_vm->_gnap->_actionStatus == kAS39LeaveScene) + if (gnap._actionStatus == kAS39LeaveScene) _vm->_sceneDone = true; else - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } if (gameSys.getAnimationStatus(3) == 2 && _nextGuySequenceId != -1) { diff --git a/engines/gnap/scenes/group4.cpp b/engines/gnap/scenes/group4.cpp index 44a99f9f90..154f837ea1 100644 --- a/engines/gnap/scenes/group4.cpp +++ b/engines/gnap/scenes/group4.cpp @@ -52,6 +52,8 @@ void Scene40::updateHotspots() { } void Scene40::run() { + PlayerGnap& gnap = *_vm->_gnap; + _vm->queueInsertDeviceIcon(); _vm->endSceneInit(); @@ -74,23 +76,23 @@ void Scene40::run() { break; case kHS40Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; } } @@ -98,56 +100,56 @@ void Scene40::run() { break; case kHS40ExitCave: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_newSceneNum = 39; _vm->_sceneDone = true; } break; case kHS40ExitToyStand: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_newSceneNum = 41; _vm->_sceneDone = true; } break; case kHS40ExitBBQ: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_newSceneNum = 42; _vm->_sceneDone = true; } break; case kHS40ExitUfo: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_newSceneNum = 43; _vm->_sceneDone = true; } break; case kHS40ExitKissinBooth: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_newSceneNum = 44; _vm->_sceneDone = true; } break; case kHS40ExitDancefloor: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_newSceneNum = 45; _vm->_sceneDone = true; } break; case kHS40ExitShoe: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_newSceneNum = 46; _vm->_sceneDone = true; } break; default: - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) _vm->_mouseClickState._left = false; break; @@ -168,11 +170,12 @@ void Scene40::run() { void Scene40::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - if (_vm->_gnap->_actionStatus) - _vm->_gnap->_actionStatus = -1; + if (gnap._actionStatus) + gnap._actionStatus = -1; else _vm->_sceneDone = true; } @@ -220,6 +223,7 @@ void Scene41::updateHotspots() { void Scene41::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->queueInsertDeviceIcon(); @@ -228,7 +232,7 @@ void Scene41::run() { if (_vm->_toyUfoY < 0 || _vm->_toyUfoY > 300) _vm->_toyUfoY = 150; if (!_vm->_timers[9]) - _vm->_gnap->_actionStatus = kAS41GiveBackToyUfo; + gnap._actionStatus = kAS41GiveBackToyUfo; } else { if (!_vm->isFlag(kGFUnk16) && !_vm->isFlag(kGFJointTaken) && !_vm->isFlag(kGFUnk18) && !_vm->isFlag(kGFGroceryStoreHatTaken)) _vm->toyUfoSetStatus(kGFUnk16); @@ -263,29 +267,29 @@ void Scene41::run() { gameSys.insertSequence(0x127, 2, 0, 0, kSeqNone, 0, 0, 0); if (_vm->isFlag(kGFGnapControlsToyUFO)) { - _vm->_gnap->_sequenceId = 0x120; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->_pos = Common::Point(7, 7); - _vm->_gnap->_id = 140; + gnap._sequenceId = 0x120; + gnap._sequenceDatNum = 0; + gnap._idleFacing = kDirUpRight; + gnap._pos = Common::Point(7, 7); + gnap._id = 140; gameSys.insertSequence(0x120, 140, 0, 0, kSeqNone, 0, 0, 0); - gameSys.setAnimation(makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, 0); + gameSys.setAnimation(makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, 0); _vm->_plat->initPos(8, 10, kDirBottomLeft); _vm->endSceneInit(); } else if (_vm->_prevSceneNum == 45) { - _vm->_gnap->initPos(-1, 8, kDirUpRight); + gnap.initPos(-1, 8, kDirUpRight); _vm->_plat->initPos(-2, 8, kDirUpLeft); _vm->endSceneInit(); _vm->_plat->walkTo(Common::Point(1, 8), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(2, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 8), -1, 0x107B9, 1); } else if (_vm->_prevSceneNum == 42) { - _vm->_gnap->initPos(11, 8, kDirUpRight); + gnap.initPos(11, 8, kDirUpRight); _vm->_plat->initPos(11, 9, kDirUpLeft); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(8, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(8, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(9, 8), -1, 0x107D2, 1); } else { - _vm->_gnap->initPos(5, 8, kDirBottomRight); + gnap.initPos(5, 8, kDirBottomRight); _vm->_plat->initPos(6, 8, kDirBottomLeft); _vm->endSceneInit(); } @@ -349,23 +353,23 @@ void Scene41::run() { break; case kHS41Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; } } @@ -374,49 +378,49 @@ void Scene41::run() { case kHS41ExitCave: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS41ExitCave], 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = kAS41LeaveScene; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS41ExitCave], 0, 0x107AE, 1); + gnap._actionStatus = kAS41LeaveScene; _vm->_newSceneNum = 40; break; case kHS41Exit: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS41Exit].x, -1), 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = kAS41LeaveScene; + gnap.walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS41Exit].x, -1), 0, 0x107AF, 1); + gnap._actionStatus = kAS41LeaveScene; _vm->_plat->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS41Exit].x, -1), -1, 0x107CF, 1); _vm->_newSceneNum = 45; break; case kHS41ExitBBQ: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS41ExitBBQ].x, -1), 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS41LeaveScene; + gnap.walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS41ExitBBQ].x, -1), 0, 0x107AB, 1); + gnap._actionStatus = kAS41LeaveScene; _vm->_plat->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS41ExitBBQ].x, -1), -1, 0x107CD, 1); _vm->_newSceneNum = 42; break; case kHS41ToyVendor: if (_vm->_grabCursorSpriteIndex == kItemDiceQuarterHole) { - _vm->_gnap->_actionStatus = kAS41UseQuarterWithToyVendor; - _vm->_gnap->walkTo(Common::Point(4, 7), 0, 0x107BB, 9); - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 5, 0); + gnap._actionStatus = kAS41UseQuarterWithToyVendor; + gnap.walkTo(Common::Point(4, 7), 0, 0x107BB, 9); + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 5, 0); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(4, 7, 5, 0); + gnap.playShowCurrItem(4, 7, 5, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(5, 0); + gnap.playMoan1(5, 0); break; case GRAB_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(Common::Point(4, 7), 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS41TalkToyVendor; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(Common::Point(4, 7), 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS41TalkToyVendor; break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -424,27 +428,27 @@ void Scene41::run() { case kHS41Kid: if (_vm->_grabCursorSpriteIndex == kItemChickenBucket) { - _vm->_gnap->walkTo(Common::Point(7, 7), 0, 0x107BB, 1); - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->_actionStatus = kAS41UseChickenBucketWithKid; + gnap.walkTo(Common::Point(7, 7), 0, 0x107BB, 1); + gnap._idleFacing = kDirUpRight; + gnap._actionStatus = kAS41UseChickenBucketWithKid; } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(7, 7, 8, 0); + gnap.playShowCurrItem(7, 7, 8, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(9, 0); + gnap.playScratchingHead(9, 0); break; case GRAB_CURSOR: - _vm->_gnap->walkTo(Common::Point(7, 7), 0, 0x107BB, 1); - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->_actionStatus = kAS41GrabKid; + gnap.walkTo(Common::Point(7, 7), 0, 0x107BB, 1); + gnap._idleFacing = kDirUpRight; + gnap._actionStatus = kAS41GrabKid; break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(Common::Point(7, 7), 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._idleFacing = kDirUpRight; + gnap.walkTo(Common::Point(7, 7), 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -452,58 +456,58 @@ void Scene41::run() { case kHS41ToyUfo: if (_vm->_grabCursorSpriteIndex == kItemGum) { - _vm->_gnap->playPullOutDevice(9, 0); - gameSys.setAnimation(makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, 0); - _vm->_gnap->_actionStatus = kAS41UseGumWithToyUfo; + gnap.playPullOutDevice(9, 0); + gameSys.setAnimation(makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, 0); + gnap._actionStatus = kAS41UseGumWithToyUfo; } break; case kHS41WalkArea1: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; } } if (_vm->isFlag(kGFGnapControlsToyUFO)) { - if (!_vm->_timers[9] && _vm->_gnap->_actionStatus < 0) { - _vm->_gnap->_actionStatus = kAS41GiveBackToyUfo; - if (_vm->_gnap->_sequenceId == 0x121 || _vm->_gnap->_sequenceId == 0x122) { - gameSys.insertSequence(0x123, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x123; - _vm->_gnap->_sequenceDatNum = 0; - gameSys.setAnimation(0x123, _vm->_gnap->_id, 0); + if (!_vm->_timers[9] && gnap._actionStatus < 0) { + gnap._actionStatus = kAS41GiveBackToyUfo; + if (gnap._sequenceId == 0x121 || gnap._sequenceId == 0x122) { + gameSys.insertSequence(0x123, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x123; + gnap._sequenceDatNum = 0; + gameSys.setAnimation(0x123, gnap._id, 0); } } } - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { _vm->_mouseClickState._left = false; if (_vm->isFlag(kGFGnapControlsToyUFO)) { int sequenceId; if (_vm->_leftClickMouseX >= 400) { - if (_vm->_gnap->_sequenceId == 0x11F || _vm->_gnap->_sequenceId == 0x120 || _vm->_gnap->_sequenceId == 0x123 || _vm->_gnap->_sequenceId == 0x126) + if (gnap._sequenceId == 0x11F || gnap._sequenceId == 0x120 || gnap._sequenceId == 0x123 || gnap._sequenceId == 0x126) sequenceId = 0x120; else if (_vm->_leftClickMouseX - _vm->_toyUfoX >= 400) sequenceId = 0x126; else sequenceId = 0x123; } else { - if (_vm->_gnap->_sequenceId == 0x121 || _vm->_gnap->_sequenceId == 0x125 || _vm->_gnap->_sequenceId == 0x122) + if (gnap._sequenceId == 0x121 || gnap._sequenceId == 0x125 || gnap._sequenceId == 0x122) sequenceId = 0x122; else if (_vm->_toyUfoX - _vm->_leftClickMouseX >= 400) sequenceId = 0x125; else sequenceId = 0x121; } - gameSys.insertSequence(sequenceId, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = sequenceId; - _vm->_gnap->_sequenceDatNum = 0; - gameSys.setAnimation(sequenceId, _vm->_gnap->_id, 0); + gameSys.insertSequence(sequenceId, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = sequenceId; + gnap._sequenceDatNum = 0; + gameSys.setAnimation(sequenceId, gnap._id, 0); _vm->_toyUfoActionStatus = kAS41ToyUfoRefresh; _vm->toyUfoFlyTo(-1, -1, 0, 799, 0, 300, 2); } else { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); } } @@ -512,11 +516,11 @@ void Scene41::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0) _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(100) + 100; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _vm->_toyUfoActionStatus == -1 && _nextToyVendorSequenceId == -1) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _vm->_toyUfoActionStatus == -1 && _nextToyVendorSequenceId == -1) { switch (_vm->getRandom(3)) { case 0: _nextToyVendorSequenceId = 0x113; @@ -534,7 +538,7 @@ void Scene41::run() { } if (!_vm->_timers[5]) { _vm->_timers[5] = _vm->getRandom(30) + 20; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _vm->_toyUfoActionStatus == -1 && _nextKidSequenceId == -1) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _vm->_toyUfoActionStatus == -1 && _nextKidSequenceId == -1) { if (_vm->isFlag(kGFGnapControlsToyUFO)) _nextKidSequenceId = 0x11B; else if (_vm->getRandom(3) != 0) @@ -560,28 +564,29 @@ void Scene41::run() { void Scene41::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS41LeaveScene: gameSys.setAnimation(0, 0, 0); _vm->_sceneDone = true; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS41UseQuarterWithToyVendor: gameSys.setAnimation(0, 0, 0); _nextToyVendorSequenceId = 0x114; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS41TalkToyVendor: gameSys.setAnimation(0, 0, 0); _nextToyVendorSequenceId = 0x116; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; case kAS41UseGumWithToyUfo: gameSys.setAnimation(0, 0, 0); - _vm->_gnap->playUseDevice(9, 0); - _vm->_gnap->_actionStatus = -1; + gnap.playUseDevice(9, 0); + gnap._actionStatus = -1; _vm->setGrabCursorSprite(-1); _vm->invRemove(kItemGum); _vm->_toyUfoActionStatus = kAS41UfoGumAttached; @@ -591,17 +596,17 @@ void Scene41::updateAnimations() { _vm->_timers[2] = _vm->getRandom(30) + 20; _vm->_timers[3] = _vm->getRandom(50) + 200; _vm->setGrabCursorSprite(-1); - gameSys.insertSequence(0x11F, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x11F; - _vm->_gnap->_sequenceDatNum = 0; - gameSys.setAnimation(0x11F, _vm->_gnap->_id, 0); + gameSys.insertSequence(0x11F, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x11F; + gnap._sequenceDatNum = 0; + gameSys.setAnimation(0x11F, gnap._id, 0); _nextKidSequenceId = 0x11A; gameSys.insertSequence(0x11A, 1, _currKidSequenceId, 1, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(_nextKidSequenceId, 1, 4); _currKidSequenceId = _nextKidSequenceId; _nextKidSequenceId = 0x11B; _vm->_timers[5] = _vm->getRandom(30) + 20; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; _vm->setFlag(kGFGnapControlsToyUFO); updateHotspots(); _vm->_timers[9] = 600; @@ -611,10 +616,10 @@ void Scene41::updateAnimations() { if (gameSys.getAnimationStatus(3) == 2 && gameSys.getAnimationStatus(4) == 2) { _vm->_timers[2] = _vm->getRandom(30) + 20; _vm->_timers[3] = _vm->getRandom(50) + 200; - gameSys.insertSequence(0x110, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x110; - _vm->_gnap->_sequenceDatNum = 0; - gameSys.setAnimation(0x110, _vm->_gnap->_id, 0); + gameSys.insertSequence(0x110, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x110; + gnap._sequenceDatNum = 0; + gameSys.setAnimation(0x110, gnap._id, 0); _nextToyVendorSequenceId = 0x111; gameSys.insertSequence(0x111, 1, _currToyVendorSequenceId, 1, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(_nextToyVendorSequenceId, 1, 3); @@ -627,19 +632,19 @@ void Scene41::updateAnimations() { _currKidSequenceId = _nextKidSequenceId; _nextKidSequenceId = -1; _vm->_timers[5] = _vm->getRandom(30) + 20; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } break; case kAS41GiveBackToyUfo: if (gameSys.getAnimationStatus(3) == 2 && gameSys.getAnimationStatus(4) == 2) { _vm->_timers[2] = _vm->getRandom(30) + 20; _vm->_timers[3] = _vm->getRandom(50) + 200; - gameSys.insertSequence(0x124, _vm->_gnap->_id, - makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, + gameSys.insertSequence(0x124, gnap._id, + makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x124; - _vm->_gnap->_sequenceDatNum = 0; - gameSys.setAnimation(0x124, _vm->_gnap->_id, 0); + gnap._sequenceId = 0x124; + gnap._sequenceDatNum = 0; + gameSys.setAnimation(0x124, gnap._id, 0); _nextToyVendorSequenceId = 0x112; gameSys.insertSequence(0x112, 1, _currToyVendorSequenceId, 1, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(_nextToyVendorSequenceId, 1, 3); @@ -652,7 +657,7 @@ void Scene41::updateAnimations() { _currKidSequenceId = _nextKidSequenceId; _nextKidSequenceId = -1; _vm->_timers[5] = _vm->getRandom(30) + 20; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; _vm->clearFlag(kGFGnapControlsToyUFO); updateHotspots(); } @@ -750,6 +755,7 @@ void Scene42::updateHotspots() { void Scene42::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->queueInsertDeviceIcon(); @@ -785,22 +791,22 @@ void Scene42::run() { if (_vm->_toyUfoSequenceId == 0x872) _vm->setGrabCursorSprite(-1); } else if (_vm->_prevSceneNum == 41) { - _vm->_gnap->initPos(-1, 8, kDirUpRight); + gnap.initPos(-1, 8, kDirUpRight); _vm->_plat->initPos(-1, 9, kDirUpLeft); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(2, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(1, 8), -1, 0x107C2, 1); } else if (_vm->_prevSceneNum == 43) { - _vm->_gnap->initPos(11, 8, kDirUpRight); + gnap.initPos(11, 8, kDirUpRight); _vm->_plat->initPos(11, 9, kDirUpLeft); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(8, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(8, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(9, 8), -1, 0x107D2, 1); } else { - _vm->_gnap->initPos(5, 11, kDirUpRight); + gnap.initPos(5, 11, kDirUpRight); _vm->_plat->initPos(6, 11, kDirUpLeft); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(5, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(5, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(6, 8), -1, 0x107C2, 1); } @@ -861,23 +867,23 @@ void Scene42::run() { break; case kHS42Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; } } @@ -886,49 +892,49 @@ void Scene42::run() { case kHS42ExitUfoParty: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(_vm->_gnap->_pos.x, _vm->_hotspotsWalkPos[kHS42ExitUfoParty].y), 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = kAS42LeaveScene; + gnap.walkTo(Common::Point(gnap._pos.x, _vm->_hotspotsWalkPos[kHS42ExitUfoParty].y), 0, 0x107AE, 1); + gnap._actionStatus = kAS42LeaveScene; _vm->_plat->walkTo(Common::Point(_vm->_plat->_pos.x, _vm->_hotspotsWalkPos[kHS42ExitUfoParty].y), -1, 0x107C7, 1); _vm->_newSceneNum = 40; break; case kHS42ExitToyStand: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS42ExitToyStand].x, _vm->_gnap->_pos.y), 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = kAS42LeaveScene; + gnap.walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS42ExitToyStand].x, gnap._pos.y), 0, 0x107AF, 1); + gnap._actionStatus = kAS42LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS42ExitToyStand], -1, 0x107CF, 1); _vm->_newSceneNum = 41; break; case kHS42ExitUfo: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS42ExitUfo].x, _vm->_gnap->_pos.y), 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = kAS42LeaveScene; + gnap.walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS42ExitUfo].x, gnap._pos.y), 0, 0x107AB, 1); + gnap._actionStatus = kAS42LeaveScene; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS42ExitUfo], -1, 0x107CD, 1); _vm->_newSceneNum = 43; break; case kHS42BBQVendor: if (_vm->_grabCursorSpriteIndex == kItemDiceQuarterHole) { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS42BBQVendor], 0, 0x107BB, 1); - _vm->_gnap->_actionStatus = kAS42UseQuarterWithBBQVendor; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS42BBQVendor], 0, 0x107BB, 1); + gnap._actionStatus = kAS42UseQuarterWithBBQVendor; if (_vm->_plat->_pos.y < 9) _vm->_plat->walkTo(Common::Point(_vm->_plat->_pos.x, 9), -1, -1, 1); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS42BBQVendor].x, _vm->_hotspotsWalkPos[kHS42BBQVendor].y, _vm->_hotspotsWalkPos[kHS42BBQVendor].x + 1, 0); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS42BBQVendor].x, _vm->_hotspotsWalkPos[kHS42BBQVendor].y, _vm->_hotspotsWalkPos[kHS42BBQVendor].x + 1, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(_vm->_hotspotsWalkPos[kHS42BBQVendor].x - 1, 0); + gnap.playScratchingHead(_vm->_hotspotsWalkPos[kHS42BBQVendor].x - 1, 0); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS42BBQVendor], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = kAS42TalkBBQVendor; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS42BBQVendor], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = kAS42TalkBBQVendor; break; case GRAB_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -936,19 +942,19 @@ void Scene42::run() { case kHS42ChickenLeg: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS42ChickenLeg].x, _vm->_hotspotsWalkPos[kHS42ChickenLeg].y, _vm->_hotspotsWalkPos[kHS42ChickenLeg].x - 1, 0); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS42ChickenLeg].x, _vm->_hotspotsWalkPos[kHS42ChickenLeg].y, _vm->_hotspotsWalkPos[kHS42ChickenLeg].x - 1, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(_vm->_hotspotsWalkPos[kHS42ChickenLeg].x - 1, 0); + gnap.playScratchingHead(_vm->_hotspotsWalkPos[kHS42ChickenLeg].x - 1, 0); break; case GRAB_CURSOR: - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS42ChickenLeg], 0, 0x107BC, 1); - _vm->_gnap->_actionStatus = kAS42GrabChickenLeg; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS42ChickenLeg], 0, 0x107BC, 1); + gnap._actionStatus = kAS42GrabChickenLeg; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -956,20 +962,20 @@ void Scene42::run() { case kHS42WalkArea1: case kHS42WalkArea2: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; } } - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { _vm->_mouseClickState._left = false; if (_vm->isFlag(kGFGnapControlsToyUFO)) { _vm->_toyUfoActionStatus = kAS42ToyUfoRefresh; _vm->toyUfoFlyTo(-1, -1, 0, 799, 0, 300, 3); } else { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); } } @@ -980,11 +986,11 @@ void Scene42::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(20) + 30; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextBBQVendorSequenceId == -1) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextBBQVendorSequenceId == -1) { switch (_vm->getRandom(8)) { case 0: _nextBBQVendorSequenceId = 0x14C; @@ -1024,24 +1030,25 @@ void Scene42::run() { void Scene42::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case kAS42LeaveScene: gameSys.setAnimation(0, 0, 0); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; _vm->_sceneDone = true; break; case kAS42TalkBBQVendor: gameSys.setAnimation(0, 0, 0); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; _nextBBQVendorSequenceId = 0x14B; break; case kAS42UseQuarterWithBBQVendor: case kAS42GrabChickenLeg: if (gameSys.getAnimationStatus(2) == 2) { int sequenceId; - if (_vm->_gnap->_actionStatus == kAS42UseQuarterWithBBQVendor) { + if (gnap._actionStatus == kAS42UseQuarterWithBBQVendor) { _vm->invRemove(kItemDiceQuarterHole); _vm->invAdd(kItemChickenBucket); _vm->setGrabCursorSprite(-1); @@ -1062,23 +1069,23 @@ void Scene42::updateAnimations() { _nextBBQVendorSequenceId = 0x146; } if (sequenceId == 0x7B7) { - gameSys.insertSequence(0x107B7, _vm->_gnap->_id, - makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, + gameSys.insertSequence(0x107B7, gnap._id, + makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, _vm->getSequenceTotalDuration(_nextBBQVendorSequenceId), - 75 * _vm->_gnap->_pos.x - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); - _vm->_gnap->_sequenceDatNum = 1; + 75 * gnap._pos.x - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); + gnap._sequenceDatNum = 1; } else { - gameSys.insertSequence(sequenceId, _vm->_gnap->_id, - makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, + gameSys.insertSequence(sequenceId, gnap._id, + makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceDatNum = 0; + gnap._sequenceDatNum = 0; } - _vm->_gnap->_sequenceId = sequenceId; - gameSys.setAnimation(sequenceId | (_vm->_gnap->_sequenceDatNum << 16), _vm->_gnap->_id, 0); - if (_vm->_gnap->_actionStatus == kAS42UseQuarterWithBBQVendor) - _vm->_gnap->_actionStatus = kAS42UseQuarterWithBBQVendorDone; + gnap._sequenceId = sequenceId; + gameSys.setAnimation(sequenceId | (gnap._sequenceDatNum << 16), gnap._id, 0); + if (gnap._actionStatus == kAS42UseQuarterWithBBQVendor) + gnap._actionStatus = kAS42UseQuarterWithBBQVendorDone; else - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; gameSys.insertSequence(_nextBBQVendorSequenceId, 1, _currBBQVendorSequenceId, 1, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(_nextBBQVendorSequenceId, 1, 2); _currBBQVendorSequenceId = _nextBBQVendorSequenceId; @@ -1094,11 +1101,11 @@ void Scene42::updateAnimations() { case kAS42UseQuarterWithBBQVendorDone: gameSys.setAnimation(0, 0, 0); _vm->setGrabCursorSprite(kItemChickenBucket); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; default: gameSys.setAnimation(0, 0, 0); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -1200,6 +1207,7 @@ void Scene43::updateHotspots() { void Scene43::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->queueInsertDeviceIcon(); @@ -1227,30 +1235,30 @@ void Scene43::run() { } else { switch (_vm->_prevSceneNum) { case 42: - _vm->_gnap->initPos(-1, 8, kDirUpRight); + gnap.initPos(-1, 8, kDirUpRight); _vm->_plat->initPos(-1, 9, kDirUpLeft); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(2, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(1, 8), -1, 0x107C2, 1); break; case 44: - _vm->_gnap->initPos(11, 8, kDirUpRight); + gnap.initPos(11, 8, kDirUpRight); _vm->_plat->initPos(11, 9, kDirUpLeft); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(8, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(8, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(9, 8), -1, 0x107D2, 1); break; case 54: - _vm->_gnap->initPos(4, 7, kDirBottomLeft); + gnap.initPos(4, 7, kDirBottomLeft); _vm->_plat->initPos(11, 8, kDirUpLeft); _vm->endSceneInit(); _vm->_plat->walkTo(Common::Point(9, 8), -1, 0x107D2, 1); break; default: - _vm->_gnap->initPos(5, 11, kDirUpRight); + gnap.initPos(5, 11, kDirUpRight); _vm->_plat->initPos(6, 11, kDirUpLeft); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(5, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(5, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(6, 8), -1, 0x107C2, 1); break; } @@ -1319,23 +1327,23 @@ void Scene43::run() { break; case kHS43Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; } } @@ -1344,44 +1352,44 @@ void Scene43::run() { case kHS43ExitUfoParty: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS43ExitUfoParty], 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = 0; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS43ExitUfoParty], 0, 0x107AE, 1); + gnap._actionStatus = 0; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS43ExitUfoParty], -1, 0x107C7, 1); _vm->_newSceneNum = 40; break; case kHS43ExitBBQ: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS43ExitBBQ].x, _vm->_gnap->_pos.y), 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = 0; + gnap.walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS43ExitBBQ].x, gnap._pos.y), 0, 0x107AF, 1); + gnap._actionStatus = 0; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS43ExitBBQ], -1, 0x107CF, 1); _vm->_newSceneNum = 42; break; case kHS43ExitKissinBooth: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS43ExitKissinBooth].x, _vm->_gnap->_pos.y), 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = 0; + gnap.walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS43ExitKissinBooth].x, gnap._pos.y), 0, 0x107AB, 1); + gnap._actionStatus = 0; _vm->_plat->walkTo(_vm->_hotspotsWalkPos[kHS43ExitKissinBooth], -1, 0x107CD, 1); _vm->_newSceneNum = 44; break; case kHS43TwoHeadedGuy: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(6, 8, 7, 0); + gnap.playShowCurrItem(6, 8, 7, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(7, 0); + gnap.playScratchingHead(7, 0); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(Common::Point(5, 8), 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = 2; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(Common::Point(5, 8), 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = 2; break; case GRAB_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1390,20 +1398,20 @@ void Scene43::run() { case kHS43Key: case kHS43Ufo: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(3, 7, 2, 0); + gnap.playShowCurrItem(3, 7, 2, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(0, 0); + gnap.playScratchingHead(0, 0); break; case GRAB_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(Common::Point(3, 7), 0, 67515, 1); - _vm->_gnap->_actionStatus = 1; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(Common::Point(3, 7), 0, 67515, 1); + gnap._actionStatus = 1; break; case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1411,19 +1419,19 @@ void Scene43::run() { case kHS43WalkArea1: case kHS43WalkArea2: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; } } - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { _vm->_mouseClickState._left = false; if (_vm->isFlag(kGFGnapControlsToyUFO) && (_vm->_toyUfoActionStatus == 5 || _vm->_toyUfoActionStatus == -1)) { _vm->_toyUfoActionStatus = 5; _vm->toyUfoFlyTo(-1, -1, 0, 799, 0, 300, 3); } else { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); } } @@ -1434,11 +1442,11 @@ void Scene43::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) + gnap.updateIdleSequence(); if (!_vm->_timers[4] && (!_vm->isFlag(kGFGnapControlsToyUFO) || !_vm->isFlag(kGFGroceryStoreHatTaken))) { _vm->_timers[4] = _vm->getRandom(100) + 100; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextTwoHeadedGuySequenceId == -1) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextTwoHeadedGuySequenceId == -1) { switch (_vm->getRandom(5)) { case 0: _nextTwoHeadedGuySequenceId = 0x13C; @@ -1480,9 +1488,10 @@ void Scene43::run() { void Scene43::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case 0: gameSys.setAnimation(0, 0, 0); _vm->_sceneDone = true; @@ -1492,23 +1501,23 @@ void Scene43::updateAnimations() { if (gameSys.getAnimationStatus(2) == 2) { _vm->_timers[2] = _vm->getRandom(30) + 20; _vm->_timers[3] = _vm->getRandom(50) + 200; - gameSys.insertSequence(0x13D, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x13D; - _vm->_gnap->_sequenceDatNum = 0; - gameSys.setAnimation(0x13D, _vm->_gnap->_id, 0); + gameSys.insertSequence(0x13D, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x13D; + gnap._sequenceDatNum = 0; + gameSys.setAnimation(0x13D, gnap._id, 0); _nextTwoHeadedGuySequenceId = 0x13B; gameSys.insertSequence(0x13B, 1, _currTwoHeadedGuySequenceId, 1, kSeqSyncWait, 0, 0, 0); gameSys.setAnimation(_nextTwoHeadedGuySequenceId, 1, 2); _currTwoHeadedGuySequenceId = _nextTwoHeadedGuySequenceId; _nextTwoHeadedGuySequenceId = -1; _vm->_timers[4] = _vm->getRandom(100) + 100; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } break; default: gameSys.setAnimation(0, 0, 0); - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -1560,7 +1569,7 @@ void Scene43::updateAnimations() { gameSys.setAnimation(0x10874, _vm->_toyUfoId, 3); _vm->_toyUfoActionStatus = 8; _vm->setFlag(kGFJointTaken); - _vm->_gnap->_actionStatus = 3; + gnap._actionStatus = 3; break; case 8: _nextTwoHeadedGuySequenceId = 0x13A; @@ -1633,6 +1642,7 @@ void Scene44::updateHotspots() { void Scene44::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->queueInsertDeviceIcon(); @@ -1681,21 +1691,21 @@ void Scene44::run() { } else { switch (_vm->_prevSceneNum) { case 43: - _vm->_gnap->initPos(-1, 8, kDirUpRight); + gnap.initPos(-1, 8, kDirUpRight); _vm->_plat->initPos(-1, 7, kDirUpLeft); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(2, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 8), -1, 0x107B9, 1); _vm->_plat->walkTo(Common::Point(1, 8), -1, 0x107C2, 1); break; case 46: - _vm->_gnap->initPos(11, 8, kDirUpRight); + gnap.initPos(11, 8, kDirUpRight); _vm->_plat->initPos(11, 8, kDirUpLeft); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(6, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(6, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(7, 8), -1, 0x107D2, 1); break; case 50: - _vm->_gnap->initPos(4, 8, kDirBottomRight); + gnap.initPos(4, 8, kDirBottomRight); if (_vm->_sceneSavegameLoaded) { _vm->_plat->initPos(_vm->_hotspotsWalkPos[4].x, _vm->_hotspotsWalkPos[4].y, kDirUnk4); } else if (!_vm->isFlag(kGFUnk13)) { @@ -1711,11 +1721,11 @@ void Scene44::run() { _vm->endSceneInit(); break; default: - _vm->_gnap->initPos(5, 11, kDirUpRight); + gnap.initPos(5, 11, kDirUpRight); _vm->_plat->initPos(6, 11, kDirUpLeft); _vm->endSceneInit(); _vm->_plat->walkTo(Common::Point(6, 8), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(5, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(5, 8), -1, 0x107BA, 1); break; } } @@ -1767,23 +1777,23 @@ void Scene44::run() { break; case kHS44Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; } } @@ -1792,50 +1802,50 @@ void Scene44::run() { case kHS44ExitUfoParty: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS44ExitUfoParty], 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = 0; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS44ExitUfoParty], 0, 0x107AE, 1); + gnap._actionStatus = 0; _vm->_newSceneNum = 40; break; case kHS44ExitUfo: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS44ExitUfo].x, _vm->_gnap->_pos.y), 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = 0; + gnap.walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS44ExitUfo].x, gnap._pos.y), 0, 0x107AF, 1); + gnap._actionStatus = 0; _vm->_plat->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS44ExitUfo].x, _vm->_plat->_pos.y), -1, 0x107CF, 1); _vm->_newSceneNum = 43; break; case kHS44ExitShow: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS44ExitShow], 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = 0; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS44ExitShow], 0, 0x107AB, 1); + gnap._actionStatus = 0; _vm->_newSceneNum = 46; break; case kHS44KissingLady: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->_actionStatus = 2; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS44KissingLady], 0, -1, 9); - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, _vm->_hotspotsWalkPos[kHS44KissingLady].x - 1, _vm->_hotspotsWalkPos[kHS44KissingLady].y); + gnap._actionStatus = 2; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS44KissingLady], 0, -1, 9); + gnap.playShowItem(_vm->_grabCursorSpriteIndex, _vm->_hotspotsWalkPos[kHS44KissingLady].x - 1, _vm->_hotspotsWalkPos[kHS44KissingLady].y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(4, 3); + gnap.playScratchingHead(4, 3); break; case GRAB_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS44KissingLady], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = 1; + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS44KissingLady], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = 1; break; case PLAT_CURSOR: - _vm->_gnap->useDeviceOnPlatypus(); + gnap.useDeviceOnPlatypus(); _vm->_plat->walkTo(Common::Point(6, 7), 1, 0x107D2, 1); - if (_vm->_gnap->_pos == Common::Point(7, 7)) - _vm->_gnap->walkStep(); - _vm->_gnap->playIdle(5, 7); + if (gnap._pos == Common::Point(7, 7)) + gnap.walkStep(); + gnap.playIdle(5, 7); _vm->_plat->_actionStatus = 4; break; } @@ -1844,25 +1854,25 @@ void Scene44::run() { case kHS44Spring: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS44Spring].x, _vm->_hotspotsWalkPos[kHS44Spring].y, 8, 0); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS44Spring].x, _vm->_hotspotsWalkPos[kHS44Spring].y, 8, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(8, 7); + gnap.playScratchingHead(8, 7); break; case GRAB_CURSOR: - _vm->_gnap->playPullOutDevice(8, 0); - _vm->_gnap->playUseDevice(8, 0); + gnap.playPullOutDevice(8, 0); + gnap.playUseDevice(8, 0); _nextSpringGuySequenceId = 0xFB; _vm->invAdd(kItemSpring); _vm->setFlag(kGFSpringTaken); updateHotspots(); break; case TALK_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1870,22 +1880,22 @@ void Scene44::run() { case kHS44SpringGuy: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS44SpringGuy].x, _vm->_hotspotsWalkPos[kHS44SpringGuy].y, 8, 0); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS44SpringGuy].x, _vm->_hotspotsWalkPos[kHS44SpringGuy].y, 8, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: if (_vm->isFlag(kGFSpringTaken)) - _vm->_gnap->playMoan1(8, 7); + gnap.playMoan1(8, 7); else - _vm->_gnap->playScratchingHead(8, 7); + gnap.playScratchingHead(8, 7); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS44SpringGuy], -1, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS44SpringGuy], -1, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); break; case GRAB_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -1893,20 +1903,20 @@ void Scene44::run() { case kHS44WalkArea1: case kHS44WalkArea2: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; } } - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { _vm->_mouseClickState._left = false; if (_vm->isFlag(kGFGnapControlsToyUFO)) { _vm->_toyUfoActionStatus = 7; _vm->toyUfoFlyTo(-1, -1, 0, 799, 0, 300, 3); } else { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); } } @@ -1916,11 +1926,11 @@ void Scene44::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO) && _currKissingLadySequenceId != 0xF5) _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(20) + 20; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextKissingLadySequenceId == -1) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextKissingLadySequenceId == -1) { switch (_vm->getRandom(20)) { case 0: _nextKissingLadySequenceId = 0xED; @@ -1947,7 +1957,7 @@ void Scene44::run() { } if (!_vm->_timers[5]) { _vm->_timers[5] = _vm->getRandom(20) + 20; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextSpringGuySequenceId == -1) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextSpringGuySequenceId == -1) { if (_vm->getRandom(5) != 0) { if (!_vm->isFlag(kGFSpringTaken)) _nextSpringGuySequenceId = 0xF9; @@ -1976,10 +1986,11 @@ void Scene44::run() { void Scene44::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case 0: _vm->_sceneDone = true; break; @@ -1990,7 +2001,7 @@ void Scene44::updateAnimations() { _nextKissingLadySequenceId = 0xF2; break; } - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } if (gameSys.getAnimationStatus(1) == 2) { @@ -2114,6 +2125,7 @@ void Scene45::updateHotspots() { void Scene45::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (!_vm->isSoundPlaying(0x1094A)) _vm->playSound(0x1094A, true); @@ -2141,39 +2153,39 @@ void Scene45::run() { gameSys.insertSequence(_vm->_toyUfoSequenceId | 0x10000, _vm->_toyUfoId, 0, 0, kSeqNone, 0, _vm->_toyUfoX - 274, _vm->_toyUfoY - 128); _vm->endSceneInit(); } else if (_vm->isFlag(kGFUnk22)) { - _vm->_gnap->_sequenceId = 0x9E; - _vm->_gnap->_sequenceDatNum = 0; - _vm->_gnap->_id = 1; + gnap._sequenceId = 0x9E; + gnap._sequenceDatNum = 0; + gnap._id = 1; gameSys.setAnimation(0x9E, 1, 0); - _vm->_gnap->_actionStatus = 1; - gameSys.insertSequence(_vm->_gnap->_sequenceId, _vm->_gnap->_id, 0, 0, kSeqNone, 0, 0, 0); + gnap._actionStatus = 1; + gameSys.insertSequence(gnap._sequenceId, gnap._id, 0, 0, kSeqNone, 0, 0, 0); _vm->_plat->initPos(4, 8, kDirNone); _vm->endSceneInit(); } else if (_vm->_prevSceneNum == 46) { - _vm->_gnap->initPos(-1, 8, kDirUpRight); + gnap.initPos(-1, 8, kDirUpRight); _vm->_plat->initPos(-1, 9, kDirUpLeft); _vm->endSceneInit(); _vm->_plat->walkTo(Common::Point(4, 8), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(2, 7), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 7), -1, 0x107B9, 1); } else if (_vm->_prevSceneNum == 41) { - _vm->_gnap->initPos(11, 8, kDirUpRight); + gnap.initPos(11, 8, kDirUpRight); _vm->_plat->initPos(11, 9, kDirUpLeft); _vm->endSceneInit(); _vm->_plat->walkTo(Common::Point(4, 8), -1, 0x107D2, 1); - _vm->_gnap->walkTo(Common::Point(10, 9), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(10, 9), -1, 0x107BA, 1); } else { - _vm->_gnap->initPos(2, 11, kDirUpRight); + gnap.initPos(2, 11, kDirUpRight); _vm->_plat->initPos(6, 11, kDirUpLeft); _vm->endSceneInit(); _vm->_plat->walkTo(Common::Point(4, 8), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(2, 7), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 7), -1, 0x107B9, 1); } if (!_vm->isFlag(kGFUnk21) && !_vm->isFlag(kGFGnapControlsToyUFO)) { _vm->setFlag(kGFUnk21); _vm->setGrabCursorSprite(-1); - gameSys.setAnimation(0x9D, _vm->_gnap->_id, 0); - gameSys.insertSequence(0x9D, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); + gameSys.setAnimation(0x9D, gnap._id, 0); + gameSys.insertSequence(0x9D, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); while (gameSys.getAnimationStatus(0) != 2) { _vm->gameUpdateTick(); if (gameSys.getAnimationStatus(2) == 2) { @@ -2190,22 +2202,22 @@ void Scene45::run() { gameSys.setAnimation(0x99, 1, 4); } } - _vm->_gnap->_sequenceId = 0x9D; - _vm->_gnap->_sequenceDatNum = 0; + gnap._sequenceId = 0x9D; + gnap._sequenceDatNum = 0; _vm->hideCursor(); _vm->addFullScreenSprite(0x8A, 255); gameSys.setAnimation(0xA0, 256, 0); gameSys.insertSequence(0xA0, 256, 0, 0, kSeqNone, 0, 0, 0); while (gameSys.getAnimationStatus(0) != 2) _vm->gameUpdateTick(); - gameSys.setAnimation(0x107BD, _vm->_gnap->_id, 0); - gameSys.insertSequence(0x107BD, _vm->_gnap->_id, - makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, - kSeqSyncWait, 0, 75 * _vm->_gnap->_pos.x - _vm->_gnap->_gridX, 48 * _vm->_gnap->_pos.y - _vm->_gnap->_gridY); + gameSys.setAnimation(0x107BD, gnap._id, 0); + gameSys.insertSequence(0x107BD, gnap._id, + makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, + kSeqSyncWait, 0, 75 * gnap._pos.x - gnap._gridX, 48 * gnap._pos.y - gnap._gridY); _vm->removeFullScreenSprite(); _vm->showCursor(); - _vm->_gnap->_sequenceId = 0x7BD; - _vm->_gnap->_sequenceDatNum = 1; + gnap._sequenceId = 0x7BD; + gnap._sequenceDatNum = 1; } _vm->_plat->playSequence(0x9A); @@ -2256,25 +2268,25 @@ void Scene45::run() { break; case kHS45Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); _vm->_plat->playSequence(0x9A); gameSys.setAnimation(_vm->_plat->_sequenceId, _vm->_plat->_id, 1); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; } } @@ -2282,29 +2294,29 @@ void Scene45::run() { break; case kHS45ExitUfoParty: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(_vm->_gnap->_pos.x, _vm->_hotspotsWalkPos[kHS45ExitUfoParty].y), 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = 0; + gnap.walkTo(Common::Point(gnap._pos.x, _vm->_hotspotsWalkPos[kHS45ExitUfoParty].y), 0, 0x107AE, 1); + gnap._actionStatus = 0; _vm->_newSceneNum = 40; } break; case kHS45ExitShoe: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS45ExitShoe].x, _vm->_gnap->_pos.y), 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = 0; + gnap.walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS45ExitShoe].x, gnap._pos.y), 0, 0x107AF, 1); + gnap._actionStatus = 0; _vm->_plat->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS45ExitShoe].x, _vm->_plat->_pos.y), -1, 0x107CF, 1); _vm->_newSceneNum = 46; } break; case kHS45ExitRight: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS45ExitRight].x, _vm->_gnap->_pos.y), 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = 0; + gnap.walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS45ExitRight].x, gnap._pos.y), 0, 0x107AB, 1); + gnap._actionStatus = 0; _vm->_plat->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS45ExitRight].x, _vm->_plat->_pos.y), -1, 0x107CD, 1); _vm->_newSceneNum = 41; } @@ -2318,23 +2330,23 @@ void Scene45::run() { break; case kHS45DiscoBall: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex == kItemSpring) { - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS45DiscoBall], 0, 0x9F, 5); - _vm->_gnap->_actionStatus = 1; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS45DiscoBall], 0, 0x9F, 5); + gnap._actionStatus = 1; _vm->setGrabCursorSprite(-1); _vm->invRemove(kItemSpring); } else if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowItem(_vm->_grabCursorSpriteIndex, 5, 0); + gnap.playShowItem(_vm->_grabCursorSpriteIndex, 5, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playScratchingHead(5, 0); + gnap.playScratchingHead(5, 0); break; case GRAB_CURSOR: case TALK_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2342,27 +2354,27 @@ void Scene45::run() { break; case kHS45WalkArea1: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; } } - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { _vm->_mouseClickState._left = false; if (_vm->isFlag(kGFGnapControlsToyUFO)) { _vm->_toyUfoActionStatus = 3; _vm->toyUfoFlyTo(-1, -1, 0, 799, 0, 300, 5); } else { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); } } updateAnimations(); _vm->toyUfoCheckTimer(); - if (!_vm->_isLeavingScene && _vm->_gnap->_actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) - _vm->_gnap->updateIdleSequence(); + if (!_vm->_isLeavingScene && gnap._actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) + gnap.updateIdleSequence(); _vm->checkGameKeys(); @@ -2380,10 +2392,11 @@ void Scene45::run() { void Scene45::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case 0: _vm->_sceneDone = true; break; @@ -2391,13 +2404,13 @@ void Scene45::updateAnimations() { _vm->_sceneWaiting = true; _vm->setFlag(kGFUnk22); updateHotspots(); - gameSys.insertSequence(0x9E, _vm->_gnap->_id, makeRid(_vm->_gnap->_sequenceDatNum, _vm->_gnap->_sequenceId), _vm->_gnap->_id, kSeqSyncWait, 0, 0, 0); - _vm->_gnap->_sequenceId = 0x9E; - _vm->_gnap->_sequenceDatNum = 0; - gameSys.setAnimation(0x9E, _vm->_gnap->_id, 0); + gameSys.insertSequence(0x9E, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); + gnap._sequenceId = 0x9E; + gnap._sequenceDatNum = 0; + gameSys.setAnimation(0x9E, gnap._id, 0); break; default: - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; break; } } @@ -2487,6 +2500,7 @@ void Scene46::updateHotspots() { void Scene46::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; _vm->queueInsertDeviceIcon(); gameSys.insertSequence(0x4D, 0, 0, 0, kSeqLoop, 0, 0, 0); @@ -2514,23 +2528,23 @@ void Scene46::run() { gameSys.insertSequence(_vm->_toyUfoSequenceId | 0x10000, _vm->_toyUfoId, 0, 0, kSeqNone, 0, _vm->_toyUfoX - 274, _vm->_toyUfoY - 128); _vm->endSceneInit(); } else if (_vm->_prevSceneNum == 44) { - _vm->_gnap->initPos(-1, 8, kDirUpRight); + gnap.initPos(-1, 8, kDirUpRight); _vm->_plat->initPos(-1, 8, kDirUpLeft); _vm->endSceneInit(); _vm->_plat->walkTo(Common::Point(1, 8), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(2, 8), -1, 0x107B9, 1); + gnap.walkTo(Common::Point(2, 8), -1, 0x107B9, 1); } else if (_vm->_prevSceneNum == 45) { - _vm->_gnap->initPos(11, 8, kDirUpRight); + gnap.initPos(11, 8, kDirUpRight); _vm->_plat->initPos(12, 8, kDirUpLeft); _vm->endSceneInit(); - _vm->_gnap->walkTo(Common::Point(8, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(8, 8), -1, 0x107BA, 1); _vm->_plat->walkTo(Common::Point(9, 8), -1, 0x107D2, 1); } else { - _vm->_gnap->initPos(5, 11, kDirUpRight); + gnap.initPos(5, 11, kDirUpRight); _vm->_plat->initPos(6, 11, kDirUpLeft); _vm->endSceneInit(); _vm->_plat->walkTo(Common::Point(5, 8), -1, 0x107C2, 1); - _vm->_gnap->walkTo(Common::Point(6, 8), -1, 0x107BA, 1); + gnap.walkTo(Common::Point(6, 8), -1, 0x107BA, 1); } _vm->_timers[4] = _vm->getRandom(50) + 80; @@ -2581,23 +2595,23 @@ void Scene46::run() { break; case kHS46Platypus: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playMoan1(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; case GRAB_CURSOR: - _vm->_gnap->kissPlatypus(0); + gnap.kissPlatypus(0); break; case TALK_CURSOR: - _vm->_gnap->playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playBrainPulsating(_vm->_plat->_pos.x, _vm->_plat->_pos.y); _vm->_plat->playSequence(_vm->_plat->getSequenceId()); break; case PLAT_CURSOR: - _vm->_gnap->playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); + gnap.playImpossible(_vm->_plat->_pos.x, _vm->_plat->_pos.y); break; } } @@ -2606,20 +2620,20 @@ void Scene46::run() { case kHS46SackGuy: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS46SackGuy].x, _vm->_hotspotsWalkPos[kHS46SackGuy].y, 2, 0); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS46SackGuy].x, _vm->_hotspotsWalkPos[kHS46SackGuy].y, 2, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_hotspotsWalkPos[kHS46SackGuy].x + 1, 0); + gnap.playMoan1(_vm->_hotspotsWalkPos[kHS46SackGuy].x + 1, 0); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpLeft; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS46SackGuy], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = 2; + gnap._idleFacing = kDirUpLeft; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS46SackGuy], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = 2; break; case GRAB_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2627,20 +2641,20 @@ void Scene46::run() { case kHS46ItchyGuy: if (_vm->_grabCursorSpriteIndex >= 0) { - _vm->_gnap->playShowCurrItem(_vm->_hotspotsWalkPos[kHS46ItchyGuy].x, _vm->_hotspotsWalkPos[kHS46ItchyGuy].y, 7, 0); + gnap.playShowCurrItem(_vm->_hotspotsWalkPos[kHS46ItchyGuy].x, _vm->_hotspotsWalkPos[kHS46ItchyGuy].y, 7, 0); } else { switch (_vm->_verbCursor) { case LOOK_CURSOR: - _vm->_gnap->playMoan1(_vm->_hotspotsWalkPos[kHS46ItchyGuy].x - 1, 0); + gnap.playMoan1(_vm->_hotspotsWalkPos[kHS46ItchyGuy].x - 1, 0); break; case TALK_CURSOR: - _vm->_gnap->_idleFacing = kDirUpRight; - _vm->_gnap->walkTo(_vm->_hotspotsWalkPos[kHS46ItchyGuy], 0, _vm->_gnap->getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); - _vm->_gnap->_actionStatus = 1; + gnap._idleFacing = kDirUpRight; + gnap.walkTo(_vm->_hotspotsWalkPos[kHS46ItchyGuy], 0, gnap.getSequenceId(gskBrainPulsating, Common::Point(0, 0)) | 0x10000, 1); + gnap._actionStatus = 1; break; case GRAB_CURSOR: case PLAT_CURSOR: - _vm->_gnap->playImpossible(0, 0); + gnap.playImpossible(0, 0); break; } } @@ -2648,41 +2662,41 @@ void Scene46::run() { case kHS46ExitUfoParty: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(_vm->_gnap->_pos.x, _vm->_hotspotsWalkPos[kHS46ExitUfoParty].y), 0, 0x107AE, 1); - _vm->_gnap->_actionStatus = 0; + gnap.walkTo(Common::Point(gnap._pos.x, _vm->_hotspotsWalkPos[kHS46ExitUfoParty].y), 0, 0x107AE, 1); + gnap._actionStatus = 0; _vm->_newSceneNum = 40; break; case kHS46ExitKissinBooth: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS46ExitKissinBooth].x, _vm->_gnap->_pos.y), 0, 0x107AF, 1); - _vm->_gnap->_actionStatus = 0; + gnap.walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS46ExitKissinBooth].x, gnap._pos.y), 0, 0x107AF, 1); + gnap._actionStatus = 0; _vm->_plat->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS46ExitKissinBooth].x, _vm->_plat->_pos.y), -1, 0x107CF, 1); _vm->_newSceneNum = 44; break; case kHS46ExitDisco: _vm->_isLeavingScene = true; - _vm->_gnap->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS46ExitDisco].x, _vm->_gnap->_pos.y), 0, 0x107AB, 1); - _vm->_gnap->_actionStatus = 0; + gnap.walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS46ExitDisco].x, gnap._pos.y), 0, 0x107AB, 1); + gnap._actionStatus = 0; _vm->_plat->walkTo(Common::Point(_vm->_hotspotsWalkPos[kHS46ExitDisco].x, _vm->_plat->_pos.y), -1, 0x107CD, 1); _vm->_newSceneNum = 45; break; case kHS46WalkArea1: - if (_vm->_gnap->_actionStatus < 0) - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + if (gnap._actionStatus < 0) + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); break; } } - if (_vm->_mouseClickState._left && _vm->_gnap->_actionStatus < 0) { + if (_vm->_mouseClickState._left && gnap._actionStatus < 0) { _vm->_mouseClickState._left = false; if (_vm->isFlag(kGFGnapControlsToyUFO)) { _vm->_toyUfoActionStatus = 4; _vm->toyUfoFlyTo(-1, -1, 0, 799, 0, 300, 2); } else { - _vm->_gnap->walkTo(Common::Point(-1, -1), -1, -1, 1); + gnap.walkTo(Common::Point(-1, -1), -1, -1, 1); } } @@ -2692,11 +2706,11 @@ void Scene46::run() { if (!_vm->_isLeavingScene) { if (_vm->_plat->_actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) _vm->_plat->updateIdleSequence(); - if (_vm->_gnap->_actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) - _vm->_gnap->updateIdleSequence(); + if (gnap._actionStatus < 0 && !_vm->isFlag(kGFGnapControlsToyUFO)) + gnap.updateIdleSequence(); if (!_vm->_timers[4]) { _vm->_timers[4] = _vm->getRandom(50) + 80; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextItchyGuySequenceId == -1) { + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextItchyGuySequenceId == -1) { if (_vm->getRandom(2) != 0) _nextItchyGuySequenceId = 0x49; else @@ -2705,7 +2719,7 @@ void Scene46::run() { } if (!_vm->_timers[5]) { _vm->_timers[5] = _vm->getRandom(50) + 80; - if (_vm->_gnap->_actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextSackGuySequenceId == -1) + if (gnap._actionStatus < 0 && _vm->_plat->_actionStatus < 0 && _nextSackGuySequenceId == -1) _nextSackGuySequenceId = 0x4C; } } @@ -2724,10 +2738,11 @@ void Scene46::run() { void Scene46::updateAnimations() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; if (gameSys.getAnimationStatus(0) == 2) { gameSys.setAnimation(0, 0, 0); - switch (_vm->_gnap->_actionStatus) { + switch (gnap._actionStatus) { case 0: _vm->_sceneDone = true; break; @@ -2738,7 +2753,7 @@ void Scene46::updateAnimations() { _nextSackGuySequenceId = 0x4A; break; } - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } if (gameSys.getAnimationStatus(3) == 2 && _nextSackGuySequenceId != -1) { diff --git a/engines/gnap/scenes/group5.cpp b/engines/gnap/scenes/group5.cpp index 8cf5087ff6..3f21752e2a 100644 --- a/engines/gnap/scenes/group5.cpp +++ b/engines/gnap/scenes/group5.cpp @@ -76,6 +76,8 @@ int Scene53::pressPhoneNumberButton(int phoneNumber, int buttonNum) { }; GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; + if (_isGnapPhoning) { gameSys.setAnimation(kGnapHandSequenceIds[buttonNum], 40, 6); gameSys.insertSequence(kGnapHandSequenceIds[buttonNum], 40, _currHandSequenceId, 40, kSeqSyncWait, 0, 0, 0); @@ -86,13 +88,13 @@ int Scene53::pressPhoneNumberButton(int phoneNumber, int buttonNum) { _currHandSequenceId = kPlatypusHandSequenceIds[buttonNum]; } - _vm->_gnap->_actionStatus = 6; + gnap._actionStatus = 6; while (gameSys.getAnimationStatus(6) != 2) { // checkGameAppStatus(); _vm->updateMouseCursor(); _vm->gameUpdateTick(); } - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; if (buttonNum < 11) phoneNumber = buttonNum % 10 + 10 * phoneNumber; @@ -121,8 +123,9 @@ void Scene53::runRandomCall() { }; GameSys& gameSys = *_vm->_gameSys; - ++_callsMadeCtr; + PlayerGnap& gnap = *_vm->_gnap; + ++_callsMadeCtr; if (_callsMadeCtr <= 10) { int index; @@ -137,30 +140,31 @@ void Scene53::runRandomCall() { _callsMadeCtr = 0; } - _vm->_gnap->_actionStatus = 1; + gnap._actionStatus = 1; while (gameSys.getAnimationStatus(6) != 2) { _vm->updateMouseCursor(); // checkGameAppStatus(); _vm->gameUpdateTick(); } - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } void Scene53::runChitChatLine() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; bool flag = false; int sequenceId = -1; gameSys.setAnimation(0x6E, 1, 6); gameSys.insertSequence(0x6E, 1, 0, 0, kSeqNone, 16, 0, 0); - _vm->_gnap->_actionStatus = 1; + gnap._actionStatus = 1; while (gameSys.getAnimationStatus(6) != 2) { _vm->updateMouseCursor(); // checkGameAppStatus(); _vm->gameUpdateTick(); } - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; if (_vm->isFlag(kGFSpringTaken)) { gameSys.insertSequence(0x45, 40, _currHandSequenceId, 40, kSeqSyncWait, 0, 0, 0); @@ -198,7 +202,7 @@ void Scene53::runChitChatLine() { flag = 1; _vm->_isLeavingScene = true; _vm->_sceneDone = true; - _vm->_gnap->_actionStatus = 0; + gnap._actionStatus = 0; _vm->_newSceneNum = 17; break; case 5: @@ -217,31 +221,31 @@ void Scene53::runChitChatLine() { if (flag && sequenceId != -1) { _vm->stopSound(0xA0); pressPhoneNumberButton(0, _vm->_sceneClickedHotspot - 1); - _vm->_gnap->_actionStatus = 1; + gnap._actionStatus = 1; gameSys.setAnimation(sequenceId, 1, 6); gameSys.insertSequence(sequenceId, 1, 0, 0, kSeqNone, 16, 0, 0); - _vm->_gnap->_actionStatus = 1; + gnap._actionStatus = 1; while (gameSys.getAnimationStatus(6) != 2) { _vm->updateMouseCursor(); // checkGameAppStatus(); _vm->gameUpdateTick(); } - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; gameSys.setAnimation(0x72, 1, 6); gameSys.insertSequence(0x72, 1, 0, 0, kSeqNone, 16, 0, 0); - _vm->_gnap->_actionStatus = 1; + gnap._actionStatus = 1; while (gameSys.getAnimationStatus(6) != 2) { _vm->updateMouseCursor(); // checkGameAppStatus(); _vm->gameUpdateTick(); } - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } } updateHotspots(); - _vm->_gnap->_actionStatus = 1; + gnap._actionStatus = 1; if (_vm->isFlag(kGFSpringTaken)) { gameSys.setAnimation(0x73, 40, 6); @@ -252,12 +256,14 @@ void Scene53::runChitChatLine() { _vm->gameUpdateTick(); } _currHandSequenceId = 0x73; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } } void Scene53::run() { GameSys& gameSys = *_vm->_gameSys; + PlayerGnap& gnap = *_vm->_gnap; + int phoneNumber = 0; int phoneNumberLen = 0; @@ -287,7 +293,7 @@ void Scene53::run() { switch (_vm->_sceneClickedHotspot) { case 1: - if (_vm->_gnap->_actionStatus < 0) { + if (gnap._actionStatus < 0) { _vm->runMenu(); updateHotspots(); } @@ -307,7 +313,7 @@ void Scene53::run() { phoneNumber = pressPhoneNumberButton(phoneNumber, _vm->_sceneClickedHotspot - 1); debugC(kDebugBasic, "phoneNumber: %d", phoneNumber); if (phoneNumberLen == 7) { - _vm->_gnap->_actionStatus = 1; + gnap._actionStatus = 1; if (_vm->isFlag(kGFSpringTaken)) { gameSys.setAnimation(0x73, 40, 6); gameSys.insertSequence(0x73, 40, _currHandSequenceId, 40, kSeqSyncWait, 0, 0, 0); @@ -317,7 +323,7 @@ void Scene53::run() { _vm->gameUpdateTick(); } _currHandSequenceId = 0x73; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } if (phoneNumber == 7284141) { runChitChatLine(); @@ -348,8 +354,8 @@ void Scene53::run() { pressPhoneNumberButton(0, _vm->_sceneClickedHotspot - 1); break; case 14: - if (_vm->_gnap->_actionStatus < 0) { - _vm->_gnap->_actionStatus = 1; + if (gnap._actionStatus < 0) { + gnap._actionStatus = 1; if (_vm->isFlag(kGFSpringTaken)) { gameSys.setAnimation(0x73, 40, 6); gameSys.insertSequence(0x73, 40, _currHandSequenceId, 40, kSeqSyncWait, 0, 0, 0); @@ -359,11 +365,11 @@ void Scene53::run() { _vm->gameUpdateTick(); } _currHandSequenceId = 0x73; - _vm->_gnap->_actionStatus = -1; + gnap._actionStatus = -1; } _vm->_isLeavingScene = true; _vm->_sceneDone = true; - _vm->_gnap->_actionStatus = 0; + gnap._actionStatus = 0; _vm->_newSceneNum = 17; } break; -- cgit v1.2.3