diff options
| -rw-r--r-- | engines/hopkins/globals.cpp | 5 | ||||
| -rw-r--r-- | engines/hopkins/globals.h | 3 | ||||
| -rw-r--r-- | engines/hopkins/objects.cpp | 79 | ||||
| -rw-r--r-- | engines/hopkins/objects.h | 4 | ||||
| -rw-r--r-- | engines/hopkins/script.cpp | 12 | 
5 files changed, 52 insertions, 51 deletions
| diff --git a/engines/hopkins/globals.cpp b/engines/hopkins/globals.cpp index 9fdba0b050..068c390b03 100644 --- a/engines/hopkins/globals.cpp +++ b/engines/hopkins/globals.cpp @@ -102,9 +102,6 @@ Globals::Globals(HopkinsEngine *vm) {  	_linuxEndDemoFl = false;  	_speed = 1; -	_oldDirection = DIR_NONE; -	_oldDirectionSpriteIdx = 59; -	_lastDirection = DIR_NONE;  	_curObjectFileNum = 0;  	_objectWidth = _objectHeight = 0;  	_catalogPos = 0; @@ -260,7 +257,7 @@ void Globals::loadCharacterData() {  	}  	_vm->_objectsManager->resetOldFrameIndex(); -	_oldDirection = DIR_NONE; +	_vm->_objectsManager->resetOldDirection();  }  void Globals::initAnimBqe() { diff --git a/engines/hopkins/globals.h b/engines/hopkins/globals.h index 3a84ddb244..a35f1a76f3 100644 --- a/engines/hopkins/globals.h +++ b/engines/hopkins/globals.h @@ -238,10 +238,7 @@ public:  	bool _hidingActiveFl;  	int _exitId;  	Directions _oceanDirection; -	Directions _oldDirection; -	int _oldDirectionSpriteIdx;  	int _actionDirection; -	Directions _lastDirection;  	int _hotspotTextColor;  	int _inventory[36];  	int _objectWidth, _objectHeight; diff --git a/engines/hopkins/objects.cpp b/engines/hopkins/objects.cpp index 4b7a66a6d8..b0170b2df3 100644 --- a/engines/hopkins/objects.cpp +++ b/engines/hopkins/objects.cpp @@ -85,6 +85,9 @@ ObjectsManager::ObjectsManager(HopkinsEngine *vm) {  	_curGestureFile = 0;  	_headSprites = NULL;  	_homeRateCounter = 0; +	_lastDirection = DIR_NONE; +	_oldDirection = DIR_NONE; +	_oldDirectionSpriteIdx = 59;  }  ObjectsManager::~ObjectsManager() { @@ -1266,7 +1269,7 @@ void ObjectsManager::GOHOME() {  	int oldPosY = 0;  	int oldFrameIdx = 0;  	_homeRateCounter = 0; -	if (_vm->_globals->_oldDirection == DIR_NONE) { +	if (_oldDirection == DIR_NONE) {  		computeAndSetSpriteSize();  		newPosX = _vm->_linesManager->_route->_x;  		newPosY = _vm->_linesManager->_route->_y; @@ -1274,13 +1277,13 @@ void ObjectsManager::GOHOME() {  		_vm->_linesManager->_route++;  		if (newPosX != -1 || newPosY != -1) { -			_vm->_globals->_oldDirection = newDirection; -			_vm->_globals->_oldDirectionSpriteIdx = newDirection + 59; +			_oldDirection = newDirection; +			_oldDirectionSpriteIdx = newDirection + 59;  			_oldFrameIndex = 0;  			_oldCharacterPosX = newPosX;  			_oldCharacterPosY = newPosY;  		} else { -			setSpriteIndex(0, _vm->_globals->_oldDirection + 59); +			setSpriteIndex(0, _oldDirection + 59);  			_vm->_globals->_actionDirection = DIR_NONE;  			int zoneId;  			if (_vm->_globals->_actionMoveTo) @@ -1292,7 +1295,7 @@ void ObjectsManager::GOHOME() {  			setFlipSprite(0, false);  			_homeRateCounter = 0;  			_vm->_linesManager->_route = (RouteItem *)g_PTRNUL; -			_vm->_globals->_oldDirection = DIR_NONE; +			_oldDirection = DIR_NONE;  			if (zoneId > 0) {  				if (_vm->_linesManager->ZONEP[zoneId]._destX && _vm->_linesManager->ZONEP[zoneId]._destY && _vm->_linesManager->ZONEP[zoneId]._destY != 31) {  					if (_vm->_linesManager->ZONEP[zoneId]._spriteIndex == -1) { @@ -1309,7 +1312,7 @@ void ObjectsManager::GOHOME() {  		_homeRateCounter = 0;  		return;  	} -	if (_vm->_globals->_oldDirection == DIR_RIGHT) { +	if (_oldDirection == DIR_RIGHT) {  		if (_oldFrameIndex < 24 || _oldFrameIndex > 35) {  			oldPosX = _oldCharacterPosX;  			oldPosY = _oldCharacterPosY; @@ -1333,7 +1336,7 @@ void ObjectsManager::GOHOME() {  		}  		_homeRateCounter = 5 / _vm->_globals->_speed;  	} -	if (_vm->_globals->_oldDirection == DIR_LEFT) { +	if (_oldDirection == DIR_LEFT) {  		if (_oldFrameIndex < 24 || _oldFrameIndex > 35) {  			oldPosX = _oldCharacterPosX;  			oldPosY = _oldCharacterPosY; @@ -1356,7 +1359,7 @@ void ObjectsManager::GOHOME() {  		}  		_homeRateCounter = 5 / _vm->_globals->_speed;  	} -	if (_vm->_globals->_oldDirection == DIR_UP) { +	if (_oldDirection == DIR_UP) {  		if (_oldFrameIndex > 11) {  			oldPosX = _oldCharacterPosX;  			oldPosY = _oldCharacterPosY; @@ -1377,7 +1380,7 @@ void ObjectsManager::GOHOME() {  		_homeRateCounter = 4 / _vm->_globals->_speed;  	} -	if (_vm->_globals->_oldDirection == DIR_DOWN) { +	if (_oldDirection == DIR_DOWN) {  		if (_oldFrameIndex < 48 || _oldFrameIndex > 59) {  			oldPosX = _oldCharacterPosX;  			oldPosY = _oldCharacterPosY; @@ -1397,7 +1400,7 @@ void ObjectsManager::GOHOME() {  		}  		_homeRateCounter = 4 / _vm->_globals->_speed;  	} -	if (_vm->_globals->_oldDirection == DIR_UP_RIGHT) { +	if (_oldDirection == DIR_UP_RIGHT) {  		if (_oldFrameIndex < 12 || _oldFrameIndex > 23) {  			oldPosX = _oldCharacterPosX;  			oldPosY = _oldCharacterPosY; @@ -1421,7 +1424,7 @@ void ObjectsManager::GOHOME() {  		}  		_homeRateCounter = 5 / _vm->_globals->_speed;  	} -	if (_vm->_globals->_oldDirection == DIR_UP_LEFT) { +	if (_oldDirection == DIR_UP_LEFT) {  		if (_oldFrameIndex < 12 || _oldFrameIndex > 23) {  			oldPosX = _oldCharacterPosX;  			oldPosY = _oldCharacterPosY; @@ -1444,7 +1447,7 @@ void ObjectsManager::GOHOME() {  		}  		_homeRateCounter = 5 / _vm->_globals->_speed;  	} -	if (_vm->_globals->_oldDirection == DIR_DOWN_RIGHT) { +	if (_oldDirection == DIR_DOWN_RIGHT) {  		if (_oldFrameIndex < 36 || _oldFrameIndex > 47) {  			oldPosX = _oldCharacterPosX;  			oldPosY = _oldCharacterPosY; @@ -1468,7 +1471,7 @@ void ObjectsManager::GOHOME() {  		}  		_homeRateCounter = 5 / _vm->_globals->_speed;  	} -	if (_vm->_globals->_oldDirection == DIR_DOWN_LEFT) { +	if (_oldDirection == DIR_DOWN_LEFT) {  		if (_oldFrameIndex < 36 || _oldFrameIndex > 47) {  			oldPosX = _oldCharacterPosX;  			oldPosY = _oldCharacterPosY; @@ -1505,13 +1508,13 @@ void ObjectsManager::GOHOME() {  				zoneId = _vm->_globals->_saveData->_data[svLastZoneNum];  			else  				zoneId = _zoneNum; -			setSpriteIndex(0, _vm->_globals->_oldDirection + 59); +			setSpriteIndex(0, _oldDirection + 59);  			_vm->_globals->_actionDirection = DIR_NONE;  			_vm->_linesManager->_route = (RouteItem *)g_PTRNUL;  			computeAndSetSpriteSize();  			setFlipSprite(0, false);  			_homeRateCounter = 0; -			_vm->_globals->_oldDirection = DIR_NONE; +			_oldDirection = DIR_NONE;  			_oldCharacterPosX = getSpriteX(0);  			_oldCharacterPosY = getSpriteY(0); @@ -1530,37 +1533,37 @@ void ObjectsManager::GOHOME() {  			_homeRateCounter = 0;  			return;  		} -		if (_vm->_globals->_oldDirection != newDirection) +		if (_oldDirection != newDirection)  			break; -		if ((newDirection == DIR_RIGHT && newPosX >= oldPosX) || (_vm->_globals->_oldDirection == DIR_LEFT && newPosX <= oldPosX) || -		    (_vm->_globals->_oldDirection == DIR_UP && newPosY <= oldPosY) || (_vm->_globals->_oldDirection == DIR_DOWN && newPosY >= oldPosY) || -		    (_vm->_globals->_oldDirection == DIR_UP_RIGHT && newPosX >= oldPosX)  || (_vm->_globals->_oldDirection == DIR_UP_LEFT && newPosX <= oldPosX) || -		    (_vm->_globals->_oldDirection == DIR_DOWN_RIGHT && newPosX >= oldPosX) || (_vm->_globals->_oldDirection == DIR_DOWN_LEFT && newPosX <= oldPosX)) +		if ((newDirection == DIR_RIGHT && newPosX >= oldPosX) || (_oldDirection == DIR_LEFT && newPosX <= oldPosX) || +		    (_oldDirection == DIR_UP && newPosY <= oldPosY) || (_oldDirection == DIR_DOWN && newPosY >= oldPosY) || +		    (_oldDirection == DIR_UP_RIGHT && newPosX >= oldPosX)  || (_oldDirection == DIR_UP_LEFT && newPosX <= oldPosX) || +		    (_oldDirection == DIR_DOWN_RIGHT && newPosX >= oldPosX) || (_oldDirection == DIR_DOWN_LEFT && newPosX <= oldPosX))  			loopCond = true;  	} while (!loopCond);  	if (loopCond) {  		computeAndSetSpriteSize(); -		if ((_vm->_globals->_oldDirection == DIR_DOWN_LEFT) || (_vm->_globals->_oldDirection == DIR_LEFT) || (_vm->_globals->_oldDirection == DIR_UP_LEFT)) +		if ((_oldDirection == DIR_DOWN_LEFT) || (_oldDirection == DIR_LEFT) || (_oldDirection == DIR_UP_LEFT))  			setFlipSprite(0, true); -		if ((_vm->_globals->_oldDirection == DIR_UP) || (_vm->_globals->_oldDirection == DIR_UP_RIGHT) || (_vm->_globals->_oldDirection == DIR_RIGHT) || -		    (_vm->_globals->_oldDirection == DIR_DOWN_RIGHT) || (_vm->_globals->_oldDirection == DIR_DOWN)) +		if ((_oldDirection == DIR_UP) || (_oldDirection == DIR_UP_RIGHT) || (_oldDirection == DIR_RIGHT) || +		    (_oldDirection == DIR_DOWN_RIGHT) || (_oldDirection == DIR_DOWN))  			setFlipSprite(0, false);  		setSpriteX(0, newPosX);  		setSpriteY(0, newPosY);  		setSpriteIndex(0, oldFrameIdx);  	} else { -		if ((_vm->_globals->_oldDirection == DIR_DOWN_LEFT) || (_vm->_globals->_oldDirection == DIR_LEFT) || (_vm->_globals->_oldDirection == DIR_UP_LEFT)) +		if ((_oldDirection == DIR_DOWN_LEFT) || (_oldDirection == DIR_LEFT) || (_oldDirection == DIR_UP_LEFT))  			setFlipSprite(0, true); -		if ((_vm->_globals->_oldDirection == DIR_UP) || (_vm->_globals->_oldDirection == DIR_UP_RIGHT) || (_vm->_globals->_oldDirection == DIR_RIGHT) || -		    (_vm->_globals->_oldDirection == DIR_DOWN_RIGHT) || (_vm->_globals->_oldDirection == DIR_DOWN)) +		if ((_oldDirection == DIR_UP) || (_oldDirection == DIR_UP_RIGHT) || (_oldDirection == DIR_RIGHT) || +		    (_oldDirection == DIR_DOWN_RIGHT) || (_oldDirection == DIR_DOWN))  			setFlipSprite(0, false);  		_homeRateCounter = 0;  	} -	_vm->_globals->_oldDirection = newDirection; -	_vm->_globals->_oldDirectionSpriteIdx = newDirection + 59; +	_oldDirection = newDirection; +	_oldDirectionSpriteIdx = newDirection + 59;  	_oldFrameIndex = oldFrameIdx;  	_oldCharacterPosX = newPosX;  	_oldCharacterPosY = newPosY; @@ -1589,10 +1592,10 @@ void ObjectsManager::GOHOME2() {  		++countColisionPixel;  		if (countColisionPixel >= realSpeed) { -			_vm->_globals->_lastDirection = newDirection; +			_lastDirection = newDirection;  			setSpriteX(0, nexPosX);  			setSpriteY(0, newPosY); -			switch (_vm->_globals->_lastDirection) { +			switch (_lastDirection) {  			case DIR_UP:  				setSpriteIndex(0, 4);  				break; @@ -1613,7 +1616,7 @@ void ObjectsManager::GOHOME2() {  		}  	} -	switch (_vm->_globals->_lastDirection) { +	switch (_lastDirection) {  	case DIR_UP:  		setSpriteIndex(0, 0);  		break; @@ -1887,13 +1890,13 @@ void ObjectsManager::handleLeftButton() {  	if (_forestFl && _zoneNum >= 20 && _zoneNum <= 23) {  		if (getSpriteY(0) > 374 && getSpriteY(0) <= 410) {  			_vm->_linesManager->_route = (RouteItem *)g_PTRNUL; -			setSpriteIndex(0, _vm->_globals->_oldDirectionSpriteIdx); +			setSpriteIndex(0, _oldDirectionSpriteIdx);  			_vm->_globals->_actionDirection = DIR_NONE;  			_vm->_linesManager->_route = (RouteItem *)g_PTRNUL;  			computeAndSetSpriteSize();  			setFlipSprite(0, false);  			_homeRateCounter = 0; -			_vm->_globals->_oldDirection = DIR_NONE; +			_oldDirection = DIR_NONE;  		} else {  			_vm->_linesManager->_route = _vm->_linesManager->PARCOURS2(getSpriteX(0), getSpriteY(0), getSpriteX(0), 390);  			if (_vm->_linesManager->_route != (RouteItem *)g_PTRNUL) @@ -1902,7 +1905,7 @@ void ObjectsManager::handleLeftButton() {  			_oldCharacterPosY = getSpriteY(0);  			_homeRateCounter = 0;  			if (_vm->_linesManager->_route != (RouteItem *)g_PTRNUL || oldRoute == _vm->_linesManager->_route) { -				_vm->_globals->_oldDirection = DIR_NONE; +				_oldDirection = DIR_NONE;  			} else {  				_vm->_linesManager->_route = oldRoute;  			} @@ -1916,7 +1919,7 @@ void ObjectsManager::handleLeftButton() {  			_oldCharacterPosY = getSpriteY(0);  			_homeRateCounter = 0;  			if (_vm->_linesManager->_route != (RouteItem *)g_PTRNUL || oldRoute == _vm->_linesManager->_route) -				_vm->_globals->_oldDirection = DIR_NONE; +				_oldDirection = DIR_NONE;  			else  				_vm->_linesManager->_route = oldRoute;  		} @@ -2071,7 +2074,7 @@ void ObjectsManager::clearScreen() {  	_forceZoneFl = true;  	_changeVerbFl = false;  	_vm->_linesManager->_route = (RouteItem *)g_PTRNUL; -	_vm->_globals->_oldDirection = DIR_NONE; +	_oldDirection = DIR_NONE;  	_vm->_graphicsManager->resetDirtyRects();  } @@ -3696,7 +3699,7 @@ void ObjectsManager::PERSONAGE(const Common::String &backgroundFile, const Commo  		stopBobAnimation(3);  		_vm->_globals->_checkDistanceFl = true;  		_oldCharacterPosX = getSpriteX(0); -		_vm->_globals->_oldDirection = DIR_NONE; +		_oldDirection = DIR_NONE;  		_homeRateCounter = 0;  		_vm->_linesManager->_route = (RouteItem *)g_PTRNUL;  		_vm->_linesManager->_route = _vm->_linesManager->PARCOURS2(getSpriteX(0), getSpriteY(0), 330, 345); @@ -3812,7 +3815,7 @@ void ObjectsManager::PERSONAGE2(const Common::String &backgroundFile, const Comm  	_vm->_eventsManager->_mouseSpriteId = 4;  	_oldCharacterPosX = _characterPos.x;  	_oldCharacterPosY = _characterPos.y; -	_vm->_globals->_oldDirection = DIR_NONE; +	_oldDirection = DIR_NONE;  	_homeRateCounter = 0;  	for (int idx = 0; idx < 5; ++idx) diff --git a/engines/hopkins/objects.h b/engines/hopkins/objects.h index 34764f501f..b194749794 100644 --- a/engines/hopkins/objects.h +++ b/engines/hopkins/objects.h @@ -93,6 +93,9 @@ private:  	int _verb;  	int _oldSpriteIndex;  	int _oldFrameIndex; +	int _oldDirectionSpriteIdx; +	Directions _oldDirection; +	Directions _lastDirection;  	bool _oldFlipFl;  	int _curGestureFile;  	byte *_gestureBuf; @@ -244,6 +247,7 @@ public:  	void PARADISE();  	void resetOldFrameIndex() { _oldFrameIndex = -1; } +	void resetOldDirection()  { _oldDirection = DIR_NONE; }  };  } // End of namespace Hopkins diff --git a/engines/hopkins/script.cpp b/engines/hopkins/script.cpp index 3731ad6e46..50a0a90d5c 100644 --- a/engines/hopkins/script.cpp +++ b/engines/hopkins/script.cpp @@ -984,7 +984,7 @@ int ScriptManager::handleOpcode(byte *dataP) {  		case 59: {  			_vm->_globals->_checkDistanceFl = true;  			_vm->_objectsManager->_oldCharacterPosX = _vm->_objectsManager->getSpriteX(0); -			_vm->_globals->_oldDirection = DIR_NONE; +			_vm->_objectsManager->resetOldDirection();  			_vm->_objectsManager->resetHomeRateCounter();  			_vm->_linesManager->_route = (RouteItem *)g_PTRNUL;  			_vm->_linesManager->_route = _vm->_linesManager->PARCOURS2(_vm->_objectsManager->getSpriteX(0), _vm->_objectsManager->getSpriteY(0), 445, 332); @@ -1102,7 +1102,7 @@ int ScriptManager::handleOpcode(byte *dataP) {  		case 81: {  			_vm->_globals->_checkDistanceFl = true;  			_vm->_objectsManager->_oldCharacterPosX = _vm->_objectsManager->getSpriteX(0); -			_vm->_globals->_oldDirection = DIR_NONE; +			_vm->_objectsManager->resetOldDirection();  			_vm->_objectsManager->resetHomeRateCounter();  			_vm->_linesManager->_route = (RouteItem *)g_PTRNUL;  			_vm->_linesManager->_route = _vm->_linesManager->PARCOURS2(_vm->_objectsManager->getSpriteX(0), _vm->_objectsManager->getSpriteY(0), 119, 268); @@ -1419,7 +1419,7 @@ int ScriptManager::handleOpcode(byte *dataP) {  		case 105:  			_vm->_globals->_checkDistanceFl = true;  			_vm->_objectsManager->_oldCharacterPosX = _vm->_objectsManager->getSpriteX(0); -			_vm->_globals->_oldDirection = DIR_NONE; +			_vm->_objectsManager->resetOldDirection();  			_vm->_objectsManager->resetHomeRateCounter();  			_vm->_linesManager->_route = (RouteItem *)g_PTRNUL;  			switch (_vm->_globals->_saveData->_data[svField253]) { @@ -1666,7 +1666,7 @@ int ScriptManager::handleOpcode(byte *dataP) {  			_vm->_globals->_introSpeechOffFl = false;  			_vm->_globals->_checkDistanceFl = true;  			_vm->_objectsManager->_oldCharacterPosX = _vm->_objectsManager->getSpriteX(0); -			_vm->_globals->_oldDirection = DIR_NONE; +			_vm->_objectsManager->resetOldDirection();  			_vm->_objectsManager->resetHomeRateCounter();  			_vm->_globals->_checkDistanceFl = true;  			_vm->_linesManager->_route = (RouteItem *)g_PTRNUL; @@ -1694,7 +1694,7 @@ int ScriptManager::handleOpcode(byte *dataP) {  			_vm->_globals->_introSpeechOffFl = false;  			_vm->_globals->_checkDistanceFl = true;  			_vm->_objectsManager->_oldCharacterPosX = _vm->_objectsManager->getSpriteX(0); -			_vm->_globals->_oldDirection = DIR_NONE; +			_vm->_objectsManager->resetOldDirection();  			_vm->_objectsManager->resetHomeRateCounter();  			_vm->_globals->_checkDistanceFl = true;  			_vm->_linesManager->_route = (RouteItem *)g_PTRNUL; @@ -2006,7 +2006,7 @@ int ScriptManager::handleOpcode(byte *dataP) {  			_vm->_globals->enableHiding();  			_vm->_globals->_checkDistanceFl = true;  			_vm->_objectsManager->_oldCharacterPosX = _vm->_objectsManager->getSpriteX(0); -			_vm->_globals->_oldDirection = DIR_NONE; +			_vm->_objectsManager->resetOldDirection();  			_vm->_objectsManager->resetHomeRateCounter();  			_vm->_globals->_checkDistanceFl = true;  			_vm->_linesManager->_route = (RouteItem *)g_PTRNUL; | 
