diff options
| author | Strangerke | 2016-04-30 13:37:57 +0200 | 
|---|---|---|
| committer | Eugene Sandulenko | 2016-05-10 12:14:48 +0200 | 
| commit | ce8e3281d4578d3f0833e8ce449fe6a9e6b4791e (patch) | |
| tree | fa3f5a04982dc40d21d3668489c510b434647af6 /engines/gnap/scenes/group1.cpp | |
| parent | 33b27b8db3b86fac77ef12a6cbda92050c5d3bd3 (diff) | |
| download | scummvm-rg350-ce8e3281d4578d3f0833e8ce449fe6a9e6b4791e.tar.gz scummvm-rg350-ce8e3281d4578d3f0833e8ce449fe6a9e6b4791e.tar.bz2 scummvm-rg350-ce8e3281d4578d3f0833e8ce449fe6a9e6b4791e.zip  | |
GNAP: Reduce dereferencing of _gameSys
Diffstat (limited to 'engines/gnap/scenes/group1.cpp')
| -rw-r--r-- | engines/gnap/scenes/group1.cpp | 832 | 
1 files changed, 438 insertions, 394 deletions
diff --git a/engines/gnap/scenes/group1.cpp b/engines/gnap/scenes/group1.cpp index 90767500ed..70742fe27a 100644 --- a/engines/gnap/scenes/group1.cpp +++ b/engines/gnap/scenes/group1.cpp @@ -33,9 +33,11 @@ Scene10::Scene10(GnapEngine *vm) : Scene(vm) {  }  int Scene10::init() { -	_vm->_gameSys->setAnimation(0, 0, 0); -	_vm->_gameSys->setAnimation(0, 0, 1); -	_vm->_gameSys->setAnimation(0, 0, 2); +	GameSys& gameSys = *_vm->_gameSys; + +	gameSys.setAnimation(0, 0, 0); +	gameSys.setAnimation(0, 0, 1); +	gameSys.setAnimation(0, 0, 2);  	return 0x10F;  } @@ -56,14 +58,16 @@ void Scene10::updateHotspots() {  }  void Scene10::run() { +	GameSys& gameSys = *_vm->_gameSys; +  	_currCookSequenceId = 0x103; -	_vm->_gameSys->setAnimation(0x103, 100, 2); -	_vm->_gameSys->insertSequence(0x103, 100, 0, 0, kSeqNone, 0, 0, 0); +	gameSys.setAnimation(0x103, 100, 2); +	gameSys.insertSequence(0x103, 100, 0, 0, kSeqNone, 0, 0, 0);  	_nextCookSequenceId = 0x106;  	if (!_vm->isFlag(kGFMudTaken)) -		_vm->_gameSys->insertSequence(0x107, 100, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.insertSequence(0x107, 100, 0, 0, kSeqNone, 0, 0, 0);  	_vm->queueInsertDeviceIcon(); @@ -146,7 +150,7 @@ void Scene10::run() {  		case kHS10Cook:  			if (_vm->_grabCursorSpriteIndex >= 0) {  				_vm->playGnapShowCurrItem(4, 8, 6, 0); -				_vm->_gameSys->setAnimation(makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, 0); +				gameSys.setAnimation(makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, 0);  				_vm->_gnapActionStatus = kAS10AnnoyCook;  			} else {  				switch (_vm->_verbCursor) { @@ -239,7 +243,7 @@ void Scene10::run() {  						_vm->platypusWalkTo(7, 6, 1, 0x107D2, 1);  						_vm->_platypusActionStatus = kAS10PlatWithBox;  						_vm->_platypusFacing = kDirUnk4; -						_vm->_largeSprite = _vm->_gameSys->createSurface(0xC3); +						_vm->_largeSprite = gameSys.createSurface(0xC3);  						_vm->playGnapIdle(7, 6);  					}  					break; @@ -258,7 +262,7 @@ void Scene10::run() {  				case GRAB_CURSOR:  					_vm->gnapActionIdle(0x10C);  					_vm->gnapWalkTo(9, 6, 0, 0x107BB, 1); -					_vm->_gameSys->insertSequence(0x10E, 120, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +					gameSys.insertSequence(0x10E, 120, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0);  					_vm->_gnapSequenceId = 0x10E;  					_vm->_gnapId = 120;  					_vm->_gnapIdleFacing = kDirUpRight; @@ -320,7 +324,7 @@ void Scene10::run() {  					} else {  						sequenceId = 0x8A7;  					} -					_vm->_gameSys->insertSequence(sequenceId | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0); +					gameSys.insertSequence(sequenceId | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0);  				}  			}  		} @@ -338,8 +342,10 @@ void Scene10::run() {  }  void Scene10::updateAnimations() { -	if (_vm->_gameSys->getAnimationStatus(0) == 2) { -		_vm->_gameSys->setAnimation(0, 0, 0); +	GameSys& gameSys = *_vm->_gameSys; + +	if (gameSys.getAnimationStatus(0) == 2) { +		gameSys.setAnimation(0, 0, 0);  		switch (_vm->_gnapActionStatus) {  		case kAS10LeaveScene:  			_vm->_sceneDone = true; @@ -350,8 +356,8 @@ void Scene10::updateAnimations() {  		}  	} -	if (_vm->_gameSys->getAnimationStatus(1) == 2) { -		_vm->_gameSys->setAnimation(0, 0, 1); +	if (gameSys.getAnimationStatus(1) == 2) { +		gameSys.setAnimation(0, 0, 1);  		switch (_vm->_platypusActionStatus) {  		case kAS10PlatWithBox:  			_nextCookSequenceId = 0x109; @@ -359,18 +365,18 @@ void Scene10::updateAnimations() {  		}  	} -	if (_vm->_gameSys->getAnimationStatus(2) == 2 && _nextCookSequenceId != -1) { +	if (gameSys.getAnimationStatus(2) == 2 && _nextCookSequenceId != -1) {  		switch (_nextCookSequenceId) {  		case 0x109:  			_vm->_platX = 4;  			_vm->_platY = 8; -			_vm->_gameSys->insertSequence(0x109, 100, _currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x107C9, 160, +			gameSys.insertSequence(0x109, 100, _currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x107C9, 160,  				_vm->_platypusSequenceId | (_vm->_platypusSequenceDatNum << 16), _vm->_platypusId,  				kSeqSyncWait, _vm->getSequenceTotalDuration(0x109) + _vm->getSequenceTotalDuration(0x10A) + _vm->getSequenceTotalDuration(0x10843),  				75 * _vm->_platX - _vm->_platGridX, 48 * _vm->_platY - _vm->_platGridY); -			_vm->_gameSys->removeSequence(0x107, 100, true); +			gameSys.removeSequence(0x107, 100, true);  			_currCookSequenceId = 0x109;  			_nextCookSequenceId = 0x843;  			_vm->_platypusSequenceId = 0x7C9; @@ -380,17 +386,17 @@ void Scene10::updateAnimations() {  			break;  		case 0x843:  			_vm->hideCursor(); -			_vm->_gameSys->insertSpriteDrawItem(_vm->_largeSprite, 0, 0, 300); -			_vm->_gameSys->insertSequence(0x10843, 301, _currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSpriteDrawItem(_vm->_largeSprite, 0, 0, 300); +			gameSys.insertSequence(0x10843, 301, _currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0);  			_currCookSequenceId = 0x843;  			_nextCookSequenceId = 0x10A;  			break;  		case 0x10A: -			_vm->_gameSys->insertSequence(_nextCookSequenceId, 100, 0x10843, 301, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(_nextCookSequenceId, 100, 0x10843, 301, kSeqSyncWait, 0, 0, 0);  			_currCookSequenceId = _nextCookSequenceId;  			_nextCookSequenceId = 0x104;  			_vm->showCursor(); -			_vm->_gameSys->removeSpriteDrawItem(_vm->_largeSprite, 300); +			gameSys.removeSpriteDrawItem(_vm->_largeSprite, 300);  			_vm->delayTicksCursor(5);  			_vm->deleteSurface(&_vm->_largeSprite);  			_vm->setGrabCursorSprite(kItemTongs); @@ -400,7 +406,7 @@ void Scene10::updateAnimations() {  				_vm->gnapWalkStep();  			break;  		default: -			_vm->_gameSys->insertSequence(_nextCookSequenceId, 100, _currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(_nextCookSequenceId, 100, _currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0);  			_currCookSequenceId = _nextCookSequenceId;  			break;  		} @@ -417,7 +423,7 @@ void Scene10::updateAnimations() {  				_nextCookSequenceId = 0x103;  			else if (rnd == 2) {  				_nextCookSequenceId = 0x106; -				_vm->_gameSys->insertSequence(0x10D, 1, 0, 0, kSeqNone, 0, 0, 0); +				gameSys.insertSequence(0x10D, 1, 0, 0, kSeqNone, 0, 0, 0);  			} else  				_nextCookSequenceId = 0x106;  			} @@ -451,7 +457,7 @@ void Scene10::updateAnimations() {  				_nextCookSequenceId = 0x106;  			_vm->_timers[2] = _vm->getRandom(30) + 20;  			_vm->_timers[3] = 300; -			_vm->_gameSys->insertSequence(0x10C, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x10C, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0);  			_vm->_gnapSequenceId = 0x10C;  			_vm->_gnapIdleFacing = kDirUpRight;  			_vm->_gnapSequenceDatNum = 0; @@ -461,16 +467,18 @@ void Scene10::updateAnimations() {  			break;  		}  		if (_currCookSequenceId == 0x843) -			_vm->_gameSys->setAnimation(_currCookSequenceId | 0x10000, 301, 2); +			gameSys.setAnimation(_currCookSequenceId | 0x10000, 301, 2);  		else -			_vm->_gameSys->setAnimation(_currCookSequenceId, 100, 2); +			gameSys.setAnimation(_currCookSequenceId, 100, 2);  	}  }  void Scene10::updateAnimationsCb() { -	if (_vm->_gameSys->getAnimationStatus(2) == 2) { -		_vm->_gameSys->setAnimation(_nextCookSequenceId, 100, 2); -		_vm->_gameSys->insertSequence(_nextCookSequenceId, 100, _currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0); +	GameSys& gameSys = *_vm->_gameSys; + +	if (gameSys.getAnimationStatus(2) == 2) { +		gameSys.setAnimation(_nextCookSequenceId, 100, 2); +		gameSys.insertSequence(_nextCookSequenceId, 100, _currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0);  		_currCookSequenceId = _nextCookSequenceId;  		_nextCookSequenceId = 0x106;  	} @@ -487,9 +495,11 @@ Scene11::Scene11(GnapEngine *vm) : Scene(vm) {  }  int Scene11::init() { -	_vm->_gameSys->setAnimation(0, 0, 0); -	_vm->_gameSys->setAnimation(0, 0, 3); -	_vm->_gameSys->setAnimation(0, 0, 2); +	GameSys& gameSys = *_vm->_gameSys; + +	gameSys.setAnimation(0, 0, 0); +	gameSys.setAnimation(0, 0, 3); +	gameSys.setAnimation(0, 0, 2);  	if (_vm->_prevSceneNum == 10 || _vm->_prevSceneNum == 13) {  		_vm->playSound(0x108EC, false);  		_vm->playSound(0x10928, false); @@ -515,6 +525,7 @@ void Scene11::updateHotspots() {  }  void Scene11::run() { +	GameSys& gameSys = *_vm->_gameSys;  	bool flag = true;  	_vm->_timers[7] = 50; @@ -547,16 +558,16 @@ void Scene11::run() {  	_vm->queueInsertDeviceIcon(); -	_vm->_gameSys->insertSequence(_currHookGuySequenceId, 120, 0, 0, kSeqNone, 0, 0, 0); +	gameSys.insertSequence(_currHookGuySequenceId, 120, 0, 0, kSeqNone, 0, 0, 0);  	_nextHookGuySequenceId = -1; -	_vm->_gameSys->setAnimation(_currHookGuySequenceId, 120, 3); -	_vm->_gameSys->insertSequence(_currGoggleGuySequenceId, 121, 0, 0, kSeqNone, 0, 0, 0); +	gameSys.setAnimation(_currHookGuySequenceId, 120, 3); +	gameSys.insertSequence(_currGoggleGuySequenceId, 121, 0, 0, kSeqNone, 0, 0, 0);  	_nextGoggleGuySequenceId = -1; -	_vm->_gameSys->setAnimation(_currGoggleGuySequenceId, 121, 2); +	gameSys.setAnimation(_currGoggleGuySequenceId, 121, 2);  	_vm->_timers[5] = _vm->getRandom(100) + 75;  	_vm->_timers[4] = _vm->getRandom(40) + 20; @@ -568,7 +579,7 @@ void Scene11::run() {  		_vm->platypusWalkTo(1, 8, -1, 0x107C2, 1);  	} -	_vm->_gameSys->insertSequence(0x208, 256, 0, 0, kSeqNone, 40, 0, 0); +	gameSys.insertSequence(0x208, 256, 0, 0, kSeqNone, 40, 0, 0);  	while (!_vm->_sceneDone) {  		_vm->testWalk(0, 0, -1, -1, -1, -1); @@ -733,8 +744,8 @@ void Scene11::run() {  		if (!_vm->_isLeavingScene) {  			if (flag && !_vm->_timers[7]) {  				flag = false; -				_vm->_gameSys->setAnimation(0x207, 257, 4); -				_vm->_gameSys->insertSequence(0x207, 257, 0, 0, kSeqNone, 0, 0, 0); +				gameSys.setAnimation(0x207, 257, 4); +				gameSys.insertSequence(0x207, 257, 0, 0, kSeqNone, 0, 0, 0);  			}  			_vm->platypusSub426234();  			_vm->updateGnapIdleSequence2(); @@ -775,13 +786,13 @@ void Scene11::run() {  				int _gnapRandomValue = _vm->getRandom(3);  				switch (_gnapRandomValue) {  				case 0: -					_vm->_gameSys->insertSequence(0x8A5 | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0); +					gameSys.insertSequence(0x8A5 | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0);  					break;  				case 1: -					_vm->_gameSys->insertSequence(0x8A7 | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0); +					gameSys.insertSequence(0x8A7 | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0);  					break;  				case 2: -					_vm->_gameSys->insertSequence(0x8A6 | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0); +					gameSys.insertSequence(0x8A6 | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0);  					break;  				}  			} @@ -802,9 +813,11 @@ void Scene11::run() {  }  void Scene11::updateAnimations() { -	if (_vm->_gameSys->getAnimationStatus(0) == 2) { +	GameSys& gameSys = *_vm->_gameSys; + +	if (gameSys.getAnimationStatus(0) == 2) {  		if (_vm->_gnapActionStatus != kAS11GrabBillardBall) -			_vm->_gameSys->setAnimation(0, 0, 0); +			gameSys.setAnimation(0, 0, 0);  		switch (_vm->_gnapActionStatus) {  		case kAS11LeaveScene:  			_vm->_sceneDone = true; @@ -825,20 +838,20 @@ void Scene11::updateAnimations() {  			_nextHookGuySequenceId = 0x206;  			break;  		case kAS11GrabBillardBall: -			if (_vm->_gameSys->getAnimationStatus(2) == 2 && _vm->_gameSys->getAnimationStatus(3) == 2) { -				_vm->_gameSys->setAnimation(0, 0, 0); +			if (gameSys.getAnimationStatus(2) == 2 && gameSys.getAnimationStatus(3) == 2) { +				gameSys.setAnimation(0, 0, 0);  				_vm->_timers[2] = _vm->getRandom(30) + 20;  				_vm->_timers[3] = _vm->getRandom(50) + 200; -				_vm->_gameSys->insertSequence(0x1F4, 255, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +				gameSys.insertSequence(0x1F4, 255, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0);  				_vm->_gnapSequenceId = 0x1F4;  				_vm->_gnapId = 255;  				_vm->_gnapSequenceDatNum = 0; -				_vm->_gameSys->removeSequence(0x207, 257, true); -				_vm->_gameSys->removeSequence(0x208, 256, true); +				gameSys.removeSequence(0x207, 257, true); +				gameSys.removeSequence(0x208, 256, true);  				_nextGoggleGuySequenceId = 0x1F8;  				_vm->_timers[5] = _vm->getRandom(100) + 75; -				_vm->_gameSys->insertSequence(_nextGoggleGuySequenceId, 121, _currGoggleGuySequenceId, 121, kSeqSyncWait, 0, 0, 0); -				_vm->_gameSys->setAnimation(_nextGoggleGuySequenceId, 121, 2); +				gameSys.insertSequence(_nextGoggleGuySequenceId, 121, _currGoggleGuySequenceId, 121, kSeqSyncWait, 0, 0, 0); +				gameSys.setAnimation(_nextGoggleGuySequenceId, 121, 2);  				_currGoggleGuySequenceId = _nextGoggleGuySequenceId;  				_nextGoggleGuySequenceId = -1;  				switch (_billardBallCtr) { @@ -853,36 +866,36 @@ void Scene11::updateAnimations() {  					break;  				}  				++_billardBallCtr; -				_vm->_gameSys->insertSequence(_nextHookGuySequenceId, 120, _currHookGuySequenceId, 120, kSeqSyncWait, 0, 0, 0); -				_vm->_gameSys->setAnimation(_nextHookGuySequenceId, 120, 3); +				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; -				_vm->_gameSys->insertSequence(0x208, 256, 0, 0, kSeqNone, _vm->getSequenceTotalDuration(0x1F4) - 5, 0, 0); +				gameSys.insertSequence(0x208, 256, 0, 0, kSeqNone, _vm->getSequenceTotalDuration(0x1F4) - 5, 0, 0);  				_vm->_hotspots[kHS11Billard]._flags |= SF_DISABLED; -				_vm->_gameSys->setAnimation(0x207, 257, 4); -				_vm->_gameSys->insertSequence(0x207, 257, 0, 0, kSeqNone, _vm->getSequenceTotalDuration(0x1FE), 0, 0); +				gameSys.setAnimation(0x207, 257, 4); +				gameSys.insertSequence(0x207, 257, 0, 0, kSeqNone, _vm->getSequenceTotalDuration(0x1FE), 0, 0);  				_vm->_gnapActionStatus = -1;  			}  			break;  		}  	} -	if (_vm->_gameSys->getAnimationStatus(2) == 2 && _nextGoggleGuySequenceId != -1) { +	if (gameSys.getAnimationStatus(2) == 2 && _nextGoggleGuySequenceId != -1) {  		_vm->_timers[5] = _vm->getRandom(100) + 75; -		_vm->_gameSys->insertSequence(_nextGoggleGuySequenceId, 121, _currGoggleGuySequenceId, 121, kSeqSyncWait, 0, 0, 0); -		_vm->_gameSys->setAnimation(_nextGoggleGuySequenceId, 121, 2); +		gameSys.insertSequence(_nextGoggleGuySequenceId, 121, _currGoggleGuySequenceId, 121, kSeqSyncWait, 0, 0, 0); +		gameSys.setAnimation(_nextGoggleGuySequenceId, 121, 2);  		_currGoggleGuySequenceId = _nextGoggleGuySequenceId;  		_nextGoggleGuySequenceId = -1;  		if (_vm->_gnapActionStatus >= 1 && _vm->_gnapActionStatus <= 4)  			_vm->_gnapActionStatus = -1;  	} -	if (_vm->_gameSys->getAnimationStatus(3) == 2) { +	if (gameSys.getAnimationStatus(3) == 2) {  		if (_nextHookGuySequenceId == 0x204) { -			_vm->_gameSys->setAnimation(_nextHookGuySequenceId, 120, 3); -			_vm->_gameSys->insertSequence(0x204, 120, _currHookGuySequenceId, 120, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x1F5, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(_nextHookGuySequenceId, 120, 3); +			gameSys.insertSequence(0x204, 120, _currHookGuySequenceId, 120, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x1F5, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0);  			_currHookGuySequenceId = 0x204;  			_nextHookGuySequenceId = -1;  			_vm->_gnapSequenceId = 0x1F5; @@ -893,8 +906,8 @@ void Scene11::updateAnimations() {  			if (_vm->_gnapActionStatus == kAS11GrabHookGuy)  				_vm->_gnapActionStatus = -1;  		} else if (_nextHookGuySequenceId != -1) { -			_vm->_gameSys->insertSequence(_nextHookGuySequenceId, 120, _currHookGuySequenceId, 120, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->setAnimation(_nextHookGuySequenceId, 120, 3); +			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; @@ -903,8 +916,8 @@ void Scene11::updateAnimations() {  		}  	} -	if (_vm->_gameSys->getAnimationStatus(4) == 2) { -		_vm->_gameSys->setAnimation(0, 0, 4); +	if (gameSys.getAnimationStatus(4) == 2) { +		gameSys.setAnimation(0, 0, 4);  		_vm->_hotspots[kHS11Billard]._flags &= ~SF_DISABLED;  	}  } @@ -940,29 +953,30 @@ void Scene12::updateHotspots() {  }  void Scene12::run() { +	GameSys& gameSys = *_vm->_gameSys;  	int v18 = 1;  	_vm->queueInsertDeviceIcon(); -	_vm->_gameSys->insertSequence(0x207, 256, 0, 0, kSeqNone, 0, 0, 0); -	_vm->_gameSys->insertSequence(0x200, 50, 0, 0, kSeqNone, 0, 0, 0); +	gameSys.insertSequence(0x207, 256, 0, 0, kSeqNone, 0, 0, 0); +	gameSys.insertSequence(0x200, 50, 0, 0, kSeqNone, 0, 0, 0);  	_currToothGuySequenceId = 0x200;  	_nextToothGuySequenceId = -1; -	_vm->_gameSys->setAnimation(0x200, 50, 2); -	_vm->_gameSys->insertSequence(0x202, 50, 0, 0, kSeqNone, 0, 0, 0); +	gameSys.setAnimation(0x200, 50, 2); +	gameSys.insertSequence(0x202, 50, 0, 0, kSeqNone, 0, 0, 0);  	_currBeardGuySequenceId = 0x202;  	_nextBeardGuySequenceId = -1; -	_vm->_gameSys->setAnimation(0x202, 50, 4); -	_vm->_gameSys->insertSequence(0x203, 50, 0, 0, kSeqNone, 0, 0, 0); +	gameSys.setAnimation(0x202, 50, 4); +	gameSys.insertSequence(0x203, 50, 0, 0, kSeqNone, 0, 0, 0);  	_currBarkeeperSequenceId = 0x203;  	_nextBarkeeperSequenceId = -1; -	_vm->_gameSys->setAnimation(0x203, 50, 3); +	gameSys.setAnimation(0x203, 50, 3);  	_vm->_timers[4] = 30;  	_vm->_timers[6] = _vm->getRandom(30) + 20; @@ -1026,7 +1040,7 @@ void Scene12::run() {  		case kHS12ToothGuy:  			if (_vm->_grabCursorSpriteIndex == kItemQuarter) { -				_vm->_largeSprite = _vm->_gameSys->createSurface(0x141); +				_vm->_largeSprite = gameSys.createSurface(0x141);  				_vm->gnapWalkTo(3, 7, 0, 0x107BC, 9);  				_vm->_gnapIdleFacing = kDirUpLeft;  				_vm->_gnapActionStatus = kAS12QuarterToToothGuy; @@ -1095,7 +1109,7 @@ void Scene12::run() {  					break;  				case PLAT_CURSOR:  					_vm->playGnapPullOutDevice(_vm->_platX, _vm->_platY); -					_vm->_gameSys->setAnimation(makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, 0); +					gameSys.setAnimation(makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, 0);  					_vm->_gnapActionStatus = kAS12PlatWithBarkeeper;  					break;  				} @@ -1207,13 +1221,13 @@ void Scene12::run() {  				int _gnapRandomValue = _vm->getRandom(3);  				switch (_gnapRandomValue) {  				case 0: -					_vm->_gameSys->insertSequence(0x8A5 | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0); +					gameSys.insertSequence(0x8A5 | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0);  					break;  				case 1: -					_vm->_gameSys->insertSequence(0x8A7 | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0); +					gameSys.insertSequence(0x8A7 | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0);  					break;  				case 2: -					_vm->_gameSys->insertSequence(0x8A6 | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0); +					gameSys.insertSequence(0x8A6 | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0);  					break;  				}  			} @@ -1235,8 +1249,10 @@ void Scene12::run() {  }  void Scene12::updateAnimations() { -	if (_vm->_gameSys->getAnimationStatus(0) == 2) { -		_vm->_gameSys->setAnimation(0, 0, 0); +	GameSys& gameSys = *_vm->_gameSys; + +	if (gameSys.getAnimationStatus(0) == 2) { +		gameSys.setAnimation(0, 0, 0);  		switch (_vm->_gnapActionStatus) {  		case kAS12LeaveScene:  			_vm->_sceneDone = true; @@ -1287,7 +1303,7 @@ void Scene12::updateAnimations() {  		case kAS12QuarterToToothGuyDone:  			_vm->_gnapActionStatus = -1;  			_vm->showCursor(); -			_vm->_gameSys->removeSpriteDrawItem(_vm->_largeSprite, 300); +			gameSys.removeSpriteDrawItem(_vm->_largeSprite, 300);  			_vm->deleteSurface(&_vm->_largeSprite);  			_vm->setGrabCursorSprite(kItemQuarterWithHole);  			break; @@ -1327,8 +1343,8 @@ void Scene12::updateAnimations() {  		}  	} -	if (_vm->_gameSys->getAnimationStatus(1) == 2) { -		_vm->_gameSys->setAnimation(0, 0, 1); +	if (gameSys.getAnimationStatus(1) == 2) { +		gameSys.setAnimation(0, 0, 1);  		switch (_vm->_platypusActionStatus) {  		case kAS12PlatWithToothGuy:  			_nextToothGuySequenceId = 0x1EB; @@ -1339,15 +1355,15 @@ void Scene12::updateAnimations() {  		}  	} -	if (_vm->_gameSys->getAnimationStatus(2) == 2) { +	if (gameSys.getAnimationStatus(2) == 2) {  		if (_currToothGuySequenceId == 0x1E9) { -			_vm->_gameSys->setAnimation(0, 0, 2); +			gameSys.setAnimation(0, 0, 2);  			_vm->hideCursor(); -			_vm->_gameSys->setAnimation(0x10843, 301, 0); +			gameSys.setAnimation(0x10843, 301, 0);  			_vm->_gnapActionStatus = kAS12QuarterToToothGuyDone; -			_vm->_gameSys->insertSpriteDrawItem(_vm->_largeSprite, 0, 0, 300); -			_vm->_gameSys->insertSequence(0x10843, 301, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x107B7, _vm->_gnapId, 0x10843, 301, +			gameSys.insertSpriteDrawItem(_vm->_largeSprite, 0, 0, 300); +			gameSys.insertSequence(0x10843, 301, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x107B7, _vm->_gnapId, 0x10843, 301,  				kSeqSyncWait, 0, 75 * _vm->_gnapX - _vm->_gnapGridX, 48 * _vm->_gnapY - _vm->_gnapGridY);  			_vm->_gnapSequenceId = 0x7B7;  			_vm->_gnapSequenceDatNum = 1; @@ -1356,9 +1372,9 @@ void Scene12::updateAnimations() {  			_vm->invRemove(kItemQuarter);  		}  		if (_nextToothGuySequenceId == 0x1EF) { -			_vm->_gameSys->setAnimation(_nextToothGuySequenceId, 50, 2); -			_vm->_gameSys->insertSequence(_nextToothGuySequenceId, 50, _currToothGuySequenceId, 50, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x205, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(_nextToothGuySequenceId, 50, 2); +			gameSys.insertSequence(_nextToothGuySequenceId, 50, _currToothGuySequenceId, 50, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x205, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0);  			_currToothGuySequenceId = _nextToothGuySequenceId;  			_nextToothGuySequenceId = -1;  			_vm->_gnapSequenceId = 0x205; @@ -1369,8 +1385,8 @@ void Scene12::updateAnimations() {  			if (_vm->_gnapActionStatus == kAS12GrabToothGuy)  				_vm->_gnapActionStatus = -1;  		} else if (_nextToothGuySequenceId != -1) { -			_vm->_gameSys->insertSequence(_nextToothGuySequenceId, 50, _currToothGuySequenceId, 50, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->setAnimation(_nextToothGuySequenceId, 50, 2); +			gameSys.insertSequence(_nextToothGuySequenceId, 50, _currToothGuySequenceId, 50, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(_nextToothGuySequenceId, 50, 2);  			_currToothGuySequenceId = _nextToothGuySequenceId;  			_nextToothGuySequenceId = -1;  			_vm->_timers[4] = 50; @@ -1382,15 +1398,15 @@ void Scene12::updateAnimations() {  		}  	} -	if (_vm->_gameSys->getAnimationStatus(3) == 2) { +	if (gameSys.getAnimationStatus(3) == 2) {  		if (_vm->_gnapActionStatus == kAS12PlatWithBarkeeper && _currBarkeeperSequenceId == 0x1F9) {  			_vm->_gnapActionStatus = -1;  			_vm->playGnapIdle(7, 6);  			_vm->_timers[5] = 0;  		}  		if (_nextBarkeeperSequenceId != -1) { -			_vm->_gameSys->insertSequence(_nextBarkeeperSequenceId, 50, _currBarkeeperSequenceId, 50, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->setAnimation(_nextBarkeeperSequenceId, 50, 3); +			gameSys.insertSequence(_nextBarkeeperSequenceId, 50, _currBarkeeperSequenceId, 50, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(_nextBarkeeperSequenceId, 50, 3);  			_currBarkeeperSequenceId = _nextBarkeeperSequenceId;  			_nextBarkeeperSequenceId = -1;  			_vm->_timers[5] = _vm->getRandom(30) + 20; @@ -1400,9 +1416,9 @@ void Scene12::updateAnimations() {  		}  	} -	if (_vm->_gameSys->getAnimationStatus(4) == 2 && _nextBeardGuySequenceId != -1) { -		_vm->_gameSys->insertSequence(_nextBeardGuySequenceId, 50, _currBeardGuySequenceId, 50, kSeqSyncWait, 0, 0, 0); -		_vm->_gameSys->setAnimation(_nextBeardGuySequenceId, 50, 4); +	if (gameSys.getAnimationStatus(4) == 2 && _nextBeardGuySequenceId != -1) { +		gameSys.insertSequence(_nextBeardGuySequenceId, 50, _currBeardGuySequenceId, 50, kSeqSyncWait, 0, 0, 0); +		gameSys.setAnimation(_nextBeardGuySequenceId, 50, 4);  		_currBeardGuySequenceId = _nextBeardGuySequenceId;  		_nextBeardGuySequenceId = -1;  		_vm->_timers[6] = _vm->getRandom(30) + 20; @@ -1446,9 +1462,11 @@ void Scene13::updateHotspots() {  }  void Scene13::showScribble() { +	GameSys& gameSys = *_vm->_gameSys; +  	_vm->hideCursor(); -	_vm->_largeSprite = _vm->_gameSys->createSurface(0x6F); -	_vm->_gameSys->insertSpriteDrawItem(_vm->_largeSprite, 0, 0, 300); +	_vm->_largeSprite = gameSys.createSurface(0x6F); +	gameSys.insertSpriteDrawItem(_vm->_largeSprite, 0, 0, 300);  	while (!_vm->_mouseClickState._left && !_vm->isKeyStatus1(Common::KEYCODE_ESCAPE) &&  		!_vm->isKeyStatus1(Common::KEYCODE_SPACE) && !_vm->isKeyStatus1(29))  		_vm->gameUpdateTick(); @@ -1456,17 +1474,18 @@ void Scene13::showScribble() {  	_vm->clearKeyStatus1(Common::KEYCODE_ESCAPE);  	_vm->clearKeyStatus1(29);  	_vm->clearKeyStatus1(Common::KEYCODE_SPACE); -	_vm->_gameSys->removeSpriteDrawItem(_vm->_largeSprite, 300); +	gameSys.removeSpriteDrawItem(_vm->_largeSprite, 300);  	_vm->deleteSurface(&_vm->_largeSprite);  	_vm->showCursor();  }  void Scene13::run() { +	GameSys& gameSys = *_vm->_gameSys;  	int currSoundId = 0;  	_vm->queueInsertDeviceIcon(); -	_vm->_gameSys->insertSequence(0xAA, 256, 0, 0, kSeqNone, 0, 0, 0); +	gameSys.insertSequence(0xAA, 256, 0, 0, kSeqNone, 0, 0, 0);  	if (_vm->_prevSceneNum == 14) {  		_vm->initGnapPos(6, 6, kDirBottomLeft); @@ -1543,8 +1562,8 @@ void Scene13::run() {  				case TALK_CURSOR:  					if (_vm->_gnapX == 5 && _vm->_gnapY == 5) {  						_backToiletCtr = MIN(5, _backToiletCtr + 1); -						_vm->_gameSys->setAnimation(_backToiletCtr + 0xA3, _vm->_gnapId, 0); -						_vm->_gameSys->insertSequence(_backToiletCtr + 0xA3, _vm->_gnapId, +						gameSys.setAnimation(_backToiletCtr + 0xA3, _vm->_gnapId, 0); +						gameSys.insertSequence(_backToiletCtr + 0xA3, _vm->_gnapId,  							makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId,  							kSeqScale | kSeqSyncWait, 0, 0, 0);  						_vm->_gnapActionStatus = kAS13Wait; @@ -1742,8 +1761,10 @@ void Scene13::run() {  }  void Scene13::updateAnimations() { -	if (_vm->_gameSys->getAnimationStatus(0) == 2) { -		_vm->_gameSys->setAnimation(0, 0, 0); +	GameSys& gameSys = *_vm->_gameSys; + +	if (gameSys.getAnimationStatus(0) == 2) { +		gameSys.setAnimation(0, 0, 0);  		switch (_vm->_gnapActionStatus) {  		case kAS13LeaveScene:  			_vm->_sceneDone = true; @@ -1751,7 +1772,7 @@ void Scene13::updateAnimations() {  			break;  		case kAS13BackToilet:  			_backToiletCtr = MIN(5, _backToiletCtr + 1); -			_vm->_gameSys->insertSequence(_backToiletCtr + 0xA3, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, 9, 0, 0, 0); +			gameSys.insertSequence(_backToiletCtr + 0xA3, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, 9, 0, 0, 0);  			_vm->_gnapSequenceId = _backToiletCtr + 0xA3;  			_vm->_gnapSequenceDatNum = 0;  			_vm->_gnapActionStatus = -1; @@ -1765,9 +1786,9 @@ void Scene13::updateAnimations() {  			showScribble();  			break;  		case kAS13GrabSink: -			_vm->_gameSys->setAnimation(0xAB, 160, 0); -			_vm->_gameSys->insertSequence(0xAB, 160, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->removeSequence(0xAA, 256, true); +			gameSys.setAnimation(0xAB, 160, 0); +			gameSys.insertSequence(0xAB, 160, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.removeSequence(0xAA, 256, true);  			_vm->_gnapSequenceId = 0xAB;  			_vm->_gnapId = 160;  			_vm->_gnapIdleFacing = kDirBottomRight; @@ -1778,15 +1799,15 @@ void Scene13::updateAnimations() {  			_vm->_gnapActionStatus = kAS13GrabSinkDone;  			break;  		case kAS13GrabSinkDone: -			_vm->_gameSys->insertSequence(0xAA, 256, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0xAA, 256, 0, 0, kSeqNone, 0, 0, 0);  			_vm->_gnapActionStatus = -1;  			break;  		case kAS13Wait:  			_vm->_gnapActionStatus = -1;  			break;  		case kAS13GrabUrinal: -			_vm->_gameSys->setAnimation(0xA2, 120, 0); -			_vm->_gameSys->insertSequence(0xA2, 120, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(0xA2, 120, 0); +			gameSys.insertSequence(0xA2, 120, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0);  			_vm->_gnapSequenceId = 0xA2;  			_vm->_gnapId = 120;  			_vm->_gnapIdleFacing = kDirBottomLeft; @@ -1799,8 +1820,8 @@ void Scene13::updateAnimations() {  		}  	} -	if (_vm->_gameSys->getAnimationStatus(1) == 2) { -		_vm->_gameSys->setAnimation(0, 0, 1); +	if (gameSys.getAnimationStatus(1) == 2) { +		gameSys.setAnimation(0, 0, 1);  		_vm->_platypusActionStatus = -1;  	}  } @@ -1811,8 +1832,10 @@ Scene14::Scene14(GnapEngine *vm) : Scene(vm) {  }  int Scene14::init() { -	_vm->_gameSys->setAnimation(0, 0, 0); -	_vm->_gameSys->setAnimation(0, 0, 1); +	GameSys& gameSys = *_vm->_gameSys; + +	gameSys.setAnimation(0, 0, 0); +	gameSys.setAnimation(0, 0, 1);  	return 0x27;  } @@ -1828,20 +1851,21 @@ void Scene14::updateHotspots() {  }  void Scene14::run() { -	_vm->_largeSprite = nullptr; +	GameSys& gameSys = *_vm->_gameSys; +	_vm->_largeSprite = nullptr;  	_vm->queueInsertDeviceIcon();  	if (!_vm->isFlag(kGFNeedleTaken)) -		_vm->_gameSys->insertSequence(0x23, 10, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.insertSequence(0x23, 10, 0, 0, kSeqNone, 0, 0, 0);  	_vm->endSceneInit();  	if (!_vm->isFlag(kGFNeedleTaken) && _vm->invHas(kItemTongs)) -		_vm->_largeSprite = _vm->_gameSys->createSurface(1); +		_vm->_largeSprite = gameSys.createSurface(1);  	if (!_vm->isFlag(kGFNeedleTaken)) { -		_vm->_gameSys->insertSequence(0x24, 10, 0x23, 10, kSeqSyncWait, 0, 0, 0); +		gameSys.insertSequence(0x24, 10, 0x23, 10, kSeqSyncWait, 0, 0, 0);  		_vm->_gnapSequenceId = 0x24;  		_vm->_timers[2] = _vm->getRandom(40) + 50;  	} @@ -1872,8 +1896,8 @@ void Scene14::run() {  				_vm->setFlag(kGFNeedleTaken);  				_vm->setGrabCursorSprite(-1);  				_vm->hideCursor(); -				_vm->_gameSys->setAnimation(0x26, 10, 0); -				_vm->_gameSys->insertSequence(0x26, 10, _vm->_gnapSequenceId, 10, kSeqSyncWait, 0, 0, 0); +				gameSys.setAnimation(0x26, 10, 0); +				gameSys.insertSequence(0x26, 10, _vm->_gnapSequenceId, 10, kSeqSyncWait, 0, 0, 0);  			} else if (_vm->_grabCursorSpriteIndex >= 0) {  				_vm->playSound(0x108E9, false);  			} else { @@ -1882,15 +1906,15 @@ void Scene14::run() {  					_vm->playSound(0x108E9, false);  					break;  				case GRAB_CURSOR: -					_vm->_gameSys->insertSequence(0x25, 10, _vm->_gnapSequenceId, 10, kSeqSyncWait, 0, 0, 0); -					_vm->_gameSys->insertSequence(0x23, 10, 0x25, 10, kSeqSyncWait, 0, 0, 0); +					gameSys.insertSequence(0x25, 10, _vm->_gnapSequenceId, 10, kSeqSyncWait, 0, 0, 0); +					gameSys.insertSequence(0x23, 10, 0x25, 10, kSeqSyncWait, 0, 0, 0);  					_vm->_gnapSequenceId = 0x23;  					break;  				case TALK_CURSOR:  					_vm->playSound((_vm->getRandom(5) + 0x8D5) | 0x10000, false);  					break;  				case PLAT_CURSOR: -					_vm->_gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY); +					gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY);  					break;  				}  			} @@ -1898,7 +1922,7 @@ void Scene14::run() {  		case kHS14Toilet:  			if (_vm->_grabCursorSpriteIndex >= 0) { -				_vm->_gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY); +				gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY);  			} else {  				switch (_vm->_verbCursor) {  				case LOOK_CURSOR: @@ -1909,7 +1933,7 @@ void Scene14::run() {  					_vm->playSound((_vm->getRandom(5) + 0x8D5) | 0x10000, false);  					break;  				case PLAT_CURSOR: -					_vm->_gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY); +					gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY);  					break;  				}  			} @@ -1924,7 +1948,7 @@ void Scene14::run() {  		_vm->checkGameKeys();  		if (!_vm->isFlag(kGFNeedleTaken) && !_vm->_timers[2]) { -			_vm->_gameSys->insertSequence(0x24, 10, _vm->_gnapSequenceId, 10, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x24, 10, _vm->_gnapSequenceId, 10, kSeqSyncWait, 0, 0, 0);  			_vm->_gnapSequenceId = 0x24;  			_vm->_timers[2] = _vm->getRandom(40) + 50;  		} @@ -1943,15 +1967,17 @@ void Scene14::run() {  }  void Scene14::updateAnimations() { -	if (_vm->_gameSys->getAnimationStatus(0) == 2) { -		_vm->_gameSys->setAnimation(0, 0, 0); -		_vm->_gameSys->insertSpriteDrawItem(_vm->_largeSprite, 0, 0, 300); -		_vm->_gameSys->setAnimation(0x10843, 301, 1); -		_vm->_gameSys->insertSequence(0x10843, 301, 0x26, 10, kSeqSyncWait, 0, 0, 0); +	GameSys& gameSys = *_vm->_gameSys; + +	if (gameSys.getAnimationStatus(0) == 2) { +		gameSys.setAnimation(0, 0, 0); +		gameSys.insertSpriteDrawItem(_vm->_largeSprite, 0, 0, 300); +		gameSys.setAnimation(0x10843, 301, 1); +		gameSys.insertSequence(0x10843, 301, 0x26, 10, kSeqSyncWait, 0, 0, 0);  	} -	if (_vm->_gameSys->getAnimationStatus(1) == 2) { -		_vm->_gameSys->setAnimation(0, 0, 1); +	if (gameSys.getAnimationStatus(1) == 2) { +		gameSys.setAnimation(0, 0, 1);  		_vm->_sceneDone = true;  		_vm->_newSceneNum = 13;  		_vm->_grabCursorSpriteIndex = kItemQuarter; @@ -1997,6 +2023,8 @@ void Scene15::updateHotspots() {  }  void Scene15::run() { +	GameSys& gameSys = *_vm->_gameSys; +  	_currSlotSequenceId = -1;  	_currUpperButtonSequenceId = -1;  	_currLowerButtonSequenceId = -1; @@ -2006,8 +2034,8 @@ void Scene15::run() {  	_currRecordSequenceId = 0xD5;  	_nextRecordSequenceId = -1; -	_vm->_gameSys->setAnimation(0xD5, 1, 0); -	_vm->_gameSys->insertSequence(_currRecordSequenceId, 1, 0, 0, kSeqNone, 0, 0, 0); +	gameSys.setAnimation(0xD5, 1, 0); +	gameSys.insertSequence(_currRecordSequenceId, 1, 0, 0, kSeqNone, 0, 0, 0);  	_vm->queueInsertDeviceIcon(); @@ -2044,7 +2072,7 @@ void Scene15::run() {  			} else if (_vm->_grabCursorSpriteIndex == kItemDiceQuarterHole) {  				_nextSlotSequenceId = 0xDB;  			} else if (_vm->_grabCursorSpriteIndex >= 0) { -				_vm->_gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY); +				gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY);  			} else {  				switch (_vm->_verbCursor) {  				case LOOK_CURSOR: @@ -2055,7 +2083,7 @@ void Scene15::run() {  					_vm->playSound((_vm->getRandom(5) + 0x8D5) | 0x10000, false);  					break;  				case PLAT_CURSOR: -					_vm->_gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY); +					gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY);  					break;  				}  			} @@ -2063,7 +2091,7 @@ void Scene15::run() {  		case kHS15PlayButton:  			if (_vm->_grabCursorSpriteIndex >= 0) { -				_vm->_gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY); +				gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY);  			} else {  				switch (_vm->_verbCursor) {  				case LOOK_CURSOR: @@ -2082,7 +2110,7 @@ void Scene15::run() {  					_vm->playSound((_vm->getRandom(5) + 0x8D5) | 0x10000, false);  					break;  				case PLAT_CURSOR: -					_vm->_gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY); +					gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY);  					break;  				}  			} @@ -2095,7 +2123,7 @@ void Scene15::run() {  		case kHS15Button5:  		case kHS15Button6:  			if (_vm->_grabCursorSpriteIndex >= 0) { -				_vm->_gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY); +				gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY);  			} else {  				switch (_vm->_verbCursor) {  				case LOOK_CURSOR: @@ -2108,7 +2136,7 @@ void Scene15::run() {  					_vm->playSound((_vm->getRandom(5) + 0x8D5) | 0x10000, false);  					break;  				case PLAT_CURSOR: -					_vm->_gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY); +					gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY);  					break;  				}  			} @@ -2121,7 +2149,7 @@ void Scene15::run() {  		case kHS15ButtonE:  		case kHS15ButtonF:  			if (_vm->_grabCursorSpriteIndex >= 0) { -				_vm->_gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY); +				gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY);  			} else {  				switch (_vm->_verbCursor) {  				case LOOK_CURSOR: @@ -2134,7 +2162,7 @@ void Scene15::run() {  					_vm->playSound((_vm->getRandom(5) + 0x8D5) | 0x10000, false);  					break;  				case PLAT_CURSOR: -					_vm->_gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY); +					gameSys.insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY);  					break;  				}  			} @@ -2160,12 +2188,14 @@ void Scene15::run() {  }  void Scene15::updateAnimations() { -	if (_vm->_gameSys->getAnimationStatus(0) == 2) { +	GameSys& gameSys = *_vm->_gameSys; + +	if (gameSys.getAnimationStatus(0) == 2) {  		if (_vm->_isLeavingScene) {  			_vm->_sceneDone = true;  		} else if (_nextSlotSequenceId != -1) { -			_vm->_gameSys->setAnimation(_nextSlotSequenceId, 1, 0); -			_vm->_gameSys->insertSequence(_nextSlotSequenceId, 1, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.setAnimation(_nextSlotSequenceId, 1, 0); +			gameSys.insertSequence(_nextSlotSequenceId, 1, 0, 0, kSeqNone, 0, 0, 0);  			_currSlotSequenceId = _nextSlotSequenceId;  			_nextSlotSequenceId = -1;  			switch (_currSlotSequenceId) { @@ -2199,18 +2229,18 @@ void Scene15::updateAnimations() {  			case 0xD8:  			case 0xDA:  				if (_currUpperButtonSequenceId != -1) { -					_vm->_gameSys->removeSequence(_currUpperButtonSequenceId, 1, true); +					gameSys.removeSequence(_currUpperButtonSequenceId, 1, true);  					_currUpperButtonSequenceId = -1;  				}  				if (_currLowerButtonSequenceId != -1) { -					_vm->_gameSys->removeSequence(_currLowerButtonSequenceId, 1, true); +					gameSys.removeSequence(_currLowerButtonSequenceId, 1, true);  					_currLowerButtonSequenceId = -1;  				}  				break;  			}  		} else if (_nextRecordSequenceId != -1) { -			_vm->_gameSys->setAnimation(_nextRecordSequenceId, 1, 0); -			_vm->_gameSys->insertSequence(_nextRecordSequenceId, 1, _currRecordSequenceId, 1, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(_nextRecordSequenceId, 1, 0); +			gameSys.insertSequence(_nextRecordSequenceId, 1, _currRecordSequenceId, 1, kSeqSyncWait, 0, 0, 0);  			_currRecordSequenceId = _nextRecordSequenceId;  			_nextRecordSequenceId = -1;  			if (_currRecordSequenceId == 0xD3) { @@ -2218,16 +2248,16 @@ void Scene15::updateAnimations() {  				_vm->_newSceneNum = 16;  				_vm->_isLeavingScene = true;  			} -			_vm->_gameSys->removeSequence(_currUpperButtonSequenceId, 1, true); +			gameSys.removeSequence(_currUpperButtonSequenceId, 1, true);  			_currUpperButtonSequenceId = -1; -			_vm->_gameSys->removeSequence(_currLowerButtonSequenceId, 1, true); +			gameSys.removeSequence(_currLowerButtonSequenceId, 1, true);  			_currLowerButtonSequenceId = -1;  		} else if (_nextUpperButtonSequenceId != -1) { -			_vm->_gameSys->setAnimation(_nextUpperButtonSequenceId, 1, 0); +			gameSys.setAnimation(_nextUpperButtonSequenceId, 1, 0);  			if (_currUpperButtonSequenceId == -1) -				_vm->_gameSys->insertSequence(_nextUpperButtonSequenceId, 1, 0, 0, kSeqNone, 0, 0, 0); +				gameSys.insertSequence(_nextUpperButtonSequenceId, 1, 0, 0, kSeqNone, 0, 0, 0);  			else -				_vm->_gameSys->insertSequence(_nextUpperButtonSequenceId, 1, _currUpperButtonSequenceId, 1, kSeqSyncWait, 0, 0, 0); +				gameSys.insertSequence(_nextUpperButtonSequenceId, 1, _currUpperButtonSequenceId, 1, kSeqSyncWait, 0, 0, 0);  			_currUpperButtonSequenceId = _nextUpperButtonSequenceId;  			_nextUpperButtonSequenceId = -1;  			if (_currLowerButtonSequenceId != -1 && _vm->isFlag(kGFUnk14)) { @@ -2237,11 +2267,11 @@ void Scene15::updateAnimations() {  					_nextRecordSequenceId = 0xD4;  			}  		} else if (_nextLowerButtonSequenceId != -1) { -			_vm->_gameSys->setAnimation(_nextLowerButtonSequenceId, 1, 0); +			gameSys.setAnimation(_nextLowerButtonSequenceId, 1, 0);  			if (_currLowerButtonSequenceId == -1) -				_vm->_gameSys->insertSequence(_nextLowerButtonSequenceId, 1, 0, 0, kSeqNone, 0, 0, 0); +				gameSys.insertSequence(_nextLowerButtonSequenceId, 1, 0, 0, kSeqNone, 0, 0, 0);  			else -				_vm->_gameSys->insertSequence(_nextLowerButtonSequenceId, 1, _currLowerButtonSequenceId, 1, kSeqSyncWait, 0, 0, 0); +				gameSys.insertSequence(_nextLowerButtonSequenceId, 1, _currLowerButtonSequenceId, 1, kSeqSyncWait, 0, 0, 0);  			_currLowerButtonSequenceId = _nextLowerButtonSequenceId;  			_nextLowerButtonSequenceId = -1;  			if (_currUpperButtonSequenceId != -1 && _vm->isFlag(kGFUnk14)) { @@ -2302,6 +2332,7 @@ void Scene17::update() {  }  void Scene17::platHangUpPhone() { +	GameSys& gameSys = *_vm->_gameSys;  	int savedGnapActionStatus = _vm->_gnapActionStatus;  	if (_vm->_platypusActionStatus == kAS17PlatPhoningAssistant) { @@ -2309,18 +2340,18 @@ void Scene17::platHangUpPhone() {  		_vm->updateMouseCursor();  		_platPhoneCtr = 0;  		_vm->_platypusActionStatus = -1; -		_vm->_gameSys->setAnimation(0x257, 254, 4); -		_vm->_gameSys->insertSequence(0x257, 254, _currPhoneSequenceId, 254, kSeqSyncExists, 0, 0, 0); -		while (_vm->_gameSys->getAnimationStatus(4) != 2) +		gameSys.setAnimation(0x257, 254, 4); +		gameSys.insertSequence(0x257, 254, _currPhoneSequenceId, 254, kSeqSyncExists, 0, 0, 0); +		while (gameSys.getAnimationStatus(4) != 2)  			_vm->gameUpdateTick(); -		_vm->_gameSys->setAnimation(0x25B, _vm->_platypusId, 1); -		_vm->_gameSys->insertSequence(0x25B, _vm->_platypusId, _vm->_platypusSequenceId | (_vm->_platypusSequenceDatNum << 16), _vm->_platypusId, kSeqSyncWait, 0, 0, 0); +		gameSys.setAnimation(0x25B, _vm->_platypusId, 1); +		gameSys.insertSequence(0x25B, _vm->_platypusId, _vm->_platypusSequenceId | (_vm->_platypusSequenceDatNum << 16), _vm->_platypusId, kSeqSyncWait, 0, 0, 0);  		_vm->_platypusSequenceId = 0x25B;  		_vm->_platypusSequenceDatNum = 0;  		_currPhoneSequenceId = -1;  		_nextPhoneSequenceId = -1;  		_vm->clearFlag(kGFPlatypusTalkingToAssistant); -		while (_vm->_gameSys->getAnimationStatus(1) != 2) +		while (gameSys.getAnimationStatus(1) != 2)  			_vm->gameUpdateTick();  		_vm->_gnapActionStatus = savedGnapActionStatus;  		_vm->updateMouseCursor(); @@ -2329,6 +2360,8 @@ void Scene17::platHangUpPhone() {  }  void Scene17::run() { +	GameSys& gameSys = *_vm->_gameSys; +  	_vm->playSound(0x10940, true);  	_vm->startSoundTimerA(8);  	_vm->_sceneWaiting = false; @@ -2339,23 +2372,23 @@ void Scene17::run() {  	_vm->_timers[7] = _vm->getRandom(100) + 100;  	if (_vm->isFlag(kGFTruckKeysUsed)) { -		_vm->_gameSys->insertSequence(0x25F, 20, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.insertSequence(0x25F, 20, 0, 0, kSeqNone, 0, 0, 0);  	} else {  		if (_vm->_s18GarbageCanPos >= 8) { -			_vm->_gameSys->insertSequence(0x260, 20, 0, 0, kSeqNone, 0, 97, 1); +			gameSys.insertSequence(0x260, 20, 0, 0, kSeqNone, 0, 97, 1);  		} else if (_vm->_s18GarbageCanPos >= 6) { -			_vm->_gameSys->insertSequence(0x260, 20, 0, 0, kSeqNone, 0, 68, 2); +			gameSys.insertSequence(0x260, 20, 0, 0, kSeqNone, 0, 68, 2);  		} else if (_vm->_s18GarbageCanPos >= 5) { -			_vm->_gameSys->insertSequence(0x260, 20, 0, 0, kSeqNone, 0, 23, -1); +			gameSys.insertSequence(0x260, 20, 0, 0, kSeqNone, 0, 23, -1);  		} else if (_vm->_s18GarbageCanPos >= 4) { -			_vm->_gameSys->insertSequence(0x260, 20, 0, 0, kSeqNone, 0, -11, -5); +			gameSys.insertSequence(0x260, 20, 0, 0, kSeqNone, 0, -11, -5);  		} else { -			_vm->_gameSys->insertSequence(0x260, 20, 0, 0, kSeqNone, 0, -54, -8); +			gameSys.insertSequence(0x260, 20, 0, 0, kSeqNone, 0, -54, -8);  		}  	}  	if (_vm->isFlag(kGFGroceryStoreHatTaken)) -		_vm->_gameSys->insertSequence(0x262, 1, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.insertSequence(0x262, 1, 0, 0, kSeqNone, 0, 0, 0);  	_vm->queueInsertDeviceIcon(); @@ -2367,22 +2400,22 @@ void Scene17::run() {  	_currCarWindowSequenceId = 0x244;  	if (_vm->isFlag(kGFUnk14)) -		_vm->_gameSys->insertSequence(0x261, 1, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.insertSequence(0x261, 1, 0, 0, kSeqNone, 0, 0, 0); -	_vm->_gameSys->setAnimation(_currWrenchSequenceId, 40, 2); -	_vm->_gameSys->insertSequence(_currWrenchSequenceId, 40, 0, 0, kSeqNone, 0, 0, 0); +	gameSys.setAnimation(_currWrenchSequenceId, 40, 2); +	gameSys.insertSequence(_currWrenchSequenceId, 40, 0, 0, kSeqNone, 0, 0, 0);  	if (_vm->isFlag(kGFGrassTaken)) { -		_vm->_gameSys->setAnimation(0, 0, 3); +		gameSys.setAnimation(0, 0, 3);  	} else { -		_vm->_gameSys->setAnimation(_currCarWindowSequenceId, 40, 3); -		_vm->_gameSys->insertSequence(_currCarWindowSequenceId, 40, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.setAnimation(_currCarWindowSequenceId, 40, 3); +		gameSys.insertSequence(_currCarWindowSequenceId, 40, 0, 0, kSeqNone, 0, 0, 0);  	}  	_canTryGetWrench = true;  	if (_vm->isFlag(kGFUnk18)) -		_vm->_gameSys->insertSequence(0x24F, 100, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.insertSequence(0x24F, 100, 0, 0, kSeqNone, 0, 0, 0);  	if (_vm->_prevSceneNum == 53 || _vm->_prevSceneNum == 18 || _vm->_prevSceneNum == 20 || _vm->_prevSceneNum == 19) {  		if (_vm->_prevSceneNum == 20) { @@ -2396,8 +2429,8 @@ void Scene17::run() {  			_vm->_platX = _vm->_hotspotsWalkPos[2].x;  			_vm->_platY = _vm->_hotspotsWalkPos[2].y;  			_vm->_platypusId = 20 * _vm->_hotspotsWalkPos[2].y; -			_vm->_gameSys->insertSequence(0x25A, 20 * _vm->_hotspotsWalkPos[2].y, 0, 0, kSeqNone, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x257, 254, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0x25A, 20 * _vm->_hotspotsWalkPos[2].y, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0x257, 254, 0, 0, kSeqNone, 0, 0, 0);  			_vm->_platypusSequenceId = 0x25A;  			_vm->_platypusSequenceDatNum = 0;  			_vm->endSceneInit(); @@ -2405,7 +2438,7 @@ void Scene17::run() {  			_vm->clearFlag(kGFUnk16);  			_vm->_platypusActionStatus = kAS17PlatPhoningAssistant;  			platHangUpPhone(); -			_vm->_gameSys->setAnimation(0, 0, 4); +			gameSys.setAnimation(0, 0, 4);  			_vm->clearFlag(kGFPlatypusTalkingToAssistant);  			_vm->clearFlag(kGFUnk27);  			updateHotspots(); @@ -2416,15 +2449,15 @@ void Scene17::run() {  			_vm->_gnapX = _vm->_hotspotsWalkPos[2].x;  			_vm->_gnapY = _vm->_hotspotsWalkPos[2].y;  			_vm->_gnapId = 20 * _vm->_hotspotsWalkPos[2].y; -			_vm->_gameSys->insertSequence(601, 20 * _vm->_hotspotsWalkPos[2].y, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(601, 20 * _vm->_hotspotsWalkPos[2].y, 0, 0, kSeqNone, 0, 0, 0);  			_vm->_gnapSequenceDatNum = 0;  			_vm->_gnapSequenceId = 601;  			_vm->_gnapActionStatus = kAS17GnapHangUpPhone;  			_vm->clearFlag(kGFUnk25); -			_vm->_gameSys->insertSequence(0x251, 254, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0x251, 254, 0, 0, kSeqNone, 0, 0, 0);  			_vm->endSceneInit(); -			_vm->_gameSys->setAnimation(0x257, 254, 0); -			_vm->_gameSys->insertSequence(0x257, 254, 0x251, 254, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(0x257, 254, 0); +			gameSys.insertSequence(0x257, 254, 0x251, 254, kSeqSyncWait, 0, 0, 0);  		} else if (_vm->isFlag(kGFPlatypusTalkingToAssistant)) {  			_vm->clearFlag(kGFSpringTaken);  			_vm->clearFlag(kGFUnk16); @@ -2434,12 +2467,12 @@ void Scene17::run() {  			_vm->_platY = _vm->_hotspotsWalkPos[2].y;  			_vm->_platypusId = 20 * _vm->_hotspotsWalkPos[2].y;  			_currPhoneSequenceId = 0x251; -			_vm->_gameSys->insertSequence(0x25A, 20 * _vm->_hotspotsWalkPos[2].y, 0, 0, kSeqNone, 0, 0, 0); -			_vm->_gameSys->insertSequence(_currPhoneSequenceId, 254, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0x25A, 20 * _vm->_hotspotsWalkPos[2].y, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(_currPhoneSequenceId, 254, 0, 0, kSeqNone, 0, 0, 0);  			_vm->_platypusSequenceId = 0x25A;  			_vm->_platypusSequenceDatNum = 0;  			_vm->endSceneInit(); -			_vm->_gameSys->setAnimation(_currPhoneSequenceId, 254, 1); +			gameSys.setAnimation(_currPhoneSequenceId, 254, 1);  			_vm->_platypusActionStatus = kAS17PlatPhoningAssistant;  			updateHotspots();  		} else if (_vm->_prevSceneNum == 18) { @@ -2469,14 +2502,14 @@ void Scene17::run() {  		_vm->_gnapSequenceId = 0x23D;  		_vm->_gnapSequenceDatNum = 0;  		_vm->_gnapIdleFacing = kDirBottomRight; -		_vm->_gameSys->insertSequence(makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.insertSequence(makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, 0, 0, kSeqNone, 0, 0, 0);  		_vm->_platX = -1;  		_vm->_platY = 8;  		_vm->_platypusId = 160; -		_vm->_gameSys->insertSequence(0x241, 160, 0, 0, kSeqNone, 0, 0, 0); -		_vm->_gameSys->insertSequence(0x107C1, _vm->_platypusId, 0x241, _vm->_platypusId, +		gameSys.insertSequence(0x241, 160, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.insertSequence(0x107C1, _vm->_platypusId, 0x241, _vm->_platypusId,  			kSeqScale | kSeqSyncWait, 0, 75 * _vm->_platX - _vm->_platGridX, 48 * _vm->_platY - _vm->_platGridY); -		_vm->_gameSys->insertSequence(0x22C, 2, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.insertSequence(0x22C, 2, 0, 0, kSeqNone, 0, 0, 0);  		// TODO delayTicksA(2, 9);  		_vm->endSceneInit();  		_vm->_platypusSequenceId = 0x7C1; @@ -2702,20 +2735,20 @@ void Scene17::run() {  			if (!_vm->_timers[4]) {  				_vm->_timers[4] = _vm->getRandom(100) + 200;  				if (_vm->_gnapActionStatus < 0 && _vm->_platypusActionStatus < 0) -					_vm->_gameSys->insertSequence(0x22B, 21, 0, 0, kSeqNone, 0, 0, 0); +					gameSys.insertSequence(0x22B, 21, 0, 0, kSeqNone, 0, 0, 0);  			}  			if (!_vm->_timers[7]) {  				_vm->_timers[7] = _vm->getRandom(100) + 100;  				if (_vm->_gnapActionStatus < 0 && _vm->_platypusActionStatus < 0) {  					switch (_vm->getRandom(3)) {  					case 0: -						_vm->_gameSys->insertSequence(0x25C, 255, 0, 0, kSeqNone, 0, 0, 0); +						gameSys.insertSequence(0x25C, 255, 0, 0, kSeqNone, 0, 0, 0);  						break;  					case 1: -						_vm->_gameSys->insertSequence(0x25D, 255, 0, 0, kSeqNone, 0, 0, 0); +						gameSys.insertSequence(0x25D, 255, 0, 0, kSeqNone, 0, 0, 0);  						break;  					case 2: -						_vm->_gameSys->insertSequence(0x25E, 255, 0, 0, kSeqNone, 0, 0, 0); +						gameSys.insertSequence(0x25E, 255, 0, 0, kSeqNone, 0, 0, 0);  						break;  					}  				} @@ -2795,8 +2828,10 @@ void Scene17::updateAnimations() {  		0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257  	}; -	if (_vm->_gameSys->getAnimationStatus(0) == 2) { -		_vm->_gameSys->setAnimation(0, 0, 0); +	GameSys& gameSys = *_vm->_gameSys; + +	if (gameSys.getAnimationStatus(0) == 2) { +		gameSys.setAnimation(0, 0, 0);  		switch (_vm->_gnapActionStatus) {  		case kAS17GetWrench1:  			_vm->_gnapActionStatus = kAS17GetWrenchGnapReady; @@ -2804,8 +2839,8 @@ void Scene17::updateAnimations() {  		case kAS17GetCoinFromPhone:  			_vm->playGnapPullOutDevice(1, 3);  			_vm->playGnapUseDevice(0, 0); -			_vm->_gameSys->setAnimation(0x250, 100, 0); -			_vm->_gameSys->insertSequence(0x250, 100, 591, 100, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(0x250, 100, 0); +			gameSys.insertSequence(0x250, 100, 591, 100, kSeqSyncWait, 0, 0, 0);  			_vm->invAdd(kItemDiceQuarterHole);  			_vm->clearFlag(kGFUnk18);  			_vm->_gnapActionStatus = kAS17GetCoinFromPhoneDone; @@ -2815,8 +2850,8 @@ void Scene17::updateAnimations() {  			_vm->_gnapActionStatus = -1;  			break;  		case kAS17PutCoinIntoPhone: -			_vm->_gameSys->setAnimation(0x24C, _vm->_gnapId, 0); -			_vm->_gameSys->insertSequence(0x24C, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(0x24C, _vm->_gnapId, 0); +			gameSys.insertSequence(0x24C, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0);  			_vm->_gnapSequenceDatNum = 0;  			_vm->_gnapSequenceId = 0x24C;  			_vm->invRemove(kItemDiceQuarterHole); @@ -2825,17 +2860,17 @@ void Scene17::updateAnimations() {  			_vm->_gnapActionStatus = kAS17PutCoinIntoPhoneDone;  			break;  		case kAS17PutCoinIntoPhoneDone: -			_vm->_gameSys->insertSequence(0x24F, 100, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0x24F, 100, 0, 0, kSeqNone, 0, 0, 0);  			_vm->_gnapActionStatus = -1;  			break;  		case kAS17GnapUsePhone: -			_vm->_gameSys->setAnimation(0x24D, _vm->_gnapId, 0); -			_vm->_gameSys->insertSequence(0x24D, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(0x24D, _vm->_gnapId, 0); +			gameSys.insertSequence(0x24D, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0);  			_vm->_gnapActionStatus = kAS17LeaveScene;  			_vm->_newSceneNum = 53;  			break;  		case kAS17GnapHangUpPhone: -			_vm->_gameSys->insertSequence(0x258, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x258, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0);  			_vm->_gnapSequenceDatNum = 0;  			_vm->_gnapSequenceId = 0x258;  			_vm->_gnapActionStatus = -1; @@ -2846,8 +2881,8 @@ void Scene17::updateAnimations() {  		}  	} -	if (_vm->_gameSys->getAnimationStatus(1) == 2) { -		_vm->_gameSys->setAnimation(0, 0, 1); +	if (gameSys.getAnimationStatus(1) == 2) { +		gameSys.setAnimation(0, 0, 1);  		switch (_vm->_platypusActionStatus) {  		case kAS17TryGetWrench:  			_vm->_platypusActionStatus = -1; @@ -2870,8 +2905,8 @@ void Scene17::updateAnimations() {  			_vm->setGrabCursorSprite(kItemWrench);  			break;  		case kAS17PlatUsePhone: -			_vm->_gameSys->setAnimation(0x24E, _vm->_platypusId, 1); -			_vm->_gameSys->insertSequence(0x24E, _vm->_platypusId, _vm->_platypusSequenceId | (_vm->_platypusSequenceDatNum << 16), _vm->_platypusId, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(0x24E, _vm->_platypusId, 1); +			gameSys.insertSequence(0x24E, _vm->_platypusId, _vm->_platypusSequenceId | (_vm->_platypusSequenceDatNum << 16), _vm->_platypusId, kSeqSyncWait, 0, 0, 0);  			_vm->_platypusSequenceDatNum = 0;  			_vm->_platypusSequenceId = 0x24E;  			_vm->_platypusActionStatus = kAS17LeaveScene; @@ -2883,7 +2918,7 @@ void Scene17::updateAnimations() {  				_platPhoneCtr = 0;  				_nextPhoneSequenceId = -1;  				_currPhoneSequenceId = -1; -				_vm->_gameSys->insertSequence(0x25B, _vm->_platypusId, 0x25A, _vm->_platypusId, kSeqSyncWait, 0, 0, 0); +				gameSys.insertSequence(0x25B, _vm->_platypusId, 0x25A, _vm->_platypusId, kSeqSyncWait, 0, 0, 0);  				_vm->_platypusSequenceDatNum = 0;  				_vm->_platypusSequenceId = 0x25B;  				_vm->_platypusActionStatus = -1; @@ -2892,9 +2927,9 @@ void Scene17::updateAnimations() {  				updateHotspots();  			} else {  				_nextPhoneSequenceId = kPlatPhoneSequenceIds[_platPhoneCtr]; -				_vm->_gameSys->setAnimation(_nextPhoneSequenceId, 254, 1); -				_vm->_gameSys->insertSequence(_nextPhoneSequenceId, 254, _currPhoneSequenceId, 254, kSeqSyncWait, 0, 0, 0); -				_vm->_gameSys->insertSequence(0x25A, _vm->_platypusId, 0x25A, _vm->_platypusId, kSeqSyncWait, 0, 0, 0); +				gameSys.setAnimation(_nextPhoneSequenceId, 254, 1); +				gameSys.insertSequence(_nextPhoneSequenceId, 254, _currPhoneSequenceId, 254, kSeqSyncWait, 0, 0, 0); +				gameSys.insertSequence(0x25A, _vm->_platypusId, 0x25A, _vm->_platypusId, kSeqSyncWait, 0, 0, 0);  				_vm->_platypusSequenceDatNum = 0;  				_vm->_platypusSequenceId = 0x25A;  				_currPhoneSequenceId = _nextPhoneSequenceId; @@ -2906,42 +2941,42 @@ void Scene17::updateAnimations() {  		}  	} -	if (_vm->_gameSys->getAnimationStatus(2) == 2) { +	if (gameSys.getAnimationStatus(2) == 2) {  		switch (_nextWrenchSequenceId) {  		case 0x233:  			_vm->_gnapActionStatus = -1; -			_vm->_gameSys->insertSequence(0x243, _vm->_platypusId, +			gameSys.insertSequence(0x243, _vm->_platypusId,  				_vm->_platypusSequenceId | (_vm->_platypusSequenceDatNum << 16), _vm->_platypusId,  				kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(_nextWrenchSequenceId, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(_nextWrenchSequenceId, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0);  			_currWrenchSequenceId = _nextWrenchSequenceId;  			_nextWrenchSequenceId = -1;  			_vm->_platypusSequenceId = 0x243;  			_vm->_platypusSequenceDatNum = 0; -			_vm->_gameSys->setAnimation(0x243, _vm->_platypusId, 1); +			gameSys.setAnimation(0x243, _vm->_platypusId, 1);  			break;  		case 0x234:  			_vm->_gnapActionStatus = -1; -			_vm->_gameSys->insertSequence(0x242, _vm->_platypusId, +			gameSys.insertSequence(0x242, _vm->_platypusId,  				_vm->_platypusSequenceId | (_vm->_platypusSequenceDatNum << 16), _vm->_platypusId,  				kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(_nextWrenchSequenceId, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(_nextWrenchSequenceId, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0);  			_currWrenchSequenceId = _nextWrenchSequenceId;  			_nextWrenchSequenceId = -1;  			_vm->_platypusSequenceId = 0x242;  			_vm->_platypusSequenceDatNum = 0; -			_vm->_gameSys->setAnimation(0x242, _vm->_platypusId, 1); +			gameSys.setAnimation(0x242, _vm->_platypusId, 1);  			break;  		case 0x231:  			if (_vm->getRandom(2) != 0)  				_nextCarWindowSequenceId = 0x245;  			else  				_nextCarWindowSequenceId = 0x248; -			_vm->_gameSys->setAnimation(0, 0, 2); +			gameSys.setAnimation(0, 0, 2);  			break;  		case 0x232:  			_nextCarWindowSequenceId = 0x247; -			_vm->_gameSys->setAnimation(0, 0, 2); +			gameSys.setAnimation(0, 0, 2);  			break;  		case 0x22E:  		case 0x235: @@ -2950,22 +2985,22 @@ void Scene17::updateAnimations() {  			else  				_vm->_hotspots[kHS17Wrench]._flags |= SF_DISABLED;  			_canTryGetWrench = !_canTryGetWrench; -			_vm->_gameSys->setAnimation(_nextWrenchSequenceId, 40, 2); -			_vm->_gameSys->insertSequence(_nextWrenchSequenceId, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(_nextWrenchSequenceId, 40, 2); +			gameSys.insertSequence(_nextWrenchSequenceId, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0);  			_currWrenchSequenceId = _nextWrenchSequenceId;  			_nextWrenchSequenceId = -1;  			break;  		case 0x230:  			if (_vm->_gnapActionStatus == kAS17GetWrenchGnapReady) { -				_vm->_gameSys->setAnimation(0, 0, 2); +				gameSys.setAnimation(0, 0, 2);  				if (_canTryGetWrench) { -					_vm->_gameSys->insertSequence(0x22E, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0); +					gameSys.insertSequence(0x22E, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0);  					_currWrenchSequenceId = 0x22E;  					_canTryGetWrench = false;  				} -				_vm->_gameSys->setAnimation(0x23F, _vm->_platypusId, 1); -				_vm->_gameSys->insertSequence(0x10875, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); -				_vm->_gameSys->insertSequence(0x23F, _vm->_platypusId, +				gameSys.setAnimation(0x23F, _vm->_platypusId, 1); +				gameSys.insertSequence(0x10875, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +				gameSys.insertSequence(0x23F, _vm->_platypusId,  					_vm->_platypusSequenceId | (_vm->_platypusSequenceDatNum << 16), _vm->_platypusId,  					kSeqSyncWait, 0, 0, 0);  				_vm->_gnapSequenceDatNum = 1; @@ -2978,8 +3013,8 @@ void Scene17::updateAnimations() {  			break;  		default:  			if (_nextWrenchSequenceId != -1) { -				_vm->_gameSys->setAnimation(_nextWrenchSequenceId, 40, 2); -				_vm->_gameSys->insertSequence(_nextWrenchSequenceId, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0); +				gameSys.setAnimation(_nextWrenchSequenceId, 40, 2); +				gameSys.insertSequence(_nextWrenchSequenceId, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0);  				_currWrenchSequenceId = _nextWrenchSequenceId;  				_nextWrenchSequenceId = -1;  			} @@ -2987,51 +3022,51 @@ void Scene17::updateAnimations() {  		}  	} -	if (_vm->_gameSys->getAnimationStatus(3) == 2) { +	if (gameSys.getAnimationStatus(3) == 2) {  		switch (_nextCarWindowSequenceId) {  		case 0x246: -			_vm->_gameSys->setAnimation(_nextCarWindowSequenceId, 40, 3); -			_vm->_gameSys->insertSequence(_nextCarWindowSequenceId, 40, _currCarWindowSequenceId, 40, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(_nextCarWindowSequenceId, 40, 3); +			gameSys.insertSequence(_nextCarWindowSequenceId, 40, _currCarWindowSequenceId, 40, kSeqSyncWait, 0, 0, 0);  			_currCarWindowSequenceId = _nextCarWindowSequenceId;  			_nextCarWindowSequenceId = -1;  			break;  		case 0x245:  		case 0x247:  		case 0x248: -			_vm->_gameSys->setAnimation(_nextWrenchSequenceId, 40, 2); -			_vm->_gameSys->insertSequence(_nextWrenchSequenceId, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0); -			while (_vm->_gameSys->getAnimationStatus(2) != 2) +			gameSys.setAnimation(_nextWrenchSequenceId, 40, 2); +			gameSys.insertSequence(_nextWrenchSequenceId, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0); +			while (gameSys.getAnimationStatus(2) != 2)  				update(); -			_vm->_gameSys->setAnimation(_nextCarWindowSequenceId, 40, 3); -			_vm->_gameSys->insertSequence(_nextCarWindowSequenceId, 40, _currCarWindowSequenceId, 40, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(_nextCarWindowSequenceId, 40, 3); +			gameSys.insertSequence(_nextCarWindowSequenceId, 40, _currCarWindowSequenceId, 40, kSeqSyncWait, 0, 0, 0);  			_currCarWindowSequenceId = _nextCarWindowSequenceId;  			_nextCarWindowSequenceId = -1;  			_currWrenchSequenceId = _nextWrenchSequenceId;  			_nextWrenchSequenceId = -1;  			break;  		case 0x249: -			_vm->_gameSys->setAnimation(0x230, 40, 2); -			_vm->_gameSys->setAnimation(0x240, _vm->_platypusId, 1); -			_vm->_gameSys->insertSequence(0x230, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(_nextCarWindowSequenceId, 40, _currCarWindowSequenceId, 40, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x240, _vm->_platypusId, _vm->_platypusSequenceId, _vm->_platypusId, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x23E, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(0x230, 40, 2); +			gameSys.setAnimation(0x240, _vm->_platypusId, 1); +			gameSys.insertSequence(0x230, 40, _currWrenchSequenceId, 40, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(_nextCarWindowSequenceId, 40, _currCarWindowSequenceId, 40, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x240, _vm->_platypusId, _vm->_platypusSequenceId, _vm->_platypusId, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x23E, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0);  			_vm->_gnapSequenceId = 0x23E;  			_vm->_gnapSequenceDatNum = 0;  			_vm->_platypusSequenceId = 0x240;  			_vm->_platypusSequenceDatNum = 0; -			_vm->_gameSys->setAnimation(0x24A, 40, 3); -			_vm->_gameSys->insertSequence(0x24A, 40, _nextCarWindowSequenceId, 40, kSeqSyncWait, 0, 0, 0); -			while (_vm->_gameSys->getAnimationStatus(2) != 2) { +			gameSys.setAnimation(0x24A, 40, 3); +			gameSys.insertSequence(0x24A, 40, _nextCarWindowSequenceId, 40, kSeqSyncWait, 0, 0, 0); +			while (gameSys.getAnimationStatus(2) != 2) {  				update(); -				if (_vm->_gameSys->getAnimationStatus(3) == 2) { -					_vm->_gameSys->setAnimation(0x24A, 40, 3); -					_vm->_gameSys->insertSequence(0x24A, 40, 586, 40, kSeqSyncWait, 0, 0, 0); +				if (gameSys.getAnimationStatus(3) == 2) { +					gameSys.setAnimation(0x24A, 40, 3); +					gameSys.insertSequence(0x24A, 40, 586, 40, kSeqSyncWait, 0, 0, 0);  				}  			} -			_vm->_gameSys->insertSequence(0x22D, 40, 560, 40, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->setAnimation(0x24B, 40, 3); -			_vm->_gameSys->insertSequence(0x24B, 40, 586, 40, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x22D, 40, 560, 40, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(0x24B, 40, 3); +			gameSys.insertSequence(0x24B, 40, 586, 40, kSeqSyncWait, 0, 0, 0);  			_currCarWindowSequenceId = 0x24B;  			_nextCarWindowSequenceId = -1;  			_currWrenchSequenceId = 0x22D; @@ -3131,6 +3166,8 @@ void Scene18::gnapCarryGarbageCanTo(int x, int y, int animationIndex, int argC,  		0x203, 0x204  	}; +	GameSys& gameSys = *_vm->_gameSys; +  	int gnapSeqId, gnapId, gnapDatNum, gnapGridX;  	int clippedX, v12, v5, v10, v11, direction; @@ -3186,7 +3223,7 @@ void Scene18::gnapCarryGarbageCanTo(int x, int y, int animationIndex, int argC,  			if (_vm->isPointBlocked(gnapGridX + direction, _vm->_gnapY))  				break;  			a2 += direction; -			_vm->_gameSys->insertSequence(kSequenceIds[seqId], a2, +			gameSys.insertSequence(kSequenceIds[seqId], a2,  				gnapSeqId | (gnapDatNum << 16), gnapId,  				kSeqSyncWait, 0, 75 * gnapGridX - _vm->_gnapGridX, 48 * _vm->_gnapY - _vm->_gnapGridY);  			gnapSeqId = kSequenceIds[seqId]; @@ -3215,9 +3252,9 @@ void Scene18::gnapCarryGarbageCanTo(int x, int y, int animationIndex, int argC,  	_vm->_gnapId = 20 * _vm->_gnapY + 1;  	if (animationIndex >= 0) -		_vm->_gameSys->setAnimation(makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, animationIndex); +		gameSys.setAnimation(makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, animationIndex); -	_vm->_gameSys->insertSequence(makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, +	gameSys.insertSequence(makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId,  		gnapSeqId | (gnapDatNum << 16), gnapId,  		kSeqScale | kSeqSyncWait, 0, 75 * gnapGridX - _vm->_gnapGridX, 48 * _vm->_gnapY - _vm->_gnapGridY); @@ -3226,8 +3263,10 @@ void Scene18::gnapCarryGarbageCanTo(int x, int y, int animationIndex, int argC,  }  void Scene18::putDownGarbageCan(int animationIndex) { +	GameSys& gameSys = *_vm->_gameSys; +  	if (animationIndex >= 0) { -		while (_vm->_gameSys->getAnimationStatus(animationIndex) != 2) +		while (gameSys.getAnimationStatus(animationIndex) != 2)  			_vm->gameUpdateTick();  	}  	if (_vm->_gnapIdleFacing != kDirNone && _vm->_gnapIdleFacing != kDirBottomRight && _vm->_gnapIdleFacing != kDirUpRight) @@ -3237,37 +3276,39 @@ void Scene18::putDownGarbageCan(int animationIndex) {  	_vm->clearFlag(kGFPlatyPussDisguised);  	updateHotspots();  	if (_vm->_gnapIdleFacing != kDirNone && _vm->_gnapIdleFacing != kDirBottomRight && _vm->_gnapIdleFacing != kDirUpRight) { -		_vm->_gameSys->insertSequence(0x107BA, _vm->_gnapId, +		gameSys.insertSequence(0x107BA, _vm->_gnapId,  			makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId,  			kSeqSyncWait, 0, 75 * _vm->_gnapX - _vm->_gnapGridX, 48 * _vm->_gnapY - _vm->_gnapGridY);  		_vm->_gnapSequenceId = 0x7BA;  	} else { -		_vm->_gameSys->insertSequence(0x107B9, _vm->_gnapId, +		gameSys.insertSequence(0x107B9, _vm->_gnapId,  			makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId,  			kSeqSyncWait, 0, 75 * _vm->_gnapX - _vm->_gnapGridX, 48 * _vm->_gnapY - _vm->_gnapGridY);  		_vm->_gnapSequenceId = 0x7B9;  	}  	_vm->_gnapSequenceDatNum = 1; -	_vm->_gameSys->insertSequence(0x1FB, 19, 0, 0, kSeqNone, 0, 15 * (5 * _vm->_s18GarbageCanPos - 40), 0); -	_vm->_gameSys->setAnimation(0x1FA, 19, 4); -	_vm->_gameSys->insertSequence(0x1FA, 19, 507, 19, kSeqSyncWait, 0, 15 * (5 * _vm->_s18GarbageCanPos - 40), 0); -	while (_vm->_gameSys->getAnimationStatus(4) != 2) +	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); +	while (gameSys.getAnimationStatus(4) != 2)  		_vm->gameUpdateTick();  }  void Scene18::platEndPhoning(bool platFl) { +	GameSys& gameSys = *_vm->_gameSys; +  	if (_vm->isFlag(kGFPlatypusTalkingToAssistant)) {  		_platPhoneIter = 0;  		_platPhoneCtr = 0;  		_vm->_platypusActionStatus = -1;  		if (_currPhoneSequenceId != -1) { -			_vm->_gameSys->setAnimation(0x21E, 254, 3); -			_vm->_gameSys->insertSequence(0x21E, 254, _currPhoneSequenceId, 254, kSeqSyncExists, 0, 0, 0); -			while (_vm->_gameSys->getAnimationStatus(3) != 2) +			gameSys.setAnimation(0x21E, 254, 3); +			gameSys.insertSequence(0x21E, 254, _currPhoneSequenceId, 254, kSeqSyncExists, 0, 0, 0); +			while (gameSys.getAnimationStatus(3) != 2)  				_vm->gameUpdateTick();  		} -		_vm->_gameSys->removeSequence(0x21F, 254, true); -		_vm->_gameSys->setAnimation(0, 0, 3); +		gameSys.removeSequence(0x21F, 254, true); +		gameSys.setAnimation(0, 0, 3);  		_vm->clearFlag(kGFPlatypusTalkingToAssistant);  		if (platFl) {  			_vm->_platypusActionStatus = kAS18PlatComesHere; @@ -3307,37 +3348,36 @@ void Scene18::waitForGnapAction() {  }  void Scene18::run() { +	GameSys& gameSys = *_vm->_gameSys; +  	_cowboyHatSurface = nullptr;  	_vm->playSound(0x10940, true);  	_vm->startSoundTimerA(4); -  	_vm->_timers[5] = _vm->getRandom(100) + 100; -  	_vm->queueInsertDeviceIcon(); -  	_vm->clearFlag(kGFPlatyPussDisguised);  	if (!_vm->isFlag(kGFUnk14)) -		_vm->_gameSys->insertSequence(0x1F8, 19, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.insertSequence(0x1F8, 19, 0, 0, kSeqNone, 0, 0, 0);  	if (_vm->isFlag(kGFTruckKeysUsed)) {  		if (_vm->isFlag(kGFTruckFilledWithGas)) { -			_vm->_gameSys->insertSequence(0x214, 39, 0, 0, kSeqLoop, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x20D, 39, 0, 0, kSeqLoop, 0, 0, 0); +			gameSys.insertSequence(0x214, 39, 0, 0, kSeqLoop, 0, 0, 0); +			gameSys.insertSequence(0x20D, 39, 0, 0, kSeqLoop, 0, 0, 0);  			_vm->playSound(0x22B, true);  		} else { -			_vm->_gameSys->insertSequence(0x1F9, 19, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0x1F9, 19, 0, 0, kSeqNone, 0, 0, 0);  		}  	} else { -		_vm->_gameSys->insertSequence(0x1FA, 19, 0, 0, kSeqNone, 0, 15 * (5 * _vm->_s18GarbageCanPos - 40), 0); +		gameSys.insertSequence(0x1FA, 19, 0, 0, kSeqNone, 0, 15 * (5 * _vm->_s18GarbageCanPos - 40), 0);  		if (_vm->isFlag(kGFTruckFilledWithGas)) { -			_vm->_gameSys->insertSequence(0x212, 39, 0, 0, kSeqLoop, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x20D, 39, 0, 0, kSeqLoop, 0, 0, 0); +			gameSys.insertSequence(0x212, 39, 0, 0, kSeqLoop, 0, 0, 0); +			gameSys.insertSequence(0x20D, 39, 0, 0, kSeqLoop, 0, 0, 0);  			_vm->playSound(0x22B, true);  		} else if (_vm->isFlag(kGFBarnPadlockOpen)) { -			_vm->_gameSys->insertSequence(0x20E, 39, 0, 0, kSeqLoop, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x217, 39, 0, 0, kSeqLoop, 0, 0, 0); +			gameSys.insertSequence(0x20E, 39, 0, 0, kSeqLoop, 0, 0, 0); +			gameSys.insertSequence(0x217, 39, 0, 0, kSeqLoop, 0, 0, 0);  			_vm->playSound(0x22B, true);  		}  	} @@ -3349,7 +3389,7 @@ void Scene18::run() {  			_vm->initGnapPos(4, 7, kDirBottomRight);  		_platPhoneCtr = _vm->getRandom(5);  		if (_vm->isFlag(kGFUnk27)) { -			_vm->_gameSys->insertSequence(0x21E, 254, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0x21E, 254, 0, 0, kSeqNone, 0, 0, 0);  			_vm->endSceneInit();  			_currPhoneSequenceId = -1;  			platEndPhoning(true); @@ -3357,15 +3397,15 @@ void Scene18::run() {  		} else {  			_currPhoneSequenceId = kScene18SequenceIds[_platPhoneCtr];  			_platPhoneIter = 0; -			_vm->_gameSys->insertSequence(0x21F, 254, 0, 0, kSeqNone, 0, 0, 0); -			_vm->_gameSys->insertSequence(_currPhoneSequenceId, 254, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0x21F, 254, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(_currPhoneSequenceId, 254, 0, 0, kSeqNone, 0, 0, 0);  			_vm->endSceneInit();  		}  		if (_vm->isFlag(kGFUnk27)) {  			platEndPhoning(true);  			_vm->clearFlag(kGFUnk27);  		} else { -			_vm->_gameSys->setAnimation(_currPhoneSequenceId, 254, 3); +			gameSys.setAnimation(_currPhoneSequenceId, 254, 3);  		}  		_vm->gnapWalkTo(4, 8, -1, 0x107B9, 1);  	} else { @@ -3741,9 +3781,9 @@ void Scene18::run() {  					_vm->_timers[5] = _vm->getRandom(100) + 100;  					if (_vm->_gnapActionStatus < 0) {  						if (_vm->getRandom(2) == 1) -							_vm->_gameSys->insertSequence(0x220, 255, 0, 0, kSeqNone, 0, 0, 0); +							gameSys.insertSequence(0x220, 255, 0, 0, kSeqNone, 0, 0, 0);  						else -							_vm->_gameSys->insertSequence(0x221, 255, 0, 0, kSeqNone, 0, 0, 0); +							gameSys.insertSequence(0x221, 255, 0, 0, kSeqNone, 0, 0, 0);  					}  				}  				_vm->playSoundA(); @@ -3768,31 +3808,33 @@ void Scene18::run() {  }  void Scene18::updateAnimations() { -	if (_vm->_gameSys->getAnimationStatus(0) == 2) { -		_vm->_gameSys->setAnimation(0, 0, 0); +	GameSys& gameSys = *_vm->_gameSys; + +	if (gameSys.getAnimationStatus(0) == 2) { +		gameSys.setAnimation(0, 0, 0);  		switch (_vm->_gnapActionStatus) {  		case kAS18GrabGarbageCanFromStreet:  			if (_vm->_gnapIdleFacing != kDirUpRight && _vm->_gnapIdleFacing != kDirBottomRight) { -				_vm->_gameSys->insertSequence(0x1FC, _vm->_gnapId, +				gameSys.insertSequence(0x1FC, _vm->_gnapId,  					makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId,  					kSeqSyncWait, 0, 75 * _vm->_gnapX - 675, 0);  				_vm->_gnapSequenceDatNum = 0;  				_vm->_gnapSequenceId = 0x1FC;  			} else { -				_vm->_gameSys->insertSequence(0x1FD, _vm->_gnapId, +				gameSys.insertSequence(0x1FD, _vm->_gnapId,  					makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId,  					kSeqSyncWait, 0, 75 * _vm->_gnapX - 525, 0);  				_vm->_gnapSequenceDatNum = 0;  				_vm->_gnapSequenceId = 0x1FD;  			} -			_vm->_gameSys->removeSequence(0x1FA, 19, true); +			gameSys.removeSequence(0x1FA, 19, true);  			_vm->setFlag(kGFPlatyPussDisguised);  			updateHotspots();  			_vm->_gnapActionStatus = -1;  			break;  		case kAS18GrabGarbageCanFromHydrant: -			_vm->_gameSys->insertSequence(0x1FE, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->removeSequence(0x1F9, 19, true); +			gameSys.insertSequence(0x1FE, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.removeSequence(0x1F9, 19, true);  			_vm->_gnapSequenceDatNum = 0;  			_vm->_gnapSequenceId = 0x1FE;  			_vm->clearFlag(kGFTruckKeysUsed); @@ -3801,10 +3843,10 @@ void Scene18::updateAnimations() {  			_vm->_gnapActionStatus = -1;  			break;  		case kAS18CloseRightValveNoGarbageCan: -			_vm->_gameSys->insertSequence(0x205, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->removeSequence(0x20D, 39, true); -			_vm->_gameSys->removeSequence(0x212, 39, true); -			_vm->_gameSys->removeSequence(0x211, 39, true); +			gameSys.insertSequence(0x205, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.removeSequence(0x20D, 39, true); +			gameSys.removeSequence(0x212, 39, true); +			gameSys.removeSequence(0x211, 39, true);  			_vm->stopSound(0x22B);  			_vm->_gnapSequenceDatNum = 0;  			_vm->_gnapSequenceId = 0x205; @@ -3819,7 +3861,7 @@ void Scene18::updateAnimations() {  			updateHotspots();  			_vm->playGnapPullOutDevice(2, 7);  			_vm->playGnapUseDevice(0, 0); -			_vm->_gameSys->insertSequence(0x20C, 19, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0x20C, 19, 0, 0, kSeqNone, 0, 0, 0);  			_vm->_hotspots[kHS18WalkArea2]._flags |= SF_WALKABLE;  			_vm->gnapWalkTo(_vm->_hotspotsWalkPos[kHS18HydrantTopValve].x, _vm->_hotspotsWalkPos[kHS18HydrantTopValve].y, 0, 0x107BB, 1);  			_vm->_hotspots[kHS18WalkArea2]._flags &= ~SF_WALKABLE; @@ -3827,15 +3869,15 @@ void Scene18::updateAnimations() {  			break;  		case kAS18OpenTopValveDone:  			_vm->setGrabCursorSprite(-1); -			_vm->_gameSys->insertSequence(0x208, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x216, 39, 0, 0, kSeqNone, 21, 0, 0); -			_vm->_gameSys->removeSequence(0x20C, 19, true); -			_vm->_gameSys->setAnimation(0x217, 39, 5); -			_vm->_gameSys->insertSequence(0x217, 39, 0x216, 39, kSeqLoop | kSeqSyncWait, 0, 0, 0); -			while (_vm->_gameSys->getAnimationStatus(5) != 2) +			gameSys.insertSequence(0x208, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x216, 39, 0, 0, kSeqNone, 21, 0, 0); +			gameSys.removeSequence(0x20C, 19, true); +			gameSys.setAnimation(0x217, 39, 5); +			gameSys.insertSequence(0x217, 39, 0x216, 39, kSeqLoop | kSeqSyncWait, 0, 0, 0); +			while (gameSys.getAnimationStatus(5) != 2)  				_vm->gameUpdateTick();  			_vm->playSound(0x22B, true); -			_vm->_gameSys->insertSequence(0x20E, 39, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0x20E, 39, 0, 0, kSeqNone, 0, 0, 0);  			_vm->_gnapSequenceDatNum = 0;  			_vm->_gnapSequenceId = 0x208;  			_vm->invRemove(kItemWrench); @@ -3843,10 +3885,10 @@ void Scene18::updateAnimations() {  			_vm->_gnapActionStatus = -1;  			break;  		case kAS18CloseTopValve: -			_vm->_gameSys->insertSequence(0x206, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->removeSequence(0x20E, 39, true); -			_vm->_gameSys->removeSequence(0x216, 39, true); -			_vm->_gameSys->removeSequence(0x217, 39, true); +			gameSys.insertSequence(0x206, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.removeSequence(0x20E, 39, true); +			gameSys.removeSequence(0x216, 39, true); +			gameSys.removeSequence(0x217, 39, true);  			_vm->stopSound(0x22B);  			_vm->_gnapSequenceDatNum = 0;  			_vm->_gnapSequenceId = 0x206; @@ -3857,8 +3899,8 @@ void Scene18::updateAnimations() {  			_vm->_gnapActionStatus = -1;  			break;  		case kAS18GrabCowboyHat: -			_vm->_gameSys->setAnimation(0x200, _vm->_gnapId, 0); -			_vm->_gameSys->insertSequence(0x200, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(0x200, _vm->_gnapId, 0); +			gameSys.insertSequence(0x200, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0);  			_vm->_gnapSequenceDatNum = 0;  			_vm->_gnapSequenceId = 0x200;  			_vm->_gnapActionStatus = kAS18GrabCowboyHatDone; @@ -3867,9 +3909,9 @@ void Scene18::updateAnimations() {  			_vm->hideCursor();  			_vm->setGrabCursorSprite(-1);  			_cowboyHatSurface = _vm->addFullScreenSprite(0x1D2, 255); -			_vm->_gameSys->setAnimation(0x218, 256, 0); -			_vm->_gameSys->insertSequence(0x218, 256, 0, 0, kSeqNone, 0, 0, 0); -			while (_vm->_gameSys->getAnimationStatus(0) != 2) +			gameSys.setAnimation(0x218, 256, 0); +			gameSys.insertSequence(0x218, 256, 0, 0, kSeqNone, 0, 0, 0); +			while (gameSys.getAnimationStatus(0) != 2)  				_vm->gameUpdateTick();  			_vm->_newSceneNum = 18;  			_vm->invAdd(kItemCowboyHat); @@ -3889,27 +3931,27 @@ void Scene18::updateAnimations() {  		case kAS18PutGarbageCanOnRunningHydrant:  			_vm->setFlag(kGFTruckKeysUsed);  			_vm->clearFlag(kGFPlatyPussDisguised); -			_vm->_gameSys->requestRemoveSequence(0x211, 39); -			_vm->_gameSys->requestRemoveSequence(0x212, 39); -			_vm->_gameSys->insertSequence(0x210, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.requestRemoveSequence(0x211, 39); +			gameSys.requestRemoveSequence(0x212, 39); +			gameSys.insertSequence(0x210, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0);  			_vm->stopSound(0x22B); -			_vm->_gameSys->setAnimation(0x210, _vm->_gnapId, 0); +			gameSys.setAnimation(0x210, _vm->_gnapId, 0);  			_vm->_gnapSequenceDatNum = 0;  			_vm->_gnapSequenceId = 0x210;  			_vm->_gnapActionStatus = kAS18PutGarbageCanOnRunningHydrant2;  			break;  		case kAS18PutGarbageCanOnRunningHydrant2:  			_vm->playSound(0x22B, true); -			_vm->_gameSys->setAnimation(0x1FF, _vm->_gnapId, 0); -			_vm->_gameSys->insertSequence(0x1FF, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(0x1FF, _vm->_gnapId, 0); +			gameSys.insertSequence(0x1FF, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0);  			_vm->_gnapSequenceDatNum = 0;  			_vm->_gnapSequenceId = 0x1FF;  			_vm->_sceneWaiting = true;  			_vm->_gnapActionStatus = kAS18StandingOnHydrant;  			break;  		case kAS18StandingOnHydrant: -			_vm->_gameSys->setAnimation(0x1FF, _vm->_gnapId, 0); -			_vm->_gameSys->insertSequence(0x1FF, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(0x1FF, _vm->_gnapId, 0); +			gameSys.insertSequence(0x1FF, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0);  			break;  		case kAS18OpenRightValveNoGarbageCan:  		case kAS18OpenRightValveWithGarbageCan: @@ -3917,7 +3959,7 @@ void Scene18::updateAnimations() {  			updateHotspots();  			_vm->playGnapPullOutDevice(2, 7);  			_vm->playGnapUseDevice(0, 0); -			_vm->_gameSys->insertSequence(0x20B, 19, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0x20B, 19, 0, 0, kSeqNone, 0, 0, 0);  			_vm->_hotspots[kHS18WalkArea2]._flags |= SF_WALKABLE;  			_vm->gnapWalkTo(_vm->_hotspotsWalkPos[kHS18HydrantRightValve].x, _vm->_hotspotsWalkPos[kHS18HydrantRightValve].y, 0, 0x107BA, 1);  			_vm->_hotspots[kHS18WalkArea2]._flags &= ~SF_WALKABLE; @@ -3928,16 +3970,16 @@ void Scene18::updateAnimations() {  			break;  		case kAS18OpenRightValveWithGarbageCanDone:  			_vm->setGrabCursorSprite(-1); -			_vm->_gameSys->insertSequence(0x207, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x213, 39, 0, 0, kSeqNone, 21, 0, 0); -			_vm->_gameSys->requestRemoveSequence(0x1F9, 19); -			_vm->_gameSys->removeSequence(0x20B, 19, true); -			_vm->_gameSys->setAnimation(0x213, 39, 5); -			_vm->_gameSys->insertSequence(0x214, 39, 0x213, 39, kSeqLoop | kSeqSyncWait, 0, 0, 0); -			while (_vm->_gameSys->getAnimationStatus(5) != 2) +			gameSys.insertSequence(0x207, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x213, 39, 0, 0, kSeqNone, 21, 0, 0); +			gameSys.requestRemoveSequence(0x1F9, 19); +			gameSys.removeSequence(0x20B, 19, true); +			gameSys.setAnimation(0x213, 39, 5); +			gameSys.insertSequence(0x214, 39, 0x213, 39, kSeqLoop | kSeqSyncWait, 0, 0, 0); +			while (gameSys.getAnimationStatus(5) != 2)  				_vm->gameUpdateTick();  			_vm->playSound(555, true); -			_vm->_gameSys->insertSequence(0x20D, 39, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0x20D, 39, 0, 0, kSeqNone, 0, 0, 0);  			_vm->_gnapSequenceDatNum = 0;  			_vm->_gnapSequenceId = 0x207;  			_vm->invRemove(kItemWrench); @@ -3945,31 +3987,31 @@ void Scene18::updateAnimations() {  			break;  		case kAS18OpenRightValveNoGarbageCanDone:  			_vm->setGrabCursorSprite(-1); -			_vm->_gameSys->insertSequence(0x207, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x211, 39, 0, 0, kSeqNone, 21, 0, 0); -			_vm->_gameSys->removeSequence(0x20B, 19, true); -			_vm->_gameSys->setAnimation(0x211, 39, 5); -			_vm->_gameSys->insertSequence(0x212, 39, 0x211, 39, kSeqLoop | kSeqSyncWait, 0, 0, 0); -			while (_vm->_gameSys->getAnimationStatus(5) != 2) +			gameSys.insertSequence(0x207, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x211, 39, 0, 0, kSeqNone, 21, 0, 0); +			gameSys.removeSequence(0x20B, 19, true); +			gameSys.setAnimation(0x211, 39, 5); +			gameSys.insertSequence(0x212, 39, 0x211, 39, kSeqLoop | kSeqSyncWait, 0, 0, 0); +			while (gameSys.getAnimationStatus(5) != 2)  				_vm->gameUpdateTick();  			_vm->playSound(0x22B, true); -			_vm->_gameSys->insertSequence(0x20D, 39, 0, 0, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0x20D, 39, 0, 0, kSeqNone, 0, 0, 0);  			_vm->_gnapSequenceDatNum = 0;  			_vm->_gnapSequenceId = 0x207;  			_vm->invRemove(kItemWrench);  			_vm->_gnapActionStatus = -1;  			break;  		case kAS18CloseRightValveWithGarbageCan: -			_vm->_gameSys->insertSequence(0x205, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->removeSequence(0x20D, 39, true); -			_vm->_gameSys->insertSequence(0x215, 39, 0x214, 39, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x205, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.removeSequence(0x20D, 39, true); +			gameSys.insertSequence(0x215, 39, 0x214, 39, kSeqSyncWait, 0, 0, 0);  			_vm->stopSound(0x22B); -			_vm->_gameSys->setAnimation(0x1F9, 19, 0); -			_vm->_gameSys->insertSequence(0x1F9, 19, 0x215, 39, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(0x1F9, 19, 0); +			gameSys.insertSequence(0x1F9, 19, 0x215, 39, kSeqSyncWait, 0, 0, 0);  			_vm->clearFlag(kGFTruckFilledWithGas);  			_vm->invAdd(kItemWrench);  			_vm->setGrabCursorSprite(kItemWrench); -			_vm->_gameSys->insertSequence(0x107B5, _vm->_gnapId, 517, _vm->_gnapId, kSeqSyncWait, 0, 75 * _vm->_gnapX - _vm->_gnapGridX, 48 * _vm->_gnapY - _vm->_gnapGridY); +			gameSys.insertSequence(0x107B5, _vm->_gnapId, 517, _vm->_gnapId, kSeqSyncWait, 0, 75 * _vm->_gnapX - _vm->_gnapGridX, 48 * _vm->_gnapY - _vm->_gnapGridY);  			updateHotspots();  			_vm->_gnapSequenceDatNum = 1;  			_vm->_gnapSequenceId = 0x7B5; @@ -3981,29 +4023,29 @@ void Scene18::updateAnimations() {  		case kAS18PutGarbageCanOnHydrant:  			_vm->setFlag(kGFTruckKeysUsed);  			_vm->clearFlag(kGFPlatyPussDisguised); -			_vm->_gameSys->insertSequence(0x20F, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->setAnimation(0x20F, _vm->_gnapId, 0); +			gameSys.insertSequence(0x20F, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(0x20F, _vm->_gnapId, 0);  			_vm->_gnapSequenceDatNum = 0;  			_vm->_gnapSequenceId = 0x20F;  			_vm->_gnapActionStatus = kAS18PutGarbageCanOnHydrantDone;  			break;  		case kAS18PutGarbageCanOnHydrantDone: -			_vm->_gameSys->insertSequence(0x1F9, 19, 0x20F, _vm->_gnapId, kSeqNone, 0, 0, 0); +			gameSys.insertSequence(0x1F9, 19, 0x20F, _vm->_gnapId, kSeqNone, 0, 0, 0);  			updateHotspots();  			_vm->_gnapActionStatus = -1;  			break;  		}  	} -	if (_vm->_gameSys->getAnimationStatus(3) == 2) { -		_vm->_gameSys->setAnimation(0, 0, 3); +	if (gameSys.getAnimationStatus(3) == 2) { +		gameSys.setAnimation(0, 0, 3);  		++_platPhoneIter;  		if (_platPhoneIter <= 4) {  			++_platPhoneCtr;  			_nextPhoneSequenceId = kScene18SequenceIds[_platPhoneCtr % 5]; -			_vm->_gameSys->setAnimation(_nextPhoneSequenceId, 254, 3); -			_vm->_gameSys->insertSequence(_nextPhoneSequenceId, 254, _currPhoneSequenceId, 254, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x21F, 254, 0x21F, 254, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(_nextPhoneSequenceId, 254, 3); +			gameSys.insertSequence(_nextPhoneSequenceId, 254, _currPhoneSequenceId, 254, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x21F, 254, 0x21F, 254, kSeqSyncWait, 0, 0, 0);  			_currPhoneSequenceId = _nextPhoneSequenceId;  		} else {  			platEndPhoning(true); @@ -4067,24 +4109,25 @@ void Scene19::updateHotspots() {  }  void Scene19::run() { -	_vm->queueInsertDeviceIcon(); +	GameSys& gameSys = *_vm->_gameSys; +	_vm->queueInsertDeviceIcon();  	_toyGrabCtr = 0; -	_pictureSurface = 0; +	_pictureSurface = nullptr; -	_vm->_gameSys->insertSequence(0x74, 254, 0, 0, kSeqNone, 0, 0, 0); -	_vm->_gameSys->insertSequence(0x75, 254, 0, 0, kSeqNone, 0, 0, 0); +	gameSys.insertSequence(0x74, 254, 0, 0, kSeqNone, 0, 0, 0); +	gameSys.insertSequence(0x75, 254, 0, 0, kSeqNone, 0, 0, 0);  	if (!_vm->isFlag(kGFPictureTaken)) -		_vm->_gameSys->insertSequence(0x69, 19, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.insertSequence(0x69, 19, 0, 0, kSeqNone, 0, 0, 0);  	if (_vm->isFlag(kGFPlatypusTalkingToAssistant)) {  		_vm->initGnapPos(3, 6, kDirBottomRight);  		_currShopAssistantSequenceId = kS19ShopAssistantSequenceIds[_vm->getRandom(5)];  		_nextShopAssistantSequenceId = _currShopAssistantSequenceId; -		_vm->_gameSys->setAnimation(_currShopAssistantSequenceId, 20, 4); -		_vm->_gameSys->insertSequence(0x6E, 254, 0, 0, kSeqNone, 0, 0, 0); -		_vm->_gameSys->insertSequence(_currShopAssistantSequenceId, 20, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.setAnimation(_currShopAssistantSequenceId, 20, 4); +		gameSys.insertSequence(0x6E, 254, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.insertSequence(_currShopAssistantSequenceId, 20, 0, 0, kSeqNone, 0, 0, 0);  		_shopAssistantCtr = 0;  		_vm->endSceneInit();  		_vm->gnapWalkTo(4, 9, -1, 0x107B9, 1); @@ -4092,8 +4135,8 @@ void Scene19::run() {  	} else {  		_currShopAssistantSequenceId = 0x6D;  		_nextShopAssistantSequenceId = -1; -		_vm->_gameSys->setAnimation(0x6D, 20, 4); -		_vm->_gameSys->insertSequence(_currShopAssistantSequenceId, 20, 0, 0, kSeqNone, 0, 0, 0); +		gameSys.setAnimation(0x6D, 20, 4); +		gameSys.insertSequence(_currShopAssistantSequenceId, 20, 0, 0, kSeqNone, 0, 0, 0);  		_vm->_timers[6] = _vm->getRandom(40) + 50;  		_vm->initGnapPos(3, 6, kDirBottomRight);  		_vm->initPlatypusPos(4, 6, kDirNone); @@ -4308,8 +4351,10 @@ void Scene19::run() {  }  void Scene19::updateAnimations() { -	if (_vm->_gameSys->getAnimationStatus(0) == 2) { -		_vm->_gameSys->setAnimation(0, 0, 0); +	GameSys& gameSys = *_vm->_gameSys; + +	if (gameSys.getAnimationStatus(0) == 2) { +		gameSys.setAnimation(0, 0, 0);  		switch (_vm->_gnapActionStatus) {  		case kAS19UsePhone:  			_nextShopAssistantSequenceId = 0x67; @@ -4334,8 +4379,8 @@ void Scene19::updateAnimations() {  		case kAS19GrabPicture:  			_vm->playGnapPullOutDevice(6, 2);  			_vm->playGnapUseDevice(0, 0); -			_vm->_gameSys->setAnimation(0x68, 19, 0); -			_vm->_gameSys->insertSequence(0x68, 19, 105, 19, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(0x68, 19, 0); +			gameSys.insertSequence(0x68, 19, 105, 19, kSeqSyncWait, 0, 0, 0);  			_vm->invAdd(kItemPicture);  			_vm->setFlag(kGFPictureTaken);  			updateHotspots(); @@ -4345,9 +4390,9 @@ void Scene19::updateAnimations() {  			_vm->setGrabCursorSprite(-1);  			_vm->hideCursor();  			_pictureSurface = _vm->addFullScreenSprite(0xF, 255); -			_vm->_gameSys->setAnimation(0x61, 256, 0); -			_vm->_gameSys->insertSequence(0x61, 256, 0, 0, kSeqNone, 0, 0, 0); -			while (_vm->_gameSys->getAnimationStatus(0) != 2) { +			gameSys.setAnimation(0x61, 256, 0); +			gameSys.insertSequence(0x61, 256, 0, 0, kSeqNone, 0, 0, 0); +			while (gameSys.getAnimationStatus(0) != 2) {  				// checkGameAppStatus();  				_vm->gameUpdateTick();  			} @@ -4368,7 +4413,7 @@ void Scene19::updateAnimations() {  		}  	} -	if (_vm->_gameSys->getAnimationStatus(4) == 2) { +	if (gameSys.getAnimationStatus(4) == 2) {  		switch (_nextShopAssistantSequenceId) {  		case 0x6F:  		case 0x70: @@ -4377,16 +4422,16 @@ void Scene19::updateAnimations() {  		case 0x73:  			_shopAssistantCtr = (_shopAssistantCtr + 1) % 5;  			_nextShopAssistantSequenceId = kS19ShopAssistantSequenceIds[_shopAssistantCtr]; -			_vm->_gameSys->setAnimation(_nextShopAssistantSequenceId, 20, 4); -			_vm->_gameSys->insertSequence(_nextShopAssistantSequenceId, 20, _currShopAssistantSequenceId, 20, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x6E, 254, 0x6E, 254, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(_nextShopAssistantSequenceId, 20, 4); +			gameSys.insertSequence(_nextShopAssistantSequenceId, 20, _currShopAssistantSequenceId, 20, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x6E, 254, 0x6E, 254, kSeqSyncWait, 0, 0, 0);  			_currShopAssistantSequenceId = _nextShopAssistantSequenceId;  			break;  		case 0x62:  		case 0x66:  		case 0x6B: -			_vm->_gameSys->setAnimation(_nextShopAssistantSequenceId, 20, 4); -			_vm->_gameSys->insertSequence(_nextShopAssistantSequenceId, 20, _currShopAssistantSequenceId, 20, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(_nextShopAssistantSequenceId, 20, 4); +			gameSys.insertSequence(_nextShopAssistantSequenceId, 20, _currShopAssistantSequenceId, 20, kSeqSyncWait, 0, 0, 0);  			_currShopAssistantSequenceId = _nextShopAssistantSequenceId;  			_nextShopAssistantSequenceId = -1;  			_vm->_timers[5] = 10; @@ -4397,32 +4442,32 @@ void Scene19::updateAnimations() {  			_vm->_gnapActionStatus = -1;  			break;  		case 0x67: -			_vm->_gameSys->setAnimation(_nextShopAssistantSequenceId, 20, 4); -			_vm->_gameSys->insertSequence(_nextShopAssistantSequenceId, 20, _currShopAssistantSequenceId, 20, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(_nextShopAssistantSequenceId, 20, 4); +			gameSys.insertSequence(_nextShopAssistantSequenceId, 20, _currShopAssistantSequenceId, 20, kSeqSyncWait, 0, 0, 0);  			_currShopAssistantSequenceId = _nextShopAssistantSequenceId;  			_nextShopAssistantSequenceId = -1;  			_vm->_gnapActionStatus = -1;  			break;  		case 0x65:  			_vm->playGnapIdle(6, 2); -			_vm->_gameSys->setAnimation(_nextShopAssistantSequenceId, 20, 0); -			_vm->_gameSys->insertSequence(_nextShopAssistantSequenceId, 20, _currShopAssistantSequenceId, 20, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(_nextShopAssistantSequenceId, 20, 0); +			gameSys.insertSequence(_nextShopAssistantSequenceId, 20, _currShopAssistantSequenceId, 20, kSeqSyncWait, 0, 0, 0);  			_currShopAssistantSequenceId = _nextShopAssistantSequenceId;  			_nextShopAssistantSequenceId = -1;  			_vm->_newSceneNum = 18;  			_vm->_gnapActionStatus = kAS19LeaveScene;  			break;  		case 0x6D: -			_vm->_gameSys->setAnimation(_nextShopAssistantSequenceId, 20, 4); -			_vm->_gameSys->insertSequence(_nextShopAssistantSequenceId, 20, _currShopAssistantSequenceId, 20, kSeqSyncWait, 0, 0, 0); -			_vm->_gameSys->insertSequence(0x69, 19, 0x69, 19, kSeqSyncWait, _vm->getSequenceTotalDuration(_nextShopAssistantSequenceId), 0, 0); +			gameSys.setAnimation(_nextShopAssistantSequenceId, 20, 4); +			gameSys.insertSequence(_nextShopAssistantSequenceId, 20, _currShopAssistantSequenceId, 20, kSeqSyncWait, 0, 0, 0); +			gameSys.insertSequence(0x69, 19, 0x69, 19, kSeqSyncWait, _vm->getSequenceTotalDuration(_nextShopAssistantSequenceId), 0, 0);  			_currShopAssistantSequenceId = _nextShopAssistantSequenceId;  			_nextShopAssistantSequenceId = -1;  			break;  		case 0x64:  		case 0x6C: -			_vm->_gameSys->setAnimation(_nextShopAssistantSequenceId, 20, 4); -			_vm->_gameSys->insertSequence(_nextShopAssistantSequenceId, 20, _currShopAssistantSequenceId, 20, kSeqSyncWait, 0, 0, 0); +			gameSys.setAnimation(_nextShopAssistantSequenceId, 20, 4); +			gameSys.insertSequence(_nextShopAssistantSequenceId, 20, _currShopAssistantSequenceId, 20, kSeqSyncWait, 0, 0, 0);  			_currShopAssistantSequenceId = _nextShopAssistantSequenceId;  			_nextShopAssistantSequenceId = -1;  			break; @@ -4430,5 +4475,4 @@ void Scene19::updateAnimations() {  	}  } -  } // End of namespace Gnap  | 
